Commit ef8436be authored by serg@serg.mysql.com's avatar serg@serg.mysql.com

BIT_LENGTH ODBC function

parent 8b97f200
...@@ -30076,6 +30076,15 @@ mysql> select OCTET_LENGTH('text'); ...@@ -30076,6 +30076,15 @@ mysql> select OCTET_LENGTH('text');
Note that for @code{CHAR_LENGTH()}, multi-byte characters are only counted Note that for @code{CHAR_LENGTH()}, multi-byte characters are only counted
once. once.
@findex BIT_LENGTH()
@item BIT_LENGTH(str)
Returns the length of the string @code{str} in bits:
@example
mysql> select BIT_LENGTH('text');
-> 32
@end example
@findex LOCATE() @findex LOCATE()
@findex POSITION() @findex POSITION()
@item LOCATE(substr,str) @item LOCATE(substr,str)
...@@ -47893,10 +47902,19 @@ Our TODO section contains what we plan to have in 4.0. @xref{TODO MySQL 4.0}. ...@@ -47893,10 +47902,19 @@ Our TODO section contains what we plan to have in 4.0. @xref{TODO MySQL 4.0}.
@cindex changes, version 4.0 @cindex changes, version 4.0
@menu @menu
* News-4.0.2:: Changes in release 4.0.2
* News-4.0.1:: Changes in release 4.0.1 * News-4.0.1:: Changes in release 4.0.1
* News-4.0.0:: Changes in release 4.0.0 * News-4.0.0:: Changes in release 4.0.0
@end menu @end menu
@node News-4.0.2, News-4.0.1, News-4.0.x, News-4.0.x
@appendixsubsec Changes in release 4.0.2
@itemize @bullet
@item
ODBC compatibility: added @code{BIT_LENGTH()} function.
@end itemize
@node News-4.0.1, News-4.0.0, News-4.0.x, News-4.0.x @node News-4.0.1, News-4.0.0, News-4.0.x, News-4.0.x
@appendixsubsec Changes in release 4.0.1 @appendixsubsec Changes in release 4.0.1
...@@ -8,6 +8,9 @@ hellomonty ...@@ -8,6 +8,9 @@ hellomonty
select length('\n\t\r\b\0\_\%\\'); select length('\n\t\r\b\0\_\%\\');
length('\n\t\r\b\0\_\%\\') length('\n\t\r\b\0\_\%\\')
10 10
select bit_length('\n\t\r\b\0\_\%\\');
bit_length('\n\t\r\b\0\_\%\\')
80
select concat('monty',' was here ','again'),length('hello'),char(ascii('h')); select concat('monty',' was here ','again'),length('hello'),char(ascii('h'));
concat('monty',' was here ','again') length('hello') char(ascii('h')) concat('monty',' was here ','again') length('hello') char(ascii('h'))
monty was here again 5 h monty was here again 5 h
......
...@@ -9,6 +9,7 @@ drop table if exists t1; ...@@ -9,6 +9,7 @@ drop table if exists t1;
select 'hello',"'hello'",'""hello""','''h''e''l''l''o''',"hel""lo",'hel\'lo'; select 'hello',"'hello'",'""hello""','''h''e''l''l''o''',"hel""lo",'hel\'lo';
select 'hello' 'monty'; select 'hello' 'monty';
select length('\n\t\r\b\0\_\%\\'); select length('\n\t\r\b\0\_\%\\');
select bit_length('\n\t\r\b\0\_\%\\');
select concat('monty',' was here ','again'),length('hello'),char(ascii('h')); select concat('monty',' was here ','again'),length('hello'),char(ascii('h'));
select locate('he','hello'),locate('he','hello',2),locate('lo','hello',2) ; select locate('he','hello'),locate('he','hello',2),locate('lo','hello',2) ;
select instr('hello','HE'), instr('hello',binary 'HE'), instr(binary 'hello','HE'); select instr('hello','HE'), instr('hello',binary 'HE'), instr(binary 'hello','HE');
......
...@@ -200,6 +200,11 @@ Item *create_func_length(Item* a) ...@@ -200,6 +200,11 @@ Item *create_func_length(Item* a)
return new Item_func_length(a); return new Item_func_length(a);
} }
Item *create_func_bit_length(Item* a)
{
return new Item_func_bit_length(a);
}
Item *create_func_char_length(Item* a) Item *create_func_char_length(Item* a)
{ {
return new Item_func_char_length(a); return new Item_func_char_length(a);
......
...@@ -22,6 +22,7 @@ Item *create_func_ascii(Item* a); ...@@ -22,6 +22,7 @@ Item *create_func_ascii(Item* a);
Item *create_func_asin(Item* a); Item *create_func_asin(Item* a);
Item *create_func_bin(Item* a); Item *create_func_bin(Item* a);
Item *create_func_bit_count(Item* a); Item *create_func_bit_count(Item* a);
Item *create_func_bit_length(Item* a);
Item *create_func_ceiling(Item* a); Item *create_func_ceiling(Item* a);
Item *create_func_char_length(Item* a); Item *create_func_char_length(Item* a);
Item *create_func_connection_id(void); Item *create_func_connection_id(void);
......
...@@ -501,6 +501,14 @@ class Item_func_length :public Item_int_func ...@@ -501,6 +501,14 @@ class Item_func_length :public Item_int_func
void fix_length_and_dec() { max_length=10; } void fix_length_and_dec() { max_length=10; }
}; };
class Item_func_bit_length :public Item_func_length
{
public:
Item_func_bit_length(Item *a) :Item_func_length(a) {}
longlong val_int() { return Item_func_length::val_int()*8; }
const char *func_name() const { return "bit_length"; }
};
class Item_func_char_length :public Item_int_func class Item_func_char_length :public Item_int_func
{ {
String value; String value;
......
...@@ -397,6 +397,7 @@ static SYMBOL sql_functions[] = { ...@@ -397,6 +397,7 @@ static SYMBOL sql_functions[] = {
{ "BIT_OR", SYM(BIT_OR),0,0}, { "BIT_OR", SYM(BIT_OR),0,0},
{ "BIT_AND", SYM(BIT_AND),0,0}, { "BIT_AND", SYM(BIT_AND),0,0},
{ "CEILING", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_ceiling)}, { "CEILING", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_ceiling)},
{ "BIT_LENGTH", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_bit_length)},
{ "CHAR_LENGTH", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_char_length)}, { "CHAR_LENGTH", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_char_length)},
{ "CHARACTER_LENGTH", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_char_length)}, { "CHARACTER_LENGTH", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_char_length)},
{ "COALESCE", SYM(COALESCE),0,0}, { "COALESCE", SYM(COALESCE),0,0},
......
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