From: Date: July 4 2006 9:57am Subject: bk commit into 5.0 tree (holyfoot:1.2212) BUG#14807 List-Archive: http://lists.mysql.com/commits/8677 X-Bug: 14807 Message-Id: <20060704075704.B4986700003@deer.myoffice.izhnet.ru> Below is the list of changes that have just been committed into a local 5.0 repository of hf. When hf does a push these changes will be propagated to the main repository and, within 24 hours after the push, to the public repository. For information on how to access the public repository see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html ChangeSet 1.2212 06/07/04 12:56:53 holyfoot@deer.(none) +4 -0 bug #14807 (GeomFromText() should return MYSQL_TYPE_GEOMETRY) we didn't have code creating GEOMETRY-type fields from Items (expression results) So i added this code sql/item_geofunc.h 1.12 06/07/04 12:53:54 holyfoot@stripped +5 -0 tmp_table_field() and get_geometry_type() declared sql/item_geofunc.cc 1.27 06/07/04 12:53:50 holyfoot@stripped +28 -0 Item_geometry_func::tmp_table_field implemented mysql-test/t/gis.test 1.28 06/07/04 12:53:46 holyfoot@stripped +7 -1 testcase added mysql-test/r/gis.result 1.33 06/07/04 12:53:38 holyfoot@stripped +7 -2 test result fixed # This is a BitKeeper patch. What follows are the unified diffs for the # set of deltas contained in the patch. The rest of the patch, the part # that BitKeeper cares about, is below these diffs. # User: holyfoot # Host: deer.(none) # Root: /home/hf/work/mysql-5.0.14807 --- 1.32/mysql-test/r/gis.result Tue Jun 27 16:58:55 2006 +++ 1.33/mysql-test/r/gis.result Tue Jul 4 12:53:38 2006 @@ -574,11 +574,11 @@ 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` @@ -703,4 +703,9 @@ Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr 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; --- 1.27/mysql-test/t/gis.test Tue Jun 27 16:58:55 2006 +++ 1.28/mysql-test/t/gis.test Tue Jul 4 12:53:46 2006 @@ -281,7 +281,7 @@ 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; @@ -416,3 +416,9 @@ select asbinary(g) from t1; --disable_metadata drop table t1; + + +create table t1 select GeomFromText('point(1 1)'); +desc t1; +drop table t1; + --- 1.26/sql/item_geofunc.cc Mon Oct 31 13:42:28 2005 +++ 1.27/sql/item_geofunc.cc Tue Jul 4 12:53:50 2006 @@ -25,6 +25,12 @@ #ifdef HAVE_SPATIAL #include +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); @@ -32,6 +38,10 @@ 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) { @@ -152,6 +162,12 @@ } +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); @@ -176,6 +192,12 @@ } +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); @@ -308,6 +330,12 @@ /* * Concatenate doubles into Point */ + + +int Item_func_point::get_geometry_type() const +{ + return (int) Field::GEOM_POINT; +} String *Item_func_point::val_str(String *str) --- 1.11/sql/item_geofunc.h Mon Jun 26 22:22:43 2006 +++ 1.12/sql/item_geofunc.h Tue Jul 4 12:53:54 2006 @@ -33,6 +33,8 @@ Item_geometry_func(List &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 @@ -89,6 +91,7 @@ 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 @@ -97,6 +100,7 @@ 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 @@ -106,6 +110,7 @@ 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