Commit a6132c6f authored by unknown's avatar unknown

Conflicts resolved


sql/field.cc:
  Auto merged
sql/mysql_priv.h:
  Auto merged
sql/sql_table.cc:
  Auto merged
sql/sql_yacc.yy:
  Auto merged
sql/table.cc:
  Auto merged
include/mysqld_error.h:
  merging
sql/share/english/errmsg.txt:
  merging
parents 2320323a 87b3ca5f
...@@ -1168,4 +1168,6 @@ typedef union { ...@@ -1168,4 +1168,6 @@ typedef union {
#define MYSQL_UNIVERSAL_CLIENT_CHARSET MYSQL_DEFAULT_CHARSET_NAME #define MYSQL_UNIVERSAL_CLIENT_CHARSET MYSQL_DEFAULT_CHARSET_NAME
#endif #endif
#define HAVE_SPATIAL
#define HAVE_RTREE_KEYS
#endif /* my_global_h */ #endif /* my_global_h */
...@@ -304,4 +304,5 @@ ...@@ -304,4 +304,5 @@
#define ER_UNKNOWN_STORAGE_ENGINE 1285 #define ER_UNKNOWN_STORAGE_ENGINE 1285
#define ER_WARN_DEPRECATED_SYNTAX 1286 #define ER_WARN_DEPRECATED_SYNTAX 1286
#define ER_NON_UPDATABLE_TABLE 1287 #define ER_NON_UPDATABLE_TABLE 1287
#define ER_ERROR_MESSAGES 288 #define ER_FEATURE_DISABLED 1288
#define ER_ERROR_MESSAGES 289
...@@ -4465,7 +4465,7 @@ Field_blob::Field_blob(char *ptr_arg, uchar *null_ptr_arg, uchar null_bit_arg, ...@@ -4465,7 +4465,7 @@ Field_blob::Field_blob(char *ptr_arg, uchar *null_ptr_arg, uchar null_bit_arg,
:Field_str(ptr_arg, (1L << min(blob_pack_length,3)*8)-1L, :Field_str(ptr_arg, (1L << min(blob_pack_length,3)*8)-1L,
null_ptr_arg, null_bit_arg, unireg_check_arg, field_name_arg, null_ptr_arg, null_bit_arg, unireg_check_arg, field_name_arg,
table_arg, cs), table_arg, cs),
geom_flag(true), packlength(blob_pack_length) packlength(blob_pack_length)
{ {
flags|= BLOB_FLAG; flags|= BLOB_FLAG;
if (table) if (table)
...@@ -4703,6 +4703,7 @@ void Field_blob::get_key_image(char *buff,uint length, ...@@ -4703,6 +4703,7 @@ void Field_blob::get_key_image(char *buff,uint length,
uint32 blob_length= get_length(ptr); uint32 blob_length= get_length(ptr);
char *blob; char *blob;
#ifdef HAVE_SPATIAL
if (type == itMBR) if (type == itMBR)
{ {
if (!blob_length) if (!blob_length)
...@@ -4719,6 +4720,7 @@ void Field_blob::get_key_image(char *buff,uint length, ...@@ -4719,6 +4720,7 @@ void Field_blob::get_key_image(char *buff,uint length,
float8store(buff+24, mbr.ymax); float8store(buff+24, mbr.ymax);
return; return;
} }
#endif /*HAVE_SPATIAL*/
if ((uint32) length > blob_length) if ((uint32) length > blob_length)
{ {
...@@ -4928,6 +4930,7 @@ uint Field_blob::max_packed_col_length(uint max_length) ...@@ -4928,6 +4930,7 @@ uint Field_blob::max_packed_col_length(uint max_length)
return (max_length > 255 ? 2 : 1)+max_length; return (max_length > 255 ? 2 : 1)+max_length;
} }
#ifdef HAVE_SPATIAL
void Field_geom::get_key_image(char *buff, uint length, CHARSET_INFO *cs, void Field_geom::get_key_image(char *buff, uint length, CHARSET_INFO *cs,
imagetype type) imagetype type)
...@@ -5011,6 +5014,7 @@ int Field_geom::store(const char *from, uint length, CHARSET_INFO *cs) ...@@ -5011,6 +5014,7 @@ int Field_geom::store(const char *from, uint length, CHARSET_INFO *cs)
return 0; return 0;
} }
#endif /*HAVE_SPATIAL*/
/**************************************************************************** /****************************************************************************
** enum type. ** enum type.
...@@ -5486,10 +5490,12 @@ Field *make_field(char *ptr, uint32 field_length, ...@@ -5486,10 +5490,12 @@ Field *make_field(char *ptr, uint32 field_length,
f_packtype(pack_flag), f_packtype(pack_flag),
field_length); field_length);
#ifdef HAVE_SPATIAL
if (f_is_geom(pack_flag)) if (f_is_geom(pack_flag))
return new Field_geom(ptr,null_pos,null_bit, return new Field_geom(ptr,null_pos,null_bit,
unireg_check, field_name, table, unireg_check, field_name, table,
pack_length, geom_type); pack_length, geom_type);
#endif
if (f_is_blob(pack_flag)) if (f_is_blob(pack_flag))
return new Field_blob(ptr,null_pos,null_bit, return new Field_blob(ptr,null_pos,null_bit,
unireg_check, field_name, table, unireg_check, field_name, table,
...@@ -5649,10 +5655,12 @@ create_field::create_field(Field *old_field,Field *orig_field) ...@@ -5649,10 +5655,12 @@ create_field::create_field(Field *old_field,Field *orig_field)
def=new Item_string(pos,tmp.length(), charset); def=new Item_string(pos,tmp.length(), charset);
} }
} }
#ifdef HAVE_SPATIAL
if (sql_type == FIELD_TYPE_GEOMETRY) if (sql_type == FIELD_TYPE_GEOMETRY)
{ {
geom_type= ((Field_geom*)old_field)->geom_type; geom_type= ((Field_geom*)old_field)->geom_type;
} }
#endif
} }
......
...@@ -913,7 +913,6 @@ class Field_varstring :public Field_str { ...@@ -913,7 +913,6 @@ class Field_varstring :public Field_str {
class Field_blob :public Field_str { class Field_blob :public Field_str {
bool geom_flag;
protected: protected:
uint packlength; uint packlength;
String value; // For temporaries String value; // For temporaries
...@@ -926,7 +925,7 @@ class Field_blob :public Field_str { ...@@ -926,7 +925,7 @@ class Field_blob :public Field_str {
struct st_table *table_arg, CHARSET_INFO *cs) struct st_table *table_arg, CHARSET_INFO *cs)
:Field_str((char*) 0,len_arg, maybe_null_arg ? (uchar*) "": 0,0, :Field_str((char*) 0,len_arg, maybe_null_arg ? (uchar*) "": 0,0,
NONE, field_name_arg, table_arg, cs), NONE, field_name_arg, table_arg, cs),
geom_flag(true), packlength(4) packlength(4)
{ {
flags|= BLOB_FLAG; flags|= BLOB_FLAG;
} }
...@@ -1001,7 +1000,7 @@ class Field_blob :public Field_str { ...@@ -1001,7 +1000,7 @@ class Field_blob :public Field_str {
field_cast_enum field_cast_type() { return FIELD_CAST_BLOB; } field_cast_enum field_cast_type() { return FIELD_CAST_BLOB; }
}; };
#ifdef HAVE_SPATIAL
class Field_geom :public Field_blob { class Field_geom :public Field_blob {
public: public:
enum geometry_type geom_type; enum geometry_type geom_type;
...@@ -1029,7 +1028,7 @@ class Field_geom :public Field_blob { ...@@ -1029,7 +1028,7 @@ class Field_geom :public Field_blob {
void set_key_image(char *buff,uint length, CHARSET_INFO *cs); void set_key_image(char *buff,uint length, CHARSET_INFO *cs);
field_cast_enum field_cast_type() { return FIELD_CAST_GEOM; } field_cast_enum field_cast_type() { return FIELD_CAST_GEOM; }
}; };
#endif /*HAVE_SPATIAL*/
class Field_enum :public Field_str { class Field_enum :public Field_str {
protected: protected:
......
...@@ -81,9 +81,10 @@ So, we can read full search-structure as 32-bit word ...@@ -81,9 +81,10 @@ So, we can read full search-structure as 32-bit word
#endif #endif
#include <my_getopt.h> #include <my_getopt.h>
#include "mysql_version.h" #include "mysql_version.h"
#include "mysql_priv.h"
#include "lex.h" #include "lex.h"
static struct my_option my_long_options[] = struct my_option my_long_options[] =
{ {
{"help", '?', "Display help and exit", {"help", '?', "Display help and exit",
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
......
...@@ -487,6 +487,7 @@ Item *create_func_quote(Item* a) ...@@ -487,6 +487,7 @@ Item *create_func_quote(Item* a)
return new Item_func_quote(a); return new Item_func_quote(a);
} }
#ifdef HAVE_SPATIAL
Item *create_func_as_wkt(Item *a) Item *create_func_as_wkt(Item *a)
{ {
return new Item_func_as_wkt(a); return new Item_func_as_wkt(a);
...@@ -646,6 +647,7 @@ Item *create_func_point(Item *a, Item *b) ...@@ -646,6 +647,7 @@ Item *create_func_point(Item *a, Item *b)
{ {
return new Item_func_point(a, b); return new Item_func_point(a, b);
} }
#endif /*HAVE_SPATIAL*/
Item *create_func_crc32(Item* a) Item *create_func_crc32(Item* a)
{ {
......
...@@ -99,6 +99,8 @@ Item *create_func_is_free_lock(Item* a); ...@@ -99,6 +99,8 @@ Item *create_func_is_free_lock(Item* a);
Item *create_func_is_used_lock(Item* a); Item *create_func_is_used_lock(Item* a);
Item *create_func_quote(Item* a); Item *create_func_quote(Item* a);
#ifdef HAVE_SPATIAL
Item *create_func_geometry_from_text(Item *a); Item *create_func_geometry_from_text(Item *a);
Item *create_func_as_wkt(Item *a); Item *create_func_as_wkt(Item *a);
Item *create_func_as_wkb(Item *a); Item *create_func_as_wkb(Item *a);
...@@ -138,6 +140,8 @@ Item *create_func_numgeometries(Item *a); ...@@ -138,6 +140,8 @@ Item *create_func_numgeometries(Item *a);
Item *create_func_point(Item *a, Item *b); Item *create_func_point(Item *a, Item *b);
#endif /*HAVE_SPATIAL*/
Item *create_func_compress(Item *a); Item *create_func_compress(Item *a);
Item *create_func_uncompress(Item *a); Item *create_func_uncompress(Item *a);
Item *create_func_uncompressed_length(Item *a); Item *create_func_uncompressed_length(Item *a);
......
...@@ -22,6 +22,8 @@ ...@@ -22,6 +22,8 @@
#endif #endif
#include "mysql_priv.h" #include "mysql_priv.h"
#ifdef HAVE_SPATIAL
#include "sql_acl.h" #include "sql_acl.h"
#include <m_ctype.h> #include <m_ctype.h>
...@@ -651,3 +653,5 @@ longlong Item_func_srid::val_int() ...@@ -651,3 +653,5 @@ longlong Item_func_srid::val_int()
uint32 res= uint4korr(swkb->ptr()); uint32 res= uint4korr(swkb->ptr());
return (longlong) res; return (longlong) res;
} }
#endif /*HAVE_SPATIAL*/
...@@ -17,6 +17,8 @@ ...@@ -17,6 +17,8 @@
/* This file defines all spatial functions */ /* This file defines all spatial functions */
#ifdef HAVE_SPATIAL
#ifdef __GNUC__ #ifdef __GNUC__
#pragma interface /* gcc class implementation */ #pragma interface /* gcc class implementation */
#endif #endif
...@@ -338,3 +340,12 @@ class Item_func_srid: public Item_int_func ...@@ -338,3 +340,12 @@ class Item_func_srid: public Item_int_func
const char *func_name() const { return "srid"; } const char *func_name() const { return "srid"; }
void fix_length_and_dec() { max_length= 10; } void fix_length_and_dec() { max_length= 10; }
}; };
#define GEOM_NEW(obj_constructor) new obj_constructor
#else /*HAVE_SPATIAL*/
#define GEOM_NEW(obj_constructor) NULL
#endif
This diff is collapsed.
...@@ -20,11 +20,14 @@ ...@@ -20,11 +20,14 @@
#ifndef _lex_symbol_h #ifndef _lex_symbol_h
#define _lex_symbol_h #define _lex_symbol_h
struct st_sym_group;
typedef struct st_symbol { typedef struct st_symbol {
const char *name; const char *name;
uint tok; uint tok;
uint length; uint length;
void *create_func; void *create_func;
struct st_sym_group *group;
} SYMBOL; } SYMBOL;
typedef struct st_lex_symbol typedef struct st_lex_symbol
......
...@@ -1105,3 +1105,12 @@ inline void setup_table_map(TABLE *table, TABLE_LIST *table_list, uint tablenr) ...@@ -1105,3 +1105,12 @@ inline void setup_table_map(TABLE *table, TABLE_LIST *table_list, uint tablenr)
table->map= (table_map) 1 << tablenr; table->map= (table_map) 1 << tablenr;
table->force_index= table_list->force_index; table->force_index= table_list->force_index;
} }
typedef struct st_sym_group {
const char *name;
const char *needed_define;
} SYM_GROUP;
extern SYM_GROUP sym_group_common;
extern SYM_GROUP sym_group_geom;
extern SYM_GROUP sym_group_rtree;
...@@ -291,3 +291,4 @@ character-set=latin1 ...@@ -291,3 +291,4 @@ character-set=latin1
"Unknown table engine '%s'", "Unknown table engine '%s'",
"'%s' is deprecated. Use '%s' instead.", "'%s' is deprecated. Use '%s' instead.",
"The target table %-.100s of the %s is not updatable.", "The target table %-.100s of the %s is not updatable.",
"The '%s' feature was disabled. You need MySQL built with '%s' define to have it working"
...@@ -510,6 +510,7 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name, ...@@ -510,6 +510,7 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name,
blob_columns++; blob_columns++;
break; break;
case FIELD_TYPE_GEOMETRY: case FIELD_TYPE_GEOMETRY:
#ifdef HAVE_SPATIAL
if (!(file->table_flags() & HA_HAS_GEOMETRY)) if (!(file->table_flags() & HA_HAS_GEOMETRY))
{ {
my_printf_error(ER_CHECK_NOT_IMPLEMENTED, ER(ER_CHECK_NOT_IMPLEMENTED), my_printf_error(ER_CHECK_NOT_IMPLEMENTED, ER(ER_CHECK_NOT_IMPLEMENTED),
...@@ -525,6 +526,11 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name, ...@@ -525,6 +526,11 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name,
sql_field->unireg_check=Field::BLOB_FIELD; sql_field->unireg_check=Field::BLOB_FIELD;
blob_columns++; blob_columns++;
break; break;
#else
my_printf_error(ER_FEATURE_DISABLED,ER(ER_FEATURE_DISABLED), MYF(0),
sym_group_geom.name, sym_group_geom.needed_define);
DBUG_RETURN(-1);
#endif /*HAVE_SPATIAL*/
case FIELD_TYPE_VAR_STRING: case FIELD_TYPE_VAR_STRING:
case FIELD_TYPE_STRING: case FIELD_TYPE_STRING:
sql_field->pack_flag=0; sql_field->pack_flag=0;
...@@ -658,8 +664,14 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name, ...@@ -658,8 +664,14 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name,
key_info->flags = HA_FULLTEXT; key_info->flags = HA_FULLTEXT;
break; break;
case Key::SPATIAL: case Key::SPATIAL:
#ifdef HAVE_SPATIAL
key_info->flags = HA_SPATIAL; key_info->flags = HA_SPATIAL;
break; break;
#else
my_printf_error(ER_FEATURE_DISABLED,ER(ER_FEATURE_DISABLED),MYF(0),
sym_group_geom.name, sym_group_geom.needed_define);
DBUG_RETURN(-1);
#endif
case Key::FOREIGN_KEY: case Key::FOREIGN_KEY:
key_number--; // Skip this key key_number--; // Skip this key
continue; continue;
...@@ -698,8 +710,10 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name, ...@@ -698,8 +710,10 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name,
DBUG_RETURN(-1); DBUG_RETURN(-1);
} }
} }
else if (key_info->algorithm == HA_KEY_ALG_RTREE) else
if (key_info->algorithm == HA_KEY_ALG_RTREE)
{ {
#ifdef HAVE_RTREE_KEYS
if ((key_info->key_parts & 1) == 1) if ((key_info->key_parts & 1) == 1)
{ {
my_printf_error(ER_WRONG_ARGUMENTS, my_printf_error(ER_WRONG_ARGUMENTS,
...@@ -710,6 +724,11 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name, ...@@ -710,6 +724,11 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name,
my_printf_error(ER_NOT_SUPPORTED_YET, ER(ER_NOT_SUPPORTED_YET), my_printf_error(ER_NOT_SUPPORTED_YET, ER(ER_NOT_SUPPORTED_YET),
MYF(0), "RTREE INDEX"); MYF(0), "RTREE INDEX");
DBUG_RETURN(-1); DBUG_RETURN(-1);
#else
my_printf_error(ER_FEATURE_DISABLED,ER(ER_FEATURE_DISABLED),MYF(0),
sym_group_rtree.name, sym_group_rtree.needed_define);
DBUG_RETURN(-1);
#endif
} }
List_iterator<key_part_spec> cols(key->columns); List_iterator<key_part_spec> cols(key->columns);
...@@ -779,6 +798,7 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name, ...@@ -779,6 +798,7 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name,
DBUG_RETURN(-1); DBUG_RETURN(-1);
} }
} }
#ifdef HAVE_SPATIAL
if (key->type == Key::SPATIAL) if (key->type == Key::SPATIAL)
{ {
if (!column->length ) if (!column->length )
...@@ -790,6 +810,7 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name, ...@@ -790,6 +810,7 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name,
column->length=4*sizeof(double); column->length=4*sizeof(double);
} }
} }
#endif
if (!(sql_field->flags & NOT_NULL_FLAG)) if (!(sql_field->flags & NOT_NULL_FLAG))
{ {
if (key->type == Key::PRIMARY) if (key->type == Key::PRIMARY)
...@@ -834,6 +855,7 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name, ...@@ -834,6 +855,7 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name,
DBUG_RETURN(-1); DBUG_RETURN(-1);
} }
} }
/* TODO HF What's this for??? */
else if (f_is_geom(sql_field->pack_flag)) else if (f_is_geom(sql_field->pack_flag))
{ {
} }
......
This diff is collapsed.
...@@ -405,8 +405,13 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag, ...@@ -405,8 +405,13 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag,
// charset and geometry_type share the same byte in frm // charset and geometry_type share the same byte in frm
if (field_type == FIELD_TYPE_GEOMETRY) if (field_type == FIELD_TYPE_GEOMETRY)
{ {
#ifdef HAVE_SPATIAL
geom_type= (Field::geometry_type) strpos[14]; geom_type= (Field::geometry_type) strpos[14];
charset= &my_charset_bin; charset= &my_charset_bin;
#else
error= 4; // unsupported field type
goto err_not_open;
#endif
} }
else else
{ {
......
...@@ -471,7 +471,12 @@ static bool pack_fields(File file,List<create_field> &create_fields) ...@@ -471,7 +471,12 @@ static bool pack_fields(File file,List<create_field> &create_fields)
buff[12]= (uchar) field->interval_id; buff[12]= (uchar) field->interval_id;
buff[13]= (uchar) field->sql_type; buff[13]= (uchar) field->sql_type;
if (field->sql_type == FIELD_TYPE_GEOMETRY) if (field->sql_type == FIELD_TYPE_GEOMETRY)
{
buff[14]= (uchar) field->geom_type; buff[14]= (uchar) field->geom_type;
#ifndef HAVE_SPATIAL
DBUG_ASSERT(0); // Should newer happen
#endif
}
else if (field->charset) else if (field->charset)
buff[14]= (uchar) field->charset->number; buff[14]= (uchar) field->charset->number;
else else
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment