should be it
This commit is contained in:
104
external/duckdb/test/sql/copy_database/copy_database_different_types.test
vendored
Normal file
104
external/duckdb/test/sql/copy_database/copy_database_different_types.test
vendored
Normal file
@@ -0,0 +1,104 @@
|
||||
# name: test/sql/copy_database/copy_database_different_types.test
|
||||
# description: Test attach mixed with the COPY statement
|
||||
# group: [copy_database]
|
||||
|
||||
statement ok
|
||||
ATTACH '__TEST_DIR__/copy_database_different_types.db' AS db1
|
||||
|
||||
statement ok
|
||||
USE db1
|
||||
|
||||
statement ok
|
||||
CREATE TABLE test(a INTEGER, b INTEGER, c VARCHAR(10));
|
||||
|
||||
statement ok
|
||||
INSERT INTO test VALUES (42, 88, 'hello');
|
||||
|
||||
# FIXME - (unique) indexes aren't copied currently
|
||||
mode skip
|
||||
|
||||
statement ok
|
||||
CREATE UNIQUE INDEX i_unique ON test(a);
|
||||
|
||||
mode unskip
|
||||
|
||||
statement ok
|
||||
CREATE VIEW v1 AS FROM test;
|
||||
|
||||
statement ok
|
||||
CREATE TYPE mood AS ENUM('ok', 'sad', 'happy');
|
||||
|
||||
statement ok
|
||||
CREATE TABLE enums(i mood)
|
||||
|
||||
statement ok
|
||||
INSERT INTO enums VALUES ('ok'), ('sad'), (NULL)
|
||||
|
||||
statement ok
|
||||
select * from db1.enums
|
||||
|
||||
statement ok
|
||||
CREATE SEQUENCE seq;
|
||||
|
||||
query I
|
||||
SELECT nextval('seq')
|
||||
----
|
||||
1
|
||||
|
||||
statement ok
|
||||
CREATE FUNCTION my_add(a, b) AS a + b
|
||||
|
||||
statement ok
|
||||
ATTACH '__TEST_DIR__/other_copy_database_different_types.db' AS db2;
|
||||
|
||||
statement ok
|
||||
COPY FROM DATABASE db1 TO db2
|
||||
|
||||
statement ok
|
||||
USE db2
|
||||
|
||||
query III
|
||||
SELECT * FROM test;
|
||||
----
|
||||
42 88 hello
|
||||
|
||||
query I
|
||||
SELECT * FROM enums;
|
||||
----
|
||||
ok
|
||||
sad
|
||||
NULL
|
||||
|
||||
query III
|
||||
SELECT * FROM v1;
|
||||
----
|
||||
42 88 hello
|
||||
|
||||
# FIXME - unique indexes aren't copied currently
|
||||
mode skip
|
||||
|
||||
statement error
|
||||
INSERT INTO test VALUES (42, 88, 'hello');
|
||||
----
|
||||
xx
|
||||
|
||||
mode unskip
|
||||
|
||||
statement ok
|
||||
INSERT INTO test VALUES (43, 88, 'hello');
|
||||
|
||||
query III
|
||||
SELECT * FROM v1;
|
||||
----
|
||||
42 88 hello
|
||||
43 88 hello
|
||||
|
||||
query I
|
||||
SELECT nextval('seq')
|
||||
----
|
||||
2
|
||||
|
||||
query I
|
||||
SELECT my_add(1, 2)
|
||||
----
|
||||
3
|
||||
51
external/duckdb/test/sql/copy_database/copy_database_errors.test
vendored
Normal file
51
external/duckdb/test/sql/copy_database/copy_database_errors.test
vendored
Normal file
@@ -0,0 +1,51 @@
|
||||
# name: test/sql/copy_database/copy_database_errors.test
|
||||
# description: Test COPY DATABASE errors
|
||||
# group: [copy_database]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
statement ok
|
||||
ATTACH DATABASE ':memory:' AS db1;
|
||||
|
||||
statement ok
|
||||
ATTACH DATABASE ':memory:' AS db2;
|
||||
|
||||
# copying an empty database should work
|
||||
statement ok
|
||||
COPY FROM DATABASE db1 TO db2
|
||||
|
||||
statement ok
|
||||
CREATE TABLE db1.test(a INTEGER, b INTEGER, c VARCHAR);
|
||||
|
||||
statement ok
|
||||
INSERT INTO db1.test VALUES (42, 84, 'hello')
|
||||
|
||||
# we cannot copy from the same database to the same database
|
||||
statement error
|
||||
COPY FROM DATABASE db1 TO db1
|
||||
----
|
||||
FROM and TO databases are the same
|
||||
|
||||
# read-only test
|
||||
statement ok
|
||||
ATTACH DATABASE '__TEST_DIR__/read_only.db' AS read_only
|
||||
|
||||
statement ok
|
||||
CREATE TABLE read_only.t(i INT);
|
||||
|
||||
statement ok
|
||||
DETACH read_only
|
||||
|
||||
statement ok
|
||||
ATTACH DATABASE '__TEST_DIR__/read_only.db' AS read_only (READ_ONLY)
|
||||
|
||||
# we cannot copy TO a read-only database
|
||||
statement error
|
||||
COPY FROM DATABASE db1 TO read_only
|
||||
----
|
||||
attached in read-only mode
|
||||
|
||||
# we can copy FROM a read-only database
|
||||
statement ok
|
||||
COPY FROM DATABASE read_only TO db1
|
||||
71
external/duckdb/test/sql/copy_database/copy_database_fk.test
vendored
Normal file
71
external/duckdb/test/sql/copy_database/copy_database_fk.test
vendored
Normal file
@@ -0,0 +1,71 @@
|
||||
# name: test/sql/copy_database/copy_database_fk.test
|
||||
# description: Test COPY DATABASE with foreign key constraint
|
||||
# group: [copy_database]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
# FIXME - this is not working right now - we need to correctly take dependencies into account for COPY FROM DATABASE
|
||||
mode skip
|
||||
|
||||
statement ok
|
||||
CREATE TABLE pk_integers(i INTEGER PRIMARY KEY)
|
||||
|
||||
statement ok
|
||||
CREATE TABLE fk_integers(j INTEGER, FOREIGN KEY (j) REFERENCES pk_integers(i))
|
||||
|
||||
statement ok
|
||||
INSERT INTO pk_integers VALUES (1), (2), (3)
|
||||
|
||||
statement ok
|
||||
INSERT INTO fk_integers VALUES (1), (2)
|
||||
|
||||
# now export the db
|
||||
statement ok
|
||||
ATTACH ':memory:' AS db1
|
||||
|
||||
statement ok
|
||||
COPY FROM DATABASE memory TO db1
|
||||
|
||||
statement ok
|
||||
USE db1
|
||||
|
||||
# check foreign key constraint
|
||||
statement error
|
||||
INSERT INTO fk_integers VALUES (4)
|
||||
----
|
||||
|
||||
statement ok
|
||||
INSERT INTO fk_integers VALUES (3)
|
||||
|
||||
statement error
|
||||
DELETE FROM pk_integers WHERE i=3
|
||||
----
|
||||
|
||||
statement ok
|
||||
DELETE FROM fk_integers WHERE j=3
|
||||
|
||||
statement ok
|
||||
DELETE FROM pk_integers WHERE i=3
|
||||
|
||||
statement error
|
||||
UPDATE pk_integers SET i=5 WHERE i=2
|
||||
----
|
||||
|
||||
statement error
|
||||
UPDATE fk_integers SET i=4 WHERE j=2
|
||||
----
|
||||
|
||||
statement error
|
||||
UPDATE fk_integers SET i=4 WHERE j=2
|
||||
----
|
||||
|
||||
statement error
|
||||
DROP TABLE pk_integers;
|
||||
----
|
||||
|
||||
statement ok
|
||||
DROP TABLE fk_integers;
|
||||
|
||||
statement ok
|
||||
DROP TABLE pk_integers;
|
||||
27
external/duckdb/test/sql/copy_database/copy_database_gen_col.test
vendored
Normal file
27
external/duckdb/test/sql/copy_database/copy_database_gen_col.test
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
# name: test/sql/copy_database/copy_database_gen_col.test
|
||||
# group: [copy_database]
|
||||
|
||||
load __TEST_DIR__/mydb.db
|
||||
|
||||
statement ok
|
||||
pragma enable_verification;
|
||||
|
||||
statement ok
|
||||
CREATE TABLE test (x INT, y AS (x + 100));
|
||||
|
||||
statement ok
|
||||
insert into test VALUES (42);
|
||||
|
||||
statement ok
|
||||
FROM test;
|
||||
|
||||
statement ok
|
||||
ATTACH '__TEST_DIR__/myotherdb.db';
|
||||
|
||||
statement ok
|
||||
COPY FROM DATABASE mydb TO myotherdb;
|
||||
|
||||
query II
|
||||
select * from myotherdb.test;
|
||||
----
|
||||
42 142
|
||||
58
external/duckdb/test/sql/copy_database/copy_database_index.test
vendored
Normal file
58
external/duckdb/test/sql/copy_database/copy_database_index.test
vendored
Normal file
@@ -0,0 +1,58 @@
|
||||
# name: test/sql/copy_database/copy_database_index.test
|
||||
# description: Test COPY DATABASE with indexes
|
||||
# group: [copy_database]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
statement ok
|
||||
ATTACH '__TEST_DIR__/copy_database_index.db' AS db1;
|
||||
|
||||
statement ok
|
||||
USE db1
|
||||
|
||||
statement ok
|
||||
CREATE TABLE test(a INTEGER, b INTEGER, c VARCHAR(10));
|
||||
|
||||
statement ok
|
||||
CREATE INDEX i_index ON test(a);
|
||||
|
||||
statement ok
|
||||
INSERT INTO test SELECT range, 88, 'hello' FROM range(10000);
|
||||
|
||||
query II
|
||||
EXPLAIN ANALYZE SELECT a, b, c FROM db1.test WHERE a = 42;
|
||||
----
|
||||
analyzed_plan <REGEX>:.*Type: Index Scan.*
|
||||
|
||||
query III
|
||||
SELECT a, b, c FROM db1.test WHERE a = 42;
|
||||
----
|
||||
42 88 hello
|
||||
|
||||
statement ok
|
||||
ATTACH '__TEST_DIR__/other_copy_database_index.db' AS db2;
|
||||
|
||||
statement ok
|
||||
COPY FROM DATABASE db1 TO db2
|
||||
|
||||
statement ok
|
||||
USE db2
|
||||
|
||||
query III
|
||||
SELECT * FROM test WHERE a = 42;
|
||||
----
|
||||
42 88 hello
|
||||
|
||||
query II
|
||||
EXPLAIN ANALYZE SELECT * FROM test WHERE a = 42;
|
||||
----
|
||||
analyzed_plan <REGEX>:.*Type: Index Scan.*
|
||||
|
||||
statement ok
|
||||
DROP INDEX i_index;
|
||||
|
||||
query II
|
||||
EXPLAIN ANALYZE SELECT * FROM test WHERE a = 42;
|
||||
----
|
||||
analyzed_plan <REGEX>:.*Type: Sequential Scan.*
|
||||
30
external/duckdb/test/sql/copy_database/copy_database_multiple.test
vendored
Normal file
30
external/duckdb/test/sql/copy_database/copy_database_multiple.test
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
# name: test/sql/copy_database/copy_database_multiple.test
|
||||
# description: Run the same COPY FROM DATABASE multiple times
|
||||
# group: [copy_database]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
statement ok
|
||||
ATTACH ':memory:' AS db1;
|
||||
|
||||
statement ok
|
||||
ATTACH ':memory:' AS db2;
|
||||
|
||||
statement ok
|
||||
CREATE TABLE db1.tbl1 AS FROM range(3) r(i);
|
||||
|
||||
statement ok
|
||||
COPY FROM DATABASE db1 TO db2;
|
||||
|
||||
statement error
|
||||
COPY FROM DATABASE db1 TO db2;
|
||||
----
|
||||
Table with name "tbl1" already exists!
|
||||
|
||||
query I
|
||||
FROM db2.tbl1
|
||||
----
|
||||
0
|
||||
1
|
||||
2
|
||||
37
external/duckdb/test/sql/copy_database/copy_database_simple.test
vendored
Normal file
37
external/duckdb/test/sql/copy_database/copy_database_simple.test
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
# name: test/sql/copy_database/copy_database_simple.test
|
||||
# description: Test attach mixed with the COPY statement
|
||||
# group: [copy_database]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
statement ok
|
||||
ATTACH '__TEST_DIR__/copy_database_simple.db' AS db1
|
||||
|
||||
statement ok
|
||||
CREATE TABLE db1.test(a INTEGER, b INTEGER, c VARCHAR(10));
|
||||
|
||||
statement ok
|
||||
INSERT INTO db1.test VALUES (42, 88, 'hello');
|
||||
|
||||
statement ok
|
||||
ATTACH '__TEST_DIR__/other_copy_database_simple.db' AS db2;
|
||||
|
||||
statement ok
|
||||
COPY FROM DATABASE db1 TO db2
|
||||
|
||||
query III
|
||||
SELECT * FROM db2.test;
|
||||
----
|
||||
42 88 hello
|
||||
|
||||
# unrecognized database
|
||||
statement error
|
||||
COPY FROM DATABASE dbxx TO memory
|
||||
----
|
||||
dbxx
|
||||
|
||||
statement error
|
||||
COPY FROM DATABASE db1 TO dbxx
|
||||
----
|
||||
dbxx
|
||||
35
external/duckdb/test/sql/copy_database/copy_database_tpch.test_slow
vendored
Normal file
35
external/duckdb/test/sql/copy_database/copy_database_tpch.test_slow
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
# name: test/sql/copy_database/copy_database_tpch.test_slow
|
||||
# description: Test COPY statement with TPC-H database
|
||||
# group: [copy_database]
|
||||
|
||||
require tpch
|
||||
|
||||
statement ok
|
||||
CALL dbgen(sf=1);
|
||||
|
||||
statement ok
|
||||
ATTACH DATABASE ':memory:' AS db1;
|
||||
|
||||
statement ok
|
||||
COPY FROM DATABASE memory TO db1
|
||||
|
||||
statement ok
|
||||
USE db1
|
||||
|
||||
loop i 1 9
|
||||
|
||||
query I
|
||||
PRAGMA tpch(${i})
|
||||
----
|
||||
<FILE>:extension/tpch/dbgen/answers/sf1/q0${i}.csv
|
||||
|
||||
endloop
|
||||
|
||||
loop i 10 23
|
||||
|
||||
query I
|
||||
PRAGMA tpch(${i})
|
||||
----
|
||||
<FILE>:extension/tpch/dbgen/answers/sf1/q${i}.csv
|
||||
|
||||
endloop
|
||||
40
external/duckdb/test/sql/copy_database/copy_database_with_index.test
vendored
Normal file
40
external/duckdb/test/sql/copy_database/copy_database_with_index.test
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
# name: test/sql/copy_database/copy_database_with_index.test
|
||||
# description: Test the COPY DATABASE statement with an index.
|
||||
# group: [copy_database]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification;
|
||||
|
||||
statement ok
|
||||
ATTACH ':memory:' AS db1;
|
||||
|
||||
statement ok
|
||||
USE db1;
|
||||
|
||||
statement ok
|
||||
CREATE TABLE data AS
|
||||
SELECT i, hash(i)::VARCHAR AS value FROM generate_series(1, 10000) s(i);
|
||||
|
||||
statement ok
|
||||
ALTER TABLE data ALTER COLUMN value SET NOT NULL;
|
||||
|
||||
statement ok
|
||||
CREATE INDEX data_value ON data(value);
|
||||
|
||||
statement ok
|
||||
ATTACH ':memory:' AS db2;
|
||||
|
||||
statement ok
|
||||
COPY FROM DATABASE db1 TO db2;
|
||||
|
||||
query III
|
||||
SELECT database_name, table_name, index_name FROM duckdb_indexes ORDER BY ALL;
|
||||
----
|
||||
db1 data data_value
|
||||
db2 data data_value
|
||||
|
||||
query III
|
||||
SELECT database_name, table_name, index_count FROM duckdb_tables ORDER BY ALL;
|
||||
----
|
||||
db1 data 1
|
||||
db2 data 1
|
||||
60
external/duckdb/test/sql/copy_database/copy_database_with_unique_index.test
vendored
Normal file
60
external/duckdb/test/sql/copy_database/copy_database_with_unique_index.test
vendored
Normal file
@@ -0,0 +1,60 @@
|
||||
# name: test/sql/copy_database/copy_database_with_unique_index.test
|
||||
# description: Test the COPY DATABASE statement with unique indexes.
|
||||
# group: [copy_database]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification;
|
||||
|
||||
statement ok
|
||||
ATTACH '__TEST_DIR__/copy_db_old.db' AS old;
|
||||
|
||||
statement ok
|
||||
CREATE TABLE old.items (id INT, uniq INT UNIQUE);
|
||||
|
||||
statement ok
|
||||
INSERT INTO old.items VALUES (1, 1), (2, 2), (3, 3);
|
||||
|
||||
statement ok
|
||||
CREATE UNIQUE INDEX idx_id ON old.items(id);
|
||||
|
||||
statement ok
|
||||
ATTACH '__TEST_DIR__/copy_db_new1.db' AS new1;
|
||||
|
||||
statement ok
|
||||
COPY FROM DATABASE old TO new1 (SCHEMA);
|
||||
|
||||
statement ok
|
||||
COPY FROM DATABASE old TO new1 (DATA);
|
||||
|
||||
query II
|
||||
SELECT id, uniq FROM new1.items ORDER BY ALL;
|
||||
----
|
||||
1 1
|
||||
2 2
|
||||
3 3
|
||||
|
||||
statement error
|
||||
INSERT INTO new1.items VALUES (1, 4);
|
||||
----
|
||||
<REGEX>:Constraint Error.*violates unique constraint.*
|
||||
|
||||
statement error
|
||||
INSERT INTO new1.items VALUES (4, 1);
|
||||
----
|
||||
<REGEX>:Constraint Error.*violates unique constraint.*
|
||||
|
||||
statement ok
|
||||
DETACH new1;
|
||||
|
||||
statement ok
|
||||
ATTACH '__TEST_DIR__/copy_db_new1.db' AS new1;
|
||||
|
||||
statement error
|
||||
INSERT INTO new1.items VALUES (1, 4);
|
||||
----
|
||||
<REGEX>:Constraint Error.*violates unique constraint.*
|
||||
|
||||
statement error
|
||||
INSERT INTO new1.items VALUES (4, 1);
|
||||
----
|
||||
<REGEX>:Constraint Error.*violates unique constraint.*
|
||||
106
external/duckdb/test/sql/copy_database/copy_table_with_sequence.test
vendored
Normal file
106
external/duckdb/test/sql/copy_database/copy_table_with_sequence.test
vendored
Normal file
@@ -0,0 +1,106 @@
|
||||
# name: test/sql/copy_database/copy_table_with_sequence.test
|
||||
# group: [copy_database]
|
||||
|
||||
statement ok
|
||||
pragma enable_verification;
|
||||
|
||||
statement ok
|
||||
attach '__TEST_DIR__/backup.db';
|
||||
|
||||
## Only specifying a sequence name
|
||||
|
||||
statement ok
|
||||
create sequence seq start 1;
|
||||
|
||||
statement ok
|
||||
create table tbl (
|
||||
id int default nextval('seq')
|
||||
);
|
||||
|
||||
statement ok
|
||||
insert into tbl values (DEFAULT);
|
||||
insert into tbl values (DEFAULT);
|
||||
|
||||
statement ok
|
||||
copy from database memory to backup;
|
||||
|
||||
statement ok
|
||||
drop sequence seq cascade;
|
||||
|
||||
query I
|
||||
select * from backup.tbl;
|
||||
----
|
||||
1
|
||||
2
|
||||
|
||||
query I
|
||||
select currval('backup.main.seq');
|
||||
----
|
||||
3
|
||||
|
||||
statement ok
|
||||
drop sequence backup.main.seq cascade;
|
||||
|
||||
## Explicitly specifying the schema
|
||||
|
||||
statement ok
|
||||
create schema my_schema;
|
||||
|
||||
statement ok
|
||||
create sequence my_schema.seq start 1;
|
||||
|
||||
statement ok
|
||||
create table tbl (
|
||||
id int default nextval('my_schema.seq')
|
||||
);
|
||||
|
||||
statement ok
|
||||
copy from database memory to backup;
|
||||
|
||||
statement ok
|
||||
drop sequence my_schema.seq cascade;
|
||||
|
||||
statement ok
|
||||
drop sequence backup.my_schema.seq cascade;
|
||||
|
||||
## Explicitly specifying the schema, with the same name as the catalog
|
||||
|
||||
statement ok
|
||||
create schema backup;
|
||||
|
||||
statement ok
|
||||
create sequence memory.backup.seq start 1;
|
||||
|
||||
statement error
|
||||
create table tbl (
|
||||
id int default nextval('backup.seq')
|
||||
);
|
||||
----
|
||||
Ambiguous reference to catalog or schema "backup"
|
||||
|
||||
statement ok
|
||||
drop schema backup cascade;
|
||||
|
||||
## Explicitly specifying the catalog + schema (results in an error)
|
||||
|
||||
statement ok
|
||||
create schema backup;
|
||||
|
||||
statement ok
|
||||
create sequence memory.backup.seq start 1;
|
||||
|
||||
statement ok
|
||||
create table tbl (
|
||||
id int default nextval('memory.backup.seq')
|
||||
);
|
||||
|
||||
statement error
|
||||
copy from database memory to backup;
|
||||
----
|
||||
<REGEX>:TransactionContext Error: Attempting to write to database .* in a transaction that has already modified database .*
|
||||
|
||||
statement ok
|
||||
drop sequence memory.backup.seq cascade;
|
||||
|
||||
statement ok
|
||||
drop sequence backup.backup.seq cascade;
|
||||
Reference in New Issue
Block a user