mirror of
https://github.com/MariaDB/server.git
synced 2025-12-24 11:21:21 +03:00
Merge
This commit is contained in:
@@ -314,4 +314,24 @@ key1 key2 key3 key4 key5 key6 key7 key8 key9 keyA keyB keyC
|
||||
11 11 11 11 11 11 11 1013 11 11 11 11
|
||||
12 12 12 12 12 12 12 1012 12 12 12 12
|
||||
1016 1016 1016 1016 1016 1016 1016 8 1016 1016 1016 1016
|
||||
explain select * from t0 where key1 < 3 or key2 < 4;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t0 index_merge i1,i2 i1,i2 4,4 NULL 7 Using where
|
||||
select * from t0 where key1 < 3 or key2 < 4;
|
||||
key1 key2 key3 key4 key5 key6 key7 key8
|
||||
1 1 1 1 1 1 1 1023
|
||||
2 2 2 2 2 2 2 1022
|
||||
3 3 3 3 3 3 3 1021
|
||||
update t0 set key8=123 where key1 < 3 or key2 < 4;
|
||||
select * from t0 where key1 < 3 or key2 < 4;
|
||||
key1 key2 key3 key4 key5 key6 key7 key8
|
||||
1 1 1 1 1 1 1 123
|
||||
2 2 2 2 2 2 2 123
|
||||
3 3 3 3 3 3 3 123
|
||||
delete from t0 where key1 < 3 or key2 < 4;
|
||||
select * from t0 where key1 < 3 or key2 < 4;
|
||||
key1 key2 key3 key4 key5 key6 key7 key8
|
||||
select count(*) from t0;
|
||||
count(*)
|
||||
1021
|
||||
drop table t0, t1, t2, t3, t4;
|
||||
|
||||
@@ -978,6 +978,12 @@ call bug2614()|
|
||||
call bug2614()|
|
||||
drop table t3|
|
||||
drop procedure bug2614|
|
||||
create function bug2674 () returns int
|
||||
return @@sort_buffer_size|
|
||||
select bug2674()|
|
||||
bug2674()
|
||||
262136
|
||||
drop function bug2674|
|
||||
drop table if exists fac|
|
||||
create table fac (n int unsigned not null primary key, f bigint unsigned)|
|
||||
create procedure ifac(n int unsigned)
|
||||
|
||||
@@ -267,5 +267,15 @@ select * from t3 where
|
||||
key5=5 or key6=6 or key7=7 or key8=8 or
|
||||
key9=9 or keyA=10 or keyB=11 or keyC=12;
|
||||
|
||||
# Test for Bug#3183
|
||||
explain select * from t0 where key1 < 3 or key2 < 4;
|
||||
select * from t0 where key1 < 3 or key2 < 4;
|
||||
|
||||
update t0 set key8=123 where key1 < 3 or key2 < 4;
|
||||
select * from t0 where key1 < 3 or key2 < 4;
|
||||
|
||||
delete from t0 where key1 < 3 or key2 < 4;
|
||||
select * from t0 where key1 < 3 or key2 < 4;
|
||||
select count(*) from t0;
|
||||
|
||||
drop table t0, t1, t2, t3, t4;
|
||||
|
||||
@@ -1123,6 +1123,16 @@ call bug2614()|
|
||||
drop table t3|
|
||||
drop procedure bug2614|
|
||||
|
||||
#
|
||||
# BUG#2674
|
||||
#
|
||||
|
||||
create function bug2674 () returns int
|
||||
return @@sort_buffer_size|
|
||||
|
||||
select bug2674()|
|
||||
drop function bug2674|
|
||||
|
||||
|
||||
#
|
||||
# Some "real" examples
|
||||
|
||||
@@ -87,7 +87,16 @@ public:
|
||||
|
||||
QUICK_SELECT_I();
|
||||
virtual ~QUICK_SELECT_I(){};
|
||||
/*
|
||||
Call init() immediately after creation of quick select. if init() call
|
||||
fails, reset() or get_next() must not be called.
|
||||
*/
|
||||
virtual int init() = 0;
|
||||
|
||||
/*
|
||||
Call reset() before first get_next call. get_next must not be called if
|
||||
reset() call fails.
|
||||
*/
|
||||
virtual int reset(void) = 0;
|
||||
virtual int get_next() = 0; /* get next record to retrieve */
|
||||
virtual bool reverse_sorted() = 0;
|
||||
|
||||
15
sql/sp.cc
15
sql/sp.cc
@@ -242,7 +242,20 @@ db_find_routine(THD *thd, int type, sp_name *name, sp_head **sphp)
|
||||
if ((ret= sp_use_new_db(thd, name->m_db.str, olddb, sizeof(olddb), 1)))
|
||||
goto done;
|
||||
|
||||
lex_start(thd, (uchar*)defstr, deflen);
|
||||
{
|
||||
/* This is something of a kludge. We need to initialize some fields
|
||||
* in thd->lex (the unit and master stuff), and the easiest way to
|
||||
* do it is, is to call mysql_init_query(), but this unfortunately
|
||||
* resets teh value_list where we keep the CALL parameters. So we
|
||||
* copy the list and then restore it.
|
||||
*/
|
||||
List<Item> vals= thd->lex->value_list;
|
||||
|
||||
mysql_init_query(thd, TRUE);
|
||||
lex_start(thd, (uchar*)defstr, deflen);
|
||||
thd->lex->value_list= vals;
|
||||
}
|
||||
|
||||
if (yyparse(thd) || thd->is_fatal_error || thd->lex->sphead == NULL)
|
||||
{
|
||||
LEX *newlex= thd->lex;
|
||||
|
||||
@@ -150,6 +150,13 @@ int mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds, SQL_LIST *order,
|
||||
select= 0;
|
||||
}
|
||||
|
||||
/* If quick select is used, initialize it before retrieving rows. */
|
||||
if (select && select->quick && select->quick->reset())
|
||||
{
|
||||
delete select;
|
||||
free_underlaid_joins(thd, &thd->lex->select_lex);
|
||||
DBUG_RETURN(-1); // This will force out message
|
||||
}
|
||||
init_read_record(&info,thd,table,select,1,1);
|
||||
deleted=0L;
|
||||
init_ftfuncs(thd, &thd->lex->select_lex, 1);
|
||||
|
||||
@@ -246,7 +246,11 @@ int mysql_update(THD *thd,
|
||||
DISK_BUFFER_SIZE, MYF(MY_WME)))
|
||||
goto err;
|
||||
|
||||
/* If quick select is used, initialize it before retrieving rows. */
|
||||
if (select && select->quick && select->quick->reset())
|
||||
goto err;
|
||||
init_read_record(&info,thd,table,select,0,1);
|
||||
|
||||
thd->proc_info="Searching rows for update";
|
||||
uint tmp_limit= limit;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user