diff options
-rw-r--r-- | mysql-test/r/group_by.result | 2 | ||||
-rw-r--r-- | mysql-test/r/union.result | 4 | ||||
-rw-r--r-- | mysql-test/r/view.result | 2 | ||||
-rw-r--r-- | mysql-test/t/subselect.test | 2 | ||||
-rw-r--r-- | sql/field.cc | 639 | ||||
-rw-r--r-- | sql/field.h | 4 | ||||
-rw-r--r-- | sql/item.cc | 53 | ||||
-rw-r--r-- | sql/item.h | 2 | ||||
-rw-r--r-- | sql/item_cmpfunc.cc | 2 | ||||
-rw-r--r-- | sql/item_func.h | 3 | ||||
-rw-r--r-- | sql/item_subselect.cc | 44 | ||||
-rw-r--r-- | sql/item_subselect.h | 4 | ||||
-rw-r--r-- | sql/sql_derived.cc | 2 | ||||
-rw-r--r-- | sql/sql_view.cc | 2 |
14 files changed, 486 insertions, 279 deletions
diff --git a/mysql-test/r/group_by.result b/mysql-test/r/group_by.result index 1c81878e5db..9ff1fbcb833 100644 --- a/mysql-test/r/group_by.result +++ b/mysql-test/r/group_by.result @@ -696,7 +696,7 @@ from t1 x3, t1 x4, t1 C, t1 D where x3.a < 3 and x4.a < 4 and D.a < 4; delete from t2 where a = 2 and b = 'val-2' limit 30; explain select c from t2 where a = 2 and b = 'val-2' group by c; id select_type table type possible_keys key key_len ref rows Extra -1 SIMPLE t2 ref PRIMARY,a PRIMARY 400 const,const 6 Using where +1 SIMPLE t2 ref PRIMARY,a PRIMARY 402 const,const 6 Using where select c from t2 where a = 2 and b = 'val-2' group by c; c val-74 diff --git a/mysql-test/r/union.result b/mysql-test/r/union.result index ee09226797c..8c8e12d8838 100644 --- a/mysql-test/r/union.result +++ b/mysql-test/r/union.result @@ -565,7 +565,7 @@ a show create table t1; Table Create Table t1 CREATE TABLE `t1` ( - `a` decimal(20,1) NOT NULL default '0.0' + `a` decimal(19,1) NOT NULL default '0.0' ) ENGINE=MyISAM DEFAULT CHARSET=latin1 drop table t1; create table t2 (it1 tinyint, it2 tinyint not null, i int not null, ib bigint, f float, d double, y year, da date, dt datetime, sc char(10), sv varchar(10), b blob, tx text); @@ -1226,7 +1226,7 @@ drop table t2; create table t2 select a from t1 union select a from t1; show columns from t2; Field Type Null Key Default Extra -a char(1) +a varchar(1) NO drop table t2; create table t2 select a from t1 union select c from t1; ERROR HY000: Illegal mix of collations (utf8_general_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation 'UNION' diff --git a/mysql-test/r/view.result b/mysql-test/r/view.result index ae1bb42cc29..c5fe4bf8565 100644 --- a/mysql-test/r/view.result +++ b/mysql-test/r/view.result @@ -874,7 +874,7 @@ select * from v1; col1 describe v1; Field Type Null Key Default Extra -col1 char(2) YES NULL +col1 varchar(2) YES NULL drop view v1; drop table `t1a``b`; create table t1 (col1 char(5),col2 char(5)); diff --git a/mysql-test/t/subselect.test b/mysql-test/t/subselect.test index a0ce971febc..55278ad40f8 100644 --- a/mysql-test/t/subselect.test +++ b/mysql-test/t/subselect.test @@ -1726,7 +1726,7 @@ select (select a from t1) = (1,2); select (1,2,3) = (select * from t1); -- error 1241 select (select * from t1) = (1,2,3); -drop table t1 +drop table t1; # #decimal-related tests diff --git a/sql/field.cc b/sql/field.cc index 8af33a5e88f..d983b5fb7c0 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -55,9 +55,9 @@ const char field_separator=','; following #defines describe that gap and how to canculate number of fields and index of field in thia array. */ -#define FIELDTYPE_TEAR_FROM (MYSQL_TYPE_NEWDATE+1) -#define FIELDTYPE_TEAR_TO (MYSQL_TYPE_ENUM-1) -#define FIELDTYPE_NUM (FIELDTYPE_TEAR_FROM + (255-FIELDTYPE_TEAR_TO)) +#define FIELDTYPE_TEAR_FROM (MYSQL_TYPE_BIT + 1) +#define FIELDTYPE_TEAR_TO (MYSQL_TYPE_NEWDECIMAL - 1) +#define FIELDTYPE_NUM (FIELDTYPE_TEAR_FROM + (255 - FIELDTYPE_TEAR_TO)) inline int field_type2index (enum_field_types field_type) { return (field_type < FIELDTYPE_TEAR_FROM ? @@ -70,118 +70,126 @@ static enum_field_types field_types_merge_rules [FIELDTYPE_NUM][FIELDTYPE_NUM]= /* MYSQL_TYPE_DECIMAL -> */ { //MYSQL_TYPE_DECIMAL MYSQL_TYPE_TINY - MYSQL_TYPE_DECIMAL, MYSQL_TYPE_DECIMAL, + MYSQL_TYPE_NEWDECIMAL, MYSQL_TYPE_NEWDECIMAL, //MYSQL_TYPE_SHORT MYSQL_TYPE_LONG - MYSQL_TYPE_DECIMAL, MYSQL_TYPE_DECIMAL, + MYSQL_TYPE_NEWDECIMAL, MYSQL_TYPE_NEWDECIMAL, //MYSQL_TYPE_FLOAT MYSQL_TYPE_DOUBLE MYSQL_TYPE_DOUBLE, MYSQL_TYPE_DOUBLE, //MYSQL_TYPE_NULL MYSQL_TYPE_TIMESTAMP - MYSQL_TYPE_DECIMAL, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_NEWDECIMAL, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_LONGLONG MYSQL_TYPE_INT24 MYSQL_TYPE_DECIMAL, MYSQL_TYPE_DECIMAL, //MYSQL_TYPE_DATE MYSQL_TYPE_TIME - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_DATETIME MYSQL_TYPE_YEAR - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, - //MYSQL_TYPE_NEWDATE <14> - MYSQL_TYPE_VAR_STRING, - //<246> MYSQL_TYPE_ENUM - MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NEWDATE MYSQL_TYPE_VARCHAR + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_BIT <16>-<245> + MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NEWDECIMAL MYSQL_TYPE_ENUM + MYSQL_TYPE_NEWDECIMAL, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_SET MYSQL_TYPE_TINY_BLOB - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_TINY_BLOB, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_TINY_BLOB, //MYSQL_TYPE_MEDIUM_BLOB MYSQL_TYPE_LONG_BLOB MYSQL_TYPE_MEDIUM_BLOB, MYSQL_TYPE_LONG_BLOB, //MYSQL_TYPE_BLOB MYSQL_TYPE_VAR_STRING - MYSQL_TYPE_BLOB, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_BLOB, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_STRING MYSQL_TYPE_GEOMETRY - MYSQL_TYPE_STRING, MYSQL_TYPE_VAR_STRING + MYSQL_TYPE_STRING, MYSQL_TYPE_VARCHAR }, /* MYSQL_TYPE_TINY -> */ { //MYSQL_TYPE_DECIMAL MYSQL_TYPE_TINY - MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY, + MYSQL_TYPE_NEWDECIMAL, MYSQL_TYPE_TINY, //MYSQL_TYPE_SHORT MYSQL_TYPE_LONG MYSQL_TYPE_SHORT, MYSQL_TYPE_LONG, //MYSQL_TYPE_FLOAT MYSQL_TYPE_DOUBLE MYSQL_TYPE_FLOAT, MYSQL_TYPE_DOUBLE, //MYSQL_TYPE_NULL MYSQL_TYPE_TIMESTAMP - MYSQL_TYPE_TINY, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_TINY, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_LONGLONG MYSQL_TYPE_INT24 MYSQL_TYPE_LONGLONG, MYSQL_TYPE_INT24, //MYSQL_TYPE_DATE MYSQL_TYPE_TIME - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_DATETIME MYSQL_TYPE_YEAR - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_TINY, - //MYSQL_TYPE_NEWDATE <14> - MYSQL_TYPE_VAR_STRING, - //<246> MYSQL_TYPE_ENUM - MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_TINY, + //MYSQL_TYPE_NEWDATE MYSQL_TYPE_VARCHAR + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_BIT <16>-<245> + MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NEWDECIMAL MYSQL_TYPE_ENUM + MYSQL_TYPE_NEWDECIMAL, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_SET MYSQL_TYPE_TINY_BLOB - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_TINY_BLOB, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_TINY_BLOB, //MYSQL_TYPE_MEDIUM_BLOB MYSQL_TYPE_LONG_BLOB MYSQL_TYPE_MEDIUM_BLOB, MYSQL_TYPE_LONG_BLOB, //MYSQL_TYPE_BLOB MYSQL_TYPE_VAR_STRING - MYSQL_TYPE_BLOB, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_BLOB, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_STRING MYSQL_TYPE_GEOMETRY - MYSQL_TYPE_STRING, MYSQL_TYPE_VAR_STRING + MYSQL_TYPE_STRING, MYSQL_TYPE_VARCHAR }, /* MYSQL_TYPE_SHORT -> */ { //MYSQL_TYPE_DECIMAL MYSQL_TYPE_TINY - MYSQL_TYPE_DECIMAL, MYSQL_TYPE_SHORT, + MYSQL_TYPE_NEWDECIMAL, MYSQL_TYPE_SHORT, //MYSQL_TYPE_SHORT MYSQL_TYPE_LONG MYSQL_TYPE_SHORT, MYSQL_TYPE_LONG, //MYSQL_TYPE_FLOAT MYSQL_TYPE_DOUBLE MYSQL_TYPE_FLOAT, MYSQL_TYPE_DOUBLE, //MYSQL_TYPE_NULL MYSQL_TYPE_TIMESTAMP - MYSQL_TYPE_SHORT, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_SHORT, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_LONGLONG MYSQL_TYPE_INT24 MYSQL_TYPE_LONGLONG, MYSQL_TYPE_INT24, //MYSQL_TYPE_DATE MYSQL_TYPE_TIME - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_DATETIME MYSQL_TYPE_YEAR - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_SHORT, - //MYSQL_TYPE_NEWDATE <14> - MYSQL_TYPE_VAR_STRING, - //<246> MYSQL_TYPE_ENUM - MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_SHORT, + //MYSQL_TYPE_NEWDATE MYSQL_TYPE_VARCHAR + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_BIT <16>-<245> + MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NEWDECIMAL MYSQL_TYPE_ENUM + MYSQL_TYPE_NEWDECIMAL, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_SET MYSQL_TYPE_TINY_BLOB - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_TINY_BLOB, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_TINY_BLOB, //MYSQL_TYPE_MEDIUM_BLOB MYSQL_TYPE_LONG_BLOB MYSQL_TYPE_MEDIUM_BLOB, MYSQL_TYPE_LONG_BLOB, //MYSQL_TYPE_BLOB MYSQL_TYPE_VAR_STRING - MYSQL_TYPE_BLOB, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_BLOB, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_STRING MYSQL_TYPE_GEOMETRY - MYSQL_TYPE_STRING, MYSQL_TYPE_VAR_STRING + MYSQL_TYPE_STRING, MYSQL_TYPE_VARCHAR }, /* MYSQL_TYPE_LONG -> */ { //MYSQL_TYPE_DECIMAL MYSQL_TYPE_TINY - MYSQL_TYPE_DECIMAL, MYSQL_TYPE_LONG, + MYSQL_TYPE_NEWDECIMAL, MYSQL_TYPE_LONG, //MYSQL_TYPE_SHORT MYSQL_TYPE_LONG MYSQL_TYPE_LONG, MYSQL_TYPE_LONG, //MYSQL_TYPE_FLOAT MYSQL_TYPE_DOUBLE MYSQL_TYPE_DOUBLE, MYSQL_TYPE_DOUBLE, //MYSQL_TYPE_NULL MYSQL_TYPE_TIMESTAMP - MYSQL_TYPE_LONG, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_LONG, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_LONGLONG MYSQL_TYPE_INT24 - MYSQL_TYPE_LONGLONG, MYSQL_TYPE_LONG, + MYSQL_TYPE_LONGLONG, MYSQL_TYPE_INT24, //MYSQL_TYPE_DATE MYSQL_TYPE_TIME - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_DATETIME MYSQL_TYPE_YEAR - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_LONG, - //MYSQL_TYPE_NEWDATE <14> - MYSQL_TYPE_VAR_STRING, - //<246> MYSQL_TYPE_ENUM - MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_LONG, + //MYSQL_TYPE_NEWDATE MYSQL_TYPE_VARCHAR + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_BIT <16>-<245> + MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NEWDECIMAL MYSQL_TYPE_ENUM + MYSQL_TYPE_NEWDECIMAL, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_SET MYSQL_TYPE_TINY_BLOB - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_TINY_BLOB, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_TINY_BLOB, //MYSQL_TYPE_MEDIUM_BLOB MYSQL_TYPE_LONG_BLOB MYSQL_TYPE_MEDIUM_BLOB, MYSQL_TYPE_LONG_BLOB, //MYSQL_TYPE_BLOB MYSQL_TYPE_VAR_STRING - MYSQL_TYPE_BLOB, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_BLOB, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_STRING MYSQL_TYPE_GEOMETRY - MYSQL_TYPE_STRING, MYSQL_TYPE_VAR_STRING + MYSQL_TYPE_STRING, MYSQL_TYPE_VARCHAR }, /* MYSQL_TYPE_FLOAT -> */ { @@ -192,25 +200,27 @@ static enum_field_types field_types_merge_rules [FIELDTYPE_NUM][FIELDTYPE_NUM]= //MYSQL_TYPE_FLOAT MYSQL_TYPE_DOUBLE MYSQL_TYPE_FLOAT, MYSQL_TYPE_DOUBLE, //MYSQL_TYPE_NULL MYSQL_TYPE_TIMESTAMP - MYSQL_TYPE_FLOAT, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_FLOAT, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_LONGLONG MYSQL_TYPE_INT24 - MYSQL_TYPE_DOUBLE, MYSQL_TYPE_FLOAT, + MYSQL_TYPE_FLOAT, MYSQL_TYPE_INT24, //MYSQL_TYPE_DATE MYSQL_TYPE_TIME - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_DATETIME MYSQL_TYPE_YEAR - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_FLOAT, - //MYSQL_TYPE_NEWDATE <14> - MYSQL_TYPE_VAR_STRING, - //<246> MYSQL_TYPE_ENUM - MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_FLOAT, + //MYSQL_TYPE_NEWDATE MYSQL_TYPE_VARCHAR + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_BIT <16>-<245> + MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NEWDECIMAL MYSQL_TYPE_ENUM + MYSQL_TYPE_DOUBLE, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_SET MYSQL_TYPE_TINY_BLOB - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_TINY_BLOB, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_TINY_BLOB, //MYSQL_TYPE_MEDIUM_BLOB MYSQL_TYPE_LONG_BLOB MYSQL_TYPE_MEDIUM_BLOB, MYSQL_TYPE_LONG_BLOB, //MYSQL_TYPE_BLOB MYSQL_TYPE_VAR_STRING - MYSQL_TYPE_BLOB, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_BLOB, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_STRING MYSQL_TYPE_GEOMETRY - MYSQL_TYPE_STRING, MYSQL_TYPE_VAR_STRING + MYSQL_TYPE_STRING, MYSQL_TYPE_VARCHAR }, /* MYSQL_TYPE_DOUBLE -> */ { @@ -221,30 +231,32 @@ static enum_field_types field_types_merge_rules [FIELDTYPE_NUM][FIELDTYPE_NUM]= //MYSQL_TYPE_FLOAT MYSQL_TYPE_DOUBLE MYSQL_TYPE_DOUBLE, MYSQL_TYPE_DOUBLE, //MYSQL_TYPE_NULL MYSQL_TYPE_TIMESTAMP - MYSQL_TYPE_DOUBLE, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_DOUBLE, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_LONGLONG MYSQL_TYPE_INT24 - MYSQL_TYPE_DOUBLE, MYSQL_TYPE_DOUBLE, + MYSQL_TYPE_DOUBLE, MYSQL_TYPE_INT24, //MYSQL_TYPE_DATE MYSQL_TYPE_TIME - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_DATETIME MYSQL_TYPE_YEAR - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_DOUBLE, - //MYSQL_TYPE_NEWDATE <14> - MYSQL_TYPE_VAR_STRING, - //<246> MYSQL_TYPE_ENUM - MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_DOUBLE, + //MYSQL_TYPE_NEWDATE MYSQL_TYPE_VARCHAR + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_BIT <16>-<245> + MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NEWDECIMAL MYSQL_TYPE_ENUM + MYSQL_TYPE_DOUBLE, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_SET MYSQL_TYPE_TINY_BLOB - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_TINY_BLOB, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_TINY_BLOB, //MYSQL_TYPE_MEDIUM_BLOB MYSQL_TYPE_LONG_BLOB MYSQL_TYPE_MEDIUM_BLOB, MYSQL_TYPE_LONG_BLOB, //MYSQL_TYPE_BLOB MYSQL_TYPE_VAR_STRING - MYSQL_TYPE_BLOB, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_BLOB, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_STRING MYSQL_TYPE_GEOMETRY - MYSQL_TYPE_STRING, MYSQL_TYPE_VAR_STRING + MYSQL_TYPE_STRING, MYSQL_TYPE_VARCHAR }, /* MYSQL_TYPE_NULL -> */ { //MYSQL_TYPE_DECIMAL MYSQL_TYPE_TINY - MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY, + MYSQL_TYPE_NEWDECIMAL, MYSQL_TYPE_TINY, //MYSQL_TYPE_SHORT MYSQL_TYPE_LONG MYSQL_TYPE_SHORT, MYSQL_TYPE_LONG, //MYSQL_TYPE_FLOAT MYSQL_TYPE_DOUBLE @@ -257,192 +269,206 @@ static enum_field_types field_types_merge_rules [FIELDTYPE_NUM][FIELDTYPE_NUM]= MYSQL_TYPE_NEWDATE, MYSQL_TYPE_TIME, //MYSQL_TYPE_DATETIME MYSQL_TYPE_YEAR MYSQL_TYPE_DATETIME, MYSQL_TYPE_YEAR, - //MYSQL_TYPE_NEWDATE <14> - MYSQL_TYPE_NEWDATE, - //<246> MYSQL_TYPE_ENUM - MYSQL_TYPE_ENUM, + //MYSQL_TYPE_NEWDATE MYSQL_TYPE_VARCHAR + MYSQL_TYPE_NEWDATE, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_BIT <16>-<245> + MYSQL_TYPE_BIT, + //MYSQL_TYPE_NEWDECIMAL MYSQL_TYPE_ENUM + MYSQL_TYPE_NEWDECIMAL, MYSQL_TYPE_ENUM, //MYSQL_TYPE_SET MYSQL_TYPE_TINY_BLOB MYSQL_TYPE_SET, MYSQL_TYPE_TINY_BLOB, //MYSQL_TYPE_MEDIUM_BLOB MYSQL_TYPE_LONG_BLOB MYSQL_TYPE_MEDIUM_BLOB, MYSQL_TYPE_LONG_BLOB, //MYSQL_TYPE_BLOB MYSQL_TYPE_VAR_STRING - MYSQL_TYPE_BLOB, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_BLOB, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_STRING MYSQL_TYPE_GEOMETRY MYSQL_TYPE_STRING, MYSQL_TYPE_GEOMETRY }, /* MYSQL_TYPE_TIMESTAMP -> */ { //MYSQL_TYPE_DECIMAL MYSQL_TYPE_TINY - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_SHORT MYSQL_TYPE_LONG - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_FLOAT MYSQL_TYPE_DOUBLE - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_NULL MYSQL_TYPE_TIMESTAMP MYSQL_TYPE_TIMESTAMP, MYSQL_TYPE_TIMESTAMP, //MYSQL_TYPE_LONGLONG MYSQL_TYPE_INT24 - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_DATE MYSQL_TYPE_TIME MYSQL_TYPE_DATETIME, MYSQL_TYPE_DATETIME, //MYSQL_TYPE_DATETIME MYSQL_TYPE_YEAR - MYSQL_TYPE_DATETIME, MYSQL_TYPE_VAR_STRING, - //MYSQL_TYPE_NEWDATE <14> - MYSQL_TYPE_DATETIME, - //<246> MYSQL_TYPE_ENUM - MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_DATETIME, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NEWDATE MYSQL_TYPE_VARCHAR + MYSQL_TYPE_NEWDATE, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_BIT <16>-<245> + MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NEWDECIMAL MYSQL_TYPE_ENUM + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_SET MYSQL_TYPE_TINY_BLOB - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_TINY_BLOB, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_TINY_BLOB, //MYSQL_TYPE_MEDIUM_BLOB MYSQL_TYPE_LONG_BLOB MYSQL_TYPE_MEDIUM_BLOB, MYSQL_TYPE_LONG_BLOB, //MYSQL_TYPE_BLOB MYSQL_TYPE_VAR_STRING - MYSQL_TYPE_BLOB, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_BLOB, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_STRING MYSQL_TYPE_GEOMETRY - MYSQL_TYPE_STRING, MYSQL_TYPE_VAR_STRING + MYSQL_TYPE_STRING, MYSQL_TYPE_VARCHAR }, /* MYSQL_TYPE_LONGLONG -> */ { //MYSQL_TYPE_DECIMAL MYSQL_TYPE_TINY - MYSQL_TYPE_DECIMAL, MYSQL_TYPE_LONGLONG, + MYSQL_TYPE_NEWDECIMAL, MYSQL_TYPE_LONGLONG, //MYSQL_TYPE_SHORT MYSQL_TYPE_LONG MYSQL_TYPE_LONGLONG, MYSQL_TYPE_LONGLONG, //MYSQL_TYPE_FLOAT MYSQL_TYPE_DOUBLE MYSQL_TYPE_DOUBLE, MYSQL_TYPE_DOUBLE, //MYSQL_TYPE_NULL MYSQL_TYPE_TIMESTAMP - MYSQL_TYPE_LONGLONG, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_LONGLONG, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_LONGLONG MYSQL_TYPE_INT24 MYSQL_TYPE_LONGLONG, MYSQL_TYPE_LONG, //MYSQL_TYPE_DATE MYSQL_TYPE_TIME - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_DATETIME MYSQL_TYPE_YEAR - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_LONGLONG, - //MYSQL_TYPE_NEWDATE <14> - MYSQL_TYPE_VAR_STRING, - //<246> MYSQL_TYPE_ENUM - MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_LONGLONG, + //MYSQL_TYPE_NEWDATE MYSQL_TYPE_VARCHAR + MYSQL_TYPE_NEWDATE, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_BIT <16>-<245> + MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NEWDECIMAL MYSQL_TYPE_ENUM + MYSQL_TYPE_NEWDECIMAL, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_SET MYSQL_TYPE_TINY_BLOB - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_TINY_BLOB, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_TINY_BLOB, //MYSQL_TYPE_MEDIUM_BLOB MYSQL_TYPE_LONG_BLOB MYSQL_TYPE_MEDIUM_BLOB, MYSQL_TYPE_LONG_BLOB, //MYSQL_TYPE_BLOB MYSQL_TYPE_VAR_STRING - MYSQL_TYPE_BLOB, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_BLOB, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_STRING MYSQL_TYPE_GEOMETRY - MYSQL_TYPE_STRING, MYSQL_TYPE_VAR_STRING + MYSQL_TYPE_STRING, MYSQL_TYPE_VARCHAR }, /* MYSQL_TYPE_INT24 -> */ { //MYSQL_TYPE_DECIMAL MYSQL_TYPE_TINY - MYSQL_TYPE_DECIMAL, MYSQL_TYPE_INT24, + MYSQL_TYPE_NEWDECIMAL, MYSQL_TYPE_INT24, //MYSQL_TYPE_SHORT MYSQL_TYPE_LONG MYSQL_TYPE_INT24, MYSQL_TYPE_LONG, //MYSQL_TYPE_FLOAT MYSQL_TYPE_DOUBLE MYSQL_TYPE_FLOAT, MYSQL_TYPE_DOUBLE, //MYSQL_TYPE_NULL MYSQL_TYPE_TIMESTAMP - MYSQL_TYPE_INT24, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_INT24, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_LONGLONG MYSQL_TYPE_INT24 MYSQL_TYPE_LONGLONG, MYSQL_TYPE_INT24, //MYSQL_TYPE_DATE MYSQL_TYPE_TIME - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_DATETIME MYSQL_TYPE_YEAR - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_INT24, - //MYSQL_TYPE_NEWDATE <14> - MYSQL_TYPE_VAR_STRING, - //<246> MYSQL_TYPE_ENUM - MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_INT24, + //MYSQL_TYPE_NEWDATE MYSQL_TYPE_VARCHAR + MYSQL_TYPE_NEWDATE, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_BIT <16>-<245> + MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NEWDECIMAL MYSQL_TYPE_ENUM + MYSQL_TYPE_NEWDECIMAL, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_SET MYSQL_TYPE_TINY_BLOB - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_TINY_BLOB, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_TINY_BLOB, //MYSQL_TYPE_MEDIUM_BLOB MYSQL_TYPE_LONG_BLOB MYSQL_TYPE_MEDIUM_BLOB, MYSQL_TYPE_LONG_BLOB, //MYSQL_TYPE_BLOB MYSQL_TYPE_VAR_STRING - MYSQL_TYPE_BLOB, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_BLOB, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_STRING MYSQL_TYPE_GEOMETRY - MYSQL_TYPE_STRING, MYSQL_TYPE_VAR_STRING + MYSQL_TYPE_STRING, MYSQL_TYPE_VARCHAR }, /* MYSQL_TYPE_DATE -> */ { //MYSQL_TYPE_DECIMAL MYSQL_TYPE_TINY - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_SHORT MYSQL_TYPE_LONG - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_FLOAT MYSQL_TYPE_DOUBLE - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_NULL MYSQL_TYPE_TIMESTAMP MYSQL_TYPE_NEWDATE, MYSQL_TYPE_DATETIME, //MYSQL_TYPE_LONGLONG MYSQL_TYPE_INT24 - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_DATE MYSQL_TYPE_TIME MYSQL_TYPE_NEWDATE, MYSQL_TYPE_DATETIME, //MYSQL_TYPE_DATETIME MYSQL_TYPE_YEAR - MYSQL_TYPE_DATETIME, MYSQL_TYPE_VAR_STRING, - //MYSQL_TYPE_NEWDATE <14> - MYSQL_TYPE_NEWDATE, - //<246> MYSQL_TYPE_ENUM - MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_DATETIME, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NEWDATE MYSQL_TYPE_VARCHAR + MYSQL_TYPE_NEWDATE, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_BIT <16>-<245> + MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NEWDECIMAL MYSQL_TYPE_ENUM + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_SET MYSQL_TYPE_TINY_BLOB - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_TINY_BLOB, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_TINY_BLOB, //MYSQL_TYPE_MEDIUM_BLOB MYSQL_TYPE_LONG_BLOB MYSQL_TYPE_MEDIUM_BLOB, MYSQL_TYPE_LONG_BLOB, //MYSQL_TYPE_BLOB MYSQL_TYPE_VAR_STRING - MYSQL_TYPE_BLOB, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_BLOB, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_STRING MYSQL_TYPE_GEOMETRY - MYSQL_TYPE_STRING, MYSQL_TYPE_VAR_STRING + MYSQL_TYPE_STRING, MYSQL_TYPE_VARCHAR }, /* MYSQL_TYPE_TIME -> */ { //MYSQL_TYPE_DECIMAL MYSQL_TYPE_TINY - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_SHORT MYSQL_TYPE_LONG - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_FLOAT MYSQL_TYPE_DOUBLE - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_NULL MYSQL_TYPE_TIMESTAMP MYSQL_TYPE_TIME, MYSQL_TYPE_DATETIME, //MYSQL_TYPE_LONGLONG MYSQL_TYPE_INT24 - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_DATE MYSQL_TYPE_TIME MYSQL_TYPE_DATETIME, MYSQL_TYPE_TIME, //MYSQL_TYPE_DATETIME MYSQL_TYPE_YEAR - MYSQL_TYPE_DATETIME, MYSQL_TYPE_VAR_STRING, - //MYSQL_TYPE_NEWDATE <14> - MYSQL_TYPE_DATETIME, - //<246> MYSQL_TYPE_ENUM - MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_DATETIME, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NEWDATE MYSQL_TYPE_VARCHAR + MYSQL_TYPE_NEWDATE, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_BIT <16>-<245> + MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NEWDECIMAL MYSQL_TYPE_ENUM + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_SET MYSQL_TYPE_TINY_BLOB - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_TINY_BLOB, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_TINY_BLOB, //MYSQL_TYPE_MEDIUM_BLOB MYSQL_TYPE_LONG_BLOB MYSQL_TYPE_MEDIUM_BLOB, MYSQL_TYPE_LONG_BLOB, //MYSQL_TYPE_BLOB MYSQL_TYPE_VAR_STRING - MYSQL_TYPE_BLOB, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_BLOB, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_STRING MYSQL_TYPE_GEOMETRY - MYSQL_TYPE_STRING, MYSQL_TYPE_VAR_STRING + MYSQL_TYPE_STRING, MYSQL_TYPE_VARCHAR }, /* MYSQL_TYPE_DATETIME -> */ { //MYSQL_TYPE_DECIMAL MYSQL_TYPE_TINY - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_SHORT MYSQL_TYPE_LONG - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_FLOAT MYSQL_TYPE_DOUBLE - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_NULL MYSQL_TYPE_TIMESTAMP MYSQL_TYPE_DATETIME, MYSQL_TYPE_DATETIME, //MYSQL_TYPE_LONGLONG MYSQL_TYPE_INT24 - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_DATE MYSQL_TYPE_TIME MYSQL_TYPE_DATETIME, MYSQL_TYPE_DATETIME, //MYSQL_TYPE_DATETIME MYSQL_TYPE_YEAR - MYSQL_TYPE_DATETIME, MYSQL_TYPE_VAR_STRING, - //MYSQL_TYPE_NEWDATE <14> - MYSQL_TYPE_DATETIME, - //<246> MYSQL_TYPE_ENUM - MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_DATETIME, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NEWDATE MYSQL_TYPE_VARCHAR + MYSQL_TYPE_NEWDATE, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_BIT <16>-<245> + MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NEWDECIMAL MYSQL_TYPE_ENUM + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_SET MYSQL_TYPE_TINY_BLOB - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_TINY_BLOB, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_TINY_BLOB, //MYSQL_TYPE_MEDIUM_BLOB MYSQL_TYPE_LONG_BLOB MYSQL_TYPE_MEDIUM_BLOB, MYSQL_TYPE_LONG_BLOB, //MYSQL_TYPE_BLOB MYSQL_TYPE_VAR_STRING - MYSQL_TYPE_BLOB, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_BLOB, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_STRING MYSQL_TYPE_GEOMETRY - MYSQL_TYPE_STRING, MYSQL_TYPE_VAR_STRING + MYSQL_TYPE_STRING, MYSQL_TYPE_VARCHAR }, /* MYSQL_TYPE_YEAR -> */ { @@ -453,112 +479,213 @@ static enum_field_types field_types_merge_rules [FIELDTYPE_NUM][FIELDTYPE_NUM]= //MYSQL_TYPE_FLOAT MYSQL_TYPE_DOUBLE MYSQL_TYPE_FLOAT, MYSQL_TYPE_DOUBLE, //MYSQL_TYPE_NULL MYSQL_TYPE_TIMESTAMP - MYSQL_TYPE_YEAR, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_YEAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_LONGLONG MYSQL_TYPE_INT24 MYSQL_TYPE_LONGLONG, MYSQL_TYPE_INT24, //MYSQL_TYPE_DATE MYSQL_TYPE_TIME - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_DATETIME MYSQL_TYPE_YEAR - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_YEAR, - //MYSQL_TYPE_NEWDATE <14> - MYSQL_TYPE_VAR_STRING, - //<246> MYSQL_TYPE_ENUM - MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_YEAR, + //MYSQL_TYPE_NEWDATE MYSQL_TYPE_VARCHAR + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_BIT <16>-<245> + MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NEWDECIMAL MYSQL_TYPE_ENUM + MYSQL_TYPE_NEWDECIMAL, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_SET MYSQL_TYPE_TINY_BLOB - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_TINY_BLOB, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_TINY_BLOB, //MYSQL_TYPE_MEDIUM_BLOB MYSQL_TYPE_LONG_BLOB MYSQL_TYPE_MEDIUM_BLOB, MYSQL_TYPE_LONG_BLOB, //MYSQL_TYPE_BLOB MYSQL_TYPE_VAR_STRING - MYSQL_TYPE_BLOB, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_BLOB, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_STRING MYSQL_TYPE_GEOMETRY - MYSQL_TYPE_STRING, MYSQL_TYPE_VAR_STRING + MYSQL_TYPE_STRING, MYSQL_TYPE_VARCHAR }, /* MYSQL_TYPE_NEWDATE -> */ { //MYSQL_TYPE_DECIMAL MYSQL_TYPE_TINY - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_SHORT MYSQL_TYPE_LONG - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_FLOAT MYSQL_TYPE_DOUBLE - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_NULL MYSQL_TYPE_TIMESTAMP MYSQL_TYPE_NEWDATE, MYSQL_TYPE_DATETIME, //MYSQL_TYPE_LONGLONG MYSQL_TYPE_INT24 - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_DATE MYSQL_TYPE_TIME MYSQL_TYPE_NEWDATE, MYSQL_TYPE_DATETIME, //MYSQL_TYPE_DATETIME MYSQL_TYPE_YEAR - MYSQL_TYPE_DATETIME, MYSQL_TYPE_VAR_STRING, - //MYSQL_TYPE_NEWDATE <14> - MYSQL_TYPE_NEWDATE, - //<246> MYSQL_TYPE_ENUM - MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_DATETIME, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NEWDATE MYSQL_TYPE_VARCHAR + MYSQL_TYPE_NEWDATE, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_BIT <16>-<245> + MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NEWDECIMAL MYSQL_TYPE_ENUM + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_SET MYSQL_TYPE_TINY_BLOB + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_TINY_BLOB, + //MYSQL_TYPE_MEDIUM_BLOB MYSQL_TYPE_LONG_BLOB + MYSQL_TYPE_MEDIUM_BLOB, MYSQL_TYPE_LONG_BLOB, + //MYSQL_TYPE_BLOB MYSQL_TYPE_VAR_STRING + MYSQL_TYPE_BLOB, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_STRING MYSQL_TYPE_GEOMETRY + MYSQL_TYPE_STRING, MYSQL_TYPE_VARCHAR + }, + /* MYSQL_TYPE_VARCHAR -> */ + { + //MYSQL_TYPE_DECIMAL MYSQL_TYPE_TINY + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_SHORT MYSQL_TYPE_LONG + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_FLOAT MYSQL_TYPE_DOUBLE + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NULL MYSQL_TYPE_TIMESTAMP + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_LONGLONG MYSQL_TYPE_INT24 + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_DATE MYSQL_TYPE_TIME + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_DATETIME MYSQL_TYPE_YEAR + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NEWDATE MYSQL_TYPE_VARCHAR + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_BIT <16>-<245> + MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NEWDECIMAL MYSQL_TYPE_ENUM + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_SET MYSQL_TYPE_TINY_BLOB + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_TINY_BLOB, + //MYSQL_TYPE_MEDIUM_BLOB MYSQL_TYPE_LONG_BLOB + MYSQL_TYPE_MEDIUM_BLOB, MYSQL_TYPE_LONG_BLOB, + //MYSQL_TYPE_BLOB MYSQL_TYPE_VAR_STRING + MYSQL_TYPE_BLOB, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_STRING MYSQL_TYPE_GEOMETRY + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR + }, + /* MYSQL_TYPE_BIT -> */ + { + //MYSQL_TYPE_DECIMAL MYSQL_TYPE_TINY + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_SHORT MYSQL_TYPE_LONG + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_FLOAT MYSQL_TYPE_DOUBLE + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NULL MYSQL_TYPE_TIMESTAMP + MYSQL_TYPE_BIT, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_LONGLONG MYSQL_TYPE_INT24 + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_DATE MYSQL_TYPE_TIME + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_DATETIME MYSQL_TYPE_YEAR + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NEWDATE MYSQL_TYPE_VARCHAR + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_BIT <16>-<245> + MYSQL_TYPE_BIT, + //MYSQL_TYPE_NEWDECIMAL MYSQL_TYPE_ENUM + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_SET MYSQL_TYPE_TINY_BLOB + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_TINY_BLOB, + //MYSQL_TYPE_MEDIUM_BLOB MYSQL_TYPE_LONG_BLOB + MYSQL_TYPE_MEDIUM_BLOB, MYSQL_TYPE_LONG_BLOB, + //MYSQL_TYPE_BLOB MYSQL_TYPE_VAR_STRING + MYSQL_TYPE_BLOB, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_STRING MYSQL_TYPE_GEOMETRY + MYSQL_TYPE_STRING, MYSQL_TYPE_VARCHAR + }, + /* MYSQL_TYPE_NEWDECIMAL -> */ + { + //MYSQL_TYPE_DECIMAL MYSQL_TYPE_TINY + MYSQL_TYPE_NEWDECIMAL, MYSQL_TYPE_NEWDECIMAL, + //MYSQL_TYPE_SHORT MYSQL_TYPE_LONG + MYSQL_TYPE_NEWDECIMAL, MYSQL_TYPE_NEWDECIMAL, + //MYSQL_TYPE_FLOAT MYSQL_TYPE_DOUBLE + MYSQL_TYPE_DOUBLE, MYSQL_TYPE_DOUBLE, + //MYSQL_TYPE_NULL MYSQL_TYPE_TIMESTAMP + MYSQL_TYPE_NEWDECIMAL, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_LONGLONG MYSQL_TYPE_INT24 + MYSQL_TYPE_NEWDECIMAL, MYSQL_TYPE_NEWDECIMAL, + //MYSQL_TYPE_DATE MYSQL_TYPE_TIME + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_DATETIME MYSQL_TYPE_YEAR + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_NEWDECIMAL, + //MYSQL_TYPE_NEWDATE MYSQL_TYPE_VARCHAR + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_BIT <16>-<245> + MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NEWDECIMAL MYSQL_TYPE_ENUM + MYSQL_TYPE_NEWDECIMAL, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_SET MYSQL_TYPE_TINY_BLOB - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_TINY_BLOB, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_TINY_BLOB, //MYSQL_TYPE_MEDIUM_BLOB MYSQL_TYPE_LONG_BLOB MYSQL_TYPE_MEDIUM_BLOB, MYSQL_TYPE_LONG_BLOB, //MYSQL_TYPE_BLOB MYSQL_TYPE_VAR_STRING - MYSQL_TYPE_BLOB, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_BLOB, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_STRING MYSQL_TYPE_GEOMETRY - MYSQL_TYPE_STRING, MYSQL_TYPE_VAR_STRING + MYSQL_TYPE_STRING, MYSQL_TYPE_VARCHAR }, /* MYSQL_TYPE_ENUM -> */ { //MYSQL_TYPE_DECIMAL MYSQL_TYPE_TINY - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_SHORT MYSQL_TYPE_LONG - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_FLOAT MYSQL_TYPE_DOUBLE - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_NULL MYSQL_TYPE_TIMESTAMP - MYSQL_TYPE_ENUM, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_ENUM, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_LONGLONG MYSQL_TYPE_INT24 - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_DATE MYSQL_TYPE_TIME - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_DATETIME MYSQL_TYPE_YEAR - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, - //MYSQL_TYPE_NEWDATE <14> - MYSQL_TYPE_VAR_STRING, - //<246> MYSQL_TYPE_ENUM - MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NEWDATE MYSQL_TYPE_VARCHAR + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_BIT <16>-<245> + MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NEWDECIMAL MYSQL_TYPE_ENUM + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_SET MYSQL_TYPE_TINY_BLOB - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_TINY_BLOB, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_TINY_BLOB, //MYSQL_TYPE_MEDIUM_BLOB MYSQL_TYPE_LONG_BLOB MYSQL_TYPE_MEDIUM_BLOB, MYSQL_TYPE_LONG_BLOB, //MYSQL_TYPE_BLOB MYSQL_TYPE_VAR_STRING - MYSQL_TYPE_BLOB, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_BLOB, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_STRING MYSQL_TYPE_GEOMETRY - MYSQL_TYPE_STRING, MYSQL_TYPE_VAR_STRING + MYSQL_TYPE_STRING, MYSQL_TYPE_VARCHAR }, /* MYSQL_TYPE_SET -> */ { //MYSQL_TYPE_DECIMAL MYSQL_TYPE_TINY - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_SHORT MYSQL_TYPE_LONG - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_FLOAT MYSQL_TYPE_DOUBLE - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_NULL MYSQL_TYPE_TIMESTAMP - MYSQL_TYPE_SET, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_SET, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_LONGLONG MYSQL_TYPE_INT24 - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_DATE MYSQL_TYPE_TIME - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_DATETIME MYSQL_TYPE_YEAR - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, - //MYSQL_TYPE_NEWDATE <14> - MYSQL_TYPE_VAR_STRING, - //<246> MYSQL_TYPE_ENUM - MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NEWDATE MYSQL_TYPE_VARCHAR + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_BIT <16>-<245> + MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NEWDECIMAL MYSQL_TYPE_ENUM + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_SET MYSQL_TYPE_TINY_BLOB - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_TINY_BLOB, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_TINY_BLOB, //MYSQL_TYPE_MEDIUM_BLOB MYSQL_TYPE_LONG_BLOB MYSQL_TYPE_MEDIUM_BLOB, MYSQL_TYPE_LONG_BLOB, //MYSQL_TYPE_BLOB MYSQL_TYPE_VAR_STRING - MYSQL_TYPE_BLOB, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_BLOB, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_STRING MYSQL_TYPE_GEOMETRY - MYSQL_TYPE_STRING, MYSQL_TYPE_VAR_STRING + MYSQL_TYPE_STRING, MYSQL_TYPE_VARCHAR }, /* MYSQL_TYPE_TINY_BLOB -> */ { @@ -576,10 +703,12 @@ static enum_field_types field_types_merge_rules [FIELDTYPE_NUM][FIELDTYPE_NUM]= MYSQL_TYPE_TINY_BLOB, MYSQL_TYPE_TINY_BLOB, //MYSQL_TYPE_DATETIME MYSQL_TYPE_YEAR MYSQL_TYPE_TINY_BLOB, MYSQL_TYPE_TINY_BLOB, - //MYSQL_TYPE_NEWDATE <14> + //MYSQL_TYPE_NEWDATE MYSQL_TYPE_VARCHAR + MYSQL_TYPE_TINY_BLOB, MYSQL_TYPE_TINY_BLOB, + //MYSQL_TYPE_BIT <16>-<245> MYSQL_TYPE_TINY_BLOB, - //<246> MYSQL_TYPE_ENUM - MYSQL_TYPE_TINY_BLOB, + //MYSQL_TYPE_NEWDECIMAL MYSQL_TYPE_ENUM + MYSQL_TYPE_TINY_BLOB, MYSQL_TYPE_TINY_BLOB, //MYSQL_TYPE_SET MYSQL_TYPE_TINY_BLOB MYSQL_TYPE_TINY_BLOB, MYSQL_TYPE_TINY_BLOB, //MYSQL_TYPE_MEDIUM_BLOB MYSQL_TYPE_LONG_BLOB @@ -605,10 +734,12 @@ static enum_field_types field_types_merge_rules [FIELDTYPE_NUM][FIELDTYPE_NUM]= MYSQL_TYPE_MEDIUM_BLOB, MYSQL_TYPE_MEDIUM_BLOB, //MYSQL_TYPE_DATETIME MYSQL_TYPE_YEAR MYSQL_TYPE_MEDIUM_BLOB, MYSQL_TYPE_MEDIUM_BLOB, - //MYSQL_TYPE_NEWDATE <14> + //MYSQL_TYPE_NEWDATE MYSQL_TYPE_VARCHAR + MYSQL_TYPE_MEDIUM_BLOB, MYSQL_TYPE_MEDIUM_BLOB, + //MYSQL_TYPE_BIT <16>-<245> MYSQL_TYPE_MEDIUM_BLOB, - //<246> MYSQL_TYPE_ENUM - MYSQL_TYPE_MEDIUM_BLOB, + //MYSQL_TYPE_NEWDECIMAL MYSQL_TYPE_ENUM + MYSQL_TYPE_MEDIUM_BLOB, MYSQL_TYPE_MEDIUM_BLOB, //MYSQL_TYPE_SET MYSQL_TYPE_TINY_BLOB MYSQL_TYPE_MEDIUM_BLOB, MYSQL_TYPE_MEDIUM_BLOB, //MYSQL_TYPE_MEDIUM_BLOB MYSQL_TYPE_LONG_BLOB @@ -634,10 +765,12 @@ static enum_field_types field_types_merge_rules [FIELDTYPE_NUM][FIELDTYPE_NUM]= MYSQL_TYPE_LONG_BLOB, MYSQL_TYPE_LONG_BLOB, //MYSQL_TYPE_DATETIME MYSQL_TYPE_YEAR MYSQL_TYPE_LONG_BLOB, MYSQL_TYPE_LONG_BLOB, - //MYSQL_TYPE_NEWDATE <14> + //MYSQL_TYPE_NEWDATE MYSQL_TYPE_VARCHAR + MYSQL_TYPE_LONG_BLOB, MYSQL_TYPE_LONG_BLOB, + //MYSQL_TYPE_BIT <16>-<245> MYSQL_TYPE_LONG_BLOB, - //<246> MYSQL_TYPE_ENUM - MYSQL_TYPE_LONG_BLOB, + //MYSQL_TYPE_NEWDECIMAL MYSQL_TYPE_ENUM + MYSQL_TYPE_LONG_BLOB, MYSQL_TYPE_LONG_BLOB, //MYSQL_TYPE_SET MYSQL_TYPE_TINY_BLOB MYSQL_TYPE_LONG_BLOB, MYSQL_TYPE_LONG_BLOB, //MYSQL_TYPE_MEDIUM_BLOB MYSQL_TYPE_LONG_BLOB @@ -663,10 +796,12 @@ static enum_field_types field_types_merge_rules [FIELDTYPE_NUM][FIELDTYPE_NUM]= MYSQL_TYPE_BLOB, MYSQL_TYPE_BLOB, //MYSQL_TYPE_DATETIME MYSQL_TYPE_YEAR MYSQL_TYPE_BLOB, MYSQL_TYPE_BLOB, - //MYSQL_TYPE_NEWDATE <14> + //MYSQL_TYPE_NEWDATE MYSQL_TYPE_VARCHAR + MYSQL_TYPE_BLOB, MYSQL_TYPE_BLOB, + //MYSQL_TYPE_BIT <16>-<245> MYSQL_TYPE_BLOB, - //<246> MYSQL_TYPE_ENUM - MYSQL_TYPE_BLOB, + //MYSQL_TYPE_NEWDECIMAL MYSQL_TYPE_ENUM + MYSQL_TYPE_BLOB, MYSQL_TYPE_BLOB, //MYSQL_TYPE_SET MYSQL_TYPE_TINY_BLOB MYSQL_TYPE_BLOB, MYSQL_TYPE_BLOB, //MYSQL_TYPE_MEDIUM_BLOB MYSQL_TYPE_LONG_BLOB @@ -679,31 +814,33 @@ static enum_field_types field_types_merge_rules [FIELDTYPE_NUM][FIELDTYPE_NUM]= /* MYSQL_TYPE_VAR_STRING -> */ { //MYSQL_TYPE_DECIMAL MYSQL_TYPE_TINY - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_SHORT MYSQL_TYPE_LONG - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_FLOAT MYSQL_TYPE_DOUBLE - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_NULL MYSQL_TYPE_TIMESTAMP - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_LONGLONG MYSQL_TYPE_INT24 - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_DATE MYSQL_TYPE_TIME - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_DATETIME MYSQL_TYPE_YEAR - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, - //MYSQL_TYPE_NEWDATE <14> - MYSQL_TYPE_VAR_STRING, - //<246> MYSQL_TYPE_ENUM - MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NEWDATE MYSQL_TYPE_VARCHAR + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_BIT <16>-<245> + MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NEWDECIMAL MYSQL_TYPE_ENUM + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_SET MYSQL_TYPE_TINY_BLOB - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_TINY_BLOB, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_TINY_BLOB, //MYSQL_TYPE_MEDIUM_BLOB MYSQL_TYPE_LONG_BLOB MYSQL_TYPE_MEDIUM_BLOB, MYSQL_TYPE_LONG_BLOB, //MYSQL_TYPE_BLOB MYSQL_TYPE_VAR_STRING - MYSQL_TYPE_BLOB, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_BLOB, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_STRING MYSQL_TYPE_GEOMETRY - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR }, /* MYSQL_TYPE_STRING -> */ { @@ -721,45 +858,49 @@ static enum_field_types field_types_merge_rules [FIELDTYPE_NUM][FIELDTYPE_NUM]= MYSQL_TYPE_STRING, MYSQL_TYPE_STRING, //MYSQL_TYPE_DATETIME MYSQL_TYPE_YEAR MYSQL_TYPE_STRING, MYSQL_TYPE_STRING, - //MYSQL_TYPE_NEWDATE <14> + //MYSQL_TYPE_NEWDATE MYSQL_TYPE_VARCHAR + MYSQL_TYPE_STRING, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_BIT <16>-<245> MYSQL_TYPE_STRING, - //<246> MYSQL_TYPE_ENUM - MYSQL_TYPE_STRING, + //MYSQL_TYPE_NEWDECIMAL MYSQL_TYPE_ENUM + MYSQL_TYPE_STRING, MYSQL_TYPE_STRING, //MYSQL_TYPE_SET MYSQL_TYPE_TINY_BLOB MYSQL_TYPE_STRING, MYSQL_TYPE_TINY_BLOB, //MYSQL_TYPE_MEDIUM_BLOB MYSQL_TYPE_LONG_BLOB MYSQL_TYPE_MEDIUM_BLOB, MYSQL_TYPE_LONG_BLOB, //MYSQL_TYPE_BLOB MYSQL_TYPE_VAR_STRING - MYSQL_TYPE_BLOB, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_BLOB, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_STRING MYSQL_TYPE_GEOMETRY MYSQL_TYPE_STRING, MYSQL_TYPE_STRING }, /* MYSQL_TYPE_GEOMETRY -> */ { //MYSQL_TYPE_DECIMAL MYSQL_TYPE_TINY - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_SHORT MYSQL_TYPE_LONG - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_FLOAT MYSQL_TYPE_DOUBLE - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_NULL MYSQL_TYPE_TIMESTAMP - MYSQL_TYPE_GEOMETRY, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_GEOMETRY, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_LONGLONG MYSQL_TYPE_INT24 - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_DATE MYSQL_TYPE_TIME - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_DATETIME MYSQL_TYPE_YEAR - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_VAR_STRING, - //MYSQL_TYPE_NEWDATE <14> - MYSQL_TYPE_VAR_STRING, - //<246> MYSQL_TYPE_ENUM - MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NEWDATE MYSQL_TYPE_VARCHAR + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_BIT <16>-<245> + MYSQL_TYPE_VARCHAR, + //MYSQL_TYPE_NEWDECIMAL MYSQL_TYPE_ENUM + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_SET MYSQL_TYPE_TINY_BLOB - MYSQL_TYPE_VAR_STRING, MYSQL_TYPE_TINY_BLOB, + MYSQL_TYPE_VARCHAR, MYSQL_TYPE_TINY_BLOB, //MYSQL_TYPE_MEDIUM_BLOB MYSQL_TYPE_LONG_BLOB MYSQL_TYPE_MEDIUM_BLOB, MYSQL_TYPE_LONG_BLOB, //MYSQL_TYPE_BLOB MYSQL_TYPE_VAR_STRING - MYSQL_TYPE_BLOB, MYSQL_TYPE_VAR_STRING, + MYSQL_TYPE_BLOB, MYSQL_TYPE_VARCHAR, //MYSQL_TYPE_STRING MYSQL_TYPE_GEOMETRY MYSQL_TYPE_STRING, MYSQL_TYPE_GEOMETRY } @@ -789,7 +930,7 @@ enum_field_types Field::field_type_merge(enum_field_types a, static Item_result field_types_result_type [FIELDTYPE_NUM]= { //MYSQL_TYPE_DECIMAL MYSQL_TYPE_TINY - REAL_RESULT, INT_RESULT, + DECIMAL_RESULT, INT_RESULT, //MYSQL_TYPE_SHORT MYSQL_TYPE_LONG INT_RESULT, INT_RESULT, //MYSQL_TYPE_FLOAT MYSQL_TYPE_DOUBLE @@ -802,10 +943,12 @@ static Item_result field_types_result_type [FIELDTYPE_NUM]= STRING_RESULT, STRING_RESULT, //MYSQL_TYPE_DATETIME MYSQL_TYPE_YEAR STRING_RESULT, INT_RESULT, - //MYSQL_TYPE_NEWDATE <14> + //MYSQL_TYPE_NEWDATE MYSQL_TYPE_VARCHAR + STRING_RESULT, STRING_RESULT, + //MYSQL_TYPE_BIT <16>-<245> STRING_RESULT, - //<246> MYSQL_TYPE_ENUM - STRING_RESULT, + //MYSQL_TYPE_NEWDECIMAL MYSQL_TYPE_ENUM + DECIMAL_RESULT, STRING_RESULT, //MYSQL_TYPE_SET MYSQL_TYPE_TINY_BLOB STRING_RESULT, STRING_RESULT, //MYSQL_TYPE_MEDIUM_BLOB MYSQL_TYPE_LONG_BLOB @@ -1102,13 +1245,13 @@ void Field_num::add_zerofill_and_unsigned(String &res) const void Field::make_field(Send_field *field) { - if ((field->org_table_name= orig_table->s->table_name) == &unknown_table_name) + if (orig_table->s->table_cache_key && *(orig_table->s->table_cache_key)) + { + field->org_table_name= orig_table->s->table_name; field->db_name= orig_table->s->table_cache_key; } else - { - field->db_name= ""; - } + field->org_table_name= field->db_name= ""; field->table_name= orig_table->alias; field->col_name= field->org_col_name= field_name; field->charsetnr= charset()->number; diff --git a/sql/field.h b/sql/field.h index 84d5027dc96..ce6753400bb 100644 --- a/sql/field.h +++ b/sql/field.h @@ -468,7 +468,6 @@ public: { return field_length + 1 + (dec ? 1 : 0) + (field_length == dec ? 1 : 0); } uint32 representation_length() { return field_length + 1 + (dec ? 1 : 0) + (field_length == dec ? 1 : 0); }; - field_cast_enum field_cast_type() { return FIELD_CAST_NEWDECIMAL; } uint size_of() const { return sizeof(*this); } uint32 pack_length() const { return (uint32) bin_size; } }; @@ -1002,7 +1001,7 @@ public: enum_field_types real_type() const { return FIELD_TYPE_STRING; } bool has_charset(void) const { return charset() == &my_charset_bin ? FALSE : TRUE; } - field_cast_enum field_cast_type() { return FIELD_CAST_STRING; } + Field *new_field(MEM_ROOT *root, struct st_table *new_table); }; @@ -1305,7 +1304,6 @@ public: { return (uint32) field_length + (bit_len > 0); } uint32 pack_length_in_rec() const { return field_length; } void sql_type(String &str) const; - field_cast_enum field_cast_type() { return FIELD_CAST_BIT; } char *pack(char *to, const char *from, uint max_length=~(uint) 0); const char *unpack(char* to, const char *from); Field *new_key_field(MEM_ROOT *root, struct st_table *new_table, diff --git a/sql/item.cc b/sql/item.cc index 481bd7bb27f..a319aaea160 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -4690,6 +4690,9 @@ Item_type_holder::Item_type_holder(THD *thd, Item *item) maybe_null= item->maybe_null; collation.set(item->collation); get_full_info(item); + /* fix variable decimals which always is NOT_FIXED_DEC */ + if (Field::result_merge_type(fld_type) == INT_RESULT) + decimals= 0; } @@ -4748,7 +4751,7 @@ enum_field_types Item_type_holder::get_real_type(Item *item) break; } case FUNC_ITEM: - if (((Item_func *) item)->functype() == Item_func::VAR_VALUE_FUNC) + if (((Item_func *) item)->functype() == Item_func::GUSERVAR_FUNC) { /* There are work around of problem with changing variable type on the @@ -4764,6 +4767,8 @@ enum_field_types Item_type_holder::get_real_type(Item *item) return MYSQL_TYPE_LONGLONG; case REAL_RESULT: return MYSQL_TYPE_DOUBLE; + case DECIMAL_RESULT: + return MYSQL_TYPE_NEWDECIMAL; case ROW_RESULT: default: DBUG_ASSERT(0); @@ -4793,8 +4798,38 @@ enum_field_types Item_type_holder::get_real_type(Item *item) bool Item_type_holder::join_types(THD *thd, Item *item) { - max_length= max(max_length, display_length(item)); + DBUG_ENTER("Item_type_holder::join_types"); + DBUG_PRINT("info:", ("was type %d len %d, dec %d name %s", + fld_type, max_length, decimals, + (name ? name : "<NULL>"))); + DBUG_PRINT("info:", ("in type %d len %d, dec %d", + get_real_type(item), + item->max_length, item->decimals)); fld_type= Field::field_type_merge(fld_type, get_real_type(item)); + { + int item_decimals= item->decimals; + /* fix variable decimals which always is NOT_FIXED_DEC */ + if (Field::result_merge_type(fld_type) == INT_RESULT) + item_decimals= 0; + decimals= max(decimals, item_decimals); + } + if (Field::result_merge_type(fld_type) == DECIMAL_RESULT) + { + int item_length= display_length(item); + int intp1= item_length - min(item->decimals, NOT_FIXED_DEC - 1); + int intp2= max_length - min(decimals, NOT_FIXED_DEC - 1); + /* can't be overflow because it work only for decimals (no strings) */ + int dec_length= max(intp1, intp2) + decimals; + max_length= max(max_length, max(item_length, dec_length)); + /* + we can't allow decimals to be NOT_FIXED_DEC, to prevent creation + decimal with max precision (see Field_new_decimal constcuctor) + */ + if (decimals >= NOT_FIXED_DEC) + decimals= NOT_FIXED_DEC - 1; + } + else + max_length= max(max_length, display_length(item)); if (Field::result_merge_type(fld_type) == STRING_RESULT) { const char *old_cs, *old_derivation; @@ -4807,13 +4842,14 @@ bool Item_type_holder::join_types(THD *thd, Item *item) item->collation.collation->name, item->collation.derivation_name(), "UNION"); - return TRUE; + DBUG_RETURN(TRUE); } } - decimals= max(decimals, item->decimals); maybe_null|= item->maybe_null; get_full_info(item); - return FALSE; + DBUG_PRINT("info:", ("become type %d len %d, dec %d", + fld_type, max_length, decimals)); + DBUG_RETURN(FALSE); } /* @@ -4841,6 +4877,9 @@ uint32 Item_type_holder::display_length(Item *item) case MYSQL_TYPE_DATETIME: case MYSQL_TYPE_YEAR: case MYSQL_TYPE_NEWDATE: + case MYSQL_TYPE_VARCHAR: + case MYSQL_TYPE_BIT: + case MYSQL_TYPE_NEWDECIMAL: case MYSQL_TYPE_ENUM: case MYSQL_TYPE_SET: case MYSQL_TYPE_TINY_BLOB: @@ -4906,10 +4945,6 @@ Field *Item_type_holder::make_field_by_type(TABLE *table) Field::NONE, name, table, get_set_pack_length(enum_set_typelib->count), enum_set_typelib, collation.collation); - case MYSQL_TYPE_VAR_STRING: - table->db_create_options|= HA_OPTION_PACK_RECORD; - return new Field_string(max_length, maybe_null, name, table, - collation.collation); default: break; } diff --git a/sql/item.h b/sql/item.h index 91c6cc96d9c..9928f3bc4c5 100644 --- a/sql/item.h +++ b/sql/item.h @@ -389,7 +389,7 @@ public: FALSE value is false or NULL TRUE value is true (not equal to 0) */ - bool val_bool(); + virtual bool val_bool(); /* Helper functions, see item_sum.cc */ String *val_string_from_real(String *str); String *val_string_from_int(String *str); diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index 9850b01561e..ddb116f548a 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -708,7 +708,7 @@ longlong Item_in_optimizer::val_int() null_value= 1; return 0; } - longlong tmp= args[1]->val_int_result(); + bool tmp= args[1]->val_bool_result(); null_value= args[1]->null_value; return tmp; } diff --git a/sql/item_func.h b/sql/item_func.h index a988d3ac2af..9bf21fa1aa3 100644 --- a/sql/item_func.h +++ b/sql/item_func.h @@ -54,7 +54,7 @@ public: SP_POINTN,SP_GEOMETRYN,SP_INTERIORRINGN, NOT_FUNC, NOT_ALL_FUNC, NOW_FUNC, TRIG_COND_FUNC, - GUSERVAR_FUNC, VAR_VALUE_FUNC}; + GUSERVAR_FUNC}; enum optimize_type { OPTIMIZE_NONE,OPTIMIZE_KEY,OPTIMIZE_OP, OPTIMIZE_NULL, OPTIMIZE_EQUAL }; enum Type type() const { return FUNC_ITEM; } @@ -1124,7 +1124,6 @@ public: select @t1:=1,@t1,@t:="hello",@t from foo where (@t1:= t2.b) */ enum_field_types field_type() const { return MYSQL_TYPE_VARCHAR; } - enum Functype functype() const { return VAR_VALUE_FUNC; } const char *func_name() const { return "get_user_var"; } bool const_item() const; table_map used_tables() const diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc index 6f87adcd068..0fbcf32a83c 100644 --- a/sql/item_subselect.cc +++ b/sql/item_subselect.cc @@ -637,18 +637,13 @@ String *Item_exists_subselect::val_str(String *str) reset(); return 0; } - str->set(value,&my_charset_bin); + str->set((ulonglong)value,&my_charset_bin); return str; } my_decimal *Item_exists_subselect::val_decimal(my_decimal *decimal_value) { - /* - As far as Item_in_subselect called only from Item_in_optimizer this - method should not be used - */ - DBUG_ASSERT(0); DBUG_ASSERT(fixed == 1); if (exec()) { @@ -731,11 +726,46 @@ String *Item_in_subselect::val_str(String *str) null_value= 1; return 0; } - str->set(value, &my_charset_bin); + str->set((ulonglong)value, &my_charset_bin); return str; } +bool Item_in_subselect::val_bool() +{ + DBUG_ASSERT(fixed == 1); + if (exec()) + { + reset(); + null_value= 1; + return 0; + } + if (was_null && !value) + null_value= 1; + return value; +} + +my_decimal *Item_in_subselect::val_decimal(my_decimal *decimal_value) +{ + /* + As far as Item_in_subselect called only from Item_in_optimizer this + method should not be used + */ + DBUG_ASSERT(0); + DBUG_ASSERT(fixed == 1); + if (exec()) + { + reset(); + null_value= 1; + return 0; + } + if (was_null && !value) + null_value= 1; + int2my_decimal(E_DEC_FATAL_ERROR, value, 0, decimal_value); + return decimal_value; +} + + /* Rewrite a single-column IN/ALL/ANY subselect. */ Item_subselect::trans_res diff --git a/sql/item_subselect.h b/sql/item_subselect.h index e12c45b6e13..da13e98f5f4 100644 --- a/sql/item_subselect.h +++ b/sql/item_subselect.h @@ -179,7 +179,7 @@ public: class Item_exists_subselect :public Item_subselect { protected: - longlong value; /* value of this item (boolean: exists/not-exists) */ + bool value; /* value of this item (boolean: exists/not-exists) */ public: Item_exists_subselect(st_select_lex *select_lex); @@ -243,6 +243,8 @@ public: longlong val_int(); double val_real(); String *val_str(String*); + my_decimal *val_decimal(my_decimal *); + bool val_bool(); void top_level_item() { abort_on_null=1; } bool test_limit(st_select_lex_unit *unit); void print(String *str); diff --git a/sql/sql_derived.cc b/sql/sql_derived.cc index 115974c3b05..45718e7c7da 100644 --- a/sql/sql_derived.cc +++ b/sql/sql_derived.cc @@ -115,7 +115,7 @@ int mysql_derived_prepare(THD *thd, LEX *lex, TABLE_LIST *orig_table_list) DBUG_RETURN(1); // out of memory // st_select_lex_unit::prepare correctly work for single select - if ((res= unit->prepare(thd, derived_result, 0, org_table_list->alias))) + if ((res= unit->prepare(thd, derived_result, 0, orig_table_list->alias))) goto exit; diff --git a/sql/sql_view.cc b/sql/sql_view.cc index 31277452118..e4f30f72443 100644 --- a/sql/sql_view.cc +++ b/sql/sql_view.cc @@ -216,7 +216,7 @@ bool mysql_create_view(THD *thd, /* prepare select to resolve all fields */ lex->view_prepare_mode= 1; - if (unit->prepare(thd, 0, 0)) + if (unit->prepare(thd, 0, 0, view->view_name.str)) { /* some errors from prepare are reported to user, if is not then |