Commit 1b9b0426 authored by monty@mashka.mysql.fi's avatar monty@mashka.mysql.fi

Fix problem in MIN/MAX optimisation (from last patch)

Don't make OLD_PASSWORD() a reserved word
parent f68914ad
...@@ -31,3 +31,16 @@ drop table t1; ...@@ -31,3 +31,16 @@ drop table t1;
explain select 1; explain select 1;
Comment Comment
No tables used No tables used
create table t1 (a int not null);
explain select count(*) from t1;
Comment
Select tables optimized away
insert into t1 values(1);
explain select count(*) from t1;
Comment
Select tables optimized away
insert into t1 values(1);
explain select count(*) from t1;
Comment
Select tables optimized away
drop table t1;
select length(encrypt('foo', 'ff')) <> 0; select length(encrypt('foo', 'ff')) <> 0;
length(encrypt('foo', 'ff')) <> 0 length(encrypt('foo', 'ff')) <> 0
1 1
select password('test'),length(encrypt('test')),encrypt('test','aa'); select old_password('test'), password('test');
password('test') length(encrypt('test')) encrypt('test','aa') old_password('test') password('test')
378b243e220ca493 13 aaqPiZY5xR5l. 378b243e220ca493 378b243e220ca493
select length(encrypt('test')), encrypt('test','aa');
length(encrypt('test')) encrypt('test','aa')
13 aaqPiZY5xR5l.
...@@ -20,3 +20,11 @@ explain select * from t1 ignore key (str,str,foo) where str="foo"; ...@@ -20,3 +20,11 @@ explain select * from t1 ignore key (str,str,foo) where str="foo";
drop table t1; drop table t1;
explain select 1; explain select 1;
create table t1 (a int not null);
explain select count(*) from t1;
insert into t1 values(1);
explain select count(*) from t1;
insert into t1 values(1);
explain select count(*) from t1;
drop table t1;
...@@ -2,4 +2,5 @@ ...@@ -2,4 +2,5 @@
select length(encrypt('foo', 'ff')) <> 0; select length(encrypt('foo', 'ff')) <> 0;
--replace_result $1$aa$4OSUA5cjdx0RUQ08opV27/ aaqPiZY5xR5l. --replace_result $1$aa$4OSUA5cjdx0RUQ08opV27/ aaqPiZY5xR5l.
select password('test'),length(encrypt('test')),encrypt('test','aa'); select old_password('test'), password('test');
select length(encrypt('test')), encrypt('test','aa');
...@@ -307,6 +307,11 @@ Item *create_func_quarter(Item* a) ...@@ -307,6 +307,11 @@ Item *create_func_quarter(Item* a)
return new Item_func_quarter(a); return new Item_func_quarter(a);
} }
Item *create_func_password(Item* a)
{
return new Item_func_password(a);
}
Item *create_func_radians(Item *a) Item *create_func_radians(Item *a)
{ {
return new Item_func_units((char*) "radians",a,M_PI/180,0.0); return new Item_func_units((char*) "radians",a,M_PI/180,0.0);
......
...@@ -70,6 +70,7 @@ Item *create_func_pi(void); ...@@ -70,6 +70,7 @@ Item *create_func_pi(void);
Item *create_func_pow(Item* a, Item *b); Item *create_func_pow(Item* a, Item *b);
Item *create_func_current_user(void); Item *create_func_current_user(void);
Item *create_func_quarter(Item* a); Item *create_func_quarter(Item* a);
Item *create_func_password(Item* a);
Item *create_func_radians(Item *a); Item *create_func_radians(Item *a);
Item *create_func_release_lock(Item* a); Item *create_func_release_lock(Item* a);
Item *create_func_repeat(Item* a, Item *b); Item *create_func_repeat(Item* a, Item *b);
......
...@@ -260,7 +260,6 @@ static SYMBOL symbols[] = { ...@@ -260,7 +260,6 @@ static SYMBOL symbols[] = {
{ "NULL", SYM(NULL_SYM),0,0}, { "NULL", SYM(NULL_SYM),0,0},
{ "NUMERIC", SYM(NUMERIC_SYM),0,0}, { "NUMERIC", SYM(NUMERIC_SYM),0,0},
{ "OFFSET", SYM(OFFSET_SYM),0,0}, { "OFFSET", SYM(OFFSET_SYM),0,0},
{ "OLD_PASSWORD", SYM(PASSWORD),0,0},
{ "ON", SYM(ON),0,0}, { "ON", SYM(ON),0,0},
{ "OPEN", SYM(OPEN_SYM),0,0}, { "OPEN", SYM(OPEN_SYM),0,0},
{ "OPTIMIZE", SYM(OPTIMIZE),0,0}, { "OPTIMIZE", SYM(OPTIMIZE),0,0},
...@@ -475,6 +474,7 @@ static SYMBOL sql_functions[] = { ...@@ -475,6 +474,7 @@ static SYMBOL sql_functions[] = {
{ "NULLIF", SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_nullif)}, { "NULLIF", SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_nullif)},
{ "OCTET_LENGTH", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_length)}, { "OCTET_LENGTH", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_length)},
{ "OCT", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_oct)}, { "OCT", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_oct)},
{ "OLD_PASSWORD", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_password)},
{ "ORD", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_ord)}, { "ORD", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_ord)},
{ "PERIOD_ADD", SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_period_add)}, { "PERIOD_ADD", SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_period_add)},
{ "PERIOD_DIFF", SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_period_diff)}, { "PERIOD_DIFF", SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_period_diff)},
......
...@@ -23,8 +23,6 @@ ...@@ -23,8 +23,6 @@
*/ */
#ifdef __GNUC__ #ifdef __GNUC__
#pragma implementation // gcc: Class implementation #pragma implementation // gcc: Class implementation
#endif #endif
......
...@@ -245,8 +245,15 @@ int opt_sum_query(TABLE_LIST *tables, List<Item> &all_fields,COND *conds) ...@@ -245,8 +245,15 @@ int opt_sum_query(TABLE_LIST *tables, List<Item> &all_fields,COND *conds)
const_result=0; const_result=0;
} }
} }
if (used_tables != removed_tables) /*
const_result=0; // We didn't remove all tables If we have a where clause, we can only ignore searching in the
tables if MIN/MAX optimisation replaced all used tables
This is to not to use replaced values in case of:
SELECT MIN(key) FROM table_1, empty_table
removed_tables is != 0 if we have used MIN() or MAX().
*/
if (removed_tables && used_tables != removed_tables)
const_result= 0; // We didn't remove all tables
return const_result; return const_result;
} }
......
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