Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 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
3 changes: 3 additions & 0 deletions src/ast/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5462,6 +5462,8 @@ pub enum FunctionArgOperator {
Assignment,
/// function(arg1 : value1)
Colon,
/// function(arg1 VALUE value1)
Value,
}

impl fmt::Display for FunctionArgOperator {
Expand All @@ -5471,6 +5473,7 @@ impl fmt::Display for FunctionArgOperator {
FunctionArgOperator::RightArrow => f.write_str("=>"),
FunctionArgOperator::Assignment => f.write_str(":="),
FunctionArgOperator::Colon => f.write_str(":"),
FunctionArgOperator::Value => f.write_str("VALUE"),
}
}
}
Expand Down
3 changes: 3 additions & 0 deletions src/parser/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11411,6 +11411,9 @@ impl<'a> Parser<'a> {
Token::Colon if self.dialect.supports_named_fn_args_with_colon_operator() => {
Ok(FunctionArgOperator::Colon)
}
Token::Word(w) if w.value.eq_ignore_ascii_case("value") => {
Ok(FunctionArgOperator::Value)
}
_ => {
self.prev_token();
self.expected("argument operator", tok)
Expand Down
13 changes: 13 additions & 0 deletions tests/sqlparser_postgres.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2812,6 +2812,19 @@ fn test_json() {
);
}

#[test]
fn test_json_object() {
match pg().verified_expr("JSON_OBJECT('name' VALUE 'value')") {
Expr::Function(Function { args: FunctionArguments::List(FunctionArgumentList { args, .. }), .. }) => {
assert!(matches!(
&args[..],
&[FunctionArg::ExprNamed { operator: FunctionArgOperator::Value, .. }]
), "Invalid function argument: {:?}", args);
}
other => panic!("Expected: JSON_OBJECT('name' VALUE 'value') to be parsed as a function, but got {other:?}"),
}
}

#[test]
fn parse_json_table_is_not_reserved() {
// JSON_TABLE is not a reserved keyword in PostgreSQL, even though it is in SQL:2023
Expand Down
Loading