From 49aebb9891f075e0a5c53bdf76aba72fc6019e52 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 19 Jun 2004 13:26:39 +0300 Subject: [PATCH] cleanup for Item_func_regex (Bug #4199) mysql-test/r/func_regexp.result: test of cleaning regex in PS mysql-test/t/func_regexp.test: test of cleaning regex in PS sql/item_cmpfunc.cc: cleanup for Item_func_regex sql/item_cmpfunc.h: cleanup for Item_func_regex --- mysql-test/r/func_regexp.result | 17 +++++++++++++++++ mysql-test/t/func_regexp.test | 13 +++++++++++++ sql/item_cmpfunc.cc | 6 +++++- sql/item_cmpfunc.h | 2 +- 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/func_regexp.result b/mysql-test/r/func_regexp.result index 7f977e2782b..8228d6982d3 100644 --- a/mysql-test/r/func_regexp.result +++ b/mysql-test/r/func_regexp.result @@ -81,3 +81,20 @@ _latin1'a' regexp _latin1'A' collate latin1_general_ci select _latin1'a' regexp _latin1'A' collate latin1_bin; _latin1'a' regexp _latin1'A' collate latin1_bin 0 +create table t1 (a varchar(40)); +insert into t1 values ('C1'),('C2'),('R1'),('C3'),('R2'),('R3'); +prepare stmt1 from 'select a from t1 where a rlike ? order by a'; +set @a="^C.*"; +execute stmt1 using @a; +a +C1 +C2 +C3 +set @a="^R.*"; +execute stmt1 using @a; +a +R1 +R2 +R3 +deallocate prepare stmt1; +drop table t1; diff --git a/mysql-test/t/func_regexp.test b/mysql-test/t/func_regexp.test index edfa9afcfa6..1a771d466fa 100644 --- a/mysql-test/t/func_regexp.test +++ b/mysql-test/t/func_regexp.test @@ -60,3 +60,16 @@ select _koi8r 0xF7 regexp _koi8r '[[:alpha:]]'; select _latin1'a' regexp _latin1'A' collate latin1_general_ci; select _latin1'a' regexp _latin1'A' collate latin1_bin; + +# +# regexp cleanup() +# +create table t1 (a varchar(40)); +insert into t1 values ('C1'),('C2'),('R1'),('C3'),('R2'),('R3'); +prepare stmt1 from 'select a from t1 where a rlike ? order by a'; +set @a="^C.*"; +execute stmt1 using @a; +set @a="^R.*"; +execute stmt1 using @a; +deallocate prepare stmt1; +drop table t1; diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index 446d72ac143..fcab16d4d49 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -2298,15 +2298,19 @@ longlong Item_func_regex::val_int() } -Item_func_regex::~Item_func_regex() +void Item_func_regex::cleanup() { + DBUG_ENTER("Item_func_regex::cleanup"); + Item_bool_func::cleanup(); if (regex_compiled) { regfree(&preg); regex_compiled=0; } + DBUG_VOID_RETURN; } + #endif /* USE_REGEX */ diff --git a/sql/item_cmpfunc.h b/sql/item_cmpfunc.h index ef80c060c03..b9214f59867 100644 --- a/sql/item_cmpfunc.h +++ b/sql/item_cmpfunc.h @@ -869,7 +869,7 @@ class Item_func_regex :public Item_bool_func public: Item_func_regex(Item *a,Item *b) :Item_bool_func(a,b), regex_compiled(0),regex_is_const(0) {} - ~Item_func_regex(); + void cleanup(); longlong val_int(); bool fix_fields(THD *thd, struct st_table_list *tlist, Item **ref); const char *func_name() const { return "regexp"; }