diff --git a/mysql-test/suite/compat/oracle/r/func_concat.result b/mysql-test/suite/compat/oracle/r/func_concat.result index d938c013ba7c5..463b527236373 100644 --- a/mysql-test/suite/compat/oracle/r/func_concat.result +++ b/mysql-test/suite/compat/oracle/r/func_concat.result @@ -4,6 +4,11 @@ id select_type table type possible_keys key key_len ref rows filtered Extra 1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used Warnings: Note 1003 select 'a' || 'b' || 'c' AS "'a'||'b'||'c'" +EXPLAIN EXTENDED SELECT CONCAT('a'||'b'||'c'); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used +Warnings: +Note 1003 select 'a' || 'b' || 'c' AS "CONCAT('a'||'b'||'c')" SELECT '' || ''; '' || '' @@ -169,4 +174,33 @@ NULL NULL 2 ab 2 ab 3 abc +SELECT LENGTH(CONCAT(a||b||c)), CONCAT(a||b||c) FROM t1 ORDER BY a,b,c; +LENGTH(CONCAT(a||b||c)) CONCAT(a||b||c) +NULL NULL +0 +1 c +0 +0 +1 c +1 b +1 b +2 bc +0 +0 +1 c +0 +0 +1 c +1 b +1 b +2 bc +1 a +1 a +2 ac +1 a +1 a +2 ac +2 ab +2 ab +3 abc DROP TABLE t1; diff --git a/mysql-test/suite/compat/oracle/t/func_concat.test b/mysql-test/suite/compat/oracle/t/func_concat.test index 5b4b05e2bfe9b..89f986bc9e261 100644 --- a/mysql-test/suite/compat/oracle/t/func_concat.test +++ b/mysql-test/suite/compat/oracle/t/func_concat.test @@ -5,6 +5,7 @@ SET sql_mode=ORACLE; EXPLAIN EXTENDED SELECT 'a'||'b'||'c'; +EXPLAIN EXTENDED SELECT CONCAT('a'||'b'||'c'); SELECT '' || ''; SELECT '' || 'b'; @@ -79,5 +80,6 @@ INSERT INTO t1 VALUES (NULL, NULL, 'c'); INSERT INTO t1 VALUES (NULL, NULL, NULL); SELECT LENGTH(a||b||c), a||b||c FROM t1 ORDER BY a,b,c; +SELECT LENGTH(CONCAT(a||b||c)), CONCAT(a||b||c) FROM t1 ORDER BY a,b,c; DROP TABLE t1; diff --git a/sql/item_create.cc b/sql/item_create.cc index 6b0a8d2c87f56..d488b5f26c0cf 100644 --- a/sql/item_create.cc +++ b/sql/item_create.cc @@ -3857,7 +3857,9 @@ Create_func_concat::create_native(THD *thd, LEX_STRING name, return NULL; } - return new (thd->mem_root) Item_func_concat(thd, *item_list); + return thd->variables.sql_mode & MODE_ORACLE ? + new (thd->mem_root) Item_func_concat_operator_oracle(thd, *item_list) : + new (thd->mem_root) Item_func_concat(thd, *item_list); } Create_func_decode_histogram Create_func_decode_histogram::s_singleton; diff --git a/sql/item_strfunc.h b/sql/item_strfunc.h index 0ff11796add52..5bd7bb1468705 100644 --- a/sql/item_strfunc.h +++ b/sql/item_strfunc.h @@ -297,6 +297,9 @@ class Item_func_concat :public Item_str_func class Item_func_concat_operator_oracle :public Item_func_concat { public: + Item_func_concat_operator_oracle(THD *thd, List &list) + :Item_func_concat(thd, list) + { } Item_func_concat_operator_oracle(THD *thd, Item *a, Item *b) :Item_func_concat(thd, a, b) { }