mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Fix for bug#37337: Function returns different results
Problem: REGEXP in functions/PSs may return wrong results due to improper initialization. Fix: initialize required REGEXP params. sql/item_cmpfunc.cc: Fix for bug#37337: Function returns different results prev_regexp is used in the Item_func_regex::regcomp() to store previous regex and to avoid re-initialization if given the same pattern. Shoud be deleted in the Item_func_regex::cleanup() where we clean up the regexp structure.
This commit is contained in:
@ -115,3 +115,21 @@ SELECT 1 REGEXP NULL;
|
|||||||
1 REGEXP NULL
|
1 REGEXP NULL
|
||||||
NULL
|
NULL
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
CREATE TABLE t1(a INT, b CHAR(4));
|
||||||
|
INSERT INTO t1 VALUES (1, '6.1'), (1, '7.0'), (1, '8.0');
|
||||||
|
PREPARE stmt1 FROM "SELECT a FROM t1 WHERE a=1 AND '7.0' REGEXP b LIMIT 1";
|
||||||
|
EXECUTE stmt1;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
EXECUTE stmt1;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
EXECUTE stmt1;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
EXECUTE stmt1;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
DEALLOCATE PREPARE stmt1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
End of 5.1 tests
|
||||||
|
@ -65,3 +65,20 @@ drop table t1;
|
|||||||
SELECT 1 REGEXP NULL;
|
SELECT 1 REGEXP NULL;
|
||||||
|
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #37337: Function returns different results
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(a INT, b CHAR(4));
|
||||||
|
INSERT INTO t1 VALUES (1, '6.1'), (1, '7.0'), (1, '8.0');
|
||||||
|
PREPARE stmt1 FROM "SELECT a FROM t1 WHERE a=1 AND '7.0' REGEXP b LIMIT 1";
|
||||||
|
EXECUTE stmt1;
|
||||||
|
EXECUTE stmt1;
|
||||||
|
EXECUTE stmt1;
|
||||||
|
EXECUTE stmt1;
|
||||||
|
DEALLOCATE PREPARE stmt1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
|
||||||
|
--echo End of 5.1 tests
|
||||||
|
@ -4592,6 +4592,7 @@ void Item_func_regex::cleanup()
|
|||||||
{
|
{
|
||||||
my_regfree(&preg);
|
my_regfree(&preg);
|
||||||
regex_compiled=0;
|
regex_compiled=0;
|
||||||
|
prev_regexp.length(0);
|
||||||
}
|
}
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user