should be it

This commit is contained in:
2025-10-24 19:21:19 -05:00
parent a4b23fc57c
commit f09560c7b1
14047 changed files with 3161551 additions and 1 deletions

View File

@@ -0,0 +1,33 @@
# name: test/sql/catalog/dependencies/add_column_to_table_referenced_by_fk.test
# group: [dependencies]
statement ok
pragma enable_verification;
statement ok
create table tbl(a varchar primary key);
statement ok
create table tbl2(
a varchar,
foreign key (a) references tbl(a)
)
statement ok
insert into tbl values('abc');
statement ok
insert into tbl2 values ('abc');
statement ok
alter table tbl add column b integer default 5;
query II
select * from tbl;
----
abc 5
query I
select * from tbl2;
----
abc

View File

@@ -0,0 +1,27 @@
# name: test/sql/catalog/dependencies/add_column_to_table_referenced_by_macro.test
# group: [dependencies]
statement ok
pragma enable_verification;
statement ok
create table tbl(a varchar default 'abc');
statement ok
insert into tbl values(DEFAULT);
statement ok
create macro mcr() as table select * from tbl;
query I
select * from mcr();
----
abc
statement ok
alter table tbl add column b integer default 5;
query II
select * from mcr();
----
abc 5

View File

@@ -0,0 +1,27 @@
# name: test/sql/catalog/dependencies/add_column_to_table_referenced_by_view.test
# group: [dependencies]
statement ok
pragma enable_verification;
statement ok
create table tbl(a varchar default 'abc');
statement ok
insert into tbl values(DEFAULT);
statement ok
create view vw as select * from tbl;
query I
select * from vw;
----
abc
statement ok
alter table tbl add column b integer default 5;
statement error
select * from vw;
----
Contents of view were altered: types don't match! Expected [VARCHAR], but found [VARCHAR, INTEGER] instead

View File

@@ -0,0 +1,16 @@
# name: test/sql/catalog/dependencies/change_type_of_table_column_referenced_by_index.test
# group: [dependencies]
statement ok
pragma enable_verification;
statement ok
create table tbl(a varchar, b integer);
statement ok
create index idx on tbl(a);
statement error
alter table tbl alter a set type integer;
----
Catalog Error: Cannot change the type of this column: an index depends on it!

View File

@@ -0,0 +1,16 @@
# name: test/sql/catalog/dependencies/remove_table_column_referenced_by_index.test
# group: [dependencies]
statement ok
pragma enable_verification;
statement ok
create table tbl(a varchar, b integer);
statement ok
create index idx on tbl(a);
statement error
alter table tbl drop column a;
----
Catalog Error: Cannot drop this column: an index depends on it!

View File

@@ -0,0 +1,16 @@
# name: test/sql/catalog/dependencies/rename_table_column_referenced_by_index.test
# group: [dependencies]
statement ok
pragma enable_verification;
statement ok
create table tbl(a varchar);
statement ok
create index idx on tbl(a);
statement error
alter table tbl rename a to b;
----
Cannot alter entry "tbl" because there are entries that depend on it.

View File

@@ -0,0 +1,27 @@
# name: test/sql/catalog/dependencies/rename_view_referenced_by_table_macro.test
# group: [dependencies]
statement ok
pragma enable_verification;
# Create a table so our view has something to reference
statement ok
create table tbl (a varchar);
# Create the view
statement ok
create view vw as select * from tbl;
# Create a table macro that references the view
statement ok
create macro static_table() as table select * from vw;
# Rename the view (Postgres 16.0 does not block this ALTER)
statement ok
alter view vw rename to vw2;
# Our table macro now errors
statement error
select * from static_table();
----
Catalog Error: Table with name vw does not exist!

View File

@@ -0,0 +1,17 @@
# name: test/sql/catalog/dependencies/set_default_of_table_column_referenced_by_index.test
# group: [dependencies]
statement ok
pragma enable_verification;
statement ok
create table tbl(a varchar, b integer);
statement ok
create index idx on tbl(a);
statement error
alter table tbl alter a set default 'test';
----
Dependency Error: Cannot alter entry "tbl" because there are entries that depend on it.

View File

