mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
merged
sql/item_create.cc: Auto merged sql/item_func.h: Auto merged sql/lex.h: Auto merged
This commit is contained in:
@ -30091,6 +30091,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)
|
||||||
@ -47996,6 +48005,8 @@ Our TODO section contains what we plan to have in 4.0. @xref{TODO MySQL 4.0}.
|
|||||||
|
|
||||||
@itemize @bullet
|
@itemize @bullet
|
||||||
@item
|
@item
|
||||||
|
ODBC compatibility: added @code{BIT_LENGTH()} function.
|
||||||
|
@item
|
||||||
Added @code{CAST()} and @code{CONVERT()} functions.
|
Added @code{CAST()} and @code{CONVERT()} functions.
|
||||||
@item
|
@item
|
||||||
Changed order of how keys are created in tables.
|
Changed order of how keys are created in tables.
|
||||||
|
@ -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
|
||||||
|
@ -129,6 +129,7 @@ a b
|
|||||||
handler t2 read next;
|
handler t2 read next;
|
||||||
a b
|
a b
|
||||||
18 eee
|
18 eee
|
||||||
|
alter table t1 type=MyISAM;
|
||||||
handler t2 read next;
|
handler t2 read next;
|
||||||
a b
|
a b
|
||||||
19 fff
|
19 fff
|
||||||
|
@ -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');
|
||||||
|
@ -58,8 +58,10 @@ handler t2 read a=(19) where b="yyy";
|
|||||||
|
|
||||||
handler t2 read first;
|
handler t2 read first;
|
||||||
handler t2 read next;
|
handler t2 read next;
|
||||||
|
alter table t1 type=MyISAM;
|
||||||
handler t2 read next;
|
handler t2 read next;
|
||||||
!$1064 handler t2 read last;
|
!$1064 handler t2 read last;
|
||||||
|
|
||||||
handler t2 close;
|
handler t2 close;
|
||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
|
|
||||||
|
@ -307,7 +307,7 @@ foreach my $rdb ( @db_desc ) {
|
|||||||
|
|
||||||
$rdb->{files} = [ @db_files ];
|
$rdb->{files} = [ @db_files ];
|
||||||
$rdb->{index} = [ @index_files ];
|
$rdb->{index} = [ @index_files ];
|
||||||
my @hc_tables = map { "$db.$_" } @dbh_tables;
|
my @hc_tables = map { "`$db.$_`" } @dbh_tables;
|
||||||
$rdb->{tables} = [ @hc_tables ];
|
$rdb->{tables} = [ @hc_tables ];
|
||||||
|
|
||||||
$rdb->{raid_dirs} = [ get_raid_dirs( $rdb->{files} ) ];
|
$rdb->{raid_dirs} = [ get_raid_dirs( $rdb->{files} ) ];
|
||||||
|
@ -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);
|
|||||||
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);
|
||||||
|
@ -522,6 +522,14 @@ public:
|
|||||||
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;
|
||||||
|
@ -396,6 +396,7 @@ static SYMBOL sql_functions[] = {
|
|||||||
{ "BIT_AND", SYM(BIT_AND),0,0},
|
{ "BIT_AND", SYM(BIT_AND),0,0},
|
||||||
{ "CAST", SYM(CAST_SYM),0,0},
|
{ "CAST", SYM(CAST_SYM),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},
|
||||||
|
@ -130,7 +130,11 @@ int mysql_ha_read(THD *thd, TABLE_LIST *tables,
|
|||||||
select_limit+=offset_limit;
|
select_limit+=offset_limit;
|
||||||
send_fields(thd,list,1);
|
send_fields(thd,list,1);
|
||||||
|
|
||||||
|
HANDLER_TABLES_HACK(thd);
|
||||||
MYSQL_LOCK *lock=mysql_lock_tables(thd,&tables->table,1);
|
MYSQL_LOCK *lock=mysql_lock_tables(thd,&tables->table,1);
|
||||||
|
HANDLER_TABLES_HACK(thd);
|
||||||
|
if (!lock)
|
||||||
|
goto err0; // mysql_lock_tables() printed error message already
|
||||||
|
|
||||||
for (uint num_rows=0; num_rows < select_limit; )
|
for (uint num_rows=0; num_rows < select_limit; )
|
||||||
{
|
{
|
||||||
@ -238,6 +242,7 @@ ok:
|
|||||||
return 0;
|
return 0;
|
||||||
err:
|
err:
|
||||||
mysql_unlock_tables(thd,lock);
|
mysql_unlock_tables(thd,lock);
|
||||||
|
err0:
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user