提交 18f68c33 authored 作者: Evgenij Ryazanov's avatar Evgenij Ryazanov

Move MERGE tests into merge.sql

上级 f2dca785
......@@ -128,8 +128,8 @@ public class TestScript extends TestDb {
"dropDomain", "dropIndex", "dropSchema", "truncateTable" }) {
testScript("ddl/" + s + ".sql");
}
for (String s : new String[] { "error_reporting", "insertIgnore", "replace",
"mergeUsing", "script", "with" }) {
for (String s : new String[] { "error_reporting", "insertIgnore", "merge", "mergeUsing", "replace",
"script", "with" }) {
testScript("dml/" + s + ".sql");
}
for (String s : new String[] { "avg", "bit-and", "bit-or", "count",
......
-- Copyright 2004-2018 H2 Group. Multiple-Licensed under the MPL 2.0,
-- and the EPL 1.0 (http://h2database.com/html/license.html).
-- Initial Developer: H2 Group
--
create table test(a int primary key, b int references(a));
> ok
merge into test values(1, 2);
> exception REFERENTIAL_INTEGRITY_VIOLATED_PARENT_MISSING_1
drop table test;
> ok
CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR(255));
> ok
EXPLAIN SELECT * FROM TEST WHERE ID=1;
>> SELECT TEST.ID, TEST.NAME FROM PUBLIC.TEST /* PUBLIC.PRIMARY_KEY_2: ID = 1 */ WHERE ID = 1
EXPLAIN MERGE INTO TEST VALUES(1, 'Hello');
>> MERGE INTO PUBLIC.TEST(ID, NAME) KEY(ID) VALUES (1, 'Hello')
MERGE INTO TEST VALUES(1, 'Hello');
> update count: 1
MERGE INTO TEST VALUES(1, 'Hi');
> update count: 1
MERGE INTO TEST VALUES(2, 'World');
> update count: 1
MERGE INTO TEST VALUES(2, 'World!');
> update count: 1
MERGE INTO TEST(ID, NAME) VALUES(3, 'How are you');
> update count: 1
EXPLAIN MERGE INTO TEST(ID, NAME) VALUES(3, 'How are you');
>> MERGE INTO PUBLIC.TEST(ID, NAME) KEY(ID) VALUES (3, 'How are you')
MERGE INTO TEST(ID, NAME) KEY(ID) VALUES(3, 'How do you do');
> update count: 1
EXPLAIN MERGE INTO TEST(ID, NAME) KEY(ID) VALUES(3, 'How do you do');
>> MERGE INTO PUBLIC.TEST(ID, NAME) KEY(ID) VALUES (3, 'How do you do')
MERGE INTO TEST(ID, NAME) KEY(NAME) VALUES(3, 'Fine');
> exception LOCK_TIMEOUT_1
MERGE INTO TEST(ID, NAME) KEY(NAME) VALUES(4, 'Fine!');
> update count: 1
MERGE INTO TEST(ID, NAME) KEY(NAME) VALUES(4, 'Fine! And you');
> exception LOCK_TIMEOUT_1
MERGE INTO TEST(ID, NAME) KEY(NAME, ID) VALUES(5, 'I''m ok');
> update count: 1
MERGE INTO TEST(ID, NAME) KEY(NAME, ID) VALUES(5, 'Oh, fine');
> exception DUPLICATE_KEY_1
MERGE INTO TEST(ID, NAME) VALUES(6, 'Oh, fine.');
> update count: 1
SELECT * FROM TEST;
> ID NAME
> -- -------------
> 1 Hi
> 2 World!
> 3 How do you do
> 4 Fine!
> 5 I'm ok
> 6 Oh, fine.
> rows: 6
MERGE INTO TEST SELECT ID+4, NAME FROM TEST;
> update count: 6
SELECT * FROM TEST;
> ID NAME
> -- -------------
> 1 Hi
> 10 Oh, fine.
> 2 World!
> 3 How do you do
> 4 Fine!
> 5 Hi
> 6 World!
> 7 How do you do
> 8 Fine!
> 9 I'm ok
> rows: 10
DROP TABLE TEST;
> ok
......@@ -598,15 +598,6 @@ select * from (select null as x) where x=1;
> -
> rows: 0
create table test(a int primary key, b int references(a));
> ok
merge into test values(1, 2);
> exception REFERENTIAL_INTEGRITY_VIOLATED_PARENT_MISSING_1
drop table test;
> ok
create table test(id int primary key, d int);
> ok
......@@ -4287,90 +4278,6 @@ SELECT * FROM test WHERE three LIKE '2%';
DROP TABLE TEST;
> ok
--- merge (upsert) ---------------------------------------------------------------------------------------------
CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR(255));
> ok
EXPLAIN SELECT * FROM TEST WHERE ID=1;
>> SELECT TEST.ID, TEST.NAME FROM PUBLIC.TEST /* PUBLIC.PRIMARY_KEY_2: ID = 1 */ WHERE ID = 1
EXPLAIN MERGE INTO TEST VALUES(1, 'Hello');
>> MERGE INTO PUBLIC.TEST(ID, NAME) KEY(ID) VALUES (1, 'Hello')
MERGE INTO TEST VALUES(1, 'Hello');
> update count: 1
MERGE INTO TEST VALUES(1, 'Hi');
> update count: 1
MERGE INTO TEST VALUES(2, 'World');
> update count: 1
MERGE INTO TEST VALUES(2, 'World!');
> update count: 1
MERGE INTO TEST(ID, NAME) VALUES(3, 'How are you');
> update count: 1
EXPLAIN MERGE INTO TEST(ID, NAME) VALUES(3, 'How are you');
>> MERGE INTO PUBLIC.TEST(ID, NAME) KEY(ID) VALUES (3, 'How are you')
MERGE INTO TEST(ID, NAME) KEY(ID) VALUES(3, 'How do you do');
> update count: 1
EXPLAIN MERGE INTO TEST(ID, NAME) KEY(ID) VALUES(3, 'How do you do');
>> MERGE INTO PUBLIC.TEST(ID, NAME) KEY(ID) VALUES (3, 'How do you do')
MERGE INTO TEST(ID, NAME) KEY(NAME) VALUES(3, 'Fine');
> exception LOCK_TIMEOUT_1
MERGE INTO TEST(ID, NAME) KEY(NAME) VALUES(4, 'Fine!');
> update count: 1
MERGE INTO TEST(ID, NAME) KEY(NAME) VALUES(4, 'Fine! And you');
> exception LOCK_TIMEOUT_1
MERGE INTO TEST(ID, NAME) KEY(NAME, ID) VALUES(5, 'I''m ok');
> update count: 1
MERGE INTO TEST(ID, NAME) KEY(NAME, ID) VALUES(5, 'Oh, fine');
> exception DUPLICATE_KEY_1
MERGE INTO TEST(ID, NAME) VALUES(6, 'Oh, fine.');
> update count: 1
SELECT * FROM TEST;
> ID NAME
> -- -------------
> 1 Hi
> 2 World!
> 3 How do you do
> 4 Fine!
> 5 I'm ok
> 6 Oh, fine.
> rows: 6
MERGE INTO TEST SELECT ID+4, NAME FROM TEST;
> update count: 6
SELECT * FROM TEST;
> ID NAME
> -- -------------
> 1 Hi
> 10 Oh, fine.
> 2 World!
> 3 How do you do
> 4 Fine!
> 5 Hi
> 6 World!
> 7 How do you do
> 8 Fine!
> 9 I'm ok
> rows: 10
DROP TABLE TEST;
> ok
CREATE TABLE PARENT(ID INT, NAME VARCHAR);
> ok
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论