@@ -0,0 +1,538 @@
# name: test/sql/catalog/dependencies/test_alter_dependency_ownership.test
# description: Tests alter of ownership of sequences
# group: [dependencies]
require skip_reload
##TEST: If the table is dropped, then the sequence is also droppped
statement ok
CREATE SEQUENCE sequence1;
statement ok
CREATE TABLE tablename (
colname integer
);
statement ok
ALTER SEQUENCE sequence1 OWNED BY tablename;
statement ok
DROP TABLE tablename;
statement error
SELECT nextval('sequence1');
----
Catalog Error: Sequence with name sequence1 does not exist!
##TEST: If the table is dropped, then the sequence is also droppped, using schemas
statement ok
CREATE SEQUENCE main.sequence1;
statement ok
CREATE TABLE main.tablename (
colname integer
);
statement ok
ALTER SEQUENCE main.sequence1 OWNED BY main.tablename;
statement ok
DROP TABLE main.tablename;
statement error
SELECT nextval('main.sequence1');
----
Catalog Error: Sequence with name sequence1 does not exist!
##TEST: If the owned sequence is dropped with CASCADE, then the table is also dropped
statement ok
CREATE SEQUENCE sequence1;
statement ok
CREATE TABLE tablename (
colname integer
);
statement ok
ALTER SEQUENCE sequence1 OWNED BY tablename;
statement ok
DROP SEQUENCE sequence1 CASCADE;
statement error
SELECT * FROM tablename;
----
Catalog Error: Table with name tablename does not exist!
##TEST: The owned sequence cannot be dropped without CASCADE
statement ok
CREATE SEQUENCE sequence1;
statement ok
CREATE TABLE tablename (
colname integer
);
statement ok
ALTER SEQUENCE sequence1 OWNED BY tablename;
statement error
DROP SEQUENCE sequence1;
----
table "tablename" depends on index "sequence1".
statement ok
DROP TABLE tablename;
##TEST: If sequence is already owned by other table throw an error
statement ok
CREATE SEQUENCE sequence1;
statement ok
CREATE TABLE tablename (
colname integer
);
statement ok
CREATE TABLE tablename2 (
colname integer
);
# owned by specified more than once
statement error
ALTER SEQUENCE sequence1 OWNED BY tablename OWNED BY tablename2;
----
Parser Error: Owned by value should be passed as most once
statement ok
ALTER SEQUENCE sequence1 OWNED BY tablename;
statement error
ALTER SEQUENCE sequence1 OWNED BY tablename2;
----
Dependency Error: sequence1 is already owned by tablename
statement ok
DROP TABLE tablename;
statement ok
DROP TABLE tablename2;
##TEST: If owning the sequence twice shouldn't return any error
statement ok
CREATE SEQUENCE sequence1;
statement ok
CREATE TABLE tablename (
colname integer
);
statement ok
ALTER SEQUENCE sequence1 OWNED BY tablename;
statement ok
ALTER SEQUENCE sequence1 OWNED BY tablename;
statement ok
DROP TABLE tablename;
##TEST: A table can own many sequences, and when the table is dropped, all sequences are also dropped
statement ok
CREATE SEQUENCE sequence1;
statement ok
CREATE SEQUENCE sequence2;
statement ok
CREATE SEQUENCE sequence3;
statement ok
CREATE TABLE tablename (
colname integer
);
statement ok
ALTER SEQUENCE sequence1 OWNED BY tablename;
statement ok
ALTER SEQUENCE sequence2 OWNED BY tablename;
statement ok
ALTER SEQUENCE sequence3 OWNED BY tablename;
statement ok
DROP TABLE tablename;
statement error
SELECT nextval('sequence1');
----
Catalog Error: Sequence with name sequence1 does not exist!
statement error
SELECT nextval('sequence2');
----
Catalog Error: Sequence with name sequence2 does not exist!
statement error
SELECT nextval('sequence3');
----
Catalog Error: Sequence with name sequence3 does not exist!
##TEST: When owning a sequence, insertions work normally
statement ok
CREATE SEQUENCE sequence1;
# sequence 2 will not be owned by tablename
statement ok
CREATE SEQUENCE sequence2;
statement ok
CREATE TABLE tablename (
colname integer DEFAULT nextval('sequence1'),
colname2 integer DEFAULT nextval('sequence2'),
colname3 integer,
colname4 float,
colname5 string
);
statement ok
ALTER SEQUENCE sequence1 OWNED BY tablename;
statement ok
INSERT INTO tablename VALUES(default, default, 10, 2.0, 'aaaa');
statement ok
INSERT INTO tablename VALUES(default, default, 20, 3.0, 'bbbb');
query IIIII
SELECT colname, colname2, colname3, colname4, colname5 FROM tablename;
----
1 1 10 2.0 aaaa
2 2 20 3.0 bbbb
statement ok
DROP TABLE tablename;
statement ok
DROP SEQUENCE sequence2;
##TEST: If we change the name of a table that has an owned sequence, the ownership moves to the new table name
statement ok
CREATE SEQUENCE sequence1;
statement ok
CREATE TABLE tablename (
colname integer
);
statement ok
ALTER SEQUENCE sequence1 OWNED BY tablename;
statement ok
ALTER TABLE tablename RENAME TO new_tablename;
# Create a new table, with the same name as the old table and try to own the sequence
statement ok
CREATE TABLE tablename (
colname integer
);
statement error
ALTER SEQUENCE sequence1 OWNED BY tablename;
----
sequence1 is already owned by new_tablename
statement error
DROP SEQUENCE sequence1;
----
table "new_tablename" depends on index "sequence1".
statement error
CREATE OR REPLACE SEQUENCE sequence1;
----
table "new_tablename" depends on index "sequence1".
# Owning the sequence with the same table shouldn't return any error
statement ok
ALTER SEQUENCE sequence1 OWNED BY new_tablename;
statement ok
DROP TABLE tablename;
statement ok
DROP TABLE new_tablename;
##TEST: If we add a column to a table that has an owned sequence, the ownership remains
statement ok
CREATE SEQUENCE sequence1;
statement ok
CREATE TABLE tablename (
colname integer
);
statement ok
ALTER SEQUENCE sequence1 OWNED BY tablename;
statement ok
ALTER TABLE tablename ADD COLUMN colname2 integer DEFAULT nextval('sequence1')
statement ok
ALTER SEQUENCE sequence1 OWNED BY tablename;
statement error
DROP SEQUENCE sequence1;
----
table "tablename" depends on index "sequence1".
statement ok
DROP TABLE tablename;
##TEST: If we remove a column to a table that has an owned sequence, the ownership remains
statement ok
CREATE SEQUENCE sequence1;
statement ok
CREATE TABLE tablename (
colname integer,
colname2 integer DEFAULT nextval('sequence1')
);
statement ok
ALTER SEQUENCE sequence1 OWNED BY tablename;
statement ok
ALTER TABLE tablename DROP colname2;
statement error
DROP SEQUENCE sequence1;
----
table "tablename" depends on index "sequence1".
statement ok
DROP TABLE tablename;
##TEST: If we alter the type of a column that has the sequence as default value
statement ok
CREATE SEQUENCE sequence1;
statement ok
CREATE TABLE tablename (
colname integer DEFAULT nextval('sequence1')
);
statement ok
ALTER SEQUENCE sequence1 OWNED BY tablename;
statement ok
ALTER TABLE tablename ALTER colname TYPE float;
statement error
DROP SEQUENCE sequence1;
----
table "tablename" depends on index "sequence1".
statement ok
DROP TABLE tablename;
###TEST: If we have many columns using the sequence as default and drop one by one, the ownership should remain intact
statement ok
CREATE SEQUENCE sequence1;
statement ok
CREATE TABLE tablename (
colname integer DEFAULT nextval('sequence1'),
colname2 integer DEFAULT nextval('sequence1'),
colname3 integer DEFAULT nextval('sequence1'),
colname4 integer DEFAULT nextval('sequence1')
);
statement ok
ALTER SEQUENCE sequence1 OWNED BY tablename;
statement ok
ALTER TABLE tablename DROP colname4;
statement error
DROP SEQUENCE sequence1;
----
table "tablename" depends on index "sequence1".
statement ok
ALTER TABLE tablename DROP colname3;
statement error
DROP SEQUENCE sequence1;
----
table "tablename" depends on index "sequence1".
statement ok
ALTER TABLE tablename DROP colname2;
statement error
DROP SEQUENCE sequence1;
----
table "tablename" depends on index "sequence1".
statement ok
DROP TABLE tablename;
##TEST: If we drop a table which owns a sequence and then roll back, the ownership should remain
statement ok
CREATE SEQUENCE sequence1;
statement ok
CREATE TABLE tablename (
colname integer DEFAULT nextval('sequence1')
);
statement ok
ALTER SEQUENCE sequence1 OWNED BY tablename;
statement ok
BEGIN TRANSACTION;
statement ok
DROP TABLE tablename;
statement error
select nextval('sequence1');
----
Catalog Error: Sequence with name sequence1 does not exist!
statement ok
ROLLBACK;
query I
select nextval('sequence1');
----
1
statement error
DROP SEQUENCE sequence1;
----
table "tablename" depends on index "sequence1".
statement ok
DROP TABLE tablename;
##TEST: View can own a sequence
statement ok
CREATE SEQUENCE sequence1;
statement ok
CREATE VIEW v1_sequence1(a) AS SELECT 42;
statement ok
ALTER SEQUENCE sequence1 OWNED BY v1_sequence1;
statement error
DROP SEQUENCE sequence1;
----
view "v1_sequence1" depends on index "sequence1".
statement ok
DROP VIEW v1_sequence1;
statement error
SELECT nextval('sequence1');
----
Catalog Error: Sequence with name sequence1 does not exist!
##TEST: Sequence can own a sequence
statement ok
CREATE SEQUENCE sequence1;
statement ok
CREATE SEQUENCE sequence2;
statement ok
ALTER SEQUENCE sequence1 OWNED BY sequence2;
statement error
DROP SEQUENCE sequence1;
----
index "sequence2" depends on index "sequence1".
statement ok
DROP SEQUENCE sequence2;
statement error
SELECT nextval('sequence1');
----
Catalog Error: Sequence with name sequence1 does not exist!
##TEST: Sequence cant own its owner
statement ok
CREATE SEQUENCE sequence1;
statement ok
CREATE SEQUENCE sequence2;
statement ok
ALTER SEQUENCE sequence1 OWNED BY sequence2;
statement error
ALTER SEQUENCE sequence2 OWNED BY sequence1;
----
Dependency Error: sequence1 can not become the owner, it is already owned by sequence2
statement ok
DROP SEQUENCE sequence2;
##TEST: Dependency cycle should throw error
statement ok
CREATE SEQUENCE sequence1;
statement ok
CREATE SEQUENCE sequence2;
statement ok
CREATE SEQUENCE sequence3;
statement ok
CREATE SEQUENCE sequence4;
statement ok
ALTER SEQUENCE sequence2 OWNED BY sequence1;
statement error
ALTER SEQUENCE sequence3 OWNED BY sequence2;
----
Dependency Error: sequence2 can not become the owner, it is already owned by sequence1
# FIXME: this error makes no sense, if there is no circular dependency
# this should be allowed
statement error
ALTER SEQUENCE sequence1 OWNED BY sequence3;
----
Dependency Error: sequence1 already owns sequence2. Cannot have circular dependencies
statement ok
ALTER SEQUENCE sequence3 OWNED BY sequence4;
statement ok
DROP SEQUENCE sequence1;
statement ok
DROP SEQUENCE sequence4;
statement error
SELECT nextval('sequence1');
----
Catalog Error: Sequence with name sequence1 does not exist!
statement error
SELECT nextval('sequence2');
----
Catalog Error: Sequence with name sequence2 does not exist!
statement error
SELECT nextval('sequence3');
----
Catalog Error: Sequence with name sequence3 does not exist!
statement error
SELECT nextval('sequence4');
----
Catalog Error: Sequence with name sequence4 does not exist!

View File

@@ -0,0 +1,55 @@
# name: test/sql/catalog/dependencies/test_alter_owned_by.test
# group: [dependencies]
require skip_reload
statement ok
PRAGMA verify_serializer
##TEST: If the table is dropped, then the sequence is also droppped
statement ok
CREATE SEQUENCE sequence1;
statement ok
CREATE SEQUENCE sequence2;
statement ok
CREATE TABLE tbl1 (
colname integer
);
statement ok
CREATE TABLE tbl2 (
colname integer
);
statement ok
ALTER SEQUENCE sequence1 OWNED BY tbl1;
# sequence1 can not be the owner of an entry, sequence1 is already owned
statement error
ALTER SEQUENCE sequence2 OWNED BY sequence1;
----
<REGEX>:.*Dependency Error.*is already owned.*
# sequence1 is already owned by another entry
statement error
ALTER SEQUENCE sequence1 OWNED BY tbl2;
----
<REGEX>:.*Dependency Error.*is already owned.*
statement ok
create sequence sequence3;
statement error
alter sequence sequence3 owned by sequence1
----
<REGEX>:.*Dependency Error.*is already owned.*
statement ok
DROP TABLE tbl1;
statement error
SELECT nextval('sequence1');
----
<REGEX>:.*Catalog Error.*does not exist.*

