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,48 @@
# name: test/sql/storage/partial_blocks/many_columns_alter_type.test_slow
# description: Verify that altering columns with multi-use blocks does not leak memory
# group: [partial_blocks]
load __TEST_DIR__/many_columns.db
statement ok
BEGIN TRANSACTION
statement ok
CREATE TABLE integers(i0 INTEGER, i1 INTEGER, i2 INTEGER, i3 INTEGER, i4 INTEGER, i5 INTEGER, i6 INTEGER, i7 INTEGER, i8 INTEGER, i9 INTEGER, i10 INTEGER, i11 INTEGER, i12 INTEGER, i13 INTEGER, i14 INTEGER, i15 INTEGER, i16 INTEGER, i17 INTEGER, i18 INTEGER, i19 INTEGER, i20 INTEGER, i21 INTEGER, i22 INTEGER, i23 INTEGER, i24 INTEGER, i25 INTEGER, i26 INTEGER, i27 INTEGER, i28 INTEGER, i29 INTEGER, i30 INTEGER, i31 INTEGER, i32 INTEGER, i33 INTEGER, i34 INTEGER, i35 INTEGER, i36 INTEGER, i37 INTEGER, i38 INTEGER, i39 INTEGER, i40 INTEGER, i41 INTEGER, i42 INTEGER, i43 INTEGER, i44 INTEGER, i45 INTEGER, i46 INTEGER, i47 INTEGER, i48 INTEGER, i49 INTEGER, i50 INTEGER, i51 INTEGER, i52 INTEGER, i53 INTEGER, i54 INTEGER, i55 INTEGER, i56 INTEGER, i57 INTEGER, i58 INTEGER, i59 INTEGER, i60 INTEGER, i61 INTEGER, i62 INTEGER, i63 INTEGER, i64 INTEGER, i65 INTEGER, i66 INTEGER, i67 INTEGER, i68 INTEGER, i69 INTEGER, i70 INTEGER, i71 INTEGER, i72 INTEGER, i73 INTEGER, i74 INTEGER, i75 INTEGER, i76 INTEGER, i77 INTEGER, i78 INTEGER, i79 INTEGER, i80 INTEGER, i81 INTEGER, i82 INTEGER, i83 INTEGER, i84 INTEGER, i85 INTEGER, i86 INTEGER, i87 INTEGER, i88 INTEGER, i89 INTEGER, i90 INTEGER, i91 INTEGER, i92 INTEGER, i93 INTEGER, i94 INTEGER, i95 INTEGER, i96 INTEGER, i97 INTEGER, i98 INTEGER, i99 INTEGER);
statement ok
INSERT INTO integers VALUES (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99);
statement ok
INSERT INTO integers VALUES (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100);
statement ok
COMMIT
# verify that doing this in a loop doesn't increase database size (i.e. blocks properly get added to the free list)
foreach type BIGINT INTEGER SMALLINT TINYINT BIGINT INTEGER
statement ok
BEGIN TRANSACTION
loop i 0 99
statement ok
ALTER TABLE integers ALTER i${i} SET DATA TYPE ${type}
endloop
statement ok
COMMIT
statement ok
CHECKPOINT
query I
SELECT total_blocks * block_size < 15 * 262144 FROM pragma_database_size()
----
true
endloop

View File

@@ -0,0 +1,40 @@
# name: test/sql/storage/partial_blocks/many_columns_drop_column.test_slow
# description: Verify that dropping columns with multi-use blocks does not leak memory
# group: [partial_blocks]
load __TEST_DIR__/many_columns.db
statement ok
BEGIN TRANSACTION
statement ok
CREATE TABLE integers(i0 INTEGER, i1 INTEGER, i2 INTEGER, i3 INTEGER, i4 INTEGER, i5 INTEGER, i6 INTEGER, i7 INTEGER, i8 INTEGER, i9 INTEGER, i10 INTEGER, i11 INTEGER, i12 INTEGER, i13 INTEGER, i14 INTEGER, i15 INTEGER, i16 INTEGER, i17 INTEGER, i18 INTEGER, i19 INTEGER, i20 INTEGER, i21 INTEGER, i22 INTEGER, i23 INTEGER, i24 INTEGER, i25 INTEGER, i26 INTEGER, i27 INTEGER, i28 INTEGER, i29 INTEGER, i30 INTEGER, i31 INTEGER, i32 INTEGER, i33 INTEGER, i34 INTEGER, i35 INTEGER, i36 INTEGER, i37 INTEGER, i38 INTEGER, i39 INTEGER, i40 INTEGER, i41 INTEGER, i42 INTEGER, i43 INTEGER, i44 INTEGER, i45 INTEGER, i46 INTEGER, i47 INTEGER, i48 INTEGER, i49 INTEGER, i50 INTEGER, i51 INTEGER, i52 INTEGER, i53 INTEGER, i54 INTEGER, i55 INTEGER, i56 INTEGER, i57 INTEGER, i58 INTEGER, i59 INTEGER, i60 INTEGER, i61 INTEGER, i62 INTEGER, i63 INTEGER, i64 INTEGER, i65 INTEGER, i66 INTEGER, i67 INTEGER, i68 INTEGER, i69 INTEGER, i70 INTEGER, i71 INTEGER, i72 INTEGER, i73 INTEGER, i74 INTEGER, i75 INTEGER, i76 INTEGER, i77 INTEGER, i78 INTEGER, i79 INTEGER, i80 INTEGER, i81 INTEGER, i82 INTEGER, i83 INTEGER, i84 INTEGER, i85 INTEGER, i86 INTEGER, i87 INTEGER, i88 INTEGER, i89 INTEGER, i90 INTEGER, i91 INTEGER, i92 INTEGER, i93 INTEGER, i94 INTEGER, i95 INTEGER, i96 INTEGER, i97 INTEGER, i98 INTEGER, i99 INTEGER);
statement ok
INSERT INTO integers VALUES (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99);
statement ok
INSERT INTO integers VALUES (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100);
statement ok
COMMIT
# verify that doing this in a loop doesn't increase database size (i.e. blocks properly get added to the free list)
loop i 0 99
statement ok
ALTER TABLE integers DROP COLUMN i${i}
statement ok
ALTER TABLE integers ADD COLUMN i${i} INTEGER
statement ok
CHECKPOINT
query I
SELECT total_blocks * block_size < 10 * 262144 FROM pragma_database_size()
----
true
endloop

View File

@@ -0,0 +1,79 @@
# name: test/sql/storage/partial_blocks/many_columns_drop_table.test
# description: Test dropping a table when we have many blocks
# group: [partial_blocks]
load __TEST_DIR__/many_columns.db
statement ok
BEGIN TRANSACTION
statement ok
CREATE TABLE integers(i0 INTEGER, i1 INTEGER, i2 INTEGER, i3 INTEGER, i4 INTEGER, i5 INTEGER, i6 INTEGER, i7 INTEGER, i8 INTEGER, i9 INTEGER, i10 INTEGER, i11 INTEGER, i12 INTEGER, i13 INTEGER, i14 INTEGER, i15 INTEGER, i16 INTEGER, i17 INTEGER, i18 INTEGER, i19 INTEGER, i20 INTEGER, i21 INTEGER, i22 INTEGER, i23 INTEGER, i24 INTEGER, i25 INTEGER, i26 INTEGER, i27 INTEGER, i28 INTEGER, i29 INTEGER, i30 INTEGER, i31 INTEGER, i32 INTEGER, i33 INTEGER, i34 INTEGER, i35 INTEGER, i36 INTEGER, i37 INTEGER, i38 INTEGER, i39 INTEGER, i40 INTEGER, i41 INTEGER, i42 INTEGER, i43 INTEGER, i44 INTEGER, i45 INTEGER, i46 INTEGER, i47 INTEGER, i48 INTEGER, i49 INTEGER, i50 INTEGER, i51 INTEGER, i52 INTEGER, i53 INTEGER, i54 INTEGER, i55 INTEGER, i56 INTEGER, i57 INTEGER, i58 INTEGER, i59 INTEGER, i60 INTEGER, i61 INTEGER, i62 INTEGER, i63 INTEGER, i64 INTEGER, i65 INTEGER, i66 INTEGER, i67 INTEGER, i68 INTEGER, i69 INTEGER, i70 INTEGER, i71 INTEGER, i72 INTEGER, i73 INTEGER, i74 INTEGER, i75 INTEGER, i76 INTEGER, i77 INTEGER, i78 INTEGER, i79 INTEGER, i80 INTEGER, i81 INTEGER, i82 INTEGER, i83 INTEGER, i84 INTEGER, i85 INTEGER, i86 INTEGER, i87 INTEGER, i88 INTEGER, i89 INTEGER, i90 INTEGER, i91 INTEGER, i92 INTEGER, i93 INTEGER, i94 INTEGER, i95 INTEGER, i96 INTEGER, i97 INTEGER, i98 INTEGER, i99 INTEGER);
statement ok
INSERT INTO integers VALUES (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99);
statement ok
INSERT INTO integers VALUES (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100);
statement ok
CREATE TABLE integers2(i0 INTEGER, i1 INTEGER, i2 INTEGER, i3 INTEGER, i4 INTEGER, i5 INTEGER, i6 INTEGER, i7 INTEGER, i8 INTEGER, i9 INTEGER, i10 INTEGER, i11 INTEGER, i12 INTEGER, i13 INTEGER, i14 INTEGER, i15 INTEGER, i16 INTEGER, i17 INTEGER, i18 INTEGER, i19 INTEGER, i20 INTEGER, i21 INTEGER, i22 INTEGER, i23 INTEGER, i24 INTEGER, i25 INTEGER, i26 INTEGER, i27 INTEGER, i28 INTEGER, i29 INTEGER, i30 INTEGER, i31 INTEGER, i32 INTEGER, i33 INTEGER, i34 INTEGER, i35 INTEGER, i36 INTEGER, i37 INTEGER, i38 INTEGER, i39 INTEGER, i40 INTEGER, i41 INTEGER, i42 INTEGER, i43 INTEGER, i44 INTEGER, i45 INTEGER, i46 INTEGER, i47 INTEGER, i48 INTEGER, i49 INTEGER, i50 INTEGER, i51 INTEGER, i52 INTEGER, i53 INTEGER, i54 INTEGER, i55 INTEGER, i56 INTEGER, i57 INTEGER, i58 INTEGER, i59 INTEGER, i60 INTEGER, i61 INTEGER, i62 INTEGER, i63 INTEGER, i64 INTEGER, i65 INTEGER, i66 INTEGER, i67 INTEGER, i68 INTEGER, i69 INTEGER, i70 INTEGER, i71 INTEGER, i72 INTEGER, i73 INTEGER, i74 INTEGER, i75 INTEGER, i76 INTEGER, i77 INTEGER, i78 INTEGER, i79 INTEGER, i80 INTEGER, i81 INTEGER, i82 INTEGER, i83 INTEGER, i84 INTEGER, i85 INTEGER, i86 INTEGER, i87 INTEGER, i88 INTEGER, i89 INTEGER, i90 INTEGER, i91 INTEGER, i92 INTEGER, i93 INTEGER, i94 INTEGER, i95 INTEGER, i96 INTEGER, i97 INTEGER, i98 INTEGER, i99 INTEGER);
statement ok
INSERT INTO integers2 VALUES (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99);
statement ok
INSERT INTO integers2 VALUES (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100);
statement ok
COMMIT
loop i 0 100
query I
SELECT i${i}=${i} FROM integers
----
true
false
query I
SELECT i${i}=${i}+1 FROM integers
----
false
true
query I
SELECT i${i}=${i} FROM integers2
----
true
false
query I
SELECT i${i}=${i}+1 FROM integers2
----
false
true
endloop
statement ok
DROP TABLE integers2
loop i 0 100
query I
SELECT i${i}=${i} FROM integers
----
true
false
query I
SELECT i${i}=${i}+1 FROM integers
----
false
true
endloop
statement ok
DROP TABLE integers

View File

@@ -0,0 +1,45 @@
# name: test/sql/storage/partial_blocks/many_columns_drop_table_leak.test_slow
# description: Verify that dropping tables with multi-use blocks does not leak memory
# group: [partial_blocks]
load __TEST_DIR__/many_columns.db
# verify that doing this in a loop doesn't increase database size (i.e. blocks properly get added to the free list)
loop i 0 100
statement ok
BEGIN TRANSACTION
statement ok
CREATE TABLE integers(i0 INTEGER, i1 INTEGER, i2 INTEGER, i3 INTEGER, i4 INTEGER, i5 INTEGER, i6 INTEGER, i7 INTEGER, i8 INTEGER, i9 INTEGER, i10 INTEGER, i11 INTEGER, i12 INTEGER, i13 INTEGER, i14 INTEGER, i15 INTEGER, i16 INTEGER, i17 INTEGER, i18 INTEGER, i19 INTEGER, i20 INTEGER, i21 INTEGER, i22 INTEGER, i23 INTEGER, i24 INTEGER, i25 INTEGER, i26 INTEGER, i27 INTEGER, i28 INTEGER, i29 INTEGER, i30 INTEGER, i31 INTEGER, i32 INTEGER, i33 INTEGER, i34 INTEGER, i35 INTEGER, i36 INTEGER, i37 INTEGER, i38 INTEGER, i39 INTEGER, i40 INTEGER, i41 INTEGER, i42 INTEGER, i43 INTEGER, i44 INTEGER, i45 INTEGER, i46 INTEGER, i47 INTEGER, i48 INTEGER, i49 INTEGER, i50 INTEGER, i51 INTEGER, i52 INTEGER, i53 INTEGER, i54 INTEGER, i55 INTEGER, i56 INTEGER, i57 INTEGER, i58 INTEGER, i59 INTEGER, i60 INTEGER, i61 INTEGER, i62 INTEGER, i63 INTEGER, i64 INTEGER, i65 INTEGER, i66 INTEGER, i67 INTEGER, i68 INTEGER, i69 INTEGER, i70 INTEGER, i71 INTEGER, i72 INTEGER, i73 INTEGER, i74 INTEGER, i75 INTEGER, i76 INTEGER, i77 INTEGER, i78 INTEGER, i79 INTEGER, i80 INTEGER, i81 INTEGER, i82 INTEGER, i83 INTEGER, i84 INTEGER, i85 INTEGER, i86 INTEGER, i87 INTEGER, i88 INTEGER, i89 INTEGER, i90 INTEGER, i91 INTEGER, i92 INTEGER, i93 INTEGER, i94 INTEGER, i95 INTEGER, i96 INTEGER, i97 INTEGER, i98 INTEGER, i99 INTEGER);
statement ok
INSERT INTO integers VALUES (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99);
statement ok
INSERT INTO integers VALUES (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100);
statement ok
CREATE TABLE integers2(i0 INTEGER, i1 INTEGER, i2 INTEGER, i3 INTEGER, i4 INTEGER, i5 INTEGER, i6 INTEGER, i7 INTEGER, i8 INTEGER, i9 INTEGER, i10 INTEGER, i11 INTEGER, i12 INTEGER, i13 INTEGER, i14 INTEGER, i15 INTEGER, i16 INTEGER, i17 INTEGER, i18 INTEGER, i19 INTEGER, i20 INTEGER, i21 INTEGER, i22 INTEGER, i23 INTEGER, i24 INTEGER, i25 INTEGER, i26 INTEGER, i27 INTEGER, i28 INTEGER, i29 INTEGER, i30 INTEGER, i31 INTEGER, i32 INTEGER, i33 INTEGER, i34 INTEGER, i35 INTEGER, i36 INTEGER, i37 INTEGER, i38 INTEGER, i39 INTEGER, i40 INTEGER, i41 INTEGER, i42 INTEGER, i43 INTEGER, i44 INTEGER, i45 INTEGER, i46 INTEGER, i47 INTEGER, i48 INTEGER, i49 INTEGER, i50 INTEGER, i51 INTEGER, i52 INTEGER, i53 INTEGER, i54 INTEGER, i55 INTEGER, i56 INTEGER, i57 INTEGER, i58 INTEGER, i59 INTEGER, i60 INTEGER, i61 INTEGER, i62 INTEGER, i63 INTEGER, i64 INTEGER, i65 INTEGER, i66 INTEGER, i67 INTEGER, i68 INTEGER, i69 INTEGER, i70 INTEGER, i71 INTEGER, i72 INTEGER, i73 INTEGER, i74 INTEGER, i75 INTEGER, i76 INTEGER, i77 INTEGER, i78 INTEGER, i79 INTEGER, i80 INTEGER, i81 INTEGER, i82 INTEGER, i83 INTEGER, i84 INTEGER, i85 INTEGER, i86 INTEGER, i87 INTEGER, i88 INTEGER, i89 INTEGER, i90 INTEGER, i91 INTEGER, i92 INTEGER, i93 INTEGER, i94 INTEGER, i95 INTEGER, i96 INTEGER, i97 INTEGER, i98 INTEGER, i99 INTEGER);
statement ok
INSERT INTO integers2 VALUES (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99);
statement ok
INSERT INTO integers2 VALUES (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100);
statement ok
COMMIT
statement ok
DROP TABLE integers
statement ok
DROP TABLE integers2
query I
SELECT total_blocks * block_size < 15 * 262144 FROM pragma_database_size()
----
true
endloop

View File

@@ -0,0 +1,68 @@
# name: test/sql/storage/partial_blocks/many_columns_lists.test_slow
# description: Test storing many columns with lists
# group: [partial_blocks]
load __TEST_DIR__/many_columns.db
statement ok
CREATE TABLE lists(i0 INTEGER[], i1 INTEGER[], i2 INTEGER[], i3 INTEGER[], i4 INTEGER[], i5 INTEGER[], i6 INTEGER[], i7 INTEGER[], i8 INTEGER[], i9 INTEGER[], i10 INTEGER[], i11 INTEGER[], i12 INTEGER[], i13 INTEGER[], i14 INTEGER[], i15 INTEGER[], i16 INTEGER[], i17 INTEGER[], i18 INTEGER[], i19 INTEGER[], i20 INTEGER[], i21 INTEGER[], i22 INTEGER[], i23 INTEGER[], i24 INTEGER[], i25 INTEGER[], i26 INTEGER[], i27 INTEGER[], i28 INTEGER[], i29 INTEGER[], i30 INTEGER[], i31 INTEGER[], i32 INTEGER[], i33 INTEGER[], i34 INTEGER[], i35 INTEGER[], i36 INTEGER[], i37 INTEGER[], i38 INTEGER[], i39 INTEGER[], i40 INTEGER[], i41 INTEGER[], i42 INTEGER[], i43 INTEGER[], i44 INTEGER[], i45 INTEGER[], i46 INTEGER[], i47 INTEGER[], i48 INTEGER[], i49 INTEGER[], i50 INTEGER[], i51 INTEGER[], i52 INTEGER[], i53 INTEGER[], i54 INTEGER[], i55 INTEGER[], i56 INTEGER[], i57 INTEGER[], i58 INTEGER[], i59 INTEGER[], i60 INTEGER[], i61 INTEGER[], i62 INTEGER[], i63 INTEGER[], i64 INTEGER[], i65 INTEGER[], i66 INTEGER[], i67 INTEGER[], i68 INTEGER[], i69 INTEGER[], i70 INTEGER[], i71 INTEGER[], i72 INTEGER[], i73 INTEGER[], i74 INTEGER[], i75 INTEGER[], i76 INTEGER[], i77 INTEGER[], i78 INTEGER[], i79 INTEGER[], i80 INTEGER[], i81 INTEGER[], i82 INTEGER[], i83 INTEGER[], i84 INTEGER[], i85 INTEGER[], i86 INTEGER[], i87 INTEGER[], i88 INTEGER[], i89 INTEGER[], i90 INTEGER[], i91 INTEGER[], i92 INTEGER[], i93 INTEGER[], i94 INTEGER[], i95 INTEGER[], i96 INTEGER[], i97 INTEGER[], i98 INTEGER[], i99 INTEGER[]);
statement ok
INSERT INTO lists VALUES ([0, NULL, 0], [1, NULL, 1], [2, NULL, 2], [3, NULL, 3], [4, NULL, 4], [5, NULL, 5], [6, NULL, 6], [7, NULL, 7], [8, NULL, 8], [9, NULL, 9], [10, NULL, 10], [11, NULL, 11], [12, NULL, 12], [13, NULL, 13], [14, NULL, 14], [15, NULL, 15], [16, NULL, 16], [17, NULL, 17], [18, NULL, 18], [19, NULL, 19], [20, NULL, 20], [21, NULL, 21], [22, NULL, 22], [23, NULL, 23], [24, NULL, 24], [25, NULL, 25], [26, NULL, 26], [27, NULL, 27], [28, NULL, 28], [29, NULL, 29], [30, NULL, 30], [31, NULL, 31], [32, NULL, 32], [33, NULL, 33], [34, NULL, 34], [35, NULL, 35], [36, NULL, 36], [37, NULL, 37], [38, NULL, 38], [39, NULL, 39], [40, NULL, 40], [41, NULL, 41], [42, NULL, 42], [43, NULL, 43], [44, NULL, 44], [45, NULL, 45], [46, NULL, 46], [47, NULL, 47], [48, NULL, 48], [49, NULL, 49], [50, NULL, 50], [51, NULL, 51], [52, NULL, 52], [53, NULL, 53], [54, NULL, 54], [55, NULL, 55], [56, NULL, 56], [57, NULL, 57], [58, NULL, 58], [59, NULL, 59], [60, NULL, 60], [61, NULL, 61], [62, NULL, 62], [63, NULL, 63], [64, NULL, 64], [65, NULL, 65], [66, NULL, 66], [67, NULL, 67], [68, NULL, 68], [69, NULL, 69], [70, NULL, 70], [71, NULL, 71], [72, NULL, 72], [73, NULL, 73], [74, NULL, 74], [75, NULL, 75], [76, NULL, 76], [77, NULL, 77], [78, NULL, 78], [79, NULL, 79], [80, NULL, 80], [81, NULL, 81], [82, NULL, 82], [83, NULL, 83], [84, NULL, 84], [85, NULL, 85], [86, NULL, 86], [87, NULL, 87], [88, NULL, 88], [89, NULL, 89], [90, NULL, 90], [91, NULL, 91], [92, NULL, 92], [93, NULL, 93], [94, NULL, 94], [95, NULL, 95], [96, NULL, 96], [97, NULL, 97], [98, NULL, 98], [99, NULL, 99]);
query I
SELECT total_blocks * block_size < 15 * 262144 FROM pragma_database_size()
----
true
statement ok
INSERT INTO lists VALUES ([1, NULL, 1], [2, NULL, 2], [3, NULL, 3], [4, NULL, 4], [5, NULL, 5], [6, NULL, 6], [7, NULL, 7], [8, NULL, 8], [9, NULL, 9], [10, NULL, 10], [11, NULL, 11], [12, NULL, 12], [13, NULL, 13], [14, NULL, 14], [15, NULL, 15], [16, NULL, 16], [17, NULL, 17], [18, NULL, 18], [19, NULL, 19], [20, NULL, 20], [21, NULL, 21], [22, NULL, 22], [23, NULL, 23], [24, NULL, 24], [25, NULL, 25], [26, NULL, 26], [27, NULL, 27], [28, NULL, 28], [29, NULL, 29], [30, NULL, 30], [31, NULL, 31], [32, NULL, 32], [33, NULL, 33], [34, NULL, 34], [35, NULL, 35], [36, NULL, 36], [37, NULL, 37], [38, NULL, 38], [39, NULL, 39], [40, NULL, 40], [41, NULL, 41], [42, NULL, 42], [43, NULL, 43], [44, NULL, 44], [45, NULL, 45], [46, NULL, 46], [47, NULL, 47], [48, NULL, 48], [49, NULL, 49], [50, NULL, 50], [51, NULL, 51], [52, NULL, 52], [53, NULL, 53], [54, NULL, 54], [55, NULL, 55], [56, NULL, 56], [57, NULL, 57], [58, NULL, 58], [59, NULL, 59], [60, NULL, 60], [61, NULL, 61], [62, NULL, 62], [63, NULL, 63], [64, NULL, 64], [65, NULL, 65], [66, NULL, 66], [67, NULL, 67], [68, NULL, 68], [69, NULL, 69], [70, NULL, 70], [71, NULL, 71], [72, NULL, 72], [73, NULL, 73], [74, NULL, 74], [75, NULL, 75], [76, NULL, 76], [77, NULL, 77], [78, NULL, 78], [79, NULL, 79], [80, NULL, 80], [81, NULL, 81], [82, NULL, 82], [83, NULL, 83], [84, NULL, 84], [85, NULL, 85], [86, NULL, 86], [87, NULL, 87], [88, NULL, 88], [89, NULL, 89], [90, NULL, 90], [91, NULL, 91], [92, NULL, 92], [93, NULL, 93], [94, NULL, 94], [95, NULL, 95], [96, NULL, 96], [97, NULL, 97], [98, NULL, 98], [99, NULL, 99], [100, NULL, 100]);
query I
select count(*) from pragma_storage_info('lists') where block_id IS NULL;
----
0
query I nosort q0
SELECT total_blocks FROM pragma_database_size()
----
loop i 0 100
query III
SELECT i${i}[1]=${i}, i${i}[2]=${i}, i${i}[3]=${i} FROM lists
----
true NULL true
false NULL false
query III
SELECT i${i}[1]=${i}+1, i${i}[2]=${i}+1, i${i}[3]=${i}+1 FROM lists
----
false NULL false
true NULL true
endloop
restart
loop i 0 100
query III
SELECT i${i}[1]=${i}, i${i}[2]=${i}, i${i}[3]=${i} FROM lists
----
true NULL true
false NULL false
query III
SELECT i${i}[1]=${i}+1, i${i}[2]=${i}+1, i${i}[3]=${i}+1 FROM lists
----
false NULL false
true NULL true
endloop
query I nosort q0
SELECT total_blocks FROM pragma_database_size()
----

View File

@@ -0,0 +1,61 @@
# name: test/sql/storage/partial_blocks/many_columns_rle.test
# description: Test storing many columns with RLE
# group: [partial_blocks]
load __TEST_DIR__/many_columns.db
statement ok
PRAGMA force_compression='rle'
statement ok
CREATE TABLE integers(i0 INTEGER, i1 INTEGER, i2 INTEGER, i3 INTEGER, i4 INTEGER, i5 INTEGER, i6 INTEGER, i7 INTEGER, i8 INTEGER, i9 INTEGER, i10 INTEGER, i11 INTEGER, i12 INTEGER, i13 INTEGER, i14 INTEGER, i15 INTEGER, i16 INTEGER, i17 INTEGER, i18 INTEGER, i19 INTEGER, i20 INTEGER, i21 INTEGER, i22 INTEGER, i23 INTEGER, i24 INTEGER, i25 INTEGER, i26 INTEGER, i27 INTEGER, i28 INTEGER, i29 INTEGER, i30 INTEGER, i31 INTEGER, i32 INTEGER, i33 INTEGER, i34 INTEGER, i35 INTEGER, i36 INTEGER, i37 INTEGER, i38 INTEGER, i39 INTEGER, i40 INTEGER, i41 INTEGER, i42 INTEGER, i43 INTEGER, i44 INTEGER, i45 INTEGER, i46 INTEGER, i47 INTEGER, i48 INTEGER, i49 INTEGER, i50 INTEGER, i51 INTEGER, i52 INTEGER, i53 INTEGER, i54 INTEGER, i55 INTEGER, i56 INTEGER, i57 INTEGER, i58 INTEGER, i59 INTEGER, i60 INTEGER, i61 INTEGER, i62 INTEGER, i63 INTEGER, i64 INTEGER, i65 INTEGER, i66 INTEGER, i67 INTEGER, i68 INTEGER, i69 INTEGER, i70 INTEGER, i71 INTEGER, i72 INTEGER, i73 INTEGER, i74 INTEGER, i75 INTEGER, i76 INTEGER, i77 INTEGER, i78 INTEGER, i79 INTEGER, i80 INTEGER, i81 INTEGER, i82 INTEGER, i83 INTEGER, i84 INTEGER, i85 INTEGER, i86 INTEGER, i87 INTEGER, i88 INTEGER, i89 INTEGER, i90 INTEGER, i91 INTEGER, i92 INTEGER, i93 INTEGER, i94 INTEGER, i95 INTEGER, i96 INTEGER, i97 INTEGER, i98 INTEGER, i99 INTEGER);
statement ok
INSERT INTO integers VALUES (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99);
query I
SELECT total_blocks * block_size < 10 * 262144 FROM pragma_database_size()
----
true
statement ok
INSERT INTO integers VALUES (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100);
loop i 0 100
query I
SELECT i${i}=${i} FROM integers
----
true
false
query I
SELECT i${i}=${i}+1 FROM integers
----
false
true
endloop
restart
loop i 0 100
query I
SELECT i${i}=${i} FROM integers
----
true
false
query I
SELECT i${i}=${i}+1 FROM integers
----
false
true
endloop
query I
SELECT total_blocks * block_size < 10 * 262144 FROM pragma_database_size()
----
true

View File

@@ -0,0 +1,71 @@
# name: test/sql/storage/partial_blocks/many_columns_storage.test
# description: Test storing many columns
# group: [partial_blocks]
load __TEST_DIR__/many_columns.db
statement ok
CREATE TABLE integers(i0 INTEGER, i1 INTEGER, i2 INTEGER, i3 INTEGER, i4 INTEGER, i5 INTEGER, i6 INTEGER, i7 INTEGER, i8 INTEGER, i9 INTEGER, i10 INTEGER, i11 INTEGER, i12 INTEGER, i13 INTEGER, i14 INTEGER, i15 INTEGER, i16 INTEGER, i17 INTEGER, i18 INTEGER, i19 INTEGER, i20 INTEGER, i21 INTEGER, i22 INTEGER, i23 INTEGER, i24 INTEGER, i25 INTEGER, i26 INTEGER, i27 INTEGER, i28 INTEGER, i29 INTEGER, i30 INTEGER, i31 INTEGER, i32 INTEGER, i33 INTEGER, i34 INTEGER, i35 INTEGER, i36 INTEGER, i37 INTEGER, i38 INTEGER, i39 INTEGER, i40 INTEGER, i41 INTEGER, i42 INTEGER, i43 INTEGER, i44 INTEGER, i45 INTEGER, i46 INTEGER, i47 INTEGER, i48 INTEGER, i49 INTEGER, i50 INTEGER, i51 INTEGER, i52 INTEGER, i53 INTEGER, i54 INTEGER, i55 INTEGER, i56 INTEGER, i57 INTEGER, i58 INTEGER, i59 INTEGER, i60 INTEGER, i61 INTEGER, i62 INTEGER, i63 INTEGER, i64 INTEGER, i65 INTEGER, i66 INTEGER, i67 INTEGER, i68 INTEGER, i69 INTEGER, i70 INTEGER, i71 INTEGER, i72 INTEGER, i73 INTEGER, i74 INTEGER, i75 INTEGER, i76 INTEGER, i77 INTEGER, i78 INTEGER, i79 INTEGER, i80 INTEGER, i81 INTEGER, i82 INTEGER, i83 INTEGER, i84 INTEGER, i85 INTEGER, i86 INTEGER, i87 INTEGER, i88 INTEGER, i89 INTEGER, i90 INTEGER, i91 INTEGER, i92 INTEGER, i93 INTEGER, i94 INTEGER, i95 INTEGER, i96 INTEGER, i97 INTEGER, i98 INTEGER, i99 INTEGER);
statement ok
INSERT INTO integers VALUES (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99);
query I
SELECT total_blocks * block_size < 10 * 262144 FROM pragma_database_size()
----
true
statement ok
INSERT INTO integers VALUES (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100);
statement ok
CHECKPOINT
query I
select count(*) from pragma_storage_info('integers') where block_id IS NULL;
----
0
query I nosort q0
SELECT total_blocks FROM pragma_database_size()
----
loop i 0 100
query I
SELECT i${i}=${i} FROM integers
----
true
false
query I
SELECT i${i}=${i}+1 FROM integers
----
false
true
endloop
restart
loop i 0 100
query I
SELECT i${i}=${i} FROM integers
----
true
false
query I
SELECT i${i}=${i}+1 FROM integers
----
false
true
endloop
query I nosort q0
SELECT total_blocks FROM pragma_database_size()
----

View File

@@ -0,0 +1,58 @@
# name: test/sql/storage/partial_blocks/many_columns_strings.test
# description: Test storing many columns
# group: [partial_blocks]
load __TEST_DIR__/many_columns.db
statement ok
CREATE TABLE strings(i0 VARCHAR, i1 VARCHAR, i2 VARCHAR, i3 VARCHAR, i4 VARCHAR, i5 VARCHAR, i6 VARCHAR, i7 VARCHAR, i8 VARCHAR, i9 VARCHAR, i10 VARCHAR, i11 VARCHAR, i12 VARCHAR, i13 VARCHAR, i14 VARCHAR, i15 VARCHAR, i16 VARCHAR, i17 VARCHAR, i18 VARCHAR, i19 VARCHAR, i20 VARCHAR, i21 VARCHAR, i22 VARCHAR, i23 VARCHAR, i24 VARCHAR, i25 VARCHAR, i26 VARCHAR, i27 VARCHAR, i28 VARCHAR, i29 VARCHAR, i30 VARCHAR, i31 VARCHAR, i32 VARCHAR, i33 VARCHAR, i34 VARCHAR, i35 VARCHAR, i36 VARCHAR, i37 VARCHAR, i38 VARCHAR, i39 VARCHAR, i40 VARCHAR, i41 VARCHAR, i42 VARCHAR, i43 VARCHAR, i44 VARCHAR, i45 VARCHAR, i46 VARCHAR, i47 VARCHAR, i48 VARCHAR, i49 VARCHAR, i50 VARCHAR, i51 VARCHAR, i52 VARCHAR, i53 VARCHAR, i54 VARCHAR, i55 VARCHAR, i56 VARCHAR, i57 VARCHAR, i58 VARCHAR, i59 VARCHAR, i60 VARCHAR, i61 VARCHAR, i62 VARCHAR, i63 VARCHAR, i64 VARCHAR, i65 VARCHAR, i66 VARCHAR, i67 VARCHAR, i68 VARCHAR, i69 VARCHAR, i70 VARCHAR, i71 VARCHAR, i72 VARCHAR, i73 VARCHAR, i74 VARCHAR, i75 VARCHAR, i76 VARCHAR, i77 VARCHAR, i78 VARCHAR, i79 VARCHAR, i80 VARCHAR, i81 VARCHAR, i82 VARCHAR, i83 VARCHAR, i84 VARCHAR, i85 VARCHAR, i86 VARCHAR, i87 VARCHAR, i88 VARCHAR, i89 VARCHAR, i90 VARCHAR, i91 VARCHAR, i92 VARCHAR, i93 VARCHAR, i94 VARCHAR, i95 VARCHAR, i96 VARCHAR, i97 VARCHAR, i98 VARCHAR, i99 VARCHAR);
statement ok
INSERT INTO strings VALUES (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99);
query I
SELECT total_blocks * block_size < 15 * 262144 FROM pragma_database_size()
----
true
statement ok
INSERT INTO strings VALUES (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100);
loop i 0 100
query I
SELECT i${i}='${i}' FROM strings
----
true
false
query I
SELECT i${i}=(${i}+1)::VARCHAR FROM strings
----
false
true
endloop
restart
loop i 0 100
query I
SELECT i${i}=${i}::VARCHAR FROM strings
----
true
false
query I
SELECT i${i}=(${i}+1)::VARCHAR FROM strings
----
false
true
endloop
query I
SELECT total_blocks * block_size < 15 * 262144 FROM pragma_database_size()
----
true

View File

@@ -0,0 +1,74 @@
# name: test/sql/storage/partial_blocks/many_columns_structs.test_slow
# description: Test storing many columns of structs
# group: [partial_blocks]
load __TEST_DIR__/many_columns.db
statement ok
CREATE TABLE structs(i0 ROW(i INTEGER, j INTEGER), i1 ROW(i INTEGER, j INTEGER), i2 ROW(i INTEGER, j INTEGER), i3 ROW(i INTEGER, j INTEGER), i4 ROW(i INTEGER, j INTEGER), i5 ROW(i INTEGER, j INTEGER), i6 ROW(i INTEGER, j INTEGER), i7 ROW(i INTEGER, j INTEGER), i8 ROW(i INTEGER, j INTEGER), i9 ROW(i INTEGER, j INTEGER), i10 ROW(i INTEGER, j INTEGER), i11 ROW(i INTEGER, j INTEGER), i12 ROW(i INTEGER, j INTEGER), i13 ROW(i INTEGER, j INTEGER), i14 ROW(i INTEGER, j INTEGER), i15 ROW(i INTEGER, j INTEGER), i16 ROW(i INTEGER, j INTEGER), i17 ROW(i INTEGER, j INTEGER), i18 ROW(i INTEGER, j INTEGER), i19 ROW(i INTEGER, j INTEGER), i20 ROW(i INTEGER, j INTEGER), i21 ROW(i INTEGER, j INTEGER), i22 ROW(i INTEGER, j INTEGER), i23 ROW(i INTEGER, j INTEGER), i24 ROW(i INTEGER, j INTEGER), i25 ROW(i INTEGER, j INTEGER), i26 ROW(i INTEGER, j INTEGER), i27 ROW(i INTEGER, j INTEGER), i28 ROW(i INTEGER, j INTEGER), i29 ROW(i INTEGER, j INTEGER), i30 ROW(i INTEGER, j INTEGER), i31 ROW(i INTEGER, j INTEGER), i32 ROW(i INTEGER, j INTEGER), i33 ROW(i INTEGER, j INTEGER), i34 ROW(i INTEGER, j INTEGER), i35 ROW(i INTEGER, j INTEGER), i36 ROW(i INTEGER, j INTEGER), i37 ROW(i INTEGER, j INTEGER), i38 ROW(i INTEGER, j INTEGER), i39 ROW(i INTEGER, j INTEGER), i40 ROW(i INTEGER, j INTEGER), i41 ROW(i INTEGER, j INTEGER), i42 ROW(i INTEGER, j INTEGER), i43 ROW(i INTEGER, j INTEGER), i44 ROW(i INTEGER, j INTEGER), i45 ROW(i INTEGER, j INTEGER), i46 ROW(i INTEGER, j INTEGER), i47 ROW(i INTEGER, j INTEGER), i48 ROW(i INTEGER, j INTEGER), i49 ROW(i INTEGER, j INTEGER), i50 ROW(i INTEGER, j INTEGER), i51 ROW(i INTEGER, j INTEGER), i52 ROW(i INTEGER, j INTEGER), i53 ROW(i INTEGER, j INTEGER), i54 ROW(i INTEGER, j INTEGER), i55 ROW(i INTEGER, j INTEGER), i56 ROW(i INTEGER, j INTEGER), i57 ROW(i INTEGER, j INTEGER), i58 ROW(i INTEGER, j INTEGER), i59 ROW(i INTEGER, j INTEGER), i60 ROW(i INTEGER, j INTEGER), i61 ROW(i INTEGER, j INTEGER), i62 ROW(i INTEGER, j INTEGER), i63 ROW(i INTEGER, j INTEGER), i64 ROW(i INTEGER, j INTEGER), i65 ROW(i INTEGER, j INTEGER), i66 ROW(i INTEGER, j INTEGER), i67 ROW(i INTEGER, j INTEGER), i68 ROW(i INTEGER, j INTEGER), i69 ROW(i INTEGER, j INTEGER), i70 ROW(i INTEGER, j INTEGER), i71 ROW(i INTEGER, j INTEGER), i72 ROW(i INTEGER, j INTEGER), i73 ROW(i INTEGER, j INTEGER), i74 ROW(i INTEGER, j INTEGER), i75 ROW(i INTEGER, j INTEGER), i76 ROW(i INTEGER, j INTEGER), i77 ROW(i INTEGER, j INTEGER), i78 ROW(i INTEGER, j INTEGER), i79 ROW(i INTEGER, j INTEGER), i80 ROW(i INTEGER, j INTEGER), i81 ROW(i INTEGER, j INTEGER), i82 ROW(i INTEGER, j INTEGER), i83 ROW(i INTEGER, j INTEGER), i84 ROW(i INTEGER, j INTEGER), i85 ROW(i INTEGER, j INTEGER), i86 ROW(i INTEGER, j INTEGER), i87 ROW(i INTEGER, j INTEGER), i88 ROW(i INTEGER, j INTEGER), i89 ROW(i INTEGER, j INTEGER), i90 ROW(i INTEGER, j INTEGER), i91 ROW(i INTEGER, j INTEGER), i92 ROW(i INTEGER, j INTEGER), i93 ROW(i INTEGER, j INTEGER), i94 ROW(i INTEGER, j INTEGER), i95 ROW(i INTEGER, j INTEGER), i96 ROW(i INTEGER, j INTEGER), i97 ROW(i INTEGER, j INTEGER), i98 ROW(i INTEGER, j INTEGER), i99 ROW(i INTEGER, j INTEGER));
statement ok
INSERT INTO structs VALUES (ROW(0, 0), ROW(1, 1), ROW(2, 2), ROW(3, 3), ROW(4, 4), ROW(5, 5), ROW(6, 6), ROW(7, 7), ROW(8, 8), ROW(9, 9), ROW(10, 10), ROW(11, 11), ROW(12, 12), ROW(13, 13), ROW(14, 14), ROW(15, 15), ROW(16, 16), ROW(17, 17), ROW(18, 18), ROW(19, 19), ROW(20, 20), ROW(21, 21), ROW(22, 22), ROW(23, 23), ROW(24, 24), ROW(25, 25), ROW(26, 26), ROW(27, 27), ROW(28, 28), ROW(29, 29), ROW(30, 30), ROW(31, 31), ROW(32, 32), ROW(33, 33), ROW(34, 34), ROW(35, 35), ROW(36, 36), ROW(37, 37), ROW(38, 38), ROW(39, 39), ROW(40, 40), ROW(41, 41), ROW(42, 42), ROW(43, 43), ROW(44, 44), ROW(45, 45), ROW(46, 46), ROW(47, 47), ROW(48, 48), ROW(49, 49), ROW(50, 50), ROW(51, 51), ROW(52, 52), ROW(53, 53), ROW(54, 54), ROW(55, 55), ROW(56, 56), ROW(57, 57), ROW(58, 58), ROW(59, 59), ROW(60, 60), ROW(61, 61), ROW(62, 62), ROW(63, 63), ROW(64, 64), ROW(65, 65), ROW(66, 66), ROW(67, 67), ROW(68, 68), ROW(69, 69), ROW(70, 70), ROW(71, 71), ROW(72, 72), ROW(73, 73), ROW(74, 74), ROW(75, 75), ROW(76, 76), ROW(77, 77), ROW(78, 78), ROW(79, 79), ROW(80, 80), ROW(81, 81), ROW(82, 82), ROW(83, 83), ROW(84, 84), ROW(85, 85), ROW(86, 86), ROW(87, 87), ROW(88, 88), ROW(89, 89), ROW(90, 90), ROW(91, 91), ROW(92, 92), ROW(93, 93), ROW(94, 94), ROW(95, 95), ROW(96, 96), ROW(97, 97), ROW(98, 98), ROW(99, 99));
statement ok
CHECKPOINT
query I
SELECT total_blocks * block_size < 15 * 262144 FROM pragma_database_size()
----
true
statement ok
INSERT INTO structs VALUES (ROW(1, 1), ROW(2, 2), ROW(3, 3), ROW(4, 4), ROW(5, 5), ROW(6, 6), ROW(7, 7), ROW(8, 8), ROW(9, 9), ROW(10, 10), ROW(11, 11), ROW(12, 12), ROW(13, 13), ROW(14, 14), ROW(15, 15), ROW(16, 16), ROW(17, 17), ROW(18, 18), ROW(19, 19), ROW(20, 20), ROW(21, 21), ROW(22, 22), ROW(23, 23), ROW(24, 24), ROW(25, 25), ROW(26, 26), ROW(27, 27), ROW(28, 28), ROW(29, 29), ROW(30, 30), ROW(31, 31), ROW(32, 32), ROW(33, 33), ROW(34, 34), ROW(35, 35), ROW(36, 36), ROW(37, 37), ROW(38, 38), ROW(39, 39), ROW(40, 40), ROW(41, 41), ROW(42, 42), ROW(43, 43), ROW(44, 44), ROW(45, 45), ROW(46, 46), ROW(47, 47), ROW(48, 48), ROW(49, 49), ROW(50, 50), ROW(51, 51), ROW(52, 52), ROW(53, 53), ROW(54, 54), ROW(55, 55), ROW(56, 56), ROW(57, 57), ROW(58, 58), ROW(59, 59), ROW(60, 60), ROW(61, 61), ROW(62, 62), ROW(63, 63), ROW(64, 64), ROW(65, 65), ROW(66, 66), ROW(67, 67), ROW(68, 68), ROW(69, 69), ROW(70, 70), ROW(71, 71), ROW(72, 72), ROW(73, 73), ROW(74, 74), ROW(75, 75), ROW(76, 76), ROW(77, 77), ROW(78, 78), ROW(79, 79), ROW(80, 80), ROW(81, 81), ROW(82, 82), ROW(83, 83), ROW(84, 84), ROW(85, 85), ROW(86, 86), ROW(87, 87), ROW(88, 88), ROW(89, 89), ROW(90, 90), ROW(91, 91), ROW(92, 92), ROW(93, 93), ROW(94, 94), ROW(95, 95), ROW(96, 96), ROW(97, 97), ROW(98, 98), ROW(99, 99), ROW(100, 100));
statement ok
CHECKPOINT
query I
select count(*) from pragma_storage_info('structs') where block_id IS NULL;
----
0
query I nosort q0
SELECT total_blocks FROM pragma_database_size()
----
loop i 0 100
query II
SELECT i${i}['i']=${i}, i${i}['j']=${i} FROM structs
----
true true
false false
query II
SELECT i${i}['i']=${i}+1, i${i}['j']=${i}+1 FROM structs
----
false false
true true
endloop
restart
loop i 0 100
query II
SELECT i${i}['i']=${i}, i${i}['j']=${i} FROM structs
----
true true
false false
query II
SELECT i${i}['i']=${i}+1, i${i}['j']=${i}+1 FROM structs
----
false false
true true
endloop
query I nosort q0
SELECT total_blocks FROM pragma_database_size()
----

View File

@@ -0,0 +1,65 @@
# name: test/sql/storage/partial_blocks/many_columns_validity.test
# description: Test storing many columns
# group: [partial_blocks]
load __TEST_DIR__/many_columns.db
statement ok
CREATE TABLE integers(i0 INTEGER, i1 INTEGER, i2 INTEGER, i3 INTEGER, i4 INTEGER, i5 INTEGER, i6 INTEGER, i7 INTEGER, i8 INTEGER, i9 INTEGER, i10 INTEGER, i11 INTEGER, i12 INTEGER, i13 INTEGER, i14 INTEGER, i15 INTEGER, i16 INTEGER, i17 INTEGER, i18 INTEGER, i19 INTEGER, i20 INTEGER, i21 INTEGER, i22 INTEGER, i23 INTEGER, i24 INTEGER, i25 INTEGER, i26 INTEGER, i27 INTEGER, i28 INTEGER, i29 INTEGER, i30 INTEGER, i31 INTEGER, i32 INTEGER, i33 INTEGER, i34 INTEGER, i35 INTEGER, i36 INTEGER, i37 INTEGER, i38 INTEGER, i39 INTEGER, i40 INTEGER, i41 INTEGER, i42 INTEGER, i43 INTEGER, i44 INTEGER, i45 INTEGER, i46 INTEGER, i47 INTEGER, i48 INTEGER, i49 INTEGER, i50 INTEGER, i51 INTEGER, i52 INTEGER, i53 INTEGER, i54 INTEGER, i55 INTEGER, i56 INTEGER, i57 INTEGER, i58 INTEGER, i59 INTEGER, i60 INTEGER, i61 INTEGER, i62 INTEGER, i63 INTEGER, i64 INTEGER, i65 INTEGER, i66 INTEGER, i67 INTEGER, i68 INTEGER, i69 INTEGER, i70 INTEGER, i71 INTEGER, i72 INTEGER, i73 INTEGER, i74 INTEGER, i75 INTEGER, i76 INTEGER, i77 INTEGER, i78 INTEGER, i79 INTEGER, i80 INTEGER, i81 INTEGER, i82 INTEGER, i83 INTEGER, i84 INTEGER, i85 INTEGER, i86 INTEGER, i87 INTEGER, i88 INTEGER, i89 INTEGER, i90 INTEGER, i91 INTEGER, i92 INTEGER, i93 INTEGER, i94 INTEGER, i95 INTEGER, i96 INTEGER, i97 INTEGER, i98 INTEGER, i99 INTEGER);
statement ok
INSERT INTO integers VALUES (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99);
query I
SELECT total_blocks * block_size < 15 * 262144 FROM pragma_database_size()
----
true
statement ok
INSERT INTO integers VALUES (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100);
statement ok
INSERT INTO integers (i1) VALUES (NULL);
loop i 0 100
query I
SELECT i${i}=${i} FROM integers
----
true
false
NULL
query I
SELECT i${i}=${i}+1 FROM integers
----
false
true
NULL
endloop
restart
loop i 0 100
query I
SELECT i${i}=${i} FROM integers
----
true
false
NULL
query I
SELECT i${i}=${i}+1 FROM integers
----
false
true
NULL
endloop
query I
SELECT total_blocks * block_size < 15 * 262144 FROM pragma_database_size()
----
true