Commit eb347921 authored by unknown's avatar unknown

Bug #31158 Spatial, Union, LONGBLOB vs BLOB bug (crops data)

max_length parameter for BLOB-returning functions must be big enough
for any possible content. Otherwise the field created for a table
will be too small.


mysql-test/r/gis.result:
  Bug #31158  Spatial, Union, LONGBLOB vs BLOB bug (crops data)
  
  test result
mysql-test/t/gis.test:
  Bug #31158  Spatial, Union, LONGBLOB vs BLOB bug (crops data)
  
  test case
sql/field.cc:
  Bug #31158  Spatial, Union, LONGBLOB vs BLOB bug (crops data)
  
  max_field_size used instead of numeric value
sql/field.h:
  Bug #31158  Spatial, Union, LONGBLOB vs BLOB bug (crops data)
  
  max_field_size constant defined
sql/item_geofunc.cc:
  Bug #31158  Spatial, Union, LONGBLOB vs BLOB bug (crops data)
  
  max_length parameter fixed
parent 31634a38
...@@ -668,7 +668,7 @@ def test t1 t1 g g 255 4294967295 0 Y 144 0 63 ...@@ -668,7 +668,7 @@ def test t1 t1 g g 255 4294967295 0 Y 144 0 63
g g
select asbinary(g) from t1; select asbinary(g) from t1;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr 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 def asbinary(g) 252 4294967295 0 Y 128 0 63
asbinary(g) asbinary(g)
drop table t1; drop table t1;
create table t1 (a TEXT, b GEOMETRY NOT NULL, SPATIAL KEY(b)); create table t1 (a TEXT, b GEOMETRY NOT NULL, SPATIAL KEY(b));
...@@ -730,4 +730,28 @@ select geomfromtext(col9,col89) as a from t1; ...@@ -730,4 +730,28 @@ select geomfromtext(col9,col89) as a from t1;
a a
NULL NULL
DROP TABLE t1; DROP TABLE t1;
CREATE TABLE t1 (
geomdata polygon NOT NULL,
SPATIAL KEY index_geom (geomdata)
) ENGINE=MyISAM DEFAULT CHARSET=latin2 DELAY_KEY_WRITE=1 ROW_FORMAT=FIXED;
CREATE TABLE t2 (
geomdata polygon NOT NULL,
SPATIAL KEY index_geom (geomdata)
) ENGINE=MyISAM DEFAULT CHARSET=latin2 DELAY_KEY_WRITE=1 ROW_FORMAT=FIXED;
CREATE TABLE t3
select
aswkb(ws.geomdata) AS geomdatawkb
from
t1 ws
union
select
aswkb(ws.geomdata) AS geomdatawkb
from
t2 ws;
describe t3;
Field Type Null Key Default Extra
geomdatawkb longblob YES NULL
drop table t1;
drop table t2;
drop table t3;
End of 4.1 tests End of 4.1 tests
...@@ -427,4 +427,35 @@ INSERT INTO `t1` VALUES ('','0000-00-00'); ...@@ -427,4 +427,35 @@ INSERT INTO `t1` VALUES ('','0000-00-00');
select geomfromtext(col9,col89) as a from t1; select geomfromtext(col9,col89) as a from t1;
DROP TABLE t1; DROP TABLE t1;
#
# Bug #31158 Spatial, Union, LONGBLOB vs BLOB bug (crops data)
#
CREATE TABLE t1 (
geomdata polygon NOT NULL,
SPATIAL KEY index_geom (geomdata)
) ENGINE=MyISAM DEFAULT CHARSET=latin2 DELAY_KEY_WRITE=1 ROW_FORMAT=FIXED;
CREATE TABLE t2 (
geomdata polygon NOT NULL,
SPATIAL KEY index_geom (geomdata)
) ENGINE=MyISAM DEFAULT CHARSET=latin2 DELAY_KEY_WRITE=1 ROW_FORMAT=FIXED;
CREATE TABLE t3
select
aswkb(ws.geomdata) AS geomdatawkb
from
t1 ws
union
select
aswkb(ws.geomdata) AS geomdatawkb
from
t2 ws;
describe t3;
drop table t1;
drop table t2;
drop table t3;
--echo End of 4.1 tests --echo End of 4.1 tests
...@@ -6975,7 +6975,7 @@ uint32 Field_blob::max_length() ...@@ -6975,7 +6975,7 @@ uint32 Field_blob::max_length()
case 3: case 3:
return 16777215 * field_charset->mbmaxlen; return 16777215 * field_charset->mbmaxlen;
case 4: case 4:
return (uint32) 4294967295U; return max_field_size;
default: default:
DBUG_ASSERT(0); // we should never go here DBUG_ASSERT(0); // we should never go here
return 0; return 0;
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#define NOT_FIXED_DEC 31 #define NOT_FIXED_DEC 31
#define DATETIME_DEC 6 #define DATETIME_DEC 6
const uint32 max_field_size= (uint32) 4294967295U;
class Send_field; class Send_field;
class Protocol; class Protocol;
......
...@@ -29,7 +29,7 @@ void Item_geometry_func::fix_length_and_dec() ...@@ -29,7 +29,7 @@ void Item_geometry_func::fix_length_and_dec()
{ {
collation.set(&my_charset_bin); collation.set(&my_charset_bin);
decimals=0; decimals=0;
max_length=MAX_BLOB_WIDTH; max_length= max_field_size;
maybe_null= 1; maybe_null= 1;
} }
......
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