mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
merge
sql/item_func.cc: Auto merged sql/sql_select.cc: Auto merged
This commit is contained in:
@ -1630,3 +1630,11 @@ select count(*) from t1 as w1 where w1.val in (select w2.val from t1 as w2 where
|
|||||||
count(*)
|
count(*)
|
||||||
0
|
0
|
||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
|
create table t1 (a int);
|
||||||
|
insert into t1 values (1);
|
||||||
|
explain select benchmark(1000, (select a from t1 where a=sha(rand())));
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
|
2 UNCACHEABLE SUBQUERY t1 system NULL NULL NULL NULL 1
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
@ -1073,3 +1073,11 @@ create table t1(val varchar(10));
|
|||||||
insert into t1 values ('aaa'), ('bbb'),('eee'),('mmm'),('ppp');
|
insert into t1 values ('aaa'), ('bbb'),('eee'),('mmm'),('ppp');
|
||||||
select count(*) from t1 as w1 where w1.val in (select w2.val from t1 as w2 where w2.val like 'm%') and w1.val in (select w3.val from t1 as w3 where w3.val like 'e%');
|
select count(*) from t1 as w1 where w1.val in (select w2.val from t1 as w2 where w2.val like 'm%') and w1.val in (select w3.val from t1 as w3 where w3.val like 'e%');
|
||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Static tables & rund() in subqueries
|
||||||
|
#
|
||||||
|
create table t1 (a int);
|
||||||
|
insert into t1 values (1);
|
||||||
|
explain select benchmark(1000, (select a from t1 where a=sha(rand())));
|
||||||
|
drop table t1;
|
||||||
|
@ -954,6 +954,7 @@ void Item_func_rand::fix_length_and_dec()
|
|||||||
{
|
{
|
||||||
decimals=NOT_FIXED_DEC;
|
decimals=NOT_FIXED_DEC;
|
||||||
max_length=float_length(decimals);
|
max_length=float_length(decimals);
|
||||||
|
used_tables_cache|= RAND_TABLE_BIT;
|
||||||
if (arg_count)
|
if (arg_count)
|
||||||
{ // Only use argument once in query
|
{ // Only use argument once in query
|
||||||
uint32 tmp= (uint32) (args[0]->val_int());
|
uint32 tmp= (uint32) (args[0]->val_int());
|
||||||
|
@ -512,7 +512,6 @@ public:
|
|||||||
double val();
|
double val();
|
||||||
const char *func_name() const { return "rand"; }
|
const char *func_name() const { return "rand"; }
|
||||||
bool const_item() const { return 0; }
|
bool const_item() const { return 0; }
|
||||||
table_map used_tables() const { return RAND_TABLE_BIT; }
|
|
||||||
void fix_length_and_dec();
|
void fix_length_and_dec();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -584,7 +584,9 @@ JOIN::optimize()
|
|||||||
DBUG_RETURN(1); // error == -1
|
DBUG_RETURN(1); // error == -1
|
||||||
}
|
}
|
||||||
if (const_table_map != found_const_table_map &&
|
if (const_table_map != found_const_table_map &&
|
||||||
!(select_options & SELECT_DESCRIBE))
|
!(select_options & SELECT_DESCRIBE) &&
|
||||||
|
!((conds->used_tables() & RAND_TABLE_BIT) &&
|
||||||
|
select_lex->master_unit() != &thd->lex->unit))// not upper level SELECT
|
||||||
{
|
{
|
||||||
zero_result_cause= "no matching row in const table";
|
zero_result_cause= "no matching row in const table";
|
||||||
DBUG_PRINT("error",("Error: %s", zero_result_cause));
|
DBUG_PRINT("error",("Error: %s", zero_result_cause));
|
||||||
@ -3407,7 +3409,9 @@ make_join_select(JOIN *join,SQL_SELECT *select,COND *cond)
|
|||||||
table_map used_tables;
|
table_map used_tables;
|
||||||
if (join->tables > 1)
|
if (join->tables > 1)
|
||||||
cond->update_used_tables(); // Tablenr may have changed
|
cond->update_used_tables(); // Tablenr may have changed
|
||||||
if (join->const_tables == join->tables)
|
if (join->const_tables == join->tables &&
|
||||||
|
join->thd->lex->current_select->master_unit() ==
|
||||||
|
&join->thd->lex->unit) // not upper level SELECT
|
||||||
join->const_table_map|=RAND_TABLE_BIT;
|
join->const_table_map|=RAND_TABLE_BIT;
|
||||||
{ // Check const tables
|
{ // Check const tables
|
||||||
COND *const_cond=
|
COND *const_cond=
|
||||||
|
Reference in New Issue
Block a user