Loading mysql-test/r/view.result +15 −1 Original line number Diff line number Diff line Loading @@ -2735,4 +2735,18 @@ m e 4 a 1 b DROP VIEW v1; DROP TABLE IF EXISTS t1,t2; DROP TABLE t1,t2; CREATE TABLE t1 (a INT NOT NULL, b INT NULL DEFAULT NULL); CREATE VIEW v1 AS SELECT a, b FROM t1; INSERT INTO v1 (b) VALUES (2); Warnings: Warning 1423 Field of view 'test.v1' underlying table doesn't have a default value SET SQL_MODE = STRICT_ALL_TABLES; INSERT INTO v1 (b) VALUES (4); ERROR HY000: Field of view 'test.v1' underlying table doesn't have a default value SET SQL_MODE = ''; SELECT * FROM t1; a b 0 2 DROP VIEW v1; DROP TABLE t1; mysql-test/t/view.test +19 −1 Original line number Diff line number Diff line Loading @@ -2595,4 +2595,22 @@ CREATE TABLE t2 SELECT * FROM v1; SELECT * FROM t2; DROP VIEW v1; DROP TABLE IF EXISTS t1,t2; DROP TABLE t1,t2; # # Bug#16110: insert permitted into view col w/o default value # CREATE TABLE t1 (a INT NOT NULL, b INT NULL DEFAULT NULL); CREATE VIEW v1 AS SELECT a, b FROM t1; INSERT INTO v1 (b) VALUES (2); SET SQL_MODE = STRICT_ALL_TABLES; --error 1423 INSERT INTO v1 (b) VALUES (4); SET SQL_MODE = ''; SELECT * FROM t1; DROP VIEW v1; DROP TABLE t1; sql/sql_insert.cc +14 −1 Original line number Diff line number Diff line Loading @@ -674,6 +674,7 @@ static bool check_view_insertability(THD * thd, TABLE_LIST *view) uint used_fields_buff_size= (table->s->fields + 7) / 8; uchar *used_fields_buff= (uchar*)thd->alloc(used_fields_buff_size); MY_BITMAP used_fields; bool save_set_query_id= thd->set_query_id; DBUG_ENTER("check_key_in_view"); if (!used_fields_buff) Loading @@ -686,15 +687,26 @@ static bool check_view_insertability(THD * thd, TABLE_LIST *view) bitmap_clear_all(&used_fields); view->contain_auto_increment= 0; /* we must not set query_id for fields as they're not really used in this context */ thd->set_query_id= 0; /* check simplicity and prepare unique test of view */ for (trans= trans_start; trans != trans_end; trans++) { if (!trans->item->fixed && trans->item->fix_fields(thd, &trans->item)) return TRUE; { thd->set_query_id= save_set_query_id; DBUG_RETURN(TRUE); } Item_field *field; /* simple SELECT list entry (field without expression) */ if (!(field= trans->item->filed_for_view_update())) { thd->set_query_id= save_set_query_id; DBUG_RETURN(TRUE); } if (field->field->unireg_check == Field::NEXT_NUMBER) view->contain_auto_increment= 1; /* prepare unique test */ Loading @@ -704,6 +716,7 @@ static bool check_view_insertability(THD * thd, TABLE_LIST *view) */ trans->item= field; } thd->set_query_id= save_set_query_id; /* unique test */ for (trans= trans_start; trans != trans_end; trans++) { Loading Loading
mysql-test/r/view.result +15 −1 Original line number Diff line number Diff line Loading @@ -2735,4 +2735,18 @@ m e 4 a 1 b DROP VIEW v1; DROP TABLE IF EXISTS t1,t2; DROP TABLE t1,t2; CREATE TABLE t1 (a INT NOT NULL, b INT NULL DEFAULT NULL); CREATE VIEW v1 AS SELECT a, b FROM t1; INSERT INTO v1 (b) VALUES (2); Warnings: Warning 1423 Field of view 'test.v1' underlying table doesn't have a default value SET SQL_MODE = STRICT_ALL_TABLES; INSERT INTO v1 (b) VALUES (4); ERROR HY000: Field of view 'test.v1' underlying table doesn't have a default value SET SQL_MODE = ''; SELECT * FROM t1; a b 0 2 DROP VIEW v1; DROP TABLE t1;
mysql-test/t/view.test +19 −1 Original line number Diff line number Diff line Loading @@ -2595,4 +2595,22 @@ CREATE TABLE t2 SELECT * FROM v1; SELECT * FROM t2; DROP VIEW v1; DROP TABLE IF EXISTS t1,t2; DROP TABLE t1,t2; # # Bug#16110: insert permitted into view col w/o default value # CREATE TABLE t1 (a INT NOT NULL, b INT NULL DEFAULT NULL); CREATE VIEW v1 AS SELECT a, b FROM t1; INSERT INTO v1 (b) VALUES (2); SET SQL_MODE = STRICT_ALL_TABLES; --error 1423 INSERT INTO v1 (b) VALUES (4); SET SQL_MODE = ''; SELECT * FROM t1; DROP VIEW v1; DROP TABLE t1;
sql/sql_insert.cc +14 −1 Original line number Diff line number Diff line Loading @@ -674,6 +674,7 @@ static bool check_view_insertability(THD * thd, TABLE_LIST *view) uint used_fields_buff_size= (table->s->fields + 7) / 8; uchar *used_fields_buff= (uchar*)thd->alloc(used_fields_buff_size); MY_BITMAP used_fields; bool save_set_query_id= thd->set_query_id; DBUG_ENTER("check_key_in_view"); if (!used_fields_buff) Loading @@ -686,15 +687,26 @@ static bool check_view_insertability(THD * thd, TABLE_LIST *view) bitmap_clear_all(&used_fields); view->contain_auto_increment= 0; /* we must not set query_id for fields as they're not really used in this context */ thd->set_query_id= 0; /* check simplicity and prepare unique test of view */ for (trans= trans_start; trans != trans_end; trans++) { if (!trans->item->fixed && trans->item->fix_fields(thd, &trans->item)) return TRUE; { thd->set_query_id= save_set_query_id; DBUG_RETURN(TRUE); } Item_field *field; /* simple SELECT list entry (field without expression) */ if (!(field= trans->item->filed_for_view_update())) { thd->set_query_id= save_set_query_id; DBUG_RETURN(TRUE); } if (field->field->unireg_check == Field::NEXT_NUMBER) view->contain_auto_increment= 1; /* prepare unique test */ Loading @@ -704,6 +716,7 @@ static bool check_view_insertability(THD * thd, TABLE_LIST *view) */ trans->item= field; } thd->set_query_id= save_set_query_id; /* unique test */ for (trans= trans_start; trans != trans_end; trans++) { Loading