mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-11692 Comparison data type aggregation for pluggable data types
This commit is contained in:
@ -45,70 +45,6 @@ repeat('a',10000) desc,
|
|||||||
repeat('a',10000)
|
repeat('a',10000)
|
||||||
with rollup
|
with rollup
|
||||||
;
|
;
|
||||||
col435
|
ERROR HY000: Illegal parameter data types int and geometry for operation '='
|
||||||
0.00000000000000000
|
|
||||||
0.00000000000000000
|
|
||||||
0.00000000000000000
|
|
||||||
Warnings:
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00k\xBF\xC0\x00\x00\x00\x00\x00j\xF8@'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x006\x0E\xFD\xB9PVh,;b\xC2\xBA\xF6$\xEE\xB0'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xAE\xDB\xC0'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00j\xF8@\x00\x00\x00\x00\x00\x00\x00\x00'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00k\xBF\xC0\x00\x00\x00\x00\x00j\xF8@'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x006\x0E\xFD\xB9PVh,;b\xC2\xBA\xF6$\xEE\xB0'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xAE\xDB\xC0'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00j\xF8@\x00\x00\x00\x00\x00\x00\x00\x00'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00k\xBF\xC0\x00\x00\x00\x00\x00j\xF8@'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x006\x0E\xFD\xB9PVh,;b\xC2\xBA\xF6$\xEE\xB0'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xAE\xDB\xC0'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00j\xF8@\x00\x00\x00\x00\x00\x00\x00\x00'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00k\xBF\xC0\x00\x00\x00\x00\x00j\xF8@'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x006\x0E\xFD\xB9PVh,;b\xC2\xBA\xF6$\xEE\xB0'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xAE\xDB\xC0'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00j\xF8@\x00\x00\x00\x00\x00\x00\x00\x00'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00k\xBF\xC0\x00\x00\x00\x00\x00j\xF8@'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x006\x0E\xFD\xB9PVh,;b\xC2\xBA\xF6$\xEE\xB0'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xAE\xDB\xC0'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00j\xF8@\x00\x00\x00\x00\x00\x00\x00\x00'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00k\xBF\xC0\x00\x00\x00\x00\x00j\xF8@'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x006\x0E\xFD\xB9PVh,;b\xC2\xBA\xF6$\xEE\xB0'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xAE\xDB\xC0'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00j\xF8@\x00\x00\x00\x00\x00\x00\x00\x00'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00k\xBF\xC0\x00\x00\x00\x00\x00j\xF8@'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x006\x0E\xFD\xB9PVh,;b\xC2\xBA\xF6$\xEE\xB0'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xAE\xDB\xC0'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00j\xF8@\x00\x00\x00\x00\x00\x00\x00\x00'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00k\xBF\xC0\x00\x00\x00\x00\x00j\xF8@'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x006\x0E\xFD\xB9PVh,;b\xC2\xBA\xF6$\xEE\xB0'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xAE\xDB\xC0'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00j\xF8@\x00\x00\x00\x00\x00\x00\x00\x00'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00k\xBF\xC0\x00\x00\x00\x00\x00j\xF8@'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x006\x0E\xFD\xB9PVh,;b\xC2\xBA\xF6$\xEE\xB0'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xAE\xDB\xC0'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00j\xF8@\x00\x00\x00\x00\x00\x00\x00\x00'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00k\xBF\xC0\x00\x00\x00\x00\x00j\xF8@'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x006\x0E\xFD\xB9PVh,;b\xC2\xBA\xF6$\xEE\xB0'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xAE\xDB\xC0'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00j\xF8@\x00\x00\x00\x00\x00\x00\x00\x00'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00k\xBF\xC0\x00\x00\x00\x00\x00j\xF8@'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x006\x0E\xFD\xB9PVh,;b\xC2\xBA\xF6$\xEE\xB0'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xAE\xDB\xC0'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00j\xF8@\x00\x00\x00\x00\x00\x00\x00\x00'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00k\xBF\xC0\x00\x00\x00\x00\x00j\xF8@'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x006\x0E\xFD\xB9PVh,;b\xC2\xBA\xF6$\xEE\xB0'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xAE\xDB\xC0'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00j\xF8@\x00\x00\x00\x00\x00\x00\x00\x00'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00k\xBF\xC0\x00\x00\x00\x00\x00j\xF8@'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x006\x0E\xFD\xB9PVh,;b\xC2\xBA\xF6$\xEE\xB0'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xAE\xDB\xC0'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00j\xF8@\x00\x00\x00\x00\x00\x00\x00\x00'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00k\xBF\xC0\x00\x00\x00\x00\x00j\xF8@'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x006\x0E\xFD\xB9PVh,;b\xC2\xBA\xF6$\xEE\xB0'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xAE\xDB\xC0'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00j\xF8@\x00\x00\x00\x00\x00\x00\x00\x00'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00k\xBF\xC0\x00\x00\x00\x00\x00j\xF8@'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x006\x0E\xFD\xB9PVh,;b\xC2\xBA\xF6$\xEE\xB0'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC0\xAE\xDB\xC0'
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00j\xF8@\x00\x00\x00\x00\x00\x00\x00\x00'
|
|
||||||
set session sort_buffer_size= default;
|
set session sort_buffer_size= default;
|
||||||
DROP TABLE t1, t2, t3;
|
DROP TABLE t1, t2, t3;
|
||||||
|
@ -305,3 +305,50 @@ ERROR HY000: Function or expression 'st_gis_debug()' cannot be used in the DEFAU
|
|||||||
#
|
#
|
||||||
# End of 10.2 tests
|
# End of 10.2 tests
|
||||||
#
|
#
|
||||||
|
#
|
||||||
|
# Start of 10.3 tests
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Comparison data type aggregation for pluggable data types
|
||||||
|
#
|
||||||
|
SET SESSION debug_dbug="+d,Item_func_in";
|
||||||
|
SET SESSION debug_dbug="+d,Predicant_to_list_comparator";
|
||||||
|
CREATE TABLE t1 (a POINT);
|
||||||
|
INSERT INTO t1 VALUES (POINT(1,1)),(POINT(1,2)),(POINT(1,3));
|
||||||
|
SELECT COUNT(*) FROM t1 WHERE a IN (POINT(1,1),POINT(10,20),POINT(10,30));
|
||||||
|
COUNT(*)
|
||||||
|
1
|
||||||
|
Warnings:
|
||||||
|
Note 1105 DBUG: [0] arg=1 handler=0 (geometry)
|
||||||
|
Note 1105 DBUG: [1] arg=2 handler=0 (geometry)
|
||||||
|
Note 1105 DBUG: [2] arg=3 handler=0 (geometry)
|
||||||
|
Note 1105 DBUG: types_compatible=yes bisect=yes
|
||||||
|
SELECT COUNT(*) FROM t1 WHERE a IN (POINT(1,1),POINT(10,20),POINT(10,30),'test');
|
||||||
|
COUNT(*)
|
||||||
|
1
|
||||||
|
Warnings:
|
||||||
|
Note 1105 DBUG: [0] arg=1 handler=0 (geometry)
|
||||||
|
Note 1105 DBUG: [1] arg=2 handler=0 (geometry)
|
||||||
|
Note 1105 DBUG: [2] arg=3 handler=0 (geometry)
|
||||||
|
Note 1105 DBUG: [3] arg=4 handler=3 (longblob)
|
||||||
|
Note 1105 DBUG: types_compatible=no bisect=no
|
||||||
|
SELECT COUNT(*) FROM t1 WHERE a IN ('test','test1');
|
||||||
|
COUNT(*)
|
||||||
|
0
|
||||||
|
Warnings:
|
||||||
|
Note 1105 DBUG: [0] arg=1 handler=0 (longblob)
|
||||||
|
Note 1105 DBUG: [1] arg=2 handler=0 (longblob)
|
||||||
|
Note 1105 DBUG: types_compatible=yes bisect=yes
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a TEXT);
|
||||||
|
INSERT INTO t1 VALUES ('test'),('test1'),('test2');
|
||||||
|
SELECT * FROM t1 WHERE a IN ('test',POINT(1,1));
|
||||||
|
a
|
||||||
|
test
|
||||||
|
Warnings:
|
||||||
|
Note 1105 DBUG: [0] arg=1 handler=0 (longblob)
|
||||||
|
Note 1105 DBUG: [1] arg=2 handler=0 (longblob)
|
||||||
|
Note 1105 DBUG: types_compatible=yes bisect=yes
|
||||||
|
DROP TABLE t1;
|
||||||
|
SET SESSION debug_dbug="-d,Predicant_to_list_comparator";
|
||||||
|
SET SESSION debug_dbug="-d,Item_func_in";
|
||||||
|
@ -1017,7 +1017,7 @@ GEOMFROMTEXT(
|
|||||||
'multipolygon(((1 2,3 4,5 6,7 8,9 8),(7 6,5 4,3 2,1 2,3 4)))'));
|
'multipolygon(((1 2,3 4,5 6,7 8,9 8),(7 6,5 4,3 2,1 2,3 4)))'));
|
||||||
# must not crash
|
# must not crash
|
||||||
SELECT 1 FROM t1 WHERE a <> (SELECT GEOMETRYCOLLECTIONFROMWKB(b) FROM t1);
|
SELECT 1 FROM t1 WHERE a <> (SELECT GEOMETRYCOLLECTIONFROMWKB(b) FROM t1);
|
||||||
1
|
ERROR HY000: Illegal parameter data types int and geometry for operation '<>'
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
#
|
#
|
||||||
# Bug #49250 : spatial btree index corruption and crash
|
# Bug #49250 : spatial btree index corruption and crash
|
||||||
@ -1645,11 +1645,7 @@ FLUSH TABLES;
|
|||||||
SELECT 1 FROM g1
|
SELECT 1 FROM g1
|
||||||
FORCE INDEX(i) WHERE a = date_sub(now(), interval 2808.4 year_month)
|
FORCE INDEX(i) WHERE a = date_sub(now(), interval 2808.4 year_month)
|
||||||
;
|
;
|
||||||
1
|
ERROR HY000: Illegal parameter data types geometry and datetime for operation '='
|
||||||
Warnings:
|
|
||||||
Warning 1292 Incorrect datetime value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xF0?\x00\x00\x00\x00\x00\x00\xF0?'
|
|
||||||
Warning 1441 Datetime function: datetime field overflow
|
|
||||||
Warning 1292 Incorrect datetime value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xF0?\x00\x00\x00\x00\x00\x00\x00@'
|
|
||||||
DROP TABLE g1;
|
DROP TABLE g1;
|
||||||
#
|
#
|
||||||
# Bug#13013970 MORE CRASHES IN FIELD_BLOB::GET_KEY_IMAGE
|
# Bug#13013970 MORE CRASHES IN FIELD_BLOB::GET_KEY_IMAGE
|
||||||
@ -2814,5 +2810,906 @@ DROP TABLE t1;
|
|||||||
DROP PROCEDURE p1;
|
DROP PROCEDURE p1;
|
||||||
DROP PROCEDURE p2;
|
DROP PROCEDURE p2;
|
||||||
#
|
#
|
||||||
|
# MDEV-11692 Comparison data type aggregation for pluggable data types
|
||||||
|
#
|
||||||
|
CREATE PROCEDURE p2(query TEXT)
|
||||||
|
BEGIN
|
||||||
|
DECLARE errcount INT DEFAULT 0;
|
||||||
|
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
|
||||||
|
BEGIN
|
||||||
|
SET errcount = errcount+1;
|
||||||
|
GET DIAGNOSTICS CONDITION 1 @p= MESSAGE_TEXT;
|
||||||
|
SELECT @p AS `ERROR: `;
|
||||||
|
END;
|
||||||
|
SELECT query AS ``;
|
||||||
|
EXECUTE IMMEDIATE query;
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
CREATE PROCEDURE p1(query TEXT)
|
||||||
|
BEGIN
|
||||||
|
SELECT query AS `-------------------------------------`;
|
||||||
|
EXECUTE IMMEDIATE query;
|
||||||
|
CALL p2('SELECT a=b FROM t1');
|
||||||
|
CALL p2('SELECT b=a FROM t1');
|
||||||
|
CALL p2('SELECT a BETWEEN b AND c FROM t1');
|
||||||
|
CALL p2('SELECT a IN (b,c) FROM t1');
|
||||||
|
CALL p2('SELECT CASE a WHEN b THEN "a" WHEN c THEN "b" END FROM t1');
|
||||||
|
CALL p2('SELECT a=POINT(1,1) FROM t1');
|
||||||
|
CALL p2('SELECT POINT(1,1)=a FROM t1');
|
||||||
|
CALL p2('SELECT a BETWEEN POINT(1,1) AND POINT(1,2) FROM t1');
|
||||||
|
CALL p2('SELECT a IN (POINT(1,1),POINT(1,2)) FROM t1');
|
||||||
|
CALL p2('SELECT CASE a WHEN POINT(1,1) THEN "a" WHEN POINT(1,2) THEN "b" END FROM t1');
|
||||||
|
DROP TABLE t1;
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
CALL p1('CREATE TABLE t1 (a CHAR(10), b Point, c Point)');
|
||||||
|
-------------------------------------
|
||||||
|
CREATE TABLE t1 (a CHAR(10), b Point, c Point)
|
||||||
|
|
||||||
|
SELECT a=b FROM t1
|
||||||
|
a=b
|
||||||
|
|
||||||
|
SELECT b=a FROM t1
|
||||||
|
b=a
|
||||||
|
|
||||||
|
SELECT a BETWEEN b AND c FROM t1
|
||||||
|
a BETWEEN b AND c
|
||||||
|
|
||||||
|
SELECT a IN (b,c) FROM t1
|
||||||
|
a IN (b,c)
|
||||||
|
|
||||||
|
SELECT CASE a WHEN b THEN "a" WHEN c THEN "b" END FROM t1
|
||||||
|
CASE a WHEN b THEN "a" WHEN c THEN "b" END
|
||||||
|
|
||||||
|
SELECT a=POINT(1,1) FROM t1
|
||||||
|
a=POINT(1,1)
|
||||||
|
|
||||||
|
SELECT POINT(1,1)=a FROM t1
|
||||||
|
POINT(1,1)=a
|
||||||
|
|
||||||
|
SELECT a BETWEEN POINT(1,1) AND POINT(1,2) FROM t1
|
||||||
|
a BETWEEN POINT(1,1) AND POINT(1,2)
|
||||||
|
|
||||||
|
SELECT a IN (POINT(1,1),POINT(1,2)) FROM t1
|
||||||
|
a IN (POINT(1,1),POINT(1,2))
|
||||||
|
|
||||||
|
SELECT CASE a WHEN POINT(1,1) THEN "a" WHEN POINT(1,2) THEN "b" END FROM t1
|
||||||
|
CASE a WHEN POINT(1,1) THEN "a" WHEN POINT(1,2) THEN "b" END
|
||||||
|
CALL p1('CREATE TABLE t1 (a VARCHAR(10), b Point, c Point)');
|
||||||
|
-------------------------------------
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10), b Point, c Point)
|
||||||
|
|
||||||
|
SELECT a=b FROM t1
|
||||||
|
a=b
|
||||||
|
|
||||||
|
SELECT b=a FROM t1
|
||||||
|
b=a
|
||||||
|
|
||||||
|
SELECT a BETWEEN b AND c FROM t1
|
||||||
|
a BETWEEN b AND c
|
||||||
|
|
||||||
|
SELECT a IN (b,c) FROM t1
|
||||||
|
a IN (b,c)
|
||||||
|
|
||||||
|
SELECT CASE a WHEN b THEN "a" WHEN c THEN "b" END FROM t1
|
||||||
|
CASE a WHEN b THEN "a" WHEN c THEN "b" END
|
||||||
|
|
||||||
|
SELECT a=POINT(1,1) FROM t1
|
||||||
|
a=POINT(1,1)
|
||||||
|
|
||||||
|
SELECT POINT(1,1)=a FROM t1
|
||||||
|
POINT(1,1)=a
|
||||||
|
|
||||||
|
SELECT a BETWEEN POINT(1,1) AND POINT(1,2) FROM t1
|
||||||
|
a BETWEEN POINT(1,1) AND POINT(1,2)
|
||||||
|
|
||||||
|
SELECT a IN (POINT(1,1),POINT(1,2)) FROM t1
|
||||||
|
a IN (POINT(1,1),POINT(1,2))
|
||||||
|
|
||||||
|
SELECT CASE a WHEN POINT(1,1) THEN "a" WHEN POINT(1,2) THEN "b" END FROM t1
|
||||||
|
CASE a WHEN POINT(1,1) THEN "a" WHEN POINT(1,2) THEN "b" END
|
||||||
|
CALL p1('CREATE TABLE t1 (a TINYTEXT, b Point, c Point)');
|
||||||
|
-------------------------------------
|
||||||
|
CREATE TABLE t1 (a TINYTEXT, b Point, c Point)
|
||||||
|
|
||||||
|
SELECT a=b FROM t1
|
||||||
|
a=b
|
||||||
|
|
||||||
|
SELECT b=a FROM t1
|
||||||
|
b=a
|
||||||
|
|
||||||
|
SELECT a BETWEEN b AND c FROM t1
|
||||||
|
a BETWEEN b AND c
|
||||||
|
|
||||||
|
SELECT a IN (b,c) FROM t1
|
||||||
|
a IN (b,c)
|
||||||
|
|
||||||
|
SELECT CASE a WHEN b THEN "a" WHEN c THEN "b" END FROM t1
|
||||||
|
CASE a WHEN b THEN "a" WHEN c THEN "b" END
|
||||||
|
|
||||||
|
SELECT a=POINT(1,1) FROM t1
|
||||||
|
a=POINT(1,1)
|
||||||
|
|
||||||
|
SELECT POINT(1,1)=a FROM t1
|
||||||
|
POINT(1,1)=a
|
||||||
|
|
||||||
|
SELECT a BETWEEN POINT(1,1) AND POINT(1,2) FROM t1
|
||||||
|
a BETWEEN POINT(1,1) AND POINT(1,2)
|
||||||
|
|
||||||
|
SELECT a IN (POINT(1,1),POINT(1,2)) FROM t1
|
||||||
|
a IN (POINT(1,1),POINT(1,2))
|
||||||
|
|
||||||
|
SELECT CASE a WHEN POINT(1,1) THEN "a" WHEN POINT(1,2) THEN "b" END FROM t1
|
||||||
|
CASE a WHEN POINT(1,1) THEN "a" WHEN POINT(1,2) THEN "b" END
|
||||||
|
CALL p1('CREATE TABLE t1 (a TEXT, b Point, c Point)');
|
||||||
|
-------------------------------------
|
||||||
|
CREATE TABLE t1 (a TEXT, b Point, c Point)
|
||||||
|
|
||||||
|
SELECT a=b FROM t1
|
||||||
|
a=b
|
||||||
|
|
||||||
|
SELECT b=a FROM t1
|
||||||
|
b=a
|
||||||
|
|
||||||
|
SELECT a BETWEEN b AND c FROM t1
|
||||||
|
a BETWEEN b AND c
|
||||||
|
|
||||||
|
SELECT a IN (b,c) FROM t1
|
||||||
|
a IN (b,c)
|
||||||
|
|
||||||
|
SELECT CASE a WHEN b THEN "a" WHEN c THEN "b" END FROM t1
|
||||||
|
CASE a WHEN b THEN "a" WHEN c THEN "b" END
|
||||||
|
|
||||||
|
SELECT a=POINT(1,1) FROM t1
|
||||||
|
a=POINT(1,1)
|
||||||
|
|
||||||
|
SELECT POINT(1,1)=a FROM t1
|
||||||
|
POINT(1,1)=a
|
||||||
|
|
||||||
|
SELECT a BETWEEN POINT(1,1) AND POINT(1,2) FROM t1
|
||||||
|
a BETWEEN POINT(1,1) AND POINT(1,2)
|
||||||
|
|
||||||
|
SELECT a IN (POINT(1,1),POINT(1,2)) FROM t1
|
||||||
|
a IN (POINT(1,1),POINT(1,2))
|
||||||
|
|
||||||
|
SELECT CASE a WHEN POINT(1,1) THEN "a" WHEN POINT(1,2) THEN "b" END FROM t1
|
||||||
|
CASE a WHEN POINT(1,1) THEN "a" WHEN POINT(1,2) THEN "b" END
|
||||||
|
CALL p1('CREATE TABLE t1 (a MEDIUMTEXT, b Point, c Point)');
|
||||||
|
-------------------------------------
|
||||||
|
CREATE TABLE t1 (a MEDIUMTEXT, b Point, c Point)
|
||||||
|
|
||||||
|
SELECT a=b FROM t1
|
||||||
|
a=b
|
||||||
|
|
||||||
|
SELECT b=a FROM t1
|
||||||
|
b=a
|
||||||
|
|
||||||
|
SELECT a BETWEEN b AND c FROM t1
|
||||||
|
a BETWEEN b AND c
|
||||||
|
|
||||||
|
SELECT a IN (b,c) FROM t1
|
||||||
|
a IN (b,c)
|
||||||
|
|
||||||
|
SELECT CASE a WHEN b THEN "a" WHEN c THEN "b" END FROM t1
|
||||||
|
CASE a WHEN b THEN "a" WHEN c THEN "b" END
|
||||||
|
|
||||||
|
SELECT a=POINT(1,1) FROM t1
|
||||||
|
a=POINT(1,1)
|
||||||
|
|
||||||
|
SELECT POINT(1,1)=a FROM t1
|
||||||
|
POINT(1,1)=a
|
||||||
|
|
||||||
|
SELECT a BETWEEN POINT(1,1) AND POINT(1,2) FROM t1
|
||||||
|
a BETWEEN POINT(1,1) AND POINT(1,2)
|
||||||
|
|
||||||
|
SELECT a IN (POINT(1,1),POINT(1,2)) FROM t1
|
||||||
|
a IN (POINT(1,1),POINT(1,2))
|
||||||
|
|
||||||
|
SELECT CASE a WHEN POINT(1,1) THEN "a" WHEN POINT(1,2) THEN "b" END FROM t1
|
||||||
|
CASE a WHEN POINT(1,1) THEN "a" WHEN POINT(1,2) THEN "b" END
|
||||||
|
CALL p1('CREATE TABLE t1 (a LONGTEXT, b Point, c Point)');
|
||||||
|
-------------------------------------
|
||||||
|
CREATE TABLE t1 (a LONGTEXT, b Point, c Point)
|
||||||
|
|
||||||
|
SELECT a=b FROM t1
|
||||||
|
a=b
|
||||||
|
|
||||||
|
SELECT b=a FROM t1
|
||||||
|
b=a
|
||||||
|
|
||||||
|
SELECT a BETWEEN b AND c FROM t1
|
||||||
|
a BETWEEN b AND c
|
||||||
|
|
||||||
|
SELECT a IN (b,c) FROM t1
|
||||||
|
a IN (b,c)
|
||||||
|
|
||||||
|
SELECT CASE a WHEN b THEN "a" WHEN c THEN "b" END FROM t1
|
||||||
|
CASE a WHEN b THEN "a" WHEN c THEN "b" END
|
||||||
|
|
||||||
|
SELECT a=POINT(1,1) FROM t1
|
||||||
|
a=POINT(1,1)
|
||||||
|
|
||||||
|
SELECT POINT(1,1)=a FROM t1
|
||||||
|
POINT(1,1)=a
|
||||||
|
|
||||||
|
SELECT a BETWEEN POINT(1,1) AND POINT(1,2) FROM t1
|
||||||
|
a BETWEEN POINT(1,1) AND POINT(1,2)
|
||||||
|
|
||||||
|
SELECT a IN (POINT(1,1),POINT(1,2)) FROM t1
|
||||||
|
a IN (POINT(1,1),POINT(1,2))
|
||||||
|
|
||||||
|
SELECT CASE a WHEN POINT(1,1) THEN "a" WHEN POINT(1,2) THEN "b" END FROM t1
|
||||||
|
CASE a WHEN POINT(1,1) THEN "a" WHEN POINT(1,2) THEN "b" END
|
||||||
|
CALL p1('CREATE TABLE t1 (a ENUM("a","b"), b Point, c Point)');
|
||||||
|
-------------------------------------
|
||||||
|
CREATE TABLE t1 (a ENUM("a","b"), b Point, c Point)
|
||||||
|
|
||||||
|
SELECT a=b FROM t1
|
||||||
|
a=b
|
||||||
|
|
||||||
|
SELECT b=a FROM t1
|
||||||
|
b=a
|
||||||
|
|
||||||
|
SELECT a BETWEEN b AND c FROM t1
|
||||||
|
a BETWEEN b AND c
|
||||||
|
|
||||||
|
SELECT a IN (b,c) FROM t1
|
||||||
|
a IN (b,c)
|
||||||
|
|
||||||
|
SELECT CASE a WHEN b THEN "a" WHEN c THEN "b" END FROM t1
|
||||||
|
CASE a WHEN b THEN "a" WHEN c THEN "b" END
|
||||||
|
|
||||||
|
SELECT a=POINT(1,1) FROM t1
|
||||||
|
a=POINT(1,1)
|
||||||
|
|
||||||
|
SELECT POINT(1,1)=a FROM t1
|
||||||
|
POINT(1,1)=a
|
||||||
|
|
||||||
|
SELECT a BETWEEN POINT(1,1) AND POINT(1,2) FROM t1
|
||||||
|
a BETWEEN POINT(1,1) AND POINT(1,2)
|
||||||
|
|
||||||
|
SELECT a IN (POINT(1,1),POINT(1,2)) FROM t1
|
||||||
|
a IN (POINT(1,1),POINT(1,2))
|
||||||
|
|
||||||
|
SELECT CASE a WHEN POINT(1,1) THEN "a" WHEN POINT(1,2) THEN "b" END FROM t1
|
||||||
|
CASE a WHEN POINT(1,1) THEN "a" WHEN POINT(1,2) THEN "b" END
|
||||||
|
CALL p1('CREATE TABLE t1 (a TINYINT, b Point, c Point)');
|
||||||
|
-------------------------------------
|
||||||
|
CREATE TABLE t1 (a TINYINT, b Point, c Point)
|
||||||
|
|
||||||
|
SELECT a=b FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types tinyint and geometry for operation '='
|
||||||
|
|
||||||
|
SELECT b=a FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types geometry and tinyint for operation '='
|
||||||
|
|
||||||
|
SELECT a BETWEEN b AND c FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types tinyint and geometry for operation 'between'
|
||||||
|
|
||||||
|
SELECT a IN (b,c) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types tinyint and geometry for operation 'in'
|
||||||
|
|
||||||
|
SELECT CASE a WHEN b THEN "a" WHEN c THEN "b" END FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types tinyint and geometry for operation 'case..when'
|
||||||
|
|
||||||
|
SELECT a=POINT(1,1) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types tinyint and geometry for operation '='
|
||||||
|
|
||||||
|
SELECT POINT(1,1)=a FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types geometry and tinyint for operation '='
|
||||||
|
|
||||||
|
SELECT a BETWEEN POINT(1,1) AND POINT(1,2) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types tinyint and geometry for operation 'between'
|
||||||
|
|
||||||
|
SELECT a IN (POINT(1,1),POINT(1,2)) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types tinyint and geometry for operation 'in'
|
||||||
|
|
||||||
|
SELECT CASE a WHEN POINT(1,1) THEN "a" WHEN POINT(1,2) THEN "b" END FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types tinyint and geometry for operation 'case..when'
|
||||||
|
CALL p1('CREATE TABLE t1 (a SMALLINT, b Point, c Point)');
|
||||||
|
-------------------------------------
|
||||||
|
CREATE TABLE t1 (a SMALLINT, b Point, c Point)
|
||||||
|
|
||||||
|
SELECT a=b FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types smallint and geometry for operation '='
|
||||||
|
|
||||||
|
SELECT b=a FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types geometry and smallint for operation '='
|
||||||
|
|
||||||
|
SELECT a BETWEEN b AND c FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types smallint and geometry for operation 'between'
|
||||||
|
|
||||||
|
SELECT a IN (b,c) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types smallint and geometry for operation 'in'
|
||||||
|
|
||||||
|
SELECT CASE a WHEN b THEN "a" WHEN c THEN "b" END FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types smallint and geometry for operation 'case..when'
|
||||||
|
|
||||||
|
SELECT a=POINT(1,1) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types smallint and geometry for operation '='
|
||||||
|
|
||||||
|
SELECT POINT(1,1)=a FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types geometry and smallint for operation '='
|
||||||
|
|
||||||
|
SELECT a BETWEEN POINT(1,1) AND POINT(1,2) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types smallint and geometry for operation 'between'
|
||||||
|
|
||||||
|
SELECT a IN (POINT(1,1),POINT(1,2)) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types smallint and geometry for operation 'in'
|
||||||
|
|
||||||
|
SELECT CASE a WHEN POINT(1,1) THEN "a" WHEN POINT(1,2) THEN "b" END FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types smallint and geometry for operation 'case..when'
|
||||||
|
CALL p1('CREATE TABLE t1 (a MEDIUMINT, b Point, c Point)');
|
||||||
|
-------------------------------------
|
||||||
|
CREATE TABLE t1 (a MEDIUMINT, b Point, c Point)
|
||||||
|
|
||||||
|
SELECT a=b FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types mediumint and geometry for operation '='
|
||||||
|
|
||||||
|
SELECT b=a FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types geometry and mediumint for operation '='
|
||||||
|
|
||||||
|
SELECT a BETWEEN b AND c FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types mediumint and geometry for operation 'between'
|
||||||
|
|
||||||
|
SELECT a IN (b,c) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types mediumint and geometry for operation 'in'
|
||||||
|
|
||||||
|
SELECT CASE a WHEN b THEN "a" WHEN c THEN "b" END FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types mediumint and geometry for operation 'case..when'
|
||||||
|
|
||||||
|
SELECT a=POINT(1,1) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types mediumint and geometry for operation '='
|
||||||
|
|
||||||
|
SELECT POINT(1,1)=a FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types geometry and mediumint for operation '='
|
||||||
|
|
||||||
|
SELECT a BETWEEN POINT(1,1) AND POINT(1,2) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types mediumint and geometry for operation 'between'
|
||||||
|
|
||||||
|
SELECT a IN (POINT(1,1),POINT(1,2)) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types mediumint and geometry for operation 'in'
|
||||||
|
|
||||||
|
SELECT CASE a WHEN POINT(1,1) THEN "a" WHEN POINT(1,2) THEN "b" END FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types mediumint and geometry for operation 'case..when'
|
||||||
|
CALL p1('CREATE TABLE t1 (a INT, b Point, c Point)');
|
||||||
|
-------------------------------------
|
||||||
|
CREATE TABLE t1 (a INT, b Point, c Point)
|
||||||
|
|
||||||
|
SELECT a=b FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types int and geometry for operation '='
|
||||||
|
|
||||||
|
SELECT b=a FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types geometry and int for operation '='
|
||||||
|
|
||||||
|
SELECT a BETWEEN b AND c FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types int and geometry for operation 'between'
|
||||||
|
|
||||||
|
SELECT a IN (b,c) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types int and geometry for operation 'in'
|
||||||
|
|
||||||
|
SELECT CASE a WHEN b THEN "a" WHEN c THEN "b" END FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types int and geometry for operation 'case..when'
|
||||||
|
|
||||||
|
SELECT a=POINT(1,1) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types int and geometry for operation '='
|
||||||
|
|
||||||
|
SELECT POINT(1,1)=a FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types geometry and int for operation '='
|
||||||
|
|
||||||
|
SELECT a BETWEEN POINT(1,1) AND POINT(1,2) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types int and geometry for operation 'between'
|
||||||
|
|
||||||
|
SELECT a IN (POINT(1,1),POINT(1,2)) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types int and geometry for operation 'in'
|
||||||
|
|
||||||
|
SELECT CASE a WHEN POINT(1,1) THEN "a" WHEN POINT(1,2) THEN "b" END FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types int and geometry for operation 'case..when'
|
||||||
|
CALL p1('CREATE TABLE t1 (a BIGINT, b Point, c Point)');
|
||||||
|
-------------------------------------
|
||||||
|
CREATE TABLE t1 (a BIGINT, b Point, c Point)
|
||||||
|
|
||||||
|
SELECT a=b FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types bigint and geometry for operation '='
|
||||||
|
|
||||||
|
SELECT b=a FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types geometry and bigint for operation '='
|
||||||
|
|
||||||
|
SELECT a BETWEEN b AND c FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types bigint and geometry for operation 'between'
|
||||||
|
|
||||||
|
SELECT a IN (b,c) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types bigint and geometry for operation 'in'
|
||||||
|
|
||||||
|
SELECT CASE a WHEN b THEN "a" WHEN c THEN "b" END FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types bigint and geometry for operation 'case..when'
|
||||||
|
|
||||||
|
SELECT a=POINT(1,1) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types bigint and geometry for operation '='
|
||||||
|
|
||||||
|
SELECT POINT(1,1)=a FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types geometry and bigint for operation '='
|
||||||
|
|
||||||
|
SELECT a BETWEEN POINT(1,1) AND POINT(1,2) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types bigint and geometry for operation 'between'
|
||||||
|
|
||||||
|
SELECT a IN (POINT(1,1),POINT(1,2)) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types bigint and geometry for operation 'in'
|
||||||
|
|
||||||
|
SELECT CASE a WHEN POINT(1,1) THEN "a" WHEN POINT(1,2) THEN "b" END FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types bigint and geometry for operation 'case..when'
|
||||||
|
CALL p1('CREATE TABLE t1 (a FLOAT, b Point, c Point)');
|
||||||
|
-------------------------------------
|
||||||
|
CREATE TABLE t1 (a FLOAT, b Point, c Point)
|
||||||
|
|
||||||
|
SELECT a=b FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types float and geometry for operation '='
|
||||||
|
|
||||||
|
SELECT b=a FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types geometry and float for operation '='
|
||||||
|
|
||||||
|
SELECT a BETWEEN b AND c FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types float and geometry for operation 'between'
|
||||||
|
|
||||||
|
SELECT a IN (b,c) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types float and geometry for operation 'in'
|
||||||
|
|
||||||
|
SELECT CASE a WHEN b THEN "a" WHEN c THEN "b" END FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types float and geometry for operation 'case..when'
|
||||||
|
|
||||||
|
SELECT a=POINT(1,1) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types float and geometry for operation '='
|
||||||
|
|
||||||
|
SELECT POINT(1,1)=a FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types geometry and float for operation '='
|
||||||
|
|
||||||
|
SELECT a BETWEEN POINT(1,1) AND POINT(1,2) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types float and geometry for operation 'between'
|
||||||
|
|
||||||
|
SELECT a IN (POINT(1,1),POINT(1,2)) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types float and geometry for operation 'in'
|
||||||
|
|
||||||
|
SELECT CASE a WHEN POINT(1,1) THEN "a" WHEN POINT(1,2) THEN "b" END FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types float and geometry for operation 'case..when'
|
||||||
|
CALL p1('CREATE TABLE t1 (a DOUBLE, b Point, c Point)');
|
||||||
|
-------------------------------------
|
||||||
|
CREATE TABLE t1 (a DOUBLE, b Point, c Point)
|
||||||
|
|
||||||
|
SELECT a=b FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types double and geometry for operation '='
|
||||||
|
|
||||||
|
SELECT b=a FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types geometry and double for operation '='
|
||||||
|
|
||||||
|
SELECT a BETWEEN b AND c FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types double and geometry for operation 'between'
|
||||||
|
|
||||||
|
SELECT a IN (b,c) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types double and geometry for operation 'in'
|
||||||
|
|
||||||
|
SELECT CASE a WHEN b THEN "a" WHEN c THEN "b" END FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types double and geometry for operation 'case..when'
|
||||||
|
|
||||||
|
SELECT a=POINT(1,1) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types double and geometry for operation '='
|
||||||
|
|
||||||
|
SELECT POINT(1,1)=a FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types geometry and double for operation '='
|
||||||
|
|
||||||
|
SELECT a BETWEEN POINT(1,1) AND POINT(1,2) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types double and geometry for operation 'between'
|
||||||
|
|
||||||
|
SELECT a IN (POINT(1,1),POINT(1,2)) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types double and geometry for operation 'in'
|
||||||
|
|
||||||
|
SELECT CASE a WHEN POINT(1,1) THEN "a" WHEN POINT(1,2) THEN "b" END FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types double and geometry for operation 'case..when'
|
||||||
|
CALL p1('CREATE TABLE t1 (a DECIMAL(10,2), b Point, c Point)');
|
||||||
|
-------------------------------------
|
||||||
|
CREATE TABLE t1 (a DECIMAL(10,2), b Point, c Point)
|
||||||
|
|
||||||
|
SELECT a=b FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types decimal and geometry for operation '='
|
||||||
|
|
||||||
|
SELECT b=a FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types geometry and decimal for operation '='
|
||||||
|
|
||||||
|
SELECT a BETWEEN b AND c FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types decimal and geometry for operation 'between'
|
||||||
|
|
||||||
|
SELECT a IN (b,c) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types decimal and geometry for operation 'in'
|
||||||
|
|
||||||
|
SELECT CASE a WHEN b THEN "a" WHEN c THEN "b" END FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types decimal and geometry for operation 'case..when'
|
||||||
|
|
||||||
|
SELECT a=POINT(1,1) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types decimal and geometry for operation '='
|
||||||
|
|
||||||
|
SELECT POINT(1,1)=a FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types geometry and decimal for operation '='
|
||||||
|
|
||||||
|
SELECT a BETWEEN POINT(1,1) AND POINT(1,2) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types decimal and geometry for operation 'between'
|
||||||
|
|
||||||
|
SELECT a IN (POINT(1,1),POINT(1,2)) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types decimal and geometry for operation 'in'
|
||||||
|
|
||||||
|
SELECT CASE a WHEN POINT(1,1) THEN "a" WHEN POINT(1,2) THEN "b" END FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types decimal and geometry for operation 'case..when'
|
||||||
|
CALL p1('CREATE TABLE t1 (a BIT(8), b Point, c Point)');
|
||||||
|
-------------------------------------
|
||||||
|
CREATE TABLE t1 (a BIT(8), b Point, c Point)
|
||||||
|
|
||||||
|
SELECT a=b FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types bit and geometry for operation '='
|
||||||
|
|
||||||
|
SELECT b=a FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types geometry and bit for operation '='
|
||||||
|
|
||||||
|
SELECT a BETWEEN b AND c FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types bit and geometry for operation 'between'
|
||||||
|
|
||||||
|
SELECT a IN (b,c) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types bit and geometry for operation 'in'
|
||||||
|
|
||||||
|
SELECT CASE a WHEN b THEN "a" WHEN c THEN "b" END FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types bit and geometry for operation 'case..when'
|
||||||
|
|
||||||
|
SELECT a=POINT(1,1) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types bit and geometry for operation '='
|
||||||
|
|
||||||
|
SELECT POINT(1,1)=a FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types geometry and bit for operation '='
|
||||||
|
|
||||||
|
SELECT a BETWEEN POINT(1,1) AND POINT(1,2) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types bit and geometry for operation 'between'
|
||||||
|
|
||||||
|
SELECT a IN (POINT(1,1),POINT(1,2)) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types bit and geometry for operation 'in'
|
||||||
|
|
||||||
|
SELECT CASE a WHEN POINT(1,1) THEN "a" WHEN POINT(1,2) THEN "b" END FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types bit and geometry for operation 'case..when'
|
||||||
|
CALL p1('CREATE TABLE t1 (a TIME, b Point, c Point)');
|
||||||
|
-------------------------------------
|
||||||
|
CREATE TABLE t1 (a TIME, b Point, c Point)
|
||||||
|
|
||||||
|
SELECT a=b FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types time and geometry for operation '='
|
||||||
|
|
||||||
|
SELECT b=a FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types geometry and time for operation '='
|
||||||
|
|
||||||
|
SELECT a BETWEEN b AND c FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types time and geometry for operation 'between'
|
||||||
|
|
||||||
|
SELECT a IN (b,c) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types time and geometry for operation 'in'
|
||||||
|
|
||||||
|
SELECT CASE a WHEN b THEN "a" WHEN c THEN "b" END FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types time and geometry for operation 'case..when'
|
||||||
|
|
||||||
|
SELECT a=POINT(1,1) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types time and geometry for operation '='
|
||||||
|
|
||||||
|
SELECT POINT(1,1)=a FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types geometry and time for operation '='
|
||||||
|
|
||||||
|
SELECT a BETWEEN POINT(1,1) AND POINT(1,2) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types time and geometry for operation 'between'
|
||||||
|
|
||||||
|
SELECT a IN (POINT(1,1),POINT(1,2)) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types time and geometry for operation 'in'
|
||||||
|
|
||||||
|
SELECT CASE a WHEN POINT(1,1) THEN "a" WHEN POINT(1,2) THEN "b" END FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types time and geometry for operation 'case..when'
|
||||||
|
CALL p1('CREATE TABLE t1 (a DATE, b Point, c Point)');
|
||||||
|
-------------------------------------
|
||||||
|
CREATE TABLE t1 (a DATE, b Point, c Point)
|
||||||
|
|
||||||
|
SELECT a=b FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types date and geometry for operation '='
|
||||||
|
|
||||||
|
SELECT b=a FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types geometry and date for operation '='
|
||||||
|
|
||||||
|
SELECT a BETWEEN b AND c FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types date and geometry for operation 'between'
|
||||||
|
|
||||||
|
SELECT a IN (b,c) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types date and geometry for operation 'in'
|
||||||
|
|
||||||
|
SELECT CASE a WHEN b THEN "a" WHEN c THEN "b" END FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types date and geometry for operation 'case..when'
|
||||||
|
|
||||||
|
SELECT a=POINT(1,1) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types date and geometry for operation '='
|
||||||
|
|
||||||
|
SELECT POINT(1,1)=a FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types geometry and date for operation '='
|
||||||
|
|
||||||
|
SELECT a BETWEEN POINT(1,1) AND POINT(1,2) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types date and geometry for operation 'between'
|
||||||
|
|
||||||
|
SELECT a IN (POINT(1,1),POINT(1,2)) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types date and geometry for operation 'in'
|
||||||
|
|
||||||
|
SELECT CASE a WHEN POINT(1,1) THEN "a" WHEN POINT(1,2) THEN "b" END FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types date and geometry for operation 'case..when'
|
||||||
|
CALL p1('CREATE TABLE t1 (a DATETIME, b Point, c Point)');
|
||||||
|
-------------------------------------
|
||||||
|
CREATE TABLE t1 (a DATETIME, b Point, c Point)
|
||||||
|
|
||||||
|
SELECT a=b FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types datetime and geometry for operation '='
|
||||||
|
|
||||||
|
SELECT b=a FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types geometry and datetime for operation '='
|
||||||
|
|
||||||
|
SELECT a BETWEEN b AND c FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types datetime and geometry for operation 'between'
|
||||||
|
|
||||||
|
SELECT a IN (b,c) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types datetime and geometry for operation 'in'
|
||||||
|
|
||||||
|
SELECT CASE a WHEN b THEN "a" WHEN c THEN "b" END FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types datetime and geometry for operation 'case..when'
|
||||||
|
|
||||||
|
SELECT a=POINT(1,1) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types datetime and geometry for operation '='
|
||||||
|
|
||||||
|
SELECT POINT(1,1)=a FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types geometry and datetime for operation '='
|
||||||
|
|
||||||
|
SELECT a BETWEEN POINT(1,1) AND POINT(1,2) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types datetime and geometry for operation 'between'
|
||||||
|
|
||||||
|
SELECT a IN (POINT(1,1),POINT(1,2)) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types datetime and geometry for operation 'in'
|
||||||
|
|
||||||
|
SELECT CASE a WHEN POINT(1,1) THEN "a" WHEN POINT(1,2) THEN "b" END FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types datetime and geometry for operation 'case..when'
|
||||||
|
CALL p1('CREATE TABLE t1 (a TIMESTAMP, b Point, c Point)');
|
||||||
|
-------------------------------------
|
||||||
|
CREATE TABLE t1 (a TIMESTAMP, b Point, c Point)
|
||||||
|
|
||||||
|
SELECT a=b FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types timestamp and geometry for operation '='
|
||||||
|
|
||||||
|
SELECT b=a FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types geometry and timestamp for operation '='
|
||||||
|
|
||||||
|
SELECT a BETWEEN b AND c FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types timestamp and geometry for operation 'between'
|
||||||
|
|
||||||
|
SELECT a IN (b,c) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types timestamp and geometry for operation 'in'
|
||||||
|
|
||||||
|
SELECT CASE a WHEN b THEN "a" WHEN c THEN "b" END FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types timestamp and geometry for operation 'case..when'
|
||||||
|
|
||||||
|
SELECT a=POINT(1,1) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types timestamp and geometry for operation '='
|
||||||
|
|
||||||
|
SELECT POINT(1,1)=a FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types geometry and timestamp for operation '='
|
||||||
|
|
||||||
|
SELECT a BETWEEN POINT(1,1) AND POINT(1,2) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types timestamp and geometry for operation 'between'
|
||||||
|
|
||||||
|
SELECT a IN (POINT(1,1),POINT(1,2)) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types timestamp and geometry for operation 'in'
|
||||||
|
|
||||||
|
SELECT CASE a WHEN POINT(1,1) THEN "a" WHEN POINT(1,2) THEN "b" END FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types timestamp and geometry for operation 'case..when'
|
||||||
|
CALL p1('CREATE TABLE t1 (a YEAR, b Point, c Point)');
|
||||||
|
-------------------------------------
|
||||||
|
CREATE TABLE t1 (a YEAR, b Point, c Point)
|
||||||
|
|
||||||
|
SELECT a=b FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types year and geometry for operation '='
|
||||||
|
|
||||||
|
SELECT b=a FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types geometry and year for operation '='
|
||||||
|
|
||||||
|
SELECT a BETWEEN b AND c FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types year and geometry for operation 'between'
|
||||||
|
|
||||||
|
SELECT a IN (b,c) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types year and geometry for operation 'in'
|
||||||
|
|
||||||
|
SELECT CASE a WHEN b THEN "a" WHEN c THEN "b" END FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types year and geometry for operation 'case..when'
|
||||||
|
|
||||||
|
SELECT a=POINT(1,1) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types year and geometry for operation '='
|
||||||
|
|
||||||
|
SELECT POINT(1,1)=a FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types geometry and year for operation '='
|
||||||
|
|
||||||
|
SELECT a BETWEEN POINT(1,1) AND POINT(1,2) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types year and geometry for operation 'between'
|
||||||
|
|
||||||
|
SELECT a IN (POINT(1,1),POINT(1,2)) FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types year and geometry for operation 'in'
|
||||||
|
|
||||||
|
SELECT CASE a WHEN POINT(1,1) THEN "a" WHEN POINT(1,2) THEN "b" END FROM t1
|
||||||
|
ERROR:
|
||||||
|
Illegal parameter data types year and geometry for operation 'case..when'
|
||||||
|
CALL p1('CREATE TABLE t1 (a Point, b Point, c Point)');
|
||||||
|
-------------------------------------
|
||||||
|
CREATE TABLE t1 (a Point, b Point, c Point)
|
||||||
|
|
||||||
|
SELECT a=b FROM t1
|
||||||
|
a=b
|
||||||
|
|
||||||
|
SELECT b=a FROM t1
|
||||||
|
b=a
|
||||||
|
|
||||||
|
SELECT a BETWEEN b AND c FROM t1
|
||||||
|
a BETWEEN b AND c
|
||||||
|
|
||||||
|
SELECT a IN (b,c) FROM t1
|
||||||
|
a IN (b,c)
|
||||||
|
|
||||||
|
SELECT CASE a WHEN b THEN "a" WHEN c THEN "b" END FROM t1
|
||||||
|
CASE a WHEN b THEN "a" WHEN c THEN "b" END
|
||||||
|
|
||||||
|
SELECT a=POINT(1,1) FROM t1
|
||||||
|
a=POINT(1,1)
|
||||||
|
|
||||||
|
SELECT POINT(1,1)=a FROM t1
|
||||||
|
POINT(1,1)=a
|
||||||
|
|
||||||
|
SELECT a BETWEEN POINT(1,1) AND POINT(1,2) FROM t1
|
||||||
|
a BETWEEN POINT(1,1) AND POINT(1,2)
|
||||||
|
|
||||||
|
SELECT a IN (POINT(1,1),POINT(1,2)) FROM t1
|
||||||
|
a IN (POINT(1,1),POINT(1,2))
|
||||||
|
|
||||||
|
SELECT CASE a WHEN POINT(1,1) THEN "a" WHEN POINT(1,2) THEN "b" END FROM t1
|
||||||
|
CASE a WHEN POINT(1,1) THEN "a" WHEN POINT(1,2) THEN "b" END
|
||||||
|
DROP PROCEDURE p1;
|
||||||
|
DROP PROCEDURE p2;
|
||||||
|
#
|
||||||
# End of 10.3 tests
|
# End of 10.3 tests
|
||||||
#
|
#
|
||||||
|
@ -2439,7 +2439,7 @@ SELECT 1 FROM t1 WHERE b < SOME
|
|||||||
GROUP BY b WITH ROLLUP
|
GROUP BY b WITH ROLLUP
|
||||||
HAVING b > geomfromtext("")
|
HAVING b > geomfromtext("")
|
||||||
);
|
);
|
||||||
1
|
ERROR HY000: Illegal parameter data types mediumint and geometry for operation '>'
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
MDEV-612 Valgrind error in ha_maria::check_if_incompatible_data
|
MDEV-612 Valgrind error in ha_maria::check_if_incompatible_data
|
||||||
|
@ -996,9 +996,7 @@ ST_GEOMFROMTEXT(
|
|||||||
'multipolygon(((1 2,3 4,5 6,7 8,9 8,1 2,1 2),(7 6,5 4,3 2,1 2,3 4,7 6)))'));
|
'multipolygon(((1 2,3 4,5 6,7 8,9 8,1 2,1 2),(7 6,5 4,3 2,1 2,3 4,7 6)))'));
|
||||||
# must not crash
|
# must not crash
|
||||||
SELECT 1 FROM t1 WHERE a <> (SELECT ST_GEOMETRYCOLLECTIONFROMWKB(b) FROM t1);
|
SELECT 1 FROM t1 WHERE a <> (SELECT ST_GEOMETRYCOLLECTIONFROMWKB(b) FROM t1);
|
||||||
1
|
ERROR HY000: Illegal parameter data types int and geometry for operation '<>'
|
||||||
Warnings:
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x06\x00\x00\x00\x01\x00\x00\x00\x01\x03\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00'
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
#
|
#
|
||||||
# Bug #49250 : spatial btree index corruption and crash
|
# Bug #49250 : spatial btree index corruption and crash
|
||||||
@ -1105,11 +1103,7 @@ FLUSH TABLES;
|
|||||||
SELECT 1 FROM g1
|
SELECT 1 FROM g1
|
||||||
FORCE INDEX(i) WHERE a = date_sub(now(), interval 2808.4 year_month)
|
FORCE INDEX(i) WHERE a = date_sub(now(), interval 2808.4 year_month)
|
||||||
;
|
;
|
||||||
1
|
ERROR HY000: Illegal parameter data types geometry and datetime for operation '='
|
||||||
Warnings:
|
|
||||||
Warning 1292 Incorrect datetime value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xF0?\x00\x00\x00\x00\x00\x00\xF0?'
|
|
||||||
Warning 1441 Datetime function: datetime field overflow
|
|
||||||
Warning 1292 Incorrect datetime value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xF0?\x00\x00\x00\x00\x00\x00\x00@'
|
|
||||||
DROP TABLE g1;
|
DROP TABLE g1;
|
||||||
#
|
#
|
||||||
# Bug#13013970 MORE CRASHES IN FIELD_BLOB::GET_KEY_IMAGE
|
# Bug#13013970 MORE CRASHES IN FIELD_BLOB::GET_KEY_IMAGE
|
||||||
|
@ -256,6 +256,8 @@ INSERT INTO tab SELECT * FROM tab1;
|
|||||||
ALTER TABLE tab DROP PRIMARY KEY;
|
ALTER TABLE tab DROP PRIMARY KEY;
|
||||||
ALTER TABLE tab DROP INDEX idx2;
|
ALTER TABLE tab DROP INDEX idx2;
|
||||||
CREATE TEMPORARY TABLE temp_tab AS SELECT * FROM tab where c1 = c2;
|
CREATE TEMPORARY TABLE temp_tab AS SELECT * FROM tab where c1 = c2;
|
||||||
|
ERROR HY000: Illegal parameter data types int and geometry for operation '='
|
||||||
|
CREATE TEMPORARY TABLE temp_tab AS SELECT * FROM tab;
|
||||||
INSERT INTO temp_tab SELECT * FROM tab;
|
INSERT INTO temp_tab SELECT * FROM tab;
|
||||||
CREATE SPATIAL INDEX idx2 ON temp_tab(c2);
|
CREATE SPATIAL INDEX idx2 ON temp_tab(c2);
|
||||||
CREATE SPATIAL INDEX idx3 ON temp_tab(c3);
|
CREATE SPATIAL INDEX idx3 ON temp_tab(c3);
|
||||||
|
@ -1238,13 +1238,15 @@ Table Op Msg_type Msg_text
|
|||||||
test.tab check status OK
|
test.tab check status OK
|
||||||
DROP TABLE tab;
|
DROP TABLE tab;
|
||||||
CREATE TABLE tab(c1 POINT NOT NULL,CONSTRAINT tab_const check(c1 > 0) ) ENGINE=InnoDB;
|
CREATE TABLE tab(c1 POINT NOT NULL,CONSTRAINT tab_const check(c1 > 0) ) ENGINE=InnoDB;
|
||||||
|
ERROR HY000: Illegal parameter data types geometry and bigint for operation '>'
|
||||||
|
CREATE TABLE tab(c1 POINT NOT NULL,CONSTRAINT tab_const check(CAST(c1 AS BINARY) > 0) ) ENGINE=InnoDB;
|
||||||
CREATE SPATIAL INDEX idx1 ON tab(c1) ;
|
CREATE SPATIAL INDEX idx1 ON tab(c1) ;
|
||||||
SHOW CREATE TABLE tab;
|
SHOW CREATE TABLE tab;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
tab CREATE TABLE `tab` (
|
tab CREATE TABLE `tab` (
|
||||||
`c1` point NOT NULL,
|
`c1` point NOT NULL,
|
||||||
SPATIAL KEY `idx1` (`c1`),
|
SPATIAL KEY `idx1` (`c1`),
|
||||||
CONSTRAINT `tab_const` CHECK (`c1` > 0)
|
CONSTRAINT `tab_const` CHECK (cast(`c1` as char charset binary) > 0)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
SHOW INDEX FROM tab;
|
SHOW INDEX FROM tab;
|
||||||
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
|
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
|
||||||
|
@ -992,9 +992,7 @@ ST_GEOMFROMTEXT(
|
|||||||
'multipolygon(((1 2,3 4,5 6,7 8,9 8,1 2,1 2),(7 6,5 4,3 2,1 2,3 4,7 6)))'));
|
'multipolygon(((1 2,3 4,5 6,7 8,9 8,1 2,1 2),(7 6,5 4,3 2,1 2,3 4,7 6)))'));
|
||||||
# must not crash
|
# must not crash
|
||||||
SELECT 1 FROM t1 WHERE a <> (SELECT ST_GEOMETRYCOLLECTIONFROMWKB(b) FROM t1);
|
SELECT 1 FROM t1 WHERE a <> (SELECT ST_GEOMETRYCOLLECTIONFROMWKB(b) FROM t1);
|
||||||
1
|
ERROR HY000: Illegal parameter data types int and geometry for operation '<>'
|
||||||
Warnings:
|
|
||||||
Warning 1292 Truncated incorrect DOUBLE value: '\x00\x00\x00\x00\x01\x06\x00\x00\x00\x01\x00\x00\x00\x01\x03\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00'
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
#
|
#
|
||||||
# Bug #49250 : spatial btree index corruption and crash
|
# Bug #49250 : spatial btree index corruption and crash
|
||||||
@ -1106,11 +1104,7 @@ FLUSH TABLES;
|
|||||||
SELECT 1 FROM g1
|
SELECT 1 FROM g1
|
||||||
FORCE INDEX(i) WHERE a = date_sub(now(), interval 2808.4 year_month)
|
FORCE INDEX(i) WHERE a = date_sub(now(), interval 2808.4 year_month)
|
||||||
;
|
;
|
||||||
1
|
ERROR HY000: Illegal parameter data types geometry and datetime for operation '='
|
||||||
Warnings:
|
|
||||||
Warning 1292 Incorrect datetime value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xF0?\x00\x00\x00\x00\x00\x00\xF0?'
|
|
||||||
Warning 1441 Datetime function: datetime field overflow
|
|
||||||
Warning 1292 Incorrect datetime value: '\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xF0?\x00\x00\x00\x00\x00\x00\x00@'
|
|
||||||
DROP TABLE g1;
|
DROP TABLE g1;
|
||||||
#
|
#
|
||||||
# Bug#13013970 MORE CRASHES IN FIELD_BLOB::GET_KEY_IMAGE
|
# Bug#13013970 MORE CRASHES IN FIELD_BLOB::GET_KEY_IMAGE
|
||||||
|
@ -701,6 +701,7 @@ INSERT INTO t1 VALUES
|
|||||||
'multipolygon(((1 2,3 4,5 6,7 8,9 8,1 2,1 2),(7 6,5 4,3 2,1 2,3 4,7 6)))'));
|
'multipolygon(((1 2,3 4,5 6,7 8,9 8,1 2,1 2),(7 6,5 4,3 2,1 2,3 4,7 6)))'));
|
||||||
|
|
||||||
--echo # must not crash
|
--echo # must not crash
|
||||||
|
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
|
||||||
SELECT 1 FROM t1 WHERE a <> (SELECT ST_GEOMETRYCOLLECTIONFROMWKB(b) FROM t1);
|
SELECT 1 FROM t1 WHERE a <> (SELECT ST_GEOMETRYCOLLECTIONFROMWKB(b) FROM t1);
|
||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
@ -886,6 +887,7 @@ INSERT INTO g1 VALUES (ST_geomfromtext('point(1 2)'));
|
|||||||
|
|
||||||
FLUSH TABLES;
|
FLUSH TABLES;
|
||||||
|
|
||||||
|
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
|
||||||
SELECT 1 FROM g1
|
SELECT 1 FROM g1
|
||||||
FORCE INDEX(i) WHERE a = date_sub(now(), interval 2808.4 year_month)
|
FORCE INDEX(i) WHERE a = date_sub(now(), interval 2808.4 year_month)
|
||||||
;
|
;
|
||||||
|
@ -304,8 +304,11 @@ ALTER TABLE tab DROP INDEX idx2;
|
|||||||
|
|
||||||
# Check spatial index on temp tables
|
# Check spatial index on temp tables
|
||||||
|
|
||||||
|
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
|
||||||
CREATE TEMPORARY TABLE temp_tab AS SELECT * FROM tab where c1 = c2;
|
CREATE TEMPORARY TABLE temp_tab AS SELECT * FROM tab where c1 = c2;
|
||||||
|
|
||||||
|
CREATE TEMPORARY TABLE temp_tab AS SELECT * FROM tab;
|
||||||
|
|
||||||
INSERT INTO temp_tab SELECT * FROM tab;
|
INSERT INTO temp_tab SELECT * FROM tab;
|
||||||
|
|
||||||
CREATE SPATIAL INDEX idx2 ON temp_tab(c2);
|
CREATE SPATIAL INDEX idx2 ON temp_tab(c2);
|
||||||
|
@ -1118,7 +1118,9 @@ DROP TABLE tab;
|
|||||||
# End of Testcase compress table with Auto_increment
|
# End of Testcase compress table with Auto_increment
|
||||||
|
|
||||||
# Test check constraint on spatial column
|
# Test check constraint on spatial column
|
||||||
|
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
|
||||||
CREATE TABLE tab(c1 POINT NOT NULL,CONSTRAINT tab_const check(c1 > 0) ) ENGINE=InnoDB;
|
CREATE TABLE tab(c1 POINT NOT NULL,CONSTRAINT tab_const check(c1 > 0) ) ENGINE=InnoDB;
|
||||||
|
CREATE TABLE tab(c1 POINT NOT NULL,CONSTRAINT tab_const check(CAST(c1 AS BINARY) > 0) ) ENGINE=InnoDB;
|
||||||
|
|
||||||
CREATE SPATIAL INDEX idx1 ON tab(c1) ;
|
CREATE SPATIAL INDEX idx1 ON tab(c1) ;
|
||||||
|
|
||||||
|
@ -695,6 +695,7 @@ INSERT INTO t1 VALUES
|
|||||||
'multipolygon(((1 2,3 4,5 6,7 8,9 8,1 2,1 2),(7 6,5 4,3 2,1 2,3 4,7 6)))'));
|
'multipolygon(((1 2,3 4,5 6,7 8,9 8,1 2,1 2),(7 6,5 4,3 2,1 2,3 4,7 6)))'));
|
||||||
|
|
||||||
--echo # must not crash
|
--echo # must not crash
|
||||||
|
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
|
||||||
SELECT 1 FROM t1 WHERE a <> (SELECT ST_GEOMETRYCOLLECTIONFROMWKB(b) FROM t1);
|
SELECT 1 FROM t1 WHERE a <> (SELECT ST_GEOMETRYCOLLECTIONFROMWKB(b) FROM t1);
|
||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
@ -888,6 +889,7 @@ INSERT INTO g1 VALUES (ST_geomfromtext('point(1 2)'));
|
|||||||
|
|
||||||
FLUSH TABLES;
|
FLUSH TABLES;
|
||||||
|
|
||||||
|
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
|
||||||
SELECT 1 FROM g1
|
SELECT 1 FROM g1
|
||||||
FORCE INDEX(i) WHERE a = date_sub(now(), interval 2808.4 year_month)
|
FORCE INDEX(i) WHERE a = date_sub(now(), interval 2808.4 year_month)
|
||||||
;
|
;
|
||||||
|
@ -67,6 +67,7 @@ INSERT INTO t3 VALUES (4294967296,'2011-04-12 21:05:37',0x0000CE3238,'xwcplgaxcp
|
|||||||
--enable_query_log
|
--enable_query_log
|
||||||
|
|
||||||
set session sort_buffer_size= 32768;
|
set session sort_buffer_size= 32768;
|
||||||
|
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
|
||||||
select col435
|
select col435
|
||||||
from t3
|
from t3
|
||||||
natural right outer join t1
|
natural right outer join t1
|
||||||
|
@ -20,3 +20,29 @@ CREATE TABLE t1 (a INT DEFAULT ST_GIS_DEBUG(1));
|
|||||||
--echo #
|
--echo #
|
||||||
--echo # End of 10.2 tests
|
--echo # End of 10.2 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Start of 10.3 tests
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Comparison data type aggregation for pluggable data types
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
SET SESSION debug_dbug="+d,Item_func_in";
|
||||||
|
SET SESSION debug_dbug="+d,Predicant_to_list_comparator";
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a POINT);
|
||||||
|
INSERT INTO t1 VALUES (POINT(1,1)),(POINT(1,2)),(POINT(1,3));
|
||||||
|
SELECT COUNT(*) FROM t1 WHERE a IN (POINT(1,1),POINT(10,20),POINT(10,30));
|
||||||
|
SELECT COUNT(*) FROM t1 WHERE a IN (POINT(1,1),POINT(10,20),POINT(10,30),'test');
|
||||||
|
SELECT COUNT(*) FROM t1 WHERE a IN ('test','test1');
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a TEXT);
|
||||||
|
INSERT INTO t1 VALUES ('test'),('test1'),('test2');
|
||||||
|
SELECT * FROM t1 WHERE a IN ('test',POINT(1,1));
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
SET SESSION debug_dbug="-d,Predicant_to_list_comparator";
|
||||||
|
SET SESSION debug_dbug="-d,Item_func_in";
|
||||||
|
@ -669,6 +669,7 @@ INSERT INTO t1 VALUES
|
|||||||
'multipolygon(((1 2,3 4,5 6,7 8,9 8),(7 6,5 4,3 2,1 2,3 4)))'));
|
'multipolygon(((1 2,3 4,5 6,7 8,9 8),(7 6,5 4,3 2,1 2,3 4)))'));
|
||||||
|
|
||||||
--echo # must not crash
|
--echo # must not crash
|
||||||
|
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
|
||||||
SELECT 1 FROM t1 WHERE a <> (SELECT GEOMETRYCOLLECTIONFROMWKB(b) FROM t1);
|
SELECT 1 FROM t1 WHERE a <> (SELECT GEOMETRYCOLLECTIONFROMWKB(b) FROM t1);
|
||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
@ -1395,6 +1396,7 @@ INSERT INTO g1 VALUES (geomfromtext('point(1 2)'));
|
|||||||
|
|
||||||
FLUSH TABLES;
|
FLUSH TABLES;
|
||||||
|
|
||||||
|
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
|
||||||
SELECT 1 FROM g1
|
SELECT 1 FROM g1
|
||||||
FORCE INDEX(i) WHERE a = date_sub(now(), interval 2808.4 year_month)
|
FORCE INDEX(i) WHERE a = date_sub(now(), interval 2808.4 year_month)
|
||||||
;
|
;
|
||||||
@ -1799,6 +1801,73 @@ DROP PROCEDURE p1;
|
|||||||
DROP PROCEDURE p2;
|
DROP PROCEDURE p2;
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-11692 Comparison data type aggregation for pluggable data types
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
DELIMITER $$;
|
||||||
|
CREATE PROCEDURE p2(query TEXT)
|
||||||
|
BEGIN
|
||||||
|
DECLARE errcount INT DEFAULT 0;
|
||||||
|
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
|
||||||
|
BEGIN
|
||||||
|
SET errcount = errcount+1;
|
||||||
|
GET DIAGNOSTICS CONDITION 1 @p= MESSAGE_TEXT;
|
||||||
|
SELECT @p AS `ERROR: `;
|
||||||
|
END;
|
||||||
|
SELECT query AS ``;
|
||||||
|
EXECUTE IMMEDIATE query;
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
CREATE PROCEDURE p1(query TEXT)
|
||||||
|
BEGIN
|
||||||
|
SELECT query AS `-------------------------------------`;
|
||||||
|
EXECUTE IMMEDIATE query;
|
||||||
|
CALL p2('SELECT a=b FROM t1');
|
||||||
|
CALL p2('SELECT b=a FROM t1');
|
||||||
|
CALL p2('SELECT a BETWEEN b AND c FROM t1');
|
||||||
|
CALL p2('SELECT a IN (b,c) FROM t1');
|
||||||
|
CALL p2('SELECT CASE a WHEN b THEN "a" WHEN c THEN "b" END FROM t1');
|
||||||
|
CALL p2('SELECT a=POINT(1,1) FROM t1');
|
||||||
|
CALL p2('SELECT POINT(1,1)=a FROM t1');
|
||||||
|
CALL p2('SELECT a BETWEEN POINT(1,1) AND POINT(1,2) FROM t1');
|
||||||
|
CALL p2('SELECT a IN (POINT(1,1),POINT(1,2)) FROM t1');
|
||||||
|
CALL p2('SELECT CASE a WHEN POINT(1,1) THEN "a" WHEN POINT(1,2) THEN "b" END FROM t1');
|
||||||
|
DROP TABLE t1;
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
DELIMITER ;$$
|
||||||
|
|
||||||
|
CALL p1('CREATE TABLE t1 (a CHAR(10), b Point, c Point)');
|
||||||
|
CALL p1('CREATE TABLE t1 (a VARCHAR(10), b Point, c Point)');
|
||||||
|
CALL p1('CREATE TABLE t1 (a TINYTEXT, b Point, c Point)');
|
||||||
|
CALL p1('CREATE TABLE t1 (a TEXT, b Point, c Point)');
|
||||||
|
CALL p1('CREATE TABLE t1 (a MEDIUMTEXT, b Point, c Point)');
|
||||||
|
CALL p1('CREATE TABLE t1 (a LONGTEXT, b Point, c Point)');
|
||||||
|
CALL p1('CREATE TABLE t1 (a ENUM("a","b"), b Point, c Point)');
|
||||||
|
|
||||||
|
CALL p1('CREATE TABLE t1 (a TINYINT, b Point, c Point)');
|
||||||
|
CALL p1('CREATE TABLE t1 (a SMALLINT, b Point, c Point)');
|
||||||
|
CALL p1('CREATE TABLE t1 (a MEDIUMINT, b Point, c Point)');
|
||||||
|
CALL p1('CREATE TABLE t1 (a INT, b Point, c Point)');
|
||||||
|
CALL p1('CREATE TABLE t1 (a BIGINT, b Point, c Point)');
|
||||||
|
CALL p1('CREATE TABLE t1 (a FLOAT, b Point, c Point)');
|
||||||
|
CALL p1('CREATE TABLE t1 (a DOUBLE, b Point, c Point)');
|
||||||
|
CALL p1('CREATE TABLE t1 (a DECIMAL(10,2), b Point, c Point)');
|
||||||
|
CALL p1('CREATE TABLE t1 (a BIT(8), b Point, c Point)');
|
||||||
|
|
||||||
|
CALL p1('CREATE TABLE t1 (a TIME, b Point, c Point)');
|
||||||
|
CALL p1('CREATE TABLE t1 (a DATE, b Point, c Point)');
|
||||||
|
CALL p1('CREATE TABLE t1 (a DATETIME, b Point, c Point)');
|
||||||
|
CALL p1('CREATE TABLE t1 (a TIMESTAMP, b Point, c Point)');
|
||||||
|
CALL p1('CREATE TABLE t1 (a YEAR, b Point, c Point)');
|
||||||
|
|
||||||
|
CALL p1('CREATE TABLE t1 (a Point, b Point, c Point)');
|
||||||
|
|
||||||
|
|
||||||
|
DROP PROCEDURE p1;
|
||||||
|
DROP PROCEDURE p2;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # End of 10.3 tests
|
--echo # End of 10.3 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -2422,6 +2422,7 @@ ENGINE=myisam
|
|||||||
PARTITION BY LINEAR KEY () PARTITIONS 2;
|
PARTITION BY LINEAR KEY () PARTITIONS 2;
|
||||||
|
|
||||||
INSERT INTO t1 VALUES (1,2,'test'), (2,3,'hi'), (4,5,'bye');
|
INSERT INTO t1 VALUES (1,2,'test'), (2,3,'hi'), (4,5,'bye');
|
||||||
|
--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
|
||||||
SELECT 1 FROM t1 WHERE b < SOME
|
SELECT 1 FROM t1 WHERE b < SOME
|
||||||
( SELECT 1 FROM t1 WHERE a >= 1
|
( SELECT 1 FROM t1 WHERE a >= 1
|
||||||
GROUP BY b WITH ROLLUP
|
GROUP BY b WITH ROLLUP
|
||||||
|
@ -98,28 +98,26 @@ static int cmp_row_type(Item* item1, Item* item2)
|
|||||||
/**
|
/**
|
||||||
Aggregates result types from the array of items.
|
Aggregates result types from the array of items.
|
||||||
|
|
||||||
SYNOPSIS:
|
This method aggregates comparison handler from the array of items.
|
||||||
agg_cmp_type()
|
The result handler is used later for comparison of values of these items.
|
||||||
type [out] the aggregated type
|
|
||||||
items array of items to aggregate the type from
|
|
||||||
nitems number of items in the array
|
|
||||||
|
|
||||||
DESCRIPTION
|
aggregate_for_comparison()
|
||||||
This function aggregates result types from the array of items. Found type
|
funcname the function or operator name,
|
||||||
supposed to be used later for comparison of values of these items.
|
for error reporting
|
||||||
Aggregation itself is performed by the item_cmp_type() function.
|
items array of items to aggregate the type from
|
||||||
@param[out] type the aggregated type
|
nitems number of items in the array
|
||||||
@param items array of items to aggregate the type from
|
int_uint_as_dec what to do when comparing INT to UINT:
|
||||||
@param nitems number of items in the array
|
set the comparison handler to decimal or int.
|
||||||
|
|
||||||
@retval
|
@retval true type incompatibility has been detected
|
||||||
1 type incompatibility has been detected
|
@retval false otherwise
|
||||||
@retval
|
|
||||||
0 otherwise
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
bool Type_handler_hybrid_field_type::aggregate_for_comparison(Item **items,
|
bool
|
||||||
uint nitems)
|
Type_handler_hybrid_field_type::aggregate_for_comparison(const char *funcname,
|
||||||
|
Item **items,
|
||||||
|
uint nitems,
|
||||||
|
bool int_uint_as_dec)
|
||||||
{
|
{
|
||||||
uint unsigned_count= items[0]->unsigned_flag;
|
uint unsigned_count= items[0]->unsigned_flag;
|
||||||
/*
|
/*
|
||||||
@ -132,8 +130,22 @@ bool Type_handler_hybrid_field_type::aggregate_for_comparison(Item **items,
|
|||||||
for (uint i= 1 ; i < nitems ; i++)
|
for (uint i= 1 ; i < nitems ; i++)
|
||||||
{
|
{
|
||||||
unsigned_count+= items[i]->unsigned_flag;
|
unsigned_count+= items[i]->unsigned_flag;
|
||||||
aggregate_for_comparison(items[i]->type_handler()->
|
if (aggregate_for_comparison(items[i]->type_handler()->
|
||||||
type_handler_for_comparison());
|
type_handler_for_comparison()))
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
For more precise error messages if aggregation failed on the first pair
|
||||||
|
{items[0],items[1]}, use the name of items[0]->data_handler().
|
||||||
|
Otherwise use the name of this->type_handler(), which is already a
|
||||||
|
result of aggregation for items[0]..items[i-1].
|
||||||
|
*/
|
||||||
|
my_error(ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION, MYF(0),
|
||||||
|
i == 1 ? items[0]->type_handler()->name().ptr() :
|
||||||
|
type_handler()->name().ptr(),
|
||||||
|
items[i]->type_handler()->name().ptr(),
|
||||||
|
funcname);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
When aggregating types of two row expressions we have to check
|
When aggregating types of two row expressions we have to check
|
||||||
that they have the same cardinality and that each component
|
that they have the same cardinality and that each component
|
||||||
@ -148,7 +160,8 @@ bool Type_handler_hybrid_field_type::aggregate_for_comparison(Item **items,
|
|||||||
If all arguments are of INT type but have different unsigned_flag values,
|
If all arguments are of INT type but have different unsigned_flag values,
|
||||||
switch to DECIMAL_RESULT.
|
switch to DECIMAL_RESULT.
|
||||||
*/
|
*/
|
||||||
if (cmp_type() == INT_RESULT &&
|
if (int_uint_as_dec &&
|
||||||
|
cmp_type() == INT_RESULT &&
|
||||||
unsigned_count != nitems && unsigned_count != 0)
|
unsigned_count != nitems && unsigned_count != 0)
|
||||||
set_handler(&type_handler_newdecimal);
|
set_handler(&type_handler_newdecimal);
|
||||||
return 0;
|
return 0;
|
||||||
@ -471,8 +484,14 @@ int Arg_comparator::set_cmp_func(Item_func_or_sum *owner_arg,
|
|||||||
set_null= set_null && owner_arg;
|
set_null= set_null && owner_arg;
|
||||||
a= a1;
|
a= a1;
|
||||||
b= a2;
|
b= a2;
|
||||||
m_compare_handler= Type_handler::get_handler_by_cmp_type(item_cmp_type(*a1,
|
Item *tmp_args[2]= {*a1, *a2};
|
||||||
*a2));
|
Type_handler_hybrid_field_type tmp;
|
||||||
|
if (tmp.aggregate_for_comparison(owner_arg->func_name(), tmp_args, 2, false))
|
||||||
|
{
|
||||||
|
DBUG_ASSERT(thd->is_error());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
m_compare_handler= tmp.type_handler();
|
||||||
return m_compare_handler->set_comparator_func(this);
|
return m_compare_handler->set_comparator_func(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2004,8 +2023,12 @@ void Item_func_between::fix_length_and_dec()
|
|||||||
*/
|
*/
|
||||||
if (!args[0] || !args[1] || !args[2])
|
if (!args[0] || !args[1] || !args[2])
|
||||||
return;
|
return;
|
||||||
if (m_comparator.aggregate_for_comparison(args, 3))
|
if (m_comparator.aggregate_for_comparison(Item_func_between::func_name(),
|
||||||
|
args, 3, true))
|
||||||
|
{
|
||||||
|
DBUG_ASSERT(thd->is_error());
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (m_comparator.cmp_type() == STRING_RESULT &&
|
if (m_comparator.cmp_type() == STRING_RESULT &&
|
||||||
agg_arg_charsets_for_comparison(cmp_collation, args, 3))
|
agg_arg_charsets_for_comparison(cmp_collation, args, 3))
|
||||||
@ -3033,7 +3056,7 @@ bool Item_func_case::prepare_predicant_and_values(THD *thd, uint *found_types)
|
|||||||
add_predicant(this, (uint) first_expr_num);
|
add_predicant(this, (uint) first_expr_num);
|
||||||
for (uint i= 0 ; i < ncases / 2; i++)
|
for (uint i= 0 ; i < ncases / 2; i++)
|
||||||
{
|
{
|
||||||
if (add_value_skip_null(this, i * 2, &have_null))
|
if (add_value_skip_null("case..when", this, i * 2, &have_null))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
all_values_added(&tmp, &type_cnt, &m_found_types);
|
all_values_added(&tmp, &type_cnt, &m_found_types);
|
||||||
@ -3727,7 +3750,8 @@ bool Predicant_to_list_comparator::alloc_comparators(THD *thd, uint nargs)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Predicant_to_list_comparator::add_value(Item_args *args,
|
bool Predicant_to_list_comparator::add_value(const char *funcname,
|
||||||
|
Item_args *args,
|
||||||
uint value_index)
|
uint value_index)
|
||||||
{
|
{
|
||||||
DBUG_ASSERT(m_predicant_index < args->argument_count());
|
DBUG_ASSERT(m_predicant_index < args->argument_count());
|
||||||
@ -3736,8 +3760,11 @@ bool Predicant_to_list_comparator::add_value(Item_args *args,
|
|||||||
Item *tmpargs[2];
|
Item *tmpargs[2];
|
||||||
tmpargs[0]= args->arguments()[m_predicant_index];
|
tmpargs[0]= args->arguments()[m_predicant_index];
|
||||||
tmpargs[1]= args->arguments()[value_index];
|
tmpargs[1]= args->arguments()[value_index];
|
||||||
if (tmp.aggregate_for_comparison(tmpargs, 2))
|
if (tmp.aggregate_for_comparison(funcname, tmpargs, 2, true))
|
||||||
|
{
|
||||||
|
DBUG_ASSERT(current_thd->is_error());
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
m_comparators[m_comparator_count].m_handler= tmp.type_handler();
|
m_comparators[m_comparator_count].m_handler= tmp.type_handler();
|
||||||
m_comparators[m_comparator_count].m_arg_index= value_index;
|
m_comparators[m_comparator_count].m_arg_index= value_index;
|
||||||
m_comparator_count++;
|
m_comparator_count++;
|
||||||
@ -3745,7 +3772,8 @@ bool Predicant_to_list_comparator::add_value(Item_args *args,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Predicant_to_list_comparator::add_value_skip_null(Item_args *args,
|
bool Predicant_to_list_comparator::add_value_skip_null(const char *funcname,
|
||||||
|
Item_args *args,
|
||||||
uint value_index,
|
uint value_index,
|
||||||
bool *nulls_found)
|
bool *nulls_found)
|
||||||
{
|
{
|
||||||
@ -3760,7 +3788,7 @@ bool Predicant_to_list_comparator::add_value_skip_null(Item_args *args,
|
|||||||
*nulls_found= true;
|
*nulls_found= true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return add_value(args, value_index);
|
return add_value(funcname, args, value_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -4153,7 +4181,7 @@ bool Item_func_in::prepare_predicant_and_values(THD *thd, uint *found_types)
|
|||||||
add_predicant(this, 0);
|
add_predicant(this, 0);
|
||||||
for (uint i= 1 ; i < arg_count; i++)
|
for (uint i= 1 ; i < arg_count; i++)
|
||||||
{
|
{
|
||||||
if (add_value_skip_null(this, i, &have_null))
|
if (add_value_skip_null(Item_func_in::func_name(), this, i, &have_null))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
all_values_added(&m_comparator, &type_cnt, found_types);
|
all_values_added(&m_comparator, &type_cnt, found_types);
|
||||||
|
@ -1825,19 +1825,21 @@ public:
|
|||||||
/**
|
/**
|
||||||
Add a new element into m_comparators[], using a {pred,valueN} pair.
|
Add a new element into m_comparators[], using a {pred,valueN} pair.
|
||||||
|
|
||||||
|
@param funcname - the name of the operation, for error reporting
|
||||||
@param args - the owner function's argument list
|
@param args - the owner function's argument list
|
||||||
@param value_index - the value position in args
|
@param value_index - the value position in args
|
||||||
@retval true - could not add an element because of non-comparable
|
@retval true - could not add an element because of non-comparable
|
||||||
arguments (e.g. ROWs with size)
|
arguments (e.g. ROWs with size)
|
||||||
@retval false - a new element was successfully added.
|
@retval false - a new element was successfully added.
|
||||||
*/
|
*/
|
||||||
bool add_value(Item_args *args, uint value_index);
|
bool add_value(const char *funcname, Item_args *args, uint value_index);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Add a new element into m_comparators[], ignoring explicit NULL values.
|
Add a new element into m_comparators[], ignoring explicit NULL values.
|
||||||
If the value appeared to be an explicit NULL, nulls_found[0] is set to true.
|
If the value appeared to be an explicit NULL, nulls_found[0] is set to true.
|
||||||
*/
|
*/
|
||||||
bool add_value_skip_null(Item_args *args, uint value_index,
|
bool add_value_skip_null(const char *funcname,
|
||||||
|
Item_args *args, uint value_index,
|
||||||
bool *nulls_found);
|
bool *nulls_found);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -57,6 +57,7 @@ Type_handler_bit type_handler_bit;
|
|||||||
|
|
||||||
|
|
||||||
Type_aggregator type_aggregator_for_result;
|
Type_aggregator type_aggregator_for_result;
|
||||||
|
Type_aggregator type_aggregator_for_comparison;
|
||||||
|
|
||||||
|
|
||||||
class Static_data_initializer
|
class Static_data_initializer
|
||||||
@ -81,6 +82,16 @@ public:
|
|||||||
type_aggregator_for_result.add(&type_handler_geometry,
|
type_aggregator_for_result.add(&type_handler_geometry,
|
||||||
&type_handler_string,
|
&type_handler_string,
|
||||||
&type_handler_long_blob);
|
&type_handler_long_blob);
|
||||||
|
|
||||||
|
type_aggregator_for_comparison.add(&type_handler_geometry,
|
||||||
|
&type_handler_geometry,
|
||||||
|
&type_handler_geometry);
|
||||||
|
type_aggregator_for_comparison.add(&type_handler_geometry,
|
||||||
|
&type_handler_null,
|
||||||
|
&type_handler_geometry);
|
||||||
|
type_aggregator_for_comparison.add(&type_handler_geometry,
|
||||||
|
&type_handler_long_blob,
|
||||||
|
&type_handler_long_blob);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -223,6 +234,12 @@ const Name
|
|||||||
|
|
||||||
/***************************************************************************/
|
/***************************************************************************/
|
||||||
|
|
||||||
|
const Type_handler *Type_handler_null::type_handler_for_comparison() const
|
||||||
|
{
|
||||||
|
return &type_handler_null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
const Type_handler *Type_handler_int_result::type_handler_for_comparison() const
|
const Type_handler *Type_handler_int_result::type_handler_for_comparison() const
|
||||||
{
|
{
|
||||||
return &type_handler_longlong;
|
return &type_handler_longlong;
|
||||||
@ -380,11 +397,23 @@ Type_handler_hybrid_field_type::aggregate_for_result(const char *funcname,
|
|||||||
is needed after this call.
|
is needed after this call.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void
|
bool
|
||||||
Type_handler_hybrid_field_type::aggregate_for_comparison(const Type_handler *h)
|
Type_handler_hybrid_field_type::aggregate_for_comparison(const Type_handler *h)
|
||||||
{
|
{
|
||||||
DBUG_ASSERT(m_type_handler == m_type_handler->type_handler_for_comparison());
|
DBUG_ASSERT(m_type_handler == m_type_handler->type_handler_for_comparison());
|
||||||
DBUG_ASSERT(h == h->type_handler_for_comparison());
|
DBUG_ASSERT(h == h->type_handler_for_comparison());
|
||||||
|
|
||||||
|
if (!m_type_handler->is_traditional_type() ||
|
||||||
|
!h->is_traditional_type())
|
||||||
|
{
|
||||||
|
h= type_aggregator_for_comparison.find_handler(m_type_handler, h);
|
||||||
|
if (!h)
|
||||||
|
return true;
|
||||||
|
m_type_handler= h;
|
||||||
|
DBUG_ASSERT(m_type_handler == m_type_handler->type_handler_for_comparison());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
Item_result a= cmp_type();
|
Item_result a= cmp_type();
|
||||||
Item_result b= h->cmp_type();
|
Item_result b= h->cmp_type();
|
||||||
if (a == STRING_RESULT && b == STRING_RESULT)
|
if (a == STRING_RESULT && b == STRING_RESULT)
|
||||||
@ -421,6 +450,7 @@ Type_handler_hybrid_field_type::aggregate_for_comparison(const Type_handler *h)
|
|||||||
else
|
else
|
||||||
m_type_handler= &type_handler_double;
|
m_type_handler= &type_handler_double;
|
||||||
DBUG_ASSERT(m_type_handler == m_type_handler->type_handler_for_comparison());
|
DBUG_ASSERT(m_type_handler == m_type_handler->type_handler_for_comparison());
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -900,6 +930,13 @@ Field *Type_handler_long_blob::make_conversion_table_field(TABLE *table,
|
|||||||
#ifdef HAVE_SPATIAL
|
#ifdef HAVE_SPATIAL
|
||||||
const Name Type_handler_geometry::m_name_geometry(C_STRING_WITH_LEN("geometry"));
|
const Name Type_handler_geometry::m_name_geometry(C_STRING_WITH_LEN("geometry"));
|
||||||
|
|
||||||
|
|
||||||
|
const Type_handler *Type_handler_geometry::type_handler_for_comparison() const
|
||||||
|
{
|
||||||
|
return &type_handler_geometry;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Field *Type_handler_geometry::make_conversion_table_field(TABLE *table,
|
Field *Type_handler_geometry::make_conversion_table_field(TABLE *table,
|
||||||
uint metadata,
|
uint metadata,
|
||||||
const Field *target)
|
const Field *target)
|
||||||
|
@ -1134,6 +1134,7 @@ public:
|
|||||||
virtual ~Type_handler_null() {}
|
virtual ~Type_handler_null() {}
|
||||||
const Name name() const { return m_name_null; }
|
const Name name() const { return m_name_null; }
|
||||||
enum_field_types field_type() const { return MYSQL_TYPE_NULL; }
|
enum_field_types field_type() const { return MYSQL_TYPE_NULL; }
|
||||||
|
const Type_handler *type_handler_for_comparison() const;
|
||||||
uint32 max_display_length(const Item *item) const { return 0; }
|
uint32 max_display_length(const Item *item) const { return 0; }
|
||||||
Field *make_conversion_table_field(TABLE *, uint metadata,
|
Field *make_conversion_table_field(TABLE *, uint metadata,
|
||||||
const Field *target) const;
|
const Field *target) const;
|
||||||
@ -1220,6 +1221,7 @@ public:
|
|||||||
virtual ~Type_handler_geometry() {}
|
virtual ~Type_handler_geometry() {}
|
||||||
const Name name() const { return m_name_geometry; }
|
const Name name() const { return m_name_geometry; }
|
||||||
enum_field_types field_type() const { return MYSQL_TYPE_GEOMETRY; }
|
enum_field_types field_type() const { return MYSQL_TYPE_GEOMETRY; }
|
||||||
|
const Type_handler *type_handler_for_comparison() const;
|
||||||
Field *make_conversion_table_field(TABLE *, uint metadata,
|
Field *make_conversion_table_field(TABLE *, uint metadata,
|
||||||
const Field *target) const;
|
const Field *target) const;
|
||||||
bool is_traditional_type() const
|
bool is_traditional_type() const
|
||||||
@ -1316,8 +1318,10 @@ public:
|
|||||||
{
|
{
|
||||||
return (m_type_handler= Type_handler::get_handler_by_real_type(type));
|
return (m_type_handler= Type_handler::get_handler_by_real_type(type));
|
||||||
}
|
}
|
||||||
void aggregate_for_comparison(const Type_handler *other);
|
bool aggregate_for_comparison(const Type_handler *other);
|
||||||
bool aggregate_for_comparison(Item **items, uint nitems);
|
bool aggregate_for_comparison(const char *funcname,
|
||||||
|
Item **items, uint nitems,
|
||||||
|
bool treat_int_to_uint_as_decimal);
|
||||||
bool aggregate_for_result(const Type_handler *other);
|
bool aggregate_for_result(const Type_handler *other);
|
||||||
bool aggregate_for_result(const char *funcname,
|
bool aggregate_for_result(const char *funcname,
|
||||||
Item **item, uint nitems, bool treat_bit_as_number);
|
Item **item, uint nitems, bool treat_bit_as_number);
|
||||||
@ -1396,5 +1400,6 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
extern Type_aggregator type_aggregator_for_result;
|
extern Type_aggregator type_aggregator_for_result;
|
||||||
|
extern Type_aggregator type_aggregator_for_comparison;
|
||||||
|
|
||||||
#endif /* SQL_TYPE_H_INCLUDED */
|
#endif /* SQL_TYPE_H_INCLUDED */
|
||||||
|
Reference in New Issue
Block a user