launchql / pgsql-parser

PostgreSQL Query Parser for Node.js
MIT License
129 stars 23 forks source link

Incorrect parsing of quotes in create aggregate #123

Open k-koehler opened 1 week ago

k-koehler commented 1 week ago

I'm trying to create an aggregate like this

CREATE AGGREGATE json_agg_strict(anyelement)(
  SFUNC = json_agg_strict_sfunc,
  STYPE = jsonb,
  FINALFUNC = json_agg_strict_finalfunc,
  INITCOND = '[]'
);

But it deparses to (added newlines for clarity)

CREATE AGGREGATE json_agg_strict ( anyelement ) ( 
  sfunc = json_agg_strict_sfunc , 
  stype = jsonb , 
  finalfunc = json_agg_strict_finalfunc , 
  initcond = []
);

^ it should be initcond = '[]'

Below is how to reproduce

> const parser = require("pgsql-parser")
undefined
> const query = `
... CREATE AGGREGATE json_agg_strict(anyelement)(
...   SFUNC = json_agg_strict_sfunc,
...   STYPE = jsonb,
...   FINALFUNC = json_agg_strict_finalfunc,
...   INITCOND = '[]'
... );
... `;
undefined
> parser.deparse(parser.parse(query))
'CREATE AGGREGATE json_agg_strict ( anyelement ) ( sfunc = json_agg_strict_sfunc , stype = jsonb , finalfunc = json_agg_strict_finalfunc , initcond = [] );'