View File

@@ -0,0 +1,44 @@
# name: test/sql/catalog/dependencies/test_alter_owning_table.test
# description: Test ALTER of table that owns a sequence
# group: [dependencies]
# FIXME: we don't preserve OWNED BY on restarts
require skip_reload
statement ok
create sequence seq;
statement ok
create sequence other_seq;
statement ok
create table tbl (
a integer default nextval('other_seq')
);
statement ok
alter sequence seq owned by tbl;
statement ok
alter table tbl rename to tbl2;
statement error
drop sequence seq;
----
table "tbl2" depends on index "seq".
statement error
drop sequence other_seq;
----
table "tbl2" depends on index "other_seq".
statement ok
drop table tbl2;
statement error
drop sequence seq;
----
Sequence with name seq does not exist!
statement ok
drop sequence other_seq;

View File

@@ -0,0 +1,36 @@
# name: test/sql/catalog/dependencies/test_concurrent_alter.test
# group: [dependencies]
require skip_reload
# Create the table
statement ok
CREATE TABLE t2 AS (SELECT 42);
# Create a sequence
statement ok
create sequence seq;
# Let the table own the sequence
statement ok
alter sequence seq owned by t2;
concurrentloop i 1 100
loop j 1 10
statement maybe
alter table t2 rename to t3;
----
Error
statement maybe
alter table t3 rename to t2;
----
Error
# j
endloop
# i
endloop

