summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <msvensson@pilot.blaudden>2007-03-28 09:32:49 +0200
committerunknown <msvensson@pilot.blaudden>2007-03-28 09:32:49 +0200
commite9b606bf3e0ccc9d9ff27541371cc5faf72dd813 (patch)
treed94a2bebe02f7fd99e99d97d211839237ef76c7b
parentd79f0973ce03e3bc25a2e2fa130cf129936d4bcd (diff)
downloadmariadb-git-e9b606bf3e0ccc9d9ff27541371cc5faf72dd813.tar.gz
Bug#25197 repeat function returns null when using table field directly as count
- Add extra test case from bug#27073 - Change "if" to be optimized for count > 0 mysql-test/r/func_str.result: Add test case from bug#27073 mysql-test/t/func_str.test: Add test case from bug#27073 sql/item_strfunc.cc: Change the if statemnet to be optimized for the normal case where count > 0
-rw-r--r--mysql-test/r/func_str.result9
-rw-r--r--mysql-test/t/func_str.test4
-rw-r--r--sql/item_strfunc.cc2
3 files changed, 14 insertions, 1 deletions
diff --git a/mysql-test/r/func_str.result b/mysql-test/r/func_str.result
index e716a89132c..6abd3a61a4b 100644
--- a/mysql-test/r/func_str.result
+++ b/mysql-test/r/func_str.result
@@ -1953,5 +1953,14 @@ A B tire
0
# # 1
## ## 2
+SELECT REPEAT('0', CAST(0 AS UNSIGNED));
+REPEAT('0', CAST(0 AS UNSIGNED))
+
+SELECT REPEAT('0', -2);
+REPEAT('0', -2)
+
+SELECT REPEAT('0', 2);
+REPEAT('0', 2)
+00
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 7cf7ef2cab6..80e4b9fe40c 100644
--- a/mysql-test/t/func_str.test
+++ b/mysql-test/t/func_str.test
@@ -1028,6 +1028,10 @@ INSERT INTO `t1` (`id`, `tire`) VALUES ('A', 0), ('B', 1),('C', 2);
SELECT REPEAT( '#', tire ) AS A,
REPEAT( '#', tire % 999 ) AS B, tire FROM `t1`;
+SELECT REPEAT('0', CAST(0 AS UNSIGNED));
+SELECT REPEAT('0', -2);
+SELECT REPEAT('0', 2);
+
DROP TABLE t1;
--echo End of 5.0 tests
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index 627751a1106..0ffda000e60 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -2252,7 +2252,7 @@ String *Item_func_repeat::val_str(String *str)
goto err; // string and/or delim are null
null_value= 0;
- if (count == 0 || count < 0 && !args[1]->unsigned_flag)
+ if (count <= 0 && (count == 0 || !args[1]->unsigned_flag))
return &my_empty_string;
/* Assumes that the maximum length of a String is < INT_MAX32. */