Commit 2b69b4ae authored by unknown's avatar unknown
Browse files

Merge bk-internal:/home/bk/mysql-4.1

into mysql.com:/home/jimw/my/mysql-4.1-clean

parents 3a88e0e0 844277ec
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -140,10 +140,10 @@ a b c
5	6	130
TRUNCATE TABLE t1;
INSERT t1 VALUES (1,2,10), (3,4,20);
CREATE TABLE t2 (x INT, y INT, z INT, d INT);
CREATE TABLE t2 (a INT, b INT, c INT, d INT);
INSERT t2 VALUES (5,6,30,1), (7,4,40,1), (8,9,60,1);
INSERT t2 VALUES (2,1,11,2), (7,4,40,2);
INSERT t1 SELECT x,y,z FROM t2 WHERE d=1 ON DUPLICATE KEY UPDATE c=c+100;
INSERT t1 SELECT a,b,c FROM t2 WHERE d=1 ON DUPLICATE KEY UPDATE c=c+100;
SELECT * FROM t1;
a	b	c
1	2	10
@@ -157,7 +157,7 @@ a b c
3	4	120
5	0	30
8	9	60
INSERT t1 SELECT x,y,z FROM t2 WHERE d=2 ON DUPLICATE KEY UPDATE c=c+VALUES(a);
INSERT t1 SELECT a,b,c FROM t2 WHERE d=2 ON DUPLICATE KEY UPDATE c=c+VALUES(a);
SELECT *, VALUES(a) FROM t1;
a	b	c	VALUES(a)
1	2	10	NULL
+4 −3
Original line number Diff line number Diff line
@@ -68,14 +68,15 @@ INSERT t1 SELECT 1,9,70 FROM DUAL ON DUPLICATE KEY UPDATE c=c+100000, b=4;
SELECT * FROM t1;
TRUNCATE TABLE t1;
INSERT t1 VALUES (1,2,10), (3,4,20);
CREATE TABLE t2 (x INT, y INT, z INT, d INT);
CREATE TABLE t2 (a INT, b INT, c INT, d INT);
# column names deliberately clash with columns in t1 (Bug#8147)
INSERT t2 VALUES (5,6,30,1), (7,4,40,1), (8,9,60,1);
INSERT t2 VALUES (2,1,11,2), (7,4,40,2);
INSERT t1 SELECT x,y,z FROM t2 WHERE d=1 ON DUPLICATE KEY UPDATE c=c+100;
INSERT t1 SELECT a,b,c FROM t2 WHERE d=1 ON DUPLICATE KEY UPDATE c=c+100;
SELECT * FROM t1;
INSERT t1 SET a=5 ON DUPLICATE KEY UPDATE b=0;
SELECT * FROM t1;
INSERT t1 SELECT x,y,z FROM t2 WHERE d=2 ON DUPLICATE KEY UPDATE c=c+VALUES(a);
INSERT t1 SELECT a,b,c FROM t2 WHERE d=2 ON DUPLICATE KEY UPDATE c=c+VALUES(a);
SELECT *, VALUES(a) FROM t1;
DROP TABLE t1;
DROP TABLE t2;
+14 −8
Original line number Diff line number Diff line
@@ -2775,18 +2775,23 @@ mysql_execute_command(THD *thd)
      select_lex->options |= OPTION_BUFFER_RESULT;
    }

    if (!(res= open_and_lock_tables(thd, tables)) &&
        !(res= mysql_prepare_insert(thd, tables, first_local_table, 
				    tables->table, lex->field_list, 0,
    if ((res= open_and_lock_tables(thd, tables)))
      break;
      
    TABLE *table= tables->table;
    /* Skip first table, which is the table we are inserting in */
    tables= (TABLE_LIST *)
      lex->select_lex.table_list.first= (byte*) first_local_table->next;
    first_local_table->next= 0;
    
    if (!(res= mysql_prepare_insert(thd, tables, first_local_table, 
				    table, lex->field_list, 0,
				    lex->update_list, lex->value_list,
				    lex->duplicates)) &&
        (result= new select_insert(tables->table, &lex->field_list,
        (result= new select_insert(table, &lex->field_list,
				   &lex->update_list, &lex->value_list,
                                   lex->duplicates, lex->ignore)))
    {
      TABLE *table= tables->table;
      /* Skip first table, which is the table we are inserting in */
      lex->select_lex.table_list.first= (byte*) first_local_table->next;
      /*
        insert/replace from SELECT give its SELECT_LEX for SELECT,
        and item_list belong to SELECT
@@ -2794,7 +2799,6 @@ mysql_execute_command(THD *thd)
      lex->select_lex.resolve_mode= SELECT_LEX::SELECT_MODE;
      res= handle_select(thd, lex, result);
      /* revert changes for SP */
      lex->select_lex.table_list.first= (byte*) first_local_table;
      lex->select_lex.resolve_mode= SELECT_LEX::INSERT_MODE;
      delete result;
      table->insert_values= 0;
@@ -2803,6 +2807,8 @@ mysql_execute_command(THD *thd)
    }
    else
      res= -1;
    first_local_table->next= tables;
    lex->select_lex.table_list.first= (byte*) first_local_table;
    break;
  }
  case SQLCOM_TRUNCATE: