diff --git a/crates/squawk_parser/src/grammar.rs b/crates/squawk_parser/src/grammar.rs index 5b6c039f..b705ef46 100644 --- a/crates/squawk_parser/src/grammar.rs +++ b/crates/squawk_parser/src/grammar.rs @@ -7588,6 +7588,10 @@ fn alter_subscription(p: &mut Parser<'_>) -> CompletedMarker { p.bump(CONNECTION_KW); string_literal(p); } + SERVER_KW => { + p.bump(SERVER_KW); + name_ref(p); + } SET_KW if p.nth_at(1, L_PAREN) => { set_options(p); } @@ -7623,7 +7627,7 @@ fn alter_subscription(p: &mut Parser<'_>) -> CompletedMarker { } _ => { p.error( - "expected CONNECTION, SET, ADD, DROP, REFRESH, ENABLE, DISABLE, SKIP, OWNER or RENAME", + "expected CONNECTION, SERVER, SET, ADD, DROP, REFRESH, ENABLE, DISABLE, SKIP, OWNER or RENAME", ); } } @@ -8851,15 +8855,15 @@ fn opt_fdw_option(p: &mut Parser<'_>) -> bool { } true } - HANDLER_KW | VALIDATOR_KW => { + CONNECTION_KW | HANDLER_KW | VALIDATOR_KW => { p.bump_any(); path_name_ref(p); true } NO_KW => { p.bump(NO_KW); - if !p.eat(HANDLER_KW) && !p.eat(VALIDATOR_KW) { - p.error("expected HANDLER or VALIDATOR") + if !p.eat(CONNECTION_KW) && !p.eat(HANDLER_KW) && !p.eat(VALIDATOR_KW) { + p.error("expected CONNECTION, HANDLER or VALIDATOR") } true } @@ -9433,8 +9437,13 @@ fn create_subscription(p: &mut Parser<'_>) -> CompletedMarker { p.bump(CREATE_KW); p.bump(SUBSCRIPTION_KW); name(p); - p.expect(CONNECTION_KW); - string_literal(p); + if p.at(SERVER_KW) { + p.bump(SERVER_KW); + name_ref(p); + } else { + p.expect(CONNECTION_KW); + string_literal(p); + } p.expect(PUBLICATION_KW); name_ref_list(p); opt_with_params(p); diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_advisory_lock.snap b/crates/squawk_parser/tests/snapshots/tests__regression_advisory_lock.snap index 689a0d54..eaec8937 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_advisory_lock.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_advisory_lock.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/advisory_lock.sql +input_file: postgres/regression_suite/advisory_lock.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_aggregates.snap b/crates/squawk_parser/tests/snapshots/tests__regression_aggregates.snap index ba8c0d0d..d51ee21e 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_aggregates.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_aggregates.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/aggregates.sql +input_file: postgres/regression_suite/aggregates.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_alter_generic.snap b/crates/squawk_parser/tests/snapshots/tests__regression_alter_generic.snap index 926fe3a9..baa3e710 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_alter_generic.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_alter_generic.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/alter_generic.sql +input_file: postgres/regression_suite/alter_generic.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_alter_operator.snap b/crates/squawk_parser/tests/snapshots/tests__regression_alter_operator.snap index 5b2adad8..0b50a2dd 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_alter_operator.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_alter_operator.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/alter_operator.sql +input_file: postgres/regression_suite/alter_operator.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_alter_table.snap b/crates/squawk_parser/tests/snapshots/tests__regression_alter_table.snap index b850c19b..c5da8de4 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_alter_table.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_alter_table.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/alter_table.sql +input_file: postgres/regression_suite/alter_table.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_amutils.snap b/crates/squawk_parser/tests/snapshots/tests__regression_amutils.snap index f18c603e..d35acd49 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_amutils.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_amutils.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/amutils.sql +input_file: postgres/regression_suite/amutils.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_arrays.snap b/crates/squawk_parser/tests/snapshots/tests__regression_arrays.snap index 471c6e37..733e272c 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_arrays.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_arrays.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/arrays.sql +input_file: postgres/regression_suite/arrays.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_async.snap b/crates/squawk_parser/tests/snapshots/tests__regression_async.snap index 36f1deeb..a1783d1a 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_async.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_async.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/async.sql +input_file: postgres/regression_suite/async.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_bit.snap b/crates/squawk_parser/tests/snapshots/tests__regression_bit.snap index 3a7503cd..774e68b2 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_bit.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_bit.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/bit.sql +input_file: postgres/regression_suite/bit.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_bitmapops.snap b/crates/squawk_parser/tests/snapshots/tests__regression_bitmapops.snap index f8be48cb..b2cc000a 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_bitmapops.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_bitmapops.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/bitmapops.sql +input_file: postgres/regression_suite/bitmapops.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_boolean.snap b/crates/squawk_parser/tests/snapshots/tests__regression_boolean.snap index 23c0cc4e..71bc865c 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_boolean.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_boolean.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/boolean.sql +input_file: postgres/regression_suite/boolean.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_box.snap b/crates/squawk_parser/tests/snapshots/tests__regression_box.snap index d2938b4e..79c37dea 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_box.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_box.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/box.sql +input_file: postgres/regression_suite/box.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_brin.snap b/crates/squawk_parser/tests/snapshots/tests__regression_brin.snap index be85702b..0a43d8c1 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_brin.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_brin.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/brin.sql +input_file: postgres/regression_suite/brin.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_brin_bloom.snap b/crates/squawk_parser/tests/snapshots/tests__regression_brin_bloom.snap index 84f897a2..15d2644d 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_brin_bloom.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_brin_bloom.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/brin_bloom.sql +input_file: postgres/regression_suite/brin_bloom.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_brin_multi.snap b/crates/squawk_parser/tests/snapshots/tests__regression_brin_multi.snap index a85f5d4a..73863100 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_brin_multi.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_brin_multi.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/brin_multi.sql +input_file: postgres/regression_suite/brin_multi.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_btree_index.snap b/crates/squawk_parser/tests/snapshots/tests__regression_btree_index.snap index 39868b2d..4dc79c3d 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_btree_index.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_btree_index.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/btree_index.sql +input_file: postgres/regression_suite/btree_index.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_case.snap b/crates/squawk_parser/tests/snapshots/tests__regression_case.snap index 9f3fb0cd..f6597b11 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_case.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_case.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/case.sql +input_file: postgres/regression_suite/case.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_char.snap b/crates/squawk_parser/tests/snapshots/tests__regression_char.snap index 225876b3..eb8b567a 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_char.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_char.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/char.sql +input_file: postgres/regression_suite/char.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_circle.snap b/crates/squawk_parser/tests/snapshots/tests__regression_circle.snap index 9e051281..cd35de0f 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_circle.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_circle.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/circle.sql +input_file: postgres/regression_suite/circle.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_cluster.snap b/crates/squawk_parser/tests/snapshots/tests__regression_cluster.snap index 016ae338..ae2f26a3 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_cluster.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_cluster.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/cluster.sql +input_file: postgres/regression_suite/cluster.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_collate.icu.utf8.snap b/crates/squawk_parser/tests/snapshots/tests__regression_collate.icu.utf8.snap index b5e597fa..0e276046 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_collate.icu.utf8.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_collate.icu.utf8.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/collate.icu.utf8.sql +input_file: postgres/regression_suite/collate.icu.utf8.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_collate.linux.utf8.snap b/crates/squawk_parser/tests/snapshots/tests__regression_collate.linux.utf8.snap index 2a7059ed..3ca17b56 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_collate.linux.utf8.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_collate.linux.utf8.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/collate.linux.utf8.sql +input_file: postgres/regression_suite/collate.linux.utf8.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_collate.snap b/crates/squawk_parser/tests/snapshots/tests__regression_collate.snap index b681c5ab..2698466b 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_collate.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_collate.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/collate.sql +input_file: postgres/regression_suite/collate.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_collate.utf8.snap b/crates/squawk_parser/tests/snapshots/tests__regression_collate.utf8.snap index 84d02cfe..eb77b1b5 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_collate.utf8.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_collate.utf8.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/collate.utf8.sql +input_file: postgres/regression_suite/collate.utf8.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_combocid.snap b/crates/squawk_parser/tests/snapshots/tests__regression_combocid.snap index e55d1779..9da47593 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_combocid.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_combocid.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/combocid.sql +input_file: postgres/regression_suite/combocid.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_comments.snap b/crates/squawk_parser/tests/snapshots/tests__regression_comments.snap index be7ab760..e92f9d02 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_comments.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_comments.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/comments.sql +input_file: postgres/regression_suite/comments.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_compression.snap b/crates/squawk_parser/tests/snapshots/tests__regression_compression.snap index d71f4312..22b066ab 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_compression.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_compression.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/compression.sql +input_file: postgres/regression_suite/compression.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_compression_lz4.snap b/crates/squawk_parser/tests/snapshots/tests__regression_compression_lz4.snap index 92334982..f6a1d9be 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_compression_lz4.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_compression_lz4.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/compression_lz4.sql +input_file: postgres/regression_suite/compression_lz4.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_constraints.snap b/crates/squawk_parser/tests/snapshots/tests__regression_constraints.snap index 62874bce..373c523a 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_constraints.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_constraints.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/constraints.sql +input_file: postgres/regression_suite/constraints.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_conversion.snap b/crates/squawk_parser/tests/snapshots/tests__regression_conversion.snap index 3764dae8..8b5d4e17 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_conversion.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_conversion.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/conversion.sql +input_file: postgres/regression_suite/conversion.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_copy.snap b/crates/squawk_parser/tests/snapshots/tests__regression_copy.snap index ff03b546..424ce372 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_copy.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_copy.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/copy.sql +input_file: postgres/regression_suite/copy.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_copy2.snap b/crates/squawk_parser/tests/snapshots/tests__regression_copy2.snap index c8c9ee1a..2aa9d9e9 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_copy2.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_copy2.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/copy2.sql +input_file: postgres/regression_suite/copy2.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_copydml.snap b/crates/squawk_parser/tests/snapshots/tests__regression_copydml.snap index 2151e81d..e90dd94a 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_copydml.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_copydml.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/copydml.sql +input_file: postgres/regression_suite/copydml.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_copyencoding.snap b/crates/squawk_parser/tests/snapshots/tests__regression_copyencoding.snap index 00849ea4..f8d1b854 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_copyencoding.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_copyencoding.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/copyencoding.sql +input_file: postgres/regression_suite/copyencoding.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_copyselect.snap b/crates/squawk_parser/tests/snapshots/tests__regression_copyselect.snap index 9b9b0b45..bd5a955a 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_copyselect.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_copyselect.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/copyselect.sql +input_file: postgres/regression_suite/copyselect.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_create_aggregate.snap b/crates/squawk_parser/tests/snapshots/tests__regression_create_aggregate.snap index 487a9a34..496ed5aa 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_create_aggregate.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_create_aggregate.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/create_aggregate.sql +input_file: postgres/regression_suite/create_aggregate.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_create_am.snap b/crates/squawk_parser/tests/snapshots/tests__regression_create_am.snap index a0ce3f51..6f0e7299 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_create_am.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_create_am.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/create_am.sql +input_file: postgres/regression_suite/create_am.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_create_cast.snap b/crates/squawk_parser/tests/snapshots/tests__regression_create_cast.snap index e6c7a57f..41fc145f 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_create_cast.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_create_cast.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/create_cast.sql +input_file: postgres/regression_suite/create_cast.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_create_function_c.snap b/crates/squawk_parser/tests/snapshots/tests__regression_create_function_c.snap index 099d599c..9c38a012 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_create_function_c.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_create_function_c.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/create_function_c.sql +input_file: postgres/regression_suite/create_function_c.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_create_function_sql.snap b/crates/squawk_parser/tests/snapshots/tests__regression_create_function_sql.snap index 56840460..ecb801b7 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_create_function_sql.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_create_function_sql.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/create_function_sql.sql +input_file: postgres/regression_suite/create_function_sql.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_create_index.snap b/crates/squawk_parser/tests/snapshots/tests__regression_create_index.snap index 26cd3f2f..b09fdaea 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_create_index.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_create_index.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/create_index.sql +input_file: postgres/regression_suite/create_index.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_create_index_spgist.snap b/crates/squawk_parser/tests/snapshots/tests__regression_create_index_spgist.snap index 7a53d836..e8859142 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_create_index_spgist.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_create_index_spgist.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/create_index_spgist.sql +input_file: postgres/regression_suite/create_index_spgist.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_create_misc.snap b/crates/squawk_parser/tests/snapshots/tests__regression_create_misc.snap index 479c8279..684a390a 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_create_misc.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_create_misc.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/create_misc.sql +input_file: postgres/regression_suite/create_misc.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_create_operator.snap b/crates/squawk_parser/tests/snapshots/tests__regression_create_operator.snap index 4be7aa21..3c06d24a 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_create_operator.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_create_operator.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/create_operator.sql +input_file: postgres/regression_suite/create_operator.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_create_procedure.snap b/crates/squawk_parser/tests/snapshots/tests__regression_create_procedure.snap index d19a29f3..52aca4c5 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_create_procedure.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_create_procedure.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/create_procedure.sql +input_file: postgres/regression_suite/create_procedure.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_create_role.snap b/crates/squawk_parser/tests/snapshots/tests__regression_create_role.snap index 986d28cc..b927ec8a 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_create_role.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_create_role.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/create_role.sql +input_file: postgres/regression_suite/create_role.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_create_schema.snap b/crates/squawk_parser/tests/snapshots/tests__regression_create_schema.snap index 59a625ae..4bc35007 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_create_schema.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_create_schema.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/create_schema.sql +input_file: postgres/regression_suite/create_schema.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_create_table.snap b/crates/squawk_parser/tests/snapshots/tests__regression_create_table.snap index 3d40f27d..fd256ec1 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_create_table.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_create_table.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/create_table.sql +input_file: postgres/regression_suite/create_table.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_create_table_like.snap b/crates/squawk_parser/tests/snapshots/tests__regression_create_table_like.snap index 108e71ce..190684e5 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_create_table_like.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_create_table_like.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/create_table_like.sql +input_file: postgres/regression_suite/create_table_like.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_create_type.snap b/crates/squawk_parser/tests/snapshots/tests__regression_create_type.snap index 6ca39b71..bd341c9d 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_create_type.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_create_type.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/create_type.sql +input_file: postgres/regression_suite/create_type.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_create_view.snap b/crates/squawk_parser/tests/snapshots/tests__regression_create_view.snap index 4823308d..2b85b1ca 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_create_view.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_create_view.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/create_view.sql +input_file: postgres/regression_suite/create_view.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_database.snap b/crates/squawk_parser/tests/snapshots/tests__regression_database.snap index ed5c48be..c368e27f 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_database.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_database.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/database.sql +input_file: postgres/regression_suite/database.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_date.snap b/crates/squawk_parser/tests/snapshots/tests__regression_date.snap index 8c6540d9..d1e96ce7 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_date.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_date.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/date.sql +input_file: postgres/regression_suite/date.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_dbsize.snap b/crates/squawk_parser/tests/snapshots/tests__regression_dbsize.snap index 805c78ef..47b1be26 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_dbsize.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_dbsize.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/dbsize.sql +input_file: postgres/regression_suite/dbsize.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_delete.snap b/crates/squawk_parser/tests/snapshots/tests__regression_delete.snap index cca4b81b..ade3fdbb 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_delete.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_delete.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/delete.sql +input_file: postgres/regression_suite/delete.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_dependency.snap b/crates/squawk_parser/tests/snapshots/tests__regression_dependency.snap index f4910fc6..9a0227e2 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_dependency.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_dependency.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/dependency.sql +input_file: postgres/regression_suite/dependency.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_domain.snap b/crates/squawk_parser/tests/snapshots/tests__regression_domain.snap index 5faae47c..d6e56107 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_domain.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_domain.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/domain.sql +input_file: postgres/regression_suite/domain.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_drop_if_exists.snap b/crates/squawk_parser/tests/snapshots/tests__regression_drop_if_exists.snap index 1eb27324..a8d707c2 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_drop_if_exists.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_drop_if_exists.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/drop_if_exists.sql +input_file: postgres/regression_suite/drop_if_exists.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_drop_operator.snap b/crates/squawk_parser/tests/snapshots/tests__regression_drop_operator.snap index 2263e492..9a861ccc 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_drop_operator.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_drop_operator.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/drop_operator.sql +input_file: postgres/regression_suite/drop_operator.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_eager_aggregate.snap b/crates/squawk_parser/tests/snapshots/tests__regression_eager_aggregate.snap index 82fc82fd..2fc4c6b4 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_eager_aggregate.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_eager_aggregate.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/eager_aggregate.sql +input_file: postgres/regression_suite/eager_aggregate.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_enum.snap b/crates/squawk_parser/tests/snapshots/tests__regression_enum.snap index 9f347912..82a0512c 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_enum.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_enum.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/enum.sql +input_file: postgres/regression_suite/enum.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_equivclass.snap b/crates/squawk_parser/tests/snapshots/tests__regression_equivclass.snap index d90418f3..f75c7b79 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_equivclass.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_equivclass.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/equivclass.sql +input_file: postgres/regression_suite/equivclass.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_event_trigger.snap b/crates/squawk_parser/tests/snapshots/tests__regression_event_trigger.snap index 38ca6cc9..69c807fb 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_event_trigger.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_event_trigger.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/event_trigger.sql +input_file: postgres/regression_suite/event_trigger.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_event_trigger_login.snap b/crates/squawk_parser/tests/snapshots/tests__regression_event_trigger_login.snap index 0c5b446c..beb37224 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_event_trigger_login.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_event_trigger_login.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/event_trigger_login.sql +input_file: postgres/regression_suite/event_trigger_login.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_explain.snap b/crates/squawk_parser/tests/snapshots/tests__regression_explain.snap index 4050a575..7bd83845 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_explain.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_explain.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/explain.sql +input_file: postgres/regression_suite/explain.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_expressions.snap b/crates/squawk_parser/tests/snapshots/tests__regression_expressions.snap index 51ae248c..42a68dfc 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_expressions.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_expressions.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/expressions.sql +input_file: postgres/regression_suite/expressions.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_fast_default.snap b/crates/squawk_parser/tests/snapshots/tests__regression_fast_default.snap index 1a4af41a..e7b99dfc 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_fast_default.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_fast_default.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/fast_default.sql +input_file: postgres/regression_suite/fast_default.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_float4.snap b/crates/squawk_parser/tests/snapshots/tests__regression_float4.snap index efc7352b..48737ed5 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_float4.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_float4.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/float4.sql +input_file: postgres/regression_suite/float4.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_float8.snap b/crates/squawk_parser/tests/snapshots/tests__regression_float8.snap index ae494ac9..882c8c3f 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_float8.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_float8.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/float8.sql +input_file: postgres/regression_suite/float8.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_foreign_data.snap b/crates/squawk_parser/tests/snapshots/tests__regression_foreign_data.snap index d738e34a..ae519a6e 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_foreign_data.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_foreign_data.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/foreign_data.sql +input_file: postgres/regression_suite/foreign_data.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_foreign_key.snap b/crates/squawk_parser/tests/snapshots/tests__regression_foreign_key.snap index 4342bcd3..972ba423 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_foreign_key.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_foreign_key.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/foreign_key.sql +input_file: postgres/regression_suite/foreign_key.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_functional_deps.snap b/crates/squawk_parser/tests/snapshots/tests__regression_functional_deps.snap index bc78f0ae..520573b7 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_functional_deps.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_functional_deps.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/functional_deps.sql +input_file: postgres/regression_suite/functional_deps.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_generated_stored.snap b/crates/squawk_parser/tests/snapshots/tests__regression_generated_stored.snap index d282852a..d35b8322 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_generated_stored.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_generated_stored.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/generated_stored.sql +input_file: postgres/regression_suite/generated_stored.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_generated_virtual.snap b/crates/squawk_parser/tests/snapshots/tests__regression_generated_virtual.snap index c850fff9..6f79a988 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_generated_virtual.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_generated_virtual.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/generated_virtual.sql +input_file: postgres/regression_suite/generated_virtual.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_geometry.snap b/crates/squawk_parser/tests/snapshots/tests__regression_geometry.snap index e38b186f..f8321a3d 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_geometry.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_geometry.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/geometry.sql +input_file: postgres/regression_suite/geometry.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_gin.snap b/crates/squawk_parser/tests/snapshots/tests__regression_gin.snap index fcf4caa4..65a42e37 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_gin.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_gin.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/gin.sql +input_file: postgres/regression_suite/gin.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_gist.snap b/crates/squawk_parser/tests/snapshots/tests__regression_gist.snap index 4fa516b3..cb1b4c05 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_gist.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_gist.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/gist.sql +input_file: postgres/regression_suite/gist.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_groupingsets.snap b/crates/squawk_parser/tests/snapshots/tests__regression_groupingsets.snap index fb4713d4..2c2055da 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_groupingsets.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_groupingsets.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/groupingsets.sql +input_file: postgres/regression_suite/groupingsets.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_guc.snap b/crates/squawk_parser/tests/snapshots/tests__regression_guc.snap index e22c555c..22a1b6e4 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_guc.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_guc.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/guc.sql +input_file: postgres/regression_suite/guc.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_hash_func.snap b/crates/squawk_parser/tests/snapshots/tests__regression_hash_func.snap index 9309d23b..013d82e0 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_hash_func.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_hash_func.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/hash_func.sql +input_file: postgres/regression_suite/hash_func.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_hash_index.snap b/crates/squawk_parser/tests/snapshots/tests__regression_hash_index.snap index 51599113..1a51ace0 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_hash_index.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_hash_index.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/hash_index.sql +input_file: postgres/regression_suite/hash_index.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_hash_part.snap b/crates/squawk_parser/tests/snapshots/tests__regression_hash_part.snap index cf12eff9..8f06bc15 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_hash_part.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_hash_part.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/hash_part.sql +input_file: postgres/regression_suite/hash_part.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_horology.snap b/crates/squawk_parser/tests/snapshots/tests__regression_horology.snap index 071ff438..0df829d2 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_horology.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_horology.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/horology.sql +input_file: postgres/regression_suite/horology.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_identity.snap b/crates/squawk_parser/tests/snapshots/tests__regression_identity.snap index 2a861f7e..30295a09 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_identity.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_identity.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/identity.sql +input_file: postgres/regression_suite/identity.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_incremental_sort.snap b/crates/squawk_parser/tests/snapshots/tests__regression_incremental_sort.snap index e80ed495..a2510a8a 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_incremental_sort.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_incremental_sort.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/incremental_sort.sql +input_file: postgres/regression_suite/incremental_sort.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_index_including.snap b/crates/squawk_parser/tests/snapshots/tests__regression_index_including.snap index 5a7c54a8..1ffb6112 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_index_including.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_index_including.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/index_including.sql +input_file: postgres/regression_suite/index_including.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_index_including_gist.snap b/crates/squawk_parser/tests/snapshots/tests__regression_index_including_gist.snap index aa357bec..ba2f3125 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_index_including_gist.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_index_including_gist.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/index_including_gist.sql +input_file: postgres/regression_suite/index_including_gist.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_indexing.snap b/crates/squawk_parser/tests/snapshots/tests__regression_indexing.snap index 6079a104..905b0167 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_indexing.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_indexing.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/indexing.sql +input_file: postgres/regression_suite/indexing.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_indirect_toast.snap b/crates/squawk_parser/tests/snapshots/tests__regression_indirect_toast.snap index 42e3e55d..c74c9135 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_indirect_toast.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_indirect_toast.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/indirect_toast.sql +input_file: postgres/regression_suite/indirect_toast.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_inet.snap b/crates/squawk_parser/tests/snapshots/tests__regression_inet.snap index 9d44e83d..54736b64 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_inet.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_inet.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/inet.sql +input_file: postgres/regression_suite/inet.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_infinite_recurse.snap b/crates/squawk_parser/tests/snapshots/tests__regression_infinite_recurse.snap index fbdcd3ea..0750f65a 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_infinite_recurse.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_infinite_recurse.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/infinite_recurse.sql +input_file: postgres/regression_suite/infinite_recurse.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_inherit.snap b/crates/squawk_parser/tests/snapshots/tests__regression_inherit.snap index f10483d6..dd18c017 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_inherit.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_inherit.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/inherit.sql +input_file: postgres/regression_suite/inherit.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_init_privs.snap b/crates/squawk_parser/tests/snapshots/tests__regression_init_privs.snap index b41248fa..5167a642 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_init_privs.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_init_privs.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/init_privs.sql +input_file: postgres/regression_suite/init_privs.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_insert.snap b/crates/squawk_parser/tests/snapshots/tests__regression_insert.snap index 356eab35..a31f8863 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_insert.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_insert.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/insert.sql +input_file: postgres/regression_suite/insert.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_insert_conflict.snap b/crates/squawk_parser/tests/snapshots/tests__regression_insert_conflict.snap index 89b80c3b..0bd49df1 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_insert_conflict.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_insert_conflict.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/insert_conflict.sql +input_file: postgres/regression_suite/insert_conflict.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_int2.snap b/crates/squawk_parser/tests/snapshots/tests__regression_int2.snap index 8d27a44c..f9bdd4ac 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_int2.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_int2.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/int2.sql +input_file: postgres/regression_suite/int2.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_int4.snap b/crates/squawk_parser/tests/snapshots/tests__regression_int4.snap index 7d9b1169..f78a2a7c 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_int4.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_int4.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/int4.sql +input_file: postgres/regression_suite/int4.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_int8.snap b/crates/squawk_parser/tests/snapshots/tests__regression_int8.snap index 1b7f39da..e2d246ea 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_int8.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_int8.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/int8.sql +input_file: postgres/regression_suite/int8.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_interval.snap b/crates/squawk_parser/tests/snapshots/tests__regression_interval.snap index 3a6bbcca..7a55e1f2 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_interval.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_interval.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/interval.sql +input_file: postgres/regression_suite/interval.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_join.snap b/crates/squawk_parser/tests/snapshots/tests__regression_join.snap index f9639486..e66a4f46 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_join.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_join.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/join.sql +input_file: postgres/regression_suite/join.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_join_hash.snap b/crates/squawk_parser/tests/snapshots/tests__regression_join_hash.snap index e33535dc..bc98320b 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_join_hash.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_join_hash.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/join_hash.sql +input_file: postgres/regression_suite/join_hash.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_json.snap b/crates/squawk_parser/tests/snapshots/tests__regression_json.snap index b2ac6599..d9bbfc38 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_json.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_json.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/json.sql +input_file: postgres/regression_suite/json.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_json_encoding.snap b/crates/squawk_parser/tests/snapshots/tests__regression_json_encoding.snap index 5be395bf..b42e22af 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_json_encoding.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_json_encoding.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/json_encoding.sql +input_file: postgres/regression_suite/json_encoding.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_jsonb.snap b/crates/squawk_parser/tests/snapshots/tests__regression_jsonb.snap index bb2ca7b2..6fac3396 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_jsonb.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_jsonb.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/jsonb.sql +input_file: postgres/regression_suite/jsonb.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_jsonb_jsonpath.snap b/crates/squawk_parser/tests/snapshots/tests__regression_jsonb_jsonpath.snap index e06536ce..e6185553 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_jsonb_jsonpath.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_jsonb_jsonpath.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/jsonb_jsonpath.sql +input_file: postgres/regression_suite/jsonb_jsonpath.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_jsonpath.snap b/crates/squawk_parser/tests/snapshots/tests__regression_jsonpath.snap index 4b3a5495..8c88adbf 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_jsonpath.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_jsonpath.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/jsonpath.sql +input_file: postgres/regression_suite/jsonpath.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_jsonpath_encoding.snap b/crates/squawk_parser/tests/snapshots/tests__regression_jsonpath_encoding.snap index 5d636ce8..0d984098 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_jsonpath_encoding.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_jsonpath_encoding.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/jsonpath_encoding.sql +input_file: postgres/regression_suite/jsonpath_encoding.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_largeobject.snap b/crates/squawk_parser/tests/snapshots/tests__regression_largeobject.snap index e97639c0..bc0ab45a 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_largeobject.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_largeobject.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/largeobject.sql +input_file: postgres/regression_suite/largeobject.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_limit.snap b/crates/squawk_parser/tests/snapshots/tests__regression_limit.snap index 8640fb02..182c4f80 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_limit.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_limit.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/limit.sql +input_file: postgres/regression_suite/limit.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_line.snap b/crates/squawk_parser/tests/snapshots/tests__regression_line.snap index 1186d76b..315c72fc 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_line.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_line.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/line.sql +input_file: postgres/regression_suite/line.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_lock.snap b/crates/squawk_parser/tests/snapshots/tests__regression_lock.snap index eeaf459f..45f94809 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_lock.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_lock.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/lock.sql +input_file: postgres/regression_suite/lock.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_lseg.snap b/crates/squawk_parser/tests/snapshots/tests__regression_lseg.snap index 569446eb..b0657f90 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_lseg.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_lseg.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/lseg.sql +input_file: postgres/regression_suite/lseg.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_macaddr.snap b/crates/squawk_parser/tests/snapshots/tests__regression_macaddr.snap index ec092bcb..a92a5a5a 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_macaddr.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_macaddr.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/macaddr.sql +input_file: postgres/regression_suite/macaddr.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_macaddr8.snap b/crates/squawk_parser/tests/snapshots/tests__regression_macaddr8.snap index 2d6cfa0f..e00b74f0 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_macaddr8.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_macaddr8.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/macaddr8.sql +input_file: postgres/regression_suite/macaddr8.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_maintain_every.snap b/crates/squawk_parser/tests/snapshots/tests__regression_maintain_every.snap index 12eceeb4..a3ddedb0 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_maintain_every.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_maintain_every.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/maintain_every.sql +input_file: postgres/regression_suite/maintain_every.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_matview.snap b/crates/squawk_parser/tests/snapshots/tests__regression_matview.snap index 2b9c6e11..78e10026 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_matview.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_matview.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/matview.sql +input_file: postgres/regression_suite/matview.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_md5.snap b/crates/squawk_parser/tests/snapshots/tests__regression_md5.snap index dd856724..9f5c0f43 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_md5.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_md5.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/md5.sql +input_file: postgres/regression_suite/md5.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_memoize.snap b/crates/squawk_parser/tests/snapshots/tests__regression_memoize.snap index 5f389763..c4a9c07b 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_memoize.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_memoize.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/memoize.sql +input_file: postgres/regression_suite/memoize.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_merge.snap b/crates/squawk_parser/tests/snapshots/tests__regression_merge.snap index 43b56e83..748ccf49 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_merge.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_merge.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/merge.sql +input_file: postgres/regression_suite/merge.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_misc.snap b/crates/squawk_parser/tests/snapshots/tests__regression_misc.snap index 1df4fdbf..1110ded1 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_misc.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_misc.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/misc.sql +input_file: postgres/regression_suite/misc.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_misc_functions.snap b/crates/squawk_parser/tests/snapshots/tests__regression_misc_functions.snap index 080b5fda..4f60c004 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_misc_functions.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_misc_functions.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/misc_functions.sql +input_file: postgres/regression_suite/misc_functions.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_misc_sanity.snap b/crates/squawk_parser/tests/snapshots/tests__regression_misc_sanity.snap index 71a31b5e..90c87a76 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_misc_sanity.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_misc_sanity.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/misc_sanity.sql +input_file: postgres/regression_suite/misc_sanity.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_money.snap b/crates/squawk_parser/tests/snapshots/tests__regression_money.snap index 3e218d3d..e8785a83 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_money.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_money.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/money.sql +input_file: postgres/regression_suite/money.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_multirangetypes.snap b/crates/squawk_parser/tests/snapshots/tests__regression_multirangetypes.snap index 828a8def..f0ddaac4 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_multirangetypes.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_multirangetypes.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/multirangetypes.sql +input_file: postgres/regression_suite/multirangetypes.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_mvcc.snap b/crates/squawk_parser/tests/snapshots/tests__regression_mvcc.snap index 62b8a55f..ac93a40b 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_mvcc.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_mvcc.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/mvcc.sql +input_file: postgres/regression_suite/mvcc.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_name.snap b/crates/squawk_parser/tests/snapshots/tests__regression_name.snap index 57d1583d..30310222 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_name.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_name.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/name.sql +input_file: postgres/regression_suite/name.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_namespace.snap b/crates/squawk_parser/tests/snapshots/tests__regression_namespace.snap index 52b301cf..0522349e 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_namespace.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_namespace.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/namespace.sql +input_file: postgres/regression_suite/namespace.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_nls.snap b/crates/squawk_parser/tests/snapshots/tests__regression_nls.snap index c7ffb2c4..16a0b682 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_nls.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_nls.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/nls.sql +input_file: postgres/regression_suite/nls.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_numa.snap b/crates/squawk_parser/tests/snapshots/tests__regression_numa.snap index 8d3932e8..b15398d0 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_numa.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_numa.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/numa.sql +input_file: postgres/regression_suite/numa.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_numeric.snap b/crates/squawk_parser/tests/snapshots/tests__regression_numeric.snap index 3e571c48..10a22805 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_numeric.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_numeric.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/numeric.sql +input_file: postgres/regression_suite/numeric.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_numeric_big.snap b/crates/squawk_parser/tests/snapshots/tests__regression_numeric_big.snap index 9514af7e..85b29168 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_numeric_big.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_numeric_big.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/numeric_big.sql +input_file: postgres/regression_suite/numeric_big.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_numerology.snap b/crates/squawk_parser/tests/snapshots/tests__regression_numerology.snap index b16c3763..5a3a21e3 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_numerology.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_numerology.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/numerology.sql +input_file: postgres/regression_suite/numerology.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_object_address.snap b/crates/squawk_parser/tests/snapshots/tests__regression_object_address.snap index 78029ef7..0214c8de 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_object_address.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_object_address.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/object_address.sql +input_file: postgres/regression_suite/object_address.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_oid.snap b/crates/squawk_parser/tests/snapshots/tests__regression_oid.snap index 30d55bd0..39eab867 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_oid.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_oid.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/oid.sql +input_file: postgres/regression_suite/oid.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_oidjoins.snap b/crates/squawk_parser/tests/snapshots/tests__regression_oidjoins.snap index 6d8caa5b..6504260d 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_oidjoins.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_oidjoins.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/oidjoins.sql +input_file: postgres/regression_suite/oidjoins.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_opr_sanity.snap b/crates/squawk_parser/tests/snapshots/tests__regression_opr_sanity.snap index 5d03ac57..f2171d6c 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_opr_sanity.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_opr_sanity.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/opr_sanity.sql +input_file: postgres/regression_suite/opr_sanity.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_partition_aggregate.snap b/crates/squawk_parser/tests/snapshots/tests__regression_partition_aggregate.snap index 98c4863c..8b93e32f 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_partition_aggregate.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_partition_aggregate.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/partition_aggregate.sql +input_file: postgres/regression_suite/partition_aggregate.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_partition_info.snap b/crates/squawk_parser/tests/snapshots/tests__regression_partition_info.snap index 090a3b4e..332485f8 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_partition_info.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_partition_info.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/partition_info.sql +input_file: postgres/regression_suite/partition_info.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_partition_join.snap b/crates/squawk_parser/tests/snapshots/tests__regression_partition_join.snap index 4c013eea..854d510a 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_partition_join.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_partition_join.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/partition_join.sql +input_file: postgres/regression_suite/partition_join.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_partition_merge.snap b/crates/squawk_parser/tests/snapshots/tests__regression_partition_merge.snap index 69347c72..00b809a2 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_partition_merge.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_partition_merge.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/partition_merge.sql +input_file: postgres/regression_suite/partition_merge.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_partition_prune.snap b/crates/squawk_parser/tests/snapshots/tests__regression_partition_prune.snap index 05922e93..5ae5af6f 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_partition_prune.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_partition_prune.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/partition_prune.sql +input_file: postgres/regression_suite/partition_prune.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_partition_split.snap b/crates/squawk_parser/tests/snapshots/tests__regression_partition_split.snap index 7e5b1bde..7ec15bde 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_partition_split.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_partition_split.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/partition_split.sql +input_file: postgres/regression_suite/partition_split.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_password.snap b/crates/squawk_parser/tests/snapshots/tests__regression_password.snap index e89f7643..637e0a2f 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_password.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_password.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/password.sql +input_file: postgres/regression_suite/password.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_path.snap b/crates/squawk_parser/tests/snapshots/tests__regression_path.snap index 28fe10fe..83059ffd 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_path.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_path.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/path.sql +input_file: postgres/regression_suite/path.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_pg_dependencies.snap b/crates/squawk_parser/tests/snapshots/tests__regression_pg_dependencies.snap index d18c929f..9e9c1e1c 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_pg_dependencies.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_pg_dependencies.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/pg_dependencies.sql +input_file: postgres/regression_suite/pg_dependencies.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_pg_lsn.snap b/crates/squawk_parser/tests/snapshots/tests__regression_pg_lsn.snap index 2123c552..251661e0 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_pg_lsn.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_pg_lsn.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/pg_lsn.sql +input_file: postgres/regression_suite/pg_lsn.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_pg_ndistinct.snap b/crates/squawk_parser/tests/snapshots/tests__regression_pg_ndistinct.snap index dc1fe49d..877c9953 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_pg_ndistinct.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_pg_ndistinct.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/pg_ndistinct.sql +input_file: postgres/regression_suite/pg_ndistinct.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_plancache.snap b/crates/squawk_parser/tests/snapshots/tests__regression_plancache.snap index a0ca6845..82f66042 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_plancache.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_plancache.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/plancache.sql +input_file: postgres/regression_suite/plancache.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_plpgsql.snap b/crates/squawk_parser/tests/snapshots/tests__regression_plpgsql.snap index 4b7eccd7..fac82738 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_plpgsql.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_plpgsql.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/plpgsql.sql +input_file: postgres/regression_suite/plpgsql.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_point.snap b/crates/squawk_parser/tests/snapshots/tests__regression_point.snap index c1c1d28b..ab232f2d 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_point.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_point.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/point.sql +input_file: postgres/regression_suite/point.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_polygon.snap b/crates/squawk_parser/tests/snapshots/tests__regression_polygon.snap index a30a3071..95fff0f5 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_polygon.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_polygon.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/polygon.sql +input_file: postgres/regression_suite/polygon.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_polymorphism.snap b/crates/squawk_parser/tests/snapshots/tests__regression_polymorphism.snap index 338f602e..92e9ca20 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_polymorphism.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_polymorphism.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/polymorphism.sql +input_file: postgres/regression_suite/polymorphism.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_portals.snap b/crates/squawk_parser/tests/snapshots/tests__regression_portals.snap index 5e7fe353..c4256c70 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_portals.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_portals.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/portals.sql +input_file: postgres/regression_suite/portals.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_portals_p2.snap b/crates/squawk_parser/tests/snapshots/tests__regression_portals_p2.snap index 8a618d6d..7a4aa9dd 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_portals_p2.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_portals_p2.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/portals_p2.sql +input_file: postgres/regression_suite/portals_p2.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_predicate.snap b/crates/squawk_parser/tests/snapshots/tests__regression_predicate.snap index 45e9e28b..f53ecd0a 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_predicate.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_predicate.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/predicate.sql +input_file: postgres/regression_suite/predicate.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_prepare.snap b/crates/squawk_parser/tests/snapshots/tests__regression_prepare.snap index 367f9c9c..1eac7ad4 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_prepare.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_prepare.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/prepare.sql +input_file: postgres/regression_suite/prepare.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_prepared_xacts.snap b/crates/squawk_parser/tests/snapshots/tests__regression_prepared_xacts.snap index 161c3c41..a4d8a22b 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_prepared_xacts.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_prepared_xacts.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/prepared_xacts.sql +input_file: postgres/regression_suite/prepared_xacts.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_privileges.snap b/crates/squawk_parser/tests/snapshots/tests__regression_privileges.snap index 16080ec0..f8bbe00d 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_privileges.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_privileges.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/privileges.sql +input_file: postgres/regression_suite/privileges.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_publication.snap b/crates/squawk_parser/tests/snapshots/tests__regression_publication.snap index c12fdb7f..4e1328e1 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_publication.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_publication.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/publication.sql +input_file: postgres/regression_suite/publication.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_random.snap b/crates/squawk_parser/tests/snapshots/tests__regression_random.snap index 47d85318..f1cb829b 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_random.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_random.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/random.sql +input_file: postgres/regression_suite/random.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_rangefuncs.snap b/crates/squawk_parser/tests/snapshots/tests__regression_rangefuncs.snap index f4c209e2..9f907c8e 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_rangefuncs.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_rangefuncs.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/rangefuncs.sql +input_file: postgres/regression_suite/rangefuncs.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_rangetypes.snap b/crates/squawk_parser/tests/snapshots/tests__regression_rangetypes.snap index 97482e3a..fadb17c5 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_rangetypes.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_rangetypes.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/rangetypes.sql +input_file: postgres/regression_suite/rangetypes.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_regex.snap b/crates/squawk_parser/tests/snapshots/tests__regression_regex.snap index bf16f50c..89b171f8 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_regex.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_regex.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/regex.sql +input_file: postgres/regression_suite/regex.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_regproc.snap b/crates/squawk_parser/tests/snapshots/tests__regression_regproc.snap index 31581214..afc35b79 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_regproc.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_regproc.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/regproc.sql +input_file: postgres/regression_suite/regproc.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_reindex_catalog.snap b/crates/squawk_parser/tests/snapshots/tests__regression_reindex_catalog.snap index 2f7aecc8..df66f314 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_reindex_catalog.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_reindex_catalog.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/reindex_catalog.sql +input_file: postgres/regression_suite/reindex_catalog.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_reloptions.snap b/crates/squawk_parser/tests/snapshots/tests__regression_reloptions.snap index 3de13819..44e4ca93 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_reloptions.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_reloptions.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/reloptions.sql +input_file: postgres/regression_suite/reloptions.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_replica_identity.snap b/crates/squawk_parser/tests/snapshots/tests__regression_replica_identity.snap index 4cf96936..ffffc6e4 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_replica_identity.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_replica_identity.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/replica_identity.sql +input_file: postgres/regression_suite/replica_identity.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_returning.snap b/crates/squawk_parser/tests/snapshots/tests__regression_returning.snap index 3a3d0a10..3d222375 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_returning.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_returning.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/returning.sql +input_file: postgres/regression_suite/returning.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_roleattributes.snap b/crates/squawk_parser/tests/snapshots/tests__regression_roleattributes.snap index 182a0d53..9155135b 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_roleattributes.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_roleattributes.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/roleattributes.sql +input_file: postgres/regression_suite/roleattributes.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_rowsecurity.snap b/crates/squawk_parser/tests/snapshots/tests__regression_rowsecurity.snap index 025972aa..99e0e066 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_rowsecurity.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_rowsecurity.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/rowsecurity.sql +input_file: postgres/regression_suite/rowsecurity.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_rowtypes.snap b/crates/squawk_parser/tests/snapshots/tests__regression_rowtypes.snap index d13b9eda..a50d526b 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_rowtypes.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_rowtypes.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/rowtypes.sql +input_file: postgres/regression_suite/rowtypes.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_rules.snap b/crates/squawk_parser/tests/snapshots/tests__regression_rules.snap index 42b281c9..45c594e0 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_rules.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_rules.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/rules.sql +input_file: postgres/regression_suite/rules.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_sanity_check.snap b/crates/squawk_parser/tests/snapshots/tests__regression_sanity_check.snap index 0509a9d8..d2fbabd8 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_sanity_check.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_sanity_check.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/sanity_check.sql +input_file: postgres/regression_suite/sanity_check.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_security_label.snap b/crates/squawk_parser/tests/snapshots/tests__regression_security_label.snap index d6f8e4ef..bf1d8d49 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_security_label.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_security_label.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/security_label.sql +input_file: postgres/regression_suite/security_label.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_select.snap b/crates/squawk_parser/tests/snapshots/tests__regression_select.snap index 4856410b..191f7b02 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_select.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_select.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/select.sql +input_file: postgres/regression_suite/select.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_select_distinct.snap b/crates/squawk_parser/tests/snapshots/tests__regression_select_distinct.snap index eb2c7e96..26f870f6 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_select_distinct.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_select_distinct.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/select_distinct.sql +input_file: postgres/regression_suite/select_distinct.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_select_distinct_on.snap b/crates/squawk_parser/tests/snapshots/tests__regression_select_distinct_on.snap index d4a7366b..3b5ca4fc 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_select_distinct_on.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_select_distinct_on.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/select_distinct_on.sql +input_file: postgres/regression_suite/select_distinct_on.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_select_having.snap b/crates/squawk_parser/tests/snapshots/tests__regression_select_having.snap index 92fc04bc..88ae6341 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_select_having.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_select_having.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/select_having.sql +input_file: postgres/regression_suite/select_having.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_select_implicit.snap b/crates/squawk_parser/tests/snapshots/tests__regression_select_implicit.snap index 9e944fa0..5caf487a 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_select_implicit.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_select_implicit.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/select_implicit.sql +input_file: postgres/regression_suite/select_implicit.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_select_into.snap b/crates/squawk_parser/tests/snapshots/tests__regression_select_into.snap index 1038d155..54bb8a46 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_select_into.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_select_into.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/select_into.sql +input_file: postgres/regression_suite/select_into.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_select_parallel.snap b/crates/squawk_parser/tests/snapshots/tests__regression_select_parallel.snap index 69e89f88..38bccfbd 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_select_parallel.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_select_parallel.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/select_parallel.sql +input_file: postgres/regression_suite/select_parallel.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_select_views.snap b/crates/squawk_parser/tests/snapshots/tests__regression_select_views.snap index 849544c4..8db72124 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_select_views.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_select_views.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/select_views.sql +input_file: postgres/regression_suite/select_views.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_sequence.snap b/crates/squawk_parser/tests/snapshots/tests__regression_sequence.snap index d7be38ef..f5bd0617 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_sequence.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_sequence.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/sequence.sql +input_file: postgres/regression_suite/sequence.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_spgist.snap b/crates/squawk_parser/tests/snapshots/tests__regression_spgist.snap index 613e56db..ee2644c8 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_spgist.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_spgist.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/spgist.sql +input_file: postgres/regression_suite/spgist.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_sqljson.snap b/crates/squawk_parser/tests/snapshots/tests__regression_sqljson.snap index 7c4c9dd3..894a91ed 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_sqljson.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_sqljson.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/sqljson.sql +input_file: postgres/regression_suite/sqljson.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_sqljson_jsontable.snap b/crates/squawk_parser/tests/snapshots/tests__regression_sqljson_jsontable.snap index 485b3fcd..e77bfa4e 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_sqljson_jsontable.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_sqljson_jsontable.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/sqljson_jsontable.sql +input_file: postgres/regression_suite/sqljson_jsontable.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_sqljson_queryfuncs.snap b/crates/squawk_parser/tests/snapshots/tests__regression_sqljson_queryfuncs.snap index 9ae52e53..8389bf8c 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_sqljson_queryfuncs.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_sqljson_queryfuncs.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/sqljson_queryfuncs.sql +input_file: postgres/regression_suite/sqljson_queryfuncs.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_stats.snap b/crates/squawk_parser/tests/snapshots/tests__regression_stats.snap index 378b9d33..6a249fe9 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_stats.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_stats.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/stats.sql +input_file: postgres/regression_suite/stats.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_stats_ext.snap b/crates/squawk_parser/tests/snapshots/tests__regression_stats_ext.snap index e54e1a6e..5794fd1b 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_stats_ext.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_stats_ext.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/stats_ext.sql +input_file: postgres/regression_suite/stats_ext.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_stats_import.snap b/crates/squawk_parser/tests/snapshots/tests__regression_stats_import.snap index 4a3bdbc3..8cd0b493 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_stats_import.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_stats_import.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/stats_import.sql +input_file: postgres/regression_suite/stats_import.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_stats_rewrite.snap b/crates/squawk_parser/tests/snapshots/tests__regression_stats_rewrite.snap index b6cb8b34..a4948676 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_stats_rewrite.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_stats_rewrite.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/stats_rewrite.sql +input_file: postgres/regression_suite/stats_rewrite.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_strings.snap b/crates/squawk_parser/tests/snapshots/tests__regression_strings.snap index b9ebda28..d09e3a98 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_strings.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_strings.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/strings.sql +input_file: postgres/regression_suite/strings.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_subscription.snap b/crates/squawk_parser/tests/snapshots/tests__regression_subscription.snap index 6594608f..c9e36ee5 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_subscription.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_subscription.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/subscription.sql +input_file: postgres/regression_suite/subscription.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_subselect.snap b/crates/squawk_parser/tests/snapshots/tests__regression_subselect.snap index a1b81751..4199bca8 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_subselect.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_subselect.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/subselect.sql +input_file: postgres/regression_suite/subselect.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_sysviews.snap b/crates/squawk_parser/tests/snapshots/tests__regression_sysviews.snap index b2e70679..efabdbfc 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_sysviews.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_sysviews.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/sysviews.sql +input_file: postgres/regression_suite/sysviews.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_tablesample.snap b/crates/squawk_parser/tests/snapshots/tests__regression_tablesample.snap index f6f0a108..7f283ff3 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_tablesample.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_tablesample.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/tablesample.sql +input_file: postgres/regression_suite/tablesample.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_tablespace.snap b/crates/squawk_parser/tests/snapshots/tests__regression_tablespace.snap index 7f7b01a6..04b3efee 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_tablespace.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_tablespace.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/tablespace.sql +input_file: postgres/regression_suite/tablespace.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_temp.snap b/crates/squawk_parser/tests/snapshots/tests__regression_temp.snap index 1394119f..54643b95 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_temp.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_temp.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/temp.sql +input_file: postgres/regression_suite/temp.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_test_setup.snap b/crates/squawk_parser/tests/snapshots/tests__regression_test_setup.snap index 72223f94..47627732 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_test_setup.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_test_setup.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/test_setup.sql +input_file: postgres/regression_suite/test_setup.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_text.snap b/crates/squawk_parser/tests/snapshots/tests__regression_text.snap index 1989c3ed..f2489250 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_text.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_text.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/text.sql +input_file: postgres/regression_suite/text.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_tid.snap b/crates/squawk_parser/tests/snapshots/tests__regression_tid.snap index 22830d98..1a342cce 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_tid.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_tid.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/tid.sql +input_file: postgres/regression_suite/tid.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_tidrangescan.snap b/crates/squawk_parser/tests/snapshots/tests__regression_tidrangescan.snap index 4c129155..9772c8a1 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_tidrangescan.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_tidrangescan.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/tidrangescan.sql +input_file: postgres/regression_suite/tidrangescan.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_tidscan.snap b/crates/squawk_parser/tests/snapshots/tests__regression_tidscan.snap index 6fc7afc2..ea0dad73 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_tidscan.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_tidscan.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/tidscan.sql +input_file: postgres/regression_suite/tidscan.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_time.snap b/crates/squawk_parser/tests/snapshots/tests__regression_time.snap index 63fb8519..b180bf88 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_time.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_time.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/time.sql +input_file: postgres/regression_suite/time.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_timestamp.snap b/crates/squawk_parser/tests/snapshots/tests__regression_timestamp.snap index 2ea19c0f..5befbebc 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_timestamp.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_timestamp.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/timestamp.sql +input_file: postgres/regression_suite/timestamp.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_timestamptz.snap b/crates/squawk_parser/tests/snapshots/tests__regression_timestamptz.snap index 9dca6868..5cc4f4e6 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_timestamptz.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_timestamptz.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/timestamptz.sql +input_file: postgres/regression_suite/timestamptz.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_timetz.snap b/crates/squawk_parser/tests/snapshots/tests__regression_timetz.snap index 20210efd..74262337 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_timetz.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_timetz.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/timetz.sql +input_file: postgres/regression_suite/timetz.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_transactions.snap b/crates/squawk_parser/tests/snapshots/tests__regression_transactions.snap index 8a627bce..f99084f6 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_transactions.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_transactions.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/transactions.sql +input_file: postgres/regression_suite/transactions.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_triggers.snap b/crates/squawk_parser/tests/snapshots/tests__regression_triggers.snap index b8445aaa..35d94e84 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_triggers.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_triggers.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/triggers.sql +input_file: postgres/regression_suite/triggers.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_truncate.snap b/crates/squawk_parser/tests/snapshots/tests__regression_truncate.snap index 059e59eb..3969fbc2 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_truncate.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_truncate.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/truncate.sql +input_file: postgres/regression_suite/truncate.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_tsdicts.snap b/crates/squawk_parser/tests/snapshots/tests__regression_tsdicts.snap index 5cba2250..17982c83 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_tsdicts.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_tsdicts.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/tsdicts.sql +input_file: postgres/regression_suite/tsdicts.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_tsearch.snap b/crates/squawk_parser/tests/snapshots/tests__regression_tsearch.snap index ec1e1bf5..34f1bae9 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_tsearch.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_tsearch.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/tsearch.sql +input_file: postgres/regression_suite/tsearch.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_tsrf.snap b/crates/squawk_parser/tests/snapshots/tests__regression_tsrf.snap index b6fd194a..abcbfa57 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_tsrf.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_tsrf.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/tsrf.sql +input_file: postgres/regression_suite/tsrf.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_tstypes.snap b/crates/squawk_parser/tests/snapshots/tests__regression_tstypes.snap index 959495b7..812fe554 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_tstypes.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_tstypes.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/tstypes.sql +input_file: postgres/regression_suite/tstypes.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_tuplesort.snap b/crates/squawk_parser/tests/snapshots/tests__regression_tuplesort.snap index f0cdd1bd..18454081 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_tuplesort.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_tuplesort.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/tuplesort.sql +input_file: postgres/regression_suite/tuplesort.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_txid.snap b/crates/squawk_parser/tests/snapshots/tests__regression_txid.snap index 5b507673..2cb06657 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_txid.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_txid.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/txid.sql +input_file: postgres/regression_suite/txid.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_type_sanity.snap b/crates/squawk_parser/tests/snapshots/tests__regression_type_sanity.snap index 6c466e77..6ec8c64c 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_type_sanity.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_type_sanity.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/type_sanity.sql +input_file: postgres/regression_suite/type_sanity.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_typed_table.snap b/crates/squawk_parser/tests/snapshots/tests__regression_typed_table.snap index 99c7ee5e..f261a666 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_typed_table.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_typed_table.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/typed_table.sql +input_file: postgres/regression_suite/typed_table.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_unicode.snap b/crates/squawk_parser/tests/snapshots/tests__regression_unicode.snap index 25306f23..3d755612 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_unicode.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_unicode.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/unicode.sql +input_file: postgres/regression_suite/unicode.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_union.snap b/crates/squawk_parser/tests/snapshots/tests__regression_union.snap index 80db14e1..46508498 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_union.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_union.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/union.sql +input_file: postgres/regression_suite/union.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_updatable_views.snap b/crates/squawk_parser/tests/snapshots/tests__regression_updatable_views.snap index 8b983a9b..bf6098e0 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_updatable_views.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_updatable_views.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/updatable_views.sql +input_file: postgres/regression_suite/updatable_views.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_update.snap b/crates/squawk_parser/tests/snapshots/tests__regression_update.snap index 0277de3e..5c91a879 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_update.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_update.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/update.sql +input_file: postgres/regression_suite/update.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_uuid.snap b/crates/squawk_parser/tests/snapshots/tests__regression_uuid.snap index 4987033a..44c64a69 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_uuid.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_uuid.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/uuid.sql +input_file: postgres/regression_suite/uuid.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_vacuum.snap b/crates/squawk_parser/tests/snapshots/tests__regression_vacuum.snap index 253d48fb..fa0d4844 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_vacuum.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_vacuum.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/vacuum.sql +input_file: postgres/regression_suite/vacuum.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_vacuum_parallel.snap b/crates/squawk_parser/tests/snapshots/tests__regression_vacuum_parallel.snap index 97339610..d60ead7e 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_vacuum_parallel.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_vacuum_parallel.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/vacuum_parallel.sql +input_file: postgres/regression_suite/vacuum_parallel.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_varchar.snap b/crates/squawk_parser/tests/snapshots/tests__regression_varchar.snap index 8a040257..0826173e 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_varchar.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_varchar.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/varchar.sql +input_file: postgres/regression_suite/varchar.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_window.snap b/crates/squawk_parser/tests/snapshots/tests__regression_window.snap index 10555a5a..16f186a0 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_window.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_window.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/window.sql +input_file: postgres/regression_suite/window.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_with.snap b/crates/squawk_parser/tests/snapshots/tests__regression_with.snap index 155f4dba..304db953 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_with.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_with.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/with.sql +input_file: postgres/regression_suite/with.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_without_overlaps.snap b/crates/squawk_parser/tests/snapshots/tests__regression_without_overlaps.snap index d14803ea..7db424a4 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_without_overlaps.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_without_overlaps.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/without_overlaps.sql +input_file: postgres/regression_suite/without_overlaps.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_write_parallel.snap b/crates/squawk_parser/tests/snapshots/tests__regression_write_parallel.snap index 00a1bd90..40ee8804 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_write_parallel.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_write_parallel.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/write_parallel.sql +input_file: postgres/regression_suite/write_parallel.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_xid.snap b/crates/squawk_parser/tests/snapshots/tests__regression_xid.snap index 1cd36325..aaf3b708 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_xid.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_xid.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/xid.sql +input_file: postgres/regression_suite/xid.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_xml.snap b/crates/squawk_parser/tests/snapshots/tests__regression_xml.snap index a4468dfb..42b0a47b 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_xml.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_xml.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/xml.sql +input_file: postgres/regression_suite/xml.sql --- diff --git a/crates/squawk_parser/tests/snapshots/tests__regression_xmlmap.snap b/crates/squawk_parser/tests/snapshots/tests__regression_xmlmap.snap index 160dcfd1..c1b6e0a6 100644 --- a/crates/squawk_parser/tests/snapshots/tests__regression_xmlmap.snap +++ b/crates/squawk_parser/tests/snapshots/tests__regression_xmlmap.snap @@ -1,5 +1,5 @@ --- source: crates/squawk_parser/tests/tests.rs -input_file: crates/squawk_parser/tests/data/regression_suite/xmlmap.sql +input_file: postgres/regression_suite/xmlmap.sql --- diff --git a/crates/squawk_syntax/src/ast/generated/nodes.rs b/crates/squawk_syntax/src/ast/generated/nodes.rs index e6db267a..570f895c 100644 --- a/crates/squawk_syntax/src/ast/generated/nodes.rs +++ b/crates/squawk_syntax/src/ast/generated/nodes.rs @@ -4629,6 +4629,10 @@ impl CreateSubscription { support::child(&self.syntax) } #[inline] + pub fn name_ref(&self) -> Option { + support::child(&self.syntax) + } + #[inline] pub fn name_refs(&self) -> AstChildren { support::children(&self.syntax) } @@ -4649,6 +4653,10 @@ impl CreateSubscription { support::token(&self.syntax, SyntaxKind::PUBLICATION_KW) } #[inline] + pub fn server_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SERVER_KW) + } + #[inline] pub fn subscription_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::SUBSCRIPTION_KW) } @@ -7816,6 +7824,10 @@ impl FdwOption { support::child(&self.syntax) } #[inline] + pub fn connection_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::CONNECTION_KW) + } + #[inline] pub fn handler_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::HANDLER_KW) } diff --git a/crates/squawk_syntax/src/postgresql.ungram b/crates/squawk_syntax/src/postgresql.ungram index 5ef67e5c..9b616ef4 100644 --- a/crates/squawk_syntax/src/postgresql.ungram +++ b/crates/squawk_syntax/src/postgresql.ungram @@ -1968,8 +1968,10 @@ FdwOptionList = FdwOption = 'options' AlterOptionList +| 'connection' Path | 'handler' Path | 'validator' Path +| 'no' 'connection' | 'no' 'handler' | 'no' 'validator' @@ -2336,7 +2338,7 @@ CreateStatistics = CreateSubscription = 'create' 'subscription' Name - 'connection' Literal + ('connection' Literal | 'server' NameRef) 'publication' (NameRef (',' NameRef)*) WithParams? diff --git a/crates/xtask/src/sync_regression_suite.rs b/crates/xtask/src/sync_regression_suite.rs index a7080301..fd32940c 100644 --- a/crates/xtask/src/sync_regression_suite.rs +++ b/crates/xtask/src/sync_regression_suite.rs @@ -6,7 +6,8 @@ use std::fs::{File, create_dir_all, remove_dir_all}; use std::io::{BufRead, Write}; use std::process::Command; -const PROCESSED_OUTPUT_DIR: &str = "postgres/regression_suite"; +const SQL_REGRESSION_SUITE_DIR: &str = "postgres/regression_suite"; +const PLPGSQL_REGRESSION_SUITE_DIR: &str = "postgres/plpgsql"; const START_END_MARKERS: &[(&str, &str)] = &[ ( @@ -104,22 +105,31 @@ const GSET_REPLACEMENTS: &[(&str, &str)] = &[ ]; pub(crate) fn sync_regression_suite() -> Result<()> { - let temp_dir = download_regression_suite()?; - transform_regression_suite(&temp_dir)?; - Ok(()) -} - -fn download_regression_suite() -> Result { - let target_dir = Utf8PathBuf::try_from(std::env::temp_dir()) + let sql_target_dir = Utf8PathBuf::try_from(std::env::temp_dir()) .map_err(|_| anyhow::anyhow!("temp dir path is not valid UTF-8"))? .join("squawk_raw_regression_suite"); - if target_dir.exists() { - println!("Cleaning temp directory: {target_dir:?}"); - remove_dir_all(&target_dir)?; - } + let plpgsql_target_dir = Utf8PathBuf::try_from(std::env::temp_dir()) + .map_err(|_| anyhow::anyhow!("temp dir path is not valid UTF-8"))? + .join("squawk_raw_plpgsql_suite"); - create_dir_all(&target_dir)?; + download_regression_suite(&sql_target_dir, &plpgsql_target_dir)?; + transform_regression_suite(&sql_target_dir)?; + copy_plpgsql_suite(&plpgsql_target_dir)?; + Ok(()) +} + +fn download_regression_suite( + sql_target_dir: &Utf8PathBuf, + plpgsql_target_dir: &Utf8PathBuf, +) -> Result<()> { + for dir in [sql_target_dir, plpgsql_target_dir] { + if dir.exists() { + println!("Cleaning temp directory: {dir:?}"); + remove_dir_all(dir)?; + } + create_dir_all(dir)?; + } let clone_dir = Utf8PathBuf::try_from(std::env::temp_dir()) .map_err(|_| anyhow::anyhow!("temp dir path is not valid UTF-8"))? @@ -146,10 +156,15 @@ fn download_regression_suite() -> Result { bail!("Failed to clone postgres repository"); } - println!("Setting up sparse checkout for src/test/regress/sql..."); + println!("Setting up sparse checkout..."); let status = Command::new("git") - .args(["sparse-checkout", "set", "src/test/regress/sql"]) + .args([ + "sparse-checkout", + "set", + "src/test/regress/sql", + "src/pl/plpgsql/src/sql", + ]) .current_dir(&clone_dir) .status()?; @@ -157,7 +172,7 @@ fn download_regression_suite() -> Result { bail!("Failed to set sparse checkout"); } - println!("Copying SQL files..."); + println!("Copying regression SQL files..."); let source_dir = clone_dir.join("src/test/regress/sql"); let mut file_count = 0; @@ -166,23 +181,38 @@ fn download_regression_suite() -> Result { let path = Utf8PathBuf::try_from(entry.path())?; if path.extension() == Some("sql") { let filename = path.file_name().unwrap(); - if !filename.contains("psql") { - std::fs::copy(&path, target_dir.join(filename))?; + if !filename.contains("psql") || filename == "plpgsql.sql" { + std::fs::copy(&path, sql_target_dir.join(filename))?; file_count += 1; } } } - println!("Copied {file_count} SQL files"); + println!("Copied {file_count} regression SQL files"); + + println!("Copying PL/pgSQL SQL files..."); + let plpgsql_source_dir = clone_dir.join("src/pl/plpgsql/src/sql"); + let mut plpgsql_count = 0; + for entry in std::fs::read_dir(&plpgsql_source_dir)? { + let entry = entry?; + let path = Utf8PathBuf::try_from(entry.path())?; + if path.extension() == Some("sql") { + let filename = path.file_name().unwrap(); + std::fs::copy(&path, plpgsql_target_dir.join(filename))?; + plpgsql_count += 1; + } + } + + println!("Copied {plpgsql_count} PL/pgSQL SQL files"); println!("Cleaning up clone directory..."); remove_dir_all(&clone_dir)?; - Ok(target_dir) + Ok(()) } fn transform_regression_suite(input_dir: &Utf8PathBuf) -> Result<()> { - let output_dir = project_root().join(PROCESSED_OUTPUT_DIR); + let output_dir = project_root().join(SQL_REGRESSION_SUITE_DIR); if output_dir.exists() { println!("Cleaning target directory: {output_dir:?}"); @@ -225,6 +255,32 @@ fn transform_regression_suite(input_dir: &Utf8PathBuf) -> Result<()> { Ok(()) } +fn copy_plpgsql_suite(input_dir: &Utf8PathBuf) -> Result<()> { + let output_dir = project_root().join(PLPGSQL_REGRESSION_SUITE_DIR); + + if output_dir.exists() { + println!("Cleaning target directory: {output_dir:?}"); + remove_dir_all(&output_dir)?; + } + + create_dir_all(&output_dir)?; + + let mut file_count = 0; + for entry in std::fs::read_dir(input_dir)? { + let entry = entry?; + let path = Utf8PathBuf::try_from(entry.path())?; + if path.extension() == Some("sql") { + let filename = path.file_name().unwrap(); + std::fs::copy(&path, output_dir.join(filename))?; + file_count += 1; + } + } + + println!("Copied {file_count} PL/pgSQL files to {output_dir}"); + + Ok(()) +} + // The regression suite from postgres has a mix of valid and invalid sql. We // don't have a good way to determine what is what, so we munge the data to // comment out any problematic code. diff --git a/postgres/plpgsql/plpgsql_array.sql b/postgres/plpgsql/plpgsql_array.sql new file mode 100644 index 00000000..da984a99 --- /dev/null +++ b/postgres/plpgsql/plpgsql_array.sql @@ -0,0 +1,160 @@ +-- +-- Tests for PL/pgSQL handling of array variables +-- +-- We also check arrays of composites here, so this has some overlap +-- with the plpgsql_record tests. +-- + +create type complex as (r float8, i float8); +create type quadarray as (c1 complex[], c2 complex); + +do $$ declare a int[]; +begin a := array[1,2]; a[3] := 4; raise notice 'a = %', a; end$$; + +do $$ declare a int[]; +begin a[3] := 4; raise notice 'a = %', a; end$$; + +do $$ declare a int[]; +begin a[1][4] := 4; raise notice 'a = %', a; end$$; + +do $$ declare a int[]; +begin a[1] := 23::text; raise notice 'a = %', a; end$$; -- lax typing + +do $$ declare a int[]; +begin a := array[1,2]; a[2:3] := array[3,4]; raise notice 'a = %', a; end$$; + +do $$ declare a int[]; +begin a := array[1,2]; a[2] := a[2] + 1; raise notice 'a = %', a; end$$; + +do $$ declare a int[]; +begin a[1:2] := array[3,4]; raise notice 'a = %', a; end$$; + +do $$ declare a int[]; +begin a[1:2] := 4; raise notice 'a = %', a; end$$; -- error + +do $$ declare a complex[]; +begin a[1] := (1,2); a[1].i := 11; raise notice 'a = %', a; end$$; + +do $$ declare a complex[]; +begin a[1].i := 11; raise notice 'a = %, a[1].i = %', a, a[1].i; end$$; + +-- perhaps this ought to work, but for now it doesn't: +do $$ declare a complex[]; +begin a[1:2].i := array[11,12]; raise notice 'a = %', a; end$$; + +do $$ declare a quadarray; +begin a.c1[1].i := 11; raise notice 'a = %, a.c1[1].i = %', a, a.c1[1].i; end$$; + +do $$ declare a int[]; +begin a := array_agg(x) from (values(1),(2),(3)) v(x); raise notice 'a = %', a; end$$; + +do $$ declare a int[] := array[1,2,3]; +begin + -- test scenarios for optimization of updates of R/W expanded objects + a := array_append(a, 42); -- optimizable using "transfer" method + a := a || a[3]; -- optimizable using "inplace" method + a := a[1] || a; -- ditto, but let's test array_prepend + a := a || a; -- not optimizable + raise notice 'a = %', a; +end$$; + +create temp table onecol as select array[1,2] as f1; + +do $$ declare a int[]; +begin a := f1 from onecol; raise notice 'a = %', a; end$$; + +do $$ declare a int[]; +begin a := * from onecol for update; raise notice 'a = %', a; end$$; + +-- error cases: + +do $$ declare a int[]; +begin a := from onecol; raise notice 'a = %', a; end$$; + +do $$ declare a int[]; +begin a := f1, f1 from onecol; raise notice 'a = %', a; end$$; + +insert into onecol values(array[11]); + +do $$ declare a int[]; +begin a := f1 from onecol; raise notice 'a = %', a; end$$; + +do $$ declare a int[]; +begin a := f1 from onecol limit 1; raise notice 'a = %', a; end$$; + +do $$ declare a real; +begin a[1] := 2; raise notice 'a = %', a; end$$; + +do $$ declare a complex; +begin a.r[1] := 2; raise notice 'a = %', a; end$$; + +-- +-- test of %type[] and %rowtype[] syntax +-- + +-- check supported syntax +do $$ +declare + v int; + v1 v%type; + v2 v%type[]; + v3 v%type[1]; + v4 v%type[][]; + v5 v%type[1][3]; + v6 v%type array; + v7 v%type array[]; + v8 v%type array[1]; + v9 v%type array[1][1]; + v10 pg_catalog.pg_class%rowtype[]; +begin + raise notice '%', pg_typeof(v1); + raise notice '%', pg_typeof(v2); + raise notice '%', pg_typeof(v3); + raise notice '%', pg_typeof(v4); + raise notice '%', pg_typeof(v5); + raise notice '%', pg_typeof(v6); + raise notice '%', pg_typeof(v7); + raise notice '%', pg_typeof(v8); + raise notice '%', pg_typeof(v9); + raise notice '%', pg_typeof(v10); +end; +$$; + +-- some types don't support arrays +do $$ +declare + v pg_node_tree; + v1 v%type[]; +begin +end; +$$; + +-- check functionality +do $$ +declare + v1 int; + v2 varchar; + a1 v1%type[]; + a2 v2%type[]; +begin + v1 := 10; + v2 := 'Hi'; + a1 := array[v1,v1]; + a2 := array[v2,v2]; + raise notice '% %', a1, a2; +end; +$$; + +create table array_test_table(a int, b varchar); + +insert into array_test_table values(1, 'first'), (2, 'second'); + +do $$ +declare tg array_test_table%rowtype[]; +begin + tg := array(select array_test_table from array_test_table); + raise notice '%', tg; + tg := array(select row(a,b) from array_test_table); + raise notice '%', tg; +end; +$$; diff --git a/postgres/plpgsql/plpgsql_cache.sql b/postgres/plpgsql/plpgsql_cache.sql new file mode 100644 index 00000000..a48f9b2a --- /dev/null +++ b/postgres/plpgsql/plpgsql_cache.sql @@ -0,0 +1,50 @@ +-- +-- Cache-behavior-dependent test cases +-- +-- These tests logically belong in plpgsql_record.sql, and perhaps someday +-- can be merged back into it. For now, however, their results are different +-- depending on debug_discard_caches, so we must have two expected-output +-- files to cover both cases. To minimize the maintenance effort resulting +-- from that, this file should contain only tests that do have different +-- results under debug_discard_caches. +-- + +-- check behavior with changes of a named rowtype +create table c_mutable(f1 int, f2 text); + +create function c_sillyaddone(int) returns int language plpgsql as +$$ declare r c_mutable; begin r.f1 := $1; return r.f1 + 1; end $$; +select c_sillyaddone(42); + +alter table c_mutable drop column f1; +alter table c_mutable add column f1 float8; + +-- currently, this fails due to cached plan for "r.f1 + 1" expression +-- (but if debug_discard_caches is on, it will succeed) +select c_sillyaddone(42); + +-- but it's OK if we force plan rebuilding +discard plans; +select c_sillyaddone(42); + +-- check behavior with changes in a record rowtype +create function show_result_type(text) returns text language plpgsql as +$$ + declare + r record; + t text; + begin + execute $1 into r; + select pg_typeof(r.a) into t; + return format('type %s value %s', t, r.a::text); + end; +$$; + +select show_result_type('select 1 as a'); +-- currently this fails due to cached plan for pg_typeof expression +-- (but if debug_discard_caches is on, it will succeed) +select show_result_type('select 2.0 as a'); + +-- but it's OK if we force plan rebuilding +discard plans; +select show_result_type('select 2.0 as a'); diff --git a/postgres/plpgsql/plpgsql_call.sql b/postgres/plpgsql/plpgsql_call.sql new file mode 100644 index 00000000..08c1659e --- /dev/null +++ b/postgres/plpgsql/plpgsql_call.sql @@ -0,0 +1,591 @@ +-- +-- Tests for procedures / CALL syntax +-- + +CREATE PROCEDURE test_proc1() +LANGUAGE plpgsql +AS $$ +BEGIN + NULL; +END; +$$; + +CALL test_proc1(); + + +-- error: can't return non-NULL +CREATE PROCEDURE test_proc2() +LANGUAGE plpgsql +AS $$ +BEGIN + RETURN 5; +END; +$$; + + +CREATE TABLE test1 (a int); + +CREATE PROCEDURE test_proc3(x int) +LANGUAGE plpgsql +AS $$ +BEGIN + INSERT INTO test1 VALUES (x); +END; +$$; + +CALL test_proc3(55); + +SELECT * FROM test1; + + +-- Check that plan revalidation doesn't prevent setting transaction properties +-- (bug #18059). This test must include the first temp-object creation in +-- this script, or it won't exercise the bug scenario. Hence we put it early. +CREATE PROCEDURE test_proc3a() +LANGUAGE plpgsql +AS $$ +BEGIN + COMMIT; + SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; + RAISE NOTICE 'done'; +END; +$$; + +CALL test_proc3a(); +CREATE TEMP TABLE tt1(f1 int); +CALL test_proc3a(); + + +-- nested CALL +TRUNCATE TABLE test1; + +CREATE PROCEDURE test_proc4(y int) +LANGUAGE plpgsql +AS $$ +BEGIN + CALL test_proc3(y); + CALL test_proc3($1); +END; +$$; + +CALL test_proc4(66); + +SELECT * FROM test1; + +CALL test_proc4(66); + +SELECT * FROM test1; + + +-- output arguments + +CREATE PROCEDURE test_proc5(INOUT a text) +LANGUAGE plpgsql +AS $$ +BEGIN + a := a || '+' || a; +END; +$$; + +CALL test_proc5('abc'); + + +CREATE PROCEDURE test_proc6(a int, INOUT b int, INOUT c int) +LANGUAGE plpgsql +AS $$ +BEGIN + b := b * a; + c := c * a; +END; +$$; + +CALL test_proc6(2, 3, 4); + + +DO +LANGUAGE plpgsql +$$ +DECLARE + x int := 3; + y int := 4; +BEGIN + CALL test_proc6(2, x, y); + RAISE INFO 'x = %, y = %', x, y; + CALL test_proc6(2, c => y, b => x); + RAISE INFO 'x = %, y = %', x, y; +END; +$$; + + +DO +LANGUAGE plpgsql +$$ +DECLARE + x int := 3; + y int := 4; +BEGIN + CALL test_proc6(2, x + 1, y); -- error + RAISE INFO 'x = %, y = %', x, y; +END; +$$; + + +DO +LANGUAGE plpgsql +$$ +DECLARE + x constant int := 3; + y int := 4; +BEGIN + CALL test_proc6(2, x, y); -- error because x is constant +END; +$$; + + +DO +LANGUAGE plpgsql +$$ +DECLARE + x int := 3; + y int := 4; +BEGIN + FOR i IN 1..5 LOOP + CALL test_proc6(i, x, y); + RAISE INFO 'x = %, y = %', x, y; + END LOOP; +END; +$$; + + +-- recursive with output arguments + +CREATE PROCEDURE test_proc7(x int, INOUT a int, INOUT b numeric) +LANGUAGE plpgsql +AS $$ +BEGIN +IF x > 1 THEN + a := x / 10; + b := x / 2; + CALL test_proc7(b::int, a, b); +END IF; +END; +$$; + +CALL test_proc7(100, -1, -1); + +-- inner COMMIT with output arguments + +CREATE PROCEDURE test_proc7c(x int, INOUT a int, INOUT b numeric) +LANGUAGE plpgsql +AS $$ +BEGIN + a := x / 10; + b := x / 2; + COMMIT; +END; +$$; + +CREATE PROCEDURE test_proc7cc(_x int) +LANGUAGE plpgsql +AS $$ +DECLARE _a int; _b numeric; +BEGIN + CALL test_proc7c(_x, _a, _b); + RAISE NOTICE '_x: %,_a: %, _b: %', _x, _a, _b; +END +$$; + +CALL test_proc7cc(10); + + +-- named parameters and defaults + +CREATE PROCEDURE test_proc8a(INOUT a int, INOUT b int) +LANGUAGE plpgsql +AS $$ +BEGIN + RAISE NOTICE 'a: %, b: %', a, b; + a := a * 10; + b := b + 10; +END; +$$; + +CALL test_proc8a(10, 20); +CALL test_proc8a(b => 20, a => 10); + +DO $$ +DECLARE _a int; _b int; +BEGIN + _a := 10; _b := 30; + CALL test_proc8a(_a, _b); + RAISE NOTICE '_a: %, _b: %', _a, _b; + CALL test_proc8a(b => _b, a => _a); + RAISE NOTICE '_a: %, _b: %', _a, _b; +END +$$; + + +CREATE PROCEDURE test_proc8b(INOUT a int, INOUT b int, INOUT c int) +LANGUAGE plpgsql +AS $$ +BEGIN + RAISE NOTICE 'a: %, b: %, c: %', a, b, c; + a := a * 10; + b := b + 10; + c := c * -10; +END; +$$; + +DO $$ +DECLARE _a int; _b int; _c int; +BEGIN + _a := 10; _b := 30; _c := 50; + CALL test_proc8b(_a, _b, _c); + RAISE NOTICE '_a: %, _b: %, _c: %', _a, _b, _c; + CALL test_proc8b(_a, c => _c, b => _b); + RAISE NOTICE '_a: %, _b: %, _c: %', _a, _b, _c; +END +$$; + + +CREATE PROCEDURE test_proc8c(INOUT a int, INOUT b int, INOUT c int DEFAULT 11) +LANGUAGE plpgsql +AS $$ +BEGIN + RAISE NOTICE 'a: %, b: %, c: %', a, b, c; + a := a * 10; + b := b + 10; + c := c * -10; +END; +$$; + +DO $$ +DECLARE _a int; _b int; _c int; +BEGIN + _a := 10; _b := 30; _c := 50; + CALL test_proc8c(_a, _b, _c); + RAISE NOTICE '_a: %, _b: %, _c: %', _a, _b, _c; + _a := 10; _b := 30; _c := 50; + CALL test_proc8c(_a, c => _c, b => _b); + RAISE NOTICE '_a: %, _b: %, _c: %', _a, _b, _c; + _a := 10; _b := 30; _c := 50; + CALL test_proc8c(c => _c, b => _b, a => _a); + RAISE NOTICE '_a: %, _b: %, _c: %', _a, _b, _c; +END +$$; + +DO $$ +DECLARE _a int; _b int; _c int; +BEGIN + _a := 10; _b := 30; _c := 50; + CALL test_proc8c(_a, _b); -- fail, no output argument for c + RAISE NOTICE '_a: %, _b: %, _c: %', _a, _b, _c; +END +$$; + +DO $$ +DECLARE _a int; _b int; _c int; +BEGIN + _a := 10; _b := 30; _c := 50; + CALL test_proc8c(_a, b => _b); -- fail, no output argument for c + RAISE NOTICE '_a: %, _b: %, _c: %', _a, _b, _c; +END +$$; + + +-- OUT parameters + +CREATE PROCEDURE test_proc9(IN a int, OUT b int) +LANGUAGE plpgsql +AS $$ +BEGIN + RAISE NOTICE 'a: %, b: %', a, b; + b := a * 2; +END; +$$; + +DO $$ +DECLARE _a int; _b int; +BEGIN + _a := 10; _b := 30; + CALL test_proc9(_a, _b); + RAISE NOTICE '_a: %, _b: %', _a, _b; +END +$$; + +CREATE PROCEDURE test_proc10(IN a int, OUT b int, IN c int DEFAULT 11) +LANGUAGE plpgsql +AS $$ +BEGIN + RAISE NOTICE 'a: %, b: %, c: %', a, b, c; + b := a - c; +END; +$$; + +DO $$ +DECLARE _a int; _b int; _c int; +BEGIN + _a := 10; _b := 30; _c := 7; + CALL test_proc10(_a, _b, _c); + RAISE NOTICE '_a: %, _b: %, _c: %', _a, _b, _c; + + _a := 10; _b := 30; _c := 7; + CALL test_proc10(_a, _b, c => _c); + RAISE NOTICE '_a: %, _b: %, _c: %', _a, _b, _c; + + _a := 10; _b := 30; _c := 7; + CALL test_proc10(a => _a, b => _b, c => _c); + RAISE NOTICE '_a: %, _b: %, _c: %', _a, _b, _c; + + _a := 10; _b := 30; _c := 7; + CALL test_proc10(_a, c => _c, b => _b); + RAISE NOTICE '_a: %, _b: %, _c: %', _a, _b, _c; + + _a := 10; _b := 30; _c := 7; + CALL test_proc10(_a, _b); + RAISE NOTICE '_a: %, _b: %, _c: %', _a, _b, _c; + + _a := 10; _b := 30; _c := 7; + CALL test_proc10(_a, b => _b); + RAISE NOTICE '_a: %, _b: %, _c: %', _a, _b, _c; + + _a := 10; _b := 30; _c := 7; + CALL test_proc10(b => _b, a => _a); + RAISE NOTICE '_a: %, _b: %, _c: %', _a, _b, _c; +END +$$; + +-- OUT + VARIADIC + +CREATE PROCEDURE test_proc11(a OUT int, VARIADIC b int[]) +LANGUAGE plpgsql +AS $$ +BEGIN + RAISE NOTICE 'a: %, b: %', a, b; + a := b[1] + b[2]; +END; +$$; + +DO $$ +DECLARE _a int; _b int; _c int; +BEGIN + _a := 10; _b := 30; _c := 7; + CALL test_proc11(_a, _b, _c); + RAISE NOTICE '_a: %, _b: %, _c: %', _a, _b, _c; +END +$$; + +-- polymorphic OUT arguments + +CREATE PROCEDURE test_proc12(a anyelement, OUT b anyelement, OUT c anyarray) +LANGUAGE plpgsql +AS $$ +BEGIN + RAISE NOTICE 'a: %', a; + b := a; + c := array[a]; +END; +$$; + +DO $$ +DECLARE _a int; _b int; _c int[]; +BEGIN + _a := 10; + CALL test_proc12(_a, _b, _c); + RAISE NOTICE '_a: %, _b: %, _c: %', _a, _b, _c; +END +$$; + +DO $$ +DECLARE _a int; _b int; _c text[]; +BEGIN + _a := 10; + CALL test_proc12(_a, _b, _c); -- error + RAISE NOTICE '_a: %, _b: %, _c: %', _a, _b, _c; +END +$$; + + +-- transition variable assignment + +TRUNCATE test1; + +CREATE FUNCTION triggerfunc1() RETURNS trigger +LANGUAGE plpgsql +AS $$ +DECLARE + z int := 0; +BEGIN + CALL test_proc6(2, NEW.a, NEW.a); + RETURN NEW; +END; +$$; + +CREATE TRIGGER t1 BEFORE INSERT ON test1 EXECUTE PROCEDURE triggerfunc1(); + +INSERT INTO test1 VALUES (1), (2), (3); + +UPDATE test1 SET a = 22 WHERE a = 2; + +SELECT * FROM test1 ORDER BY a; + + +DROP PROCEDURE test_proc1; +DROP PROCEDURE test_proc3; +DROP PROCEDURE test_proc4; + +DROP TABLE test1; + + +-- more checks for named-parameter handling + +CREATE PROCEDURE p1(v_cnt int, v_Text inout text = NULL) +AS $$ +BEGIN + v_Text := 'v_cnt = ' || v_cnt; +END +$$ LANGUAGE plpgsql; + +DO $$ +DECLARE + v_Text text; + v_cnt integer := 42; +BEGIN + CALL p1(v_cnt := v_cnt); -- error, must supply something for v_Text + RAISE NOTICE '%', v_Text; +END; +$$; + +DO $$ +DECLARE + v_Text text; + v_cnt integer := 42; +BEGIN + CALL p1(v_cnt := v_cnt, v_Text := v_Text); + RAISE NOTICE '%', v_Text; +END; +$$; + +DO $$ +DECLARE + v_Text text; +BEGIN + CALL p1(10, v_Text := v_Text); + RAISE NOTICE '%', v_Text; +END; +$$; + +DO $$ +DECLARE + v_Text text; + v_cnt integer; +BEGIN + CALL p1(v_Text := v_Text, v_cnt := v_cnt); + RAISE NOTICE '%', v_Text; +END; +$$; + + +-- check that we detect change of dependencies in CALL +-- atomic and non-atomic call sites used to do this differently, so check both + +CREATE PROCEDURE inner_p (f1 int) +AS $$ +BEGIN + RAISE NOTICE 'inner_p(%)', f1; +END +$$ LANGUAGE plpgsql; + +CREATE FUNCTION f(int) RETURNS int AS $$ SELECT $1 + 1 $$ LANGUAGE sql; + +CREATE PROCEDURE outer_p (f1 int) +AS $$ +BEGIN + RAISE NOTICE 'outer_p(%)', f1; + CALL inner_p(f(f1)); +END +$$ LANGUAGE plpgsql; + +CREATE FUNCTION outer_f (f1 int) RETURNS void +AS $$ +BEGIN + RAISE NOTICE 'outer_f(%)', f1; + CALL inner_p(f(f1)); +END +$$ LANGUAGE plpgsql; + +CALL outer_p(42); +SELECT outer_f(42); + +DROP FUNCTION f(int); +CREATE FUNCTION f(int) RETURNS int AS $$ SELECT $1 + 2 $$ LANGUAGE sql; + +CALL outer_p(42); +SELECT outer_f(42); + +-- Check that stable functions in CALL see the correct snapshot + +CREATE TABLE t_test (x int); +INSERT INTO t_test VALUES (0); + +CREATE FUNCTION f_get_x () RETURNS int +AS $$ +DECLARE l_result int; +BEGIN + SELECT x INTO l_result FROM t_test; + RETURN l_result; +END +$$ LANGUAGE plpgsql STABLE; + +CREATE PROCEDURE f_print_x (x int) +AS $$ +BEGIN + RAISE NOTICE 'f_print_x(%)', x; +END +$$ LANGUAGE plpgsql; + +-- test in non-atomic context +DO $$ +BEGIN + UPDATE t_test SET x = x + 1; + RAISE NOTICE 'f_get_x(%)', f_get_x(); + CALL f_print_x(f_get_x()); + UPDATE t_test SET x = x + 1; + RAISE NOTICE 'f_get_x(%)', f_get_x(); + CALL f_print_x(f_get_x()); + ROLLBACK; +END +$$; + +-- test in non-atomic context, except exception block is locally atomic +DO $$ +BEGIN + BEGIN + UPDATE t_test SET x = x + 1; + RAISE NOTICE 'f_get_x(%)', f_get_x(); + CALL f_print_x(f_get_x()); + UPDATE t_test SET x = x + 1; + RAISE NOTICE 'f_get_x(%)', f_get_x(); + CALL f_print_x(f_get_x()); + EXCEPTION WHEN division_by_zero THEN + RAISE NOTICE '%', SQLERRM; + END; + ROLLBACK; +END +$$; + +-- test in atomic context +BEGIN; + +DO $$ +BEGIN + UPDATE t_test SET x = x + 1; + RAISE NOTICE 'f_get_x(%)', f_get_x(); + CALL f_print_x(f_get_x()); + UPDATE t_test SET x = x + 1; + RAISE NOTICE 'f_get_x(%)', f_get_x(); + CALL f_print_x(f_get_x()); +END +$$; + +ROLLBACK; diff --git a/postgres/plpgsql/plpgsql_control.sql b/postgres/plpgsql/plpgsql_control.sql new file mode 100644 index 00000000..8e007c51 --- /dev/null +++ b/postgres/plpgsql/plpgsql_control.sql @@ -0,0 +1,502 @@ +-- +-- Tests for PL/pgSQL control structures +-- + +-- integer FOR loop + +do $$ +begin + -- basic case + for i in 1..3 loop + raise notice '1..3: i = %', i; + end loop; + -- with BY, end matches exactly + for i in 1..10 by 3 loop + raise notice '1..10 by 3: i = %', i; + end loop; + -- with BY, end does not match + for i in 1..11 by 3 loop + raise notice '1..11 by 3: i = %', i; + end loop; + -- zero iterations + for i in 1..0 by 3 loop + raise notice '1..0 by 3: i = %', i; + end loop; + -- REVERSE + for i in reverse 10..0 by 3 loop + raise notice 'reverse 10..0 by 3: i = %', i; + end loop; + -- potential overflow + for i in 2147483620..2147483647 by 10 loop + raise notice '2147483620..2147483647 by 10: i = %', i; + end loop; + -- potential overflow, reverse direction + for i in reverse -2147483620..-2147483647 by 10 loop + raise notice 'reverse -2147483620..-2147483647 by 10: i = %', i; + end loop; +end$$; + +-- BY can't be zero or negative +do $$ +begin + for i in 1..3 by 0 loop + raise notice '1..3 by 0: i = %', i; + end loop; +end$$; + +do $$ +begin + for i in 1..3 by -1 loop + raise notice '1..3 by -1: i = %', i; + end loop; +end$$; + +do $$ +begin + for i in reverse 1..3 by -1 loop + raise notice 'reverse 1..3 by -1: i = %', i; + end loop; +end$$; + + +-- CONTINUE statement + +create table conttesttbl(idx serial, v integer); +insert into conttesttbl(v) values(10); +insert into conttesttbl(v) values(20); +insert into conttesttbl(v) values(30); +insert into conttesttbl(v) values(40); + +create function continue_test1() returns void as $$ +declare _i integer = 0; _r record; +begin + raise notice '---1---'; + loop + _i := _i + 1; + raise notice '%', _i; + continue when _i < 10; + exit; + end loop; + + raise notice '---2---'; + <> + loop + _i := _i - 1; + loop + raise notice '%', _i; + continue lbl when _i > 0; + exit lbl; + end loop; + end loop; + + raise notice '---3---'; + <> + while _i < 10 loop + _i := _i + 1; + continue the_loop when _i % 2 = 0; + raise notice '%', _i; + end loop; + + raise notice '---4---'; + for _i in 1..10 loop + begin + -- applies to outer loop, not the nested begin block + continue when _i < 5; + raise notice '%', _i; + end; + end loop; + + raise notice '---5---'; + for _r in select * from conttesttbl loop + continue when _r.v <= 20; + raise notice '%', _r.v; + end loop; + + raise notice '---6---'; + for _r in execute 'select * from conttesttbl' loop + continue when _r.v <= 20; + raise notice '%', _r.v; + end loop; + + raise notice '---7---'; + <> + for _i in 1..3 loop + continue looplabel when _i = 2; + raise notice '%', _i; + end loop; + + raise notice '---8---'; + _i := 1; + while _i <= 3 loop + raise notice '%', _i; + _i := _i + 1; + continue when _i = 3; + end loop; + + raise notice '---9---'; + for _r in select * from conttesttbl order by v limit 1 loop + raise notice '%', _r.v; + continue; + end loop; + + raise notice '---10---'; + for _r in execute 'select * from conttesttbl order by v limit 1' loop + raise notice '%', _r.v; + continue; + end loop; + + raise notice '---11---'; + <> + for _i in 1..2 loop + raise notice 'outer %', _i; + <> + for _j in 1..3 loop + continue outerlooplabel when _j = 2; + raise notice 'inner %', _j; + end loop; + end loop; +end; $$ language plpgsql; + +select continue_test1(); + +-- should fail: CONTINUE is only legal inside a loop +create function continue_error1() returns void as $$ +begin + begin + continue; + end; +end; +$$ language plpgsql; + +-- should fail: unlabeled EXIT is only legal inside a loop +create function exit_error1() returns void as $$ +begin + begin + exit; + end; +end; +$$ language plpgsql; + +-- should fail: no such label +create function continue_error2() returns void as $$ +begin + begin + loop + continue no_such_label; + end loop; + end; +end; +$$ language plpgsql; + +-- should fail: no such label +create function exit_error2() returns void as $$ +begin + begin + loop + exit no_such_label; + end loop; + end; +end; +$$ language plpgsql; + +-- should fail: CONTINUE can't reference the label of a named block +create function continue_error3() returns void as $$ +begin + <> + begin + loop + continue begin_block1; + end loop; + end; +end; +$$ language plpgsql; + +-- On the other hand, EXIT *can* reference the label of a named block +create function exit_block1() returns void as $$ +begin + <> + begin + loop + exit begin_block1; + raise exception 'should not get here'; + end loop; + end; +end; +$$ language plpgsql; + +select exit_block1(); + +-- verbose end block and end loop +create function end_label1() returns void as $$ +<> +begin + <> + for i in 1 .. 10 loop + raise notice 'i = %', i; + exit flbl1; + end loop flbl1; + <> + for j in 1 .. 10 loop + raise notice 'j = %', j; + exit flbl2; + end loop; +end blbl; +$$ language plpgsql; + +select end_label1(); + +-- should fail: undefined end label +create function end_label2() returns void as $$ +begin + for _i in 1 .. 10 loop + exit; + end loop flbl1; +end; +$$ language plpgsql; + +-- should fail: end label does not match start label +create function end_label3() returns void as $$ +<> +begin + <> + for _i in 1 .. 10 loop + exit; + end loop outer_label; +end; +$$ language plpgsql; + +-- should fail: end label on a block without a start label +create function end_label4() returns void as $$ +<> +begin + for _i in 1 .. 10 loop + exit; + end loop outer_label; +end; +$$ language plpgsql; + +-- unlabeled exit matches no blocks +do $$ +begin +for i in 1..10 loop + <> + begin + begin -- unlabeled block + exit; + raise notice 'should not get here'; + end; + raise notice 'should not get here, either'; + end; + raise notice 'nor here'; +end loop; +raise notice 'should get here'; +end$$; + +-- check exit out of an unlabeled block to a labeled one +do $$ +<> +begin + <> + begin + <> + begin + begin -- unlabeled block + exit innerblock; + raise notice 'should not get here'; + end; + raise notice 'should not get here, either'; + end; + raise notice 'nor here'; + end; + raise notice 'should get here'; +end$$; + +-- check exit out of outermost block +do $$ +<> +begin + <> + begin + exit outerblock; + raise notice 'should not get here'; + end; + raise notice 'should not get here, either'; +end$$; + +-- unlabeled exit does match a while loop +do $$ +begin + <> + while 1 > 0 loop + <> + while 1 > 0 loop + <> + while 1 > 0 loop + exit; + raise notice 'should not get here'; + end loop; + raise notice 'should get here'; + exit outermostwhile; + raise notice 'should not get here, either'; + end loop; + raise notice 'nor here'; + end loop; + raise notice 'should get here, too'; +end$$; + +-- check exit out of an unlabeled while to a labeled one +do $$ +begin + <> + while 1 > 0 loop + while 1 > 0 loop + exit outerwhile; + raise notice 'should not get here'; + end loop; + raise notice 'should not get here, either'; + end loop; + raise notice 'should get here'; +end$$; + +-- continue to an outer while +do $$ +declare i int := 0; +begin + <> + while i < 2 loop + raise notice 'outermostwhile, i = %', i; + i := i + 1; + <> + while 1 > 0 loop + <> + while 1 > 0 loop + continue outermostwhile; + raise notice 'should not get here'; + end loop; + raise notice 'should not get here, either'; + end loop; + raise notice 'nor here'; + end loop; + raise notice 'out of outermostwhile, i = %', i; +end$$; + +-- return out of a while +create function return_from_while() returns int language plpgsql as $$ +declare i int := 0; +begin + while i < 10 loop + if i > 2 then + return i; + end if; + i := i + 1; + end loop; + return null; +end$$; + +select return_from_while(); + +-- using list of scalars in fori and fore stmts +create function for_vect() returns void as $proc$ +<>declare a integer; b varchar; c varchar; r record; +begin + -- fori + for i in 1 .. 3 loop + raise notice '%', i; + end loop; + -- fore with record var + for r in select gs as aa, 'BB' as bb, 'CC' as cc from generate_series(1,4) gs loop + raise notice '% % %', r.aa, r.bb, r.cc; + end loop; + -- fore with single scalar + for a in select gs from generate_series(1,4) gs loop + raise notice '%', a; + end loop; + -- fore with multiple scalars + for a,b,c in select gs, 'BB','CC' from generate_series(1,4) gs loop + raise notice '% % %', a, b, c; + end loop; + -- using qualified names in fors, fore is enabled, disabled only for fori + for lbl.a, lbl.b, lbl.c in execute $$select gs, 'bb','cc' from generate_series(1,4) gs$$ loop + raise notice '% % %', a, b, c; + end loop; +end; +$proc$ language plpgsql; + +select for_vect(); + +-- CASE statement + +create or replace function case_test(bigint) returns text as $$ +declare a int = 10; + b int = 1; +begin + case $1 + when 1 then + return 'one'; + when 2 then + return 'two'; + when 3,4,3+5 then + return 'three, four or eight'; + when a then + return 'ten'; + when a+b, a+b+1 then + return 'eleven, twelve'; + end case; +end; +$$ language plpgsql immutable; + +select case_test(1); +select case_test(2); +select case_test(3); +select case_test(4); +select case_test(5); -- fails +select case_test(8); +select case_test(10); +select case_test(11); +select case_test(12); +select case_test(13); -- fails + +create or replace function catch() returns void as $$ +begin + raise notice '%', case_test(6); +exception + when case_not_found then + raise notice 'caught case_not_found % %', SQLSTATE, SQLERRM; +end +$$ language plpgsql; + +select catch(); + +-- test the searched variant too, as well as ELSE +create or replace function case_test(bigint) returns text as $$ +declare a int = 10; +begin + case + when $1 = 1 then + return 'one'; + when $1 = a + 2 then + return 'twelve'; + else + return 'other'; + end case; +end; +$$ language plpgsql immutable; + +select case_test(1); +select case_test(2); +select case_test(12); +select case_test(13); + +-- test line comment between WHEN and THEN +create or replace function case_comment(int) returns text as $$ +begin + case $1 + when 1 -- comment before THEN + then return 'one'; + else + return 'other'; + end case; +end; +$$ language plpgsql immutable; + +select case_comment(1); diff --git a/postgres/plpgsql/plpgsql_copy.sql b/postgres/plpgsql/plpgsql_copy.sql new file mode 100644 index 00000000..37f1fa13 --- /dev/null +++ b/postgres/plpgsql/plpgsql_copy.sql @@ -0,0 +1,58 @@ +-- directory paths are passed to us in environment variables +\getenv abs_srcdir PG_ABS_SRCDIR +\getenv abs_builddir PG_ABS_BUILDDIR + +-- set up file names to use +\set srcfilename :abs_srcdir '/data/copy1.data' +\set destfilename :abs_builddir '/results/copy1.data' + +CREATE TABLE copy1 (a int, b float); + +-- COPY TO/FROM not authorized from client. +DO LANGUAGE plpgsql $$ +BEGIN + COPY copy1 TO stdout; +END; +$$; +DO LANGUAGE plpgsql $$ +BEGIN + COPY copy1 FROM stdin; +END; +$$; +DO LANGUAGE plpgsql $$ +BEGIN + EXECUTE 'COPY copy1 TO stdout'; +END; +$$; +DO LANGUAGE plpgsql $$ +BEGIN + EXECUTE 'COPY copy1 FROM stdin'; +END; +$$; + +-- Valid cases +-- COPY FROM +\set dobody 'BEGIN COPY copy1 FROM ' :'srcfilename' '; END' +DO LANGUAGE plpgsql :'dobody'; +SELECT * FROM copy1 ORDER BY 1; +TRUNCATE copy1; +\set cmd 'COPY copy1 FROM ' :'srcfilename' +\set dobody 'BEGIN EXECUTE ' :'cmd' '; END' +DO LANGUAGE plpgsql :'dobody'; +SELECT * FROM copy1 ORDER BY 1; + +-- COPY TO +-- Copy the data externally once, then process it back to the table. +\set dobody 'BEGIN COPY copy1 TO ' :'destfilename' '; END' +DO LANGUAGE plpgsql :'dobody'; +TRUNCATE copy1; +\set dobody 'BEGIN COPY copy1 FROM ' :'destfilename' '; END' +DO LANGUAGE plpgsql :'dobody'; + +\set cmd 'COPY copy1 FROM ' :'destfilename' +\set dobody 'BEGIN EXECUTE ' :'cmd' '; END' +DO LANGUAGE plpgsql :'dobody'; + +SELECT * FROM copy1 ORDER BY 1; + +DROP TABLE copy1; diff --git a/postgres/plpgsql/plpgsql_domain.sql b/postgres/plpgsql/plpgsql_domain.sql new file mode 100644 index 00000000..4c5dd7dc --- /dev/null +++ b/postgres/plpgsql/plpgsql_domain.sql @@ -0,0 +1,289 @@ +-- +-- Tests for PL/pgSQL's behavior with domain types +-- + +CREATE DOMAIN booltrue AS bool CHECK (VALUE IS TRUE OR VALUE IS NULL); + +CREATE FUNCTION test_argresult_booltrue(x booltrue, y bool) RETURNS booltrue AS $$ +begin +return y; +end +$$ LANGUAGE plpgsql; + +SELECT * FROM test_argresult_booltrue(true, true); +SELECT * FROM test_argresult_booltrue(false, true); +SELECT * FROM test_argresult_booltrue(true, false); + +CREATE FUNCTION test_assign_booltrue(x bool, y bool) RETURNS booltrue AS $$ +declare v booltrue := x; +begin +v := y; +return v; +end +$$ LANGUAGE plpgsql; + +SELECT * FROM test_assign_booltrue(true, true); +SELECT * FROM test_assign_booltrue(false, true); +SELECT * FROM test_assign_booltrue(true, false); + + +CREATE DOMAIN uint2 AS int2 CHECK (VALUE >= 0); + +CREATE FUNCTION test_argresult_uint2(x uint2, y int) RETURNS uint2 AS $$ +begin +return y; +end +$$ LANGUAGE plpgsql; + +SELECT * FROM test_argresult_uint2(100::uint2, 50); +SELECT * FROM test_argresult_uint2(100::uint2, -50); +SELECT * FROM test_argresult_uint2(null, 1); + +CREATE FUNCTION test_assign_uint2(x int, y int) RETURNS uint2 AS $$ +declare v uint2 := x; +begin +v := y; +return v; +end +$$ LANGUAGE plpgsql; + +SELECT * FROM test_assign_uint2(100, 50); +SELECT * FROM test_assign_uint2(100, -50); +SELECT * FROM test_assign_uint2(-100, 50); +SELECT * FROM test_assign_uint2(null, 1); + + +CREATE DOMAIN nnint AS int NOT NULL; + +CREATE FUNCTION test_argresult_nnint(x nnint, y int) RETURNS nnint AS $$ +begin +return y; +end +$$ LANGUAGE plpgsql; + +SELECT * FROM test_argresult_nnint(10, 20); +SELECT * FROM test_argresult_nnint(null, 20); +SELECT * FROM test_argresult_nnint(10, null); + +CREATE FUNCTION test_assign_nnint(x int, y int) RETURNS nnint AS $$ +declare v nnint := x; +begin +v := y; +return v; +end +$$ LANGUAGE plpgsql; + +SELECT * FROM test_assign_nnint(10, 20); +SELECT * FROM test_assign_nnint(null, 20); +SELECT * FROM test_assign_nnint(10, null); + + +-- +-- Domains over arrays +-- + +CREATE DOMAIN ordered_pair_domain AS integer[] CHECK (array_length(VALUE,1)=2 AND VALUE[1] < VALUE[2]); + +CREATE FUNCTION test_argresult_array_domain(x ordered_pair_domain) + RETURNS ordered_pair_domain AS $$ +begin +return x; +end +$$ LANGUAGE plpgsql; + +SELECT * FROM test_argresult_array_domain(ARRAY[0, 100]::ordered_pair_domain); +SELECT * FROM test_argresult_array_domain(NULL::ordered_pair_domain); + +CREATE FUNCTION test_argresult_array_domain_check_violation() + RETURNS ordered_pair_domain AS $$ +begin +return array[2,1]; +end +$$ LANGUAGE plpgsql; + +SELECT * FROM test_argresult_array_domain_check_violation(); + +CREATE FUNCTION test_assign_ordered_pair_domain(x int, y int, z int) RETURNS ordered_pair_domain AS $$ +declare v ordered_pair_domain := array[x, y]; +begin +v[2] := z; +return v; +end +$$ LANGUAGE plpgsql; + +SELECT * FROM test_assign_ordered_pair_domain(1,2,3); +SELECT * FROM test_assign_ordered_pair_domain(1,2,0); +SELECT * FROM test_assign_ordered_pair_domain(2,1,3); + + +-- +-- Arrays of domains +-- + +CREATE FUNCTION test_read_uint2_array(x uint2[]) RETURNS uint2 AS $$ +begin +return x[1]; +end +$$ LANGUAGE plpgsql; + +select test_read_uint2_array(array[1::uint2]); + +CREATE FUNCTION test_build_uint2_array(x int2) RETURNS uint2[] AS $$ +begin +return array[x, x]; +end +$$ LANGUAGE plpgsql; + +select test_build_uint2_array(1::int2); +select test_build_uint2_array(-1::int2); -- fail + +CREATE FUNCTION test_argresult_domain_array(x integer[]) + RETURNS ordered_pair_domain[] AS $$ +begin +return array[x::ordered_pair_domain, x::ordered_pair_domain]; +end +$$ LANGUAGE plpgsql; + +select test_argresult_domain_array(array[2,4]); +select test_argresult_domain_array(array[4,2]); -- fail + +CREATE FUNCTION test_argresult_domain_array2(x ordered_pair_domain) + RETURNS integer AS $$ +begin +return x[1]; +end +$$ LANGUAGE plpgsql; + +select test_argresult_domain_array2(array[2,4]); +select test_argresult_domain_array2(array[4,2]); -- fail + +CREATE FUNCTION test_argresult_array_domain_array(x ordered_pair_domain[]) + RETURNS ordered_pair_domain AS $$ +begin +return x[1]; +end +$$ LANGUAGE plpgsql; + +select test_argresult_array_domain_array(array[array[2,4]::ordered_pair_domain]); + + +-- +-- Domains within composite +-- + +CREATE TYPE nnint_container AS (f1 int, f2 nnint); + +CREATE FUNCTION test_result_nnint_container(x int, y int) + RETURNS nnint_container AS $$ +begin +return row(x, y)::nnint_container; +end +$$ LANGUAGE plpgsql; + +SELECT test_result_nnint_container(null, 3); +SELECT test_result_nnint_container(3, null); -- fail + +CREATE FUNCTION test_assign_nnint_container(x int, y int, z int) + RETURNS nnint_container AS $$ +declare v nnint_container := row(x, y); +begin +v.f2 := z; +return v; +end +$$ LANGUAGE plpgsql; + +SELECT * FROM test_assign_nnint_container(1,2,3); +SELECT * FROM test_assign_nnint_container(1,2,null); +SELECT * FROM test_assign_nnint_container(1,null,3); + +-- Since core system allows this: +SELECT null::nnint_container; +-- so should PL/PgSQL + +CREATE FUNCTION test_assign_nnint_container2(x int, y int, z int) + RETURNS nnint_container AS $$ +declare v nnint_container; +begin +v.f2 := z; +return v; +end +$$ LANGUAGE plpgsql; + +SELECT * FROM test_assign_nnint_container2(1,2,3); +SELECT * FROM test_assign_nnint_container2(1,2,null); + + +-- +-- Domains of composite +-- + +CREATE TYPE named_pair AS ( + i integer, + j integer +); + +CREATE DOMAIN ordered_named_pair AS named_pair CHECK((VALUE).i <= (VALUE).j); + +CREATE FUNCTION read_ordered_named_pair(p ordered_named_pair) RETURNS integer AS $$ +begin +return p.i + p.j; +end +$$ LANGUAGE plpgsql; + +SELECT read_ordered_named_pair(row(1, 2)); +SELECT read_ordered_named_pair(row(2, 1)); -- fail + +CREATE FUNCTION build_ordered_named_pair(i int, j int) RETURNS ordered_named_pair AS $$ +begin +return row(i, j); +end +$$ LANGUAGE plpgsql; + +SELECT build_ordered_named_pair(1,2); +SELECT build_ordered_named_pair(2,1); -- fail + +CREATE FUNCTION test_assign_ordered_named_pair(x int, y int, z int) + RETURNS ordered_named_pair AS $$ +declare v ordered_named_pair := row(x, y); +begin +v.j := z; +return v; +end +$$ LANGUAGE plpgsql; + +SELECT * FROM test_assign_ordered_named_pair(1,2,3); +SELECT * FROM test_assign_ordered_named_pair(1,2,0); +SELECT * FROM test_assign_ordered_named_pair(2,1,3); + +CREATE FUNCTION build_ordered_named_pairs(i int, j int) RETURNS ordered_named_pair[] AS $$ +begin +return array[row(i, j), row(i, j+1)]; +end +$$ LANGUAGE plpgsql; + +SELECT build_ordered_named_pairs(1,2); +SELECT build_ordered_named_pairs(2,1); -- fail + +CREATE FUNCTION test_assign_ordered_named_pairs(x int, y int, z int) + RETURNS ordered_named_pair[] AS $$ +declare v ordered_named_pair[] := array[row(x, y)]; +begin +-- ideally this would work, but it doesn't yet: +-- v[1].j := z; +return v; +end +$$ LANGUAGE plpgsql; + +SELECT * FROM test_assign_ordered_named_pairs(1,2,3); +SELECT * FROM test_assign_ordered_named_pairs(2,1,3); +SELECT * FROM test_assign_ordered_named_pairs(1,2,0); -- should fail someday + +CREATE FUNCTION test_null_ordered_named_pair() + RETURNS ordered_named_pair AS $$ +declare v ordered_named_pair; +begin +return v; +end +$$ LANGUAGE plpgsql; + +SELECT * FROM test_null_ordered_named_pair(); diff --git a/postgres/plpgsql/plpgsql_misc.sql b/postgres/plpgsql/plpgsql_misc.sql new file mode 100644 index 00000000..0bc39fcf --- /dev/null +++ b/postgres/plpgsql/plpgsql_misc.sql @@ -0,0 +1,68 @@ +-- +-- Miscellaneous topics +-- + +-- Verify that we can parse new-style CREATE FUNCTION/PROCEDURE +do +$$ + declare procedure int; -- check we still recognize non-keywords as vars + begin + create function test1() returns int + begin atomic + select 2 + 2; + end; + create or replace procedure test2(x int) + begin atomic + select x + 2; + end; + end +$$; + +\sf test1 +\sf test2 + +-- Test %TYPE and %ROWTYPE error cases +create table misc_table(f1 int); + +do $$ declare x foo%type; begin end $$; +do $$ declare x notice%type; begin end $$; -- covers unreserved-keyword case +do $$ declare x foo.bar%type; begin end $$; +do $$ declare x foo.bar.baz%type; begin end $$; +do $$ declare x public.foo.bar%type; begin end $$; +do $$ declare x public.misc_table.zed%type; begin end $$; + +do $$ declare x foo%rowtype; begin end $$; +do $$ declare x notice%rowtype; begin end $$; -- covers unreserved-keyword case +do $$ declare x foo.bar%rowtype; begin end $$; +do $$ declare x foo.bar.baz%rowtype; begin end $$; +do $$ declare x public.foo%rowtype; begin end $$; +do $$ declare x public.misc_table%rowtype; begin end $$; + +-- Test handling of an unreserved keyword as a variable name +-- and record field name. +do $$ +declare + execute int; + r record; +begin + execute := 10; + raise notice 'execute = %', execute; + select 1 as strict into r; + raise notice 'r.strict = %', r.strict; +end $$; + +-- Test handling of a reserved keyword as a record field name. + +do $$ declare r record; +begin + select 1 as x, 2 as foreach into r; + raise notice 'r.x = %', r.x; + raise notice 'r.foreach = %', r.foreach; -- fails +end $$; + +do $$ declare r record; +begin + select 1 as x, 2 as foreach into r; + raise notice 'r.x = %', r.x; + raise notice 'r."foreach" = %', r."foreach"; -- ok +end $$; diff --git a/postgres/plpgsql/plpgsql_record.sql b/postgres/plpgsql/plpgsql_record.sql new file mode 100644 index 00000000..4fbed38b --- /dev/null +++ b/postgres/plpgsql/plpgsql_record.sql @@ -0,0 +1,579 @@ +-- +-- Tests for PL/pgSQL handling of composite (record) variables +-- + +create type two_int4s as (f1 int4, f2 int4); +create type more_int4s as (f0 text, f1 int4, f2 int4); +create type two_int8s as (q1 int8, q2 int8); +create type nested_int8s as (c1 two_int8s, c2 two_int8s); + +-- base-case return of a composite type +create function retc(int) returns two_int8s language plpgsql as +$$ begin return row($1,1)::two_int8s; end $$; +select retc(42); + +-- ok to return a matching record type +create or replace function retc(int) returns two_int8s language plpgsql as +$$ begin return row($1::int8, 1::int8); end $$; +select retc(42); + +-- we don't currently support implicit casting +create or replace function retc(int) returns two_int8s language plpgsql as +$$ begin return row($1,1); end $$; +select retc(42); + +-- nor extra columns +create or replace function retc(int) returns two_int8s language plpgsql as +$$ begin return row($1::int8, 1::int8, 42); end $$; +select retc(42); + +-- same cases with an intermediate "record" variable +create or replace function retc(int) returns two_int8s language plpgsql as +$$ declare r record; begin r := row($1::int8, 1::int8); return r; end $$; +select retc(42); + +create or replace function retc(int) returns two_int8s language plpgsql as +$$ declare r record; begin r := row($1,1); return r; end $$; +select retc(42); + +create or replace function retc(int) returns two_int8s language plpgsql as +$$ declare r record; begin r := row($1::int8, 1::int8, 42); return r; end $$; +select retc(42); + +-- but, for mostly historical reasons, we do convert when assigning +-- to a named-composite-type variable +create or replace function retc(int) returns two_int8s language plpgsql as +$$ declare r two_int8s; begin r := row($1::int8, 1::int8, 42); return r; end $$; +select retc(42); + +do $$ declare c two_int8s; +begin c := row(1,2); raise notice 'c = %', c; end$$; + +do $$ declare c two_int8s; +begin for c in select 1,2 loop raise notice 'c = %', c; end loop; end$$; + +do $$ declare c4 two_int4s; c8 two_int8s; +begin + c8 := row(1,2); + c4 := c8; + c8 := c4; + raise notice 'c4 = %', c4; + raise notice 'c8 = %', c8; +end$$; + +do $$ declare c two_int8s; d nested_int8s; +begin + c := row(1,2); + d := row(c, row(c.q1, c.q2+1)); + raise notice 'c = %, d = %', c, d; + c.q1 := 10; + d.c1 := row(11,12); + d.c2.q2 := 42; + raise notice 'c = %, d = %', c, d; + raise notice 'c.q1 = %, d.c2 = %', c.q1, d.c2; + raise notice '(d).c2.q2 = %', (d).c2.q2; -- doesn't work without parens + raise notice '(d.c2).q2 = %', (d.c2).q2; -- doesn't work without parens +end$$; + +-- block-qualified naming +do $$ <> declare c two_int8s; d nested_int8s; +begin + b.c := row(1,2); + b.d := row(b.c, row(b.c.q1, b.c.q2+1)); + raise notice 'b.c = %, b.d = %', b.c, b.d; + b.c.q1 := 10; + b.d.c1 := row(11,12); + b.d.c2.q2 := 42; + raise notice 'b.c = %, b.d = %', b.c, b.d; + raise notice 'b.c.q1 = %, b.d.c2 = %', b.c.q1, b.d.c2; + raise notice '(b.d).c2.q2 = %', (b.d).c2.q2; -- doesn't work without parens + raise notice '(b.d.c2).q2 = %', (b.d.c2).q2; -- doesn't work without parens +end$$; + +-- error cases +do $$ declare c two_int8s; begin c.x = 1; end $$; +do $$ declare c nested_int8s; begin c.x = 1; end $$; +do $$ declare c nested_int8s; begin c.x.q1 = 1; end $$; +do $$ declare c nested_int8s; begin c.c2.x = 1; end $$; +do $$ declare c nested_int8s; begin d.c2.x = 1; end $$; +do $$ <> declare c two_int8s; begin b.c.x = 1; end $$; +do $$ <> declare c nested_int8s; begin b.c.x = 1; end $$; +do $$ <> declare c nested_int8s; begin b.c.x.q1 = 1; end $$; +do $$ <> declare c nested_int8s; begin b.c.c2.x = 1; end $$; +do $$ <> declare c nested_int8s; begin b.d.c2.x = 1; end $$; + +-- check passing composite result to another function +create function getq1(two_int8s) returns int8 language plpgsql as $$ +declare r two_int8s; begin r := $1; return r.q1; end $$; + +select getq1(retc(344)); +select getq1(row(1,2)); + +do $$ +declare r1 two_int8s; r2 record; x int8; +begin + r1 := retc(345); + perform getq1(r1); + x := getq1(r1); + raise notice 'x = %', x; + r2 := retc(346); + perform getq1(r2); + x := getq1(r2); + raise notice 'x = %', x; +end$$; + +-- check assignments of composites +do $$ +declare r1 two_int8s; r2 two_int8s; r3 record; r4 record; +begin + r1 := row(1,2); + raise notice 'r1 = %', r1; + r1 := r1; -- shouldn't do anything + raise notice 'r1 = %', r1; + r2 := r1; + raise notice 'r1 = %', r1; + raise notice 'r2 = %', r2; + r2.q2 = r1.q1 + 3; -- check that r2 has distinct storage + raise notice 'r1 = %', r1; + raise notice 'r2 = %', r2; + r1 := null; + raise notice 'r1 = %', r1; + raise notice 'r2 = %', r2; + r1 := row(7,11)::two_int8s; + r2 := r1; + raise notice 'r1 = %', r1; + raise notice 'r2 = %', r2; + r3 := row(1,2); + r4 := r3; + raise notice 'r3 = %', r3; + raise notice 'r4 = %', r4; + r4.f1 := r4.f1 + 3; -- check that r4 has distinct storage + raise notice 'r3 = %', r3; + raise notice 'r4 = %', r4; + r1 := r3; + raise notice 'r1 = %', r1; + r4 := r1; + raise notice 'r4 = %', r4; + r4.q2 := r4.q2 + 1; -- r4's field names have changed + raise notice 'r4 = %', r4; +end$$; + +-- fields of named-type vars read as null if uninitialized +do $$ +declare r1 two_int8s; +begin + raise notice 'r1 = %', r1; + raise notice 'r1.q1 = %', r1.q1; + raise notice 'r1.q2 = %', r1.q2; + raise notice 'r1 = %', r1; +end$$; + +do $$ +declare r1 two_int8s; +begin + raise notice 'r1.q1 = %', r1.q1; + raise notice 'r1.q2 = %', r1.q2; + raise notice 'r1 = %', r1; + raise notice 'r1.nosuchfield = %', r1.nosuchfield; +end$$; + +-- records, not so much +do $$ +declare r1 record; +begin + raise notice 'r1 = %', r1; + raise notice 'r1.f1 = %', r1.f1; + raise notice 'r1.f2 = %', r1.f2; + raise notice 'r1 = %', r1; +end$$; + +-- but OK if you assign first +do $$ +declare r1 record; +begin + raise notice 'r1 = %', r1; + r1 := row(1,2); + raise notice 'r1.f1 = %', r1.f1; + raise notice 'r1.f2 = %', r1.f2; + raise notice 'r1 = %', r1; + raise notice 'r1.nosuchfield = %', r1.nosuchfield; +end$$; + +-- check %type with block-qualified variable names +do $$ +<> +declare + v int; + r two_int8s; + v1 v%type; + v2 blk.v%type; + r1 r%type; + r2 blk.r%type; +begin + raise notice '%', pg_typeof(v1); + raise notice '%', pg_typeof(v2); + raise notice '%', pg_typeof(r1); + raise notice '%', pg_typeof(r2); +end$$; + +-- check that type record can be passed through %type +do $$ +declare r1 record; + r2 r1%type; +begin + r2 := row(1,2); + raise notice 'r2 = %', r2; + r2 := row(3,4,5); + raise notice 'r2 = %', r2; +end$$; + +-- arrays of record are not supported at the moment +do $$ +declare r1 record[]; +begin +end$$; + +do $$ +declare r1 record; + r2 r1%type[]; +begin +end$$; + +-- check repeated assignments to composite fields +create table some_table (id int, data text); + +do $$ +declare r some_table; +begin + r := (23, 'skidoo'); + for i in 1 .. 10 loop + r.id := r.id + i; + r.data := r.data || ' ' || i; + end loop; + raise notice 'r = %', r; +end$$; + +-- check behavior of function declared to return "record" + +create function returnsrecord(int) returns record language plpgsql as +$$ begin return row($1,$1+1); end $$; + +select returnsrecord(42); +select * from returnsrecord(42) as r(x int, y int); +select * from returnsrecord(42) as r(x int, y int, z int); -- fail +select * from returnsrecord(42) as r(x int, y bigint); -- fail + +-- same with an intermediate record variable +create or replace function returnsrecord(int) returns record language plpgsql as +$$ declare r record; begin r := row($1,$1+1); return r; end $$; + +select returnsrecord(42); +select * from returnsrecord(42) as r(x int, y int); +select * from returnsrecord(42) as r(x int, y int, z int); -- fail +select * from returnsrecord(42) as r(x int, y bigint); -- fail + +-- should work the same with a missing column in the actual result value +create table has_hole(f1 int, f2 int, f3 int); +alter table has_hole drop column f2; + +create or replace function returnsrecord(int) returns record language plpgsql as +$$ begin return row($1,$1+1)::has_hole; end $$; + +select returnsrecord(42); +select * from returnsrecord(42) as r(x int, y int); +select * from returnsrecord(42) as r(x int, y int, z int); -- fail +select * from returnsrecord(42) as r(x int, y bigint); -- fail + +-- same with an intermediate record variable +create or replace function returnsrecord(int) returns record language plpgsql as +$$ declare r record; begin r := row($1,$1+1)::has_hole; return r; end $$; + +select returnsrecord(42); +select * from returnsrecord(42) as r(x int, y int); +select * from returnsrecord(42) as r(x int, y int, z int); -- fail +select * from returnsrecord(42) as r(x int, y bigint); -- fail + +-- check access to a field of an argument declared "record" +create function getf1(x record) returns int language plpgsql as +$$ begin return x.f1; end $$; +select getf1(1); +select getf1(row(1,2)); +select getf1(row(1,2)::two_int4s); +select getf1(row('foo',123,456)::more_int4s); +-- the context stack is different when debug_discard_caches +-- is set, so suppress context output +\set SHOW_CONTEXT never +select getf1(row(1,2)::two_int8s); +\set SHOW_CONTEXT errors +select getf1(row(1,2)); + +-- this seemingly-equivalent case behaves a bit differently, +-- because the core parser's handling of $N symbols is simplistic +create function getf2(record) returns int language plpgsql as +$$ begin return $1.f2; end $$; +select getf2(row(1,2)); -- ideally would work, but does not +select getf2(row(1,2)::two_int4s); +select getf2(row('foo',123,456)::more_int4s); + +-- check behavior when assignment to FOR-loop variable requires coercion +do $$ +declare r two_int8s; +begin + for r in select i, i+1 from generate_series(1,4) i + loop + raise notice 'r = %', r; + end loop; +end$$; + +-- check behavior when returning setof composite +create function returnssetofholes() returns setof has_hole language plpgsql as +$$ +declare r record; + h has_hole; +begin + return next h; + r := (1,2); + h := (3,4); + return next r; + return next h; + return next row(5,6); + return next row(7,8)::has_hole; + return query select 9, 10; +end$$; +select returnssetofholes(); + +create or replace function returnssetofholes() returns setof has_hole language plpgsql as +$$ +declare r record; +begin + return next r; -- fails, not assigned yet +end$$; +select returnssetofholes(); + +create or replace function returnssetofholes() returns setof has_hole language plpgsql as +$$ +begin + return next row(1,2,3); -- fails +end$$; +select returnssetofholes(); + +create or replace function returnssetofholes() returns setof has_hole language plpgsql as +$$ +begin + return query select 1, 2.0; -- fails +end$$; +select returnssetofholes(); + +-- check behavior with changes of a named rowtype +create table mutable(f1 int, f2 text); + +create function sillyaddone(int) returns int language plpgsql as +$$ declare r mutable; begin r.f1 := $1; return r.f1 + 1; end $$; +select sillyaddone(42); + +-- test for change of type of column f1 should be here someday; +-- for now see plpgsql_cache test + +alter table mutable drop column f1; +-- the context stack is different when debug_discard_caches +-- is set, so suppress context output +\set SHOW_CONTEXT never +select sillyaddone(42); -- fail +\set SHOW_CONTEXT errors + +create function getf3(x mutable) returns int language plpgsql as +$$ begin return x.f3; end $$; +select getf3(null::mutable); -- doesn't work yet +alter table mutable add column f3 int; +select getf3(null::mutable); -- now it works +alter table mutable drop column f3; +-- the context stack is different when debug_discard_caches +-- is set, so suppress context output +\set SHOW_CONTEXT never +select getf3(null::mutable); -- fails again +\set SHOW_CONTEXT errors + +-- check behavior with creating/dropping a named rowtype +set check_function_bodies = off; -- else reference to nonexistent type fails + +create function sillyaddtwo(int) returns int language plpgsql as +$$ declare r mutable2; begin r.f1 := $1; return r.f1 + 2; end $$; + +reset check_function_bodies; + +select sillyaddtwo(42); -- fail +create table mutable2(f1 int, f2 text); +select sillyaddtwo(42); +drop table mutable2; +-- the context stack is different when debug_discard_caches +-- is set, so suppress context output +\set SHOW_CONTEXT never +select sillyaddtwo(42); -- fail +\set SHOW_CONTEXT errors +create table mutable2(f0 text, f1 int, f2 text); +select sillyaddtwo(42); +select sillyaddtwo(43); + +-- check access to system columns in a record variable + +create function sillytrig() returns trigger language plpgsql as +$$begin + raise notice 'old.ctid = %', old.ctid; + raise notice 'old.tableoid = %', old.tableoid::regclass; + return new; +end$$; + +create trigger mutable_trig before update on mutable for each row +execute procedure sillytrig(); + +insert into mutable values ('foo'), ('bar'); +update mutable set f2 = f2 || ' baz'; +table mutable; + +-- check returning a composite datum from a trigger + +create or replace function sillytrig() returns trigger language plpgsql as +$$begin + return row(new.*); +end$$; + +update mutable set f2 = f2 || ' baz'; +table mutable; + +create or replace function sillytrig() returns trigger language plpgsql as +$$declare r record; +begin + r := row(new.*); + return r; +end$$; + +update mutable set f2 = f2 || ' baz'; +table mutable; + +-- +-- Domains of composite +-- + +create domain ordered_int8s as two_int8s check((value).q1 <= (value).q2); + +create function read_ordered_int8s(p ordered_int8s) returns int8 as $$ +begin return p.q1 + p.q2; end +$$ language plpgsql; + +select read_ordered_int8s(row(1, 2)); +select read_ordered_int8s(row(2, 1)); -- fail + +create function build_ordered_int8s(i int8, j int8) returns ordered_int8s as $$ +begin return row(i,j); end +$$ language plpgsql; + +select build_ordered_int8s(1,2); +select build_ordered_int8s(2,1); -- fail + +create function build_ordered_int8s_2(i int8, j int8) returns ordered_int8s as $$ +declare r record; begin r := row(i,j); return r; end +$$ language plpgsql; + +select build_ordered_int8s_2(1,2); +select build_ordered_int8s_2(2,1); -- fail + +create function build_ordered_int8s_3(i int8, j int8) returns ordered_int8s as $$ +declare r two_int8s; begin r := row(i,j); return r; end +$$ language plpgsql; + +select build_ordered_int8s_3(1,2); +select build_ordered_int8s_3(2,1); -- fail + +create function build_ordered_int8s_4(i int8, j int8) returns ordered_int8s as $$ +declare r ordered_int8s; begin r := row(i,j); return r; end +$$ language plpgsql; + +select build_ordered_int8s_4(1,2); +select build_ordered_int8s_4(2,1); -- fail + +create function build_ordered_int8s_a(i int8, j int8) returns ordered_int8s[] as $$ +begin return array[row(i,j), row(i,j+1)]; end +$$ language plpgsql; + +select build_ordered_int8s_a(1,2); +select build_ordered_int8s_a(2,1); -- fail + +-- check field assignment +do $$ +declare r ordered_int8s; +begin + r.q1 := null; + r.q2 := 43; + r.q1 := 42; + r.q2 := 41; -- fail +end$$; + +-- check whole-row assignment +do $$ +declare r ordered_int8s; +begin + r := null; + r := row(null,null); + r := row(1,2); + r := row(2,1); -- fail +end$$; + +-- check assignment in for-loop +do $$ +declare r ordered_int8s; +begin + for r in values (1,2),(3,4),(6,5) loop + raise notice 'r = %', r; + end loop; +end$$; + +-- check behavior with toastable fields, too + +create type two_texts as (f1 text, f2 text); +create domain ordered_texts as two_texts check((value).f1 <= (value).f2); + +create table sometable (id int, a text, b text); +-- b should be compressed, but in-line +insert into sometable values (1, 'a', repeat('ffoob',1000)); +-- this b should be out-of-line +insert into sometable values (2, 'a', repeat('ffoob',100000)); +-- this pair should fail the domain check +insert into sometable values (3, 'z', repeat('ffoob',100000)); + +do $$ +declare d ordered_texts; +begin + for d in select a, b from sometable loop + raise notice 'succeeded at "%"', d.f1; + end loop; +end$$; + +do $$ +declare r record; d ordered_texts; +begin + for r in select * from sometable loop + raise notice 'processing row %', r.id; + d := row(r.a, r.b); + end loop; +end$$; + +do $$ +declare r record; d ordered_texts; +begin + for r in select * from sometable loop + raise notice 'processing row %', r.id; + d := null; + d.f1 := r.a; + d.f2 := r.b; + end loop; +end$$; + +-- check coercion of a record result to named-composite function output type +create function compresult(int8) returns two_int8s language plpgsql as +$$ declare r record; begin r := row($1,$1); return r; end $$; + +create table two_int8s_tab (f1 two_int8s); +insert into two_int8s_tab values (compresult(42)); +-- reconnect so we lose any local knowledge of anonymous record types +\c - +table two_int8s_tab; diff --git a/postgres/plpgsql/plpgsql_simple.sql b/postgres/plpgsql/plpgsql_simple.sql new file mode 100644 index 00000000..72d8afe4 --- /dev/null +++ b/postgres/plpgsql/plpgsql_simple.sql @@ -0,0 +1,116 @@ +-- +-- Tests for plpgsql's handling of "simple" expressions +-- + +-- Check that changes to an inline-able function are handled correctly +create function simplesql(int) returns int language sql +as 'select $1'; + +create function simplecaller() returns int language plpgsql +as $$ +declare + sum int := 0; +begin + for n in 1..10 loop + sum := sum + simplesql(n); + if n = 5 then + create or replace function simplesql(int) returns int language sql + as 'select $1 + 100'; + end if; + end loop; + return sum; +end$$; + +select simplecaller(); + + +-- Check that changes in search path are dealt with correctly +create schema simple1; + +create function simple1.simpletarget(int) returns int language plpgsql +as $$begin return $1; end$$; + +create function simpletarget(int) returns int language plpgsql +as $$begin return $1 + 100; end$$; + +create or replace function simplecaller() returns int language plpgsql +as $$ +declare + sum int := 0; +begin + for n in 1..10 loop + sum := sum + simpletarget(n); + if n = 5 then + set local search_path = 'simple1'; + end if; + end loop; + return sum; +end$$; + +select simplecaller(); + +-- try it with non-volatile functions, too +alter function simple1.simpletarget(int) immutable; +alter function simpletarget(int) immutable; + +select simplecaller(); + +-- make sure flushing local caches changes nothing +\c - + +select simplecaller(); + + +-- Check case where first attempt to determine if it's simple fails + +create function simplesql() returns int language sql +as $$select 1 / 0$$; + +create or replace function simplecaller() returns int language plpgsql +as $$ +declare x int; +begin + select simplesql() into x; + return x; +end$$; + +select simplecaller(); -- division by zero occurs during simple-expr check + +create or replace function simplesql() returns int language sql +as $$select 2 + 2$$; + +select simplecaller(); + + +-- Check case where called function changes from non-SRF to SRF (bug #18497) + +create or replace function simplecaller() returns int language plpgsql +as $$ +declare x int; +begin + x := simplesql(); + return x; +end$$; + +select simplecaller(); + +drop function simplesql(); + +create function simplesql() returns setof int language sql +as $$select 22 + 22$$; + +select simplecaller(); + +select simplecaller(); + +-- Check handling of simple expression in a scrollable cursor (bug #18859) + +do $$ +declare + p_CurData refcursor; + val int; +begin + open p_CurData scroll for select 42; + fetch p_CurData into val; + raise notice 'val = %', val; +end; $$; diff --git a/postgres/plpgsql/plpgsql_transaction.sql b/postgres/plpgsql/plpgsql_transaction.sql new file mode 100644 index 00000000..c73fca7e --- /dev/null +++ b/postgres/plpgsql/plpgsql_transaction.sql @@ -0,0 +1,636 @@ +CREATE TABLE test1 (a int, b text); + + +CREATE PROCEDURE transaction_test1(x int, y text) +LANGUAGE plpgsql +AS $$ +BEGIN + FOR i IN 0..x LOOP + INSERT INTO test1 (a, b) VALUES (i, y); + IF i % 2 = 0 THEN + COMMIT; + ELSE + ROLLBACK; + END IF; + END LOOP; +END +$$; + +CALL transaction_test1(9, 'foo'); + +SELECT * FROM test1; + + +TRUNCATE test1; + +DO +LANGUAGE plpgsql +$$ +BEGIN + FOR i IN 0..9 LOOP + INSERT INTO test1 (a) VALUES (i); + IF i % 2 = 0 THEN + COMMIT; + ELSE + ROLLBACK; + END IF; + END LOOP; +END +$$; + +SELECT * FROM test1; + + +-- transaction commands not allowed when called in transaction block +START TRANSACTION; +CALL transaction_test1(9, 'error'); +COMMIT; + +START TRANSACTION; +DO LANGUAGE plpgsql $$ BEGIN COMMIT; END $$; +COMMIT; + + +TRUNCATE test1; + +-- not allowed in a function +CREATE FUNCTION transaction_test2() RETURNS int +LANGUAGE plpgsql +AS $$ +BEGIN + FOR i IN 0..9 LOOP + INSERT INTO test1 (a) VALUES (i); + IF i % 2 = 0 THEN + COMMIT; + ELSE + ROLLBACK; + END IF; + END LOOP; + RETURN 1; +END +$$; + +SELECT transaction_test2(); + +SELECT * FROM test1; + + +-- also not allowed if procedure is called from a function +CREATE FUNCTION transaction_test3() RETURNS int +LANGUAGE plpgsql +AS $$ +BEGIN + CALL transaction_test1(9, 'error'); + RETURN 1; +END; +$$; + +SELECT transaction_test3(); + +SELECT * FROM test1; + + +-- DO block inside function +CREATE FUNCTION transaction_test4() RETURNS int +LANGUAGE plpgsql +AS $$ +BEGIN + EXECUTE 'DO LANGUAGE plpgsql $x$ BEGIN COMMIT; END $x$'; + RETURN 1; +END; +$$; + +SELECT transaction_test4(); + + +-- proconfig settings currently disallow transaction statements +CREATE PROCEDURE transaction_test5() +LANGUAGE plpgsql +SET work_mem = 555 +AS $$ +BEGIN + COMMIT; +END; +$$; + +CALL transaction_test5(); + + +-- SECURITY DEFINER currently disallow transaction statements +CREATE PROCEDURE transaction_test5b() +LANGUAGE plpgsql +SECURITY DEFINER +AS $$ +BEGIN + COMMIT; +END; +$$; + +CALL transaction_test5b(); + + +TRUNCATE test1; + +-- nested procedure calls +CREATE PROCEDURE transaction_test6(c text) +LANGUAGE plpgsql +AS $$ +BEGIN + CALL transaction_test1(9, c); +END; +$$; + +CALL transaction_test6('bar'); + +SELECT * FROM test1; + +TRUNCATE test1; + +CREATE PROCEDURE transaction_test7() +LANGUAGE plpgsql +AS $$ +BEGIN + DO 'BEGIN CALL transaction_test1(9, $x$baz$x$); END;'; +END; +$$; + +CALL transaction_test7(); + +SELECT * FROM test1; + +CREATE PROCEDURE transaction_test8() +LANGUAGE plpgsql +AS $$ +BEGIN + EXECUTE 'CALL transaction_test1(10, $x$baz$x$)'; +END; +$$; + +CALL transaction_test8(); + + +-- commit inside cursor loop +CREATE TABLE test2 (x int); +INSERT INTO test2 VALUES (0), (1), (2), (3), (4); + +TRUNCATE test1; + +DO LANGUAGE plpgsql $$ +DECLARE + r RECORD; +BEGIN + FOR r IN SELECT * FROM test2 ORDER BY x LOOP + INSERT INTO test1 (a) VALUES (r.x); + COMMIT; + END LOOP; +END; +$$; + +SELECT * FROM test1; + +-- check that this doesn't leak a holdable portal +SELECT * FROM pg_cursors; + + +-- error in cursor loop with commit +TRUNCATE test1; + +DO LANGUAGE plpgsql $$ +DECLARE + r RECORD; +BEGIN + FOR r IN SELECT * FROM test2 ORDER BY x LOOP + INSERT INTO test1 (a) VALUES (12/(r.x-2)); + COMMIT; + END LOOP; +END; +$$; + +SELECT * FROM test1; + +SELECT * FROM pg_cursors; + + +-- rollback inside cursor loop +TRUNCATE test1; + +DO LANGUAGE plpgsql $$ +DECLARE + r RECORD; +BEGIN + FOR r IN SELECT * FROM test2 ORDER BY x LOOP + INSERT INTO test1 (a) VALUES (r.x); + ROLLBACK; + END LOOP; +END; +$$; + +SELECT * FROM test1; + +SELECT * FROM pg_cursors; + + +-- first commit then rollback inside cursor loop +TRUNCATE test1; + +DO LANGUAGE plpgsql $$ +DECLARE + r RECORD; +BEGIN + FOR r IN SELECT * FROM test2 ORDER BY x LOOP + INSERT INTO test1 (a) VALUES (r.x); + IF r.x % 2 = 0 THEN + COMMIT; + ELSE + ROLLBACK; + END IF; + END LOOP; +END; +$$; + +SELECT * FROM test1; + +SELECT * FROM pg_cursors; + + +-- rollback inside cursor loop +TRUNCATE test1; + +DO LANGUAGE plpgsql $$ +DECLARE + r RECORD; +BEGIN + FOR r IN UPDATE test2 SET x = x * 2 RETURNING x LOOP + INSERT INTO test1 (a) VALUES (r.x); + ROLLBACK; + END LOOP; +END; +$$; + +SELECT * FROM test1; +SELECT * FROM test2; + +SELECT * FROM pg_cursors; + + +-- interaction of FOR UPDATE cursor with subsequent updates (bug #17050) +TRUNCATE test1; + +INSERT INTO test1 VALUES (1,'one'), (2,'two'), (3,'three'); + +DO LANGUAGE plpgsql $$ +DECLARE + l_cur CURSOR FOR SELECT a FROM test1 ORDER BY 1 FOR UPDATE; +BEGIN + FOR r IN l_cur LOOP + UPDATE test1 SET b = b || ' ' || b WHERE a = r.a; + COMMIT; + END LOOP; +END; +$$; + +SELECT * FROM test1; + +SELECT * FROM pg_cursors; + + +-- like bug #17050, but with implicit cursor +TRUNCATE test1; + +INSERT INTO test1 VALUES (1,'one'), (2,'two'), (3,'three'); + +DO LANGUAGE plpgsql $$ +DECLARE r RECORD; +BEGIN + FOR r IN SELECT a FROM test1 FOR UPDATE LOOP + UPDATE test1 SET b = b || ' ' || b WHERE a = r.a; + COMMIT; + END LOOP; +END; +$$; + +SELECT * FROM test1; + +SELECT * FROM pg_cursors; + + +-- commit inside block with exception handler +TRUNCATE test1; + +DO LANGUAGE plpgsql $$ +BEGIN + BEGIN + INSERT INTO test1 (a) VALUES (1); + COMMIT; + INSERT INTO test1 (a) VALUES (1/0); + COMMIT; + EXCEPTION + WHEN division_by_zero THEN + RAISE NOTICE 'caught division_by_zero'; + END; +END; +$$; + +SELECT * FROM test1; + + +-- rollback inside block with exception handler +TRUNCATE test1; + +DO LANGUAGE plpgsql $$ +BEGIN + BEGIN + INSERT INTO test1 (a) VALUES (1); + ROLLBACK; + INSERT INTO test1 (a) VALUES (1/0); + ROLLBACK; + EXCEPTION + WHEN division_by_zero THEN + RAISE NOTICE 'caught division_by_zero'; + END; +END; +$$; + +SELECT * FROM test1; + + +-- test commit/rollback inside exception handler, too +TRUNCATE test1; + +DO LANGUAGE plpgsql $$ +BEGIN + FOR i IN 1..10 LOOP + BEGIN + INSERT INTO test1 VALUES (i, 'good'); + INSERT INTO test1 VALUES (i/0, 'bad'); + EXCEPTION + WHEN division_by_zero THEN + INSERT INTO test1 VALUES (i, 'exception'); + IF (i % 3) > 0 THEN COMMIT; ELSE ROLLBACK; END IF; + END; + END LOOP; +END; +$$; + +SELECT * FROM test1; + + +-- detoast result of simple expression after commit +CREATE TEMP TABLE test4(f1 text); +ALTER TABLE test4 ALTER COLUMN f1 SET STORAGE EXTERNAL; -- disable compression +INSERT INTO test4 SELECT repeat('xyzzy', 2000); + +-- immutable mark is a bit of a lie, but it serves to make call a simple expr +-- that will return a still-toasted value +CREATE FUNCTION data_source(i int) RETURNS TEXT LANGUAGE sql +AS 'select f1 from test4' IMMUTABLE; + +DO $$ +declare x text; +begin + for i in 1..3 loop + x := data_source(i); + commit; + end loop; + raise notice 'length(x) = %', length(x); +end $$; + + +-- operations on composite types vs. internal transactions +DO LANGUAGE plpgsql $$ +declare + c test1 := row(42, 'hello'); + r bool; +begin + for i in 1..3 loop + r := c is not null; + raise notice 'r = %', r; + commit; + end loop; + for i in 1..3 loop + r := c is null; + raise notice 'r = %', r; + rollback; + end loop; +end +$$; + + +-- COMMIT failures +DO LANGUAGE plpgsql $$ +BEGIN + CREATE TABLE test3 (y int UNIQUE DEFERRABLE INITIALLY DEFERRED); + COMMIT; + INSERT INTO test3 (y) VALUES (1); + COMMIT; + INSERT INTO test3 (y) VALUES (1); + INSERT INTO test3 (y) VALUES (2); + COMMIT; + INSERT INTO test3 (y) VALUES (3); -- won't get here +END; +$$; + +SELECT * FROM test3; + +-- failure while trying to persist a cursor across a transaction (bug #15703) +CREATE PROCEDURE cursor_fail_during_commit() + LANGUAGE plpgsql +AS $$ + DECLARE id int; + BEGIN + FOR id IN SELECT 1/(x-1000) FROM generate_series(1,1000) x LOOP + INSERT INTO test1 VALUES(id); + COMMIT; + END LOOP; + END; +$$; + +TRUNCATE test1; + +CALL cursor_fail_during_commit(); + +-- note that error occurs during first COMMIT, hence nothing is in test1 +SELECT count(*) FROM test1; + +CREATE PROCEDURE cursor_fail_during_rollback() + LANGUAGE plpgsql +AS $$ + DECLARE id int; + BEGIN + FOR id IN SELECT 1/(x-1000) FROM generate_series(1,1000) x LOOP + INSERT INTO test1 VALUES(id); + ROLLBACK; + END LOOP; + END; +$$; + +TRUNCATE test1; + +CALL cursor_fail_during_rollback(); + +SELECT count(*) FROM test1; + + +-- SET TRANSACTION +DO LANGUAGE plpgsql $$ +BEGIN + PERFORM 1; + RAISE INFO '%', current_setting('transaction_isolation'); + COMMIT; + SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; + PERFORM 1; + RAISE INFO '%', current_setting('transaction_isolation'); + COMMIT; + SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; + PERFORM 1; + RAISE INFO '%', current_setting('transaction_isolation'); + COMMIT; +END; +$$; + +-- error cases +DO LANGUAGE plpgsql $$ +BEGIN + SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; +END; +$$; + +DO LANGUAGE plpgsql $$ +BEGIN + SAVEPOINT foo; +END; +$$; + +DO LANGUAGE plpgsql $$ +BEGIN + EXECUTE 'COMMIT'; +END; +$$; + + +-- snapshot handling test +TRUNCATE test2; + +CREATE PROCEDURE transaction_test9() +LANGUAGE SQL +AS $$ +INSERT INTO test2 VALUES (42); +$$; + +DO LANGUAGE plpgsql $$ +BEGIN + ROLLBACK; + CALL transaction_test9(); +END +$$; + +SELECT * FROM test2; + + +-- another snapshot handling case: argument expressions of a CALL need +-- to be evaluated with an up-to-date snapshot +CREATE FUNCTION report_count() RETURNS int +STABLE LANGUAGE sql +AS $$ SELECT COUNT(*) FROM test2 $$; + +CREATE PROCEDURE transaction_test9b(cnt int) +LANGUAGE plpgsql +AS $$ +BEGIN + RAISE NOTICE 'count = %', cnt; +END +$$; + +DO $$ +BEGIN + CALL transaction_test9b(report_count()); + INSERT INTO test2 VALUES(43); + CALL transaction_test9b(report_count()); +END +$$; + + +-- Test transaction in procedure with output parameters. This uses a +-- different portal strategy and different code paths in pquery.c. +CREATE PROCEDURE transaction_test10a(INOUT x int) +LANGUAGE plpgsql +AS $$ +BEGIN + x := x + 1; + COMMIT; +END; +$$; + +CALL transaction_test10a(10); + +CREATE PROCEDURE transaction_test10b(INOUT x int) +LANGUAGE plpgsql +AS $$ +BEGIN + x := x - 1; + ROLLBACK; +END; +$$; + +CALL transaction_test10b(10); + + +-- transaction timestamp vs. statement timestamp +CREATE PROCEDURE transaction_test11() +LANGUAGE plpgsql +AS $$ +DECLARE + s1 timestamp with time zone; + s2 timestamp with time zone; + s3 timestamp with time zone; + t1 timestamp with time zone; + t2 timestamp with time zone; + t3 timestamp with time zone; +BEGIN + s1 := statement_timestamp(); + t1 := transaction_timestamp(); + ASSERT s1 = t1; + PERFORM pg_sleep(0.001); + COMMIT; + s2 := statement_timestamp(); + t2 := transaction_timestamp(); + ASSERT s2 = s1; + ASSERT t2 > t1; + PERFORM pg_sleep(0.001); + ROLLBACK; + s3 := statement_timestamp(); + t3 := transaction_timestamp(); + ASSERT s3 = s1; + ASSERT t3 > t2; +END; +$$; + +CALL transaction_test11(); + + +-- transaction chain + +TRUNCATE test1; + +DO LANGUAGE plpgsql $$ +BEGIN + ROLLBACK; + SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; + FOR i IN 0..3 LOOP + RAISE INFO 'transaction_isolation = %', current_setting('transaction_isolation'); + INSERT INTO test1 (a) VALUES (i); + IF i % 2 = 0 THEN + COMMIT AND CHAIN; + ELSE + ROLLBACK AND CHAIN; + END IF; + END LOOP; +END +$$; + +SELECT * FROM test1; + + +DROP TABLE test1; +DROP TABLE test2; +DROP TABLE test3; diff --git a/postgres/plpgsql/plpgsql_trap.sql b/postgres/plpgsql/plpgsql_trap.sql new file mode 100644 index 00000000..5459b347 --- /dev/null +++ b/postgres/plpgsql/plpgsql_trap.sql @@ -0,0 +1,175 @@ +-- +-- Test error trapping +-- + +create function trap_zero_divide(int) returns int as $$ +declare x int; + sx smallint; +begin + begin -- start a subtransaction + raise notice 'should see this'; + x := 100 / $1; + raise notice 'should see this only if % <> 0', $1; + sx := $1; + raise notice 'should see this only if % fits in smallint', $1; + if $1 < 0 then + raise exception '% is less than zero', $1; + end if; + exception + when division_by_zero then + raise notice 'caught division_by_zero'; + x := -1; + when NUMERIC_VALUE_OUT_OF_RANGE then + raise notice 'caught numeric_value_out_of_range'; + x := -2; + end; + return x; +end$$ language plpgsql; + +select trap_zero_divide(50); +select trap_zero_divide(0); +select trap_zero_divide(100000); +select trap_zero_divide(-100); + +create table match_source as + select x as id, x*10 as data, x/10 as ten from generate_series(1,100) x; + +create function trap_matching_test(int) returns int as $$ +declare x int; + sx smallint; + y int; +begin + begin -- start a subtransaction + x := 100 / $1; + sx := $1; + select into y data from match_source where id = + (select id from match_source b where ten = $1); + exception + when data_exception then -- category match + raise notice 'caught data_exception'; + x := -1; + when NUMERIC_VALUE_OUT_OF_RANGE OR CARDINALITY_VIOLATION then + raise notice 'caught numeric_value_out_of_range or cardinality_violation'; + x := -2; + end; + return x; +end$$ language plpgsql; + +select trap_matching_test(50); +select trap_matching_test(0); +select trap_matching_test(100000); +select trap_matching_test(1); + +create temp table foo (f1 int); + +create function subxact_rollback_semantics() returns int as $$ +declare x int; +begin + x := 1; + insert into foo values(x); + begin + x := x + 1; + insert into foo values(x); + raise exception 'inner'; + exception + when others then + x := x * 10; + end; + insert into foo values(x); + return x; +end$$ language plpgsql; + +select subxact_rollback_semantics(); +select * from foo; +drop table foo; + +create function trap_timeout() returns void as $$ +begin + declare x int; + begin + -- we assume this will take longer than 1 second: + select count(*) into x from generate_series(1, 1_000_000_000_000); + exception + when others then + raise notice 'caught others?'; + when query_canceled then + raise notice 'nyeah nyeah, can''t stop me'; + end; + -- Abort transaction to abandon the statement_timeout setting. Otherwise, + -- the next top-level statement would be vulnerable to the timeout. + raise exception 'end of function'; +end$$ language plpgsql; + +begin; +set statement_timeout to 1000; +select trap_timeout(); +rollback; + +-- Test for pass-by-ref values being stored in proper context +create function test_variable_storage() returns text as $$ +declare x text; +begin + x := '1234'; + begin + x := x || '5678'; + -- force error inside subtransaction SPI context + perform trap_zero_divide(-100); + exception + when others then + x := x || '9012'; + end; + return x; +end$$ language plpgsql; + +select test_variable_storage(); + +-- +-- test foreign key error trapping +-- + +create temp table root(f1 int primary key); + +create temp table leaf(f1 int references root deferrable); + +insert into root values(1); +insert into leaf values(1); +insert into leaf values(2); -- fails + +create function trap_foreign_key(int) returns int as $$ +begin + begin -- start a subtransaction + insert into leaf values($1); + exception + when foreign_key_violation then + raise notice 'caught foreign_key_violation'; + return 0; + end; + return 1; +end$$ language plpgsql; + +create function trap_foreign_key_2() returns int as $$ +begin + begin -- start a subtransaction + set constraints all immediate; + exception + when foreign_key_violation then + raise notice 'caught foreign_key_violation'; + return 0; + end; + return 1; +end$$ language plpgsql; + +select trap_foreign_key(1); +select trap_foreign_key(2); -- detects FK violation + +begin; + set constraints all deferred; + select trap_foreign_key(2); -- should not detect FK violation + savepoint x; + set constraints all immediate; -- fails + rollback to x; + select trap_foreign_key_2(); -- detects FK violation +commit; -- still fails + +drop function trap_foreign_key(int); +drop function trap_foreign_key_2(); diff --git a/postgres/plpgsql/plpgsql_trigger.sql b/postgres/plpgsql/plpgsql_trigger.sql new file mode 100644 index 00000000..e04c273c --- /dev/null +++ b/postgres/plpgsql/plpgsql_trigger.sql @@ -0,0 +1,24 @@ +-- Simple test to verify accessibility of the OLD and NEW trigger variables + +create table testtr (a int, b text); + +create function testtr_trigger() returns trigger language plpgsql as +$$begin + raise notice 'tg_op = %', tg_op; + raise notice 'old(%) = %', old.a, row(old.*); + raise notice 'new(%) = %', new.a, row(new.*); + if (tg_op = 'DELETE') then + return old; + else + return new; + end if; +end$$; + +create trigger testtr_trigger before insert or delete or update on testtr + for each row execute function testtr_trigger(); + +insert into testtr values (1, 'one'), (2, 'two'); + +update testtr set a = a + 1; + +delete from testtr; diff --git a/postgres/plpgsql/plpgsql_varprops.sql b/postgres/plpgsql/plpgsql_varprops.sql new file mode 100644 index 00000000..778119d2 --- /dev/null +++ b/postgres/plpgsql/plpgsql_varprops.sql @@ -0,0 +1,247 @@ +-- +-- Tests for PL/pgSQL variable properties: CONSTANT, NOT NULL, initializers +-- + +create type var_record as (f1 int4, f2 int4); +create domain int_nn as int not null; +create domain var_record_nn as var_record not null; +create domain var_record_colnn as var_record check((value).f2 is not null); + +-- CONSTANT + +do $$ +declare x constant int := 42; +begin + raise notice 'x = %', x; +end$$; + +do $$ +declare x constant int; +begin + x := 42; -- fail +end$$; + +do $$ +declare x constant int; y int; +begin + for x, y in select 1, 2 loop -- fail + end loop; +end$$; + +do $$ +declare x constant int[]; +begin + x[1] := 42; -- fail +end$$; + +do $$ +declare x constant int[]; y int; +begin + for x[1], y in select 1, 2 loop -- fail (currently, unsupported syntax) + end loop; +end$$; + +do $$ +declare x constant var_record; +begin + x.f1 := 42; -- fail +end$$; + +do $$ +declare x constant var_record; y int; +begin + for x.f1, y in select 1, 2 loop -- fail + end loop; +end$$; + +-- initializer expressions + +do $$ +declare x int := sin(0); +begin + raise notice 'x = %', x; +end$$; + +do $$ +declare x int := 1/0; -- fail +begin + raise notice 'x = %', x; +end$$; + +do $$ +declare x bigint[] := array[1,3,5]; +begin + raise notice 'x = %', x; +end$$; + +do $$ +declare x record := row(1,2,3); +begin + raise notice 'x = %', x; +end$$; + +do $$ +declare x var_record := row(1,2); +begin + raise notice 'x = %', x; +end$$; + +-- NOT NULL + +do $$ +declare x int not null; -- fail +begin + raise notice 'x = %', x; +end$$; + +do $$ +declare x int not null := 42; +begin + raise notice 'x = %', x; + x := null; -- fail +end$$; + +do $$ +declare x int not null := null; -- fail +begin + raise notice 'x = %', x; +end$$; + +do $$ +declare x record not null; -- fail +begin + raise notice 'x = %', x; +end$$; + +do $$ +declare x record not null := row(42); +begin + raise notice 'x = %', x; + x := row(null); -- ok + raise notice 'x = %', x; + x := null; -- fail +end$$; + +do $$ +declare x record not null := null; -- fail +begin + raise notice 'x = %', x; +end$$; + +do $$ +declare x var_record not null; -- fail +begin + raise notice 'x = %', x; +end$$; + +do $$ +declare x var_record not null := row(41,42); +begin + raise notice 'x = %', x; + x := row(null,null); -- ok + raise notice 'x = %', x; + x := null; -- fail +end$$; + +do $$ +declare x var_record not null := null; -- fail +begin + raise notice 'x = %', x; +end$$; + +-- Check that variables are reinitialized on block re-entry. + +do $$ +begin + for i in 1..3 loop + declare + x int; + y int := i; + r record; + c var_record; + begin + if i = 1 then + x := 42; + r := row(i, i+1); + c := row(i, i+1); + end if; + raise notice 'x = %', x; + raise notice 'y = %', y; + raise notice 'r = %', r; + raise notice 'c = %', c; + end; + end loop; +end$$; + +-- Check enforcement of domain constraints during initialization + +do $$ +declare x int_nn; -- fail +begin + raise notice 'x = %', x; +end$$; + +do $$ +declare x int_nn := null; -- fail +begin + raise notice 'x = %', x; +end$$; + +do $$ +declare x int_nn := 42; +begin + raise notice 'x = %', x; + x := null; -- fail +end$$; + +do $$ +declare x var_record_nn; -- fail +begin + raise notice 'x = %', x; +end$$; + +do $$ +declare x var_record_nn := null; -- fail +begin + raise notice 'x = %', x; +end$$; + +do $$ +declare x var_record_nn := row(1,2); +begin + raise notice 'x = %', x; + x := row(null,null); -- ok + x := null; -- fail +end$$; + +do $$ +declare x var_record_colnn; -- fail +begin + raise notice 'x = %', x; +end$$; + +do $$ +declare x var_record_colnn := null; -- fail +begin + raise notice 'x = %', x; +end$$; + +do $$ +declare x var_record_colnn := row(1,null); -- fail +begin + raise notice 'x = %', x; +end$$; + +do $$ +declare x var_record_colnn := row(1,2); +begin + raise notice 'x = %', x; + x := null; -- fail +end$$; + +do $$ +declare x var_record_colnn := row(1,2); +begin + raise notice 'x = %', x; + x := row(null,null); -- fail +end$$; diff --git a/postgres/regression_suite/aggregates.sql b/postgres/regression_suite/aggregates.sql index 92d88ca7..04802911 100644 --- a/postgres/regression_suite/aggregates.sql +++ b/postgres/regression_suite/aggregates.sql @@ -246,6 +246,16 @@ select array(select sum(x+y) s from generate_series(1,3) y group by y order by s) from generate_series(1,3) x; +-- Test handling of grouping-expression references within sublinks + +select two + four as g, (select f1 from int4_tbl where f1 = (two + four)) +from tenk1 t1 +group by two + four order by 1; + +select q1, (select q1) as ss -- q1 is actually a COALESCE expression here +from int8_tbl i81 full outer join int8_tbl i82 using (q1) +group by q1 order by q1; + -- -- test for bitwise integer aggregates -- diff --git a/postgres/regression_suite/groupingsets.sql b/postgres/regression_suite/groupingsets.sql index 363f8b4e..37cf5414 100644 --- a/postgres/regression_suite/groupingsets.sql +++ b/postgres/regression_suite/groupingsets.sql @@ -136,6 +136,19 @@ select a, b, grouping(a, b), sum(t1.v), max(t2.c) from gstest1 t1 join gstest2 t2 using (a,b) group by grouping sets ((a, b), ()); +select a, b, grouping(a, b), sum(t1.v), max(t2.c) + from gstest1 t1 full join gstest2 t2 using (a,b) + group by grouping sets ((a, b), ()); + +-- references in subqueries should work too +select (select a), + (select b), + (select grouping(a, b)), + (select sum(t1.v)), + (select max(t2.c)) + from gstest1 t1 full join gstest2 t2 using (a,b) + group by grouping sets ((a, b), ()); + -- check that functionally dependent cols are not nulled select a, d, grouping(a,b,c) from gstest3 diff --git a/postgres/regression_suite/subscription.sql b/postgres/regression_suite/subscription.sql index ece0004e..5e766ef5 100644 --- a/postgres/regression_suite/subscription.sql +++ b/postgres/regression_suite/subscription.sql @@ -2,6 +2,17 @@ -- SUBSCRIPTION -- +-- directory paths and dlsuffix are passed to us in environment variables +-- \getenv libdir PG_LIBDIR +-- \getenv dlsuffix PG_DLSUFFIX + +-- \set regresslib :libdir '/regress' :dlsuffix + +CREATE FUNCTION test_fdw_connection(oid, oid, internal) + RETURNS text + AS 'regresslib', 'test_fdw_connection' + LANGUAGE C; + CREATE ROLE regress_subscription_user LOGIN SUPERUSER; CREATE ROLE regress_subscription_user2; CREATE ROLE regress_subscription_user3 IN ROLE pg_create_subscription; @@ -85,6 +96,50 @@ CREATE SUBSCRIPTION regress_testsub5 CONNECTION 'i_dont_exist=param' PUBLICATION -- connecting, so this is reliable and safe) CREATE SUBSCRIPTION regress_testsub5 CONNECTION 'port=-1' PUBLICATION testpub; +CREATE FOREIGN DATA WRAPPER test_fdw; +CREATE SERVER test_server FOREIGN DATA WRAPPER test_fdw; + +GRANT CREATE ON DATABASE REGRESSION TO regress_subscription_user3; +SET SESSION AUTHORIZATION regress_subscription_user3; + +-- fail, need USAGE privileges on server +CREATE SUBSCRIPTION regress_testsub6 SERVER test_server PUBLICATION testpub WITH (slot_name = NONE, connect = false); + +RESET SESSION AUTHORIZATION; +GRANT USAGE ON FOREIGN SERVER test_server TO regress_subscription_user3; +SET SESSION AUTHORIZATION regress_subscription_user3; + +-- fail, need user mapping +CREATE SUBSCRIPTION regress_testsub6 SERVER test_server PUBLICATION testpub WITH (slot_name = NONE, connect = false); + +CREATE USER MAPPING FOR regress_subscription_user3 SERVER test_server OPTIONS(user 'foo', password 'secret'); + +-- fail, need CONNECTION clause +CREATE SUBSCRIPTION regress_testsub6 SERVER test_server PUBLICATION testpub WITH (slot_name = NONE, connect = false); + +RESET SESSION AUTHORIZATION; +ALTER FOREIGN DATA WRAPPER test_fdw CONNECTION test_fdw_connection; +SET SESSION AUTHORIZATION regress_subscription_user3; + +CREATE SUBSCRIPTION regress_testsub6 SERVER test_server PUBLICATION testpub WITH (slot_name = 'dummy', connect = false); + +DROP USER MAPPING FOR regress_subscription_user3 SERVER test_server; +RESET SESSION AUTHORIZATION; +REVOKE USAGE ON FOREIGN SERVER test_server FROM regress_subscription_user3; +SET SESSION AUTHORIZATION regress_subscription_user3; + +-- fail, must connect but lacks USAGE on server, as well as user mapping +DROP SUBSCRIPTION regress_testsub6; + +ALTER SUBSCRIPTION regress_testsub6 SET (slot_name = NONE); +DROP SUBSCRIPTION regress_testsub6; + +SET SESSION AUTHORIZATION regress_subscription_user; +REVOKE CREATE ON DATABASE REGRESSION FROM regress_subscription_user3; + +DROP SERVER test_server; +DROP FOREIGN DATA WRAPPER test_fdw; + -- fail - invalid connection string during ALTER ALTER SUBSCRIPTION regress_testsub CONNECTION 'foobar'; diff --git a/postgres/regression_suite/sysviews.sql b/postgres/regression_suite/sysviews.sql index 004f9a70..507e400a 100644 --- a/postgres/regression_suite/sysviews.sql +++ b/postgres/regression_suite/sysviews.sql @@ -76,6 +76,9 @@ select count(*) = 1 as ok from pg_stat_wal; -- We expect no walreceiver running in this test select count(*) = 0 as ok from pg_stat_wal_receiver; +-- We expect no recovery state in this test (running on primary) +select count(*) = 0 as ok from pg_stat_recovery; + -- This is to record the prevailing planner enable_foo settings during -- a regression test run. select name, setting from pg_settings where name like 'enable%';