Below is the list of changes that have just been committed into a local
5.0 repository of gshchepa. When gshchepa does a push these changes
will be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet@stripped, 2008-05-12 13:46:46+05:00, gshchepa@stripped +3 -0
Fixed bug #36488: regexp returns false matches, concatenating
with previous rows.
The WHERE clause containing expression:
CONCAT(empty_field1, empty_field2, ..., 'literal constant', ...)
REGEXP 'regular expression'
may return wrong matches.
Optimization of the CONCAT function has been fixed.
mysql-test/r/func_concat.result@stripped, 2008-05-12 13:40:19+05:00, gshchepa@stripped +7 -0
Added test case for bug #36488.
mysql-test/t/func_concat.test@stripped, 2008-05-12 13:40:21+05:00, gshchepa@stripped +10 -0
Added test case for bug #36488.
sql/item_strfunc.cc@stripped, 2008-05-12 13:40:22+05:00, gshchepa@stripped +1 -0
Fixed bug #36488.
The Item_func_concat::val_str method is optimized to
use first non-empty argument of the CONCAT function for in-place
result accumulation. This optimization is acceptable if that
first argument is not a constant.
However, current implementation checks this condition only for
the first actual argument of the CONCAT function.
So, the Item_func_concat::val_str method can corrupt values
of, for example, literal strings by appending random data.
The Item_func_concat::val_str method has been modified to take
into account the ability to be modified in-place for the first
non-empty argument.
diff -Nrup a/mysql-test/r/func_concat.result b/mysql-test/r/func_concat.result
--- a/mysql-test/r/func_concat.result 2006-06-15 02:46:27 +05:00
+++ b/mysql-test/r/func_concat.result 2008-05-12 13:40:19 +05:00
@@ -82,3 +82,10 @@ a
1234562
x
drop table t1;
+CREATE TABLE t1 (c1 varchar(100), c2 varchar(100));
+INSERT INTO t1 VALUES ('',''), ('','First'), ('Random','Random');
+SELECT * FROM t1 WHERE CONCAT(c1,' ',c2) REGEXP 'First.*';
+c1 c2
+ First
+DROP TABLE t1;
+# End of 5.0 tests
diff -Nrup a/mysql-test/t/func_concat.test b/mysql-test/t/func_concat.test
--- a/mysql-test/t/func_concat.test 2006-06-15 00:54:05 +05:00
+++ b/mysql-test/t/func_concat.test 2008-05-12 13:40:21 +05:00
@@ -68,3 +68,13 @@ create table t1(f1 varchar(6)) charset=u
insert into t1 values ("123456");
select concat(f1, 2) a from t1 union select 'x' a from t1;
drop table t1;
+
+#
+# Bug #36488: regexp returns false matches, concatenating with previous rows
+#
+CREATE TABLE t1 (c1 varchar(100), c2 varchar(100));
+INSERT INTO t1 VALUES ('',''), ('','First'), ('Random','Random');
+SELECT * FROM t1 WHERE CONCAT(c1,' ',c2) REGEXP 'First.*';
+DROP TABLE t1;
+
+--echo # End of 5.0 tests
diff -Nrup a/sql/item_strfunc.cc b/sql/item_strfunc.cc
--- a/sql/item_strfunc.cc 2007-10-11 16:07:09 +05:00
+++ b/sql/item_strfunc.cc 2008-05-12 13:40:22 +05:00
@@ -294,6 +294,7 @@ String *Item_func_concat::val_str(String
{
if (!(res=args[i]->val_str(str)))
goto null;
+ is_const= args[i]->const_item() || !args[i]->used_tables();
}
else
{
| Thread |
|---|
| • bk commit into 5.0 tree (gshchepa:1.2623) BUG#36488 | gshchepa | 12 May |