mirror of
https://github.com/MariaDB/server.git
synced 2025-01-30 02:30:06 +01:00
Merge remote-tracking branch 'origin/bb-10.2-ext' into 10.3
This commit is contained in:
commit
d509981498
3 changed files with 75 additions and 12 deletions
|
@ -1,3 +1,7 @@
|
|||
#
|
||||
# MDEV-14012 - sql_mode=Oracle: substr(): treat position 0 as position 1
|
||||
# MDEV-10574 - sql_mode=Oracle: return null instead of empty string
|
||||
#
|
||||
SET sql_mode=ORACLE;
|
||||
SELECT SUBSTR('abc',2,1),SUBSTR('abc',1,1), SUBSTR('abc',0,1) FROM dual;
|
||||
SUBSTR('abc',2,1) SUBSTR('abc',1,1) SUBSTR('abc',0,1)
|
||||
|
@ -22,19 +26,52 @@ SUBSTR('abc',2,null) SUBSTR('abc',1,null) SUBSTR('abc',0,null)
|
|||
NULL NULL NULL
|
||||
SELECT SUBSTR('abc',2,0),SUBSTR('abc',1,0), SUBSTR('abc',0,0) FROM dual;
|
||||
SUBSTR('abc',2,0) SUBSTR('abc',1,0) SUBSTR('abc',0,0)
|
||||
|
||||
create table t1 (c1 varchar(10),start integer, length integer);
|
||||
NULL NULL NULL
|
||||
SELECT SUBSTR('abc',2,-1),SUBSTR('abc',1,-1), SUBSTR('abc',0,-1) FROM dual;
|
||||
SUBSTR('abc',2,-1) SUBSTR('abc',1,-1) SUBSTR('abc',0,-1)
|
||||
NULL NULL NULL
|
||||
SELECT SUBSTR(SPACE(0),1) FROM DUAL;
|
||||
SUBSTR(SPACE(0),1)
|
||||
NULL
|
||||
CREATE TABLE t1 (c1 VARCHAR(10),start INTEGER, length INTEGER);
|
||||
INSERT INTO t1 VALUES ('abc', 1, 1);
|
||||
INSERT INTO t1 VALUES ('abc', 0, 1);
|
||||
INSERT INTO t1 VALUES (null, 1, 1);
|
||||
INSERT INTO t1 VALUES (null, 0, 1);
|
||||
select substr(c1,start,length) from t1;
|
||||
substr(c1,start,length)
|
||||
INSERT INTO t1 VALUES ('abc', 1, 0);
|
||||
INSERT INTO t1 VALUES ('abc', 0, 0);
|
||||
INSERT INTO t1 VALUES (null, 1, 0);
|
||||
INSERT INTO t1 VALUES (null, 0, 0);
|
||||
INSERT INTO t1 VALUES ('abc', 1, -1);
|
||||
INSERT INTO t1 VALUES ('abc', 0, -1);
|
||||
INSERT INTO t1 VALUES (null, 1, -1);
|
||||
INSERT INTO t1 VALUES (null, 0, -1);
|
||||
INSERT INTO t1 VALUES (SPACE(0), 0, 1);
|
||||
SELECT SUBSTR(c1,start,length) FROM t1;
|
||||
SUBSTR(c1,start,length)
|
||||
a
|
||||
a
|
||||
NULL
|
||||
NULL
|
||||
drop table t1;
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (c1 VARCHAR(10) NOT NULL);
|
||||
CREATE TABLE t2 AS SELECT SUBSTR(C1,1,1) AS C1 from t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE "t2" (
|
||||
"C1" varchar(1) DEFAULT NULL
|
||||
)
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t1;
|
||||
EXPLAIN EXTENDED SELECT SUBSTR('abc',2,1) ;
|
||||
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
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#
|
||||
# MDEV-14012 - sql_mode=Oracle: substr(): treat position 0 as position 1
|
||||
#
|
||||
--echo #
|
||||
--echo # MDEV-14012 - sql_mode=Oracle: substr(): treat position 0 as position 1
|
||||
--echo # MDEV-10574 - sql_mode=Oracle: return null instead of empty string
|
||||
--echo #
|
||||
|
||||
SET sql_mode=ORACLE;
|
||||
SELECT SUBSTR('abc',2,1),SUBSTR('abc',1,1), SUBSTR('abc',0,1) FROM dual;
|
||||
|
@ -11,14 +12,32 @@ SELECT SUBSTR('abc',-2,1),SUBSTR('abc',-1,1), SUBSTR('abc',-0,1) FROM dual;
|
|||
SELECT SUBSTR('abc',null) FROM dual;
|
||||
SELECT SUBSTR('abc',2,null),SUBSTR('abc',1,null), SUBSTR('abc',0,null) FROM dual;
|
||||
SELECT SUBSTR('abc',2,0),SUBSTR('abc',1,0), SUBSTR('abc',0,0) FROM dual;
|
||||
SELECT SUBSTR('abc',2,-1),SUBSTR('abc',1,-1), SUBSTR('abc',0,-1) FROM dual;
|
||||
SELECT SUBSTR(SPACE(0),1) FROM DUAL;
|
||||
|
||||
create table t1 (c1 varchar(10),start integer, length integer);
|
||||
CREATE TABLE t1 (c1 VARCHAR(10),start INTEGER, length INTEGER);
|
||||
INSERT INTO t1 VALUES ('abc', 1, 1);
|
||||
INSERT INTO t1 VALUES ('abc', 0, 1);
|
||||
INSERT INTO t1 VALUES (null, 1, 1);
|
||||
INSERT INTO t1 VALUES (null, 0, 1);
|
||||
select substr(c1,start,length) from t1;
|
||||
drop table t1;
|
||||
INSERT INTO t1 VALUES ('abc', 1, 0);
|
||||
INSERT INTO t1 VALUES ('abc', 0, 0);
|
||||
INSERT INTO t1 VALUES (null, 1, 0);
|
||||
INSERT INTO t1 VALUES (null, 0, 0);
|
||||
INSERT INTO t1 VALUES ('abc', 1, -1);
|
||||
INSERT INTO t1 VALUES ('abc', 0, -1);
|
||||
INSERT INTO t1 VALUES (null, 1, -1);
|
||||
INSERT INTO t1 VALUES (null, 0, -1);
|
||||
INSERT INTO t1 VALUES (SPACE(0), 0, 1);
|
||||
|
||||
SELECT SUBSTR(c1,start,length) FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
CREATE TABLE t1 (c1 VARCHAR(10) NOT NULL);
|
||||
CREATE TABLE t2 AS SELECT SUBSTR(C1,1,1) AS C1 from t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t1;
|
||||
|
||||
EXPLAIN EXTENDED SELECT SUBSTR('abc',2,1) ;
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@ protected:
|
|||
character set. No memory is allocated.
|
||||
@retval A pointer to the str_value member.
|
||||
*/
|
||||
String *make_empty_result()
|
||||
virtual String *make_empty_result()
|
||||
{
|
||||
/*
|
||||
Reset string length to an empty string. We don't use str_value.set() as
|
||||
|
@ -500,11 +500,18 @@ class Item_func_substr_oracle :public Item_func_substr
|
|||
protected:
|
||||
longlong get_position()
|
||||
{ longlong pos= args[1]->val_int(); return pos == 0 ? 1 : pos; }
|
||||
String *make_empty_result()
|
||||
{ null_value= 1; return NULL; }
|
||||
public:
|
||||
Item_func_substr_oracle(THD *thd, Item *a, Item *b):
|
||||
Item_func_substr(thd, a, b) {}
|
||||
Item_func_substr_oracle(THD *thd, Item *a, Item *b, Item *c):
|
||||
Item_func_substr(thd, a, b, c) {}
|
||||
void fix_length_and_dec()
|
||||
{
|
||||
Item_func_substr::fix_length_and_dec();
|
||||
maybe_null= true;
|
||||
}
|
||||
const char *func_name() const { return "substr_oracle"; }
|
||||
Item *get_copy(THD *thd)
|
||||
{ return get_item_copy<Item_func_substr_oracle>(thd, this); }
|
||||
|
|
Loading…
Add table
Reference in a new issue