mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 04:53:01 +01:00
8bfbcbd981
with COALESCE and JOIN The server returned to a client the VARBINARY column type instead of the DATE type for a result of the COALESCE, IFNULL, IF, CASE, GREATEST or LEAST functions if that result was filesorted in an anonymous temporary table during the query execution. For example: SELECT COALESCE(t1.date1, t2.date2) AS result FROM t1 JOIN t2 ON t1.id = t2.id ORDER BY result; To create a column of various date/time types in a temporary table the create_tmp_field_from_item() function uses the Item::tmp_table_field_from_field_type() method call. However, fields of the MYSQL_TYPE_NEWDATE type were missed there, and the VARBINARY columns were created by default. Necessary condition has been added. mysql-test/r/metadata.result: Added test case for bug #39283. mysql-test/t/metadata.test: Added test case for bug #39283. sql/sql_select.cc: Bug #39283: Date returned as VARBINARY to client for queries with COALESCE and JOIN To create a column of various date/time types in a temporary table the create_tmp_field_from_item() function uses the Item::tmp_table_field_from_field_type() method call. However, fields of the MYSQL_TYPE_NEWDATE type were missed there, and the VARBINARY columns were created by default. Necessary condition has been added.
201 lines
7.9 KiB
Text
201 lines
7.9 KiB
Text
drop table if exists t1,t2;
|
|
select 1, 1.0, -1, "hello", NULL;
|
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
|
def 1 8 1 1 N 32897 0 63
|
|
def 1.0 246 4 3 N 129 1 63
|
|
def -1 8 2 2 N 32897 0 63
|
|
def hello 253 5 5 N 1 31 8
|
|
def NULL 6 0 0 Y 32896 0 63
|
|
1 1.0 -1 hello NULL
|
|
1 1.0 -1 hello NULL
|
|
create table t1 (a tinyint, b smallint, c mediumint, d int, e bigint, f float(3,2), g double(4,3), h decimal(5,4), i year, j date, k timestamp, l datetime, m enum('a','b'), n set('a','b'), o char(10));
|
|
select * from t1;
|
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
|
def test t1 t1 a a 1 4 0 Y 32768 0 63
|
|
def test t1 t1 b b 2 6 0 Y 32768 0 63
|
|
def test t1 t1 c c 9 9 0 Y 32768 0 63
|
|
def test t1 t1 d d 3 11 0 Y 32768 0 63
|
|
def test t1 t1 e e 8 20 0 Y 32768 0 63
|
|
def test t1 t1 f f 4 3 0 Y 32768 2 63
|
|
def test t1 t1 g g 5 4 0 Y 32768 3 63
|
|
def test t1 t1 h h 246 7 0 Y 0 4 63
|
|
def test t1 t1 i i 13 4 0 Y 32864 0 63
|
|
def test t1 t1 j j 10 10 0 Y 128 0 63
|
|
def test t1 t1 k k 7 19 0 N 1249 0 63
|
|
def test t1 t1 l l 12 19 0 Y 128 0 63
|
|
def test t1 t1 m m 254 1 0 Y 256 0 8
|
|
def test t1 t1 n n 254 3 0 Y 2048 0 8
|
|
def test t1 t1 o o 254 10 0 Y 0 0 8
|
|
a b c d e f g h i j k l m n o
|
|
select a b, b c from t1 as t2;
|
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
|
def test t1 t2 a b 1 4 0 Y 32768 0 63
|
|
def test t1 t2 b c 2 6 0 Y 32768 0 63
|
|
b c
|
|
drop table t1;
|
|
CREATE TABLE t1 (id tinyint(3) default NULL, data varchar(255) default NULL);
|
|
INSERT INTO t1 VALUES (1,'male'),(2,'female');
|
|
CREATE TABLE t2 (id tinyint(3) unsigned default NULL, data char(3) default '0');
|
|
INSERT INTO t2 VALUES (1,'yes'),(2,'no');
|
|
select t1.id, t1.data, t2.data from t1, t2 where t1.id = t2.id;
|
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
|
def test t1 t1 id id 1 3 1 Y 32768 0 63
|
|
def test t1 t1 data data 253 255 6 Y 0 0 8
|
|
def test t2 t2 data data 254 3 3 Y 0 0 8
|
|
id data data
|
|
1 male yes
|
|
2 female no
|
|
select t1.id, t1.data, t2.data from t1, t2 where t1.id = t2.id order by t1.id;
|
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
|
def test t1 t1 id id 1 3 1 Y 32768 0 63
|
|
def test t1 t1 data data 253 255 6 Y 0 0 8
|
|
def test t2 t2 data data 254 3 3 Y 0 0 8
|
|
id data data
|
|
1 male yes
|
|
2 female no
|
|
select t1.id from t1 union select t2.id from t2;
|
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
|
def id id 1 4 1 Y 32768 0 63
|
|
id
|
|
1
|
|
2
|
|
drop table t1,t2;
|
|
create table t1 ( a int, b varchar(30), primary key(a));
|
|
insert into t1 values (1,'one');
|
|
insert into t1 values (2,'two');
|
|
set @arg00=1 ;
|
|
select @arg00 FROM t1 where a=1 union distinct select 1 FROM t1 where a=1;
|
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
|
def @arg00 @arg00 8 20 1 Y 32768 0 63
|
|
@arg00
|
|
1
|
|
select * from (select @arg00) aaa;
|
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
|
def aaa @arg00 @arg00 8 20 1 Y 32768 0 63
|
|
@arg00
|
|
1
|
|
select 1 union select 1;
|
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
|
def 1 1 8 20 1 N 32769 0 63
|
|
1
|
|
1
|
|
select * from (select 1 union select 1) aaa;
|
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
|
def aaa 1 1 8 20 1 N 32769 0 63
|
|
1
|
|
1
|
|
drop table t1;
|
|
create table t1 (i int);
|
|
insert into t1 values (1),(2),(3);
|
|
select * from t1 where i = 2;
|
|
drop table t1;//
|
|
affected rows: 0
|
|
affected rows: 3
|
|
info: Records: 3 Duplicates: 0 Warnings: 0
|
|
i
|
|
2
|
|
affected rows: 1
|
|
affected rows: 0
|
|
create table t1 (id int(10));
|
|
insert into t1 values (1);
|
|
CREATE VIEW v1 AS select t1.id as id from t1;
|
|
CREATE VIEW v2 AS select t1.id as renamed from t1;
|
|
CREATE VIEW v3 AS select t1.id + 12 as renamed from t1;
|
|
select * from v1 group by id limit 1;
|
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
|
def test t1 v1 id id 3 10 1 Y 32768 0 63
|
|
id
|
|
1
|
|
select * from v1 group by id limit 0;
|
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
|
def test v1 v1 id id 3 10 0 Y 32768 0 63
|
|
id
|
|
select * from v1 where id=1000 group by id;
|
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
|
def test v1 v1 id id 3 10 0 Y 32768 0 63
|
|
id
|
|
select * from v1 where id=1 group by id;
|
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
|
def test t1 v1 id id 3 10 1 Y 32768 0 63
|
|
id
|
|
1
|
|
select * from v2 where renamed=1 group by renamed;
|
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
|
def test t1 v2 id renamed 3 10 1 Y 32768 0 63
|
|
renamed
|
|
1
|
|
select * from v3 where renamed=1 group by renamed;
|
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
|
def v3 v3 renamed renamed 8 12 0 Y 32896 0 63
|
|
renamed
|
|
drop table t1;
|
|
drop view v1,v2,v3;
|
|
select a.* from (select 2147483648 as v_large) a;
|
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
|
def a v_large v_large 8 10 10 N 32769 0 63
|
|
v_large
|
|
2147483648
|
|
select a.* from (select 214748364 as v_small) a;
|
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
|
def a v_small v_small 3 9 9 N 32769 0 63
|
|
v_small
|
|
214748364
|
|
CREATE TABLE t1 (c1 CHAR(1));
|
|
CREATE TABLE t2 (c2 CHAR(1));
|
|
CREATE VIEW v1 AS SELECT t1.c1 FROM t1;
|
|
CREATE VIEW v2 AS SELECT t2.c2 FROM t2;
|
|
INSERT INTO t1 VALUES ('1'), ('2'), ('3');
|
|
INSERT INTO t2 VALUES ('1'), ('2'), ('3'), ('2');
|
|
SELECT v1.c1 FROM v1 JOIN t2 ON c1=c2 ORDER BY 1;
|
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
|
def test t1 v1 c1 c1 254 1 1 Y 0 0 8
|
|
c1
|
|
1
|
|
2
|
|
2
|
|
3
|
|
SELECT v1.c1, v2.c2 FROM v1 JOIN v2 ON c1=c2;
|
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
|
def test v1 v1 c1 c1 254 1 1 Y 0 0 8
|
|
def test v2 v2 c2 c2 254 1 1 Y 0 0 8
|
|
c1 c2
|
|
1 1
|
|
2 2
|
|
3 3
|
|
2 2
|
|
SELECT v1.c1, v2.c2 FROM v1 JOIN v2 ON c1=c2 GROUP BY v1.c1;
|
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
|
def test t1 v1 c1 c1 254 1 1 Y 32768 0 8
|
|
def test t2 v2 c2 c2 254 1 1 Y 0 0 8
|
|
c1 c2
|
|
1 1
|
|
2 2
|
|
3 3
|
|
SELECT v1.c1, v2.c2 FROM v1 JOIN v2 ON c1=c2 GROUP BY v1.c1 ORDER BY v2.c2;
|
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
|
def test t1 v1 c1 c1 254 1 1 Y 32768 0 8
|
|
def test t2 v2 c2 c2 254 1 1 Y 0 0 8
|
|
c1 c2
|
|
1 1
|
|
2 2
|
|
3 3
|
|
DROP VIEW v1,v2;
|
|
DROP TABLE t1,t2;
|
|
CREATE TABLE t1 (i INT, d DATE);
|
|
INSERT INTO t1 VALUES (1, '2008-01-01'), (2, '2008-01-02'), (3, '2008-01-03');
|
|
SELECT COALESCE(d, d), IFNULL(d, d), IF(i, d, d),
|
|
CASE i WHEN i THEN d ELSE d END, GREATEST(d, d), LEAST(d, d)
|
|
FROM t1 ORDER BY RAND();
|
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
|
2008-01-01 2008-01-01 2008-01-01 2008-01-01 2008-01-01 2008-01-01
|
|
2008-01-02 2008-01-02 2008-01-02 2008-01-02 2008-01-02 2008-01-02
|
|
2008-01-03 2008-01-03 2008-01-03 2008-01-03 2008-01-03 2008-01-03
|
|
COALESCE(d, d) IFNULL(d, d) IF(i, d, d) CASE i WHEN i THEN d ELSE d END GREATEST(d, d) LEAST(d, d)
|
|
def CASE i WHEN i THEN d ELSE d END CASE i WHEN i THEN d ELSE d END 10 10 10 Y 128 0 63
|
|
def COALESCE(d, d) COALESCE(d, d) 10 10 10 Y 128 0 63
|
|
def GREATEST(d, d) GREATEST(d, d) 10 10 10 Y 128 0 63
|
|
def IF(i, d, d) IF(i, d, d) 10 10 10 Y 128 0 63
|
|
def IFNULL(d, d) IFNULL(d, d) 10 10 10 Y 128 0 63
|
|
def LEAST(d, d) LEAST(d, d) 10 10 10 Y 128 0 63
|
|
DROP TABLE t1;
|
|
End of 5.0 tests
|