Goldziher opened a new issue, #2446:
URL: https://github.com/apache/datafusion-sqlparser-rs/issues/2446
## Problem
PostgreSQL trigger execution arguments are literal string constants passed
to the trigger function through `TG_ARGV`. The PostgreSQL parser currently
routes the `EXECUTE FUNCTION` / `EXECUTE PROCEDURE` tail through `FunctionDesc`
/ `OperateFunctionArg`, whose arguments represent function declaration data
types. As a result, a valid trigger argument is parsed as though it were a
data-type declaration and fails at the first literal.
Observed with `sqlparser = 0.62` and `PostgreSqlDialect`.
## Minimal reproductions
```sql
CREATE TRIGGER t_audit
AFTER INSERT ON t
FOR EACH ROW
EXECUTE FUNCTION audit_row('api_key');
```
The legacy PostgreSQL spelling fails the same way:
```sql
CREATE TRIGGER t_audit
AFTER INSERT ON t
FOR EACH ROW
EXECUTE PROCEDURE audit_row('api_key');
```
Both report:
```text
Expected: a data type name, found: 'api_key'
```
The corresponding zero-argument forms parse successfully:
```sql
EXECUTE FUNCTION audit_row();
EXECUTE PROCEDURE audit_row();
```
PostgreSQL accepts both complete trigger statements with the string argument.
## Expected behavior
- Both trigger statements parse successfully under `PostgreSqlDialect`.
- The AST retains `'api_key'` as an execution-time literal/expression (or a
trigger-specific argument representation), not as an `OperateFunctionArg`
data-type declaration.
- Multiple trigger arguments remain ordered and round-trip through `Display`.
- Function/procedure declaration arguments continue to use the existing
data-type-oriented representation.
PostgreSQL's grammar requires trigger arguments here to be string constants.
A trigger-specific argument field would therefore also be reasonable if using
the general expression AST would accept syntax PostgreSQL itself rejects.
## Downstream context
This was found in Goldziher/scythe#238. Scythe statically parses schema DDL
to build a catalog. Triggers do not add catalog state, so scythe skips them
after parsing; it still needs sqlparser to accept the valid statement so one
trigger does not abort parsing of the entire schema.
I can prepare a focused parser/AST test or implementation once the preferred
AST representation is confirmed.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]