mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Bug#29477: Not all fields of the target table were checked to have a default
value when inserting into a view. The mysql_prepare_insert function checks all fields of the target table that directly or indirectly (through a view) are specified in the INSERT statement to have a default value. This check can be skipped if the INSERT statement doesn't mention any insert fields. In case of a view this allows fields that aren't mentioned in the view to bypass the check. Now fields of the target table are always checked to have a default value when insert goes into a view.
This commit is contained in:
@ -3602,4 +3602,20 @@ DROP VIEW v1;
|
|||||||
DROP VIEW v2;
|
DROP VIEW v2;
|
||||||
DROP VIEW v3;
|
DROP VIEW v3;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Bug#29477: Not all fields of the target table were checked to have
|
||||||
|
# a default value when inserting into a view.
|
||||||
|
#
|
||||||
|
create table t1(f1 int, f2 int not null);
|
||||||
|
create view v1 as select f1 from t1;
|
||||||
|
insert into v1 values(1);
|
||||||
|
Warnings:
|
||||||
|
Warning 1423 Field of view 'test.v1' underlying table doesn't have a default value
|
||||||
|
set @old_mode=@@sql_mode;
|
||||||
|
set @@sql_mode=traditional;
|
||||||
|
insert into v1 values(1);
|
||||||
|
ERROR HY000: Field of view 'test.v1' underlying table doesn't have a default value
|
||||||
|
set @@sql_mode=@old_mode;
|
||||||
|
drop view v1;
|
||||||
|
drop table t1;
|
||||||
End of 5.0 tests.
|
End of 5.0 tests.
|
||||||
|
@ -3456,5 +3456,19 @@ DROP VIEW v2;
|
|||||||
DROP VIEW v3;
|
DROP VIEW v3;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#29477: Not all fields of the target table were checked to have
|
||||||
|
--echo # a default value when inserting into a view.
|
||||||
|
--echo #
|
||||||
|
create table t1(f1 int, f2 int not null);
|
||||||
|
create view v1 as select f1 from t1;
|
||||||
|
insert into v1 values(1);
|
||||||
|
set @old_mode=@@sql_mode;
|
||||||
|
set @@sql_mode=traditional;
|
||||||
|
--error ER_NO_DEFAULT_FOR_VIEW_FIELD
|
||||||
|
insert into v1 values(1);
|
||||||
|
set @@sql_mode=@old_mode;
|
||||||
|
drop view v1;
|
||||||
|
drop table t1;
|
||||||
--echo End of 5.0 tests.
|
--echo End of 5.0 tests.
|
||||||
|
|
||||||
|
@ -630,7 +630,8 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
|
|||||||
if (mysql_prepare_insert(thd, table_list, table, fields, values,
|
if (mysql_prepare_insert(thd, table_list, table, fields, values,
|
||||||
update_fields, update_values, duplic, &unused_conds,
|
update_fields, update_values, duplic, &unused_conds,
|
||||||
FALSE,
|
FALSE,
|
||||||
(fields.elements || !value_count),
|
(fields.elements || !value_count ||
|
||||||
|
table_list->view != 0),
|
||||||
!ignore && (thd->variables.sql_mode &
|
!ignore && (thd->variables.sql_mode &
|
||||||
(MODE_STRICT_TRANS_TABLES |
|
(MODE_STRICT_TRANS_TABLES |
|
||||||
MODE_STRICT_ALL_TABLES))))
|
MODE_STRICT_ALL_TABLES))))
|
||||||
|
Reference in New Issue
Block a user