mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 21:12:26 +01:00
59b9d50c8a
INSERT .. SELECT .. ON DUPLICATE KEY UPDATE col=DEFAULT In order to get correct values from update fields that belongs to the SELECT part in the INSERT .. SELECT .. ON DUPLICATE KEY UPDATE statement, the server adds referenced fields to the select list. Part of the code that does this transformation is shared between implementations of the DEFAULT(col) function and the DEFAULT keyword (in the col=DEFAULT expression), and an implementation of the DEFAULT keyword is incomplete. mysql-test/r/default.result: Added test case for bug #39002. mysql-test/t/default.test: Added test case for bug #39002. sql/item.cc: The Item_default_value::transform() function has been modified to take into account the fact that the DEFAULT keyword has no arguments unlike the DEFAULT(col) function that always has an argument.
223 lines
8.1 KiB
Text
223 lines
8.1 KiB
Text
drop table if exists t1,t2,t3,t4,t5,t6;
|
|
drop database if exists mysqltest;
|
|
CREATE TABLE t1 (a varchar(30) binary NOT NULL DEFAULT ' ',
|
|
b varchar(1) binary NOT NULL DEFAULT ' ',
|
|
c varchar(4) binary NOT NULL DEFAULT '0000',
|
|
d tinyblob NULL,
|
|
e tinyblob NULL,
|
|
f tinyblob NULL,
|
|
g tinyblob NULL,
|
|
h tinyblob NULL,
|
|
i tinyblob NULL,
|
|
j tinyblob NULL,
|
|
k tinyblob NULL,
|
|
l tinyblob NULL,
|
|
m tinyblob NULL,
|
|
n tinyblob NULL,
|
|
o tinyblob NULL,
|
|
p tinyblob NULL,
|
|
q varchar(30) binary NOT NULL DEFAULT ' ',
|
|
r varchar(30) binary NOT NULL DEFAULT ' ',
|
|
s tinyblob NULL,
|
|
t varchar(4) binary NOT NULL DEFAULT ' ',
|
|
u varchar(1) binary NOT NULL DEFAULT ' ',
|
|
v varchar(30) binary NOT NULL DEFAULT ' ',
|
|
w varchar(30) binary NOT NULL DEFAULT ' ',
|
|
x tinyblob NULL,
|
|
y varchar(5) binary NOT NULL DEFAULT ' ',
|
|
z varchar(20) binary NOT NULL DEFAULT ' ',
|
|
a1 varchar(30) binary NOT NULL DEFAULT ' ',
|
|
b1 tinyblob NULL)
|
|
ENGINE=InnoDB DEFAULT CHARACTER SET = latin1 COLLATE latin1_bin;
|
|
INSERT into t1 (b) values ('1');
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
SELECT * from t1;
|
|
a b c d e f g h i j k l m n o p q r s t u v w x y z a1 b1
|
|
1 0000 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
|
CREATE TABLE t2 (a varchar(30) binary NOT NULL DEFAULT ' ',
|
|
b varchar(1) binary NOT NULL DEFAULT ' ',
|
|
c varchar(4) binary NOT NULL DEFAULT '0000',
|
|
d tinyblob NULL,
|
|
e tinyblob NULL,
|
|
f tinyblob NULL,
|
|
g tinyblob NULL,
|
|
h tinyblob NULL,
|
|
i tinyblob NULL,
|
|
j tinyblob NULL,
|
|
k tinyblob NULL,
|
|
l tinyblob NULL,
|
|
m tinyblob NULL,
|
|
n tinyblob NULL,
|
|
o tinyblob NULL,
|
|
p tinyblob NULL,
|
|
q varchar(30) binary NOT NULL DEFAULT ' ',
|
|
r varchar(30) binary NOT NULL DEFAULT ' ',
|
|
s tinyblob NULL,
|
|
t varchar(4) binary NOT NULL DEFAULT ' ',
|
|
u varchar(1) binary NOT NULL DEFAULT ' ',
|
|
v varchar(30) binary NOT NULL DEFAULT ' ',
|
|
w varchar(30) binary NOT NULL DEFAULT ' ',
|
|
x tinyblob NULL,
|
|
y varchar(5) binary NOT NULL DEFAULT ' ',
|
|
z varchar(20) binary NOT NULL DEFAULT ' ',
|
|
a1 varchar(30) binary NOT NULL DEFAULT ' ',
|
|
b1 tinyblob NULL)
|
|
ENGINE=MyISAM DEFAULT CHARACTER SET = latin1 COLLATE latin1_bin;
|
|
SHOW CREATE TABLE t2;
|
|
Table Create Table
|
|
t2 CREATE TABLE `t2` (
|
|
`a` varchar(30) collate latin1_bin NOT NULL default ' ',
|
|
`b` varchar(1) collate latin1_bin NOT NULL default ' ',
|
|
`c` varchar(4) collate latin1_bin NOT NULL default '0000',
|
|
`d` tinyblob,
|
|
`e` tinyblob,
|
|
`f` tinyblob,
|
|
`g` tinyblob,
|
|
`h` tinyblob,
|
|
`i` tinyblob,
|
|
`j` tinyblob,
|
|
`k` tinyblob,
|
|
`l` tinyblob,
|
|
`m` tinyblob,
|
|
`n` tinyblob,
|
|
`o` tinyblob,
|
|
`p` tinyblob,
|
|
`q` varchar(30) collate latin1_bin NOT NULL default ' ',
|
|
`r` varchar(30) collate latin1_bin NOT NULL default ' ',
|
|
`s` tinyblob,
|
|
`t` varchar(4) collate latin1_bin NOT NULL default ' ',
|
|
`u` varchar(1) collate latin1_bin NOT NULL default ' ',
|
|
`v` varchar(30) collate latin1_bin NOT NULL default ' ',
|
|
`w` varchar(30) collate latin1_bin NOT NULL default ' ',
|
|
`x` tinyblob,
|
|
`y` varchar(5) collate latin1_bin NOT NULL default ' ',
|
|
`z` varchar(20) collate latin1_bin NOT NULL default ' ',
|
|
`a1` varchar(30) collate latin1_bin NOT NULL default ' ',
|
|
`b1` tinyblob
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_bin
|
|
INSERT into t2 (b) values ('1');
|
|
SHOW WARNINGS;
|
|
Level Code Message
|
|
SELECT * from t2;
|
|
a b c d e f g h i j k l m n o p q r s t u v w x y z a1 b1
|
|
1 0000 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
|
drop table t1;
|
|
drop table t2;
|
|
create table bug20691 (i int, d datetime NOT NULL, dn datetime not null default '0000-00-00 00:00:00');
|
|
insert into bug20691 values (1, DEFAULT, DEFAULT), (1, '1975-07-10 07:10:03', '1978-01-13 14:08:51'), (1, DEFAULT, DEFAULT);
|
|
Warnings:
|
|
Warning 1364 Field 'd' doesn't have a default value
|
|
Warning 1364 Field 'd' doesn't have a default value
|
|
insert into bug20691 (i) values (2);
|
|
Warnings:
|
|
Warning 1364 Field 'd' doesn't have a default value
|
|
desc bug20691;
|
|
Field Type Null Key Default Extra
|
|
i int(11) YES NULL
|
|
d datetime NO NULL
|
|
dn datetime NO 0000-00-00 00:00:00
|
|
insert into bug20691 values (3, DEFAULT, DEFAULT), (3, '1975-07-10 07:10:03', '1978-01-13 14:08:51'), (3, DEFAULT, DEFAULT);
|
|
Warnings:
|
|
Warning 1364 Field 'd' doesn't have a default value
|
|
Warning 1364 Field 'd' doesn't have a default value
|
|
insert into bug20691 (i) values (4);
|
|
Warnings:
|
|
Warning 1364 Field 'd' doesn't have a default value
|
|
insert into bug20691 values (5, DEFAULT, DEFAULT), (5, '1975-07-10 07:10:03', '1978-01-13 14:08:51'), (5, DEFAULT, DEFAULT);
|
|
Warnings:
|
|
Warning 1364 Field 'd' doesn't have a default value
|
|
Warning 1364 Field 'd' doesn't have a default value
|
|
SET sql_mode = 'ALLOW_INVALID_DATES';
|
|
insert into bug20691 values (6, DEFAULT, DEFAULT), (6, '1975-07-10 07:10:03', '1978-01-13 14:08:51'), (6, DEFAULT, DEFAULT);
|
|
Warnings:
|
|
Warning 1364 Field 'd' doesn't have a default value
|
|
Warning 1364 Field 'd' doesn't have a default value
|
|
SET sql_mode = 'STRICT_ALL_TABLES';
|
|
insert into bug20691 values (7, DEFAULT, DEFAULT), (7, '1975-07-10 07:10:03', '1978-01-13 14:08:51'), (7, DEFAULT, DEFAULT);
|
|
ERROR HY000: Field 'd' doesn't have a default value
|
|
select * from bug20691 order by i asc;
|
|
i d dn
|
|
1 0000-00-00 00:00:00 0000-00-00 00:00:00
|
|
1 1975-07-10 07:10:03 1978-01-13 14:08:51
|
|
1 0000-00-00 00:00:00 0000-00-00 00:00:00
|
|
2 0000-00-00 00:00:00 0000-00-00 00:00:00
|
|
3 0000-00-00 00:00:00 0000-00-00 00:00:00
|
|
3 1975-07-10 07:10:03 1978-01-13 14:08:51
|
|
3 0000-00-00 00:00:00 0000-00-00 00:00:00
|
|
4 0000-00-00 00:00:00 0000-00-00 00:00:00
|
|
5 0000-00-00 00:00:00 0000-00-00 00:00:00
|
|
5 1975-07-10 07:10:03 1978-01-13 14:08:51
|
|
5 0000-00-00 00:00:00 0000-00-00 00:00:00
|
|
6 0000-00-00 00:00:00 0000-00-00 00:00:00
|
|
6 1975-07-10 07:10:03 1978-01-13 14:08:51
|
|
6 0000-00-00 00:00:00 0000-00-00 00:00:00
|
|
drop table bug20691;
|
|
SET sql_mode = '';
|
|
create table bug20691 (
|
|
a set('one', 'two', 'three') not null,
|
|
b enum('small', 'medium', 'large', 'enormous', 'ellisonego') not null,
|
|
c time not null,
|
|
d date not null,
|
|
e int not null,
|
|
f long not null,
|
|
g blob not null,
|
|
h datetime not null,
|
|
i decimal not null,
|
|
x int);
|
|
insert into bug20691 values (2, 3, 5, '0007-01-01', 11, 13, 17, '0019-01-01 00:00:00', 23, 1);
|
|
insert into bug20691 (x) values (2);
|
|
Warnings:
|
|
Warning 1364 Field 'a' doesn't have a default value
|
|
Warning 1364 Field 'c' doesn't have a default value
|
|
Warning 1364 Field 'd' doesn't have a default value
|
|
Warning 1364 Field 'e' doesn't have a default value
|
|
Warning 1364 Field 'f' doesn't have a default value
|
|
Warning 1364 Field 'g' doesn't have a default value
|
|
Warning 1364 Field 'h' doesn't have a default value
|
|
Warning 1364 Field 'i' doesn't have a default value
|
|
insert into bug20691 values (2, 3, 5, '0007-01-01', 11, 13, 17, '0019-01-01 00:00:00', 23, 3);
|
|
insert into bug20691 values (DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, 4);
|
|
Warnings:
|
|
Warning 1364 Field 'a' doesn't have a default value
|
|
Warning 1364 Field 'b' doesn't have a default value
|
|
Warning 1364 Field 'c' doesn't have a default value
|
|
Warning 1364 Field 'd' doesn't have a default value
|
|
Warning 1364 Field 'e' doesn't have a default value
|
|
Warning 1364 Field 'f' doesn't have a default value
|
|
Warning 1364 Field 'g' doesn't have a default value
|
|
Warning 1364 Field 'h' doesn't have a default value
|
|
Warning 1364 Field 'i' doesn't have a default value
|
|
select * from bug20691 order by x asc;
|
|
a b c d e f g h i x
|
|
two large 00:00:05 0007-01-01 11 13 17 0019-01-01 00:00:00 23 1
|
|
small 00:00:00 0000-00-00 0 0000-00-00 00:00:00 0 2
|
|
two large 00:00:05 0007-01-01 11 13 17 0019-01-01 00:00:00 23 3
|
|
00:00:00 0000-00-00 0 0000-00-00 00:00:00 0 4
|
|
drop table bug20691;
|
|
create table t1 (id int not null);
|
|
insert into t1 values(default);
|
|
Warnings:
|
|
Warning 1364 Field 'id' doesn't have a default value
|
|
create view v1 (c) as select id from t1;
|
|
insert into t1 values(default);
|
|
Warnings:
|
|
Warning 1364 Field 'id' doesn't have a default value
|
|
drop view v1;
|
|
drop table t1;
|
|
create table t1 (a int unique);
|
|
create table t2 (b int default 10);
|
|
insert into t1 (a) values (1);
|
|
insert into t2 (b) values (1);
|
|
insert into t1 (a) select b from t2 on duplicate key update a=default;
|
|
select * from t1;
|
|
a
|
|
NULL
|
|
insert into t1 (a) values (1);
|
|
insert into t1 (a) select b from t2 on duplicate key update a=default(b);
|
|
select * from t1;
|
|
a
|
|
NULL
|
|
10
|
|
drop table t1, t2;
|
|
End of 5.0 tests.
|