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,45 @@
# name: test/sql/alter/struct/add_col_nested_struct.test
# description: Test ALTER TABLE ADD COLUMN: add column to a struct nested
# group: [struct]
statement ok
CREATE TABLE test(s STRUCT(s2 STRUCT(v1 INT, v2 INT)))
statement ok
INSERT INTO test VALUES (ROW(ROW(1, 1))), (ROW(ROW(2, 2)))
# add a column to a nested struct
statement ok
ALTER TABLE test ADD COLUMN s.s2.k INTEGER
query I
SELECT * FROM test
----
{'s2': {'v1': 1, 'v2': 1, 'k': NULL}}
{'s2': {'v1': 2, 'v2': 2, 'k': NULL}}
# already exists
statement error
ALTER TABLE test ADD COLUMN s.s2.v1 VARCHAR
----
field already exists in struct s2
# this just gets ignored
statement ok
ALTER TABLE test ADD COLUMN IF NOT EXISTS s.s2.v1 VARCHAR
# we can add columns at all levels
statement ok
ALTER TABLE test ADD COLUMN s.i INTEGER DEFAULT 100
query I
SELECT * FROM test
----
{'s2': {'v1': 1, 'v2': 1, 'k': NULL}, 'i': 100}
{'s2': {'v1': 2, 'v2': 2, 'k': NULL}, 'i': 100}
statement error
ALTER TABLE test ADD COLUMN s.s2.v1.x INTEGER
----
Binder Error: Column 'v1' is not a nested type, ADD COLUMN can only be used on nested types

View File

@@ -0,0 +1,79 @@
# name: test/sql/alter/struct/add_col_struct.test
# description: Test ALTER TABLE ADD COLUMN: add column to a struct
# group: [struct]
statement ok
CREATE TABLE test(s STRUCT(i INTEGER, j INTEGER))
statement ok
INSERT INTO test VALUES (ROW(1, 1)), (ROW(2, 2))
# add a column to a struct
statement ok
ALTER TABLE test ADD COLUMN s.k INTEGER
query I
SELECT * FROM test
----
{'i': 1, 'j': 1, 'k': NULL}
{'i': 2, 'j': 2, 'k': NULL}
# defaults
statement ok
ALTER TABLE test ADD COLUMN s.l INTEGER DEFAULT 42
query I
SELECT * FROM test
----
{'i': 1, 'j': 1, 'k': NULL, 'l': 42}
{'i': 2, 'j': 2, 'k': NULL, 'l': 42}
# this is transactional
statement ok
BEGIN
statement ok
ALTER TABLE test ADD COLUMN s.m INTEGER DEFAULT 42
query I
SELECT * FROM test
----
{'i': 1, 'j': 1, 'k': NULL, 'l': 42, 'm': 42}
{'i': 2, 'j': 2, 'k': NULL, 'l': 42, 'm': 42}
statement ok
ROLLBACK
query I
SELECT * FROM test
----
{'i': 1, 'j': 1, 'k': NULL, 'l': 42}
{'i': 2, 'j': 2, 'k': NULL, 'l': 42}
# already exists
statement error
ALTER TABLE test ADD COLUMN s.i VARCHAR
----
field already exists in struct s
# this just gets ignored
statement ok
ALTER TABLE test ADD COLUMN IF NOT EXISTS s.i VARCHAR
query I
SELECT * FROM test
----
{'i': 1, 'j': 1, 'k': NULL, 'l': 42}
{'i': 2, 'j': 2, 'k': NULL, 'l': 42}
# not a struct
statement error
ALTER TABLE test ADD COLUMN s.i.a INTEGER
----
Binder Error: Column 'i' is not a nested type, ADD COLUMN can only be used on nested types
# nested column does not exist
statement error
ALTER TABLE test ADD COLUMN s.x.a INTEGER
----
does not exist

View File

@@ -0,0 +1,39 @@
# name: test/sql/alter/struct/drop_col_nested_struct.test
# description: Test ALTER TABLE DROP COLUMN: drop column from a nested struct
# group: [struct]
statement ok
CREATE TABLE test(s STRUCT(i INT, s2 STRUCT(v1 INT, v2 INT)))
statement ok
INSERT INTO test VALUES (ROW(42, ROW(1, 1))), (ROW(84, ROW(2, 2)))
# add a column to a nested struct
statement ok
ALTER TABLE test DROP s.s2.v1
query I
SELECT * FROM test
----
{'i': 42, 's2': {'v2': 1}}
{'i': 84, 's2': {'v2': 2}}
# does not exists
statement error
ALTER TABLE test DROP COLUMN s.s2.v1
----
does not exist
# this just gets ignored
statement ok
ALTER TABLE test DROP COLUMN IF EXISTS s.s2.v1
# we can drop the struct in its entirety
statement ok
ALTER TABLE test DROP COLUMN s.s2
query I
SELECT * FROM test
----
{'i': 42}
{'i': 84}

View File

@@ -0,0 +1,52 @@
# name: test/sql/alter/struct/drop_col_struct.test
# description: Test ALTER TABLE DROP COLUMN: drop column from a struct
# group: [struct]
statement ok
CREATE TABLE test(s STRUCT(i INTEGER, j INTEGER))
statement ok
INSERT INTO test VALUES (ROW(1, 1)), (ROW(2, 2))
# drop a column from a struct
statement ok
ALTER TABLE test DROP COLUMN s.i
query I
SELECT * FROM test
----
{'j': 1}
{'j': 2}
# we cannot drop the last column
statement error
ALTER TABLE test DROP COLUMN s.j
----
last field
# does not exists
statement error
ALTER TABLE test DROP COLUMN s.v
----
does not exist
statement ok
ALTER TABLE test DROP COLUMN IF EXISTS s.v
# not a struct
statement error
ALTER TABLE test DROP COLUMN s.j.a
----
Catalog Error: Cannot drop field from column "s" - not a nested type
# field does not exist
statement error
ALTER TABLE test DROP COLUMN z.j
----
does not exist
# nested column does not exist
statement error
ALTER TABLE test DROP COLUMN s.v1.a
----
does not exist

View File

@@ -0,0 +1,36 @@
# name: test/sql/alter/struct/rename_col_nested_struct.test
# description: Test ALTER TABLE RENAME COLUMN: rename column of a nested struct
# group: [struct]
statement ok
CREATE TABLE test(s STRUCT(s2 STRUCT(v1 INT, v2 INT)))
statement ok
INSERT INTO test VALUES (ROW(ROW(1, 1))), (ROW(ROW(2, 2)))
# rename a column of a nested struct
statement ok
ALTER TABLE test RENAME s.s2.v1 TO i
query I
SELECT * FROM test
----
{'s2': {'i': 1, 'v2': 1}}
{'s2': {'i': 2, 'v2': 2}}
# already exists
statement error
ALTER TABLE test RENAME COLUMN s.s2.v2 TO i
----
already exists
# rename the entire struct
statement ok
ALTER TABLE test RENAME COLUMN s.s2 TO x
query I
SELECT * FROM test
----
{'x': {'i': 1, 'v2': 1}}
{'x': {'i': 2, 'v2': 2}}

View File

@@ -0,0 +1,60 @@
# name: test/sql/alter/struct/rename_col_struct.test
# description: Test ALTER TABLE RENAME COLUMN: rename column of a struct
# group: [struct]
statement ok
CREATE TABLE test(s STRUCT(i INTEGER, j INTEGER))
statement ok
INSERT INTO test VALUES (ROW(1, 1)), (ROW(2, 2))
# add a column to a struct
statement ok
ALTER TABLE test RENAME s.i TO v1
query I
SELECT * FROM test
----
{'v1': 1, 'j': 1}
{'v1': 2, 'j': 2}
statement ok
BEGIN
statement ok
ALTER TABLE test RENAME s.j TO v2
query I
SELECT * FROM test
----
{'v1': 1, 'v2': 1}
{'v1': 2, 'v2': 2}
statement ok
ROLLBACK
query I
SELECT * FROM test
----
{'v1': 1, 'j': 1}
{'v1': 2, 'j': 2}
statement error
ALTER TABLE test RENAME s.j TO v1
----
already exists
statement error
ALTER TABLE test RENAME s.j.x TO v2
----
Catalog Error: Cannot rename field from column "s" - not a nested type
statement error
ALTER TABLE test RENAME s.i TO v2
----
does not exist
statement error
ALTER TABLE test RENAME x.i TO v2
----
does not exist