diff options
author | unknown <gshchepa/uchum@gleb.loc> | 2007-06-18 17:08:56 +0500 |
---|---|---|
committer | unknown <gshchepa/uchum@gleb.loc> | 2007-06-18 17:08:56 +0500 |
commit | 751e32072f260a39d9c1b4ca2a5d80fff13ad925 (patch) | |
tree | 5a3f0331e4c22301ccc757da3090d947ac0d598d | |
parent | 200c69e3e6dd7a59796f1fd1ac78f90ec402a6c3 (diff) | |
parent | 6e315bfae2fdd147c901647bb28ed09359aa0add (diff) | |
download | mariadb-git-751e32072f260a39d9c1b4ca2a5d80fff13ad925.tar.gz |
Merge gleb.loc:/home/uchum/work/bk/5.0-opt
into gleb.loc:/home/uchum/work/bk/5.1-opt
mysql-test/r/func_str.result:
Auto merged
mysql-test/t/func_str.test:
Auto merged
sql/item_strfunc.cc:
Auto merged
-rw-r--r-- | mysql-test/r/func_str.result | 16 | ||||
-rw-r--r-- | mysql-test/t/func_str.test | 15 | ||||
-rw-r--r-- | sql/item_strfunc.cc | 5 |
3 files changed, 34 insertions, 2 deletions
diff --git a/mysql-test/r/func_str.result b/mysql-test/r/func_str.result index 2622e070587..6fbb9c811a7 100644 --- a/mysql-test/r/func_str.result +++ b/mysql-test/r/func_str.result @@ -2470,4 +2470,20 @@ id 3 4 DROP TABLE t1; +SELECT SUBSTR('foo',1,0) FROM DUAL; +SUBSTR('foo',1,0) + +SELECT SUBSTR('foo',1,CAST(0 AS SIGNED)) FROM DUAL; +SUBSTR('foo',1,CAST(0 AS SIGNED)) + +SELECT SUBSTR('foo',1,CAST(0 AS UNSIGNED)) FROM DUAL; +SUBSTR('foo',1,CAST(0 AS UNSIGNED)) + +CREATE TABLE t1 (a varchar(10), len int unsigned); +INSERT INTO t1 VALUES ('bar', 2), ('foo', 0); +SELECT SUBSTR(a,1,len) FROM t1; +SUBSTR(a,1,len) +ba + +DROP TABLE t1; End of 5.0 tests diff --git a/mysql-test/t/func_str.test b/mysql-test/t/func_str.test index 9148b757b29..945f5a050f4 100644 --- a/mysql-test/t/func_str.test +++ b/mysql-test/t/func_str.test @@ -1216,4 +1216,19 @@ SELECT id FROM t1 WHERE LOCATE(a,p) <=> NULL; DROP TABLE t1; +# +# Bug #27130: SUBSTR with UNSIGNED 0 as the last argument +# + +SELECT SUBSTR('foo',1,0) FROM DUAL; +SELECT SUBSTR('foo',1,CAST(0 AS SIGNED)) FROM DUAL; +SELECT SUBSTR('foo',1,CAST(0 AS UNSIGNED)) FROM DUAL; + +CREATE TABLE t1 (a varchar(10), len int unsigned); +INSERT INTO t1 VALUES ('bar', 2), ('foo', 0); + +SELECT SUBSTR(a,1,len) FROM t1; + +DROP TABLE t1; + --echo End of 5.0 tests diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index 3dc352338a4..a376504512f 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -1143,8 +1143,9 @@ String *Item_func_substr::val_str(String *str) (arg_count == 3 && args[2]->null_value)))) return 0; /* purecov: inspected */ - /* Negative length, will return empty string. */ - if ((arg_count == 3) && (length <= 0) && !args[2]->unsigned_flag) + /* Negative or zero length, will return empty string. */ + if ((arg_count == 3) && (length <= 0) && + (length == 0 || !args[2]->unsigned_flag)) return &my_empty_string; /* Assumes that the maximum length of a String is < INT_MAX32. */ |