View File

@@ -0,0 +1,38 @@
# name: test/sql/catalog/dependencies/test_concurrent_drop.test
# description: Test concurrent alter and rename of tables
# group: [dependencies]
require skip_reload
# Create a sequence object
statement ok
create sequence seq;
concurrentloop i 0 100
# Create dependencies on the sequence
statement ok
create table tbl${i} (
a integer default nextval('seq')
);
# Cant drop the sequence because we just added a dependency
statement error
drop sequence seq;
----
Cannot drop entry "seq" because there are entries that depend on it.
# Use the sequence
statement ok
insert into tbl${i} VALUES(DEFAULT);
# Drop the table - removing the dependency
statement ok
drop table tbl${i};
# i
endloop
# We can now drop the sequence, all its dependents are gone
statement ok
drop sequence seq;

View File

@@ -0,0 +1,34 @@
# name: test/sql/catalog/dependencies/test_concurrent_index_creation.test
# description: Test concurrent alter and rename of tables
# group: [dependencies]
mode skip
require skip_reload
statement ok
ATTACH '__TEST_DIR__/concurrent_index_creation.db' AS source;
concurrentloop i 0 10
statement maybe
CREATE TABLE IF NOT EXISTS source.tbl (i INT);
----
# Create an index on the table.
statement maybe
CREATE INDEX index${i} ON source.tbl (i);
----
# Drop the table and its indexes.
statement maybe
DROP TABLE source.tbl;
----
endloop
statement ok
DETACH source;
statement ok
ATTACH '__TEST_DIR__/concurrent_index_creation.db' AS source;

View File

@@ -0,0 +1,38 @@
# name: test/sql/catalog/dependencies/test_concurrent_rename.test_slow
# description: Tests concurrent rename of tables
# group: [dependencies]
require skip_reload
statement ok
CREATE TABLE t2 AS (SELECT 42);
concurrentloop i 1 100
loop j 1 10
# Rename to t3
statement maybe
alter table t2 rename to t3;
----
# Rename back to t2
statement maybe
alter table t3 rename to t2;
----
# Select from t3 - might succeed
statement maybe
select * from t3;
----
# Select from t2 - might succeed
statement maybe
select * from t2;
----
# j
endloop
# i
endloop

