summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvva@eagle.mysql.r18.ru <>2003-12-16 17:55:34 -0400
committervva@eagle.mysql.r18.ru <>2003-12-16 17:55:34 -0400
commit59004f01f9b1f285e57545afca715e61799840a6 (patch)
tree73bc93a2d86557f1da5e7cdd5421092a2a8c0f4a
parent2e04da08736a067a8f9d89c13bef3630a8bba166 (diff)
downloadmariadb-git-59004f01f9b1f285e57545afca715e61799840a6.tar.gz
fixed restoring of thd->count_cuted_fields in store_val_in_field
(fixed #bug 2012)
-rw-r--r--mysql-test/r/insert_select.result12
-rw-r--r--mysql-test/t/insert_select.test31
-rw-r--r--sql/sql_select.cc8
3 files changed, 50 insertions, 1 deletions
diff --git a/mysql-test/r/insert_select.result b/mysql-test/r/insert_select.result
index c754085ccb3..2435e28d7fe 100644
--- a/mysql-test/r/insert_select.result
+++ b/mysql-test/r/insert_select.result
@@ -11,3 +11,15 @@ payoutID
19
20
22
+Month Type Field Count
+2003-09-01 1 1 100
+2003-09-01 1 2 100
+2003-09-01 2 1 100
+2003-09-01 2 2 100
+2003-09-01 3 1 100
+NULL Field Count
+NULL 1 100
+NULL 2 100
+No Field Count
+0 1 100
+0 2 100
diff --git a/mysql-test/t/insert_select.test b/mysql-test/t/insert_select.test
index 17ecb2d5a1f..625f4755a79 100644
--- a/mysql-test/t/insert_select.test
+++ b/mysql-test/t/insert_select.test
@@ -10,3 +10,34 @@ insert into t2 (payoutID) SELECT DISTINCT payoutID FROM t1;
insert into t2 (payoutID) SELECT payoutID+10 FROM t1;
select * from t2;
drop table t1,t2;
+
+#
+# Another problem from Bug #2012
+#
+
+CREATE TABLE t1(
+ Month date NOT NULL,
+ Type tinyint(3) unsigned NOT NULL auto_increment,
+ Field int(10) unsigned NOT NULL,
+ Count int(10) unsigned NOT NULL,
+ UNIQUE KEY Month (Month,Type,Field)
+);
+
+insert into t1 Values
+(20030901, 1, 1, 100),
+(20030901, 1, 2, 100),
+(20030901, 2, 1, 100),
+(20030901, 2, 2, 100),
+(20030901, 3, 1, 100);
+
+select * from t1;
+
+Select null, Field, Count From t1 Where Month=20030901 and Type=2;
+
+create table t2(No int not null, Field int not null, Count int not null);
+
+insert into t2 Select null, Field, Count From t1 Where Month=20030901 and Type=2;
+
+select * from t2;
+
+drop table t1, t2;
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index 1230dffcaa9..26b1966ffed 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -2184,9 +2184,15 @@ store_val_in_field(Field *field,Item *item)
{
THD *thd=current_thd;
ulong cuted_fields=thd->cuted_fields;
+ /*
+ we should restore old value of count_cuted_fields because
+ store_val_in_field can be called from mysql_insert
+ with select_insert, which make count_cuted_fields= 1
+ */
+ bool old_count_cuted_fields= thd->count_cuted_fields;
thd->count_cuted_fields=1;
item->save_in_field(field);
- thd->count_cuted_fields=0;
+ thd->count_cuted_fields= old_count_cuted_fields;
return cuted_fields != thd->cuted_fields;
}