summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/suite/compat/oracle/r/func_concat.result34
-rw-r--r--mysql-test/suite/compat/oracle/t/func_concat.test2
-rw-r--r--sql/item_create.cc4
-rw-r--r--sql/item_strfunc.h3
4 files changed, 42 insertions, 1 deletions
diff --git a/mysql-test/suite/compat/oracle/r/func_concat.result b/mysql-test/suite/compat/oracle/r/func_concat.result
index d938c013ba7..463b5272363 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 5b4b05e2bfe..89f986bc9e2 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 6b0a8d2c87f..d488b5f26c0 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 0ff11796add..5bd7bb14687 100644
--- a/sql/item_strfunc.h
+++ b/sql/item_strfunc.h
@@ -297,6 +297,9 @@ public:
class Item_func_concat_operator_oracle :public Item_func_concat
{
public:
+ Item_func_concat_operator_oracle(THD *thd, List<Item> &list)
+ :Item_func_concat(thd, list)
+ { }
Item_func_concat_operator_oracle(THD *thd, Item *a, Item *b)
:Item_func_concat(thd, a, b)
{ }