View File

@@ -0,0 +1,36 @@
# name: test/sql/catalog/dependencies/test_concurrent_schema_creation.test
# description: Test concurrent schema creation + table creation
# group: [dependencies]
require skip_reload
concurrentloop i 0 100
# Create a schema for every thread
statement ok
create schema schema${i};
# Create a table inside this schema
statement ok
create table schema${i}.tbl${i} (a integer);
# Drop the schema for the thread - should fail
statement error
drop schema schema${i};
----
because there are entries that depend on it
# Insert into the table
statement ok
insert into schema${i}.tbl${i} VALUES(1);
# Drop the table
statement ok
drop table schema${i}.tbl${i};
# Drop the schema again - now it succeeds
statement ok
drop schema schema${i};
# i
endloop

View File

@@ -0,0 +1,78 @@
# name: test/sql/catalog/dependencies/test_default_value_dependency.test
# description: Default values and dependencies
# group: [dependencies]
require skip_reload
# dependency on a sequence in a default value
statement ok con1
CREATE SEQUENCE seq
statement ok con1
CREATE TABLE integers(i INTEGER DEFAULT nextval('seq'), j INTEGER)
statement ok con1
INSERT INTO integers (j) VALUES (1), (1), (1), (1), (1)
query R con2
SELECT SUM(i) FROM integers
----
15.000000
# we can't drop the sequence: the table depends on it
statement error con1
DROP SEQUENCE seq
----
# cascade drop works
statement ok con1
DROP SEQUENCE seq CASCADE
# but it also drops the table
statement error con1
SELECT * FROM integers
----
# dependency on multiple sequences in default value
statement ok con1
CREATE SEQUENCE seq
statement ok con1
CREATE SEQUENCE seq1
statement ok con1
CREATE SEQUENCE seq2
statement error con1
CREATE TABLE integers(i INTEGER DEFAULT nextval('seq' || CAST(nextval('seq') AS VARCHAR)), j INTEGER)
----
non-constant sequences are no longer supported
statement ok con1
CREATE TABLE integers(i INTEGER DEFAULT nextval('seq1') + nextval('seq2'), j INTEGER)
# seq1 exists, so the result of the first default value is 1
statement ok con1
INSERT INTO integers (j) VALUES (1)
# we canot drop seq1 and seq2: the dependency is fixed
statement error con1
DROP SEQUENCE seq1
----
Cannot drop entry
statement error con1
DROP SEQUENCE seq2
----
Cannot drop entry
# need to do a cascading drop
statement ok con1
DROP SEQUENCE seq1 CASCADE
# now the table is gone
statement error con1
SELECT * FROM integers
----
does not exist

View File

@@ -0,0 +1,81 @@
# name: test/sql/catalog/dependencies/test_prepare_dependencies_transactions.test
# description: Prepare dependencies and transactions
# group: [dependencies]
require skip_reload
statement ok
SET immediate_transaction_mode=true
# case one: prepared statement is created outside of transaction and committed
statement ok con1
CREATE TABLE integers(i INTEGER)
statement ok con1
INSERT INTO integers VALUES (1), (2), (3), (4), (5)
statement ok con2
PREPARE v AS SELECT SUM(i) FROM integers
# begin a transaction in con2
statement ok con2
BEGIN TRANSACTION
# now drop the table in con, with a cascading drop
statement ok con1
DROP TABLE integers CASCADE
# we can still execute v in con2
statement ok con2
EXECUTE v
# if we try to drop integers we get a conflict though
statement error con2
DROP TABLE integers CASCADE
----
<REGEX>:.*TransactionContext Error: Catalog write-write conflict on alter.*
# now we rollback
statement ok con2
ROLLBACK
# now we can't use the prepared statement anymore
statement error con2
EXECUTE v
----
<REGEX>:.*Catalog Error.*does not exist.*
# case two: prepared statement is created inside transaction
statement ok con1
CREATE TABLE integers(i INTEGER)
statement ok con1
INSERT INTO integers VALUES (1), (2), (3), (4), (5)
# begin a transaction and create a prepared statement
statement ok con2
BEGIN TRANSACTION
statement ok con2
PREPARE v AS SELECT SUM(i) FROM integers
# use the prepared statement
statement ok con2
EXECUTE v
# integers has a prepared statement depending on it, but we can still drop it
statement ok con1
DROP TABLE integers
# using the prepared statement after the table is still works: we are inside a transaction that uses an old version
statement ok con2
EXECUTE v
statement ok con2
COMMIT
# after committing we can no longer use the prepared statement
statement error con2
EXECUTE v
----
<REGEX>:.*Catalog Error.*does not exist.*

View File

@@ -0,0 +1,46 @@
# name: test/sql/catalog/dependencies/test_prepared_dependency.test
# description: Prepared statement dependencies
# group: [dependencies]
require skip_reload
# prepared statements and dependencies
# dependency on a bound table
statement ok con1
CREATE TABLE integers(i INTEGER)
statement ok con2
PREPARE v AS SELECT * FROM integers
statement ok con2
EXECUTE v
statement ok con1
DROP TABLE integers CASCADE
# after the drop the prepared statement is invalidated
statement error con2
EXECUTE v
----
<REGEX>:.*Catalog Error.*does not exist.*
# dependency on a sequence for prepare
statement ok con1
CREATE SEQUENCE seq
statement ok con2
PREPARE v AS SELECT nextval('seq')
statement ok con2
EXECUTE v
# drop the sequence
statement ok con1
DROP SEQUENCE seq CASCADE
# after the drop the prepared statement is invalidated
statement error con2
EXECUTE v
----
<REGEX>:.*Catalog Error.*does not exist.*

View File

@@ -0,0 +1,103 @@
# name: test/sql/catalog/dependencies/test_schema_dependency.test
# description: Schema dependencies
# group: [dependencies]
# single schema and dependencies
statement ok con1
CREATE SCHEMA s1
statement ok con1
CREATE TABLE s1.integers(i INTEGER)
query I con1
SELECT * FROM s1.integers
----
# can't drop: dependency
statement error con1
DROP SCHEMA s1
----
table "integers" depends on schema "s1".
query I con1
SELECT * FROM s1.integers
----
# we can drop with cascade though
statement ok con1
DROP SCHEMA s1 CASCADE
# this also drops the table
statement error con1
SELECT * FROM s1.integers
----
Table with name integers does not exist
# schemas and dependencies
# create a schema and a table inside the schema
statement ok con1
CREATE SCHEMA s1
statement ok con1
CREATE TABLE s1.integers(i INTEGER)
statement ok con1
BEGIN TRANSACTION
statement ok con2
BEGIN TRANSACTION
# drop the table in con1
statement ok con1
DROP TABLE s1.integers
# we can't drop the schema from con2 because the table still exists for con2!
statement error con2
DROP SCHEMA s1
----
table "integers" depends on schema "s1".
# now rollback the table drop
statement ok con1
ROLLBACK
statement ok con2
ROLLBACK
# the table exists again
query I con1
SELECT * FROM s1.integers
----
# try again, but this time we commit
statement ok con1
BEGIN TRANSACTION
statement ok con2
BEGIN TRANSACTION
# drop the schema entirely now
statement ok con1
DROP SCHEMA s1 CASCADE
# we can still query the table from con2
query I con2
SELECT * FROM s1.integers
----
# even after we commit
statement ok con1
COMMIT
query I con2
SELECT * FROM s1.integers
----
# however if we end the transaction in con2 the schema is gone
statement ok con2
ROLLBACK
statement error con2
CREATE TABLE s1.dummy(i INTEGER)
----
Schema with name s1 does not exist

View File

@@ -0,0 +1,43 @@
# name: test/sql/catalog/dependencies/test_write_after_rename.test
# group: [dependencies]
load __TEST_DIR__/create_after_rename.db
# Create 'tbl'
statement ok
create table tbl (i integer);
statement ok
insert into tbl VALUES (5);
statement ok
begin transaction;
# Rename 'tbl' -> 'tbl2'
statement ok
alter table tbl rename to tbl2;
# Create a new table with the old name: 'tbl'
statement ok
create table tbl (b varchar);
statement ok
insert into tbl VALUES ('test')
statement ok
commit;
statement ok
checkpoint;
restart
query I
select * from tbl2;
----
5
query I
select * from tbl;
----
test