Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 5 additions & 18 deletions crates/squawk_parser/src/grammar.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13290,24 +13290,11 @@ fn opt_ret_type(p: &mut Parser<'_>) {
let m = p.start();
if p.eat(RETURNS_KW) {
if p.eat(TABLE_KW) {
delimited(
p,
L_PAREN,
R_PAREN,
COMMA,
|| "unexpected comma".to_string(),
NAME_REF_FIRST,
|p| {
// TODO: should this be the column def name?
// column_name
if opt_name_ref(p).is_none() {
return false;
}
// column_type
type_name(p);
true
},
);
if p.at(L_PAREN) {
table_arg_list(p);
} else {
p.error("expected table arg list");
}
} else {
p.eat(SETOF_KW);
type_name(p);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,25 +23,28 @@ SOURCE_FILE
WHITESPACE " "
TABLE_KW "table"
WHITESPACE " "
L_PAREN "("
NAME_REF
IDENT "a"
WHITESPACE " "
PATH_TYPE
PATH
PATH_SEGMENT
NAME_REF
TEXT_KW "text"
WHITESPACE " "
NAME_REF
IDENT "b"
WHITESPACE " "
PATH_TYPE
PATH
PATH_SEGMENT
NAME_REF
INT_KW "int"
R_PAREN ")"
TABLE_ARG_LIST
L_PAREN "("
COLUMN
NAME
IDENT "a"
WHITESPACE " "
PATH_TYPE
PATH
PATH_SEGMENT
NAME_REF
TEXT_KW "text"
WHITESPACE " "
COLUMN
NAME
IDENT "b"
WHITESPACE " "
PATH_TYPE
PATH
PATH_SEGMENT
NAME_REF
INT_KW "int"
R_PAREN ")"
WHITESPACE "\n"
FUNC_OPTION_LIST
AS_FUNC_OPTION
Expand Down
43 changes: 23 additions & 20 deletions crates/squawk_parser/tests/snapshots/tests__create_function_ok.snap
Original file line number Diff line number Diff line change
Expand Up @@ -494,26 +494,29 @@ SOURCE_FILE
WHITESPACE " "
TABLE_KW "table"
WHITESPACE " "
L_PAREN "("
NAME_REF
IDENT "a"
WHITESPACE " "
PATH_TYPE
PATH
PATH_SEGMENT
NAME_REF
TEXT_KW "text"
COMMA ","
WHITESPACE " "
NAME_REF
IDENT "b"
WHITESPACE " "
PATH_TYPE
PATH
PATH_SEGMENT
NAME_REF
INT_KW "int"
R_PAREN ")"
TABLE_ARG_LIST
L_PAREN "("
COLUMN
NAME
IDENT "a"
WHITESPACE " "
PATH_TYPE
PATH
PATH_SEGMENT
NAME_REF
TEXT_KW "text"
COMMA ","
WHITESPACE " "
COLUMN
NAME
IDENT "b"
WHITESPACE " "
PATH_TYPE
PATH
PATH_SEGMENT
NAME_REF
INT_KW "int"
R_PAREN ")"
WHITESPACE "\n"
FUNC_OPTION_LIST
AS_FUNC_OPTION
Expand Down
12 changes: 12 additions & 0 deletions crates/squawk_syntax/src/ast/generated/nodes.rs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions crates/squawk_syntax/src/ast/node_ext.rs
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ pub enum BinOp {
IsNotDistinctFrom(ast::IsNotDistinctFrom),
IsNotJson(ast::IsNotJson),
IsNotJsonArray(ast::IsNotJsonArray),
IsNotJsonObject(ast::IsNotJsonObject),
IsNotJsonScalar(ast::IsNotJsonScalar),
IsNotJsonValue(ast::IsNotJsonValue),
LAngle(SyntaxToken),
Expand Down Expand Up @@ -205,6 +206,9 @@ impl ast::BinExpr {
SyntaxKind::IS_NOT_JSON_ARRAY => {
BinOp::IsNotJsonArray(ast::IsNotJsonArray { syntax: node })
}
SyntaxKind::IS_NOT_JSON_OBJECT => {
BinOp::IsNotJsonObject(ast::IsNotJsonObject { syntax: node })
}
SyntaxKind::IS_NOT_JSON_SCALAR => {
BinOp::IsNotJsonScalar(ast::IsNotJsonScalar { syntax: node })
}
Expand Down
4 changes: 2 additions & 2 deletions crates/squawk_syntax/src/postgresql.ungram
Original file line number Diff line number Diff line change
Expand Up @@ -431,7 +431,7 @@ IsNot =
'is' 'not'

Op =
'or' | Gteq | '<' | '>' | FatArrow | '=' | 'in' | Neqb | Lteq | '+' | 'overlaps' | 'like' | 'ilike' | NotLike | NotIlike | NotIn | CustomOp | IsDistinctFrom | IsNotDistinctFrom | OperatorCall | 'is' | '^' | '%' | 'and' | '/' | Neq | 'collate' | '-' | ColonEq | ColonColon | 'value' | ':' | IsNot | SimilarTo | NotSimilarTo | AtTimeZone | IsJson | IsJsonValue | IsNotJson | IsJsonObject | IsJsonArray |IsJsonScalar | IsNotJsonValue | IsJsonObject | IsNotJsonArray | IsNotJsonScalar
'or' | Gteq | '<' | '>' | FatArrow | '=' | 'in' | Neqb | Lteq | '+' | 'overlaps' | 'like' | 'ilike' | NotLike | NotIlike | NotIn | CustomOp | IsDistinctFrom | IsNotDistinctFrom | OperatorCall | 'is' | '^' | '%' | 'and' | '/' | Neq | 'collate' | '-' | ColonEq | ColonColon | 'value' | ':' | IsNot | SimilarTo | NotSimilarTo | AtTimeZone | IsJson | IsJsonValue | IsNotJson | IsJsonObject | IsJsonArray |IsJsonScalar | IsNotJsonValue | IsNotJsonObject | IsNotJsonArray | IsNotJsonScalar

IsJson =
'is' 'json' JsonKeysUniqueClause?
Expand Down Expand Up @@ -1139,7 +1139,7 @@ OrReplace =
'or' 'replace'

RetType =
'returns' Type
'returns' ('table' TableArgList | Type)

BeginFuncOptionList =
'begin' 'atomic'
Expand Down
Loading