Commit 67a3d9e4 authored by Ramil Kalimullin's avatar Ramil Kalimullin

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.
parent 03818bff
...@@ -115,3 +115,21 @@ SELECT 1 REGEXP NULL; ...@@ -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; ...@@ -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() ...@@ -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;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment