diff --git a/crates/squawk_syntax/src/snapshots/squawk_syntax__test__alter_aggregate_params_validation.snap b/crates/squawk_syntax/src/snapshots/squawk_syntax__test__alter_aggregate_params_validation.snap index a30ea406..0d68f0e2 100644 --- a/crates/squawk_syntax/src/snapshots/squawk_syntax__test__alter_aggregate_params_validation.snap +++ b/crates/squawk_syntax/src/snapshots/squawk_syntax__test__alter_aggregate_params_validation.snap @@ -2,103 +2,124 @@ source: crates/squawk_syntax/src/test.rs input_file: crates/squawk_syntax/test_data/validation/alter_aggregate_params.sql --- -SOURCE_FILE@0..120 +SOURCE_FILE@0..166 COMMENT@0..38 "-- can't have out par ..." WHITESPACE@38..39 "\n" - CREATE_AGGREGATE@39..119 - CREATE_KW@39..45 "create" - WHITESPACE@45..46 " " - AGGREGATE_KW@46..55 "aggregate" - WHITESPACE@55..56 " " - AGGREGATE_NAME@56..57 - PATH@56..57 - PATH_SEGMENT@56..57 - IDENT@56..57 "a" - PARAM_LIST@57..89 - L_PAREN@57..58 "(" - PARAM@58..62 - PARAM_IN@58..60 - IN_KW@58..60 "in" - WHITESPACE@60..61 " " - PATH_TYPE@61..62 - PATH_REF@61..62 - PATH_SEGMENT_REF@61..62 - IDENT@61..62 "x" - COMMA@62..63 "," - WHITESPACE@63..64 " " - PARAM@64..69 - PARAM_OUT@64..67 - OUT_KW@64..67 "out" - WHITESPACE@67..68 " " - PATH_TYPE@68..69 - PATH_REF@68..69 - PATH_SEGMENT_REF@68..69 - IDENT@68..69 "y" - COMMA@69..70 "," - WHITESPACE@70..71 " " - PARAM@71..78 - PARAM_IN_OUT@71..76 - INOUT_KW@71..76 "inout" - WHITESPACE@76..77 " " - PATH_TYPE@77..78 - PATH_REF@77..78 - PATH_SEGMENT_REF@77..78 - IDENT@77..78 "z" - COMMA@78..79 "," - WHITESPACE@79..80 " " - PARAM@80..88 - PARAM_IN_OUT@80..86 - IN_KW@80..82 "in" - WHITESPACE@82..83 " " - OUT_KW@83..86 "out" - WHITESPACE@86..87 " " - PATH_TYPE@87..88 - PATH_REF@87..88 - PATH_SEGMENT_REF@87..88 - IDENT@87..88 "w" - R_PAREN@88..89 ")" - WHITESPACE@89..90 " " - ATTRIBUTE_LIST@90..118 - L_PAREN@90..91 "(" - WHITESPACE@91..94 "\n " - ATTRIBUTE_OPTION@94..103 - ATTRIBUTE_NAME@94..99 - IDENT@94..99 "sfunc" - WHITESPACE@99..100 " " - EQ@100..101 "=" - WHITESPACE@101..102 " " - ATTRIBUTE_VALUE@102..103 - PATH_TYPE@102..103 - PATH_REF@102..103 - PATH_SEGMENT_REF@102..103 - IDENT@102..103 "f" - COMMA@103..104 "," - WHITESPACE@104..107 "\n " - ATTRIBUTE_OPTION@107..116 - ATTRIBUTE_NAME@107..112 - IDENT@107..112 "stype" - WHITESPACE@112..113 " " - EQ@113..114 "=" - WHITESPACE@114..115 " " - ATTRIBUTE_VALUE@115..116 - PATH_TYPE@115..116 - PATH_REF@115..116 - PATH_SEGMENT_REF@115..116 - IDENT@115..116 "t" - WHITESPACE@116..117 "\n" - R_PAREN@117..118 ")" - SEMICOLON@118..119 ";" - WHITESPACE@119..120 "\n" + ALTER_AGGREGATE@39..107 + ALTER_KW@39..44 "alter" + WHITESPACE@44..45 " " + AGGREGATE_KW@45..54 "aggregate" + WHITESPACE@54..55 " " + AGGREGATE@55..89 + PATH_REF@55..56 + PATH_SEGMENT_REF@55..56 + IDENT@55..56 "a" + WHITESPACE@56..57 " " + PARAM_LIST@57..89 + L_PAREN@57..58 "(" + PARAM@58..62 + PARAM_IN@58..60 + IN_KW@58..60 "in" + WHITESPACE@60..61 " " + PATH_TYPE@61..62 + PATH_REF@61..62 + PATH_SEGMENT_REF@61..62 + IDENT@61..62 "t" + COMMA@62..63 "," + WHITESPACE@63..64 " " + PARAM@64..69 + PARAM_OUT@64..67 + OUT_KW@64..67 "out" + WHITESPACE@67..68 " " + PATH_TYPE@68..69 + PATH_REF@68..69 + PATH_SEGMENT_REF@68..69 + IDENT@68..69 "u" + COMMA@69..70 "," + WHITESPACE@70..71 " " + PARAM@71..78 + PARAM_IN_OUT@71..76 + INOUT_KW@71..76 "inout" + WHITESPACE@76..77 " " + PATH_TYPE@77..78 + PATH_REF@77..78 + PATH_SEGMENT_REF@77..78 + IDENT@77..78 "v" + COMMA@78..79 "," + WHITESPACE@79..80 " " + PARAM@80..88 + PARAM_IN_OUT@80..86 + IN_KW@80..82 "in" + WHITESPACE@82..83 " " + OUT_KW@83..86 "out" + WHITESPACE@86..87 " " + PATH_TYPE@87..88 + PATH_REF@87..88 + PATH_SEGMENT_REF@87..88 + IDENT@87..88 "w" + R_PAREN@88..89 ")" + WHITESPACE@89..94 "\n " + SET_SCHEMA@94..106 + SET_KW@94..97 "set" + WHITESPACE@97..98 " " + SCHEMA_KW@98..104 "schema" + WHITESPACE@104..105 " " + SCHEMA_REF@105..106 + IDENT@105..106 "s" + SEMICOLON@106..107 ";" + WHITESPACE@107..109 "\n\n" + ALTER_AGGREGATE@109..165 + ALTER_KW@109..114 "alter" + WHITESPACE@114..115 " " + AGGREGATE_KW@115..124 "aggregate" + WHITESPACE@124..125 " " + AGGREGATE@125..151 + PATH_REF@125..126 + PATH_SEGMENT_REF@125..126 + IDENT@125..126 "a" + PARAM_LIST@126..151 + L_PAREN@126..127 "(" + PARAM@127..150 + PARAM_NAME@127..132 + VALUE_KW@127..132 "value" + WHITESPACE@132..133 " " + PATH_TYPE@133..140 + PATH_REF@133..140 + PATH_SEGMENT_REF@133..140 + INTEGER_KW@133..140 "integer" + WHITESPACE@140..141 " " + PARAM_DEFAULT@141..150 + DEFAULT_KW@141..148 "default" + WHITESPACE@148..149 " " + LITERAL@149..150 + INT_NUMBER@149..150 "1" + R_PAREN@150..151 ")" + WHITESPACE@151..152 " " + AGGREGATE_RENAME_TO@152..164 + RENAME_KW@152..158 "rename" + WHITESPACE@158..159 " " + TO_KW@159..161 "to" + WHITESPACE@161..162 " " + AGGREGATE_NAME@162..164 + PATH@162..164 + PATH_SEGMENT@162..164 + IDENT@162..164 "a2" + SEMICOLON@164..165 ";" + WHITESPACE@165..166 "\n" error[syntax-error]: Out params are not allowed with aggregates. ╭▸ -2 │ create aggregate a(in x, out y, inout z, in out w) ( +2 │ alter aggregate a (in t, out u, inout v, in out w) ╰╴ ━━━ error[syntax-error]: In Out params are not allowed with aggregates. ╭▸ -2 │ create aggregate a(in x, out y, inout z, in out w) ( +2 │ alter aggregate a (in t, out u, inout v, in out w) ╰╴ ━━━━━ error[syntax-error]: In Out params are not allowed with aggregates. ╭▸ -2 │ create aggregate a(in x, out y, inout z, in out w) ( +2 │ alter aggregate a (in t, out u, inout v, in out w) ╰╴ ━━━━━━ +error[syntax-error]: Defaults are not allowed. + ╭▸ +5 │ alter aggregate a(value integer default 1) rename to a2; + ╰╴ ━━━━━━━━━ diff --git a/crates/squawk_syntax/src/snapshots/squawk_syntax__test__alter_function_validation.snap b/crates/squawk_syntax/src/snapshots/squawk_syntax__test__alter_function_validation.snap new file mode 100644 index 00000000..01682223 --- /dev/null +++ b/crates/squawk_syntax/src/snapshots/squawk_syntax__test__alter_function_validation.snap @@ -0,0 +1,49 @@ +--- +source: crates/squawk_syntax/src/test.rs +input_file: crates/squawk_syntax/test_data/validation/alter_function.sql +--- +SOURCE_FILE@0..56 + ALTER_FUNCTION@0..55 + ALTER_KW@0..5 "alter" + WHITESPACE@5..6 " " + FUNCTION_KW@6..14 "function" + WHITESPACE@14..15 " " + FUNCTION_SIG@15..41 + FUNCTION_NAME_REF@15..16 + PATH_REF@15..16 + PATH_SEGMENT_REF@15..16 + IDENT@15..16 "f" + PARAM_LIST@16..41 + L_PAREN@16..17 "(" + PARAM@17..40 + PARAM_NAME@17..22 + VALUE_KW@17..22 "value" + WHITESPACE@22..23 " " + PATH_TYPE@23..30 + PATH_REF@23..30 + PATH_SEGMENT_REF@23..30 + INTEGER_KW@23..30 "integer" + WHITESPACE@30..31 " " + PARAM_DEFAULT@31..40 + DEFAULT_KW@31..38 "default" + WHITESPACE@38..39 " " + LITERAL@39..40 + INT_NUMBER@39..40 "1" + R_PAREN@40..41 ")" + WHITESPACE@41..42 " " + FUNCTION_RENAME_TO@42..54 + RENAME_KW@42..48 "rename" + WHITESPACE@48..49 " " + TO_KW@49..51 "to" + WHITESPACE@51..52 " " + FUNCTION_NAME@52..54 + PATH@52..54 + PATH_SEGMENT@52..54 + IDENT@52..54 "f2" + SEMICOLON@54..55 ";" + WHITESPACE@55..56 "\n" + +error[syntax-error]: Defaults are not allowed. + ╭▸ +1 │ alter function f(value integer default 1) rename to f2; + ╰╴ ━━━━━━━━━ diff --git a/crates/squawk_syntax/src/snapshots/squawk_syntax__test__alter_procedure_validation.snap b/crates/squawk_syntax/src/snapshots/squawk_syntax__test__alter_procedure_validation.snap new file mode 100644 index 00000000..5dd69635 --- /dev/null +++ b/crates/squawk_syntax/src/snapshots/squawk_syntax__test__alter_procedure_validation.snap @@ -0,0 +1,49 @@ +--- +source: crates/squawk_syntax/src/test.rs +input_file: crates/squawk_syntax/test_data/validation/alter_procedure.sql +--- +SOURCE_FILE@0..57 + ALTER_PROCEDURE@0..56 + ALTER_KW@0..5 "alter" + WHITESPACE@5..6 " " + PROCEDURE_KW@6..15 "procedure" + WHITESPACE@15..16 " " + PROCEDURE_SIG@16..42 + PROCEDURE_NAME_REF@16..17 + PATH_REF@16..17 + PATH_SEGMENT_REF@16..17 + IDENT@16..17 "p" + PARAM_LIST@17..42 + L_PAREN@17..18 "(" + PARAM@18..41 + PARAM_NAME@18..23 + VALUE_KW@18..23 "value" + WHITESPACE@23..24 " " + PATH_TYPE@24..31 + PATH_REF@24..31 + PATH_SEGMENT_REF@24..31 + INTEGER_KW@24..31 "integer" + WHITESPACE@31..32 " " + PARAM_DEFAULT@32..41 + DEFAULT_KW@32..39 "default" + WHITESPACE@39..40 " " + LITERAL@40..41 + INT_NUMBER@40..41 "1" + R_PAREN@41..42 ")" + WHITESPACE@42..43 " " + PROCEDURE_RENAME_TO@43..55 + RENAME_KW@43..49 "rename" + WHITESPACE@49..50 " " + TO_KW@50..52 "to" + WHITESPACE@52..53 " " + PROCEDURE_NAME@53..55 + PATH@53..55 + PATH_SEGMENT@53..55 + IDENT@53..55 "p2" + SEMICOLON@55..56 ";" + WHITESPACE@56..57 "\n" + +error[syntax-error]: Defaults are not allowed. + ╭▸ +1 │ alter procedure p(value integer default 1) rename to p2; + ╰╴ ━━━━━━━━━ diff --git a/crates/squawk_syntax/src/snapshots/squawk_syntax__test__alter_routine_validation.snap b/crates/squawk_syntax/src/snapshots/squawk_syntax__test__alter_routine_validation.snap new file mode 100644 index 00000000..70521309 --- /dev/null +++ b/crates/squawk_syntax/src/snapshots/squawk_syntax__test__alter_routine_validation.snap @@ -0,0 +1,49 @@ +--- +source: crates/squawk_syntax/src/test.rs +input_file: crates/squawk_syntax/test_data/validation/alter_routine.sql +--- +SOURCE_FILE@0..55 + ALTER_ROUTINE@0..54 + ALTER_KW@0..5 "alter" + WHITESPACE@5..6 " " + ROUTINE_KW@6..13 "routine" + WHITESPACE@13..14 " " + ROUTINE_SIG@14..40 + ROUTINE_NAME_REF@14..15 + PATH_REF@14..15 + PATH_SEGMENT_REF@14..15 + IDENT@14..15 "r" + PARAM_LIST@15..40 + L_PAREN@15..16 "(" + PARAM@16..39 + PARAM_NAME@16..21 + VALUE_KW@16..21 "value" + WHITESPACE@21..22 " " + PATH_TYPE@22..29 + PATH_REF@22..29 + PATH_SEGMENT_REF@22..29 + INTEGER_KW@22..29 "integer" + WHITESPACE@29..30 " " + PARAM_DEFAULT@30..39 + DEFAULT_KW@30..37 "default" + WHITESPACE@37..38 " " + LITERAL@38..39 + INT_NUMBER@38..39 "1" + R_PAREN@39..40 ")" + WHITESPACE@40..41 " " + ROUTINE_RENAME_TO@41..53 + RENAME_KW@41..47 "rename" + WHITESPACE@47..48 " " + TO_KW@48..50 "to" + WHITESPACE@50..51 " " + ROUTINE_NAME@51..53 + PATH@51..53 + PATH_SEGMENT@51..53 + IDENT@51..53 "r2" + SEMICOLON@53..54 ";" + WHITESPACE@54..55 "\n" + +error[syntax-error]: Defaults are not allowed. + ╭▸ +1 │ alter routine r(value integer default 1) rename to r2; + ╰╴ ━━━━━━━━━ diff --git a/crates/squawk_syntax/src/snapshots/squawk_syntax__test__comment_validation.snap b/crates/squawk_syntax/src/snapshots/squawk_syntax__test__comment_validation.snap new file mode 100644 index 00000000..56028b05 --- /dev/null +++ b/crates/squawk_syntax/src/snapshots/squawk_syntax__test__comment_validation.snap @@ -0,0 +1,169 @@ +--- +source: crates/squawk_syntax/src/test.rs +input_file: crates/squawk_syntax/test_data/validation/comment.sql +--- +SOURCE_FILE@0..250 + COMMENT_ON@0..61 + COMMENT_KW@0..7 "comment" + WHITESPACE@7..8 " " + ON_KW@8..10 "on" + WHITESPACE@10..11 " " + OBJECT_FUNCTION@11..46 + FUNCTION_KW@11..19 "function" + WHITESPACE@19..20 " " + FUNCTION_SIG@20..46 + FUNCTION_NAME_REF@20..21 + PATH_REF@20..21 + PATH_SEGMENT_REF@20..21 + IDENT@20..21 "f" + PARAM_LIST@21..46 + L_PAREN@21..22 "(" + PARAM@22..45 + PARAM_NAME@22..27 + VALUE_KW@22..27 "value" + WHITESPACE@27..28 " " + PATH_TYPE@28..35 + PATH_REF@28..35 + PATH_SEGMENT_REF@28..35 + INTEGER_KW@28..35 "integer" + WHITESPACE@35..36 " " + PARAM_DEFAULT@36..45 + DEFAULT_KW@36..43 "default" + WHITESPACE@43..44 " " + LITERAL@44..45 + INT_NUMBER@44..45 "1" + R_PAREN@45..46 ")" + WHITESPACE@46..47 " " + IS_KW@47..49 "is" + WHITESPACE@49..50 " " + LITERAL@50..60 + STRING@50..60 "'function'" + SEMICOLON@60..61 ";" + WHITESPACE@61..62 "\n" + COMMENT_ON@62..125 + COMMENT_KW@62..69 "comment" + WHITESPACE@69..70 " " + ON_KW@70..72 "on" + WHITESPACE@72..73 " " + OBJECT_PROCEDURE@73..109 + PROCEDURE_KW@73..82 "procedure" + WHITESPACE@82..83 " " + PROCEDURE_SIG@83..109 + PROCEDURE_NAME_REF@83..84 + PATH_REF@83..84 + PATH_SEGMENT_REF@83..84 + IDENT@83..84 "p" + PARAM_LIST@84..109 + L_PAREN@84..85 "(" + PARAM@85..108 + PARAM_NAME@85..90 + VALUE_KW@85..90 "value" + WHITESPACE@90..91 " " + PATH_TYPE@91..98 + PATH_REF@91..98 + PATH_SEGMENT_REF@91..98 + INTEGER_KW@91..98 "integer" + WHITESPACE@98..99 " " + PARAM_DEFAULT@99..108 + DEFAULT_KW@99..106 "default" + WHITESPACE@106..107 " " + LITERAL@107..108 + INT_NUMBER@107..108 "1" + R_PAREN@108..109 ")" + WHITESPACE@109..110 " " + IS_KW@110..112 "is" + WHITESPACE@112..113 " " + LITERAL@113..124 + STRING@113..124 "'procedure'" + SEMICOLON@124..125 ";" + WHITESPACE@125..126 "\n" + COMMENT_ON@126..185 + COMMENT_KW@126..133 "comment" + WHITESPACE@133..134 " " + ON_KW@134..136 "on" + WHITESPACE@136..137 " " + OBJECT_ROUTINE@137..171 + ROUTINE_KW@137..144 "routine" + WHITESPACE@144..145 " " + ROUTINE_SIG@145..171 + ROUTINE_NAME_REF@145..146 + PATH_REF@145..146 + PATH_SEGMENT_REF@145..146 + IDENT@145..146 "r" + PARAM_LIST@146..171 + L_PAREN@146..147 "(" + PARAM@147..170 + PARAM_NAME@147..152 + VALUE_KW@147..152 "value" + WHITESPACE@152..153 " " + PATH_TYPE@153..160 + PATH_REF@153..160 + PATH_SEGMENT_REF@153..160 + INTEGER_KW@153..160 "integer" + WHITESPACE@160..161 " " + PARAM_DEFAULT@161..170 + DEFAULT_KW@161..168 "default" + WHITESPACE@168..169 " " + LITERAL@169..170 + INT_NUMBER@169..170 "1" + R_PAREN@170..171 ")" + WHITESPACE@171..172 " " + IS_KW@172..174 "is" + WHITESPACE@174..175 " " + LITERAL@175..184 + STRING@175..184 "'routine'" + SEMICOLON@184..185 ";" + WHITESPACE@185..186 "\n" + COMMENT_ON@186..249 + COMMENT_KW@186..193 "comment" + WHITESPACE@193..194 " " + ON_KW@194..196 "on" + WHITESPACE@196..197 " " + OBJECT_AGGREGATE@197..233 + AGGREGATE_KW@197..206 "aggregate" + WHITESPACE@206..207 " " + AGGREGATE@207..233 + PATH_REF@207..208 + PATH_SEGMENT_REF@207..208 + IDENT@207..208 "a" + PARAM_LIST@208..233 + L_PAREN@208..209 "(" + PARAM@209..232 + PARAM_NAME@209..214 + VALUE_KW@209..214 "value" + WHITESPACE@214..215 " " + PATH_TYPE@215..222 + PATH_REF@215..222 + PATH_SEGMENT_REF@215..222 + INTEGER_KW@215..222 "integer" + WHITESPACE@222..223 " " + PARAM_DEFAULT@223..232 + DEFAULT_KW@223..230 "default" + WHITESPACE@230..231 " " + LITERAL@231..232 + INT_NUMBER@231..232 "1" + R_PAREN@232..233 ")" + WHITESPACE@233..234 " " + IS_KW@234..236 "is" + WHITESPACE@236..237 " " + LITERAL@237..248 + STRING@237..248 "'aggregate'" + SEMICOLON@248..249 ";" + WHITESPACE@249..250 "\n" + +error[syntax-error]: Defaults are not allowed. + ╭▸ +1 │ comment on function f(value integer default 1) is 'function'; + ╰╴ ━━━━━━━━━ +error[syntax-error]: Defaults are not allowed. + ╭▸ +2 │ comment on procedure p(value integer default 1) is 'procedure'; + ╰╴ ━━━━━━━━━ +error[syntax-error]: Defaults are not allowed. + ╭▸ +3 │ comment on routine r(value integer default 1) is 'routine'; + ╰╴ ━━━━━━━━━ +error[syntax-error]: Defaults are not allowed. + ╭▸ +4 │ comment on aggregate a(value integer default 1) is 'aggregate'; + ╰╴ ━━━━━━━━━ diff --git a/crates/squawk_syntax/src/snapshots/squawk_syntax__test__create_aggregate_params_validation.snap b/crates/squawk_syntax/src/snapshots/squawk_syntax__test__create_aggregate_params_validation.snap index 3e834fc8..9e066cc7 100644 --- a/crates/squawk_syntax/src/snapshots/squawk_syntax__test__create_aggregate_params_validation.snap +++ b/crates/squawk_syntax/src/snapshots/squawk_syntax__test__create_aggregate_params_validation.snap @@ -2,82 +2,243 @@ source: crates/squawk_syntax/src/test.rs input_file: crates/squawk_syntax/test_data/validation/create_aggregate_params.sql --- -SOURCE_FILE@0..109 +SOURCE_FILE@0..366 COMMENT@0..38 "-- can't have out par ..." WHITESPACE@38..39 "\n" - ALTER_AGGREGATE@39..107 - ALTER_KW@39..44 "alter" - WHITESPACE@44..45 " " - AGGREGATE_KW@45..54 "aggregate" - WHITESPACE@54..55 " " - AGGREGATE@55..89 - PATH_REF@55..56 - PATH_SEGMENT_REF@55..56 - IDENT@55..56 "a" - WHITESPACE@56..57 " " - PARAM_LIST@57..89 - L_PAREN@57..58 "(" - PARAM@58..62 - PARAM_IN@58..60 - IN_KW@58..60 "in" - WHITESPACE@60..61 " " - PATH_TYPE@61..62 - PATH_REF@61..62 - PATH_SEGMENT_REF@61..62 - IDENT@61..62 "t" - COMMA@62..63 "," - WHITESPACE@63..64 " " - PARAM@64..69 - PARAM_OUT@64..67 - OUT_KW@64..67 "out" - WHITESPACE@67..68 " " - PATH_TYPE@68..69 - PATH_REF@68..69 - PATH_SEGMENT_REF@68..69 - IDENT@68..69 "u" - COMMA@69..70 "," - WHITESPACE@70..71 " " - PARAM@71..78 - PARAM_IN_OUT@71..76 - INOUT_KW@71..76 "inout" - WHITESPACE@76..77 " " - PATH_TYPE@77..78 - PATH_REF@77..78 - PATH_SEGMENT_REF@77..78 - IDENT@77..78 "v" - COMMA@78..79 "," - WHITESPACE@79..80 " " - PARAM@80..88 - PARAM_IN_OUT@80..86 - IN_KW@80..82 "in" - WHITESPACE@82..83 " " - OUT_KW@83..86 "out" - WHITESPACE@86..87 " " - PATH_TYPE@87..88 - PATH_REF@87..88 - PATH_SEGMENT_REF@87..88 - IDENT@87..88 "w" - R_PAREN@88..89 ")" - WHITESPACE@89..94 "\n " - SET_SCHEMA@94..106 - SET_KW@94..97 "set" - WHITESPACE@97..98 " " - SCHEMA_KW@98..104 "schema" - WHITESPACE@104..105 " " - SCHEMA_REF@105..106 - IDENT@105..106 "s" - SEMICOLON@106..107 ";" - WHITESPACE@107..109 "\n\n" + CREATE_AGGREGATE@39..119 + CREATE_KW@39..45 "create" + WHITESPACE@45..46 " " + AGGREGATE_KW@46..55 "aggregate" + WHITESPACE@55..56 " " + AGGREGATE_NAME@56..57 + PATH@56..57 + PATH_SEGMENT@56..57 + IDENT@56..57 "a" + PARAM_LIST@57..89 + L_PAREN@57..58 "(" + PARAM@58..62 + PARAM_IN@58..60 + IN_KW@58..60 "in" + WHITESPACE@60..61 " " + PATH_TYPE@61..62 + PATH_REF@61..62 + PATH_SEGMENT_REF@61..62 + IDENT@61..62 "x" + COMMA@62..63 "," + WHITESPACE@63..64 " " + PARAM@64..69 + PARAM_OUT@64..67 + OUT_KW@64..67 "out" + WHITESPACE@67..68 " " + PATH_TYPE@68..69 + PATH_REF@68..69 + PATH_SEGMENT_REF@68..69 + IDENT@68..69 "y" + COMMA@69..70 "," + WHITESPACE@70..71 " " + PARAM@71..78 + PARAM_IN_OUT@71..76 + INOUT_KW@71..76 "inout" + WHITESPACE@76..77 " " + PATH_TYPE@77..78 + PATH_REF@77..78 + PATH_SEGMENT_REF@77..78 + IDENT@77..78 "z" + COMMA@78..79 "," + WHITESPACE@79..80 " " + PARAM@80..88 + PARAM_IN_OUT@80..86 + IN_KW@80..82 "in" + WHITESPACE@82..83 " " + OUT_KW@83..86 "out" + WHITESPACE@86..87 " " + PATH_TYPE@87..88 + PATH_REF@87..88 + PATH_SEGMENT_REF@87..88 + IDENT@87..88 "w" + R_PAREN@88..89 ")" + WHITESPACE@89..90 " " + ATTRIBUTE_LIST@90..118 + L_PAREN@90..91 "(" + WHITESPACE@91..94 "\n " + ATTRIBUTE_OPTION@94..103 + ATTRIBUTE_NAME@94..99 + IDENT@94..99 "sfunc" + WHITESPACE@99..100 " " + EQ@100..101 "=" + WHITESPACE@101..102 " " + ATTRIBUTE_VALUE@102..103 + PATH_TYPE@102..103 + PATH_REF@102..103 + PATH_SEGMENT_REF@102..103 + IDENT@102..103 "f" + COMMA@103..104 "," + WHITESPACE@104..107 "\n " + ATTRIBUTE_OPTION@107..116 + ATTRIBUTE_NAME@107..112 + IDENT@107..112 "stype" + WHITESPACE@112..113 " " + EQ@113..114 "=" + WHITESPACE@114..115 " " + ATTRIBUTE_VALUE@115..116 + PATH_TYPE@115..116 + PATH_REF@115..116 + PATH_SEGMENT_REF@115..116 + IDENT@115..116 "t" + WHITESPACE@116..117 "\n" + R_PAREN@117..118 ")" + SEMICOLON@118..119 ";" + WHITESPACE@119..121 "\n\n" + CREATE_AGGREGATE@121..231 + CREATE_KW@121..127 "create" + WHITESPACE@127..128 " " + AGGREGATE_KW@128..137 "aggregate" + WHITESPACE@137..138 " " + AGGREGATE_NAME@138..160 + PATH@138..160 + PATH_SEGMENT@138..160 + IDENT@138..160 "aggregate_with_default" + PARAM_LIST@160..185 + L_PAREN@160..161 "(" + PARAM@161..184 + PARAM_NAME@161..166 + VALUE_KW@161..166 "value" + WHITESPACE@166..167 " " + PATH_TYPE@167..174 + PATH_REF@167..174 + PATH_SEGMENT_REF@167..174 + INTEGER_KW@167..174 "integer" + WHITESPACE@174..175 " " + PARAM_DEFAULT@175..184 + DEFAULT_KW@175..182 "default" + WHITESPACE@182..183 " " + LITERAL@183..184 + INT_NUMBER@183..184 "1" + R_PAREN@184..185 ")" + WHITESPACE@185..186 " " + ATTRIBUTE_LIST@186..230 + L_PAREN@186..187 "(" + WHITESPACE@187..190 "\n " + ATTRIBUTE_OPTION@190..209 + ATTRIBUTE_NAME@190..195 + IDENT@190..195 "sfunc" + WHITESPACE@195..196 " " + EQ@196..197 "=" + WHITESPACE@197..198 " " + ATTRIBUTE_VALUE@198..209 + PATH_TYPE@198..209 + PATH_REF@198..209 + PATH_SEGMENT_REF@198..209 + IDENT@198..209 "integer_sum" + COMMA@209..210 "," + WHITESPACE@210..213 "\n " + ATTRIBUTE_OPTION@213..228 + ATTRIBUTE_NAME@213..218 + IDENT@213..218 "stype" + WHITESPACE@218..219 " " + EQ@219..220 "=" + WHITESPACE@220..221 " " + ATTRIBUTE_VALUE@221..228 + PATH_TYPE@221..228 + PATH_REF@221..228 + PATH_SEGMENT_REF@221..228 + INTEGER_KW@221..228 "integer" + WHITESPACE@228..229 "\n" + R_PAREN@229..230 ")" + SEMICOLON@230..231 ";" + WHITESPACE@231..233 "\n\n" + CREATE_AGGREGATE@233..365 + CREATE_KW@233..239 "create" + WHITESPACE@239..240 " " + AGGREGATE_KW@240..249 "aggregate" + WHITESPACE@249..250 " " + AGGREGATE_NAME@250..267 + PATH@250..267 + PATH_SEGMENT@250..267 + IDENT@250..267 "ordered_aggregate" + PARAM_LIST@267..319 + L_PAREN@267..268 "(" + WHITESPACE@268..271 "\n " + PARAM@271..285 + PARAM_NAME@271..277 + IDENT@271..277 "direct" + WHITESPACE@277..278 " " + PATH_TYPE@278..285 + PATH_REF@278..285 + PATH_SEGMENT_REF@278..285 + INTEGER_KW@278..285 "integer" + WHITESPACE@285..286 " " + AGGREGATE_ORDER_BY@286..317 + ORDER_KW@286..291 "order" + WHITESPACE@291..292 " " + BY_KW@292..294 "by" + WHITESPACE@294..295 " " + PARAM@295..317 + PARAM_NAME@295..305 + IDENT@295..305 "aggregated" + WHITESPACE@305..306 " " + PATH_TYPE@306..313 + PATH_REF@306..313 + PATH_SEGMENT_REF@306..313 + INTEGER_KW@306..313 "integer" + WHITESPACE@313..314 " " + PARAM_DEFAULT@314..317 + EQ@314..315 "=" + WHITESPACE@315..316 " " + LITERAL@316..317 + INT_NUMBER@316..317 "1" + WHITESPACE@317..318 "\n" + R_PAREN@318..319 ")" + WHITESPACE@319..320 " " + ATTRIBUTE_LIST@320..364 + L_PAREN@320..321 "(" + WHITESPACE@321..324 "\n " + ATTRIBUTE_OPTION@324..343 + ATTRIBUTE_NAME@324..329 + IDENT@324..329 "sfunc" + WHITESPACE@329..330 " " + EQ@330..331 "=" + WHITESPACE@331..332 " " + ATTRIBUTE_VALUE@332..343 + PATH_TYPE@332..343 + PATH_REF@332..343 + PATH_SEGMENT_REF@332..343 + IDENT@332..343 "integer_sum" + COMMA@343..344 "," + WHITESPACE@344..347 "\n " + ATTRIBUTE_OPTION@347..362 + ATTRIBUTE_NAME@347..352 + IDENT@347..352 "stype" + WHITESPACE@352..353 " " + EQ@353..354 "=" + WHITESPACE@354..355 " " + ATTRIBUTE_VALUE@355..362 + PATH_TYPE@355..362 + PATH_REF@355..362 + PATH_SEGMENT_REF@355..362 + INTEGER_KW@355..362 "integer" + WHITESPACE@362..363 "\n" + R_PAREN@363..364 ")" + SEMICOLON@364..365 ";" + WHITESPACE@365..366 "\n" error[syntax-error]: Out params are not allowed with aggregates. ╭▸ -2 │ alter aggregate a (in t, out u, inout v, in out w) +2 │ create aggregate a(in x, out y, inout z, in out w) ( ╰╴ ━━━ error[syntax-error]: In Out params are not allowed with aggregates. ╭▸ -2 │ alter aggregate a (in t, out u, inout v, in out w) +2 │ create aggregate a(in x, out y, inout z, in out w) ( ╰╴ ━━━━━ error[syntax-error]: In Out params are not allowed with aggregates. ╭▸ -2 │ alter aggregate a (in t, out u, inout v, in out w) +2 │ create aggregate a(in x, out y, inout z, in out w) ( ╰╴ ━━━━━━ +error[syntax-error]: Defaults are not allowed. + ╭▸ +7 │ create aggregate aggregate_with_default(value integer default 1) ( + ╰╴ ━━━━━━━━━ +error[syntax-error]: Defaults are not allowed. + ╭▸ +13 │ direct integer order by aggregated integer = 1 + ╰╴ ━━━ diff --git a/crates/squawk_syntax/src/snapshots/squawk_syntax__test__drop_aggregate_params_validation.snap b/crates/squawk_syntax/src/snapshots/squawk_syntax__test__drop_aggregate_params_validation.snap index 2a4c1183..654fdd5f 100644 --- a/crates/squawk_syntax/src/snapshots/squawk_syntax__test__drop_aggregate_params_validation.snap +++ b/crates/squawk_syntax/src/snapshots/squawk_syntax__test__drop_aggregate_params_validation.snap @@ -2,7 +2,7 @@ source: crates/squawk_syntax/src/test.rs input_file: crates/squawk_syntax/test_data/validation/drop_aggregate_params.sql --- -SOURCE_FILE@0..444 +SOURCE_FILE@0..488 WHITESPACE@0..1 "\n" COMMENT@1..8 "-- full" WHITESPACE@8..9 "\n" @@ -255,7 +255,35 @@ SOURCE_FILE@0..444 WHITESPACE@439..440 "\n" R_PAREN@440..441 ")" SEMICOLON@441..442 ";" - WHITESPACE@442..444 "\n\n" + WHITESPACE@442..445 "\n\n\n" + DROP_AGGREGATE@445..487 + DROP_KW@445..449 "drop" + WHITESPACE@449..450 " " + AGGREGATE_KW@450..459 "aggregate" + WHITESPACE@459..460 " " + AGGREGATE@460..486 + PATH_REF@460..461 + PATH_SEGMENT_REF@460..461 + IDENT@460..461 "a" + PARAM_LIST@461..486 + L_PAREN@461..462 "(" + PARAM@462..485 + PARAM_NAME@462..467 + VALUE_KW@462..467 "value" + WHITESPACE@467..468 " " + PATH_TYPE@468..475 + PATH_REF@468..475 + PATH_SEGMENT_REF@468..475 + INTEGER_KW@468..475 "integer" + WHITESPACE@475..476 " " + PARAM_DEFAULT@476..485 + DEFAULT_KW@476..483 "default" + WHITESPACE@483..484 " " + LITERAL@484..485 + INT_NUMBER@484..485 "1" + R_PAREN@485..486 ")" + SEMICOLON@486..487 ";" + WHITESPACE@487..488 "\n" error[syntax-error]: Out params are not allowed with aggregates. ╭▸ @@ -277,3 +305,7 @@ error[syntax-error]: Out params are not allowed with aggregates. ╭▸ 31 │ out b numeric, ╰╴ ━━━ +error[syntax-error]: Defaults are not allowed. + ╭▸ +36 │ drop aggregate a(value integer default 1); + ╰╴ ━━━━━━━━━ diff --git a/crates/squawk_syntax/src/snapshots/squawk_syntax__test__drop_function_validation.snap b/crates/squawk_syntax/src/snapshots/squawk_syntax__test__drop_function_validation.snap new file mode 100644 index 00000000..9cbd2d0c --- /dev/null +++ b/crates/squawk_syntax/src/snapshots/squawk_syntax__test__drop_function_validation.snap @@ -0,0 +1,40 @@ +--- +source: crates/squawk_syntax/src/test.rs +input_file: crates/squawk_syntax/test_data/validation/drop_function.sql +--- +SOURCE_FILE@0..42 + DROP_FUNCTION@0..41 + DROP_KW@0..4 "drop" + WHITESPACE@4..5 " " + FUNCTION_KW@5..13 "function" + WHITESPACE@13..14 " " + FUNCTION_SIG_LIST@14..40 + FUNCTION_SIG@14..40 + FUNCTION_NAME_REF@14..15 + PATH_REF@14..15 + PATH_SEGMENT_REF@14..15 + IDENT@14..15 "f" + PARAM_LIST@15..40 + L_PAREN@15..16 "(" + PARAM@16..39 + PARAM_NAME@16..21 + VALUE_KW@16..21 "value" + WHITESPACE@21..22 " " + PATH_TYPE@22..29 + PATH_REF@22..29 + PATH_SEGMENT_REF@22..29 + INTEGER_KW@22..29 "integer" + WHITESPACE@29..30 " " + PARAM_DEFAULT@30..39 + DEFAULT_KW@30..37 "default" + WHITESPACE@37..38 " " + LITERAL@38..39 + INT_NUMBER@38..39 "1" + R_PAREN@39..40 ")" + SEMICOLON@40..41 ";" + WHITESPACE@41..42 "\n" + +error[syntax-error]: Defaults are not allowed. + ╭▸ +1 │ drop function f(value integer default 1); + ╰╴ ━━━━━━━━━ diff --git a/crates/squawk_syntax/src/snapshots/squawk_syntax__test__drop_procedure_validation.snap b/crates/squawk_syntax/src/snapshots/squawk_syntax__test__drop_procedure_validation.snap new file mode 100644 index 00000000..5bf371f2 --- /dev/null +++ b/crates/squawk_syntax/src/snapshots/squawk_syntax__test__drop_procedure_validation.snap @@ -0,0 +1,40 @@ +--- +source: crates/squawk_syntax/src/test.rs +input_file: crates/squawk_syntax/test_data/validation/drop_procedure.sql +--- +SOURCE_FILE@0..43 + DROP_PROCEDURE@0..42 + DROP_KW@0..4 "drop" + WHITESPACE@4..5 " " + PROCEDURE_KW@5..14 "procedure" + WHITESPACE@14..15 " " + PROCEDURE_SIG_LIST@15..41 + PROCEDURE_SIG@15..41 + PROCEDURE_NAME_REF@15..16 + PATH_REF@15..16 + PATH_SEGMENT_REF@15..16 + IDENT@15..16 "p" + PARAM_LIST@16..41 + L_PAREN@16..17 "(" + PARAM@17..40 + PARAM_NAME@17..22 + VALUE_KW@17..22 "value" + WHITESPACE@22..23 " " + PATH_TYPE@23..30 + PATH_REF@23..30 + PATH_SEGMENT_REF@23..30 + INTEGER_KW@23..30 "integer" + WHITESPACE@30..31 " " + PARAM_DEFAULT@31..40 + DEFAULT_KW@31..38 "default" + WHITESPACE@38..39 " " + LITERAL@39..40 + INT_NUMBER@39..40 "1" + R_PAREN@40..41 ")" + SEMICOLON@41..42 ";" + WHITESPACE@42..43 "\n" + +error[syntax-error]: Defaults are not allowed. + ╭▸ +1 │ drop procedure p(value integer default 1); + ╰╴ ━━━━━━━━━ diff --git a/crates/squawk_syntax/src/snapshots/squawk_syntax__test__drop_routine_validation.snap b/crates/squawk_syntax/src/snapshots/squawk_syntax__test__drop_routine_validation.snap new file mode 100644 index 00000000..ec0b06be --- /dev/null +++ b/crates/squawk_syntax/src/snapshots/squawk_syntax__test__drop_routine_validation.snap @@ -0,0 +1,40 @@ +--- +source: crates/squawk_syntax/src/test.rs +input_file: crates/squawk_syntax/test_data/validation/drop_routine.sql +--- +SOURCE_FILE@0..41 + DROP_ROUTINE@0..40 + DROP_KW@0..4 "drop" + WHITESPACE@4..5 " " + ROUTINE_KW@5..12 "routine" + WHITESPACE@12..13 " " + ROUTINE_SIG_LIST@13..39 + ROUTINE_SIG@13..39 + ROUTINE_NAME_REF@13..14 + PATH_REF@13..14 + PATH_SEGMENT_REF@13..14 + IDENT@13..14 "r" + PARAM_LIST@14..39 + L_PAREN@14..15 "(" + PARAM@15..38 + PARAM_NAME@15..20 + VALUE_KW@15..20 "value" + WHITESPACE@20..21 " " + PATH_TYPE@21..28 + PATH_REF@21..28 + PATH_SEGMENT_REF@21..28 + INTEGER_KW@21..28 "integer" + WHITESPACE@28..29 " " + PARAM_DEFAULT@29..38 + DEFAULT_KW@29..36 "default" + WHITESPACE@36..37 " " + LITERAL@37..38 + INT_NUMBER@37..38 "1" + R_PAREN@38..39 ")" + SEMICOLON@39..40 ";" + WHITESPACE@40..41 "\n" + +error[syntax-error]: Defaults are not allowed. + ╭▸ +1 │ drop routine r(value integer default 1); + ╰╴ ━━━━━━━━━ diff --git a/crates/squawk_syntax/src/validation.rs b/crates/squawk_syntax/src/validation.rs index fce10927..74707ebf 100644 --- a/crates/squawk_syntax/src/validation.rs +++ b/crates/squawk_syntax/src/validation.rs @@ -29,10 +29,13 @@ pub(crate) fn validate(root: &SyntaxNode, errors: &mut Vec) { ast::CustomOp(it) => validate_custom_op_length(it, errors), ast::Do(it) => validate_do(it, errors), ast::FuncOptionList(it) => validate_func_option_list(it, errors), + ast::FunctionSig(it) => validate_param_defaults(it.param_list(), errors), ast::FromAlias(it) => validate_non_empty_column_list(it.columns(), errors), ast::RetType(it) => validate_non_empty_column_list(it.return_table_arg_list(), errors), ast::WithTable(it) => validate_non_empty_column_list(it.column_list(), errors), ast::PrefixExpr(it) => validate_prefix_expr(it, errors), + ast::ProcedureSig(it) => validate_param_defaults(it.param_list(), errors), + ast::RoutineSig(it) => validate_param_defaults(it.param_list(), errors), ast::ArrayExpr(it) => validate_array_expr(it, errors), ast::JoinExpr(it) => validate_join_expr(it, errors), ast::Literal(it) => validate_literal(it, errors), @@ -895,7 +898,22 @@ fn validate_create_function(function: ast::CreateFunction, acc: &mut Vec, acc: &mut Vec) { + let Some(params) = params else { + return; + }; + for param in params.all_params() { + if let Some(default) = param.param_default() { + acc.push(SyntaxError::new( + "Defaults are not allowed.", + default.syntax().text_range(), + )); + } + } +} + fn validate_aggregate_params(aggregate_params: Option, acc: &mut Vec) { + validate_param_defaults(aggregate_params.clone(), acc); if let Some(params) = aggregate_params { for p in params.all_params() { if let Some(mode) = p.mode() { diff --git a/crates/squawk_syntax/test_data/validation/alter_aggregate_params.sql b/crates/squawk_syntax/test_data/validation/alter_aggregate_params.sql index f82bde48..943d361c 100644 --- a/crates/squawk_syntax/test_data/validation/alter_aggregate_params.sql +++ b/crates/squawk_syntax/test_data/validation/alter_aggregate_params.sql @@ -1,5 +1,5 @@ -- can't have out params in aggregates -create aggregate a(in x, out y, inout z, in out w) ( - sfunc = f, - stype = t -); +alter aggregate a (in t, out u, inout v, in out w) + set schema s; + +alter aggregate a(value integer default 1) rename to a2; diff --git a/crates/squawk_syntax/test_data/validation/alter_function.sql b/crates/squawk_syntax/test_data/validation/alter_function.sql new file mode 100644 index 00000000..596f94f8 --- /dev/null +++ b/crates/squawk_syntax/test_data/validation/alter_function.sql @@ -0,0 +1 @@ +alter function f(value integer default 1) rename to f2; diff --git a/crates/squawk_syntax/test_data/validation/alter_procedure.sql b/crates/squawk_syntax/test_data/validation/alter_procedure.sql new file mode 100644 index 00000000..3d24e672 --- /dev/null +++ b/crates/squawk_syntax/test_data/validation/alter_procedure.sql @@ -0,0 +1 @@ +alter procedure p(value integer default 1) rename to p2; diff --git a/crates/squawk_syntax/test_data/validation/alter_routine.sql b/crates/squawk_syntax/test_data/validation/alter_routine.sql new file mode 100644 index 00000000..3bb63948 --- /dev/null +++ b/crates/squawk_syntax/test_data/validation/alter_routine.sql @@ -0,0 +1 @@ +alter routine r(value integer default 1) rename to r2; diff --git a/crates/squawk_syntax/test_data/validation/comment.sql b/crates/squawk_syntax/test_data/validation/comment.sql new file mode 100644 index 00000000..70e23773 --- /dev/null +++ b/crates/squawk_syntax/test_data/validation/comment.sql @@ -0,0 +1,4 @@ +comment on function f(value integer default 1) is 'function'; +comment on procedure p(value integer default 1) is 'procedure'; +comment on routine r(value integer default 1) is 'routine'; +comment on aggregate a(value integer default 1) is 'aggregate'; diff --git a/crates/squawk_syntax/test_data/validation/create_aggregate_params.sql b/crates/squawk_syntax/test_data/validation/create_aggregate_params.sql index 3dddde01..1a7aae45 100644 --- a/crates/squawk_syntax/test_data/validation/create_aggregate_params.sql +++ b/crates/squawk_syntax/test_data/validation/create_aggregate_params.sql @@ -1,4 +1,17 @@ -- can't have out params in aggregates -alter aggregate a (in t, out u, inout v, in out w) - set schema s; +create aggregate a(in x, out y, inout z, in out w) ( + sfunc = f, + stype = t +); +create aggregate aggregate_with_default(value integer default 1) ( + sfunc = integer_sum, + stype = integer +); + +create aggregate ordered_aggregate( + direct integer order by aggregated integer = 1 +) ( + sfunc = integer_sum, + stype = integer +); diff --git a/crates/squawk_syntax/test_data/validation/drop_aggregate_params.sql b/crates/squawk_syntax/test_data/validation/drop_aggregate_params.sql index 2e82890b..120aa6da 100644 --- a/crates/squawk_syntax/test_data/validation/drop_aggregate_params.sql +++ b/crates/squawk_syntax/test_data/validation/drop_aggregate_params.sql @@ -32,3 +32,5 @@ drop aggregate foo.bar( text ); + +drop aggregate a(value integer default 1); diff --git a/crates/squawk_syntax/test_data/validation/drop_function.sql b/crates/squawk_syntax/test_data/validation/drop_function.sql new file mode 100644 index 00000000..a29541cc --- /dev/null +++ b/crates/squawk_syntax/test_data/validation/drop_function.sql @@ -0,0 +1 @@ +drop function f(value integer default 1); diff --git a/crates/squawk_syntax/test_data/validation/drop_procedure.sql b/crates/squawk_syntax/test_data/validation/drop_procedure.sql new file mode 100644 index 00000000..29422cf5 --- /dev/null +++ b/crates/squawk_syntax/test_data/validation/drop_procedure.sql @@ -0,0 +1 @@ +drop procedure p(value integer default 1); diff --git a/crates/squawk_syntax/test_data/validation/drop_routine.sql b/crates/squawk_syntax/test_data/validation/drop_routine.sql new file mode 100644 index 00000000..1dfc6311 --- /dev/null +++ b/crates/squawk_syntax/test_data/validation/drop_routine.sql @@ -0,0 +1 @@ +drop routine r(value integer default 1);