Commit 84afec5b authored by unknown's avatar unknown

Merge sanja.is.com.ua:/home/bell/mysql/bk/mysql-4.1

into sanja.is.com.ua:/home/bell/mysql/bk/work-insert-4.1

parents c480e31e bbf8f03f
...@@ -1850,3 +1850,44 @@ id name id pet ...@@ -1850,3 +1850,44 @@ id name id pet
2 Rebecca 2 Spot 2 Rebecca 2 Spot
3 NULL 3 Felix 3 NULL 3 Felix
drop table t1,t2; drop table t1,t2;
CREATE TABLE t1 ( a int, b int );
CREATE TABLE t2 ( c int, d int );
INSERT INTO t1 VALUES (1,2), (2,3), (3,4);
SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);
abc b
1 2
2 3
3 4
INSERT INTO t2 SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);
select * from t2;
c d
1 2
2 3
3 4
CREATE TABLE t3 SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);
select * from t3;
abc b
1 2
2 3
3 4
prepare stmt1 from "INSERT INTO t2 SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);";
execute stmt1;
deallocate prepare stmt1;
select * from t2;
c d
1 2
2 3
3 4
1 2
2 3
3 4
drop table t3;
prepare stmt1 from "CREATE TABLE t3 SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);";
execute stmt1;
select * from t3;
abc b
1 2
2 3
3 4
deallocate prepare stmt1;
DROP TABLE t1, t2, t3;
...@@ -1190,3 +1190,25 @@ CREATE TABLE t2 (id int(11) default NULL, pet varchar(10) default NULL); ...@@ -1190,3 +1190,25 @@ CREATE TABLE t2 (id int(11) default NULL, pet varchar(10) default NULL);
INSERT INTO t2 VALUES (1,'Fido'),(2,'Spot'),(3,'Felix'); INSERT INTO t2 VALUES (1,'Fido'),(2,'Spot'),(3,'Felix');
SELECT a.*, b.* FROM (SELECT * FROM t1) AS a JOIN t2 as b on a.id=b.id; SELECT a.*, b.* FROM (SELECT * FROM t1) AS a JOIN t2 as b on a.id=b.id;
drop table t1,t2; drop table t1,t2;
#
# outer fields resolving in INSERT/REPLACE and CRETE with SELECT
#
CREATE TABLE t1 ( a int, b int );
CREATE TABLE t2 ( c int, d int );
INSERT INTO t1 VALUES (1,2), (2,3), (3,4);
SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);
INSERT INTO t2 SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);
select * from t2;
CREATE TABLE t3 SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);
select * from t3;
prepare stmt1 from "INSERT INTO t2 SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);";
execute stmt1;
deallocate prepare stmt1;
select * from t2;
drop table t3;
prepare stmt1 from "CREATE TABLE t3 SELECT a AS abc, b FROM t1 WHERE b = (SELECT MIN(b) FROM t1 WHERE a=abc);";
execute stmt1;
select * from t3;
deallocate prepare stmt1;
DROP TABLE t1, t2, t3;
...@@ -2354,7 +2354,15 @@ mysql_execute_command(THD *thd) ...@@ -2354,7 +2354,15 @@ mysql_execute_command(THD *thd)
lex->create_list, lex->create_list,
lex->key_list, lex->key_list,
select_lex->item_list,lex->duplicates))) select_lex->item_list,lex->duplicates)))
{
/*
CREATE from SELECT give its SELECT_LEX for SELECT,
and item_list belong to SELECT
*/
select_lex->resolve_mode= SELECT_LEX::SELECT_MODE;
res=handle_select(thd, lex, result); res=handle_select(thd, lex, result);
select_lex->resolve_mode= SELECT_LEX::NOMATTER_MODE;
}
//reset for PS //reset for PS
lex->create_list.empty(); lex->create_list.empty();
lex->key_list.empty(); lex->key_list.empty();
...@@ -2704,7 +2712,11 @@ unsent_create_error: ...@@ -2704,7 +2712,11 @@ unsent_create_error:
lex->duplicates))) lex->duplicates)))
/* Skip first table, which is the table we are inserting in */ /* Skip first table, which is the table we are inserting in */
lex->select_lex.table_list.first= (byte*) first_local_table->next; lex->select_lex.table_list.first= (byte*) first_local_table->next;
lex->select_lex.resolve_mode= SELECT_LEX::NOMATTER_MODE; /*
insert/replace from SELECT give its SELECT_LEX for SELECT,
and item_list belong to SELECT
*/
lex->select_lex.resolve_mode= SELECT_LEX::SELECT_MODE;
res=handle_select(thd,lex,result); res=handle_select(thd,lex,result);
/* revert changes for SP */ /* revert changes for SP */
lex->select_lex.table_list.first= (byte*) first_local_table; lex->select_lex.table_list.first= (byte*) first_local_table;
......
...@@ -1307,6 +1307,7 @@ static int mysql_test_create_table(Prepared_statement *stmt, ...@@ -1307,6 +1307,7 @@ static int mysql_test_create_table(Prepared_statement *stmt,
DBUG_ENTER("mysql_test_create_table"); DBUG_ENTER("mysql_test_create_table");
THD *thd= stmt->thd; THD *thd= stmt->thd;
LEX *lex= stmt->lex; LEX *lex= stmt->lex;
SELECT_LEX *select_lex= &lex->select_lex;
int res= 0; int res= 0;
/* Skip first table, which is the table we are creating */ /* Skip first table, which is the table we are creating */
...@@ -1315,8 +1316,12 @@ static int mysql_test_create_table(Prepared_statement *stmt, ...@@ -1315,8 +1316,12 @@ static int mysql_test_create_table(Prepared_statement *stmt,
&create_table_local); &create_table_local);
if (!(res= create_table_precheck(thd, tables, create_table)) && if (!(res= create_table_precheck(thd, tables, create_table)) &&
lex->select_lex.item_list.elements) select_lex->item_list.elements)
{
select_lex->resolve_mode= SELECT_LEX::SELECT_MODE;
res= select_like_statement_test(stmt, tables); res= select_like_statement_test(stmt, tables);
select_lex->resolve_mode= SELECT_LEX::NOMATTER_MODE;
}
/* put tables back for PS rexecuting */ /* put tables back for PS rexecuting */
tables= lex->link_first_table_back(tables, create_table, tables= lex->link_first_table_back(tables, create_table,
...@@ -1400,7 +1405,11 @@ static int mysql_test_insert_select(Prepared_statement *stmt, ...@@ -1400,7 +1405,11 @@ static int mysql_test_insert_select(Prepared_statement *stmt,
(TABLE_LIST *)lex->select_lex.table_list.first; (TABLE_LIST *)lex->select_lex.table_list.first;
/* Skip first table, which is the table we are inserting in */ /* Skip first table, which is the table we are inserting in */
lex->select_lex.table_list.first= (byte*) first_local_table->next; lex->select_lex.table_list.first= (byte*) first_local_table->next;
lex->select_lex.resolve_mode= SELECT_LEX::NOMATTER_MODE; /*
insert/replace from SELECT give its SELECT_LEX for SELECT,
and item_list belong to SELECT
*/
lex->select_lex.resolve_mode= SELECT_LEX::SELECT_MODE;
res= select_like_statement_test(stmt, tables); res= select_like_statement_test(stmt, tables);
/* revert changes*/ /* revert changes*/
lex->select_lex.table_list.first= (byte*) first_local_table; lex->select_lex.table_list.first= (byte*) first_local_table;
......
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