Commit 7d111abf authored by holyfoot/hf@mysql.com/hfmain.(none)'s avatar holyfoot/hf@mysql.com/hfmain.(none)
Browse files

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.
parent 29ea825e
Loading
Loading
Loading
Loading
+25 −1
Original line number Diff line number Diff line
@@ -668,7 +668,7 @@ def test t1 t1 g g 255 4294967295 0 Y 144 0 63
g
select asbinary(g) from t1;
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)
drop table t1;
create table t1 (a TEXT, b GEOMETRY NOT NULL, SPATIAL KEY(b));
@@ -730,4 +730,28 @@ select geomfromtext(col9,col89) as a from t1;
a
NULL
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
+31 −0
Original line number Diff line number Diff line
@@ -427,4 +427,35 @@ INSERT INTO `t1` VALUES ('','0000-00-00');
select geomfromtext(col9,col89) as a from 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
+1 −1
Original line number Diff line number Diff line
@@ -6975,7 +6975,7 @@ uint32 Field_blob::max_length()
  case 3:
    return 16777215 * field_charset->mbmaxlen;
  case 4:
    return (uint32) 4294967295U;
    return max_field_size;
  default:
    DBUG_ASSERT(0); // we should never go here
    return 0;
+1 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@

#define NOT_FIXED_DEC			31
#define DATETIME_DEC                     6
const uint32 max_field_size= (uint32) 4294967295U;

class Send_field;
class Protocol;
+1 −1
Original line number Diff line number Diff line
@@ -29,7 +29,7 @@ void Item_geometry_func::fix_length_and_dec()
{
  collation.set(&my_charset_bin);
  decimals=0;
  max_length=MAX_BLOB_WIDTH;
  max_length= max_field_size;
  maybe_null= 1;
}