mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Merge sinisa@bk-internal.mysql.com:/home/bk/mysql-4.1
into sinisa.nasamreza.org:/mnt/work/mysql-4.1
This commit is contained in:
@ -324,6 +324,7 @@ a b
|
|||||||
7 7
|
7 7
|
||||||
8 8
|
8 8
|
||||||
9 9
|
9 9
|
||||||
|
update t1,t2 set t1.b=t2.b, t1.a=t2.a where t1.a=t2.a and not exists (select * from t2 where t2.a > 10);
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
CREATE TABLE t3 ( KEY1 varchar(50) NOT NULL default '', PARAM_CORR_DISTANCE_RUSH double default NULL, PARAM_CORR_DISTANCE_GEM double default NULL, PARAM_AVG_TARE double default NULL, PARAM_AVG_NB_DAYS double default NULL, PARAM_DEFAULT_PROP_GEM_SRVC varchar(50) default NULL, PARAM_DEFAULT_PROP_GEM_NO_ETIK varchar(50) default NULL, PARAM_SCENARIO_COSTS varchar(50) default NULL, PARAM_DEFAULT_WAGON_COST double default NULL, tmp int(11) default NULL, PRIMARY KEY (KEY1)) ENGINE=MyISAM;
|
CREATE TABLE t3 ( KEY1 varchar(50) NOT NULL default '', PARAM_CORR_DISTANCE_RUSH double default NULL, PARAM_CORR_DISTANCE_GEM double default NULL, PARAM_AVG_TARE double default NULL, PARAM_AVG_NB_DAYS double default NULL, PARAM_DEFAULT_PROP_GEM_SRVC varchar(50) default NULL, PARAM_DEFAULT_PROP_GEM_NO_ETIK varchar(50) default NULL, PARAM_SCENARIO_COSTS varchar(50) default NULL, PARAM_DEFAULT_WAGON_COST double default NULL, tmp int(11) default NULL, PRIMARY KEY (KEY1)) ENGINE=MyISAM;
|
||||||
INSERT INTO t3 VALUES ('A',1,1,22,3.2,'R','R','BASE2',0.24,NULL);
|
INSERT INTO t3 VALUES ('A',1,1,22,3.2,'R','R','BASE2',0.24,NULL);
|
||||||
|
@ -924,3 +924,15 @@ a
|
|||||||
1
|
1
|
||||||
2
|
2
|
||||||
2
|
2
|
||||||
|
set sql_select_limit=1;
|
||||||
|
select 1 union select 2;
|
||||||
|
1
|
||||||
|
1
|
||||||
|
(select 1) union (select 2);
|
||||||
|
1
|
||||||
|
1
|
||||||
|
(select 1) union (select 2) union (select 3) limit 2;
|
||||||
|
1
|
||||||
|
1
|
||||||
|
2
|
||||||
|
set sql_select_limit=default;
|
||||||
|
@ -260,6 +260,10 @@ update t1,t2 set t1.b=t1.b+2,t2.b=t1.b+10 where t1.b between 3 and 5 and t2.a=t1
|
|||||||
select * from t1;
|
select * from t1;
|
||||||
select * from t2;
|
select * from t2;
|
||||||
|
|
||||||
|
# test for non-updating table which is also used in sub-select
|
||||||
|
|
||||||
|
update t1,t2 set t1.b=t2.b, t1.a=t2.a where t1.a=t2.a and not exists (select * from t2 where t2.a > 10);
|
||||||
|
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
CREATE TABLE t3 ( KEY1 varchar(50) NOT NULL default '', PARAM_CORR_DISTANCE_RUSH double default NULL, PARAM_CORR_DISTANCE_GEM double default NULL, PARAM_AVG_TARE double default NULL, PARAM_AVG_NB_DAYS double default NULL, PARAM_DEFAULT_PROP_GEM_SRVC varchar(50) default NULL, PARAM_DEFAULT_PROP_GEM_NO_ETIK varchar(50) default NULL, PARAM_SCENARIO_COSTS varchar(50) default NULL, PARAM_DEFAULT_WAGON_COST double default NULL, tmp int(11) default NULL, PRIMARY KEY (KEY1)) ENGINE=MyISAM;
|
CREATE TABLE t3 ( KEY1 varchar(50) NOT NULL default '', PARAM_CORR_DISTANCE_RUSH double default NULL, PARAM_CORR_DISTANCE_GEM double default NULL, PARAM_AVG_TARE double default NULL, PARAM_AVG_NB_DAYS double default NULL, PARAM_DEFAULT_PROP_GEM_SRVC varchar(50) default NULL, PARAM_DEFAULT_PROP_GEM_NO_ETIK varchar(50) default NULL, PARAM_SCENARIO_COSTS varchar(50) default NULL, PARAM_DEFAULT_WAGON_COST double default NULL, tmp int(11) default NULL, PRIMARY KEY (KEY1)) ENGINE=MyISAM;
|
||||||
INSERT INTO t3 VALUES ('A',1,1,22,3.2,'R','R','BASE2',0.24,NULL);
|
INSERT INTO t3 VALUES ('A',1,1,22,3.2,'R','R','BASE2',0.24,NULL);
|
||||||
|
@ -498,4 +498,9 @@ select * from t1 UNION ALL select * from t1;
|
|||||||
select * from t1 UNION select * from t1 UNION ALL select * from t1;
|
select * from t1 UNION select * from t1 UNION ALL select * from t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
select 1 as a union all select 1 union all select 2 union select 1 union all select 2;
|
select 1 as a union all select 1 union all select 2 union select 1 union all select 2;
|
||||||
|
set sql_select_limit=1;
|
||||||
|
select 1 union select 2;
|
||||||
|
(select 1) union (select 2);
|
||||||
|
(select 1) union (select 2) union (select 3) limit 2;
|
||||||
|
set sql_select_limit=default;
|
||||||
|
|
||||||
|
@ -377,12 +377,21 @@ int st_select_lex_unit::exec()
|
|||||||
if (!thd->is_fatal_error) // Check if EOM
|
if (!thd->is_fatal_error) // Check if EOM
|
||||||
{
|
{
|
||||||
ulong options_tmp= thd->options;
|
ulong options_tmp= thd->options;
|
||||||
|
/*
|
||||||
|
We have to take into the account a case when:
|
||||||
|
SET SQL_SELECT_LIMIT was set.
|
||||||
|
In mysql_new_select() function this value was copied to
|
||||||
|
the fake_select_lex node of the top-level unit.
|
||||||
|
Here below, we just take this value if global LIMIT was not applied
|
||||||
|
to the entire UNION.
|
||||||
|
*/
|
||||||
|
ha_rows select_limit= ((global_parameters->select_limit != HA_POS_ERROR) ?
|
||||||
|
global_parameters->select_limit : fake_select_lex->select_limit);
|
||||||
thd->lex->current_select= fake_select_lex;
|
thd->lex->current_select= fake_select_lex;
|
||||||
offset_limit_cnt= global_parameters->offset_limit;
|
offset_limit_cnt= global_parameters->offset_limit;
|
||||||
select_limit_cnt= global_parameters->select_limit +
|
select_limit_cnt= select_limit + global_parameters->offset_limit;
|
||||||
global_parameters->offset_limit;
|
|
||||||
|
|
||||||
if (select_limit_cnt < global_parameters->select_limit)
|
if (select_limit_cnt < select_limit)
|
||||||
select_limit_cnt= HA_POS_ERROR; // no limit
|
select_limit_cnt= HA_POS_ERROR; // no limit
|
||||||
if (select_limit_cnt == HA_POS_ERROR)
|
if (select_limit_cnt == HA_POS_ERROR)
|
||||||
options_tmp&= ~OPTION_FOUND_ROWS;
|
options_tmp&= ~OPTION_FOUND_ROWS;
|
||||||
|
@ -578,7 +578,7 @@ multi_update::multi_update(THD *thd_arg, TABLE_LIST *table_list,
|
|||||||
int multi_update::prepare(List<Item> ¬_used_values,
|
int multi_update::prepare(List<Item> ¬_used_values,
|
||||||
SELECT_LEX_UNIT *lex_unit)
|
SELECT_LEX_UNIT *lex_unit)
|
||||||
{
|
{
|
||||||
TABLE_LIST *table_ref;
|
TABLE_LIST *table_ref, *tables;
|
||||||
SQL_LIST update;
|
SQL_LIST update;
|
||||||
table_map tables_to_update= 0;
|
table_map tables_to_update= 0;
|
||||||
Item_field *item;
|
Item_field *item;
|
||||||
@ -604,8 +604,9 @@ int multi_update::prepare(List<Item> ¬_used_values,
|
|||||||
We have to check values after setup_tables to get used_keys right in
|
We have to check values after setup_tables to get used_keys right in
|
||||||
reference tables
|
reference tables
|
||||||
*/
|
*/
|
||||||
|
tables= thd->lex->select_lex.get_table_list();
|
||||||
|
|
||||||
if (setup_fields(thd, 0, all_tables, *values, 1, 0, 0))
|
if (setup_fields(thd, 0, tables, *values, 1, 0, 0))
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -615,7 +616,7 @@ int multi_update::prepare(List<Item> ¬_used_values,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
update.empty();
|
update.empty();
|
||||||
for (table_ref= all_tables; table_ref; table_ref=table_ref->next)
|
for (table_ref= tables; table_ref; table_ref=table_ref->next)
|
||||||
{
|
{
|
||||||
TABLE *table=table_ref->table;
|
TABLE *table=table_ref->table;
|
||||||
if (tables_to_update & table->map)
|
if (tables_to_update & table->map)
|
||||||
@ -684,10 +685,10 @@ int multi_update::prepare(List<Item> ¬_used_values,
|
|||||||
which will cause an error when reading a row.
|
which will cause an error when reading a row.
|
||||||
(This issue is mostly relevent for MyISAM tables)
|
(This issue is mostly relevent for MyISAM tables)
|
||||||
*/
|
*/
|
||||||
for (table_ref= all_tables; table_ref; table_ref=table_ref->next)
|
for (table_ref= tables; table_ref; table_ref=table_ref->next)
|
||||||
{
|
{
|
||||||
TABLE *table=table_ref->table;
|
TABLE *table=table_ref->table;
|
||||||
if (!(tables_to_update & table->map) &&
|
if (!(tables_to_update & table->map) || !table->no_keyread &&
|
||||||
find_real_table_in_list(update_tables, table_ref->db,
|
find_real_table_in_list(update_tables, table_ref->db,
|
||||||
table_ref->real_name))
|
table_ref->real_name))
|
||||||
table->no_cache= 1; // Disable row cache
|
table->no_cache= 1; // Disable row cache
|
||||||
|
Reference in New Issue
Block a user