Loading mysql-test/r/func_str.result +9 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,9 @@ tcx.se .se select concat(':',ltrim(' left '),':',rtrim(' right '),':'); concat(':',ltrim(' left '),':',rtrim(' right '),':') :left : right: select concat(':',trim(leading from ' left '),':',trim(trailing from ' right '),':'); concat(':',trim(leading from ' left '),':',trim(trailing from ' right '),':') :left : right: select concat(':',trim(LEADING FROM ' left'),':',trim(TRAILING FROM ' right '),':'); concat(':',trim(LEADING FROM ' left'),':',trim(TRAILING FROM ' right '),':') :left: right: Loading Loading @@ -703,3 +706,9 @@ NULL select trim('xyz' from null) as "must_be_null"; must_be_null NULL select trim(leading NULL from 'kate') as "must_be_null"; must_be_null NULL select trim(trailing NULL from 'xyz') as "must_be_null"; must_be_null NULL mysql-test/t/func_str.test +3 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ select substring_index('www.tcx.se','tcx',1),substring_index('www.tcx.se','tcx', select substring_index('.tcx.se','.',-2),substring_index('.tcx.se','.tcx',-1); select concat(':',ltrim(' left '),':',rtrim(' right '),':'); select concat(':',trim(leading from ' left '),':',trim(trailing from ' right '),':'); select concat(':',trim(LEADING FROM ' left'),':',trim(TRAILING FROM ' right '),':'); select concat(':',trim(' m '),':',trim(BOTH FROM ' y '),':',trim('*' FROM '*s*'),':'); select concat(':',trim(BOTH 'ab' FROM 'ababmyabab'),':',trim(BOTH '*' FROM '***sql'),':'); Loading Loading @@ -443,3 +444,5 @@ select quote(trim(concat(' ', 'a'))); # select trim(null from 'kate') as "must_be_null"; select trim('xyz' from null) as "must_be_null"; select trim(leading NULL from 'kate') as "must_be_null"; select trim(trailing NULL from 'xyz') as "must_be_null"; mysql-test/t/trigger.test +2 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ select @a; drop trigger t1.trg; drop table t1; --disable_ps_protocol # Before update trigger # (In future we will achieve this via proper error handling in triggers) create table t1 (aid int not null primary key, balance int not null default 0); Loading @@ -74,6 +75,7 @@ select * from t1| drop trigger t1.trg| drop table t1| delimiter ;| --enable_ps_protocol # After update trigger create table t1 (i int); Loading sql/item_strfunc.cc +46 −30 Original line number Diff line number Diff line Loading @@ -1185,21 +1185,29 @@ String *Item_func_substr_index::val_str(String *str) String *Item_func_ltrim::val_str(String *str) { DBUG_ASSERT(fixed == 1); String *res =args[0]->val_str(str); if ((null_value=args[0]->null_value)) return 0; /* purecov: inspected */ char buff[MAX_FIELD_WIDTH]; String tmp(buff,sizeof(buff),res->charset()); String *remove_str= (arg_count==2) ? args[1]->val_str(&tmp) : &remove; char buff[MAX_FIELD_WIDTH], *ptr, *end; String tmp(buff,sizeof(buff),system_charset_info); String *res, *remove_str; uint remove_length; LINT_INIT(remove_length); if (!remove_str || (remove_length=remove_str->length()) == 0 || res= args[0]->val_str(str); if ((null_value=args[0]->null_value)) return 0; remove_str= &remove; /* Default value. */ if (arg_count == 2) { remove_str= args[1]->val_str(&tmp); if ((null_value= args[1]->null_value)) return 0; } if ((remove_length= remove_str->length()) == 0 || remove_length > res->length()) return res; char *ptr=(char*) res->ptr(); char *end=ptr+res->length(); ptr= (char*) res->ptr(); end= ptr+res->length(); if (remove_length == 1) { char chr=(*remove_str)[0]; Loading @@ -1224,21 +1232,29 @@ String *Item_func_ltrim::val_str(String *str) String *Item_func_rtrim::val_str(String *str) { DBUG_ASSERT(fixed == 1); String *res =args[0]->val_str(str); if ((null_value=args[0]->null_value)) return 0; /* purecov: inspected */ char buff[MAX_FIELD_WIDTH]; String tmp(buff,sizeof(buff),res->charset()); String *remove_str= (arg_count==2) ? args[1]->val_str(&tmp) : &remove; char buff[MAX_FIELD_WIDTH], *ptr, *end; String tmp(buff, sizeof(buff), system_charset_info); String *res, *remove_str; uint remove_length; LINT_INIT(remove_length); if (!remove_str || (remove_length=remove_str->length()) == 0 || res= args[0]->val_str(str); if ((null_value=args[0]->null_value)) return 0; remove_str= &remove; /* Default value. */ if (arg_count == 2) { remove_str= args[1]->val_str(&tmp); if ((null_value= args[1]->null_value)) return 0; } if ((remove_length= remove_str->length()) == 0 || remove_length > res->length()) return res; char *ptr=(char*) res->ptr(); char *end=ptr+res->length(); ptr= (char*) res->ptr(); end= ptr+res->length(); #ifdef USE_MB char *p=ptr; register uint32 l; Loading Loading @@ -1297,31 +1313,31 @@ String *Item_func_rtrim::val_str(String *str) String *Item_func_trim::val_str(String *str) { DBUG_ASSERT(fixed == 1); String *res =args[0]->val_str(str); if ((null_value=args[0]->null_value)) return 0; /* purecov: inspected */ char buff[MAX_FIELD_WIDTH]; String tmp(buff,sizeof(buff),res->charset()); char buff[MAX_FIELD_WIDTH], *ptr, *end; const char *r_ptr; String tmp(buff, sizeof(buff), system_charset_info); String *res, *remove_str; uint remove_length; LINT_INIT(remove_length); String *remove_str; /* The string to remove from res. */ res= args[0]->val_str(str); if ((null_value=args[0]->null_value)) return 0; remove_str= &remove; /* Default value. */ if (arg_count == 2) { remove_str= args[1]->val_str(&tmp); if ((null_value= args[1]->null_value)) return 0; } else remove_str= &remove; /* Default value. */ if (!remove_str || (remove_length=remove_str->length()) == 0 || if ((remove_length= remove_str->length()) == 0 || remove_length > res->length()) return res; char *ptr=(char*) res->ptr(); char *end=ptr+res->length(); const char *r_ptr=remove_str->ptr(); ptr= (char*) res->ptr(); end= ptr+res->length(); r_ptr= remove_str->ptr(); while (ptr+remove_length <= end && !memcmp(ptr,r_ptr,remove_length)) ptr+=remove_length; #ifdef USE_MB Loading sql/sql_base.cc +1 −0 Original line number Diff line number Diff line Loading @@ -1069,6 +1069,7 @@ TABLE *open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT *mem_root, table->outer_join= table->null_row= table->maybe_null= table->force_index= 0; table->status=STATUS_NO_RECORD; table->keys_in_use_for_query= table->keys_in_use; table->insert_values= 0; table->used_keys= table->keys_for_keyread; if (table->timestamp_field) table->timestamp_field_type= table->timestamp_field->get_auto_set_type(); Loading Loading
mysql-test/r/func_str.result +9 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,9 @@ tcx.se .se select concat(':',ltrim(' left '),':',rtrim(' right '),':'); concat(':',ltrim(' left '),':',rtrim(' right '),':') :left : right: select concat(':',trim(leading from ' left '),':',trim(trailing from ' right '),':'); concat(':',trim(leading from ' left '),':',trim(trailing from ' right '),':') :left : right: select concat(':',trim(LEADING FROM ' left'),':',trim(TRAILING FROM ' right '),':'); concat(':',trim(LEADING FROM ' left'),':',trim(TRAILING FROM ' right '),':') :left: right: Loading Loading @@ -703,3 +706,9 @@ NULL select trim('xyz' from null) as "must_be_null"; must_be_null NULL select trim(leading NULL from 'kate') as "must_be_null"; must_be_null NULL select trim(trailing NULL from 'xyz') as "must_be_null"; must_be_null NULL
mysql-test/t/func_str.test +3 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ select substring_index('www.tcx.se','tcx',1),substring_index('www.tcx.se','tcx', select substring_index('.tcx.se','.',-2),substring_index('.tcx.se','.tcx',-1); select concat(':',ltrim(' left '),':',rtrim(' right '),':'); select concat(':',trim(leading from ' left '),':',trim(trailing from ' right '),':'); select concat(':',trim(LEADING FROM ' left'),':',trim(TRAILING FROM ' right '),':'); select concat(':',trim(' m '),':',trim(BOTH FROM ' y '),':',trim('*' FROM '*s*'),':'); select concat(':',trim(BOTH 'ab' FROM 'ababmyabab'),':',trim(BOTH '*' FROM '***sql'),':'); Loading Loading @@ -443,3 +444,5 @@ select quote(trim(concat(' ', 'a'))); # select trim(null from 'kate') as "must_be_null"; select trim('xyz' from null) as "must_be_null"; select trim(leading NULL from 'kate') as "must_be_null"; select trim(trailing NULL from 'xyz') as "must_be_null";
mysql-test/t/trigger.test +2 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ select @a; drop trigger t1.trg; drop table t1; --disable_ps_protocol # Before update trigger # (In future we will achieve this via proper error handling in triggers) create table t1 (aid int not null primary key, balance int not null default 0); Loading @@ -74,6 +75,7 @@ select * from t1| drop trigger t1.trg| drop table t1| delimiter ;| --enable_ps_protocol # After update trigger create table t1 (i int); Loading
sql/item_strfunc.cc +46 −30 Original line number Diff line number Diff line Loading @@ -1185,21 +1185,29 @@ String *Item_func_substr_index::val_str(String *str) String *Item_func_ltrim::val_str(String *str) { DBUG_ASSERT(fixed == 1); String *res =args[0]->val_str(str); if ((null_value=args[0]->null_value)) return 0; /* purecov: inspected */ char buff[MAX_FIELD_WIDTH]; String tmp(buff,sizeof(buff),res->charset()); String *remove_str= (arg_count==2) ? args[1]->val_str(&tmp) : &remove; char buff[MAX_FIELD_WIDTH], *ptr, *end; String tmp(buff,sizeof(buff),system_charset_info); String *res, *remove_str; uint remove_length; LINT_INIT(remove_length); if (!remove_str || (remove_length=remove_str->length()) == 0 || res= args[0]->val_str(str); if ((null_value=args[0]->null_value)) return 0; remove_str= &remove; /* Default value. */ if (arg_count == 2) { remove_str= args[1]->val_str(&tmp); if ((null_value= args[1]->null_value)) return 0; } if ((remove_length= remove_str->length()) == 0 || remove_length > res->length()) return res; char *ptr=(char*) res->ptr(); char *end=ptr+res->length(); ptr= (char*) res->ptr(); end= ptr+res->length(); if (remove_length == 1) { char chr=(*remove_str)[0]; Loading @@ -1224,21 +1232,29 @@ String *Item_func_ltrim::val_str(String *str) String *Item_func_rtrim::val_str(String *str) { DBUG_ASSERT(fixed == 1); String *res =args[0]->val_str(str); if ((null_value=args[0]->null_value)) return 0; /* purecov: inspected */ char buff[MAX_FIELD_WIDTH]; String tmp(buff,sizeof(buff),res->charset()); String *remove_str= (arg_count==2) ? args[1]->val_str(&tmp) : &remove; char buff[MAX_FIELD_WIDTH], *ptr, *end; String tmp(buff, sizeof(buff), system_charset_info); String *res, *remove_str; uint remove_length; LINT_INIT(remove_length); if (!remove_str || (remove_length=remove_str->length()) == 0 || res= args[0]->val_str(str); if ((null_value=args[0]->null_value)) return 0; remove_str= &remove; /* Default value. */ if (arg_count == 2) { remove_str= args[1]->val_str(&tmp); if ((null_value= args[1]->null_value)) return 0; } if ((remove_length= remove_str->length()) == 0 || remove_length > res->length()) return res; char *ptr=(char*) res->ptr(); char *end=ptr+res->length(); ptr= (char*) res->ptr(); end= ptr+res->length(); #ifdef USE_MB char *p=ptr; register uint32 l; Loading Loading @@ -1297,31 +1313,31 @@ String *Item_func_rtrim::val_str(String *str) String *Item_func_trim::val_str(String *str) { DBUG_ASSERT(fixed == 1); String *res =args[0]->val_str(str); if ((null_value=args[0]->null_value)) return 0; /* purecov: inspected */ char buff[MAX_FIELD_WIDTH]; String tmp(buff,sizeof(buff),res->charset()); char buff[MAX_FIELD_WIDTH], *ptr, *end; const char *r_ptr; String tmp(buff, sizeof(buff), system_charset_info); String *res, *remove_str; uint remove_length; LINT_INIT(remove_length); String *remove_str; /* The string to remove from res. */ res= args[0]->val_str(str); if ((null_value=args[0]->null_value)) return 0; remove_str= &remove; /* Default value. */ if (arg_count == 2) { remove_str= args[1]->val_str(&tmp); if ((null_value= args[1]->null_value)) return 0; } else remove_str= &remove; /* Default value. */ if (!remove_str || (remove_length=remove_str->length()) == 0 || if ((remove_length= remove_str->length()) == 0 || remove_length > res->length()) return res; char *ptr=(char*) res->ptr(); char *end=ptr+res->length(); const char *r_ptr=remove_str->ptr(); ptr= (char*) res->ptr(); end= ptr+res->length(); r_ptr= remove_str->ptr(); while (ptr+remove_length <= end && !memcmp(ptr,r_ptr,remove_length)) ptr+=remove_length; #ifdef USE_MB Loading
sql/sql_base.cc +1 −0 Original line number Diff line number Diff line Loading @@ -1069,6 +1069,7 @@ TABLE *open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT *mem_root, table->outer_join= table->null_row= table->maybe_null= table->force_index= 0; table->status=STATUS_NO_RECORD; table->keys_in_use_for_query= table->keys_in_use; table->insert_values= 0; table->used_keys= table->keys_for_keyread; if (table->timestamp_field) table->timestamp_field_type= table->timestamp_field->get_auto_set_type(); Loading