Commit fe7dc23f authored by venu@myvenu.com's avatar venu@myvenu.com

Merge

parents c994482f 7d094db0
...@@ -532,3 +532,24 @@ t1 CREATE TABLE `t1` ( ...@@ -532,3 +532,24 @@ t1 CREATE TABLE `t1` (
`replace(_latin2'abcd',_latin2'b',_latin2'B')` char(4) character set latin2 NOT NULL default '' `replace(_latin2'abcd',_latin2'b',_latin2'B')` char(4) character set latin2 NOT NULL default ''
) TYPE=MyISAM CHARSET=latin1 ) TYPE=MyISAM CHARSET=latin1
drop table t1; drop table t1;
select SUBSTR('abcdefg',3,2);
SUBSTR('abcdefg',3,2)
cd
select SUBSTRING('abcdefg',3,2);
SUBSTRING('abcdefg',3,2)
cd
select SUBSTR('abcdefg',-3,2) FROM DUAL;
SUBSTR('abcdefg',-3,2)
ef
select SUBSTR('abcdefg',-1,5) FROM DUAL;
SUBSTR('abcdefg',-1,5)
g
select SUBSTR('abcdefg',0,0) FROM DUAL;
SUBSTR('abcdefg',0,0)
select SUBSTR('abcdefg',-1,-1) FROM DUAL;
SUBSTR('abcdefg',-1,-1)
select SUBSTR('abcdefg',1,-1) FROM DUAL;
SUBSTR('abcdefg',1,-1)
...@@ -294,3 +294,14 @@ select ...@@ -294,3 +294,14 @@ select
; ;
show create table t1; show create table t1;
drop table t1; drop table t1;
#
# test for SUBSTR
#
select SUBSTR('abcdefg',3,2);
select SUBSTRING('abcdefg',3,2);
select SUBSTR('abcdefg',-3,2) FROM DUAL;
select SUBSTR('abcdefg',-1,5) FROM DUAL;
select SUBSTR('abcdefg',0,0) FROM DUAL;
select SUBSTR('abcdefg',-1,-1) FROM DUAL;
select SUBSTR('abcdefg',1,-1) FROM DUAL;
...@@ -979,13 +979,14 @@ void Item_func_right::fix_length_and_dec() ...@@ -979,13 +979,14 @@ void Item_func_right::fix_length_and_dec()
String *Item_func_substr::val_str(String *str) String *Item_func_substr::val_str(String *str)
{ {
String *res = args[0]->val_str(str); String *res = args[0]->val_str(str);
int32 start = (int32) args[1]->val_int()-1; int32 start = (int32) args[1]->val_int();
int32 length = arg_count == 3 ? (int32) args[2]->val_int() : INT_MAX32; int32 length = arg_count == 3 ? (int32) args[2]->val_int() : INT_MAX32;
int32 tmp_length; int32 tmp_length;
if ((null_value=(args[0]->null_value || args[1]->null_value || if ((null_value=(args[0]->null_value || args[1]->null_value ||
(arg_count == 3 && args[2]->null_value)))) (arg_count == 3 && args[2]->null_value))))
return 0; /* purecov: inspected */ return 0; /* purecov: inspected */
start= (int32)((start < 0) ? res->length() + start : start -1);
start=res->charpos(start); start=res->charpos(start);
length=res->charpos(length,start); length=res->charpos(length,start);
if (start < 0 || (uint) start+1 > res->length() || length <= 0) if (start < 0 || (uint) start+1 > res->length() || length <= 0)
......
...@@ -627,6 +627,7 @@ static SYMBOL sql_functions[] = { ...@@ -627,6 +627,7 @@ static SYMBOL sql_functions[] = {
{ "STD", SYM(STD_SYM),0,0}, { "STD", SYM(STD_SYM),0,0},
{ "STDDEV", SYM(STD_SYM),0,0}, { "STDDEV", SYM(STD_SYM),0,0},
{ "STRCMP", SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_strcmp)}, { "STRCMP", SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_strcmp)},
{ "SUBSTR", SYM(SUBSTRING),0,0},
{ "SUBSTRING", SYM(SUBSTRING),0,0}, { "SUBSTRING", SYM(SUBSTRING),0,0},
{ "SUBSTRING_INDEX", SYM(SUBSTRING_INDEX),0,0}, { "SUBSTRING_INDEX", SYM(SUBSTRING_INDEX),0,0},
{ "SUBTIME", SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_subtime)}, { "SUBTIME", SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_subtime)},
......
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