Loading mysql-test/r/gis.result +7 −2 Original line number Diff line number Diff line Loading @@ -574,11 +574,11 @@ INSERT INTO t1 VALUES(GeomFromText('POINT(367894677 368542487)')); INSERT INTO t1 VALUES(GeomFromText('POINT(580848489 219587743)')); INSERT INTO t1 VALUES(GeomFromText('POINT(11247614 782797569)')); drop table t1; create table t1 select POINT(1,3); create table t1 select GeomFromWKB(POINT(1,3)); show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `POINT(1,3)` longblob NOT NULL `GeomFromWKB(POINT(1,3))` geometry NOT NULL default '' ) ENGINE=MyISAM DEFAULT CHARSET=latin1 drop table t1; CREATE TABLE `t1` (`object_id` bigint(20) unsigned NOT NULL default '0', `geo` Loading Loading @@ -704,3 +704,8 @@ Catalog Database Table Table_alias Column Column_alias Type Length Max length Is def asbinary(g) 252 8192 0 Y 128 0 63 asbinary(g) drop table t1; create table t1 select GeomFromText('point(1 1)'); desc t1; Field Type Null Key Default Extra GeomFromText('point(1 1)') geometry NO drop table t1; mysql-test/t/gis.test +7 −1 Original line number Diff line number Diff line Loading @@ -281,7 +281,7 @@ INSERT INTO t1 VALUES(GeomFromText('POINT(580848489 219587743)')); INSERT INTO t1 VALUES(GeomFromText('POINT(11247614 782797569)')); drop table t1; create table t1 select POINT(1,3); create table t1 select GeomFromWKB(POINT(1,3)); show create table t1; drop table t1; Loading Loading @@ -416,3 +416,9 @@ select * from t1; select asbinary(g) from t1; --disable_metadata drop table t1; create table t1 select GeomFromText('point(1 1)'); desc t1; drop table t1; sql/item_geofunc.cc +28 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,12 @@ #ifdef HAVE_SPATIAL #include <m_ctype.h> Field *Item_geometry_func::tmp_table_field(TABLE *t_arg) { return new Field_geom(max_length, maybe_null, name, t_arg, (Field::geometry_type) get_geometry_type()); } void Item_geometry_func::fix_length_and_dec() { collation.set(&my_charset_bin); Loading @@ -32,6 +38,10 @@ void Item_geometry_func::fix_length_and_dec() max_length=MAX_BLOB_WIDTH; } int Item_geometry_func::get_geometry_type() const { return (int)Field::GEOM_GEOMETRY; } String *Item_func_geometry_from_text::val_str(String *str) { Loading Loading @@ -152,6 +162,12 @@ String *Item_func_geometry_type::val_str(String *str) } int Item_func_envelope::get_geometry_type() const { return (int) Field::GEOM_POLYGON; } String *Item_func_envelope::val_str(String *str) { DBUG_ASSERT(fixed == 1); Loading @@ -176,6 +192,12 @@ String *Item_func_envelope::val_str(String *str) } int Item_func_centroid::get_geometry_type() const { return (int) Field::GEOM_POINT; } String *Item_func_centroid::val_str(String *str) { DBUG_ASSERT(fixed == 1); Loading Loading @@ -310,6 +332,12 @@ String *Item_func_spatial_decomp_n::val_str(String *str) */ int Item_func_point::get_geometry_type() const { return (int) Field::GEOM_POINT; } String *Item_func_point::val_str(String *str) { DBUG_ASSERT(fixed == 1); Loading sql/item_geofunc.h +5 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,8 @@ class Item_geometry_func: public Item_str_func Item_geometry_func(List<Item> &list) :Item_str_func(list) {} void fix_length_and_dec(); enum_field_types field_type() const { return MYSQL_TYPE_GEOMETRY; } Field *tmp_table_field(TABLE *t_arg); virtual int get_geometry_type() const; }; class Item_func_geometry_from_text: public Item_geometry_func Loading Loading @@ -89,6 +91,7 @@ class Item_func_centroid: public Item_geometry_func Item_func_centroid(Item *a): Item_geometry_func(a) {} const char *func_name() const { return "centroid"; } String *val_str(String *); int get_geometry_type() const; }; class Item_func_envelope: public Item_geometry_func Loading @@ -97,6 +100,7 @@ class Item_func_envelope: public Item_geometry_func Item_func_envelope(Item *a): Item_geometry_func(a) {} const char *func_name() const { return "envelope"; } String *val_str(String *); int get_geometry_type() const; }; class Item_func_point: public Item_geometry_func Loading @@ -106,6 +110,7 @@ class Item_func_point: public Item_geometry_func Item_func_point(Item *a, Item *b, Item *srid): Item_geometry_func(a, b, srid) {} const char *func_name() const { return "point"; } String *val_str(String *); int get_geometry_type() const; }; class Item_func_spatial_decomp: public Item_geometry_func Loading Loading
mysql-test/r/gis.result +7 −2 Original line number Diff line number Diff line Loading @@ -574,11 +574,11 @@ INSERT INTO t1 VALUES(GeomFromText('POINT(367894677 368542487)')); INSERT INTO t1 VALUES(GeomFromText('POINT(580848489 219587743)')); INSERT INTO t1 VALUES(GeomFromText('POINT(11247614 782797569)')); drop table t1; create table t1 select POINT(1,3); create table t1 select GeomFromWKB(POINT(1,3)); show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `POINT(1,3)` longblob NOT NULL `GeomFromWKB(POINT(1,3))` geometry NOT NULL default '' ) ENGINE=MyISAM DEFAULT CHARSET=latin1 drop table t1; CREATE TABLE `t1` (`object_id` bigint(20) unsigned NOT NULL default '0', `geo` Loading Loading @@ -704,3 +704,8 @@ Catalog Database Table Table_alias Column Column_alias Type Length Max length Is def asbinary(g) 252 8192 0 Y 128 0 63 asbinary(g) drop table t1; create table t1 select GeomFromText('point(1 1)'); desc t1; Field Type Null Key Default Extra GeomFromText('point(1 1)') geometry NO drop table t1;
mysql-test/t/gis.test +7 −1 Original line number Diff line number Diff line Loading @@ -281,7 +281,7 @@ INSERT INTO t1 VALUES(GeomFromText('POINT(580848489 219587743)')); INSERT INTO t1 VALUES(GeomFromText('POINT(11247614 782797569)')); drop table t1; create table t1 select POINT(1,3); create table t1 select GeomFromWKB(POINT(1,3)); show create table t1; drop table t1; Loading Loading @@ -416,3 +416,9 @@ select * from t1; select asbinary(g) from t1; --disable_metadata drop table t1; create table t1 select GeomFromText('point(1 1)'); desc t1; drop table t1;
sql/item_geofunc.cc +28 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,12 @@ #ifdef HAVE_SPATIAL #include <m_ctype.h> Field *Item_geometry_func::tmp_table_field(TABLE *t_arg) { return new Field_geom(max_length, maybe_null, name, t_arg, (Field::geometry_type) get_geometry_type()); } void Item_geometry_func::fix_length_and_dec() { collation.set(&my_charset_bin); Loading @@ -32,6 +38,10 @@ void Item_geometry_func::fix_length_and_dec() max_length=MAX_BLOB_WIDTH; } int Item_geometry_func::get_geometry_type() const { return (int)Field::GEOM_GEOMETRY; } String *Item_func_geometry_from_text::val_str(String *str) { Loading Loading @@ -152,6 +162,12 @@ String *Item_func_geometry_type::val_str(String *str) } int Item_func_envelope::get_geometry_type() const { return (int) Field::GEOM_POLYGON; } String *Item_func_envelope::val_str(String *str) { DBUG_ASSERT(fixed == 1); Loading @@ -176,6 +192,12 @@ String *Item_func_envelope::val_str(String *str) } int Item_func_centroid::get_geometry_type() const { return (int) Field::GEOM_POINT; } String *Item_func_centroid::val_str(String *str) { DBUG_ASSERT(fixed == 1); Loading Loading @@ -310,6 +332,12 @@ String *Item_func_spatial_decomp_n::val_str(String *str) */ int Item_func_point::get_geometry_type() const { return (int) Field::GEOM_POINT; } String *Item_func_point::val_str(String *str) { DBUG_ASSERT(fixed == 1); Loading
sql/item_geofunc.h +5 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,8 @@ class Item_geometry_func: public Item_str_func Item_geometry_func(List<Item> &list) :Item_str_func(list) {} void fix_length_and_dec(); enum_field_types field_type() const { return MYSQL_TYPE_GEOMETRY; } Field *tmp_table_field(TABLE *t_arg); virtual int get_geometry_type() const; }; class Item_func_geometry_from_text: public Item_geometry_func Loading Loading @@ -89,6 +91,7 @@ class Item_func_centroid: public Item_geometry_func Item_func_centroid(Item *a): Item_geometry_func(a) {} const char *func_name() const { return "centroid"; } String *val_str(String *); int get_geometry_type() const; }; class Item_func_envelope: public Item_geometry_func Loading @@ -97,6 +100,7 @@ class Item_func_envelope: public Item_geometry_func Item_func_envelope(Item *a): Item_geometry_func(a) {} const char *func_name() const { return "envelope"; } String *val_str(String *); int get_geometry_type() const; }; class Item_func_point: public Item_geometry_func Loading @@ -106,6 +110,7 @@ class Item_func_point: public Item_geometry_func Item_func_point(Item *a, Item *b, Item *srid): Item_geometry_func(a, b, srid) {} const char *func_name() const { return "point"; } String *val_str(String *); int get_geometry_type() const; }; class Item_func_spatial_decomp: public Item_geometry_func Loading