Skip to content

DO ... statement is normalized as an unparsable string #266

@fbriand-docto

Description

@fbriand-docto

Hi,

We need to parse normalized queries but we have an issue when we .normalize a DO ... statement since 2.2.0:

irb(main):001:0> normalized_sql = PgQuery.normalize("DO $$BEGIN RAISE NOTICE 'hello'; END$$;")
=> "DO $1;"
irb(main):002:0> PgQuery.parse(normalized_sql)
/Users/flora.briand/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/pg_query-2.2.0/lib/pg_query/parse.rb:3:in `parse_protobuf': syntax error at or near "$1" (scan.l:1236) (PgQuery::ParseError)
	from /Users/flora.briand/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/pg_query-2.2.0/lib/pg_query/parse.rb:3:in `parse'
	from (irb):4:in `<main>'
	from /Users/flora.briand/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/irb-1.4.1/exe/irb:11:in `<top (required)>'
	from /Users/flora.briand/.rbenv/versions/3.1.2/bin/irb:25:in `load'
	from /Users/flora.briand/.rbenv/versions/3.1.2/bin/irb:25:in `<main>'

We did not have the issue in pg_query 2.1.4:

irb(main):001:0> normalized_sql = PgQuery.normalize("DO $$BEGIN RAISE NOTICE 'hello'; END$$;")
=> "DO $$BEGIN RAISE NOTICE 'hello'; END$$;"
irb(main):002:0> PgQuery.parse(normalized_sql)
=> #<PgQuery::ParserResult:0x0000000112e57b90
 @aliases=nil,
 @cte_names=nil,
 @functions=nil,
 @query="DO $$BEGIN RAISE NOTICE 'hello'; END$$;",
 @tables=nil,
 @tree=
  <PgQuery::ParseResult: version: 130003, stmts: [<PgQuery::RawStmt: stmt: <PgQuery::Node: do_stmt: <PgQuery::DoStmt: args: [<PgQuery::Node: def_elem: <PgQuery::DefElem: defnamespace: "", defname: "as", arg: <PgQuery::Node: string: <PgQuery::String: str: "BEGIN RAISE NOTICE 'hello'; END">>, defaction: :DEFELEM_UNSPEC, location: 3>>]>>, stmt_location: 0, stmt_len: 38>]>,
 @warnings=[]>

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions