From 7079792036256986250afb267963547f8c3e0e7c Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 16 Aug 2026 18:59:45 +0000 Subject: [PATCH 01/24] DDL batch: SET/RESET/SHOW, roles, schema, CALL, transaction modes VariableSetStmt (set_rest/set_rest_more/generic_set, zone_value, transaction_mode_list), VariableResetStmt, VariableShowStmt, ConstraintsSetStmt, CheckPointStmt, DiscardStmt, CallStmt, Create/Alter/Drop Role/User/Group, AlterRoleSetStmt, CreateSchemaStmt, RoleSpec/RoleId/role_list, and the CREATE/ALTER/DROP dispatch frame. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01J19Kf5LpGUhi2vxFJjzQJE --- internal/parse/ddl_dispatch.go | 233 +++++++ internal/parse/ddl_role.go | 361 ++++++++++ internal/parse/parser.go | 24 + internal/parse/utility_set.go | 637 ++++++++++++++++++ .../postgres_regress/errors.metadata.json | 4 - .../transactions.metadata.json | 2 - .../testdata/parse/libpg_query.metadata.json | 8 - .../postgres_regress/aggregates.metadata.json | 55 -- .../alter_generic.metadata.json | 46 +- .../alter_operator.metadata.json | 4 - .../alter_table.metadata.json | 30 - .../postgres_regress/arrays.metadata.json | 4 - .../postgres_regress/bitmapops.metadata.json | 3 - .../parse/postgres_regress/box.metadata.json | 15 +- .../parse/postgres_regress/brin.metadata.json | 4 - .../postgres_regress/brin_bloom.metadata.json | 2 - .../postgres_regress/brin_multi.metadata.json | 21 +- .../btree_index.metadata.json | 11 - .../postgres_regress/circle.metadata.json | 1 - .../postgres_regress/cluster.metadata.json | 21 +- .../collate.icu.utf8.metadata.json | 39 -- .../collate.linux.utf8.metadata.json | 8 - .../postgres_regress/collate.metadata.json | 8 - .../collate.utf8.metadata.json | 1 - .../collate.windows.win1252.metadata.json | 7 - .../compression.metadata.json | 5 - .../constraints.metadata.json | 13 - .../postgres_regress/conversion.metadata.json | 4 - .../postgres_regress/create_am.metadata.json | 18 - .../create_function_sql.metadata.json | 10 +- .../create_index.metadata.json | 37 - .../create_index_spgist.metadata.json | 16 +- .../create_operator.metadata.json | 11 - .../create_procedure.metadata.json | 44 +- .../create_role.metadata.json | 103 +-- .../create_schema.metadata.json | 8 +- .../create_table_like.metadata.json | 2 - .../create_view.metadata.json | 5 - .../postgres_regress/database.metadata.json | 6 +- .../parse/postgres_regress/date.metadata.json | 7 +- .../postgres_regress/dependency.metadata.json | 28 +- .../drop_if_exists.metadata.json | 13 - .../parse/postgres_regress/enum.metadata.json | 4 - .../postgres_regress/equivclass.metadata.json | 14 - .../postgres_regress/errors.metadata.json | 4 - .../event_trigger.metadata.json | 21 - .../postgres_regress/explain.metadata.json | 12 +- .../expressions.metadata.json | 3 - .../fast_default.metadata.json | 5 - .../postgres_regress/float8.metadata.json | 3 - .../foreign_data.metadata.json | 78 +-- .../foreign_key.metadata.json | 32 - .../postgres_regress/geometry.metadata.json | 1 - .../parse/postgres_regress/gin.metadata.json | 9 - .../parse/postgres_regress/gist.metadata.json | 6 - .../groupingsets.metadata.json | 19 - .../parse/postgres_regress/guc.metadata.json | 110 --- .../postgres_regress/hash_index.metadata.json | 5 - .../postgres_regress/horology.metadata.json | 30 +- .../postgres_regress/identity.metadata.json | 4 - .../incremental_sort.metadata.json | 28 - .../index_including.metadata.json | 4 - .../index_including_gist.metadata.json | 4 - .../postgres_regress/indexing.metadata.json | 5 - .../indirect_toast.metadata.json | 4 +- .../parse/postgres_regress/inet.metadata.json | 6 - .../postgres_regress/inherit.metadata.json | 34 - .../postgres_regress/insert.metadata.json | 10 - .../postgres_regress/interval.metadata.json | 19 - .../parse/postgres_regress/join.metadata.json | 43 -- .../postgres_regress/join_hash.metadata.json | 112 --- .../parse/postgres_regress/json.metadata.json | 4 - .../postgres_regress/jsonb.metadata.json | 21 - .../jsonb_jsonpath.metadata.json | 10 +- .../largeobject.metadata.json | 7 +- .../parse/postgres_regress/lock.metadata.json | 17 - .../maintain_every.metadata.json | 8 +- .../postgres_regress/matview.metadata.json | 14 - .../postgres_regress/memoize.metadata.json | 25 +- .../postgres_regress/merge.metadata.json | 14 +- .../misc_functions.metadata.json | 8 - .../multirangetypes.metadata.json | 24 - .../parse/postgres_regress/mvcc.metadata.json | 3 - .../postgres_regress/namespace.metadata.json | 11 - .../postgres_regress/numeric.metadata.json | 6 - .../object_address.metadata.json | 11 +- .../partition_aggregate.metadata.json | 16 - .../partition_join.metadata.json | 15 +- .../partition_prune.metadata.json | 44 -- .../postgres_regress/password.metadata.json | 45 +- .../postgres_regress/plancache.metadata.json | 7 - .../postgres_regress/plpgsql.metadata.json | 26 - .../postgres_regress/point.metadata.json | 12 +- .../postgres_regress/polygon.metadata.json | 13 +- .../postgres_regress/portals.metadata.json | 5 +- .../postgres_regress/privileges.metadata.json | 106 +-- .../parse/postgres_regress/psql.metadata.json | 8 - .../publication.metadata.json | 104 +-- .../postgres_regress/random.metadata.json | 3 +- .../postgres_regress/rangefuncs.metadata.json | 2 - .../postgres_regress/rangetypes.metadata.json | 33 - .../postgres_regress/regex.metadata.json | 1 - .../postgres_regress/regproc.metadata.json | 5 +- .../reindex_catalog.metadata.json | 1 - .../roleattributes.metadata.json | 51 +- .../rowsecurity.metadata.json | 234 +------ .../postgres_regress/rowtypes.metadata.json | 2 - .../postgres_regress/rules.metadata.json | 12 +- .../security_label.metadata.json | 10 +- .../postgres_regress/select.metadata.json | 9 - .../select_distinct.metadata.json | 26 - .../select_into.metadata.json | 7 - .../select_parallel.metadata.json | 77 --- .../select_views.metadata.json | 8 +- .../postgres_regress/sequence.metadata.json | 15 - .../postgres_regress/stats.metadata.json | 43 -- .../postgres_regress/stats_ext.metadata.json | 45 +- .../subscription.metadata.json | 27 +- .../postgres_regress/sysviews.metadata.json | 4 +- .../postgres_regress/tablespace.metadata.json | 26 +- .../parse/postgres_regress/temp.metadata.json | 5 - .../postgres_regress/test_setup.metadata.json | 2 - .../tidrangescan.metadata.json | 4 +- .../postgres_regress/tidscan.metadata.json | 4 - .../postgres_regress/timestamp.metadata.json | 4 +- .../timestamptz.metadata.json | 32 - .../postgres_regress/timetz.metadata.json | 1 - .../transactions.metadata.json | 73 -- .../postgres_regress/triggers.metadata.json | 4 - .../postgres_regress/tsearch.metadata.json | 20 +- .../parse/postgres_regress/tsrf.metadata.json | 4 - .../postgres_regress/tstypes.metadata.json | 4 +- .../postgres_regress/tuplesort.metadata.json | 14 - .../postgres_regress/union.metadata.json | 29 - .../updatable_views.metadata.json | 82 +-- .../postgres_regress/update.metadata.json | 15 - .../postgres_regress/vacuum.metadata.json | 20 +- .../vacuum_parallel.metadata.json | 6 +- .../postgres_regress/window.metadata.json | 2 - .../parse/postgres_regress/with.metadata.json | 1 - .../write_parallel.metadata.json | 4 - .../parse/postgres_regress/xml.metadata.json | 6 - .../postgres_regress/xmlmap.metadata.json | 1 - 143 files changed, 1302 insertions(+), 2768 deletions(-) create mode 100644 internal/parse/ddl_dispatch.go create mode 100644 internal/parse/ddl_role.go create mode 100644 internal/parse/utility_set.go diff --git a/internal/parse/ddl_dispatch.go b/internal/parse/ddl_dispatch.go new file mode 100644 index 0000000..a8340d3 --- /dev/null +++ b/internal/parse/ddl_dispatch.go @@ -0,0 +1,233 @@ +package parse + +// Statement dispatch for the CREATE/ALTER/DROP families. gram.y keeps every +// alternative alive in the LALR tables; the recursive-descent port picks the +// production from one or two tokens of lookahead past the head keyword. + +import ( + "github.com/sqlc-dev/oliphant/ast" +) + +// parseCreateDispatch routes a statement beginning with CREATE. The CREATE +// token is not yet consumed. +func (p *parser) parseCreateDispatch() *ast.Node { + p.expect(ast.Token_CREATE) + switch p.kind() { + case ast.Token_ROLE: + return p.parseCreateRoleStmt(ast.RoleStmtType_ROLESTMT_ROLE) + case ast.Token_USER: + if p.kindN(1) == ast.Token_MAPPING { + break // CreateUserMappingStmt (milestone 7) + } + return p.parseCreateRoleStmt(ast.RoleStmtType_ROLESTMT_USER) + case ast.Token_GROUP_P: + return p.parseCreateRoleStmt(ast.RoleStmtType_ROLESTMT_GROUP) + case ast.Token_SCHEMA: + p.next() + return p.parseCreateSchemaStmt() + } + if stmt := p.parseCreateStmtFamily(false); stmt != nil { + return stmt + } + p.syntaxErrorAt() + return nil +} + +// parseCreateStmtFamily handles the CREATE statements that can also appear +// as CREATE SCHEMA elements (CreateStmt, IndexStmt, CreateSeqStmt, +// CreateTrigStmt, ViewStmt) plus, when schemaElt is false, the rest of the +// CREATE family. The CREATE token has been consumed. Returns nil when the +// lookahead matches nothing implemented. +func (p *parser) parseCreateStmtFamily(schemaElt bool) *ast.Node { + switch p.kind() { + case ast.Token_TEMPORARY, ast.Token_TEMP, ast.Token_LOCAL, + ast.Token_GLOBAL, ast.Token_UNLOGGED: + // OptTemp: heads CreateStmt, CreateAsStmt, ViewStmt, CreateSeqStmt. + return p.parseOptTempHeadedCreate(schemaElt) + case ast.Token_TABLE: + return p.parseCreateTableOrAs(p.parseOptTempAfterCreate()) + case ast.Token_UNIQUE: + if p.kindN(1) == ast.Token_INDEX { + return p.parseIndexStmt() + } + case ast.Token_INDEX: + return p.parseIndexStmt() + case ast.Token_SEQUENCE: + return p.parseCreateSeqStmt(relPersistPermanent) + case ast.Token_VIEW: + return p.parseViewStmt(false, relPersistPermanent) + case ast.Token_RECURSIVE: + if p.kindN(1) == ast.Token_VIEW { + return p.parseViewStmt(false, relPersistPermanent) + } + case ast.Token_OR: + if p.kindN(1) == ast.Token_REPLACE { + return p.parseCreateOrReplace(schemaElt) + } + case ast.Token_TRIGGER: + return p.parseCreateTrigStmt(false, false) + case ast.Token_CONSTRAINT: + if p.kindN(1) == ast.Token_TRIGGER { + p.next() + return p.parseCreateTrigStmt(false, true) + } + } + return nil +} + +// parseCreateOrReplace handles CREATE OR REPLACE ...; CREATE is consumed, +// OR REPLACE not yet. +func (p *parser) parseCreateOrReplace(schemaElt bool) *ast.Node { + p.next() // OR + p.next() // REPLACE + switch p.kind() { + case ast.Token_TEMPORARY, ast.Token_TEMP, ast.Token_LOCAL, + ast.Token_GLOBAL, ast.Token_UNLOGGED: + persistence := p.parseOptTempAfterCreate() + if p.kind() == ast.Token_VIEW || (p.kind() == ast.Token_RECURSIVE && p.kindN(1) == ast.Token_VIEW) { + return p.parseViewStmt(true, persistence) + } + case ast.Token_VIEW, ast.Token_RECURSIVE: + if p.kind() == ast.Token_VIEW || p.kindN(1) == ast.Token_VIEW { + return p.parseViewStmt(true, relPersistPermanent) + } + case ast.Token_TRIGGER: + return p.parseCreateTrigStmt(true, false) + case ast.Token_CONSTRAINT: + if p.kindN(1) == ast.Token_TRIGGER { + p.next() + return p.parseCreateTrigStmt(true, true) + } + } + p.syntaxErrorAt() + return nil +} + +// parseOptTempHeadedCreate parses a CREATE statement whose next token is an +// OptTemp keyword: CREATE [OptTemp] TABLE/SEQUENCE/VIEW. +func (p *parser) parseOptTempHeadedCreate(schemaElt bool) *ast.Node { + persistence := p.parseOptTempAfterCreate() + switch p.kind() { + case ast.Token_TABLE: + return p.parseCreateTableOrAs(persistence) + case ast.Token_SEQUENCE: + return p.parseCreateSeqStmt(persistence) + case ast.Token_VIEW: + return p.parseViewStmt(false, persistence) + case ast.Token_RECURSIVE: + if p.kindN(1) == ast.Token_VIEW { + return p.parseViewStmt(false, persistence) + } + } + p.syntaxErrorAt() + return nil +} + +// parseOptTempAfterCreate is gram.y's OptTemp, with TABLE (or SEQUENCE or +// VIEW) still ahead. +func (p *parser) parseOptTempAfterCreate() string { + switch p.kind() { + case ast.Token_TEMPORARY, ast.Token_TEMP: + p.next() + return relPersistTemp + case ast.Token_LOCAL: + p.next() + switch p.kind() { + case ast.Token_TEMPORARY, ast.Token_TEMP: + p.next() + return relPersistTemp + } + p.syntaxErrorAt() + case ast.Token_GLOBAL: + // GLOBAL TEMPORARY/TEMP: deprecated but accepted; gram.y warns and + // treats it as TEMP (a warning is not part of the parse result). + p.next() + switch p.kind() { + case ast.Token_TEMPORARY, ast.Token_TEMP: + p.next() + return relPersistTemp + } + p.syntaxErrorAt() + case ast.Token_UNLOGGED: + p.next() + return relPersistUnlogged + } + return relPersistPermanent +} + +// parseAlterDispatch routes a statement beginning with ALTER. The ALTER +// token is not yet consumed. +func (p *parser) parseAlterDispatch() *ast.Node { + p.expect(ast.Token_ALTER) + switch p.kind() { + case ast.Token_ROLE, ast.Token_USER: + if p.kindN(1) == ast.Token_MAPPING { + break // AlterUserMappingStmt (milestone 7) + } + p.next() + return p.parseAlterRoleStmt() + case ast.Token_GROUP_P: + p.next() + return p.parseAlterGroupStmt() + } + p.syntaxErrorAt() + return nil +} + +// parseDropDispatch routes a statement beginning with DROP. The DROP token +// is not yet consumed. +func (p *parser) parseDropDispatch() *ast.Node { + p.expect(ast.Token_DROP) + switch p.kind() { + case ast.Token_ROLE, ast.Token_GROUP_P: + p.next() + return p.parseDropRoleStmt() + case ast.Token_USER: + if p.kindN(1) == ast.Token_MAPPING { + break // DropUserMappingStmt (milestone 7) + } + p.next() + return p.parseDropRoleStmt() + } + p.syntaxErrorAt() + return nil +} + +// RangeVar.relpersistence values (pg_class.h: RELPERSISTENCE_*). +const ( + relPersistPermanent = "p" + relPersistTemp = "t" + relPersistUnlogged = "u" +) + +// Stubs for productions landing later in milestones 6-7; each fails with +// the syntax error the dispatcher would otherwise have raised. +func (p *parser) parseCreateTableOrAs(persistence string) *ast.Node { + p.syntaxErrorAt() + return nil +} + +func (p *parser) parseIndexStmt() *ast.Node { + p.syntaxErrorAt() + return nil +} + +func (p *parser) parseCreateSeqStmt(persistence string) *ast.Node { + p.syntaxErrorAt() + return nil +} + +func (p *parser) parseViewStmt(orReplace bool, persistence string) *ast.Node { + p.syntaxErrorAt() + return nil +} + +func (p *parser) parseCreateTrigStmt(orReplace, isConstraint bool) *ast.Node { + p.syntaxErrorAt() + return nil +} + +func (p *parser) parseGrantStmt() *ast.Node { + p.syntaxErrorAt() + return nil +} diff --git a/internal/parse/ddl_role.go b/internal/parse/ddl_role.go new file mode 100644 index 0000000..e81bb74 --- /dev/null +++ b/internal/parse/ddl_role.go @@ -0,0 +1,361 @@ +package parse + +// Role and schema DDL: CreateRoleStmt/CreateUserStmt/CreateGroupStmt, +// AlterRoleStmt, AlterRoleSetStmt, AlterGroupStmt, DropRoleStmt, +// CreateSchemaStmt, plus RoleSpec/RoleId/role_list and CallStmt. + +import ( + "fmt" + + "github.com/sqlc-dev/oliphant/ast" +) + +// parseCallStmt is gram.y's CallStmt: CALL func_application. +func (p *parser) parseCallStmt() *ast.Node { + p.expect(ast.Token_CALL) + tok := p.peek() + name := p.parseFuncName(tok) + fn := p.parseFuncApplicationNoDecoration(name, tok) + return &ast.Node{Node: &ast.Node_CallStmt{CallStmt: &ast.CallStmt{ + Funccall: asFuncCall(fn), + }}} +} + +// parseRoleSpec is gram.y's RoleSpec. +func (p *parser) parseRoleSpec() *ast.RoleSpec { + tok := p.peek() + switch tok.Kind { + case ast.Token_CURRENT_ROLE: + p.next() + return &ast.RoleSpec{Roletype: ast.RoleSpecType_ROLESPEC_CURRENT_ROLE, Location: tok.Start} + case ast.Token_CURRENT_USER: + p.next() + return &ast.RoleSpec{Roletype: ast.RoleSpecType_ROLESPEC_CURRENT_USER, Location: tok.Start} + case ast.Token_SESSION_USER: + p.next() + return &ast.RoleSpec{Roletype: ast.RoleSpecType_ROLESPEC_SESSION_USER, Location: tok.Start} + } + name := p.nonReservedWord() + // gram.y: "public" and "none" are not keywords, but are special here. + switch name { + case "public": + return &ast.RoleSpec{Roletype: ast.RoleSpecType_ROLESPEC_PUBLIC, Location: tok.Start} + case "none": + p.ereport("base_yyparse", `role name "none" is reserved`, tok.Start) + } + return &ast.RoleSpec{ + Roletype: ast.RoleSpecType_ROLESPEC_CSTRING, + Rolename: name, + Location: tok.Start, + } +} + +// parseRoleId is gram.y's RoleId: a RoleSpec restricted to plain names. +func (p *parser) parseRoleId() string { + tok := p.peek() + spec := p.parseRoleSpec() + switch spec.Roletype { + case ast.RoleSpecType_ROLESPEC_CSTRING: + return spec.Rolename + case ast.RoleSpecType_ROLESPEC_PUBLIC: + p.ereport("base_yyparse", `role name "public" is reserved`, tok.Start) + case ast.RoleSpecType_ROLESPEC_SESSION_USER: + p.ereport("base_yyparse", "SESSION_USER cannot be used as a role name here", tok.Start) + case ast.RoleSpecType_ROLESPEC_CURRENT_USER: + p.ereport("base_yyparse", "CURRENT_USER cannot be used as a role name here", tok.Start) + case ast.RoleSpecType_ROLESPEC_CURRENT_ROLE: + p.ereport("base_yyparse", "CURRENT_ROLE cannot be used as a role name here", tok.Start) + } + return "" +} + +func nRoleSpec(r *ast.RoleSpec) *ast.Node { + return &ast.Node{Node: &ast.Node_RoleSpec{RoleSpec: r}} +} + +// parseRoleList is gram.y's role_list. +func (p *parser) parseRoleList() []*ast.Node { + list := []*ast.Node{nRoleSpec(p.parseRoleSpec())} + for p.have(ast.Token(',')) { + list = append(list, nRoleSpec(p.parseRoleSpec())) + } + return list +} + +// parseOptWith is gram.y's opt_with: WITH | WITH_LA | empty. +func (p *parser) parseOptWith() { + if p.kind() == ast.Token_WITH || p.kind() == ast.Token_WITH_LA { + p.next() + } +} + +// parseCreateRoleStmt is gram.y's CreateRoleStmt/CreateUserStmt/ +// CreateGroupStmt; CREATE has been consumed and the ROLE/USER/GROUP_P +// keyword selects the stmt_type. +func (p *parser) parseCreateRoleStmt(stmtType ast.RoleStmtType) *ast.Node { + p.next() // ROLE, USER, or GROUP_P + n := &ast.CreateRoleStmt{StmtType: stmtType} + n.Role = p.parseRoleId() + p.parseOptWith() + n.Options = p.parseOptRoleList(true) + return &ast.Node{Node: &ast.Node_CreateRoleStmt{CreateRoleStmt: n}} +} + +// parseOptRoleList is gram.y's OptRoleList (create=true) or +// AlterOptRoleList (create=false): a juxtaposed list of role options. +func (p *parser) parseOptRoleList(create bool) []*ast.Node { + var list []*ast.Node + for { + el := p.parseRoleElem(create) + if el == nil { + return list + } + list = append(list, el) + } +} + +// parseRoleElem is gram.y's AlterOptRoleElem plus, when create is true, the +// CreateOptRoleElem extras. Returns nil when the lookahead does not start a +// role option. +func (p *parser) parseRoleElem(create bool) *ast.Node { + tok := p.peek() + switch tok.Kind { + case ast.Token_PASSWORD: + p.next() + vtok := p.peek() + switch vtok.Kind { + case ast.Token_SCONST: + return makeDefElem("password", nStr(p.sconst()), tok.Start) + case ast.Token_PARAM: + p.next() + return makeDefElem("password", makeParamRef(vtok.Ival, vtok.Start), tok.Start) + case ast.Token_NULL_P: + p.next() + return makeDefElem("password", nil, tok.Start) + } + p.syntaxErrorAt() + case ast.Token_ENCRYPTED: + p.next() + p.expect(ast.Token_PASSWORD) + vtok := p.peek() + switch vtok.Kind { + case ast.Token_SCONST: + return makeDefElem("password", nStr(p.sconst()), tok.Start) + case ast.Token_PARAM: + p.next() + return makeDefElem("password", makeParamRef(vtok.Ival, vtok.Start), tok.Start) + } + p.syntaxErrorAt() + case ast.Token_UNENCRYPTED: + p.next() + p.expect(ast.Token_PASSWORD) + p.ereport("base_yyparse", "UNENCRYPTED PASSWORD is no longer supported", tok.Start) + case ast.Token_INHERIT: + p.next() + return makeDefElem("inherit", nBoolean(true), tok.Start) + case ast.Token_CONNECTION: + p.next() + p.expect(ast.Token_LIMIT) + return makeDefElem("connectionlimit", nInteger(p.parseSignedIconst()), tok.Start) + case ast.Token_VALID: + p.next() + p.expect(ast.Token_UNTIL) + return makeDefElem("validUntil", nStr(p.sconst()), tok.Start) + case ast.Token_USER: + p.next() + return makeDefElem("rolemembers", nList(p.parseRoleList()), tok.Start) + case ast.Token_IDENT: + p.next() + var name string + var val bool + switch tok.Str { + case "superuser": + name, val = "superuser", true + case "nosuperuser": + name, val = "superuser", false + case "createrole": + name, val = "createrole", true + case "nocreaterole": + name, val = "createrole", false + case "replication": + name, val = "isreplication", true + case "noreplication": + name, val = "isreplication", false + case "createdb": + name, val = "createdb", true + case "nocreatedb": + name, val = "createdb", false + case "login": + name, val = "canlogin", true + case "nologin": + name, val = "canlogin", false + case "bypassrls": + name, val = "bypassrls", true + case "nobypassrls": + name, val = "bypassrls", false + case "noinherit": + name, val = "inherit", false + default: + p.ereport("base_yyparse", fmt.Sprintf("unrecognized role option %q", tok.Str), tok.Start) + } + return makeDefElem(name, nBoolean(val), tok.Start) + } + if create { + switch tok.Kind { + case ast.Token_SYSID: + p.next() + return makeDefElem("sysid", nInteger(p.iconst()), tok.Start) + case ast.Token_ADMIN: + p.next() + return makeDefElem("adminmembers", nList(p.parseRoleList()), tok.Start) + case ast.Token_ROLE: + p.next() + return makeDefElem("rolemembers", nList(p.parseRoleList()), tok.Start) + case ast.Token_IN_P: + p.next() + switch p.kind() { + case ast.Token_ROLE, ast.Token_GROUP_P: + p.next() + return makeDefElem("addroleto", nList(p.parseRoleList()), tok.Start) + } + p.syntaxErrorAt() + } + } + return nil +} + +// parseAlterRoleStmt is gram.y's AlterRoleStmt and AlterRoleSetStmt; ALTER +// and ROLE/USER have been consumed. +func (p *parser) parseAlterRoleStmt() *ast.Node { + // AlterRoleSetStmt admits ALL where AlterRoleStmt needs a RoleSpec. + var role *ast.RoleSpec + if !p.have(ast.Token_ALL) { + role = p.parseRoleSpec() + } else { + // ALTER ROLE ALL only exists in the Set variant. + n := &ast.AlterRoleSetStmt{} + if p.have(ast.Token_IN_P) { + p.expect(ast.Token_DATABASE) + n.Database = p.name() + } + n.Setstmt = p.parseSetResetClause() + return &ast.Node{Node: &ast.Node_AlterRoleSetStmt{AlterRoleSetStmt: n}} + } + + // IN DATABASE / SET / RESET pick AlterRoleSetStmt. + switch p.kind() { + case ast.Token_IN_P: + n := &ast.AlterRoleSetStmt{Role: role} + p.next() + p.expect(ast.Token_DATABASE) + n.Database = p.name() + n.Setstmt = p.parseSetResetClause() + return &ast.Node{Node: &ast.Node_AlterRoleSetStmt{AlterRoleSetStmt: n}} + case ast.Token_SET, ast.Token_RESET: + n := &ast.AlterRoleSetStmt{Role: role, Setstmt: p.parseSetResetClause()} + return &ast.Node{Node: &ast.Node_AlterRoleSetStmt{AlterRoleSetStmt: n}} + } + + n := &ast.AlterRoleStmt{Role: role, Action: 1} + p.parseOptWith() + n.Options = p.parseOptRoleList(false) + return &ast.Node{Node: &ast.Node_AlterRoleStmt{AlterRoleStmt: n}} +} + +// parseAlterGroupStmt is gram.y's AlterGroupStmt; ALTER GROUP_P consumed. +func (p *parser) parseAlterGroupStmt() *ast.Node { + role := p.parseRoleSpec() + // ALTER GROUP RoleSpec RENAME TO ... is a RenameStmt; handled by the + // caller before dispatching here. + var action int32 + switch p.kind() { + case ast.Token_ADD_P: + p.next() + action = 1 + case ast.Token_DROP: + p.next() + action = -1 + default: + p.syntaxErrorAt() + } + utok := p.expect(ast.Token_USER) + n := &ast.AlterRoleStmt{ + Role: role, + Action: action, + Options: []*ast.Node{ + makeDefElem("rolemembers", nList(p.parseRoleList()), utok.End), + }, + } + // gram.y gives the DefElem @6 — the role_list's location. + return &ast.Node{Node: &ast.Node_AlterRoleStmt{AlterRoleStmt: n}} +} + +// parseDropRoleStmt is gram.y's DropRoleStmt; DROP ROLE/USER/GROUP_P +// consumed. +func (p *parser) parseDropRoleStmt() *ast.Node { + n := &ast.DropRoleStmt{} + if p.have(ast.Token_IF_P) { + p.expect(ast.Token_EXISTS) + n.MissingOk = true + } + n.Roles = p.parseRoleList() + return &ast.Node{Node: &ast.Node_DropRoleStmt{DropRoleStmt: n}} +} + +// parseCreateSchemaStmt is gram.y's CreateSchemaStmt; CREATE SCHEMA +// consumed. +func (p *parser) parseCreateSchemaStmt() *ast.Node { + n := &ast.CreateSchemaStmt{} + if p.have(ast.Token_IF_P) { + p.expect(ast.Token_NOT) + p.expect(ast.Token_EXISTS) + n.IfNotExists = true + } + // opt_single_name AUTHORIZATION RoleSpec | ColId + if p.kind() == ast.Token_AUTHORIZATION { + p.next() + n.Authrole = p.parseRoleSpec() + } else { + n.Schemaname = p.colId() + if p.have(ast.Token_AUTHORIZATION) { + n.Authrole = p.parseRoleSpec() + } + } + // OptSchemaEltList + eltTok := p.peek() + elts := p.parseOptSchemaEltList() + if n.IfNotExists && elts != nil { + p.ereport("base_yyparse", "CREATE SCHEMA IF NOT EXISTS cannot include schema elements", eltTok.Start) + } + n.SchemaElts = elts + return &ast.Node{Node: &ast.Node_CreateSchemaStmt{CreateSchemaStmt: n}} +} + +// parseOptSchemaEltList is gram.y's OptSchemaEltList/schema_stmt: the +// statements that can appear inside CREATE SCHEMA. +func (p *parser) parseOptSchemaEltList() []*ast.Node { + var list []*ast.Node + for { + var stmt *ast.Node + switch p.kind() { + case ast.Token_CREATE: + stmt = p.parseCreateSchemaElt() + case ast.Token_GRANT: + stmt = p.parseGrantStmt() + default: + return list + } + list = append(list, stmt) + } +} + +// parseCreateSchemaElt dispatches the CREATE-headed schema_stmt +// alternatives: CreateStmt, IndexStmt, CreateSeqStmt, CreateTrigStmt, +// ViewStmt. +func (p *parser) parseCreateSchemaElt() *ast.Node { + stmt := p.parseCreateStmtFamily(true) + if stmt == nil { + p.syntaxErrorAt() + } + return stmt +} diff --git a/internal/parse/parser.go b/internal/parse/parser.go index d4f21f3..8cebc4d 100644 --- a/internal/parse/parser.go +++ b/internal/parse/parser.go @@ -214,6 +214,30 @@ func (p *parser) parseToplevelStmt() *ast.Node { return p.parseFetchStmt(true) case ast.Token_CLOSE: return p.parseClosePortalStmt() + case ast.Token_CALL: + return p.parseCallStmt() + case ast.Token_CREATE: + return p.parseCreateDispatch() + case ast.Token_ALTER: + return p.parseAlterDispatch() + case ast.Token_DROP: + return p.parseDropDispatch() + case ast.Token_SET: + // SET CONSTRAINTS is ConstraintsSetStmt unless "constraints" is + // being used as a variable name (generic_set's var_name). + if p.kindN(1) == ast.Token_CONSTRAINTS && !p.varNameContinues(2) { + p.next() + return p.parseConstraintsSetStmt() + } + return p.parseVariableSetStmt() + case ast.Token_RESET: + return p.parseVariableResetStmt() + case ast.Token_SHOW: + return p.parseVariableShowStmt() + case ast.Token_CHECKPOINT: + return p.parseCheckPointStmt() + case ast.Token_DISCARD: + return p.parseDiscardStmt() } p.syntaxError(tok) return nil diff --git a/internal/parse/utility_set.go b/internal/parse/utility_set.go new file mode 100644 index 0000000..1ecd2b6 --- /dev/null +++ b/internal/parse/utility_set.go @@ -0,0 +1,637 @@ +package parse + +// SET/RESET/SHOW and the small standalone utility statements: +// VariableSetStmt, VariableResetStmt, VariableShowStmt, ConstraintsSetStmt, +// CheckPointStmt, DiscardStmt, plus the transaction_mode machinery shared +// with TransactionStmt. + +import ( + "github.com/sqlc-dev/oliphant/ast" +) + +// parseVariableSetStmt is gram.y's VariableSetStmt: +// +// SET set_rest | SET LOCAL set_rest | SET SESSION set_rest +func (p *parser) parseVariableSetStmt() *ast.Node { + p.expect(ast.Token_SET) + var n *ast.VariableSetStmt + switch p.kind() { + case ast.Token_LOCAL: + // LOCAL is also a ColId: "SET local = ..." names a variable + // "local". The LALR tables shift LOCAL and decide by the next + // token: TO/'='/'.' continue var_name, anything else means the + // SET LOCAL prefix. + if p.varNameContinues(1) { + n = p.parseSetRest() + } else { + p.next() + n = p.parseSetRest() + n.IsLocal = true + } + case ast.Token_SESSION: + // Same shape: SESSION AUTHORIZATION/CHARACTERISTICS belong to + // set_rest; "SET session = x" names a variable; otherwise SESSION + // is the scope prefix. + switch { + case p.varNameContinues(1), + p.kindN(1) == ast.Token_CHARACTERISTICS, + p.kindN(1) == ast.Token_AUTHORIZATION: + n = p.parseSetRest() + default: + p.next() + n = p.parseSetRest() + } + default: + n = p.parseSetRest() + } + return &ast.Node{Node: &ast.Node_VariableSetStmt{VariableSetStmt: n}} +} + +// varNameContinues reports whether the token after position n keeps the +// current keyword inside a var_name (generic_set's var_name TO/'='/FROM +// CURRENT paths, or a qualified name continuing with '.'). +func (p *parser) varNameContinues(n int) bool { + switch p.kindN(n) { + case ast.Token_TO, ast.Token('='), ast.Token('.'): + return true + case ast.Token_FROM: + // var_name FROM CURRENT_P + return p.kindN(n+1) == ast.Token_CURRENT_P + } + return false +} + +// parseSetRest is gram.y's set_rest. +func (p *parser) parseSetRest() *ast.VariableSetStmt { + tok := p.peek() + switch tok.Kind { + case ast.Token_TRANSACTION: + if !p.varNameContinues(1) { + p.next() + if p.have(ast.Token_SNAPSHOT) { + // set_rest_more: TRANSACTION SNAPSHOT Sconst + stok := p.peek() + return &ast.VariableSetStmt{ + Kind: ast.VariableSetKind_VAR_SET_MULTI, + Name: "TRANSACTION SNAPSHOT", + Args: []*ast.Node{makeStringConst(p.sconst(), stok.Start)}, + } + } + // set_rest: TRANSACTION transaction_mode_list + return &ast.VariableSetStmt{ + Kind: ast.VariableSetKind_VAR_SET_MULTI, + Name: "TRANSACTION", + Args: p.parseTransactionModeList(), + } + } + case ast.Token_SESSION: + if p.kindN(1) == ast.Token_CHARACTERISTICS { + // set_rest: SESSION CHARACTERISTICS AS TRANSACTION + // transaction_mode_list + p.next() + p.next() + p.expect(ast.Token_AS) + p.expect(ast.Token_TRANSACTION) + return &ast.VariableSetStmt{ + Kind: ast.VariableSetKind_VAR_SET_MULTI, + Name: "SESSION CHARACTERISTICS", + Args: p.parseTransactionModeList(), + } + } + } + return p.parseSetRestMore() +} + +// parseSetRestMore is gram.y's set_rest_more. The keyword-headed special +// syntaxes each also admit the keyword as a plain var_name; the lookahead +// checks reproduce how the LALR tables decide between them. +func (p *parser) parseSetRestMore() *ast.VariableSetStmt { + tok := p.peek() + switch tok.Kind { + case ast.Token_TIME: + // TIME ZONE zone_value + if p.kindN(1) == ast.Token_ZONE { + p.next() + p.next() + n := &ast.VariableSetStmt{ + Kind: ast.VariableSetKind_VAR_SET_VALUE, + Name: "timezone", + } + if zv := p.parseZoneValue(); zv != nil { + n.Args = []*ast.Node{zv} + } else { + n.Kind = ast.VariableSetKind_VAR_SET_DEFAULT + } + return n + } + case ast.Token_CATALOG_P: + if p.kindN(1) == ast.Token_SCONST { + p.next() + stok := p.peek() + p.ereport("base_yyparse", "current database cannot be changed", stok.Start) + } + case ast.Token_SCHEMA: + switch p.kindN(1) { + case ast.Token_SCONST: + p.next() + stok := p.peek() + return &ast.VariableSetStmt{ + Kind: ast.VariableSetKind_VAR_SET_VALUE, + Name: "search_path", + Args: []*ast.Node{makeStringConst(p.sconst(), stok.Start)}, + } + case ast.Token_PARAM: + p.next() + prm := p.next() + return &ast.VariableSetStmt{ + Kind: ast.VariableSetKind_VAR_SET_VALUE, + Name: "search_path", + Args: []*ast.Node{makeParamRef(prm.Ival, prm.Start)}, + } + } + case ast.Token_NAMES: + if !p.varNameContinues(1) { + // NAMES opt_encoding + p.next() + n := &ast.VariableSetStmt{ + Kind: ast.VariableSetKind_VAR_SET_VALUE, + Name: "client_encoding", + } + etok := p.peek() + switch etok.Kind { + case ast.Token_SCONST: + n.Args = []*ast.Node{makeStringConst(p.sconst(), etok.Start)} + case ast.Token_DEFAULT: + p.next() + n.Kind = ast.VariableSetKind_VAR_SET_DEFAULT + default: + n.Kind = ast.VariableSetKind_VAR_SET_DEFAULT + } + return n + } + case ast.Token_ROLE: + if !p.varNameContinues(1) { + p.next() + vtok := p.peek() + if vtok.Kind == ast.Token_PARAM { + p.next() + return &ast.VariableSetStmt{ + Kind: ast.VariableSetKind_VAR_SET_VALUE, + Name: "role", + Args: []*ast.Node{makeParamRef(vtok.Ival, vtok.Start)}, + } + } + return &ast.VariableSetStmt{ + Kind: ast.VariableSetKind_VAR_SET_VALUE, + Name: "role", + Args: []*ast.Node{makeStringConst(p.nonReservedWordOrSconst(), vtok.Start)}, + } + } + case ast.Token_SESSION: + if p.kindN(1) == ast.Token_AUTHORIZATION { + p.next() + p.next() + vtok := p.peek() + switch vtok.Kind { + case ast.Token_DEFAULT: + p.next() + return &ast.VariableSetStmt{ + Kind: ast.VariableSetKind_VAR_SET_DEFAULT, + Name: "session_authorization", + } + case ast.Token_PARAM: + p.next() + return &ast.VariableSetStmt{ + Kind: ast.VariableSetKind_VAR_SET_VALUE, + Name: "session_authorization", + Args: []*ast.Node{makeParamRef(vtok.Ival, vtok.Start)}, + } + } + return &ast.VariableSetStmt{ + Kind: ast.VariableSetKind_VAR_SET_VALUE, + Name: "session_authorization", + Args: []*ast.Node{makeStringConst(p.nonReservedWordOrSconst(), vtok.Start)}, + } + } + case ast.Token_XML_P: + if p.kindN(1) == ast.Token_OPTION { + p.next() + p.next() + vtok := p.peek() + opt := p.parseDocumentOrContent() + s := "CONTENT" + if opt == ast.XmlOptionType_XMLOPTION_DOCUMENT { + s = "DOCUMENT" + } + return &ast.VariableSetStmt{ + Kind: ast.VariableSetKind_VAR_SET_VALUE, + Name: "xmloption", + Args: []*ast.Node{makeStringConst(s, vtok.Start)}, + } + } + } + + // generic_set / var_name FROM CURRENT_P + name := p.parseVarName() + switch { + case p.have(ast.Token_TO), p.have(ast.Token('=')): + if p.kind() == ast.Token_DEFAULT { + p.next() + return &ast.VariableSetStmt{ + Kind: ast.VariableSetKind_VAR_SET_DEFAULT, + Name: name, + } + } + return &ast.VariableSetStmt{ + Kind: ast.VariableSetKind_VAR_SET_VALUE, + Name: name, + Args: p.parseVarList(), + } + case p.kind() == ast.Token_FROM: + p.next() + p.expect(ast.Token_CURRENT_P) + return &ast.VariableSetStmt{ + Kind: ast.VariableSetKind_VAR_SET_CURRENT, + Name: name, + } + } + p.syntaxErrorAt() + return nil +} + +// parseVarName is gram.y's var_name: ColId ('.' ColId)*. +func (p *parser) parseVarName() string { + name := p.colId() + for p.have(ast.Token('.')) { + name += "." + p.colId() + } + return name +} + +// parseVarList is gram.y's var_list. +func (p *parser) parseVarList() []*ast.Node { + list := []*ast.Node{p.parseVarValue()} + for p.have(ast.Token(',')) { + list = append(list, p.parseVarValue()) + } + return list +} + +// parseVarValue is gram.y's var_value. +func (p *parser) parseVarValue() *ast.Node { + tok := p.peek() + switch tok.Kind { + case ast.Token_PARAM: + p.next() + return makeParamRef(tok.Ival, tok.Start) + case ast.Token_FCONST, ast.Token_ICONST, ast.Token('+'), ast.Token('-'): + return makeAConst(p.parseNumericOnly(), tok.Start) + } + return makeStringConst(p.parseOptBooleanOrString(), tok.Start) +} + +// parseZoneValue is gram.y's zone_value; nil means DEFAULT/LOCAL. +func (p *parser) parseZoneValue() *ast.Node { + tok := p.peek() + switch tok.Kind { + case ast.Token_SCONST: + p.next() + return makeStringConst(tok.Str, tok.Start) + case ast.Token_PARAM: + p.next() + return makeParamRef(tok.Ival, tok.Start) + case ast.Token_IDENT: + p.next() + return makeStringConst(tok.Str, tok.Start) + case ast.Token_INTERVAL: + p.next() + if p.have(ast.Token('(')) { + // ConstInterval '(' Iconst ')' Sconst + itok := p.peek() + iv := p.iconst() + p.expect(ast.Token(')')) + t := SystemTypeName("interval") + t.Location = tok.Start + t.Typmods = []*ast.Node{ + makeIntConst(intervalFullRange, -1), + makeIntConst(iv, itok.Start), + } + stok := p.peek() + return makeStringConstCast(p.sconst(), stok.Start, t) + } + // ConstInterval Sconst opt_interval + stok := p.peek() + s := p.sconst() + mtok := p.peek() + typmods := p.parseOptInterval() + if typmods != nil { + c := asAConst(typmods[0]) + if ival := c.GetIval().GetIval(); ival&^(intervalMaskHour|intervalMaskMinute) != 0 { + p.ereport("base_yyparse", "time zone interval must be HOUR or HOUR TO MINUTE", mtok.Start) + } + } + t := SystemTypeName("interval") + t.Location = tok.Start + t.Typmods = typmods + return makeStringConstCast(s, stok.Start, t) + case ast.Token_FCONST, ast.Token_ICONST, ast.Token('+'), ast.Token('-'): + return makeAConst(p.parseNumericOnly(), tok.Start) + case ast.Token_DEFAULT, ast.Token_LOCAL: + p.next() + return nil + } + p.syntaxErrorAt() + return nil +} + +// nonReservedWordOrSconst is gram.y's NonReservedWord_or_Sconst. +func (p *parser) nonReservedWordOrSconst() string { + if p.kind() == ast.Token_SCONST { + return p.sconst() + } + return p.nonReservedWord() +} + +// parseIsoLevel is gram.y's iso_level. +func (p *parser) parseIsoLevel() string { + switch p.kind() { + case ast.Token_READ: + p.next() + switch p.kind() { + case ast.Token_UNCOMMITTED: + p.next() + return "read uncommitted" + case ast.Token_COMMITTED: + p.next() + return "read committed" + } + p.syntaxErrorAt() + case ast.Token_REPEATABLE: + p.next() + p.expect(ast.Token_READ) + return "repeatable read" + case ast.Token_SERIALIZABLE: + p.next() + return "serializable" + } + p.syntaxErrorAt() + return "" +} + +// transactionModeItemStarts reports whether the lookahead begins a +// transaction_mode_item. +func (p *parser) transactionModeItemStarts() bool { + switch p.kind() { + case ast.Token_ISOLATION, ast.Token_DEFERRABLE: + return true + case ast.Token_READ: + k := p.kindN(1) + return k == ast.Token_ONLY || k == ast.Token_WRITE + case ast.Token_NOT: + return p.kindN(1) == ast.Token_DEFERRABLE + } + return false +} + +// parseTransactionModeItem is gram.y's transaction_mode_item. +func (p *parser) parseTransactionModeItem() *ast.Node { + tok := p.peek() + switch tok.Kind { + case ast.Token_ISOLATION: + p.next() + p.expect(ast.Token_LEVEL) + ltok := p.peek() + return makeDefElem("transaction_isolation", makeStringConst(p.parseIsoLevel(), ltok.Start), tok.Start) + case ast.Token_READ: + p.next() + switch p.kind() { + case ast.Token_ONLY: + p.next() + return makeDefElem("transaction_read_only", makeIntConst(1, tok.Start), tok.Start) + case ast.Token_WRITE: + p.next() + return makeDefElem("transaction_read_only", makeIntConst(0, tok.Start), tok.Start) + } + p.syntaxErrorAt() + case ast.Token_DEFERRABLE: + p.next() + return makeDefElem("transaction_deferrable", makeIntConst(1, tok.Start), tok.Start) + case ast.Token_NOT: + p.next() + p.expect(ast.Token_DEFERRABLE) + return makeDefElem("transaction_deferrable", makeIntConst(0, tok.Start), tok.Start) + } + p.syntaxErrorAt() + return nil +} + +// parseTransactionModeList is gram.y's transaction_mode_list: items joined +// by commas or plain juxtaposition. +func (p *parser) parseTransactionModeList() []*ast.Node { + list := []*ast.Node{p.parseTransactionModeItem()} + for { + if p.kind() == ast.Token(',') && p.transactionModeItemStartsAt(1) { + p.next() + list = append(list, p.parseTransactionModeItem()) + continue + } + if p.transactionModeItemStarts() { + list = append(list, p.parseTransactionModeItem()) + continue + } + return list + } +} + +// transactionModeItemStartsAt is transactionModeItemStarts at offset n. +func (p *parser) transactionModeItemStartsAt(n int) bool { + switch p.kindN(n) { + case ast.Token_ISOLATION, ast.Token_DEFERRABLE: + return true + case ast.Token_READ: + k := p.kindN(n + 1) + return k == ast.Token_ONLY || k == ast.Token_WRITE + case ast.Token_NOT: + return p.kindN(n+1) == ast.Token_DEFERRABLE + } + return false +} + +// parseVariableResetStmt is gram.y's VariableResetStmt: RESET reset_rest. +func (p *parser) parseVariableResetStmt() *ast.Node { + p.expect(ast.Token_RESET) + return &ast.Node{Node: &ast.Node_VariableSetStmt{VariableSetStmt: p.parseResetRest()}} +} + +// parseResetRest is gram.y's reset_rest. +func (p *parser) parseResetRest() *ast.VariableSetStmt { + switch p.kind() { + case ast.Token_TIME: + if p.kindN(1) == ast.Token_ZONE { + p.next() + p.next() + return &ast.VariableSetStmt{Kind: ast.VariableSetKind_VAR_RESET, Name: "timezone"} + } + case ast.Token_TRANSACTION: + if p.kindN(1) == ast.Token_ISOLATION { + p.next() + p.next() + p.expect(ast.Token_LEVEL) + return &ast.VariableSetStmt{Kind: ast.VariableSetKind_VAR_RESET, Name: "transaction_isolation"} + } + case ast.Token_SESSION: + if p.kindN(1) == ast.Token_AUTHORIZATION { + p.next() + p.next() + return &ast.VariableSetStmt{Kind: ast.VariableSetKind_VAR_RESET, Name: "session_authorization"} + } + case ast.Token_ALL: + p.next() + return &ast.VariableSetStmt{Kind: ast.VariableSetKind_VAR_RESET_ALL} + } + // generic_reset: var_name + return &ast.VariableSetStmt{Kind: ast.VariableSetKind_VAR_RESET, Name: p.parseVarName()} +} + +// parseSetResetClause is gram.y's SetResetClause (SET or RESET without +// LOCAL, used by ALTER ... SET). +func (p *parser) parseSetResetClause() *ast.VariableSetStmt { + if p.have(ast.Token_SET) { + return p.parseSetRest() + } + if p.kind() == ast.Token_RESET { + p.next() + return p.parseResetRest() + } + p.syntaxErrorAt() + return nil +} + +// parseFunctionSetResetClause is gram.y's FunctionSetResetClause. +func (p *parser) parseFunctionSetResetClause() *ast.VariableSetStmt { + if p.have(ast.Token_SET) { + return p.parseSetRestMore() + } + if p.kind() == ast.Token_RESET { + p.next() + return p.parseResetRest() + } + p.syntaxErrorAt() + return nil +} + +// parseVariableShowStmt is gram.y's VariableShowStmt. +func (p *parser) parseVariableShowStmt() *ast.Node { + p.expect(ast.Token_SHOW) + n := &ast.VariableShowStmt{} + switch p.kind() { + case ast.Token_TIME: + if p.kindN(1) == ast.Token_ZONE { + p.next() + p.next() + n.Name = "timezone" + return nVariableShowStmt(n) + } + case ast.Token_TRANSACTION: + if p.kindN(1) == ast.Token_ISOLATION { + p.next() + p.next() + p.expect(ast.Token_LEVEL) + n.Name = "transaction_isolation" + return nVariableShowStmt(n) + } + case ast.Token_SESSION: + if p.kindN(1) == ast.Token_AUTHORIZATION { + p.next() + p.next() + n.Name = "session_authorization" + return nVariableShowStmt(n) + } + case ast.Token_ALL: + p.next() + n.Name = "all" + return nVariableShowStmt(n) + } + n.Name = p.parseVarName() + return nVariableShowStmt(n) +} + +// parseConstraintsSetStmt is gram.y's ConstraintsSetStmt: +// +// SET CONSTRAINTS constraints_set_list constraints_set_mode +// +// The caller has already consumed SET. +func (p *parser) parseConstraintsSetStmt() *ast.Node { + p.expect(ast.Token_CONSTRAINTS) + n := &ast.ConstraintsSetStmt{} + // constraints_set_list: ALL | qualified_name_list + if !p.have(ast.Token_ALL) { + n.Constraints = p.parseQualifiedNameList() + } + // constraints_set_mode: DEFERRED | IMMEDIATE + switch p.kind() { + case ast.Token_DEFERRED: + p.next() + n.Deferred = true + case ast.Token_IMMEDIATE: + p.next() + default: + p.syntaxErrorAt() + } + return &ast.Node{Node: &ast.Node_ConstraintsSetStmt{ConstraintsSetStmt: n}} +} + +// parseCheckPointStmt is gram.y's CheckPointStmt. +func (p *parser) parseCheckPointStmt() *ast.Node { + p.expect(ast.Token_CHECKPOINT) + return &ast.Node{Node: &ast.Node_CheckPointStmt{CheckPointStmt: &ast.CheckPointStmt{}}} +} + +// parseDiscardStmt is gram.y's DiscardStmt. +func (p *parser) parseDiscardStmt() *ast.Node { + p.expect(ast.Token_DISCARD) + n := &ast.DiscardStmt{} + switch p.kind() { + case ast.Token_ALL: + p.next() + n.Target = ast.DiscardMode_DISCARD_ALL + case ast.Token_TEMP, ast.Token_TEMPORARY: + p.next() + n.Target = ast.DiscardMode_DISCARD_TEMP + case ast.Token_PLANS: + p.next() + n.Target = ast.DiscardMode_DISCARD_PLANS + case ast.Token_SEQUENCES: + p.next() + n.Target = ast.DiscardMode_DISCARD_SEQUENCES + default: + p.syntaxErrorAt() + } + return &ast.Node{Node: &ast.Node_DiscardStmt{DiscardStmt: n}} +} + +// makeAConst is gram.y's makeAConst: wrap a NumericOnly value node in an +// A_Const at the given location. +func makeAConst(v *ast.Node, location int32) *ast.Node { + c := &ast.A_Const{Location: location} + switch w := v.Node.(type) { + case *ast.Node_Integer: + c.Val = &ast.A_Const_Ival{Ival: w.Integer} + case *ast.Node_Float: + c.Val = &ast.A_Const_Fval{Fval: w.Float} + } + return nAConst(c) +} + +// parseQualifiedNameList is gram.y's qualified_name_list. +func (p *parser) parseQualifiedNameList() []*ast.Node { + list := []*ast.Node{nRangeVar(p.parseQualifiedName())} + for p.have(ast.Token(',')) { + list = append(list, nRangeVar(p.parseQualifiedName())) + } + return list +} + +func nVariableShowStmt(n *ast.VariableShowStmt) *ast.Node { + return &ast.Node{Node: &ast.Node_VariableShowStmt{VariableShowStmt: n}} +} diff --git a/parser/testdata/deparse/postgres_regress/errors.metadata.json b/parser/testdata/deparse/postgres_regress/errors.metadata.json index 2fd3b8b..8516704 100644 --- a/parser/testdata/deparse/postgres_regress/errors.metadata.json +++ b/parser/testdata/deparse/postgres_regress/errors.metadata.json @@ -56,9 +56,6 @@ "056", "057", "058", - "059", - "060", - "061", "062", "063", "064", @@ -70,7 +67,6 @@ "070", "071", "072", - "073", "074", "075", "078", diff --git a/parser/testdata/deparse/postgres_regress/transactions.metadata.json b/parser/testdata/deparse/postgres_regress/transactions.metadata.json index df001e2..21f9ce6 100644 --- a/parser/testdata/deparse/postgres_regress/transactions.metadata.json +++ b/parser/testdata/deparse/postgres_regress/transactions.metadata.json @@ -414,10 +414,8 @@ "430", "431", "432", - "433", "434", "435", - "436", "437", "438", "439", diff --git a/parser/testdata/parse/libpg_query.metadata.json b/parser/testdata/parse/libpg_query.metadata.json index beb223c..fc68676 100644 --- a/parser/testdata/parse/libpg_query.metadata.json +++ b/parser/testdata/parse/libpg_query.metadata.json @@ -2,14 +2,6 @@ "todo": [ "009", "010", - "012", - "015", - "016", - "017", - "018", - "019", - "025", - "026", "034", "035" ] diff --git a/parser/testdata/parse/postgres_regress/aggregates.metadata.json b/parser/testdata/parse/postgres_regress/aggregates.metadata.json index 04c0775..9a44041 100644 --- a/parser/testdata/parse/postgres_regress/aggregates.metadata.json +++ b/parser/testdata/parse/postgres_regress/aggregates.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "001", "002", "004", "081", @@ -14,7 +13,6 @@ "129", "131", "133", - "134", "135", "137", "138", @@ -38,7 +36,6 @@ "170", "172", "173", - "174", "175", "177", "181", @@ -69,9 +66,7 @@ "212", "213", "214", - "216", "217", - "218", "219", "220", "221", @@ -86,23 +81,9 @@ "275", "283", "284", - "286", - "287", - "288", - "289", - "290", - "291", "292", "294", - "295", - "297", "298", - "300", - "301", - "302", - "303", - "304", - "305", "306", "307", "357", @@ -131,29 +112,19 @@ "401", "402", "403", - "404", - "405", "406", "407", "408", - "409", - "410", "411", - "412", - "413", "414", "415", "416", "417", "418", "419", - "420", - "421", "422", "424", "425", - "426", - "427", "428", "429", "430", @@ -161,14 +132,10 @@ "433", "434", "435", - "436", - "437", "438", "439", "440", "441", - "442", - "443", "444", "446", "447", @@ -178,46 +145,24 @@ "451", "453", "454", - "455", - "456", - "457", - "458", - "459", - "460", "461", "463", "465", - "471", "472", - "473", - "474", - "475", - "477", - "478", - "479", "480", "481", "482", "483", - "484", - "485", "486", "487", "488", - "489", "490", "491", - "492", - "493", - "494", "495", "496", "497", - "498", "499", "500", - "501", - "502", "507", "508", "509", diff --git a/parser/testdata/parse/postgres_regress/alter_generic.metadata.json b/parser/testdata/parse/postgres_regress/alter_generic.metadata.json index 28b5eba..1315245 100644 --- a/parser/testdata/parse/postgres_regress/alter_generic.metadata.json +++ b/parser/testdata/parse/postgres_regress/alter_generic.metadata.json @@ -1,19 +1,7 @@ { "todo": [ "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", "012", - "013", - "014", "015", "016", "017", @@ -32,7 +20,6 @@ "030", "031", "032", - "033", "034", "035", "036", @@ -49,8 +36,6 @@ "047", "048", "049", - "050", - "052", "053", "054", "055", @@ -58,7 +43,6 @@ "057", "058", "059", - "060", "061", "062", "063", @@ -67,7 +51,6 @@ "066", "067", "068", - "069", "071", "072", "073", @@ -80,26 +63,21 @@ "082", "083", "084", - "085", "086", "087", "088", "089", "090", "091", - "092", - "094", "095", "096", "097", "098", "099", - "100", "101", "102", "103", "104", - "105", "107", "108", "109", @@ -108,7 +86,6 @@ "112", "113", "114", - "115", "116", "117", "118", @@ -119,7 +96,6 @@ "123", "124", "125", - "126", "127", "128", "129", @@ -128,7 +104,6 @@ "132", "133", "134", - "135", "136", "137", "138", @@ -141,7 +116,6 @@ "145", "146", "147", - "148", "151", "152", "153", @@ -158,19 +132,13 @@ "164", "165", "166", - "167", "168", - "169", "170", - "171", "172", "173", "174", - "175", - "176", "177", "178", - "179", "180", "181", "182", @@ -238,7 +206,6 @@ "244", "245", "246", - "247", "248", "249", "250", @@ -247,7 +214,6 @@ "253", "254", "255", - "256", "257", "258", "259", @@ -257,8 +223,6 @@ "263", "264", "265", - "266", - "268", "269", "270", "271", @@ -266,7 +230,6 @@ "273", "274", "275", - "276", "277", "278", "279", @@ -275,8 +238,6 @@ "282", "283", "284", - "285", - "287", "288", "289", "290", @@ -284,7 +245,6 @@ "292", "293", "294", - "295", "296", "297", "298", @@ -293,7 +253,6 @@ "301", "302", "303", - "304", "306", "307", "308", @@ -315,9 +274,6 @@ "326", "327", "328", - "329", - "330", - "331", - "332" + "329" ] } diff --git a/parser/testdata/parse/postgres_regress/alter_operator.metadata.json b/parser/testdata/parse/postgres_regress/alter_operator.metadata.json index 51ee963..7bf089e 100644 --- a/parser/testdata/parse/postgres_regress/alter_operator.metadata.json +++ b/parser/testdata/parse/postgres_regress/alter_operator.metadata.json @@ -12,10 +12,7 @@ "019", "020", "021", - "022", - "023", "024", - "025", "026", "027", "028", @@ -40,7 +37,6 @@ "051", "052", "053", - "055", "056", "057", "058", diff --git a/parser/testdata/parse/postgres_regress/alter_table.metadata.json b/parser/testdata/parse/postgres_regress/alter_table.metadata.json index ab39fd4..07864d1 100644 --- a/parser/testdata/parse/postgres_regress/alter_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/alter_table.metadata.json @@ -1,9 +1,5 @@ { "todo": [ - "001", - "002", - "003", - "004", "005", "006", "007", @@ -75,12 +71,10 @@ "082", "083", "084", - "085", "086", "087", "088", "089", - "090", "091", "092", "093", @@ -117,8 +111,6 @@ "1031", "1033", "1035", - "1037", - "1038", "1039", "1040", "1041", @@ -178,7 +170,6 @@ "1097", "1098", "1099", - "110", "1100", "1101", "1102", @@ -200,7 +191,6 @@ "1117", "1118", "1119", - "112", "1120", "1121", "1122", @@ -240,7 +230,6 @@ "1154", "1155", "1156", - "1157", "1158", "1159", "116", @@ -288,7 +277,6 @@ "1204", "1208", "121", - "1210", "1211", "1212", "1213", @@ -379,18 +367,12 @@ "1300", "1301", "1302", - "1303", - "1304", "1305", "1306", - "1307", "1308", "1309", "131", - "1310", "1311", - "1312", - "1313", "1314", "1315", "1316", @@ -428,7 +410,6 @@ "1347", "1348", "1349", - "135", "1352", "1353", "1354", @@ -444,7 +425,6 @@ "1365", "1367", "1368", - "137", "1370", "1371", "1372", @@ -455,7 +435,6 @@ "1377", "1378", "1379", - "138", "1381", "1383", "1384", @@ -463,7 +442,6 @@ "1386", "1387", "1388", - "139", "1390", "1391", "1392", @@ -482,7 +460,6 @@ "1407", "1408", "1409", - "141", "1410", "1411", "1412", @@ -491,7 +468,6 @@ "1417", "1418", "1419", - "142", "1421", "1422", "1424", @@ -628,7 +604,6 @@ "1554", "1555", "1556", - "1557", "1558", "1559", "156", @@ -711,12 +686,8 @@ "164", "1640", "1642", - "1644", - "1645", "1646", - "1647", "1648", - "1649", "165", "1650", "1651", @@ -773,7 +744,6 @@ "233", "234", "235", - "236", "237", "238", "239", diff --git a/parser/testdata/parse/postgres_regress/arrays.metadata.json b/parser/testdata/parse/postgres_regress/arrays.metadata.json index 3364224..3b61f3d 100644 --- a/parser/testdata/parse/postgres_regress/arrays.metadata.json +++ b/parser/testdata/parse/postgres_regress/arrays.metadata.json @@ -11,11 +11,7 @@ "119", "155", "223", - "230", - "231", "234", - "238", - "239", "245", "300", "312", diff --git a/parser/testdata/parse/postgres_regress/bitmapops.metadata.json b/parser/testdata/parse/postgres_regress/bitmapops.metadata.json index c3d0ee8..c9906ad 100644 --- a/parser/testdata/parse/postgres_regress/bitmapops.metadata.json +++ b/parser/testdata/parse/postgres_regress/bitmapops.metadata.json @@ -3,9 +3,6 @@ "001", "003", "004", - "005", - "006", - "007", "010" ] } diff --git a/parser/testdata/parse/postgres_regress/box.metadata.json b/parser/testdata/parse/postgres_regress/box.metadata.json index ace92a1..c237578 100644 --- a/parser/testdata/parse/postgres_regress/box.metadata.json +++ b/parser/testdata/parse/postgres_regress/box.metadata.json @@ -3,7 +3,6 @@ "001", "030", "032", - "034", "036", "038", "040", @@ -16,26 +15,14 @@ "054", "056", "058", - "059", "060", "061", "065", - "066", - "067", - "068", "069", "070", - "071", - "072", - "073", - "087", - "088", "089", "090", "092", - "093", - "095", - "096", - "097" + "093" ] } diff --git a/parser/testdata/parse/postgres_regress/brin.metadata.json b/parser/testdata/parse/postgres_regress/brin.metadata.json index c7816ad..fe269bd 100644 --- a/parser/testdata/parse/postgres_regress/brin.metadata.json +++ b/parser/testdata/parse/postgres_regress/brin.metadata.json @@ -4,8 +4,6 @@ "004", "005", "007", - "008", - "009", "012", "022", "023", @@ -24,10 +22,8 @@ "050", "051", "052", - "054", "055", "057", - "058", "059", "060", "062", diff --git a/parser/testdata/parse/postgres_regress/brin_bloom.metadata.json b/parser/testdata/parse/postgres_regress/brin_bloom.metadata.json index 7440f0b..4c593f7 100644 --- a/parser/testdata/parse/postgres_regress/brin_bloom.metadata.json +++ b/parser/testdata/parse/postgres_regress/brin_bloom.metadata.json @@ -7,8 +7,6 @@ "007", "008", "010", - "011", - "012", "015", "025", "026", diff --git a/parser/testdata/parse/postgres_regress/brin_multi.metadata.json b/parser/testdata/parse/postgres_regress/brin_multi.metadata.json index 8ceb2ad..eaa1479 100644 --- a/parser/testdata/parse/postgres_regress/brin_multi.metadata.json +++ b/parser/testdata/parse/postgres_regress/brin_multi.metadata.json @@ -8,8 +8,6 @@ "008", "009", "011", - "012", - "013", "016", "020", "021", @@ -29,55 +27,38 @@ "052", "054", "055", - "056", "077", "099", - "100", "101", "103", - "104", "111", "119", - "120", "121", - "122", "125", "126", "127", "130", - "131", "132", "133", - "134", "135", "138", - "139", "140", "141", "142", - "143", "144", "147", - "148", "149", "150", "151", - "152", - "153", "154", "157", - "158", "159", "160", "161", - "162", "163", "166", - "167", "168", "169", - "170", - "171", - "172" + "170" ] } diff --git a/parser/testdata/parse/postgres_regress/btree_index.metadata.json b/parser/testdata/parse/postgres_regress/btree_index.metadata.json index 3eabe40..01a76b8 100644 --- a/parser/testdata/parse/postgres_regress/btree_index.metadata.json +++ b/parser/testdata/parse/postgres_regress/btree_index.metadata.json @@ -12,28 +12,17 @@ "014", "015", "016", - "029", - "030", - "031", "032", "034", "036", "038", "040", - "042", - "043", - "044", "045", "047", "049", - "050", - "051", "052", "054", "056", - "057", - "058", - "059", "060", "061", "063", diff --git a/parser/testdata/parse/postgres_regress/circle.metadata.json b/parser/testdata/parse/postgres_regress/circle.metadata.json index d7dfa22..4ba0f2e 100644 --- a/parser/testdata/parse/postgres_regress/circle.metadata.json +++ b/parser/testdata/parse/postgres_regress/circle.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "001", "002" ] } diff --git a/parser/testdata/parse/postgres_regress/cluster.metadata.json b/parser/testdata/parse/postgres_regress/cluster.metadata.json index 52b2ab1..e908812 100644 --- a/parser/testdata/parse/postgres_regress/cluster.metadata.json +++ b/parser/testdata/parse/postgres_regress/cluster.metadata.json @@ -11,7 +11,6 @@ "057", "059", "061", - "062", "063", "064", "065", @@ -21,10 +20,7 @@ "075", "076", "077", - "088", - "089", "090", - "091", "096", "098", "104", @@ -33,7 +29,6 @@ "115", "117", "119", - "120", "121", "122", "123", @@ -59,43 +54,30 @@ "144", "145", "146", - "147", "148", "149", - "150", "151", - "152", "153", "154", - "155", "156", - "157", "159", - "160", "161", "162", - "163", - "164", "165", - "167", - "168", "169", "171", "172", "173", - "174", "175", "177", "179", "180", "182", - "183", "184", "186", "188", "189", "191", - "192", "193", "195", "197", @@ -104,7 +86,6 @@ "200", "201", "202", - "203", - "204" + "203" ] } diff --git a/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json b/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json index 7083dc4..cd0974b 100644 --- a/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json @@ -1,8 +1,5 @@ { "todo": [ - "002", - "003", - "004", "005", "006", "007", @@ -33,24 +30,14 @@ "141", "142", "143", - "145", "146", "148", - "150", - "151", - "152", - "153", - "154", "155", "156", "157", - "158", - "159", "160", - "161", "162", "163", - "164", "165", "166", "167", @@ -68,7 +55,6 @@ "181", "182", "184", - "185", "186", "188", "189", @@ -86,18 +72,12 @@ "201", "204", "205", - "208", "209", - "210", - "212", "213", - "214", "216", "217", "219", - "221", "222", - "223", "225", "226", "228", @@ -115,8 +95,6 @@ "257", "258", "259", - "269", - "277", "281", "283", "286", @@ -133,13 +111,9 @@ "339", "342", "344", - "345", - "350", "357", "362", - "365", "366", - "367", "368", "374", "376", @@ -171,35 +145,22 @@ "450", "451", "452", - "456", - "457", "458", "459", "460", "462", - "463", "464", - "466", "467", "469", - "471", "472", - "474", "475", "477", - "479", "480", "482", - "483", - "484", - "485", "486", "487", "496", - "497", - "498", "499", - "500", "501" ] } diff --git a/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json b/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json index b3049c0..32172f1 100644 --- a/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json @@ -1,8 +1,5 @@ { "todo": [ - "002", - "003", - "004", "005", "006", "007", @@ -16,7 +13,6 @@ "028", "040", "062", - "070", "078", "079", "080", @@ -34,8 +30,6 @@ "149", "150", "151", - "153", - "154", "155", "156", "157", @@ -56,7 +50,6 @@ "174", "175", "177", - "178", "179", "181", "182", @@ -76,7 +69,6 @@ "198", "200", "201", - "202", "203" ] } diff --git a/parser/testdata/parse/postgres_regress/collate.metadata.json b/parser/testdata/parse/postgres_regress/collate.metadata.json index ad818c3..660d10e 100644 --- a/parser/testdata/parse/postgres_regress/collate.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.metadata.json @@ -1,7 +1,5 @@ { "todo": [ - "001", - "002", "003", "004", "005", @@ -24,17 +22,11 @@ "093", "094", "095", - "097", - "098", - "099", "100", "102", "105", "107", "109", - "110", - "111", - "112", "113", "114", "115", diff --git a/parser/testdata/parse/postgres_regress/collate.utf8.metadata.json b/parser/testdata/parse/postgres_regress/collate.utf8.metadata.json index 6381c8e..2f0f974 100644 --- a/parser/testdata/parse/postgres_regress/collate.utf8.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.utf8.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "002", "003", "004", "005", diff --git a/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json b/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json index 104d2d0..8b0dc93 100644 --- a/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json @@ -1,8 +1,5 @@ { "todo": [ - "002", - "003", - "004", "005", "006", "007", @@ -31,8 +28,6 @@ "120", "121", "122", - "124", - "125", "126", "127", "128", @@ -53,7 +48,6 @@ "145", "146", "148", - "149", "150", "152", "153", @@ -73,7 +67,6 @@ "169", "170", "171", - "172", "173" ] } diff --git a/parser/testdata/parse/postgres_regress/compression.metadata.json b/parser/testdata/parse/postgres_regress/compression.metadata.json index 1022e45..353bf12 100644 --- a/parser/testdata/parse/postgres_regress/compression.metadata.json +++ b/parser/testdata/parse/postgres_regress/compression.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "001", "002", "003", "005", @@ -27,10 +26,6 @@ "054", "055", "056", - "057", - "058", - "059", - "060", "061", "064", "065", diff --git a/parser/testdata/parse/postgres_regress/constraints.metadata.json b/parser/testdata/parse/postgres_regress/constraints.metadata.json index 6e9982a..6b12466 100644 --- a/parser/testdata/parse/postgres_regress/constraints.metadata.json +++ b/parser/testdata/parse/postgres_regress/constraints.metadata.json @@ -41,7 +41,6 @@ "164", "166", "169", - "170", "173", "175", "176", @@ -50,11 +49,8 @@ "186", "188", "189", - "190", "192", "193", - "194", - "196", "197", "198", "199", @@ -62,7 +58,6 @@ "202", "204", "206", - "207", "209", "210", "211", @@ -116,8 +111,6 @@ "288", "290", "291", - "292", - "293", "294", "295", "296", @@ -128,16 +121,10 @@ "301", "302", "303", - "304", - "305", - "306", "307", "308", - "309", "310", "311", - "312", - "313", "314", "315", "316", diff --git a/parser/testdata/parse/postgres_regress/conversion.metadata.json b/parser/testdata/parse/postgres_regress/conversion.metadata.json index cd9267f..bb855f0 100644 --- a/parser/testdata/parse/postgres_regress/conversion.metadata.json +++ b/parser/testdata/parse/postgres_regress/conversion.metadata.json @@ -2,8 +2,6 @@ "todo": [ "001", "003", - "004", - "005", "006", "007", "008", @@ -13,8 +11,6 @@ "012", "013", "014", - "015", - "016", "017", "018", "025", diff --git a/parser/testdata/parse/postgres_regress/create_am.metadata.json b/parser/testdata/parse/postgres_regress/create_am.metadata.json index 2b42ba9..a575521 100644 --- a/parser/testdata/parse/postgres_regress/create_am.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_am.metadata.json @@ -8,9 +8,6 @@ "006", "007", "008", - "009", - "010", - "011", "012", "014", "016", @@ -20,9 +17,6 @@ "021", "022", "023", - "024", - "025", - "026", "027", "028", "029", @@ -34,11 +28,8 @@ "041", "043", "044", - "045", "046", - "047", "048", - "049", "050", "051", "054", @@ -46,9 +37,7 @@ "058", "060", "063", - "064", "065", - "067", "068", "070", "071", @@ -61,19 +50,13 @@ "081", "083", "084", - "085", "086", "089", - "092", "093", - "096", "097", "099", - "102", "103", - "104", "105", - "106", "107", "108", "109", @@ -87,7 +70,6 @@ "119", "120", "121", - "122", "123", "124", "126", diff --git a/parser/testdata/parse/postgres_regress/create_function_sql.metadata.json b/parser/testdata/parse/postgres_regress/create_function_sql.metadata.json index e421d63..71aec70 100644 --- a/parser/testdata/parse/postgres_regress/create_function_sql.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_function_sql.metadata.json @@ -1,9 +1,6 @@ { "todo": [ - "001", - "002", "003", - "004", "005", "006", "007", @@ -26,12 +23,9 @@ "034", "036", "037", - "038", - "039", "040", "041", "042", - "043", "044", "045", "046", @@ -103,8 +97,6 @@ "150", "151", "152", - "153", - "154", - "155" + "153" ] } diff --git a/parser/testdata/parse/postgres_regress/create_index.metadata.json b/parser/testdata/parse/postgres_regress/create_index.metadata.json index bfc7fa2..58962e0 100644 --- a/parser/testdata/parse/postgres_regress/create_index.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_index.metadata.json @@ -33,12 +33,6 @@ "036", "037", "038", - "039", - "040", - "041", - "062", - "063", - "064", "065", "067", "069", @@ -60,27 +54,15 @@ "101", "103", "105", - "107", - "108", - "109", "110", - "112", - "113", - "114", "115", "117", - "122", - "123", - "124", "125", "126", "139", "140", "153", "154", - "162", - "163", - "164", "165", "167", "169", @@ -88,11 +70,9 @@ "171", "172", "173", - "174", "175", "176", "178", - "179", "180", "181", "182", @@ -185,9 +165,6 @@ "302", "303", "305", - "306", - "307", - "308", "315", "316", "324", @@ -196,12 +173,6 @@ "333", "340", "341", - "342", - "343", - "344", - "351", - "352", - "353", "354", "355", "357", @@ -366,8 +337,6 @@ "575", "577", "578", - "579", - "580", "581", "583", "585", @@ -382,17 +351,11 @@ "597", "598", "599", - "600", - "601", "602", - "603", "604", - "605", "606", "607", - "608", "609", - "610", "611" ] } diff --git a/parser/testdata/parse/postgres_regress/create_index_spgist.metadata.json b/parser/testdata/parse/postgres_regress/create_index_spgist.metadata.json index fd2f15d..081602a 100644 --- a/parser/testdata/parse/postgres_regress/create_index_spgist.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_index_spgist.metadata.json @@ -6,15 +6,9 @@ "006", "007", "011", - "012", - "013", - "014", "025", "026", "027", - "042", - "043", - "044", "045", "047", "049", @@ -44,10 +38,8 @@ "092", "094", "095", - "097", "098", "099", - "101", "103", "105", "107", @@ -63,9 +55,6 @@ "127", "129", "131", - "133", - "134", - "135", "136", "138", "140", @@ -97,9 +86,6 @@ "192", "194", "196", - "198", - "200", - "201", - "202" + "198" ] } diff --git a/parser/testdata/parse/postgres_regress/create_operator.metadata.json b/parser/testdata/parse/postgres_regress/create_operator.metadata.json index 4cc5552..1baa4ec 100644 --- a/parser/testdata/parse/postgres_regress/create_operator.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_operator.metadata.json @@ -13,11 +13,8 @@ "012", "017", "024", - "025", - "026", "027", "028", - "029", "030", "031", "032", @@ -34,39 +31,31 @@ "043", "044", "045", - "046", "047", "048", "049", "050", - "051", "052", "053", "054", - "055", "056", "057", "058", "059", - "060", "061", "062", "063", - "064", "065", "066", "067", "068", - "069", "070", "071", "072", - "073", "074", "075", "076", "077", - "078", "079", "080", "081", diff --git a/parser/testdata/parse/postgres_regress/create_procedure.metadata.json b/parser/testdata/parse/postgres_regress/create_procedure.metadata.json index 3d81b6a..dcd2379 100644 --- a/parser/testdata/parse/postgres_regress/create_procedure.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_procedure.metadata.json @@ -1,62 +1,30 @@ { "todo": [ - "001", - "002", "003", "004", "005", - "008", - "009", - "010", "012", "013", - "015", "017", "018", "019", - "020", "021", "022", - "023", "025", - "026", "027", "028", - "029", "030", "031", "032", - "033", - "034", - "035", - "036", "038", - "039", "040", - "041", - "042", "043", - "044", - "045", "046", - "047", - "048", "049", - "050", "051", - "053", "054", - "055", - "056", - "057", "058", - "059", - "060", - "061", - "062", - "063", "064", - "065", "066", "067", "068", @@ -68,8 +36,6 @@ "074", "075", "076", - "077", - "078", "079", "080", "081", @@ -81,16 +47,9 @@ "087", "088", "089", - "090", "091", "092", - "093", - "094", - "095", "096", - "097", - "098", - "099", "100", "101", "102", @@ -99,7 +58,6 @@ "105", "106", "107", - "108", - "109" + "108" ] } diff --git a/parser/testdata/parse/postgres_regress/create_role.metadata.json b/parser/testdata/parse/postgres_regress/create_role.metadata.json index 6835d4b..b8c9e3c 100644 --- a/parser/testdata/parse/postgres_regress/create_role.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_role.metadata.json @@ -1,81 +1,25 @@ { "todo": [ - "001", - "002", "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "021", - "022", - "023", - "024", - "025", - "026", - "027", - "028", - "029", - "030", - "031", "032", - "033", - "034", - "035", - "036", - "037", - "038", - "039", - "040", - "041", - "042", - "043", - "044", - "045", "046", - "047", - "048", - "049", "050", "051", - "052", "053", "054", - "055", - "056", "057", "058", "059", "060", - "061", "062", "063", "064", "065", "066", - "067", "068", - "069", - "070", "071", - "072", "073", "074", - "075", - "076", "077", "078", "079", @@ -86,56 +30,11 @@ "084", "085", "086", - "087", - "088", - "089", - "090", - "091", - "092", - "093", - "094", - "095", - "096", - "097", - "098", - "099", - "100", - "101", - "102", - "103", - "104", - "105", - "106", - "107", "108", - "109", - "110", - "111", - "112", - "113", - "114", - "115", - "116", - "117", - "118", - "119", - "120", - "121", - "122", - "123", - "124", - "125", "126", "127", "128", "129", - "130", - "131", - "132", - "133", - "134", - "135", - "136", - "137" + "130" ] } diff --git a/parser/testdata/parse/postgres_regress/create_schema.metadata.json b/parser/testdata/parse/postgres_regress/create_schema.metadata.json index 7249d3a..7e2bdfe 100644 --- a/parser/testdata/parse/postgres_regress/create_schema.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_schema.metadata.json @@ -1,12 +1,10 @@ { "todo": [ - "001", "002", "003", "004", "005", "006", - "007", "008", "009", "010", @@ -17,15 +15,11 @@ "015", "016", "017", - "018", "019", "020", - "021", "022", "023", "024", - "025", - "026", - "027" + "025" ] } diff --git a/parser/testdata/parse/postgres_regress/create_table_like.metadata.json b/parser/testdata/parse/postgres_regress/create_table_like.metadata.json index e5aa037..ddc093d 100644 --- a/parser/testdata/parse/postgres_regress/create_table_like.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_table_like.metadata.json @@ -82,8 +82,6 @@ "121", "122", "123", - "124", - "125", "126", "127", "128", diff --git a/parser/testdata/parse/postgres_regress/create_view.metadata.json b/parser/testdata/parse/postgres_regress/create_view.metadata.json index 4ef138c..ecb6b28 100644 --- a/parser/testdata/parse/postgres_regress/create_view.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_view.metadata.json @@ -26,7 +26,6 @@ "029", "030", "031", - "032", "033", "034", "035", @@ -53,8 +52,6 @@ "056", "057", "058", - "061", - "062", "063", "064", "065", @@ -200,8 +197,6 @@ "297", "299", "300", - "301", - "305", "306", "307" ] diff --git a/parser/testdata/parse/postgres_regress/database.metadata.json b/parser/testdata/parse/postgres_regress/database.metadata.json index 5741e52..66af5a3 100644 --- a/parser/testdata/parse/postgres_regress/database.metadata.json +++ b/parser/testdata/parse/postgres_regress/database.metadata.json @@ -8,12 +8,8 @@ "006", "008", "009", - "010", - "011", "012", "013", - "014", - "015", - "016" + "014" ] } diff --git a/parser/testdata/parse/postgres_regress/date.metadata.json b/parser/testdata/parse/postgres_regress/date.metadata.json index 22d9859..f23fe5c 100644 --- a/parser/testdata/parse/postgres_regress/date.metadata.json +++ b/parser/testdata/parse/postgres_regress/date.metadata.json @@ -1,10 +1,5 @@ { "todo": [ - "001", - "022", - "023", - "068", - "113", - "167" + "001" ] } diff --git a/parser/testdata/parse/postgres_regress/dependency.metadata.json b/parser/testdata/parse/postgres_regress/dependency.metadata.json index cfdb638..b82a2fe 100644 --- a/parser/testdata/parse/postgres_regress/dependency.metadata.json +++ b/parser/testdata/parse/postgres_regress/dependency.metadata.json @@ -1,30 +1,14 @@ { "todo": [ - "001", - "002", - "003", - "004", "005", "006", "007", - "008", - "009", "010", - "011", "012", - "013", "014", - "015", "016", - "017", "018", - "019", "020", - "021", - "022", - "023", - "024", - "025", "026", "027", "028", @@ -32,15 +16,11 @@ "030", "031", "032", - "033", "034", "035", - "036", "037", "038", "039", - "040", - "041", "042", "043", "044", @@ -51,14 +31,8 @@ "049", "050", "051", - "053", "054", - "056", "057", - "058", - "059", - "060", - "061", - "062" + "060" ] } diff --git a/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json b/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json index 3b3c7f2..bac7d61 100644 --- a/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json +++ b/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json @@ -20,7 +20,6 @@ "018", "019", "020", - "021", "022", "023", "024", @@ -33,18 +32,6 @@ "031", "032", "033", - "034", - "035", - "036", - "037", - "038", - "039", - "040", - "041", - "042", - "043", - "044", - "045", "046", "047", "048", diff --git a/parser/testdata/parse/postgres_regress/enum.metadata.json b/parser/testdata/parse/postgres_regress/enum.metadata.json index 4e66b7b..c78b749 100644 --- a/parser/testdata/parse/postgres_regress/enum.metadata.json +++ b/parser/testdata/parse/postgres_regress/enum.metadata.json @@ -44,14 +44,10 @@ "055", "056", "058", - "073", - "074", "075", "085", "086", "088", - "089", - "090", "091", "095", "109", diff --git a/parser/testdata/parse/postgres_regress/equivclass.metadata.json b/parser/testdata/parse/postgres_regress/equivclass.metadata.json index 364fcc5..4022f33 100644 --- a/parser/testdata/parse/postgres_regress/equivclass.metadata.json +++ b/parser/testdata/parse/postgres_regress/equivclass.metadata.json @@ -32,8 +32,6 @@ "030", "031", "032", - "033", - "034", "035", "036", "037", @@ -50,30 +48,18 @@ "048", "049", "050", - "051", - "052", "053", - "054", - "055", "056", "057", - "058", - "059", "060", - "061", - "062", "063", "064", - "065", "066", "067", "068", - "069", "070", - "071", "072", "073", - "074", "075", "076", "077", diff --git a/parser/testdata/parse/postgres_regress/errors.metadata.json b/parser/testdata/parse/postgres_regress/errors.metadata.json index f71830c..fe7663f 100644 --- a/parser/testdata/parse/postgres_regress/errors.metadata.json +++ b/parser/testdata/parse/postgres_regress/errors.metadata.json @@ -46,10 +46,6 @@ "056", "057", "058", - "059", - "060", - "061", - "073", "074", "075", "078", diff --git a/parser/testdata/parse/postgres_regress/event_trigger.metadata.json b/parser/testdata/parse/postgres_regress/event_trigger.metadata.json index 4bca649..bfff1b8 100644 --- a/parser/testdata/parse/postgres_regress/event_trigger.metadata.json +++ b/parser/testdata/parse/postgres_regress/event_trigger.metadata.json @@ -18,24 +18,18 @@ "017", "018", "019", - "020", - "021", "022", - "023", "024", "025", "026", - "027", "028", "029", "030", "031", "032", - "033", "034", "035", "037", - "038", "039", "040", "041", @@ -48,21 +42,15 @@ "048", "049", "050", - "051", "052", "053", "054", "055", - "056", "057", "058", "059", "060", - "061", - "062", - "063", "064", - "065", "066", "067", "068", @@ -72,7 +60,6 @@ "072", "073", "074", - "075", "076", "078", "079", @@ -84,7 +71,6 @@ "086", "088", "090", - "092", "093", "094", "095", @@ -132,11 +118,8 @@ "139", "140", "141", - "142", "143", - "144", "145", - "146", "147", "148", "149", @@ -167,7 +150,6 @@ "174", "175", "176", - "177", "178", "179", "180", @@ -197,7 +179,6 @@ "204", "205", "206", - "207", "208", "209", "210", @@ -214,11 +195,9 @@ "222", "223", "224", - "225", "226", "227", "228", - "229", "230" ] } diff --git a/parser/testdata/parse/postgres_regress/explain.metadata.json b/parser/testdata/parse/postgres_regress/explain.metadata.json index 83150dd..88f0d8c 100644 --- a/parser/testdata/parse/postgres_regress/explain.metadata.json +++ b/parser/testdata/parse/postgres_regress/explain.metadata.json @@ -2,12 +2,7 @@ "todo": [ "001", "002", - "003", - "004", - "013", - "015", "016", - "017", "020", "029", "030", @@ -16,13 +11,8 @@ "033", "035", "036", - "037", - "038", - "039", - "040", "042", "043", - "044", - "046" + "044" ] } diff --git a/parser/testdata/parse/postgres_regress/expressions.metadata.json b/parser/testdata/parse/postgres_regress/expressions.metadata.json index ded3915..c5745b0 100644 --- a/parser/testdata/parse/postgres_regress/expressions.metadata.json +++ b/parser/testdata/parse/postgres_regress/expressions.metadata.json @@ -1,8 +1,5 @@ { "todo": [ - "015", - "017", - "019", "020", "021", "022", diff --git a/parser/testdata/parse/postgres_regress/fast_default.metadata.json b/parser/testdata/parse/postgres_regress/fast_default.metadata.json index 306dbf3..6bdb1cc 100644 --- a/parser/testdata/parse/postgres_regress/fast_default.metadata.json +++ b/parser/testdata/parse/postgres_regress/fast_default.metadata.json @@ -1,7 +1,5 @@ { "todo": [ - "001", - "002", "003", "005", "006", @@ -133,8 +131,6 @@ "233", "235", "236", - "238", - "240", "242", "243", "244", @@ -157,7 +153,6 @@ "262", "263", "264", - "265", "266", "268" ] diff --git a/parser/testdata/parse/postgres_regress/float8.metadata.json b/parser/testdata/parse/postgres_regress/float8.metadata.json index c2c1ff6..e0ffb1c 100644 --- a/parser/testdata/parse/postgres_regress/float8.metadata.json +++ b/parser/testdata/parse/postgres_regress/float8.metadata.json @@ -1,9 +1,6 @@ { "todo": [ "001", - "057", - "132", - "134", "139", "159", "160", diff --git a/parser/testdata/parse/postgres_regress/foreign_data.metadata.json b/parser/testdata/parse/postgres_regress/foreign_data.metadata.json index feded6b..23b1a19 100644 --- a/parser/testdata/parse/postgres_regress/foreign_data.metadata.json +++ b/parser/testdata/parse/postgres_regress/foreign_data.metadata.json @@ -1,16 +1,6 @@ { "todo": [ "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", "012", "013", "014", @@ -23,9 +13,7 @@ "024", "025", "026", - "027", "028", - "029", "030", "031", "032", @@ -43,16 +31,11 @@ "044", "045", "046", - "047", "048", - "049", "050", "051", "052", - "053", - "054", "055", - "056", "057", "058", "059", @@ -61,11 +44,7 @@ "062", "063", "064", - "065", - "066", "067", - "068", - "069", "070", "071", "072", @@ -73,9 +52,7 @@ "074", "075", "076", - "077", "078", - "079", "080", "081", "082", @@ -90,22 +67,14 @@ "091", "092", "093", - "094", "095", - "096", "097", - "098", "099", - "100", "101", "102", - "103", "104", - "105", "106", - "107", "108", - "109", "110", "111", "112", @@ -114,42 +83,27 @@ "115", "116", "117", - "118", "119", "120", - "121", "122", "123", - "124", "125", "126", - "127", "128", "129", - "130", "131", - "132", "133", - "134", "135", - "136", "137", - "138", "139", - "140", - "141", "142", "143", "144", "145", - "146", "147", "148", - "149", "150", - "151", "152", - "153", "154", "155", "156", @@ -162,27 +116,21 @@ "163", "164", "165", - "166", "167", "168", "169", "170", - "171", "172", - "173", "174", "175", - "176", "177", "178", "179", "180", "181", - "182", "183", "184", "185", - "186", "187", "188", "189", @@ -190,11 +138,8 @@ "191", "192", "193", - "194", "195", - "196", "197", - "198", "199", "200", "201", @@ -309,10 +254,7 @@ "311", "312", "313", - "324", "328", - "329", - "331", "338", "346", "348", @@ -321,7 +263,6 @@ "351", "352", "353", - "354", "355", "356", "357", @@ -335,10 +276,8 @@ "365", "366", "367", - "368", "369", "370", - "371", "372", "373", "374", @@ -353,31 +292,23 @@ "383", "384", "385", - "386", "387", "388", - "389", "390", "391", "392", "393", "394", "395", - "396", "397", "398", - "399", "400", "401", "402", "403", - "404", "405", "406", "407", - "408", - "409", - "410", "411", "412", "413", @@ -479,19 +410,12 @@ "511", "512", "513", - "514", "515", "516", "517", "518", - "519", - "520", - "521", "522", - "523", - "524", "525", - "526", - "527" + "526" ] } diff --git a/parser/testdata/parse/postgres_regress/foreign_key.metadata.json b/parser/testdata/parse/postgres_regress/foreign_key.metadata.json index 2acf27c..9809870 100644 --- a/parser/testdata/parse/postgres_regress/foreign_key.metadata.json +++ b/parser/testdata/parse/postgres_regress/foreign_key.metadata.json @@ -84,7 +84,6 @@ "1110", "1113", "1114", - "1115", "1116", "1117", "1118", @@ -99,12 +98,7 @@ "1131", "1132", "1133", - "1134", "1135", - "1136", - "1137", - "1138", - "1139", "1140", "1141", "1142", @@ -112,7 +106,6 @@ "1144", "1145", "1153", - "1154", "131", "132", "133", @@ -208,7 +201,6 @@ "342", "343", "345", - "346", "349", "350", "351", @@ -216,14 +208,11 @@ "353", "356", "357", - "358", "360", "361", "362", "363", "364", - "365", - "367", "369", "370", "371", @@ -408,19 +397,13 @@ "684", "685", "686", - "687", "688", - "689", "690", "691", "693", - "694", - "696", "697", "698", - "699", "700", - "701", "702", "703", "704", @@ -462,14 +445,10 @@ "756", "757", "758", - "759", "762", "763", - "764", "767", "768", - "769", - "770", "771", "772", "773", @@ -496,8 +475,6 @@ "827", "828", "829", - "830", - "831", "832", "833", "834", @@ -520,8 +497,6 @@ "854", "855", "856", - "857", - "858", "859", "860", "861", @@ -542,21 +517,16 @@ "876", "878", "880", - "881", - "882", "883", "884", "885", "886", "887", "889", - "890", "892", "893", - "894", "897", "898", - "899", "902", "903", "904", @@ -600,8 +570,6 @@ "958", "959", "960", - "961", - "962", "963", "964", "965", diff --git a/parser/testdata/parse/postgres_regress/geometry.metadata.json b/parser/testdata/parse/postgres_regress/geometry.metadata.json index 8ab1b78..3e9af09 100644 --- a/parser/testdata/parse/postgres_regress/geometry.metadata.json +++ b/parser/testdata/parse/postgres_regress/geometry.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "001", "151", "153", "155", diff --git a/parser/testdata/parse/postgres_regress/gin.metadata.json b/parser/testdata/parse/postgres_regress/gin.metadata.json index 73da878..dd545a4 100644 --- a/parser/testdata/parse/postgres_regress/gin.metadata.json +++ b/parser/testdata/parse/postgres_regress/gin.metadata.json @@ -7,28 +7,19 @@ "011", "015", "016", - "018", "019", - "021", "022", "023", - "025", "026", "029", "031", "032", "033", - "035", - "036", "039", - "040", - "041", "042", "044", "046", "049", - "053", - "054", "055", "056", "057", diff --git a/parser/testdata/parse/postgres_regress/gist.metadata.json b/parser/testdata/parse/postgres_regress/gist.metadata.json index c8772f4..d54b82a 100644 --- a/parser/testdata/parse/postgres_regress/gist.metadata.json +++ b/parser/testdata/parse/postgres_regress/gist.metadata.json @@ -14,9 +14,6 @@ "016", "017", "019", - "020", - "021", - "022", "023", "024", "026", @@ -37,9 +34,6 @@ "050", "052", "054", - "055", - "056", - "057", "058", "059", "060", diff --git a/parser/testdata/parse/postgres_regress/groupingsets.metadata.json b/parser/testdata/parse/postgres_regress/groupingsets.metadata.json index e4385ee..a6f1862 100644 --- a/parser/testdata/parse/postgres_regress/groupingsets.metadata.json +++ b/parser/testdata/parse/postgres_regress/groupingsets.metadata.json @@ -7,7 +7,6 @@ "007", "009", "010", - "011", "037", "043", "045", @@ -17,7 +16,6 @@ "065", "071", "073", - "084", "088", "090", "091", @@ -33,39 +31,22 @@ "113", "115", "116", - "117", "118", - "120", "121", "123", - "128", - "129", - "130", "131", "132", - "133", "134", "137", "138", "139", - "142", - "143", "145", "146", "147", - "149", - "150", - "151", - "152", "153", "154", - "155", - "156", "157", "158", - "159", - "160", - "161", "163", "164", "169", diff --git a/parser/testdata/parse/postgres_regress/guc.metadata.json b/parser/testdata/parse/postgres_regress/guc.metadata.json index 3370404..0acca2b 100644 --- a/parser/testdata/parse/postgres_regress/guc.metadata.json +++ b/parser/testdata/parse/postgres_regress/guc.metadata.json @@ -1,151 +1,41 @@ { "todo": [ - "001", - "002", - "003", - "004", - "005", - "007", - "008", - "009", - "010", "012", - "013", - "014", - "015", - "016", "018", - "019", - "020", "022", - "023", - "024", - "025", - "026", "028", - "029", - "030", "032", - "033", - "034", - "035", "037", - "038", - "039", - "040", - "041", "043", - "044", "046", - "047", - "048", - "049", "051", - "052", - "053", - "054", - "055", "057", - "058", - "059", "061", - "062", - "063", "065", - "066", - "067", "069", - "070", - "071", "073", - "074", - "075", - "076", - "077", "079", - "080", - "081", "083", - "084", - "085", "087", - "088", - "089", "091", - "092", - "093", - "094", - "095", "097", - "098", - "099", "101", - "102", - "103", "105", - "106", - "107", - "108", - "109", - "110", - "111", "113", - "114", - "115", - "117", - "118", - "120", - "121", - "123", - "124", - "125", - "126", - "127", - "128", - "129", - "130", - "131", - "132", - "133", - "134", - "135", - "136", - "137", "138", - "139", - "140", "141", - "143", "147", - "148", "149", - "150", - "151", - "155", - "158", - "162", - "165", - "166", - "168", "170", - "172", - "173", "174", "176", "178", "180", "182", - "184", "185", - "187", "188", - "195", "199", - "200", "201", - "203", - "204", - "205", "208", "214" ] diff --git a/parser/testdata/parse/postgres_regress/hash_index.metadata.json b/parser/testdata/parse/postgres_regress/hash_index.metadata.json index 76c5d2c2..954567f 100644 --- a/parser/testdata/parse/postgres_regress/hash_index.metadata.json +++ b/parser/testdata/parse/postgres_regress/hash_index.metadata.json @@ -18,8 +18,6 @@ "044", "046", "048", - "049", - "050", "056", "059", "060", @@ -29,17 +27,14 @@ "064", "066", "068", - "069", "070", "071", "073", "075", - "077", "078", "079", "081", "083", - "085", "086", "087", "088", diff --git a/parser/testdata/parse/postgres_regress/horology.metadata.json b/parser/testdata/parse/postgres_regress/horology.metadata.json index badbb72..95b6627 100644 --- a/parser/testdata/parse/postgres_regress/horology.metadata.json +++ b/parser/testdata/parse/postgres_regress/horology.metadata.json @@ -1,38 +1,10 @@ { "todo": [ - "001", - "002", - "018", - "020", - "033", - "036", - "076", - "147", - "152", "193", "201", - "209", - "215", "216", "218", "220", - "222", - "224", - "225", - "227", - "229", - "230", - "232", - "233", - "237", - "238", - "240", - "241", - "243", - "378", - "379", - "380", - "386", - "388" + "222" ] } diff --git a/parser/testdata/parse/postgres_regress/identity.metadata.json b/parser/testdata/parse/postgres_regress/identity.metadata.json index 0ab7666..c77dd68 100644 --- a/parser/testdata/parse/postgres_regress/identity.metadata.json +++ b/parser/testdata/parse/postgres_regress/identity.metadata.json @@ -59,13 +59,9 @@ "139", "140", "141", - "142", "143", "144", - "145", - "148", "149", - "150", "151", "152", "153", diff --git a/parser/testdata/parse/postgres_regress/incremental_sort.metadata.json b/parser/testdata/parse/postgres_regress/incremental_sort.metadata.json index b6e4b5d..e798600 100644 --- a/parser/testdata/parse/postgres_regress/incremental_sort.metadata.json +++ b/parser/testdata/parse/postgres_regress/incremental_sort.metadata.json @@ -1,9 +1,7 @@ { "todo": [ "001", - "002", "003", - "004", "005", "006", "007", @@ -21,10 +19,6 @@ "033", "035", "037", - "038", - "039", - "040", - "041", "042", "044", "050", @@ -40,29 +34,14 @@ "070", "072", "075", - "076", - "077", - "078", - "079", - "080", "081", "083", "084", - "085", "086", - "087", "088", - "089", "090", "091", "092", - "093", - "094", - "095", - "096", - "097", - "098", - "099", "100", "101", "102", @@ -72,13 +51,6 @@ "106", "107", "108", - "109", - "110", - "111", - "112", - "113", - "114", - "115", "116", "117", "118", diff --git a/parser/testdata/parse/postgres_regress/index_including.metadata.json b/parser/testdata/parse/postgres_regress/index_including.metadata.json index ed15e77..0f614d2 100644 --- a/parser/testdata/parse/postgres_regress/index_including.metadata.json +++ b/parser/testdata/parse/postgres_regress/index_including.metadata.json @@ -21,10 +21,8 @@ "032", "033", "039", - "041", "042", "044", - "045", "046", "050", "051", @@ -77,9 +75,7 @@ "127", "128", "130", - "131", "132", - "134", "135" ] } diff --git a/parser/testdata/parse/postgres_regress/index_including_gist.metadata.json b/parser/testdata/parse/postgres_regress/index_including_gist.metadata.json index 4c3660c..45ca302 100644 --- a/parser/testdata/parse/postgres_regress/index_including_gist.metadata.json +++ b/parser/testdata/parse/postgres_regress/index_including_gist.metadata.json @@ -2,15 +2,11 @@ "todo": [ "001", "003", - "006", "007", - "008", "009", "010", "011", - "015", "016", - "017", "018", "019", "021", diff --git a/parser/testdata/parse/postgres_regress/indexing.metadata.json b/parser/testdata/parse/postgres_regress/indexing.metadata.json index a081d9a..f2d4967 100644 --- a/parser/testdata/parse/postgres_regress/indexing.metadata.json +++ b/parser/testdata/parse/postgres_regress/indexing.metadata.json @@ -390,7 +390,6 @@ "440", "441", "442", - "443", "444", "445", "446", @@ -400,7 +399,6 @@ "450", "451", "452", - "453", "454", "455", "456", @@ -418,8 +416,6 @@ "468", "469", "470", - "471", - "472", "473", "474", "475", @@ -433,7 +429,6 @@ "483", "484", "485", - "486", "487", "488", "489", diff --git a/parser/testdata/parse/postgres_regress/indirect_toast.metadata.json b/parser/testdata/parse/postgres_regress/indirect_toast.metadata.json index 0eab3e4..4a01470 100644 --- a/parser/testdata/parse/postgres_regress/indirect_toast.metadata.json +++ b/parser/testdata/parse/postgres_regress/indirect_toast.metadata.json @@ -1,14 +1,12 @@ { "todo": [ "001", - "002", "003", "014", "016", "017", "024", "026", - "027", - "028" + "027" ] } diff --git a/parser/testdata/parse/postgres_regress/inet.metadata.json b/parser/testdata/parse/postgres_regress/inet.metadata.json index 70342f0..e73ecde 100644 --- a/parser/testdata/parse/postgres_regress/inet.metadata.json +++ b/parser/testdata/parse/postgres_regress/inet.metadata.json @@ -3,22 +3,16 @@ "001", "002", "036", - "037", "038", "040", "042", "044", - "046", "047", "048", - "049", "061", - "063", "064", "065", - "066", "078", - "080", "081" ] } diff --git a/parser/testdata/parse/postgres_regress/inherit.metadata.json b/parser/testdata/parse/postgres_regress/inherit.metadata.json index 3a1d18a..d4e5974 100644 --- a/parser/testdata/parse/postgres_regress/inherit.metadata.json +++ b/parser/testdata/parse/postgres_regress/inherit.metadata.json @@ -219,25 +219,17 @@ "366", "367", "368", - "375", "376", "378", - "380", - "381", - "382", "383", "385", - "387", - "388", "389", "391", "392", "393", "394", "395", - "396", "397", - "398", "399", "400", "401", @@ -245,9 +237,6 @@ "405", "406", "407", - "408", - "409", - "410", "411", "412", "413", @@ -255,9 +244,6 @@ "415", "416", "417", - "419", - "420", - "421", "422", "423", "424", @@ -273,22 +259,14 @@ "443", "444", "450", - "451", - "452", "453", "454", - "455", "456", - "457", "458", - "459", "460", - "461", "462", - "463", "464", "465", - "466", "467", "468", "469", @@ -363,8 +341,6 @@ "546", "547", "548", - "549", - "550", "551", "552", "553", @@ -385,17 +361,13 @@ "568", "569", "570", - "571", - "572", "573", "574", "575", "576", "577", "578", - "579", "580", - "581", "582", "583", "584", @@ -428,21 +400,15 @@ "611", "612", "614", - "615", "616", "617", - "618", "619", "620", - "621", "622", "623", - "624", "625", "626", - "627", "628", - "629", "630", "631", "632", diff --git a/parser/testdata/parse/postgres_regress/insert.metadata.json b/parser/testdata/parse/postgres_regress/insert.metadata.json index ff299cd..d2db2b2 100644 --- a/parser/testdata/parse/postgres_regress/insert.metadata.json +++ b/parser/testdata/parse/postgres_regress/insert.metadata.json @@ -132,17 +132,11 @@ "285", "286", "287", - "288", "289", "290", - "291", - "293", "294", - "295", - "298", "299", "300", - "301", "302", "303", "304", @@ -160,15 +154,11 @@ "335", "336", "339", - "340", "341", "342", "343", - "344", - "346", "347", "348", - "349", "350", "351", "352", diff --git a/parser/testdata/parse/postgres_regress/interval.metadata.json b/parser/testdata/parse/postgres_regress/interval.metadata.json index de66215..57de260 100644 --- a/parser/testdata/parse/postgres_regress/interval.metadata.json +++ b/parser/testdata/parse/postgres_regress/interval.metadata.json @@ -1,31 +1,12 @@ { "todo": [ - "001", - "002", "013", "049", "057", - "058", "059", - "061", "063", "064", "070", - "071", - "072", - "096", - "097", - "163", - "165", - "168", - "172", - "174", - "176", - "186", - "339", - "341", - "343", - "345", "376", "379" ] diff --git a/parser/testdata/parse/postgres_regress/join.metadata.json b/parser/testdata/parse/postgres_regress/join.metadata.json index 738ae66..3277c63 100644 --- a/parser/testdata/parse/postgres_regress/join.metadata.json +++ b/parser/testdata/parse/postgres_regress/join.metadata.json @@ -11,8 +11,6 @@ "090", "096", "114", - "115", - "116", "118", "119", "121", @@ -34,13 +32,7 @@ "141", "142", "144", - "146", - "147", - "148", "149", - "150", - "151", - "152", "153", "154", "155", @@ -52,32 +44,16 @@ "176", "185", "188", - "191", - "192", - "195", - "196", "197", "199", "200", - "201", - "202", "203", - "205", - "206", - "207", - "208", - "209", "210", - "212", - "213", - "214", "215", "217", "218", "220", - "221", "222", - "224", "225", "226", "227", @@ -94,9 +70,6 @@ "251", "255", "261", - "262", - "263", - "264", "265", "266", "268", @@ -105,8 +78,6 @@ "271", "272", "273", - "274", - "275", "276", "277", "282", @@ -190,11 +161,7 @@ "412", "414", "415", - "416", - "417", "418", - "420", - "421", "422", "424", "426", @@ -350,18 +317,12 @@ "672", "673", "674", - "675", - "676", - "677", "678", "679", "681", "682", "684", "686", - "688", - "689", - "690", "691", "692", "693", @@ -374,11 +335,7 @@ "700", "702", "703", - "704", - "705", "706", - "708", - "709", "710", "712", "713", diff --git a/parser/testdata/parse/postgres_regress/join_hash.metadata.json b/parser/testdata/parse/postgres_regress/join_hash.metadata.json index 047832d..2fa4658 100644 --- a/parser/testdata/parse/postgres_regress/join_hash.metadata.json +++ b/parser/testdata/parse/postgres_regress/join_hash.metadata.json @@ -1,9 +1,6 @@ { "todo": [ "001", - "002", - "003", - "004", "005", "006", "007", @@ -20,201 +17,92 @@ "021", "022", "023", - "024", - "025", - "026", "027", "030", "031", - "032", - "033", - "034", - "035", "036", "039", "040", - "041", - "042", - "043", - "044", "045", "048", "049", - "050", - "051", - "052", "053", "056", "057", - "058", - "059", - "060", - "061", "062", "065", "066", - "067", - "068", - "069", - "070", "071", "075", "076", - "077", - "078", - "079", "080", "083", "084", - "085", - "086", - "087", - "088", "089", "092", "093", - "094", - "095", - "096", - "097", "098", "101", "102", - "103", - "104", - "105", "106", "109", "110", - "111", - "112", - "113", - "114", "115", "118", "119", - "120", - "121", - "122", - "123", "124", "127", "128", - "129", - "130", - "131", - "132", "134", "135", "136", "137", "138", "139", - "140", - "141", - "142", - "143", - "144", - "145", - "146", - "147", - "148", - "149", "150", "153", "154", - "155", - "156", - "157", - "158", - "159", - "160", - "161", - "162", - "163", - "164", "165", "168", "169", - "170", - "171", - "172", - "173", - "174", - "175", - "176", - "177", - "178", - "179", "180", "183", "184", - "185", - "186", - "187", - "188", - "189", - "190", - "191", - "192", - "193", - "194", "195", "198", "199", - "200", "201", "203", "204", - "205", - "206", "207", "209", "210", - "211", "212", "214", "215", - "216", "217", "219", "220", - "221", - "222", "223", "225", "226", - "227", "228", "230", "231", - "232", - "233", - "234", - "235", "236", "239", "240", - "241", - "242", - "243", - "244", "245", "246", - "251", - "252", "254", "255", "256", - "257", - "258", "259", "260", "270", "272", "274", "275", - "276", "277", "279" ] diff --git a/parser/testdata/parse/postgres_regress/json.metadata.json b/parser/testdata/parse/postgres_regress/json.metadata.json index 941a883..6cd7b17 100644 --- a/parser/testdata/parse/postgres_regress/json.metadata.json +++ b/parser/testdata/parse/postgres_regress/json.metadata.json @@ -1,12 +1,8 @@ { "todo": [ - "036", - "039", "065", "068", "071", - "072", - "074", "076", "092", "212", diff --git a/parser/testdata/parse/postgres_regress/jsonb.metadata.json b/parser/testdata/parse/postgres_regress/jsonb.metadata.json index 56f4702..20cb0ec 100644 --- a/parser/testdata/parse/postgres_regress/jsonb.metadata.json +++ b/parser/testdata/parse/postgres_regress/jsonb.metadata.json @@ -1,13 +1,9 @@ { "todo": [ "001", - "036", - "039", "058", "059", "062", - "063", - "065", "067", "079", "266", @@ -37,35 +33,18 @@ "527", "528", "556", - "557", "570", "588", "600", - "604", - "608", - "610", - "611", - "614", - "615", - "616", "617", "618", "619", - "620", "623", "624", - "625", "645", - "657", "658", "683", "687", - "688", - "689", - "693", - "694", - "698", - "699", "905", "996", "997" diff --git a/parser/testdata/parse/postgres_regress/jsonb_jsonpath.metadata.json b/parser/testdata/parse/postgres_regress/jsonb_jsonpath.metadata.json index b848209..1a72ead 100644 --- a/parser/testdata/parse/postgres_regress/jsonb_jsonpath.metadata.json +++ b/parser/testdata/parse/postgres_regress/jsonb_jsonpath.metadata.json @@ -1,16 +1,8 @@ { "todo": [ "524", - "525", "527", "530", - "531", - "532", - "535", - "621", - "643", - "664", - "692", - "777" + "535" ] } diff --git a/parser/testdata/parse/postgres_regress/largeobject.metadata.json b/parser/testdata/parse/postgres_regress/largeobject.metadata.json index 41dc028..7e36ccd 100644 --- a/parser/testdata/parse/postgres_regress/largeobject.metadata.json +++ b/parser/testdata/parse/postgres_regress/largeobject.metadata.json @@ -1,12 +1,8 @@ { "todo": [ - "001", - "002", "004", - "005", "006", "007", - "008", "009", "011", "015", @@ -44,7 +40,6 @@ "119", "120", "122", - "123", - "124" + "123" ] } diff --git a/parser/testdata/parse/postgres_regress/lock.metadata.json b/parser/testdata/parse/postgres_regress/lock.metadata.json index ac56e94..b8f06cf 100644 --- a/parser/testdata/parse/postgres_regress/lock.metadata.json +++ b/parser/testdata/parse/postgres_regress/lock.metadata.json @@ -1,7 +1,5 @@ { "todo": [ - "001", - "002", "003", "004", "005", @@ -10,8 +8,6 @@ "008", "009", "010", - "011", - "012", "013", "014", "015", @@ -65,7 +61,6 @@ "069", "070", "071", - "072", "073", "074", "075", @@ -75,37 +70,27 @@ "079", "080", "081", - "082", "083", - "084", "085", "086", "087", - "088", "089", - "090", "091", "092", "094", - "095", "096", "097", - "098", "099", "100", "101", - "102", "103", - "104", "105", "106", "107", - "108", "109", "110", "111", "113", - "114", "115", "116", "117", @@ -119,8 +104,6 @@ "125", "126", "127", - "128", - "129", "130" ] } diff --git a/parser/testdata/parse/postgres_regress/maintain_every.metadata.json b/parser/testdata/parse/postgres_regress/maintain_every.metadata.json index 51a26a2..2831c80 100644 --- a/parser/testdata/parse/postgres_regress/maintain_every.metadata.json +++ b/parser/testdata/parse/postgres_regress/maintain_every.metadata.json @@ -1,18 +1,12 @@ { "todo": [ - "001", - "002", "003", "004", "005", "006", "007", "009", - "010", "011", - "012", - "014", - "015", - "016" + "014" ] } diff --git a/parser/testdata/parse/postgres_regress/matview.metadata.json b/parser/testdata/parse/postgres_regress/matview.metadata.json index 7dd6984..57af059 100644 --- a/parser/testdata/parse/postgres_regress/matview.metadata.json +++ b/parser/testdata/parse/postgres_regress/matview.metadata.json @@ -18,12 +18,9 @@ "023", "024", "025", - "026", "027", - "028", "032", "033", - "036", "037", "038", "039", @@ -91,43 +88,32 @@ "124", "125", "129", - "130", - "131", "132", "133", "134", "135", "136", - "137", "138", "139", "140", - "141", - "142", "143", "144", "145", "146", "147", - "148", "149", "150", "154", - "155", - "156", "157", "158", - "159", "160", "161", "162", "163", "164", "165", - "166", "167", "168", - "169", "170", "171", "172", diff --git a/parser/testdata/parse/postgres_regress/memoize.metadata.json b/parser/testdata/parse/postgres_regress/memoize.metadata.json index 760696c..ad03fb8 100644 --- a/parser/testdata/parse/postgres_regress/memoize.metadata.json +++ b/parser/testdata/parse/postgres_regress/memoize.metadata.json @@ -1,50 +1,27 @@ { "todo": [ "001", - "002", - "003", - "010", "011", "014", "015", "017", - "018", - "019", "021", "022", "024", - "025", "028", "029", "030", "031", "034", "037", - "038", "039", "040", "041", "044", "045", "046", - "048", "050", - "051", "052", - "054", - "055", - "056", - "057", - "058", - "059", - "060", - "061", - "062", - "063", - "064", - "066", - "067", - "068", - "069" + "064" ] } diff --git a/parser/testdata/parse/postgres_regress/merge.metadata.json b/parser/testdata/parse/postgres_regress/merge.metadata.json index 84257a7..d7ff4dc 100644 --- a/parser/testdata/parse/postgres_regress/merge.metadata.json +++ b/parser/testdata/parse/postgres_regress/merge.metadata.json @@ -1,8 +1,5 @@ { "todo": [ - "001", - "002", - "003", "004", "005", "006", @@ -14,16 +11,11 @@ "016", "017", "018", - "019", "020", "033", "035", - "036", - "038", "040", - "041", "043", - "044", "051", "053", "060", @@ -286,13 +278,9 @@ "557", "561", "562", - "563", "565", "567", "568", - "569", - "570", - "571", - "572" + "569" ] } diff --git a/parser/testdata/parse/postgres_regress/misc_functions.metadata.json b/parser/testdata/parse/postgres_regress/misc_functions.metadata.json index ce38c34..55a0628 100644 --- a/parser/testdata/parse/postgres_regress/misc_functions.metadata.json +++ b/parser/testdata/parse/postgres_regress/misc_functions.metadata.json @@ -1,15 +1,9 @@ { "todo": [ "023", - "048", "050", - "052", - "054", "055", - "056", - "083", "087", - "091", "092", "093", "094", @@ -18,9 +12,7 @@ "097", "098", "099", - "111", "113", - "115", "116", "119" ] diff --git a/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json b/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json index 2010ea2..40cae8f 100644 --- a/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json +++ b/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json @@ -6,28 +6,10 @@ "366", "372", "373", - "374", - "375", - "376", - "414", - "415", - "416", "455", "456", "480", "481", - "490", - "491", - "492", - "494", - "495", - "496", - "498", - "499", - "500", - "502", - "503", - "504", "505", "507", "510", @@ -50,10 +32,8 @@ "535", "536", "537", - "538", "539", "540", - "541", "542", "543", "544", @@ -61,8 +41,6 @@ "546", "547", "548", - "549", - "550", "551", "554", "555", @@ -79,8 +57,6 @@ "582", "583", "585", - "586", - "588", "589", "591", "593", diff --git a/parser/testdata/parse/postgres_regress/mvcc.metadata.json b/parser/testdata/parse/postgres_regress/mvcc.metadata.json index e17e032..9fe3dde 100644 --- a/parser/testdata/parse/postgres_regress/mvcc.metadata.json +++ b/parser/testdata/parse/postgres_regress/mvcc.metadata.json @@ -1,9 +1,6 @@ { "todo": [ "001", - "002", - "003", - "004", "005", "006", "009", diff --git a/parser/testdata/parse/postgres_regress/namespace.metadata.json b/parser/testdata/parse/postgres_regress/namespace.metadata.json index f0b87e1..8657686 100644 --- a/parser/testdata/parse/postgres_regress/namespace.metadata.json +++ b/parser/testdata/parse/postgres_regress/namespace.metadata.json @@ -1,26 +1,16 @@ { "todo": [ "002", - "003", "004", - "005", "006", "007", - "008", "009", - "010", "011", - "012", "013", - "014", "015", "022", - "024", - "025", "026", "027", - "029", - "030", "031", "032", "034", @@ -30,7 +20,6 @@ "038", "039", "040", - "041", "042" ] } diff --git a/parser/testdata/parse/postgres_regress/numeric.metadata.json b/parser/testdata/parse/postgres_regress/numeric.metadata.json index 2a1b104..3c391e9 100644 --- a/parser/testdata/parse/postgres_regress/numeric.metadata.json +++ b/parser/testdata/parse/postgres_regress/numeric.metadata.json @@ -11,8 +11,6 @@ "009", "010", "011", - "1000", - "1001", "1003", "1004", "412", @@ -48,15 +46,11 @@ "639", "668", "678", - "729", - "752", "753", "814", "982", "989", "990", - "991", - "992", "994", "998", "999" diff --git a/parser/testdata/parse/postgres_regress/object_address.metadata.json b/parser/testdata/parse/postgres_regress/object_address.metadata.json index 77c7007..6f0e0f4 100644 --- a/parser/testdata/parse/postgres_regress/object_address.metadata.json +++ b/parser/testdata/parse/postgres_regress/object_address.metadata.json @@ -1,11 +1,5 @@ { "todo": [ - "001", - "002", - "003", - "004", - "005", - "006", "007", "008", "009", @@ -30,10 +24,8 @@ "028", "029", "030", - "031", "032", "033", - "034", "035", "036", "040", @@ -43,7 +35,6 @@ "076", "077", "078", - "079", - "080" + "079" ] } diff --git a/parser/testdata/parse/postgres_regress/partition_aggregate.metadata.json b/parser/testdata/parse/postgres_regress/partition_aggregate.metadata.json index 17198fe..40742ea 100644 --- a/parser/testdata/parse/postgres_regress/partition_aggregate.metadata.json +++ b/parser/testdata/parse/postgres_regress/partition_aggregate.metadata.json @@ -1,9 +1,5 @@ { "todo": [ - "001", - "002", - "003", - "004", "005", "006", "007", @@ -16,12 +12,10 @@ "017", "018", "020", - "022", "023", "025", "027", "029", - "031", "032", "033", "034", @@ -38,9 +32,7 @@ "047", "049", "051", - "052", "053", - "055", "056", "058", "060", @@ -66,20 +58,14 @@ "088", "089", "091", - "092", - "093", "094", "096", - "097", "098", "100", "102", - "104", - "105", "106", "108", "110", - "112", "113", "114", "115", @@ -94,8 +80,6 @@ "128", "129", "130", - "132", - "133", "134" ] } diff --git a/parser/testdata/parse/postgres_regress/partition_join.metadata.json b/parser/testdata/parse/postgres_regress/partition_join.metadata.json index c1d1356..356df95 100644 --- a/parser/testdata/parse/postgres_regress/partition_join.metadata.json +++ b/parser/testdata/parse/postgres_regress/partition_join.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "001", "002", "003", "004", @@ -32,11 +31,7 @@ "044", "045", "047", - "049", - "050", "051", - "053", - "054", "055", "056", "057", @@ -60,14 +55,10 @@ "083", "085", "087", - "089", - "090", "091", "093", "095", "097", - "099", - "100", "101", "102", "103", @@ -449,12 +440,8 @@ "590", "591", "593", - "594", - "595", "596", "597", - "598", - "599", - "600" + "598" ] } diff --git a/parser/testdata/parse/postgres_regress/partition_prune.metadata.json b/parser/testdata/parse/postgres_regress/partition_prune.metadata.json index 401e2f4..ff5326a 100644 --- a/parser/testdata/parse/postgres_regress/partition_prune.metadata.json +++ b/parser/testdata/parse/postgres_regress/partition_prune.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "001", "002", "003", "004", @@ -274,7 +273,6 @@ "309", "310", "311", - "312", "314", "315", "318", @@ -301,10 +299,6 @@ "347", "348", "349", - "351", - "352", - "353", - "354", "361", "364", "365", @@ -316,25 +310,11 @@ "371", "372", "373", - "374", - "375", - "376", - "384", - "385", - "386", - "387", - "388", - "389", - "390", "391", "392", "393", "394", - "396", - "397", "399", - "401", - "402", "410", "412", "414", @@ -353,8 +333,6 @@ "429", "430", "431", - "433", - "434", "435", "436", "440", @@ -411,8 +389,6 @@ "511", "512", "513", - "514", - "515", "516", "517", "518", @@ -424,10 +400,7 @@ "528", "532", "534", - "535", - "536", "537", - "538", "539", "540", "541", @@ -472,12 +445,9 @@ "582", "583", "584", - "585", - "586", "587", "588", "589", - "590", "591", "592", "593", @@ -485,14 +455,11 @@ "595", "596", "597", - "598", "599", "600", "601", "602", "603", - "604", - "605", "606", "607", "608", @@ -517,27 +484,17 @@ "631", "632", "633", - "634", - "635", "636", "637", - "638", "639", "640", - "641", - "642", "643", - "644", - "645", "646", "647", "648", "649", "650", "653", - "654", - "655", - "656", "657", "658", "659", @@ -546,7 +503,6 @@ "662", "663", "664", - "665", "666", "667", "668", diff --git a/parser/testdata/parse/postgres_regress/password.metadata.json b/parser/testdata/parse/postgres_regress/password.metadata.json index 97df595..1c73217 100644 --- a/parser/testdata/parse/postgres_regress/password.metadata.json +++ b/parser/testdata/parse/postgres_regress/password.metadata.json @@ -1,49 +1,6 @@ { "todo": [ - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", - "012", "014", - "016", - "017", - "018", - "019", - "020", - "021", - "022", - "023", - "024", - "025", - "026", - "027", - "028", - "030", - "031", - "032", - "034", - "035", - "036", - "038", - "039", - "040", - "041", - "042", - "043", - "044", - "045", - "046", - "047", - "048", - "049", - "050" + "016" ] } diff --git a/parser/testdata/parse/postgres_regress/plancache.metadata.json b/parser/testdata/parse/postgres_regress/plancache.metadata.json index e526209..b04b95f 100644 --- a/parser/testdata/parse/postgres_regress/plancache.metadata.json +++ b/parser/testdata/parse/postgres_regress/plancache.metadata.json @@ -14,12 +14,9 @@ "032", "034", "035", - "038", - "041", "044", "046", "047", - "048", "049", "052", "053", @@ -35,13 +32,9 @@ "073", "075", "076", - "079", "080", - "082", "083", - "085", "093", - "094", "095", "097" ] diff --git a/parser/testdata/parse/postgres_regress/plpgsql.metadata.json b/parser/testdata/parse/postgres_regress/plpgsql.metadata.json index df3caff..20def0f 100644 --- a/parser/testdata/parse/postgres_regress/plpgsql.metadata.json +++ b/parser/testdata/parse/postgres_regress/plpgsql.metadata.json @@ -203,7 +203,6 @@ "474", "476", "478", - "479", "480", "482", "484", @@ -212,15 +211,8 @@ "490", "492", "494", - "496", "497", - "499", - "500", - "501", - "502", - "503", "504", - "506", "508", "510", "511", @@ -229,20 +221,11 @@ "514", "515", "516", - "517", "518", - "520", - "521", "522", - "524", "525", - "526", "527", - "528", - "529", - "530", "531", - "532", "533", "534", "535", @@ -250,8 +233,6 @@ "538", "539", "540", - "541", - "542", "543", "545", "547", @@ -323,9 +304,7 @@ "660", "662", "663", - "664", "665", - "667", "668", "669", "670", @@ -379,10 +358,8 @@ "749", "750", "753", - "754", "755", "757", - "759", "760", "762", "764", @@ -394,7 +371,6 @@ "770", "771", "772", - "773", "774", "776", "778", @@ -443,9 +419,7 @@ "858", "859", "860", - "861", "862", - "863", "864", "865", "866", diff --git a/parser/testdata/parse/postgres_regress/point.metadata.json b/parser/testdata/parse/postgres_regress/point.metadata.json index 601ff32..75ee143 100644 --- a/parser/testdata/parse/postgres_regress/point.metadata.json +++ b/parser/testdata/parse/postgres_regress/point.metadata.json @@ -1,16 +1,6 @@ { "todo": [ - "001", "023", - "025", - "027", - "028", - "029", - "033", - "034", - "035", - "039", - "040", - "041" + "025" ] } diff --git a/parser/testdata/parse/postgres_regress/polygon.metadata.json b/parser/testdata/parse/postgres_regress/polygon.metadata.json index 2a0e491..14c71ac 100644 --- a/parser/testdata/parse/postgres_regress/polygon.metadata.json +++ b/parser/testdata/parse/postgres_regress/polygon.metadata.json @@ -3,13 +3,7 @@ "001", "015", "019", - "020", - "021", - "022", "023", - "024", - "025", - "026", "027", "029", "031", @@ -22,12 +16,7 @@ "045", "047", "049", - "051", - "052", "053", - "054", - "056", - "057", - "058" + "054" ] } diff --git a/parser/testdata/parse/postgres_regress/portals.metadata.json b/parser/testdata/parse/postgres_regress/portals.metadata.json index c9de67f..000cfbd 100644 --- a/parser/testdata/parse/postgres_regress/portals.metadata.json +++ b/parser/testdata/parse/postgres_regress/portals.metadata.json @@ -73,7 +73,6 @@ "297", "308", "309", - "310", "311", "316", "317", @@ -89,10 +88,8 @@ "334", "338", "339", - "340", "341", "346", - "347", - "349" + "347" ] } diff --git a/parser/testdata/parse/postgres_regress/privileges.metadata.json b/parser/testdata/parse/postgres_regress/privileges.metadata.json index 2fc3d78..069d86d 100644 --- a/parser/testdata/parse/postgres_regress/privileges.metadata.json +++ b/parser/testdata/parse/postgres_regress/privileges.metadata.json @@ -1,28 +1,5 @@ { "todo": [ - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "021", - "022", - "023", - "024", "025", "026", "027", @@ -34,91 +11,41 @@ "035", "037", "038", - "039", "040", - "042", "043", "044", "045", "046", - "047", "048", - "049", "050", - "051", "052", "053", - "054", - "055", - "056", "057", "058", - "059", - "060", - "061", - "062", - "063", - "064", - "065", "066", "067", "068", "069", - "070", "071", - "072", "073", - "074", "075", "076", "077", - "078", "079", "080", - "081", - "082", - "083", - "084", "085", "086", - "087", - "088", - "089", - "090", - "091", "092", - "093", - "094", - "095", - "097", "099", - "100", - "101", - "103", "105", - "106", - "108", - "110", - "111", - "113", - "115", "116", - "117", - "118", - "119", - "120", - "121", "122", "123", - "124", "125", "126", - "127", "128", "129", "130", - "131", - "132", "133", "134", "135", @@ -130,8 +57,6 @@ "141", "142", "143", - "144", - "145", "147", "152", "153", @@ -146,88 +71,59 @@ "164", "165", "166", - "167", "179", "180", "181", "182", "184", - "187", "188", "189", "190", "191", - "192", "193", - "194", "195", "196", "197", "198", "199", "200", - "201", "202", "203", "204", "205", "206", - "207", "208", "209", - "210", "211", "212", "213", "214", - "215", "216", - "217", "218", "219", "220", - "221", "222", "223", - "224", "227", - "228", - "229", - "230", "231", "233", - "234", "235", - "236", "238", - "239", "240", - "241", "243", - "244", "245", "246", "247", "248", "251", "252", - "253", - "259", - "261", "262", "264", - "265", - "270", "271", "272", "273", "274", - "276", - "315", "316", - "317", - "319", - "320", - "321" + "320" ] } diff --git a/parser/testdata/parse/postgres_regress/psql.metadata.json b/parser/testdata/parse/postgres_regress/psql.metadata.json index 6cd28c5..6bd9557 100644 --- a/parser/testdata/parse/postgres_regress/psql.metadata.json +++ b/parser/testdata/parse/postgres_regress/psql.metadata.json @@ -2,26 +2,18 @@ "todo": [ "026", "029", - "032", "033", "034", "035", "121", - "123", - "124", "125", - "126", "127", - "128", "129", "130", "131", "132", - "133", - "134", "135", "136", - "137", "193" ] } diff --git a/parser/testdata/parse/postgres_regress/publication.metadata.json b/parser/testdata/parse/postgres_regress/publication.metadata.json index 263dab1..b4b7eec 100644 --- a/parser/testdata/parse/postgres_regress/publication.metadata.json +++ b/parser/testdata/parse/postgres_regress/publication.metadata.json @@ -1,29 +1,18 @@ { "todo": [ - "001", - "002", - "003", - "004", - "005", "006", - "007", "008", - "010", "011", - "012", "013", "014", "015", "016", "017", - "018", "019", "020", "021", "022", - "023", "024", - "025", "026", "027", "028", @@ -32,16 +21,12 @@ "031", "032", "033", - "034", "035", - "036", "037", "038", "039", - "040", "041", "042", - "043", "044", "045", "046", @@ -52,16 +37,12 @@ "052", "053", "054", - "055", "056", "057", - "058", "059", "060", - "061", "062", "063", - "064", "065", "066", "067", @@ -78,37 +59,23 @@ "084", "085", "086", - "087", "088", - "089", "090", - "091", "092", - "093", "094", "095", "096", - "097", "098", "099", - "100", "101", - "102", "103", - "104", "105", - "106", "107", - "108", "109", - "110", "111", "112", - "113", - "114", "115", "116", - "117", "118", "119", "120", @@ -143,10 +110,8 @@ "149", "150", "151", - "152", "153", "154", - "155", "156", "157", "158", @@ -167,9 +132,7 @@ "173", "174", "175", - "176", "177", - "178", "180", "182", "184", @@ -209,14 +172,10 @@ "233", "234", "235", - "236", "237", "238", - "239", - "240", "241", "242", - "243", "244", "245", "246", @@ -232,9 +191,7 @@ "258", "259", "260", - "262", "263", - "264", "265", "266", "267", @@ -256,9 +213,7 @@ "287", "288", "289", - "290", "291", - "292", "293", "294", "296", @@ -285,7 +240,6 @@ "321", "322", "324", - "326", "327", "328", "329", @@ -294,12 +248,9 @@ "332", "333", "334", - "335", "336", "337", - "338", "339", - "340", "341", "342", "343", @@ -310,9 +261,7 @@ "348", "349", "350", - "351", "352", - "353", "355", "357", "359", @@ -352,10 +301,8 @@ "408", "409", "410", - "411", "412", "415", - "416", "418", "420", "421", @@ -366,9 +313,7 @@ "426", "427", "428", - "429", "430", - "431", "432", "433", "434", @@ -383,55 +328,34 @@ "444", "446", "448", - "449", "450", - "451", "452", - "453", - "454", "455", "456", "457", - "458", "459", "460", - "461", "462", - "463", "464", "465", "466", - "467", - "468", "469", - "470", "471", - "472", "473", - "474", "475", "476", - "477", "478", - "479", "480", "481", "482", - "483", "484", - "485", "486", "487", "488", - "489", - "490", - "491", - "492", "493", "494", "495", "496", - "497", "498", "499", "500", @@ -439,10 +363,7 @@ "502", "503", "504", - "505", - "506", "507", - "508", "509", "510", "511", @@ -468,27 +389,17 @@ "531", "534", "536", - "538", - "539", "540", "541", - "544", "545", - "546", "549", "550", "551", - "554", "555", - "556", - "560", "561", - "562", "563", - "564", "565", "566", - "567", "568", "569", "570", @@ -505,9 +416,6 @@ "581", "582", "583", - "584", - "585", - "586", "587", "588", "589", @@ -528,7 +436,6 @@ "610", "611", "612", - "614", "615", "616", "617", @@ -536,31 +443,22 @@ "619", "620", "621", - "622", "623", - "624", "629", "630", "631", "632", "633", - "634", "635", - "636", "641", "642", "643", - "644", - "645", - "646", "647", "648", - "649", "650", "651", "652", "653", - "654", - "655" + "654" ] } diff --git a/parser/testdata/parse/postgres_regress/random.metadata.json b/parser/testdata/parse/postgres_regress/random.metadata.json index 0f371cb..5ff761a 100644 --- a/parser/testdata/parse/postgres_regress/random.metadata.json +++ b/parser/testdata/parse/postgres_regress/random.metadata.json @@ -4,7 +4,6 @@ "008", "031", "033", - "035", - "039" + "035" ] } diff --git a/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json b/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json index ab455db..fd14daf 100644 --- a/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json +++ b/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json @@ -119,8 +119,6 @@ "297", "298", "302", - "303", - "305", "307", "308", "314", diff --git a/parser/testdata/parse/postgres_regress/rangetypes.metadata.json b/parser/testdata/parse/postgres_regress/rangetypes.metadata.json index dce7b76..e541eb3 100644 --- a/parser/testdata/parse/postgres_regress/rangetypes.metadata.json +++ b/parser/testdata/parse/postgres_regress/rangetypes.metadata.json @@ -5,56 +5,25 @@ "103", "104", "105", - "114", - "115", - "116", - "118", - "119", - "120", - "122", - "123", - "124", - "126", - "127", - "128", "129", "130", "131", "163", "164", "172", - "173", - "174", - "175", - "196", - "197", - "198", "219", "220", "241", "242", - "250", - "251", - "252", - "264", - "265", - "266", "278", "279", "291", - "293", - "294", - "295", "296", "297", - "299", "301", "302", - "304", "305", "306", - "313", - "316", "317", "319", "322", @@ -85,8 +54,6 @@ "369", "370", "371", - "372", - "374", "375", "377", "379", diff --git a/parser/testdata/parse/postgres_regress/regex.metadata.json b/parser/testdata/parse/postgres_regress/regex.metadata.json index 7727796..ea0a9d9 100644 --- a/parser/testdata/parse/postgres_regress/regex.metadata.json +++ b/parser/testdata/parse/postgres_regress/regex.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "001", "050", "051", "052", diff --git a/parser/testdata/parse/postgres_regress/regproc.metadata.json b/parser/testdata/parse/postgres_regress/regproc.metadata.json index 6120e61..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/regproc.metadata.json +++ b/parser/testdata/parse/postgres_regress/regproc.metadata.json @@ -1,6 +1,3 @@ { - "todo": [ - "001", - "037" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/reindex_catalog.metadata.json b/parser/testdata/parse/postgres_regress/reindex_catalog.metadata.json index 229dde4..4289c36 100644 --- a/parser/testdata/parse/postgres_regress/reindex_catalog.metadata.json +++ b/parser/testdata/parse/postgres_regress/reindex_catalog.metadata.json @@ -12,7 +12,6 @@ "010", "011", "012", - "013", "014", "015", "016", diff --git a/parser/testdata/parse/postgres_regress/roleattributes.metadata.json b/parser/testdata/parse/postgres_regress/roleattributes.metadata.json index 9e54757..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/roleattributes.metadata.json +++ b/parser/testdata/parse/postgres_regress/roleattributes.metadata.json @@ -1,52 +1,3 @@ { - "todo": [ - "001", - "003", - "005", - "007", - "009", - "011", - "013", - "015", - "017", - "019", - "021", - "023", - "025", - "027", - "029", - "031", - "033", - "035", - "037", - "039", - "041", - "043", - "045", - "047", - "049", - "051", - "053", - "055", - "057", - "059", - "061", - "063", - "065", - "066", - "067", - "068", - "069", - "070", - "071", - "072", - "073", - "074", - "075", - "076", - "077", - "078", - "079", - "080" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/rowsecurity.metadata.json b/parser/testdata/parse/postgres_regress/rowsecurity.metadata.json index de7bd30..2d5aff4 100644 --- a/parser/testdata/parse/postgres_regress/rowsecurity.metadata.json +++ b/parser/testdata/parse/postgres_regress/rowsecurity.metadata.json @@ -1,30 +1,11 @@ { "todo": [ - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", "018", "019", - "020", "021", - "022", "023", "024", - "025", "026", "027", "029", @@ -36,40 +17,17 @@ "037", "038", "039", - "041", - "042", - "046", "050", "051", - "052", "055", "056", "059", "060", - "061", "062", - "063", - "066", "069", "070", - "071", "072", "073", - "074", - "077", - "080", - "085", - "086", - "089", - "090", - "093", - "094", - "097", - "098", - "101", - "102", - "105", - "106", "107", "108", "109", @@ -82,7 +40,6 @@ "119", "120", "121", - "122", "124", "126", "128", @@ -90,13 +47,8 @@ "132", "134", "136", - "137", - "138", "140", - "141", - "142", "144", - "145", "146", "147", "148", @@ -108,74 +60,40 @@ "155", "156", "157", - "159", - "160", "162", - "163", "165", - "166", "168", - "175", "176", "177", - "178", "182", - "183", "185", "186", "187", - "188", "189", - "190", - "192", "194", - "195", - "196", - "199", - "200", - "203", - "204", - "207", - "208", - "211", - "212", "213", - "214", - "216", - "217", "218", "219", "220", "221", "222", "223", - "224", "225", "226", "227", - "228", - "230", "231", "232", "233", "234", - "235", - "237", "238", "239", - "240", "241", "242", - "243", - "245", "246", "247", "248", - "249", "250", "251", - "252", - "254", "255", "257", "259", @@ -184,31 +102,19 @@ "262", "263", "264", - "265", "266", - "269", "270", "271", - "272", "274", - "275", "276", - "277", "279", "281", - "282", "283", - "284", "288", - "289", - "290", "292", "294", "297", - "298", - "299", "301", - "302", "303", "305", "310", @@ -216,166 +122,103 @@ "314", "316", "318", - "320", - "321", - "323", - "324", "325", "326", - "329", "330", "332", "333", "334", - "335", "336", "337", - "338", "339", "344", "346", - "348", - "350", "351", "352", "353", "354", "355", - "356", - "367", "368", "369", "370", "371", - "372", - "375", "376", "377", - "378", - "382", "383", "384", "385", "386", "387", "388", - "390", - "400", - "401", - "403", - "404", - "408", "409", "410", - "411", - "419", "420", - "422", "423", "424", "425", "427", "428", "429", - "430", "432", "434", "436", "438", - "439", "441", "442", "443", "444", - "445", "447", "448", "449", "450", - "451", "453", "454", "455", "456", - "457", "458", "459", - "460", "462", - "463", "465", "466", - "467", "468", "469", - "470", "472", - "473", "475", - "476", "478", - "479", "480", - "481", "483", - "484", "485", "487", - "488", "490", - "491", "493", - "494", "495", - "496", "498", - "499", "501", - "502", "503", "504", - "505", "506", - "507", "508", "509", "510", "512", - "513", "515", - "516", "518", - "519", "520", - "521", "522", "523", "524", - "525", "527", - "528", "530", - "531", "533", - "534", "535", - "536", "538", - "539", "541", - "542", "543", - "544", "546", - "547", "549", - "550", "551", - "552", "554", - "555", "556", - "557", "558", "559", "561", @@ -384,9 +227,6 @@ "564", "565", "566", - "567", - "570", - "574", "575", "576", "577", @@ -396,136 +236,64 @@ "581", "582", "583", - "584", "585", "586", "587", - "588", "589", "590", "591", - "592", "594", "595", - "596", "598", "600", "601", "604", "606", "607", - "608", "609", "610", "611", "612", "613", "614", - "615", "617", - "618", "619", - "620", "621", - "622", "623", "624", "625", "626", "627", - "629", "631", - "636", "637", "639", - "641", "642", "644", "646", "647", - "651", "652", "653", "654", "655", "656", - "659", - "662", "663", "664", - "665", - "668", "669", - "670", "671", "672", - "673", "675", - "676", "678", - "679", - "680", "682", - "683", "685", - "686", "687", "688", "689", "690", "691", - "693", - "694", - "696", - "698", - "699", - "701", - "703", - "704", - "706", - "708", - "709", - "711", - "713", - "714", "715", "716", "717", "718", - "720", - "721", - "723", - "725", - "726", - "728", - "730", - "731", - "733", - "735", - "736", - "738", - "740", - "741", - "742", - "744", - "745", - "747", - "749", - "750", - "752", - "754", - "755", - "757", - "759", - "760", - "762", - "764", - "765", - "768", - "769", - "771", - "772", - "773", - "775" + "742" ] } diff --git a/parser/testdata/parse/postgres_regress/rowtypes.metadata.json b/parser/testdata/parse/postgres_regress/rowtypes.metadata.json index b995227..009e940 100644 --- a/parser/testdata/parse/postgres_regress/rowtypes.metadata.json +++ b/parser/testdata/parse/postgres_regress/rowtypes.metadata.json @@ -14,9 +14,7 @@ "067", "069", "073", - "074", "075", - "077", "079", "094", "095", diff --git a/parser/testdata/parse/postgres_regress/rules.metadata.json b/parser/testdata/parse/postgres_regress/rules.metadata.json index 8645f17..88f8493 100644 --- a/parser/testdata/parse/postgres_regress/rules.metadata.json +++ b/parser/testdata/parse/postgres_regress/rules.metadata.json @@ -128,8 +128,6 @@ "440", "441", "442", - "443", - "449", "450", "452", "454", @@ -211,31 +209,23 @@ "581", "583", "585", - "586", "588", - "590", "594", "595", - "596", "597", "598", "599", "600", "601", - "602", - "604", "605", "606", "607", "608", "609", - "610", - "612", "615", "616", "617", "618", - "619", - "620" + "619" ] } diff --git a/parser/testdata/parse/postgres_regress/security_label.metadata.json b/parser/testdata/parse/postgres_regress/security_label.metadata.json index d49a93c..f2112ac 100644 --- a/parser/testdata/parse/postgres_regress/security_label.metadata.json +++ b/parser/testdata/parse/postgres_regress/security_label.metadata.json @@ -1,11 +1,5 @@ { "todo": [ - "001", - "002", - "003", - "004", - "005", - "006", "007", "008", "009", @@ -25,8 +19,6 @@ "023", "024", "025", - "026", - "027", - "028" + "026" ] } diff --git a/parser/testdata/parse/postgres_regress/select.metadata.json b/parser/testdata/parse/postgres_regress/select.metadata.json index 28aa1ac..b1be8af 100644 --- a/parser/testdata/parse/postgres_regress/select.metadata.json +++ b/parser/testdata/parse/postgres_regress/select.metadata.json @@ -1,16 +1,9 @@ { "todo": [ "008", - "009", - "010", - "011", - "015", - "016", - "017", "028", "031", "038", - "039", "044", "045", "050", @@ -22,9 +15,7 @@ "063", "065", "067", - "069", "070", - "072", "073", "075", "078", diff --git a/parser/testdata/parse/postgres_regress/select_distinct.metadata.json b/parser/testdata/parse/postgres_regress/select_distinct.metadata.json index 4a190f6..f342e05 100644 --- a/parser/testdata/parse/postgres_regress/select_distinct.metadata.json +++ b/parser/testdata/parse/postgres_regress/select_distinct.metadata.json @@ -1,52 +1,26 @@ { "todo": [ "006", - "008", - "009", - "010", "011", "012", - "013", "014", - "015", "016", - "017", - "018", - "019", - "020", "021", "022", - "023", "024", - "025", - "026", "029", "030", "031", "032", - "033", - "034", - "035", - "036", "037", "039", "040", "041", "042", - "043", - "044", - "045", - "046", "047", "049", "051", - "053", - "054", - "055", "056", - "057", - "058", - "059", "060" ] } diff --git a/parser/testdata/parse/postgres_regress/select_into.metadata.json b/parser/testdata/parse/postgres_regress/select_into.metadata.json index aef44e9..3563299 100644 --- a/parser/testdata/parse/postgres_regress/select_into.metadata.json +++ b/parser/testdata/parse/postgres_regress/select_into.metadata.json @@ -2,11 +2,8 @@ "todo": [ "002", "004", - "005", - "006", "007", "008", - "009", "010", "012", "013", @@ -15,12 +12,8 @@ "017", "018", "019", - "020", "021", - "022", - "023", "025", - "026", "027", "029", "030", diff --git a/parser/testdata/parse/postgres_regress/select_parallel.metadata.json b/parser/testdata/parse/postgres_regress/select_parallel.metadata.json index a737edd..0a72acb 100644 --- a/parser/testdata/parse/postgres_regress/select_parallel.metadata.json +++ b/parser/testdata/parse/postgres_regress/select_parallel.metadata.json @@ -2,10 +2,6 @@ "todo": [ "001", "002", - "003", - "004", - "005", - "006", "007", "009", "010", @@ -21,21 +17,15 @@ "022", "023", "024", - "025", "026", - "028", "029", "031", "032", "033", "034", "035", - "036", "037", - "039", "040", - "042", - "043", "044", "045", "046", @@ -46,122 +36,61 @@ "055", "057", "058", - "059", - "060", - "061", "062", "063", - "065", - "066", - "067", "068", - "069", - "070", - "071", "072", "074", "076", - "078", "079", "081", - "083", - "084", - "085", "086", "087", "088", "090", "091", - "092", - "093", - "094", - "095", - "096", - "097", - "098", - "099", - "100", "101", - "102", "103", "105", "107", - "109", "110", "111", "112", - "113", "114", - "116", - "117", - "118", - "119", - "120", "121", "122", - "123", - "124", "125", - "127", - "128", - "129", "130", "132", "133", "134", "135", - "137", "138", - "140", - "141", "142", - "144", - "145", "146", "148", - "150", "151", - "153", "154", - "156", - "157", "158", "159", - "160", - "161", "162", - "163", - "164", "165", "166", "167", - "168", "169", "170", "171", "172", - "173", "175", "176", - "177", - "178", - "179", - "180", - "181", - "182", - "184", - "185", "186", "187", "188", - "189", "190", "191", "192", - "193", "195", "196", - "197", "198", "199", "200", @@ -173,21 +102,15 @@ "211", "212", "213", - "214", "215", "216", - "217", - "220", - "223", "224", "225", - "226", "227", "228", "229", "231", "232", - "233", "235" ] } diff --git a/parser/testdata/parse/postgres_regress/select_views.metadata.json b/parser/testdata/parse/postgres_regress/select_views.metadata.json index 27a506f..208ec73 100644 --- a/parser/testdata/parse/postgres_regress/select_views.metadata.json +++ b/parser/testdata/parse/postgres_regress/select_views.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "004", "005", "006", "007", @@ -17,7 +16,6 @@ "021", "022", "023", - "024", "026", "028", "030", @@ -26,11 +24,7 @@ "036", "038", "040", - "045", "046", - "047", - "048", - "051", - "052" + "047" ] } diff --git a/parser/testdata/parse/postgres_regress/sequence.metadata.json b/parser/testdata/parse/postgres_regress/sequence.metadata.json index c8125d5..e9c2907 100644 --- a/parser/testdata/parse/postgres_regress/sequence.metadata.json +++ b/parser/testdata/parse/postgres_regress/sequence.metadata.json @@ -40,7 +40,6 @@ "044", "061", "062", - "075", "077", "078", "079", @@ -72,7 +71,6 @@ "140", "141", "142", - "147", "149", "152", "154", @@ -84,63 +82,52 @@ "162", "163", "166", - "167", "168", - "169", "170", "171", "172", "174", "175", - "176", "177", "178", "179", "181", "182", - "183", "184", "185", "186", "188", "189", - "190", "191", "193", "194", "196", "197", - "198", "199", "201", "202", "204", "205", - "206", "207", "209", "210", "212", "213", - "214", "215", "217", "218", "220", "221", - "222", "223", "225", "226", "228", "229", - "230", "231", "233", "234", "236", "237", - "238", "239", "240", "241", @@ -148,11 +135,9 @@ "244", "247", "248", - "249", "250", "251", "252", - "254", "255", "256", "260" diff --git a/parser/testdata/parse/postgres_regress/stats.metadata.json b/parser/testdata/parse/postgres_regress/stats.metadata.json index cab46d0..649b070 100644 --- a/parser/testdata/parse/postgres_regress/stats.metadata.json +++ b/parser/testdata/parse/postgres_regress/stats.metadata.json @@ -1,12 +1,6 @@ { "todo": [ - "001", - "002", - "003", - "004", - "005", "007", - "008", "009", "010", "011", @@ -31,15 +25,11 @@ "049", "052", "054", - "056", - "058", "060", - "061", "066", "067", "069", "071", - "072", "080", "081", "083", @@ -92,29 +82,16 @@ "186", "190", "193", - "194", - "195", - "196", "197", - "199", "200", "203", "206", - "207", - "208", - "209", "210", "213", "217", - "218", - "219", - "220", "221", "224", "228", - "229", - "230", - "231", "232", "235", "238", @@ -124,19 +101,12 @@ "247", "253", "254", - "255", - "256", "291", - "292", "298", "299", - "300", - "303", - "307", "311", "316", "317", - "319", "323", "325", "326", @@ -146,30 +116,19 @@ "340", "342", "343", - "345", "350", - "355", - "356", "361", "362", "364", "369", - "370", - "371", - "372", - "373", "374", "376", "380", - "381", "382", "391", - "395", - "396", "398", "400", "401", - "406", "408", "417", "419", @@ -179,14 +138,12 @@ "426", "428", "430", - "432", "433", "435", "436", "438", "440", "442", - "443", "444", "447" ] diff --git a/parser/testdata/parse/postgres_regress/stats_ext.metadata.json b/parser/testdata/parse/postgres_regress/stats_ext.metadata.json index 726a504..e0c0ca8 100644 --- a/parser/testdata/parse/postgres_regress/stats_ext.metadata.json +++ b/parser/testdata/parse/postgres_regress/stats_ext.metadata.json @@ -29,19 +29,14 @@ "027", "028", "029", - "030", - "031", "032", "033", "034", - "035", - "036", "037", "039", "040", "041", "042", - "043", "044", "046", "047", @@ -88,7 +83,6 @@ "108", "110", "112", - "113", "114", "115", "116", @@ -257,7 +251,6 @@ "684", "686", "688", - "689", "690", "692", "693", @@ -269,97 +262,61 @@ "699", "700", "701", - "702", - "703", "704", "705", "707", - "708", "709", "710", "711", "712", "713", "714", - "715", - "716", - "717", - "718", "719", "720", - "721", - "722", - "723", "724", - "725", "728", "729", "730", "731", - "735", "736", "737", - "738", - "742", "743", "744", "745", - "746", - "750", "751", "752", - "753", - "757", "758", "759", "760", - "761", - "765", "766", "768", "769", "770", - "771", - "774", "775", - "776", - "779", "780", - "781", "782", "783", - "784", "785", "786", - "787", "788", - "789", "790", "791", - "792", "793", "794", - "795", "796", "797", - "798", "799", - "800", "801", "802", - "803", "804", - "805", "806", "807", "808", "809", "810", "811", - "812", "813", "814", - "815", - "816" + "815" ] } diff --git a/parser/testdata/parse/postgres_regress/subscription.metadata.json b/parser/testdata/parse/postgres_regress/subscription.metadata.json index 546b760..f787d13 100644 --- a/parser/testdata/parse/postgres_regress/subscription.metadata.json +++ b/parser/testdata/parse/postgres_regress/subscription.metadata.json @@ -1,10 +1,5 @@ { "todo": [ - "001", - "002", - "003", - "004", - "005", "006", "007", "008", @@ -15,9 +10,7 @@ "013", "014", "022", - "023", "024", - "025", "026", "027", "028", @@ -54,9 +47,7 @@ "059", "060", "061", - "062", "063", - "064", "065", "066", "067", @@ -117,39 +108,23 @@ "123", "124", "125", - "126", "127", - "128", "129", - "130", "131", - "132", "133", - "134", "135", - "136", "137", - "138", "139", "140", "141", - "142", "143", - "144", "145", - "146", "147", - "148", "149", "150", "151", "152", "153", - "154", - "155", - "156", - "157", - "158", - "159" + "154" ] } diff --git a/parser/testdata/parse/postgres_regress/sysviews.metadata.json b/parser/testdata/parse/postgres_regress/sysviews.metadata.json index 84504bc..f2165e7 100644 --- a/parser/testdata/parse/postgres_regress/sysviews.metadata.json +++ b/parser/testdata/parse/postgres_regress/sysviews.metadata.json @@ -1,8 +1,6 @@ { "todo": [ "004", - "008", - "024", - "026" + "008" ] } diff --git a/parser/testdata/parse/postgres_regress/tablespace.metadata.json b/parser/testdata/parse/postgres_regress/tablespace.metadata.json index 0fc6a12..cff1c51 100644 --- a/parser/testdata/parse/postgres_regress/tablespace.metadata.json +++ b/parser/testdata/parse/postgres_regress/tablespace.metadata.json @@ -2,7 +2,6 @@ "todo": [ "001", "002", - "003", "004", "005", "007", @@ -51,19 +50,14 @@ "062", "063", "065", - "066", "067", "071", "074", "076", "078", - "079", "080", - "081", "082", - "083", "084", - "085", "086", "087", "088", @@ -72,9 +66,7 @@ "091", "092", "093", - "094", "095", - "097", "098", "099", "100", @@ -82,11 +74,9 @@ "102", "104", "105", - "106", "107", "108", "109", - "110", "111", "112", "113", @@ -94,10 +84,8 @@ "116", "117", "118", - "119", "120", "122", - "124", "125", "126", "127", @@ -107,24 +95,18 @@ "132", "133", "134", - "135", "136", "138", - "140", "141", "142", "143", "144", - "146", "147", - "148", "149", "151", "152", - "153", "154", "155", - "156", "157", "158", "159", @@ -146,19 +128,15 @@ "179", "180", "181", - "182", - "183", "184", "185", "186", "187", "188", - "189", "190", "191", "192", "193", - "194", "195", "196", "197", @@ -166,8 +144,6 @@ "199", "200", "201", - "202", - "203", - "204" + "202" ] } diff --git a/parser/testdata/parse/postgres_regress/temp.metadata.json b/parser/testdata/parse/postgres_regress/temp.metadata.json index f0a7ea2..0044aa9 100644 --- a/parser/testdata/parse/postgres_regress/temp.metadata.json +++ b/parser/testdata/parse/postgres_regress/temp.metadata.json @@ -45,12 +45,8 @@ "069", "071", "072", - "075", - "078", "082", - "083", "084", - "088", "089", "090", "091", @@ -106,7 +102,6 @@ "156", "157", "158", - "159", "160", "162" ] diff --git a/parser/testdata/parse/postgres_regress/test_setup.metadata.json b/parser/testdata/parse/postgres_regress/test_setup.metadata.json index 10ce81c..779e517 100644 --- a/parser/testdata/parse/postgres_regress/test_setup.metadata.json +++ b/parser/testdata/parse/postgres_regress/test_setup.metadata.json @@ -1,8 +1,6 @@ { "todo": [ - "001", "002", - "003", "004", "005", "007", diff --git a/parser/testdata/parse/postgres_regress/tidrangescan.metadata.json b/parser/testdata/parse/postgres_regress/tidrangescan.metadata.json index e467198..7ba0fc8 100644 --- a/parser/testdata/parse/postgres_regress/tidrangescan.metadata.json +++ b/parser/testdata/parse/postgres_regress/tidrangescan.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "001", "002", "003", "005", @@ -18,7 +17,6 @@ "035", "036", "043", - "044", - "045" + "044" ] } diff --git a/parser/testdata/parse/postgres_regress/tidscan.metadata.json b/parser/testdata/parse/postgres_regress/tidscan.metadata.json index 96b2f81..923d32c 100644 --- a/parser/testdata/parse/postgres_regress/tidscan.metadata.json +++ b/parser/testdata/parse/postgres_regress/tidscan.metadata.json @@ -7,10 +7,8 @@ "010", "012", "014", - "016", "017", "019", - "021", "022", "027", "028", @@ -19,9 +17,7 @@ "037", "038", "039", - "041", "042", - "044", "045", "048", "049" diff --git a/parser/testdata/parse/postgres_regress/timestamp.metadata.json b/parser/testdata/parse/postgres_regress/timestamp.metadata.json index 72b72dd..941c1bd 100644 --- a/parser/testdata/parse/postgres_regress/timestamp.metadata.json +++ b/parser/testdata/parse/postgres_regress/timestamp.metadata.json @@ -5,8 +5,6 @@ "011", "015", "022", - "023", - "055", - "058" + "023" ] } diff --git a/parser/testdata/parse/postgres_regress/timestamptz.metadata.json b/parser/testdata/parse/postgres_regress/timestamptz.metadata.json index 40d874f..befabd3 100644 --- a/parser/testdata/parse/postgres_regress/timestamptz.metadata.json +++ b/parser/testdata/parse/postgres_regress/timestamptz.metadata.json @@ -6,41 +6,9 @@ "017", "024", "025", - "057", - "060", - "171", - "173", - "175", - "177", - "179", - "181", - "183", - "185", - "187", - "189", - "190", - "192", - "194", - "196", - "198", - "200", - "202", - "204", - "206", - "208", "209", "217", - "218", - "237", - "243", - "249", - "250", - "316", - "329", "354", - "355", - "358", - "361", "362", "365", "366", diff --git a/parser/testdata/parse/postgres_regress/timetz.metadata.json b/parser/testdata/parse/postgres_regress/timetz.metadata.json index b35a27a..b6525ba 100644 --- a/parser/testdata/parse/postgres_regress/timetz.metadata.json +++ b/parser/testdata/parse/postgres_regress/timetz.metadata.json @@ -2,7 +2,6 @@ "todo": [ "001", "051", - "052", "053", "057" ] diff --git a/parser/testdata/parse/postgres_regress/transactions.metadata.json b/parser/testdata/parse/postgres_regress/transactions.metadata.json index 8df280b..136733c 100644 --- a/parser/testdata/parse/postgres_regress/transactions.metadata.json +++ b/parser/testdata/parse/postgres_regress/transactions.metadata.json @@ -7,56 +7,33 @@ "008", "011", "014", - "016", "017", "018", - "020", "021", "022", - "024", "025", "026", "027", "028", "029", - "030", - "032", "033", "034", - "035", - "036", - "037", "039", - "040", - "042", - "043", "044", "045", - "046", "047", - "048", - "049", - "051", - "052", "053", "054", - "055", "056", - "057", "059", - "060", "061", - "062", "064", - "065", "066", - "067", "068", "076", "077", "078", "079", - "080", "081", "082", "083", @@ -189,66 +166,28 @@ "303", "304", "305", - "306", "307", - "308", - "309", - "310", "313", - "314", - "315", - "316", "319", - "320", - "321", - "322", "324", "325", - "326", - "327", - "328", "329", "331", - "332", - "333", - "334", "336", "337", - "338", - "339", - "340", "341", "342", - "343", - "344", - "345", "346", "347", - "348", - "349", - "350", "351", "352", - "353", - "354", - "355", "356", "357", - "358", - "359", - "360", "362", - "363", - "364", - "365", "367", - "368", - "369", - "370", "371", "372", "373", - "375", "376", "377", "387", @@ -277,12 +216,8 @@ "430", "431", "432", - "433", "434", - "435", - "436", "437", - "438", "439", "441", "443", @@ -294,28 +229,20 @@ "455", "456", "458", - "459", "460", "461", "463", - "464", "465", - "466", "467", "469", "471", - "472", "473", "475", "477", - "478", - "479", "481", "482", - "483", "484", "485", - "486", "487", "488", "490" diff --git a/parser/testdata/parse/postgres_regress/triggers.metadata.json b/parser/testdata/parse/postgres_regress/triggers.metadata.json index 6ce3339..98c3ad9 100644 --- a/parser/testdata/parse/postgres_regress/triggers.metadata.json +++ b/parser/testdata/parse/postgres_regress/triggers.metadata.json @@ -147,9 +147,7 @@ "204", "206", "208", - "210", "212", - "214", "219", "224", "225", @@ -169,7 +167,6 @@ "250", "251", "253", - "254", "256", "258", "259", @@ -426,7 +423,6 @@ "632", "636", "637", - "638", "641", "642", "643", diff --git a/parser/testdata/parse/postgres_regress/tsearch.metadata.json b/parser/testdata/parse/postgres_regress/tsearch.metadata.json index 7ee8f41..5a90d19 100644 --- a/parser/testdata/parse/postgres_regress/tsearch.metadata.json +++ b/parser/testdata/parse/postgres_regress/tsearch.metadata.json @@ -3,12 +3,7 @@ "007", "009", "034", - "035", - "036", - "037", "038", - "063", - "064", "065", "090", "091", @@ -21,34 +16,21 @@ "122", "123", "124", - "149", - "150", - "151", "152", "153", - "154", "155", "180", "182", - "184", "282", "285", "292", - "293", - "299", "324", - "325", - "339", - "340", - "344", "348", "356", "357", "358", "359", "367", - "370", - "371", - "373" + "370" ] } diff --git a/parser/testdata/parse/postgres_regress/tsrf.metadata.json b/parser/testdata/parse/postgres_regress/tsrf.metadata.json index 5981a79..ef4607d 100644 --- a/parser/testdata/parse/postgres_regress/tsrf.metadata.json +++ b/parser/testdata/parse/postgres_regress/tsrf.metadata.json @@ -4,10 +4,6 @@ "009", "011", "013", - "019", - "023", - "037", - "044", "045", "047", "065", diff --git a/parser/testdata/parse/postgres_regress/tstypes.metadata.json b/parser/testdata/parse/postgres_regress/tstypes.metadata.json index f23fe5c..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/tstypes.metadata.json +++ b/parser/testdata/parse/postgres_regress/tstypes.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "001" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/tuplesort.metadata.json b/parser/testdata/parse/postgres_regress/tuplesort.metadata.json index f16dedc..480a11f 100644 --- a/parser/testdata/parse/postgres_regress/tuplesort.metadata.json +++ b/parser/testdata/parse/postgres_regress/tuplesort.metadata.json @@ -1,7 +1,5 @@ { "todo": [ - "001", - "002", "003", "015", "016", @@ -12,40 +10,28 @@ "023", "025", "027", - "028", "029", "032", "033", - "034", "035", "038", "039", - "040", "041", "044", "045", - "046", "047", "050", "052", - "053", "054", "070", "071", - "072", - "073", "074", "090", "092", - "093", "095", "096", "098", - "099", - "100", - "101", "103", - "104", "105", "106" ] diff --git a/parser/testdata/parse/postgres_regress/union.metadata.json b/parser/testdata/parse/postgres_regress/union.metadata.json index 50696b4..743584d 100644 --- a/parser/testdata/parse/postgres_regress/union.metadata.json +++ b/parser/testdata/parse/postgres_regress/union.metadata.json @@ -1,30 +1,20 @@ { "todo": [ - "040", "041", "043", "045", - "047", "048", "050", "052", - "054", - "055", "056", - "057", "058", - "059", - "060", "061", "063", "065", "067", - "069", "070", "072", "074", - "076", - "077", "078", "080", "082", @@ -32,47 +22,28 @@ "086", "087", "089", - "090", "091", "093", "095", "097", - "098", - "114", - "115", "116", - "122", - "123", "124", "125", - "134", - "135", "138", "139", "140", - "143", - "144", - "145", - "146", "147", "148", "149", "150", "151", "154", - "155", - "156", "157", - "159", - "160", - "161", - "162", "163", "164", "165", "166", "167", - "168", "169", "170", "172", diff --git a/parser/testdata/parse/postgres_regress/updatable_views.metadata.json b/parser/testdata/parse/postgres_regress/updatable_views.metadata.json index 4a87b2f..4e562e4 100644 --- a/parser/testdata/parse/postgres_regress/updatable_views.metadata.json +++ b/parser/testdata/parse/postgres_regress/updatable_views.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "001", "002", "004", "005", @@ -32,27 +31,19 @@ "095", "096", "098", - "1004", - "1006", "1007", "1008", "1009", - "1010", "1011", "1013", - "1015", - "1017", "1018", "1020", - "1022", "1024", "1025", "1026", "1027", "1028", "1029", - "1030", - "1031", "1032", "1033", "1034", @@ -122,121 +113,54 @@ "219", "222", "223", - "224", - "225", - "226", - "227", "228", "230", "232", "233", "234", "235", - "236", - "237", "238", - "260", - "261", "262", - "263", - "264", - "274", - "275", "276", "277", - "278", - "279", - "289", "290", "291", - "293", "294", - "299", "300", - "305", "306", - "307", - "312", - "317", "318", - "319", - "324", "325", - "326", - "331", - "336", "337", - "338", - "343", "344", - "345", - "350", - "355", "356", - "357", "358", "360", "361", "363", "364", - "365", - "376", "377", "378", - "379", - "390", "391", - "392", - "398", "399", "400", - "401", - "405", "406", - "407", - "412", "413", "414", - "416", "417", "418", - "422", "423", "424", - "428", "429", "430", - "431", - "437", - "441", - "445", "446", "447", - "448", - "452", - "456", "457", "458", - "459", - "467", - "475", "476", "477", - "478", - "486", "487", - "488", - "492", - "500", - "508", "509", - "510", - "518", - "526", "527", - "528", - "529", - "530", "531", "535", "536", @@ -444,14 +368,10 @@ "983", "987", "988", - "989", - "990", - "991", "992", "994", "995", "996", - "997", - "998" + "997" ] } diff --git a/parser/testdata/parse/postgres_regress/update.metadata.json b/parser/testdata/parse/postgres_regress/update.metadata.json index fef1acb..3ccc31b 100644 --- a/parser/testdata/parse/postgres_regress/update.metadata.json +++ b/parser/testdata/parse/postgres_regress/update.metadata.json @@ -48,34 +48,19 @@ "109", "110", "111", - "112", "113", "114", "115", - "116", - "118", "119", "120", - "121", - "123", - "124", - "126", "127", "128", - "129", "130", - "131", - "134", "135", - "136", - "138", - "139", - "141", "142", "143", "144", "145", - "146", "147", "148", "149", diff --git a/parser/testdata/parse/postgres_regress/vacuum.metadata.json b/parser/testdata/parse/postgres_regress/vacuum.metadata.json index 84b7984..4932591 100644 --- a/parser/testdata/parse/postgres_regress/vacuum.metadata.json +++ b/parser/testdata/parse/postgres_regress/vacuum.metadata.json @@ -45,7 +45,6 @@ "089", "091", "092", - "093", "094", "096", "098", @@ -53,15 +52,12 @@ "100", "101", "102", - "103", "104", "106", - "107", "108", "109", "110", "111", - "112", "113", "114", "115", @@ -120,17 +116,13 @@ "179", "180", "181", - "182", "183", "184", "185", "186", "187", - "188", - "189", "190", "191", - "192", "193", "194", "195", @@ -164,8 +156,6 @@ "232", "233", "234", - "235", - "236", "237", "238", "239", @@ -184,10 +174,8 @@ "252", "253", "254", - "255", "256", "257", - "258", "259", "260", "261", @@ -197,9 +185,7 @@ "265", "266", "267", - "268", "269", - "270", "271", "272", "273", @@ -209,10 +195,8 @@ "277", "278", "279", - "280", "281", "282", - "283", "284", "285", "286", @@ -222,9 +206,7 @@ "290", "291", "292", - "293", "294", - "295", - "296" + "295" ] } diff --git a/parser/testdata/parse/postgres_regress/vacuum_parallel.metadata.json b/parser/testdata/parse/postgres_regress/vacuum_parallel.metadata.json index 17cbadd..a51e30f 100644 --- a/parser/testdata/parse/postgres_regress/vacuum_parallel.metadata.json +++ b/parser/testdata/parse/postgres_regress/vacuum_parallel.metadata.json @@ -1,13 +1,9 @@ { "todo": [ - "001", - "002", "003", "005", "006", "007", - "011", - "013", - "014" + "011" ] } diff --git a/parser/testdata/parse/postgres_regress/window.metadata.json b/parser/testdata/parse/postgres_regress/window.metadata.json index b3026b2..8000e31 100644 --- a/parser/testdata/parse/postgres_regress/window.metadata.json +++ b/parser/testdata/parse/postgres_regress/window.metadata.json @@ -52,10 +52,8 @@ "300", "301", "302", - "303", "304", "305", - "306", "307", "308", "310", diff --git a/parser/testdata/parse/postgres_regress/with.metadata.json b/parser/testdata/parse/postgres_regress/with.metadata.json index 4a322fd..65f65d3 100644 --- a/parser/testdata/parse/postgres_regress/with.metadata.json +++ b/parser/testdata/parse/postgres_regress/with.metadata.json @@ -36,7 +36,6 @@ "188", "189", "190", - "191", "193", "195", "197", diff --git a/parser/testdata/parse/postgres_regress/write_parallel.metadata.json b/parser/testdata/parse/postgres_regress/write_parallel.metadata.json index 48bdd37..1a7e569 100644 --- a/parser/testdata/parse/postgres_regress/write_parallel.metadata.json +++ b/parser/testdata/parse/postgres_regress/write_parallel.metadata.json @@ -1,10 +1,6 @@ { "todo": [ "001", - "002", - "003", - "004", - "005", "006", "007", "008", diff --git a/parser/testdata/parse/postgres_regress/xml.metadata.json b/parser/testdata/parse/postgres_regress/xml.metadata.json index b150a01..57117ef 100644 --- a/parser/testdata/parse/postgres_regress/xml.metadata.json +++ b/parser/testdata/parse/postgres_regress/xml.metadata.json @@ -1,10 +1,6 @@ { "todo": [ "001", - "035", - "037", - "121", - "125", "134", "135", "136", @@ -18,8 +14,6 @@ "144", "163", "184", - "191", - "206", "214", "217", "219", diff --git a/parser/testdata/parse/postgres_regress/xmlmap.metadata.json b/parser/testdata/parse/postgres_regress/xmlmap.metadata.json index c07ab38..87c9b99 100644 --- a/parser/testdata/parse/postgres_regress/xmlmap.metadata.json +++ b/parser/testdata/parse/postgres_regress/xmlmap.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "001", "002", "004", "005", From 6c650594cf752c512a6a58acf6dfe5c8c0c12929 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 16 Aug 2026 19:01:47 +0000 Subject: [PATCH 02/24] DDL batch: transactions, NOTIFY/LISTEN/UNLISTEN, LOAD, LOCK, TRUNCATE Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01J19Kf5LpGUhi2vxFJjzQJE --- internal/parse/parser.go | 23 ++ internal/parse/utility_txn.go | 261 ++++++++++++++++++ .../create_function_c.metadata.json | 1 - .../transactions.metadata.json | 23 -- .../advisory_lock.metadata.json | 11 +- .../postgres_regress/aggregates.metadata.json | 16 -- .../alter_generic.metadata.json | 14 - .../alter_table.metadata.json | 49 ---- .../postgres_regress/arrays.metadata.json | 1 - .../postgres_regress/async.metadata.json | 7 +- .../postgres_regress/brin_multi.metadata.json | 2 - .../parse/postgres_regress/case.metadata.json | 6 - .../postgres_regress/cluster.metadata.json | 8 - .../postgres_regress/combocid.metadata.json | 14 - .../constraints.metadata.json | 28 -- .../parse/postgres_regress/copy.metadata.json | 8 - .../postgres_regress/create_am.metadata.json | 11 - .../create_function_c.metadata.json | 1 - .../create_function_sql.metadata.json | 6 - .../create_index.metadata.json | 20 -- .../create_operator.metadata.json | 20 -- .../create_procedure.metadata.json | 8 - .../create_table.metadata.json | 8 - .../create_table_like.metadata.json | 2 - .../create_view.metadata.json | 4 - .../postgres_regress/database.metadata.json | 2 - .../parse/postgres_regress/enum.metadata.json | 14 - .../postgres_regress/errors.metadata.json | 2 - .../event_trigger.metadata.json | 2 - .../postgres_regress/explain.metadata.json | 4 - .../expressions.metadata.json | 8 +- .../fast_default.metadata.json | 2 - .../foreign_key.metadata.json | 85 ------ .../postgres_regress/generated.metadata.json | 3 +- .../groupingsets.metadata.json | 2 - .../parse/postgres_regress/guc.metadata.json | 24 -- .../postgres_regress/hash_index.metadata.json | 10 - .../postgres_regress/identity.metadata.json | 2 - .../incremental_sort.metadata.json | 2 - .../postgres_regress/indexing.metadata.json | 2 - .../postgres_regress/inherit.metadata.json | 7 - .../postgres_regress/insert.metadata.json | 4 - .../insert_conflict.metadata.json | 18 -- .../parse/postgres_regress/join.metadata.json | 26 -- .../postgres_regress/join_hash.metadata.json | 58 +--- .../parse/postgres_regress/json.metadata.json | 2 - .../postgres_regress/jsonb.metadata.json | 2 - .../jsonb_jsonpath.metadata.json | 7 +- .../largeobject.metadata.json | 34 --- .../postgres_regress/limit.metadata.json | 2 - .../parse/postgres_regress/lock.metadata.json | 71 ----- .../postgres_regress/matview.metadata.json | 4 - .../postgres_regress/merge.metadata.json | 130 --------- .../parse/postgres_regress/mvcc.metadata.json | 4 +- .../postgres_regress/namespace.metadata.json | 4 - .../postgres_regress/numeric.metadata.json | 16 -- .../numeric_big.metadata.json | 12 - .../partition_prune.metadata.json | 5 - .../postgres_regress/plpgsql.metadata.json | 12 - .../postgres_regress/portals.metadata.json | 68 ----- .../postgres_regress/portals_p2.metadata.json | 5 +- .../prepared_xacts.metadata.json | 33 --- .../postgres_regress/privileges.metadata.json | 17 -- .../parse/postgres_regress/psql.metadata.json | 2 - .../postgres_regress/rangefuncs.metadata.json | 6 - .../reindex_catalog.metadata.json | 4 +- .../postgres_regress/rowtypes.metadata.json | 2 - .../postgres_regress/rules.metadata.json | 2 - .../select_parallel.metadata.json | 16 +- .../postgres_regress/sequence.metadata.json | 28 -- .../postgres_regress/stats.metadata.json | 80 ------ .../postgres_regress/stats_ext.metadata.json | 10 - .../subscription.metadata.json | 14 - .../postgres_regress/subselect.metadata.json | 8 - .../postgres_regress/sysviews.metadata.json | 5 +- .../tablesample.metadata.json | 2 - .../postgres_regress/tablespace.metadata.json | 4 - .../parse/postgres_regress/temp.metadata.json | 49 +--- .../parse/postgres_regress/tid.metadata.json | 3 - .../tidrangescan.metadata.json | 2 - .../postgres_regress/tidscan.metadata.json | 6 - .../postgres_regress/timestamp.metadata.json | 7 +- .../timestamptz.metadata.json | 7 - .../postgres_regress/timetz.metadata.json | 4 +- .../transactions.metadata.json | 205 +------------- .../postgres_regress/triggers.metadata.json | 16 -- .../postgres_regress/truncate.metadata.json | 54 ---- .../postgres_regress/tuplesort.metadata.json | 18 +- .../parse/postgres_regress/txid.metadata.json | 12 +- .../updatable_views.metadata.json | 4 - .../parse/postgres_regress/uuid.metadata.json | 1 - .../postgres_regress/vacuum.metadata.json | 10 - .../postgres_regress/window.metadata.json | 2 - .../parse/postgres_regress/with.metadata.json | 4 - .../write_parallel.metadata.json | 4 +- .../parse/postgres_regress/xid.metadata.json | 12 +- 96 files changed, 303 insertions(+), 1557 deletions(-) create mode 100644 internal/parse/utility_txn.go diff --git a/internal/parse/parser.go b/internal/parse/parser.go index 8cebc4d..4afdba5 100644 --- a/internal/parse/parser.go +++ b/internal/parse/parser.go @@ -201,7 +201,30 @@ func (p *parser) parseToplevelStmt() *ast.Node { case ast.Token_COPY: return p.parseCopyStmt() case ast.Token_PREPARE: + // PREPARE TRANSACTION Sconst is a TransactionStmt; PREPARE name + // [(types)] AS is a PrepareStmt ("transaction" can also be a plan + // name, so the Sconst decides). + if p.kindN(1) == ast.Token_TRANSACTION && p.kindN(2) == ast.Token_SCONST { + p.next() + return p.parsePrepareTransactionStmt() + } return p.parsePrepareStmt() + case ast.Token_ABORT_P, ast.Token_START, ast.Token_COMMIT, + ast.Token_ROLLBACK, ast.Token_SAVEPOINT, ast.Token_RELEASE, + ast.Token_BEGIN_P, ast.Token_END_P: + return p.parseTransactionStmt() + case ast.Token_NOTIFY: + return p.parseNotifyStmt() + case ast.Token_LISTEN: + return p.parseListenStmt() + case ast.Token_UNLISTEN: + return p.parseUnlistenStmt() + case ast.Token_LOAD: + return p.parseLoadStmt() + case ast.Token_LOCK_P: + return p.parseLockStmt() + case ast.Token_TRUNCATE: + return p.parseTruncateStmt() case ast.Token_EXECUTE: return p.parseExecuteStmt() case ast.Token_DEALLOCATE: diff --git a/internal/parse/utility_txn.go b/internal/parse/utility_txn.go new file mode 100644 index 0000000..6ab5a46 --- /dev/null +++ b/internal/parse/utility_txn.go @@ -0,0 +1,261 @@ +package parse + +// TransactionStmt (+ the legacy BEGIN/END forms), NOTIFY/LISTEN/UNLISTEN, +// LOAD, LOCK, and TRUNCATE. + +import ( + "github.com/sqlc-dev/oliphant/ast" +) + +// parseOptTransaction is gram.y's opt_transaction: WORK | TRANSACTION | ε. +func (p *parser) parseOptTransaction() { + if p.kind() == ast.Token_WORK || p.kind() == ast.Token_TRANSACTION { + p.next() + } +} + +// parseOptTransactionChain is gram.y's opt_transaction_chain. +func (p *parser) parseOptTransactionChain() bool { + if p.have(ast.Token_AND) { + if p.have(ast.Token_NO) { + p.expect(ast.Token_CHAIN) + return false + } + p.expect(ast.Token_CHAIN) + return true + } + return false +} + +func nTransactionStmt(n *ast.TransactionStmt) *ast.Node { + return &ast.Node{Node: &ast.Node_TransactionStmt{TransactionStmt: n}} +} + +// parseTransactionStmt is gram.y's TransactionStmt and +// TransactionStmtLegacy, dispatched on the leading keyword. +func (p *parser) parseTransactionStmt() *ast.Node { + tok := p.next() + n := &ast.TransactionStmt{Location: -1} + switch tok.Kind { + case ast.Token_ABORT_P: + n.Kind = ast.TransactionStmtKind_TRANS_STMT_ROLLBACK + p.parseOptTransaction() + n.Chain = p.parseOptTransactionChain() + case ast.Token_START: + n.Kind = ast.TransactionStmtKind_TRANS_STMT_START + p.expect(ast.Token_TRANSACTION) + if p.transactionModeItemStarts() { + n.Options = p.parseTransactionModeList() + } + case ast.Token_COMMIT: + n.Kind = ast.TransactionStmtKind_TRANS_STMT_COMMIT + if p.kind() == ast.Token_PREPARED { + p.next() + n.Kind = ast.TransactionStmtKind_TRANS_STMT_COMMIT_PREPARED + stok := p.peek() + n.Gid = p.sconst() + n.Location = stok.Start + break + } + p.parseOptTransaction() + n.Chain = p.parseOptTransactionChain() + case ast.Token_ROLLBACK: + if p.kind() == ast.Token_PREPARED { + p.next() + n.Kind = ast.TransactionStmtKind_TRANS_STMT_ROLLBACK_PREPARED + stok := p.peek() + n.Gid = p.sconst() + n.Location = stok.Start + break + } + p.parseOptTransaction() + if p.have(ast.Token_TO) { + n.Kind = ast.TransactionStmtKind_TRANS_STMT_ROLLBACK_TO + p.have(ast.Token_SAVEPOINT) + stok := p.peek() + n.SavepointName = p.colId() + n.Location = stok.Start + break + } + n.Kind = ast.TransactionStmtKind_TRANS_STMT_ROLLBACK + n.Chain = p.parseOptTransactionChain() + case ast.Token_SAVEPOINT: + n.Kind = ast.TransactionStmtKind_TRANS_STMT_SAVEPOINT + stok := p.peek() + n.SavepointName = p.colId() + n.Location = stok.Start + case ast.Token_RELEASE: + n.Kind = ast.TransactionStmtKind_TRANS_STMT_RELEASE + p.have(ast.Token_SAVEPOINT) + stok := p.peek() + n.SavepointName = p.colId() + n.Location = stok.Start + case ast.Token_BEGIN_P: + n.Kind = ast.TransactionStmtKind_TRANS_STMT_BEGIN + p.parseOptTransaction() + if p.transactionModeItemStarts() { + n.Options = p.parseTransactionModeList() + } + case ast.Token_END_P: + n.Kind = ast.TransactionStmtKind_TRANS_STMT_COMMIT + p.parseOptTransaction() + n.Chain = p.parseOptTransactionChain() + } + return nTransactionStmt(n) +} + +// parsePrepareTransactionStmt is TransactionStmt's PREPARE TRANSACTION +// Sconst; PREPARE is consumed by the dispatcher. +func (p *parser) parsePrepareTransactionStmt() *ast.Node { + p.expect(ast.Token_TRANSACTION) + stok := p.peek() + return nTransactionStmt(&ast.TransactionStmt{ + Kind: ast.TransactionStmtKind_TRANS_STMT_PREPARE, + Gid: p.sconst(), + Location: stok.Start, + }) +} + +// parseNotifyStmt is gram.y's NotifyStmt. +func (p *parser) parseNotifyStmt() *ast.Node { + p.expect(ast.Token_NOTIFY) + n := &ast.NotifyStmt{Conditionname: p.colId()} + if p.have(ast.Token(',')) { + n.Payload = p.sconst() + } + return &ast.Node{Node: &ast.Node_NotifyStmt{NotifyStmt: n}} +} + +// parseListenStmt is gram.y's ListenStmt. +func (p *parser) parseListenStmt() *ast.Node { + p.expect(ast.Token_LISTEN) + return &ast.Node{Node: &ast.Node_ListenStmt{ListenStmt: &ast.ListenStmt{ + Conditionname: p.colId(), + }}} +} + +// parseUnlistenStmt is gram.y's UnlistenStmt. +func (p *parser) parseUnlistenStmt() *ast.Node { + p.expect(ast.Token_UNLISTEN) + n := &ast.UnlistenStmt{} + if p.have(ast.Token('*')) { + // conditionname stays empty + } else { + n.Conditionname = p.colId() + } + return &ast.Node{Node: &ast.Node_UnlistenStmt{UnlistenStmt: n}} +} + +// parseLoadStmt is gram.y's LoadStmt: LOAD file_name. +func (p *parser) parseLoadStmt() *ast.Node { + p.expect(ast.Token_LOAD) + return &ast.Node{Node: &ast.Node_LoadStmt{LoadStmt: &ast.LoadStmt{ + Filename: p.sconst(), + }}} +} + +// Lock mode numbers from lockdefs.h. +const ( + accessShareLock = 1 + rowShareLock = 2 + rowExclusiveLock = 3 + shareUpdateExclusiveLock = 4 + shareLock = 5 + shareRowExclusiveLock = 6 + exclusiveLock = 7 + accessExclusiveLock = 8 +) + +// parseLockStmt is gram.y's LockStmt: +// +// LOCK_P opt_table relation_expr_list opt_lock opt_nowait +func (p *parser) parseLockStmt() *ast.Node { + p.expect(ast.Token_LOCK_P) + p.have(ast.Token_TABLE) + n := &ast.LockStmt{Mode: accessExclusiveLock} + n.Relations = p.parseRelationExprList() + if p.have(ast.Token_IN_P) { + // lock_type MODE + switch { + case p.have(ast.Token_ACCESS): + switch { + case p.have(ast.Token_SHARE): + n.Mode = accessShareLock + case p.have(ast.Token_EXCLUSIVE): + n.Mode = accessExclusiveLock + default: + p.syntaxErrorAt() + } + case p.have(ast.Token_ROW): + switch { + case p.have(ast.Token_SHARE): + n.Mode = rowShareLock + case p.have(ast.Token_EXCLUSIVE): + n.Mode = rowExclusiveLock + default: + p.syntaxErrorAt() + } + case p.have(ast.Token_SHARE): + switch { + case p.have(ast.Token_UPDATE): + p.expect(ast.Token_EXCLUSIVE) + n.Mode = shareUpdateExclusiveLock + case p.have(ast.Token_ROW): + p.expect(ast.Token_EXCLUSIVE) + n.Mode = shareRowExclusiveLock + default: + n.Mode = shareLock + } + case p.have(ast.Token_EXCLUSIVE): + n.Mode = exclusiveLock + default: + p.syntaxErrorAt() + } + p.expect(ast.Token_MODE) + } + n.Nowait = p.have(ast.Token_NOWAIT) + return &ast.Node{Node: &ast.Node_LockStmt{LockStmt: n}} +} + +// parseRelationExprList is gram.y's relation_expr_list. +func (p *parser) parseRelationExprList() []*ast.Node { + list := []*ast.Node{p.parseRelationExpr()} + for p.have(ast.Token(',')) { + list = append(list, p.parseRelationExpr()) + } + return list +} + +// parseOptDropBehavior is gram.y's opt_drop_behavior. +func (p *parser) parseOptDropBehavior() ast.DropBehavior { + switch p.kind() { + case ast.Token_CASCADE: + p.next() + return ast.DropBehavior_DROP_CASCADE + case ast.Token_RESTRICT: + p.next() + return ast.DropBehavior_DROP_RESTRICT + } + return ast.DropBehavior_DROP_RESTRICT +} + +// parseTruncateStmt is gram.y's TruncateStmt: +// +// TRUNCATE opt_table relation_expr_list opt_restart_seqs opt_drop_behavior +func (p *parser) parseTruncateStmt() *ast.Node { + p.expect(ast.Token_TRUNCATE) + p.have(ast.Token_TABLE) + n := &ast.TruncateStmt{} + n.Relations = p.parseRelationExprList() + switch p.kind() { + case ast.Token_CONTINUE_P: + p.next() + p.expect(ast.Token_IDENTITY_P) + case ast.Token_RESTART: + p.next() + p.expect(ast.Token_IDENTITY_P) + n.RestartSeqs = true + } + n.Behavior = p.parseOptDropBehavior() + return &ast.Node{Node: &ast.Node_TruncateStmt{TruncateStmt: n}} +} diff --git a/parser/testdata/deparse/postgres_regress/create_function_c.metadata.json b/parser/testdata/deparse/postgres_regress/create_function_c.metadata.json index 90204d5..cad4c76 100644 --- a/parser/testdata/deparse/postgres_regress/create_function_c.metadata.json +++ b/parser/testdata/deparse/postgres_regress/create_function_c.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "001", "002", "003", "005" diff --git a/parser/testdata/deparse/postgres_regress/transactions.metadata.json b/parser/testdata/deparse/postgres_regress/transactions.metadata.json index 21f9ce6..33429cd 100644 --- a/parser/testdata/deparse/postgres_regress/transactions.metadata.json +++ b/parser/testdata/deparse/postgres_regress/transactions.metadata.json @@ -382,66 +382,43 @@ "385", "386", "387", - "388", "390", "391", - "392", "394", "395", - "397", "398", "399", - "401", "402", "403", - "405", "407", - "409", "410", "411", "412", "414", - "416", "417", "419", - "421", "422", - "423", "424", - "426", "427", - "429", - "430", - "431", "432", "434", "435", "437", "438", "439", - "441", "443", - "445", "447", - "449", "451", - "453", "455", - "456", "458", "459", "460", - "461", "463", "464", "465", "466", - "467", - "469", "471", "472", - "473", - "475", "477", "478", "479", diff --git a/parser/testdata/parse/postgres_regress/advisory_lock.metadata.json b/parser/testdata/parse/postgres_regress/advisory_lock.metadata.json index 7de0560..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/advisory_lock.metadata.json +++ b/parser/testdata/parse/postgres_regress/advisory_lock.metadata.json @@ -1,12 +1,3 @@ { - "todo": [ - "002", - "008", - "010", - "014", - "018", - "022", - "026", - "029" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/aggregates.metadata.json b/parser/testdata/parse/postgres_regress/aggregates.metadata.json index 9a44041..97e2edb 100644 --- a/parser/testdata/parse/postgres_regress/aggregates.metadata.json +++ b/parser/testdata/parse/postgres_regress/aggregates.metadata.json @@ -12,9 +12,7 @@ "127", "129", "131", - "133", "135", - "137", "138", "140", "142", @@ -35,9 +33,7 @@ "168", "170", "172", - "173", "175", - "177", "181", "182", "183", @@ -88,7 +84,6 @@ "307", "357", "360", - "367", "368", "369", "370", @@ -98,17 +93,12 @@ "383", "384", "385", - "388", - "389", "390", "391", "392", "393", - "395", - "396", "397", "398", - "400", "401", "402", "403", @@ -132,22 +122,16 @@ "433", "434", "435", - "438", "439", "440", "441", "444", - "446", - "447", "448", "449", "450", "451", - "453", - "454", "461", "463", - "465", "472", "480", "481", diff --git a/parser/testdata/parse/postgres_regress/alter_generic.metadata.json b/parser/testdata/parse/postgres_regress/alter_generic.metadata.json index 1315245..ab7db15 100644 --- a/parser/testdata/parse/postgres_regress/alter_generic.metadata.json +++ b/parser/testdata/parse/postgres_regress/alter_generic.metadata.json @@ -116,12 +116,10 @@ "145", "146", "147", - "151", "152", "153", "154", "155", - "156", "157", "158", "159", @@ -131,16 +129,12 @@ "163", "164", "165", - "166", "168", "170", "172", - "173", - "174", "177", "178", "180", - "181", "182", "183", "184", @@ -158,30 +152,22 @@ "196", "197", "198", - "199", "200", "201", "202", "203", - "204", - "205", "206", "207", "208", "209", - "210", - "211", "212", "213", "214", "215", - "216", - "217", "218", "219", "220", "221", - "222", "223", "224", "225", diff --git a/parser/testdata/parse/postgres_regress/alter_table.metadata.json b/parser/testdata/parse/postgres_regress/alter_table.metadata.json index 07864d1..3414388 100644 --- a/parser/testdata/parse/postgres_regress/alter_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/alter_table.metadata.json @@ -81,27 +81,18 @@ "096", "099", "100", - "1001", - "1002", "1003", - "1005", - "1006", "1007", - "1009", "101", "1010", "1011", "1012", "1013", "1014", - "1015", "1016", "1018", - "1019", - "1020", "1021", "1023", - "1024", "1025", "1026", "1027", @@ -243,7 +234,6 @@ "1167", "1168", "1169", - "117", "1170", "1171", "1172", @@ -276,7 +266,6 @@ "1203", "1204", "1208", - "121", "1211", "1212", "1213", @@ -285,8 +274,6 @@ "1216", "1217", "1218", - "122", - "1222", "1223", "1224", "1225", @@ -322,7 +309,6 @@ "1257", "1258", "1259", - "126", "1260", "1261", "1262", @@ -332,7 +318,6 @@ "1267", "1268", "1269", - "127", "1270", "1272", "1273", @@ -371,7 +356,6 @@ "1306", "1308", "1309", - "131", "1311", "1314", "1315", @@ -528,9 +512,7 @@ "1480", "1481", "1482", - "1483", "1484", - "1485", "1486", "1487", "1488", @@ -1132,10 +1114,8 @@ "799", "804", "806", - "807", "808", "809", - "810", "811", "812", "813", @@ -1206,10 +1186,8 @@ "898", "899", "900", - "901", "902", "903", - "904", "905", "906", "908", @@ -1220,14 +1198,12 @@ "915", "916", "917", - "918", "919", "920", "921", "922", "923", "924", - "928", "929", "930", "939", @@ -1238,43 +1214,18 @@ "944", "945", "947", - "949", "950", - "952", - "953", "954", - "956", - "957", "958", - "960", - "961", "962", - "964", - "965", "966", - "968", - "969", "970", - "972", - "973", "974", - "976", - "977", "978", - "980", - "981", "982", - "984", - "985", "986", - "988", - "989", "990", - "992", - "993", "994", - "996", - "997", "999" ] } diff --git a/parser/testdata/parse/postgres_regress/arrays.metadata.json b/parser/testdata/parse/postgres_regress/arrays.metadata.json index 3b61f3d..77fa56a 100644 --- a/parser/testdata/parse/postgres_regress/arrays.metadata.json +++ b/parser/testdata/parse/postgres_regress/arrays.metadata.json @@ -28,7 +28,6 @@ "449", "451", "452", - "457", "458", "460", "461" diff --git a/parser/testdata/parse/postgres_regress/async.metadata.json b/parser/testdata/parse/postgres_regress/async.metadata.json index 72d3a4f..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/async.metadata.json +++ b/parser/testdata/parse/postgres_regress/async.metadata.json @@ -1,8 +1,3 @@ { - "todo": [ - "007", - "008", - "009", - "010" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/brin_multi.metadata.json b/parser/testdata/parse/postgres_regress/brin_multi.metadata.json index eaa1479..f9b38d0 100644 --- a/parser/testdata/parse/postgres_regress/brin_multi.metadata.json +++ b/parser/testdata/parse/postgres_regress/brin_multi.metadata.json @@ -27,11 +27,9 @@ "052", "054", "055", - "077", "099", "101", "103", - "111", "119", "121", "125", diff --git a/parser/testdata/parse/postgres_regress/case.metadata.json b/parser/testdata/parse/postgres_regress/case.metadata.json index a1a6197..5a66509 100644 --- a/parser/testdata/parse/postgres_regress/case.metadata.json +++ b/parser/testdata/parse/postgres_regress/case.metadata.json @@ -5,22 +5,16 @@ "033", "034", "035", - "042", "043", "045", "046", "047", "048", - "050", - "051", "052", "053", "054", "055", - "058", - "059", "060", - "062", "063", "064" ] diff --git a/parser/testdata/parse/postgres_regress/cluster.metadata.json b/parser/testdata/parse/postgres_regress/cluster.metadata.json index e908812..4fbe298 100644 --- a/parser/testdata/parse/postgres_regress/cluster.metadata.json +++ b/parser/testdata/parse/postgres_regress/cluster.metadata.json @@ -23,9 +23,7 @@ "090", "096", "098", - "104", "111", - "113", "115", "117", "119", @@ -67,20 +65,14 @@ "169", "171", "172", - "173", "175", "177", - "179", "180", - "182", "184", "186", - "188", "189", - "191", "193", "195", - "197", "198", "199", "200", diff --git a/parser/testdata/parse/postgres_regress/combocid.metadata.json b/parser/testdata/parse/postgres_regress/combocid.metadata.json index 8a01a83..d1241a5 100644 --- a/parser/testdata/parse/postgres_regress/combocid.metadata.json +++ b/parser/testdata/parse/postgres_regress/combocid.metadata.json @@ -1,21 +1,7 @@ { "todo": [ "001", - "002", - "016", - "019", - "021", - "023", - "028", - "030", - "043", - "048", - "050", "052", - "054", - "057", - "059", - "061", "062" ] } diff --git a/parser/testdata/parse/postgres_regress/constraints.metadata.json b/parser/testdata/parse/postgres_regress/constraints.metadata.json index 6b12466..2fd6de9 100644 --- a/parser/testdata/parse/postgres_regress/constraints.metadata.json +++ b/parser/testdata/parse/postgres_regress/constraints.metadata.json @@ -38,27 +38,11 @@ "149", "157", "158", - "164", - "166", - "169", - "173", "175", "176", - "177", - "184", - "186", - "188", - "189", - "192", - "193", - "197", "198", "199", "200", - "202", - "204", - "206", - "209", "210", "211", "212", @@ -89,25 +73,13 @@ "239", "240", "241", - "242", "243", - "244", - "245", - "248", - "250", - "255", "257", "258", "267", "268", "269", "270", - "275", - "277", - "278", - "281", - "282", - "286", "288", "290", "291", diff --git a/parser/testdata/parse/postgres_regress/copy.metadata.json b/parser/testdata/parse/postgres_regress/copy.metadata.json index 5fc0bf7..f4d28fd 100644 --- a/parser/testdata/parse/postgres_regress/copy.metadata.json +++ b/parser/testdata/parse/postgres_regress/copy.metadata.json @@ -2,7 +2,6 @@ "todo": [ "001", "007", - "010", "014", "017", "020", @@ -10,21 +9,14 @@ "022", "023", "024", - "029", - "031", - "032", - "034", - "036", "037", "038", - "041", "042", "043", "047", "048", "049", "050", - "052", "054", "055", "056", diff --git a/parser/testdata/parse/postgres_regress/create_am.metadata.json b/parser/testdata/parse/postgres_regress/create_am.metadata.json index a575521..6190df8 100644 --- a/parser/testdata/parse/postgres_regress/create_am.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_am.metadata.json @@ -6,17 +6,12 @@ "004", "005", "006", - "007", "008", "012", "014", "016", - "018", "019", - "020", - "021", "022", - "023", "027", "028", "029", @@ -36,10 +31,8 @@ "056", "058", "060", - "063", "065", "068", - "070", "071", "073", "076", @@ -49,7 +42,6 @@ "080", "081", "083", - "084", "086", "089", "093", @@ -68,8 +60,6 @@ "116", "117", "119", - "120", - "121", "123", "124", "126", @@ -81,7 +71,6 @@ "132", "133", "134", - "136", "137", "138", "139", diff --git a/parser/testdata/parse/postgres_regress/create_function_c.metadata.json b/parser/testdata/parse/postgres_regress/create_function_c.metadata.json index 90204d5..cad4c76 100644 --- a/parser/testdata/parse/postgres_regress/create_function_c.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_function_c.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "001", "002", "003", "005" diff --git a/parser/testdata/parse/postgres_regress/create_function_sql.metadata.json b/parser/testdata/parse/postgres_regress/create_function_sql.metadata.json index 71aec70..650ae32 100644 --- a/parser/testdata/parse/postgres_regress/create_function_sql.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_function_sql.metadata.json @@ -37,19 +37,14 @@ "058", "059", "060", - "062", "063", - "064", "065", - "067", "068", "069", - "070", "071", "072", "073", "074", - "075", "089", "090", "092", @@ -81,7 +76,6 @@ "125", "127", "128", - "129", "131", "132", "133", diff --git a/parser/testdata/parse/postgres_regress/create_index.metadata.json b/parser/testdata/parse/postgres_regress/create_index.metadata.json index 58962e0..c315fd5 100644 --- a/parser/testdata/parse/postgres_regress/create_index.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_index.metadata.json @@ -101,16 +101,12 @@ "233", "234", "235", - "236", "237", - "238", "239", "240", "241", "242", - "243", "244", - "245", "246", "247", "249", @@ -119,10 +115,8 @@ "253", "254", "255", - "256", "257", "259", - "260", "261", "263", "264", @@ -130,9 +124,7 @@ "266", "267", "268", - "269", "270", - "271", "272", "273", "274", @@ -264,9 +256,7 @@ "476", "477", "478", - "479", "480", - "481", "482", "483", "485", @@ -277,9 +267,7 @@ "493", "494", "495", - "496", "497", - "498", "500", "502", "504", @@ -287,9 +275,7 @@ "507", "508", "509", - "510", "511", - "512", "513", "514", "515", @@ -321,18 +307,14 @@ "557", "558", "559", - "560", "561", - "562", "563", "564", "565", "566", - "567", "568", "570", "571", - "572", "573", "575", "577", @@ -347,9 +329,7 @@ "592", "593", "595", - "596", "597", - "598", "599", "602", "604", diff --git a/parser/testdata/parse/postgres_regress/create_operator.metadata.json b/parser/testdata/parse/postgres_regress/create_operator.metadata.json index 1baa4ec..2dc979b 100644 --- a/parser/testdata/parse/postgres_regress/create_operator.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_operator.metadata.json @@ -12,59 +12,39 @@ "011", "012", "017", - "024", "027", "028", "030", - "031", - "032", "033", - "034", - "035", "036", - "037", - "038", "039", "040", - "041", "042", "043", "044", - "045", "047", "048", "049", "050", "052", - "053", - "054", "056", "057", "058", "059", "061", - "062", - "063", "065", "066", "067", "068", "070", - "071", - "072", "074", "075", "076", "077", "079", - "080", - "081", "082", - "083", - "084", "085", "086", - "087", "088", "089", "090" diff --git a/parser/testdata/parse/postgres_regress/create_procedure.metadata.json b/parser/testdata/parse/postgres_regress/create_procedure.metadata.json index dcd2379..f4aa813 100644 --- a/parser/testdata/parse/postgres_regress/create_procedure.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_procedure.metadata.json @@ -4,18 +4,14 @@ "004", "005", "012", - "013", "017", - "018", "019", - "021", "022", "025", "027", "028", "030", "031", - "032", "038", "040", "043", @@ -28,14 +24,10 @@ "066", "067", "068", - "069", "070", "071", - "072", - "073", "074", "075", - "076", "079", "080", "081", diff --git a/parser/testdata/parse/postgres_regress/create_table.metadata.json b/parser/testdata/parse/postgres_regress/create_table.metadata.json index b4bb322..07df449 100644 --- a/parser/testdata/parse/postgres_regress/create_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_table.metadata.json @@ -39,20 +39,12 @@ "046", "047", "048", - "049", "050", - "051", "052", - "053", - "054", "055", "056", - "057", "058", - "059", "060", - "061", - "062", "063", "064", "065", diff --git a/parser/testdata/parse/postgres_regress/create_table_like.metadata.json b/parser/testdata/parse/postgres_regress/create_table_like.metadata.json index ddc093d..501f3ef 100644 --- a/parser/testdata/parse/postgres_regress/create_table_like.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_table_like.metadata.json @@ -81,9 +81,7 @@ "120", "121", "122", - "123", "126", - "127", "128", "129", "130", diff --git a/parser/testdata/parse/postgres_regress/create_view.metadata.json b/parser/testdata/parse/postgres_regress/create_view.metadata.json index ecb6b28..ade9478 100644 --- a/parser/testdata/parse/postgres_regress/create_view.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_view.metadata.json @@ -164,14 +164,10 @@ "228", "229", "232", - "233", "235", "237", - "240", "241", - "242", "244", - "248", "249", "250", "253", diff --git a/parser/testdata/parse/postgres_regress/database.metadata.json b/parser/testdata/parse/postgres_regress/database.metadata.json index 66af5a3..224ee3d 100644 --- a/parser/testdata/parse/postgres_regress/database.metadata.json +++ b/parser/testdata/parse/postgres_regress/database.metadata.json @@ -5,9 +5,7 @@ "003", "004", "005", - "006", "008", - "009", "012", "013", "014" diff --git a/parser/testdata/parse/postgres_regress/enum.metadata.json b/parser/testdata/parse/postgres_regress/enum.metadata.json index c78b749..d817f2c 100644 --- a/parser/testdata/parse/postgres_regress/enum.metadata.json +++ b/parser/testdata/parse/postgres_regress/enum.metadata.json @@ -63,31 +63,17 @@ "127", "128", "129", - "130", "131", - "132", - "134", - "137", - "139", - "140", - "143", "144", "145", - "147", - "148", "149", - "151", "152", - "153", "154", "155", - "157", - "158", "159", "160", "161", "162", - "164", "165", "166", "167", diff --git a/parser/testdata/parse/postgres_regress/errors.metadata.json b/parser/testdata/parse/postgres_regress/errors.metadata.json index fe7663f..8ea3965 100644 --- a/parser/testdata/parse/postgres_regress/errors.metadata.json +++ b/parser/testdata/parse/postgres_regress/errors.metadata.json @@ -11,8 +11,6 @@ "021", "022", "023", - "024", - "025", "026", "027", "028", diff --git a/parser/testdata/parse/postgres_regress/event_trigger.metadata.json b/parser/testdata/parse/postgres_regress/event_trigger.metadata.json index bfff1b8..f16e1c7 100644 --- a/parser/testdata/parse/postgres_regress/event_trigger.metadata.json +++ b/parser/testdata/parse/postgres_regress/event_trigger.metadata.json @@ -117,11 +117,9 @@ "138", "139", "140", - "141", "143", "145", "147", - "148", "149", "150", "151", diff --git a/parser/testdata/parse/postgres_regress/explain.metadata.json b/parser/testdata/parse/postgres_regress/explain.metadata.json index 88f0d8c..3eaab8e 100644 --- a/parser/testdata/parse/postgres_regress/explain.metadata.json +++ b/parser/testdata/parse/postgres_regress/explain.metadata.json @@ -2,16 +2,12 @@ "todo": [ "001", "002", - "016", - "020", "029", "030", "031", "032", "033", "035", - "036", - "042", "043", "044" ] diff --git a/parser/testdata/parse/postgres_regress/expressions.metadata.json b/parser/testdata/parse/postgres_regress/expressions.metadata.json index c5745b0..3ded1ce 100644 --- a/parser/testdata/parse/postgres_regress/expressions.metadata.json +++ b/parser/testdata/parse/postgres_regress/expressions.metadata.json @@ -1,20 +1,15 @@ { "todo": [ - "020", "021", "022", "023", "024", "025", "026", - "027", "028", "029", - "031", "032", "033", - "049", - "050", "051", "052", "053", @@ -27,7 +22,6 @@ "060", "061", "062", - "063", - "071" + "063" ] } diff --git a/parser/testdata/parse/postgres_regress/fast_default.metadata.json b/parser/testdata/parse/postgres_regress/fast_default.metadata.json index 6bdb1cc..8f0b084 100644 --- a/parser/testdata/parse/postgres_regress/fast_default.metadata.json +++ b/parser/testdata/parse/postgres_regress/fast_default.metadata.json @@ -127,11 +127,9 @@ "227", "228", "230", - "232", "233", "235", "236", - "242", "243", "244", "245", diff --git a/parser/testdata/parse/postgres_regress/foreign_key.metadata.json b/parser/testdata/parse/postgres_regress/foreign_key.metadata.json index 9809870..f9892de 100644 --- a/parser/testdata/parse/postgres_regress/foreign_key.metadata.json +++ b/parser/testdata/parse/postgres_regress/foreign_key.metadata.json @@ -22,7 +22,6 @@ "084", "1000", "1005", - "1006", "1008", "1009", "1010", @@ -36,30 +35,16 @@ "1022", "1023", "1024", - "1026", "1028", - "1029", "103", "1030", "1031", "1037", "1038", "104", - "1043", - "1047", - "1048", "105", - "1052", - "1053", - "1058", - "1059", "106", - "1064", "1065", - "1067", - "1069", - "1072", - "1074", "1075", "1076", "1077", @@ -200,25 +185,15 @@ "341", "342", "343", - "345", - "349", "350", "351", "352", - "353", - "356", - "357", - "360", "361", "362", "363", - "364", - "369", "370", "371", "372", - "373", - "375", "376", "377", "378", @@ -237,35 +212,14 @@ "391", "392", "393", - "395", - "398", - "399", - "401", - "403", - "404", - "405", - "407", - "409", - "410", - "412", - "414", - "415", "417", - "418", - "420", - "421", - "423", "424", "425", "426", "427", "428", "432", - "441", - "446", "447", - "449", - "454", "455", "456", "463", @@ -288,20 +242,8 @@ "502", "503", "504", - "506", - "508", - "510", - "511", - "512", - "514", - "516", - "517", - "518", "520", - "521", - "522", "524", - "525", "526", "527", "528", @@ -341,27 +283,20 @@ "598", "599", "601", - "602", "603", "605", "613", "614", "621", "622", - "623", - "626", "627", "628", - "629", - "636", "637", "638", "644", "645", "646", - "647", "648", - "649", "650", "651", "652", @@ -444,10 +379,6 @@ "755", "756", "757", - "758", - "762", - "763", - "767", "768", "771", "772", @@ -522,20 +453,12 @@ "885", "886", "887", - "889", - "892", - "893", - "897", - "898", - "902", "903", "904", "905", "906", "907", "908", - "911", - "914", "915", "916", "917", @@ -546,8 +469,6 @@ "922", "925", "926", - "927", - "930", "931", "932", "933", @@ -555,8 +476,6 @@ "935", "936", "937", - "940", - "943", "944", "945", "946", @@ -566,8 +485,6 @@ "950", "951", "952", - "955", - "958", "959", "960", "963", @@ -581,7 +498,6 @@ "971", "972", "979", - "980", "982", "983", "984", @@ -589,7 +505,6 @@ "986", "987", "992", - "993", "995", "996", "997", diff --git a/parser/testdata/parse/postgres_regress/generated.metadata.json b/parser/testdata/parse/postgres_regress/generated.metadata.json index 973316e..b66ba58 100644 --- a/parser/testdata/parse/postgres_regress/generated.metadata.json +++ b/parser/testdata/parse/postgres_regress/generated.metadata.json @@ -53,7 +53,6 @@ "097", "102", "103", - "108", - "113" + "108" ] } diff --git a/parser/testdata/parse/postgres_regress/groupingsets.metadata.json b/parser/testdata/parse/postgres_regress/groupingsets.metadata.json index a6f1862..bdd92b2 100644 --- a/parser/testdata/parse/postgres_regress/groupingsets.metadata.json +++ b/parser/testdata/parse/postgres_regress/groupingsets.metadata.json @@ -30,10 +30,8 @@ "111", "113", "115", - "116", "118", "121", - "123", "131", "132", "134", diff --git a/parser/testdata/parse/postgres_regress/guc.metadata.json b/parser/testdata/parse/postgres_regress/guc.metadata.json index 0acca2b..2d7f68e 100644 --- a/parser/testdata/parse/postgres_regress/guc.metadata.json +++ b/parser/testdata/parse/postgres_regress/guc.metadata.json @@ -1,30 +1,6 @@ { "todo": [ - "012", - "018", - "022", - "028", - "032", - "037", - "043", - "046", - "051", - "057", - "061", - "065", - "069", - "073", - "079", - "083", - "087", - "091", - "097", - "101", - "105", - "113", - "138", "141", - "147", "149", "170", "174", diff --git a/parser/testdata/parse/postgres_regress/hash_index.metadata.json b/parser/testdata/parse/postgres_regress/hash_index.metadata.json index 954567f..12dd7e2 100644 --- a/parser/testdata/parse/postgres_regress/hash_index.metadata.json +++ b/parser/testdata/parse/postgres_regress/hash_index.metadata.json @@ -17,24 +17,14 @@ "019", "044", "046", - "048", - "056", "059", "060", "061", "062", "063", "064", - "066", - "068", "070", - "071", - "073", - "075", "078", - "079", - "081", - "083", "086", "087", "088", diff --git a/parser/testdata/parse/postgres_regress/identity.metadata.json b/parser/testdata/parse/postgres_regress/identity.metadata.json index c77dd68..56c9f23 100644 --- a/parser/testdata/parse/postgres_regress/identity.metadata.json +++ b/parser/testdata/parse/postgres_regress/identity.metadata.json @@ -95,10 +95,8 @@ "210", "211", "214", - "215", "216", "217", - "218", "219", "223", "224", diff --git a/parser/testdata/parse/postgres_regress/incremental_sort.metadata.json b/parser/testdata/parse/postgres_regress/incremental_sort.metadata.json index e798600..6ee51e3 100644 --- a/parser/testdata/parse/postgres_regress/incremental_sort.metadata.json +++ b/parser/testdata/parse/postgres_regress/incremental_sort.metadata.json @@ -18,9 +18,7 @@ "032", "033", "035", - "037", "042", - "044", "050", "051", "053", diff --git a/parser/testdata/parse/postgres_regress/indexing.metadata.json b/parser/testdata/parse/postgres_regress/indexing.metadata.json index f2d4967..45b02ea 100644 --- a/parser/testdata/parse/postgres_regress/indexing.metadata.json +++ b/parser/testdata/parse/postgres_regress/indexing.metadata.json @@ -478,7 +478,6 @@ "541", "542", "544", - "545", "546", "547", "548", @@ -489,7 +488,6 @@ "554", "556", "557", - "558", "560" ] } diff --git a/parser/testdata/parse/postgres_regress/inherit.metadata.json b/parser/testdata/parse/postgres_regress/inherit.metadata.json index d4e5974..54e44a7 100644 --- a/parser/testdata/parse/postgres_regress/inherit.metadata.json +++ b/parser/testdata/parse/postgres_regress/inherit.metadata.json @@ -28,7 +28,6 @@ "124", "125", "126", - "130", "134", "135", "136", @@ -419,12 +418,6 @@ "637", "638", "639", - "652", - "656", - "660", - "664", - "668", - "672", "677" ] } diff --git a/parser/testdata/parse/postgres_regress/insert.metadata.json b/parser/testdata/parse/postgres_regress/insert.metadata.json index d2db2b2..71486f1 100644 --- a/parser/testdata/parse/postgres_regress/insert.metadata.json +++ b/parser/testdata/parse/postgres_regress/insert.metadata.json @@ -63,7 +63,6 @@ "172", "173", "174", - "175", "181", "182", "183", @@ -83,7 +82,6 @@ "206", "208", "209", - "213", "214", "215", "216", @@ -123,9 +121,7 @@ "264", "265", "266", - "267", "274", - "275", "276", "277", "284", diff --git a/parser/testdata/parse/postgres_regress/insert_conflict.metadata.json b/parser/testdata/parse/postgres_regress/insert_conflict.metadata.json index d8fef6e..017994c 100644 --- a/parser/testdata/parse/postgres_regress/insert_conflict.metadata.json +++ b/parser/testdata/parse/postgres_regress/insert_conflict.metadata.json @@ -82,31 +82,15 @@ "165", "172", "173", - "174", - "176", - "177", - "179", - "180", - "182", - "183", - "185", - "186", - "188", - "189", - "191", "193", "194", "195", "204", "205", - "206", "210", "211", - "212", "216", "217", - "218", - "222", "226", "227", "228", @@ -124,10 +108,8 @@ "244", "245", "246", - "247", "251", "252", - "253", "256", "257" ] diff --git a/parser/testdata/parse/postgres_regress/join.metadata.json b/parser/testdata/parse/postgres_regress/join.metadata.json index 3277c63..d8dd3a7 100644 --- a/parser/testdata/parse/postgres_regress/join.metadata.json +++ b/parser/testdata/parse/postgres_regress/join.metadata.json @@ -10,8 +10,6 @@ "070", "090", "096", - "114", - "118", "119", "121", "124", @@ -69,22 +67,16 @@ "250", "251", "255", - "261", "265", "266", - "268", - "269", "270", "271", "272", "273", "276", - "277", - "282", "283", "284", "285", - "294", "297", "299", "300", @@ -153,10 +145,8 @@ "400", "402", "404", - "406", "407", "408", - "409", "410", "412", "414", @@ -167,7 +157,6 @@ "426", "428", "430", - "432", "433", "434", "435", @@ -198,37 +187,26 @@ "464", "465", "466", - "467", "468", "469", "473", "475", "477", "479", - "480", "481", "482", - "487", - "488", "489", "492", "493", "494", - "495", - "496", "497", "498", "499", - "501", - "502", "503", "505", - "507", - "508", "509", "511", "512", - "514", "515", "517", "518", @@ -269,22 +247,18 @@ "614", "616", "617", - "618", "619", "621", "622", "623", "624", "625", - "626", - "627", "628", "629", "632", "633", "634", "635", - "636", "637", "638", "639", diff --git a/parser/testdata/parse/postgres_regress/join_hash.metadata.json b/parser/testdata/parse/postgres_regress/join_hash.metadata.json index 2fa4658..15e874f 100644 --- a/parser/testdata/parse/postgres_regress/join_hash.metadata.json +++ b/parser/testdata/parse/postgres_regress/join_hash.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "001", "005", "006", "007", @@ -16,94 +15,39 @@ "018", "021", "022", - "023", "027", - "030", - "031", "036", - "039", - "040", "045", - "048", - "049", "053", - "056", - "057", "062", - "065", - "066", "071", - "075", - "076", "080", - "083", - "084", "089", - "092", - "093", "098", - "101", - "102", "106", - "109", - "110", "115", - "118", - "119", "124", - "127", - "128", - "134", "135", "136", "137", "138", - "139", "150", - "153", - "154", "165", - "168", - "169", "180", - "183", - "184", "195", - "198", - "199", "201", - "203", - "204", "207", - "209", - "210", "212", - "214", - "215", "217", - "219", - "220", "223", - "225", - "226", "228", - "230", - "231", "236", - "239", - "240", "245", "246", - "254", - "255", - "256", "259", "260", "270", "272", - "274", - "275", - "277", - "279" + "277" ] } diff --git a/parser/testdata/parse/postgres_regress/json.metadata.json b/parser/testdata/parse/postgres_regress/json.metadata.json index 6cd7b17..efc9d61 100644 --- a/parser/testdata/parse/postgres_regress/json.metadata.json +++ b/parser/testdata/parse/postgres_regress/json.metadata.json @@ -2,8 +2,6 @@ "todo": [ "065", "068", - "071", - "076", "092", "212", "213", diff --git a/parser/testdata/parse/postgres_regress/jsonb.metadata.json b/parser/testdata/parse/postgres_regress/jsonb.metadata.json index 20cb0ec..9f64d58 100644 --- a/parser/testdata/parse/postgres_regress/jsonb.metadata.json +++ b/parser/testdata/parse/postgres_regress/jsonb.metadata.json @@ -3,8 +3,6 @@ "001", "058", "059", - "062", - "067", "079", "266", "353", diff --git a/parser/testdata/parse/postgres_regress/jsonb_jsonpath.metadata.json b/parser/testdata/parse/postgres_regress/jsonb_jsonpath.metadata.json index 1a72ead..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/jsonb_jsonpath.metadata.json +++ b/parser/testdata/parse/postgres_regress/jsonb_jsonpath.metadata.json @@ -1,8 +1,3 @@ { - "todo": [ - "524", - "527", - "530", - "535" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/largeobject.metadata.json b/parser/testdata/parse/postgres_regress/largeobject.metadata.json index 7e36ccd..5a5c0c1 100644 --- a/parser/testdata/parse/postgres_regress/largeobject.metadata.json +++ b/parser/testdata/parse/postgres_regress/largeobject.metadata.json @@ -4,42 +4,8 @@ "006", "007", "009", - "011", - "015", - "017", - "027", - "028", - "030", "031", - "032", - "044", - "045", - "060", - "062", - "064", - "075", - "079", "091", - "092", - "095", - "096", - "098", - "099", - "101", - "102", - "104", - "105", - "107", - "108", - "110", - "111", - "113", - "114", - "116", - "117", - "119", - "120", - "122", "123" ] } diff --git a/parser/testdata/parse/postgres_regress/limit.metadata.json b/parser/testdata/parse/postgres_regress/limit.metadata.json index eda3faf..e1dd481 100644 --- a/parser/testdata/parse/postgres_regress/limit.metadata.json +++ b/parser/testdata/parse/postgres_regress/limit.metadata.json @@ -1,7 +1,5 @@ { "todo": [ - "012", - "050", "052", "053", "056", diff --git a/parser/testdata/parse/postgres_regress/lock.metadata.json b/parser/testdata/parse/postgres_regress/lock.metadata.json index b8f06cf..1ebb50f 100644 --- a/parser/testdata/parse/postgres_regress/lock.metadata.json +++ b/parser/testdata/parse/postgres_regress/lock.metadata.json @@ -9,88 +9,17 @@ "009", "010", "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "021", - "022", - "023", - "024", - "025", - "026", - "027", - "028", - "029", - "030", - "031", - "032", - "033", - "034", - "035", - "037", - "038", - "039", - "041", - "042", - "043", - "045", - "046", - "047", - "049", - "050", - "051", - "053", - "054", - "055", - "057", "058", - "059", - "060", - "061", "062", - "063", - "064", - "065", "066", "067", - "068", - "069", - "070", "071", - "073", - "074", - "075", - "076", - "077", - "078", - "079", - "080", - "081", "083", - "085", - "086", - "087", "089", - "091", - "092", - "094", "096", "097", - "099", - "100", - "101", "103", - "105", - "106", - "107", "109", - "110", - "111", - "113", "115", "116", "117", diff --git a/parser/testdata/parse/postgres_regress/matview.metadata.json b/parser/testdata/parse/postgres_regress/matview.metadata.json index 57af059..956842d 100644 --- a/parser/testdata/parse/postgres_regress/matview.metadata.json +++ b/parser/testdata/parse/postgres_regress/matview.metadata.json @@ -34,9 +34,7 @@ "053", "054", "057", - "058", "059", - "060", "061", "062", "063", @@ -101,9 +99,7 @@ "145", "146", "147", - "149", "150", - "154", "157", "158", "160", diff --git a/parser/testdata/parse/postgres_regress/merge.metadata.json b/parser/testdata/parse/postgres_regress/merge.metadata.json index d7ff4dc..60d11f7 100644 --- a/parser/testdata/parse/postgres_regress/merge.metadata.json +++ b/parser/testdata/parse/postgres_regress/merge.metadata.json @@ -16,62 +16,16 @@ "035", "040", "043", - "051", - "053", - "060", - "063", - "064", - "067", "069", "070", "071", "072", "073", "075", - "080", - "083", - "084", - "087", - "088", - "091", - "092", - "095", - "099", - "101", - "102", - "104", - "110", - "113", "118", "119", - "120", - "123", - "124", - "127", - "128", - "131", - "132", - "135", - "138", - "141", - "143", - "146", - "148", - "151", - "152", - "155", - "156", - "158", "159", "160", - "162", - "165", - "170", - "173", - "174", - "177", - "195", - "198", "203", "204", "205", @@ -86,67 +40,21 @@ "214", "215", "216", - "217", - "221", - "222", - "226", "227", "229", "230", "232", "233", - "234", "235", - "236", - "237", - "240", - "241", - "244", - "245", - "248", - "249", - "252", - "253", - "256", - "257", - "260", - "261", "262", - "265", - "266", - "270", - "271", - "275", "276", "277", - "280", - "283", "284", - "285", - "288", - "289", - "291", - "292", - "296", - "297", - "300", - "303", "304", - "307", "310", - "312", - "315", - "316", - "318", - "319", "320", - "322", - "323", "324", - "326", - "327", "328", - "330", "331", "332", "335", @@ -157,12 +65,6 @@ "348", "349", "350", - "351", - "354", - "355", - "358", - "359", - "362", "363", "364", "365", @@ -170,18 +72,7 @@ "367", "368", "369", - "372", - "375", - "376", - "379", - "380", "381", - "384", - "385", - "388", - "389", - "390", - "393", "394", "395", "396", @@ -193,29 +84,17 @@ "402", "403", "404", - "406", "407", - "409", - "410", - "413", - "414", "415", - "417", - "418", "419", "420", "421", - "423", - "424", "425", "426", "427", - "429", - "430", "431", "432", "433", - "435", "436", "437", "438", @@ -226,8 +105,6 @@ "443", "444", "445", - "449", - "452", "453", "454", "455", @@ -243,7 +120,6 @@ "469", "484", "485", - "486", "488", "489", "493", @@ -256,15 +132,9 @@ "501", "502", "510", - "519", - "522", - "525", - "528", "531", "532", "533", - "534", - "537", "538", "539", "540", diff --git a/parser/testdata/parse/postgres_regress/mvcc.metadata.json b/parser/testdata/parse/postgres_regress/mvcc.metadata.json index 9fe3dde..bd05de3 100644 --- a/parser/testdata/parse/postgres_regress/mvcc.metadata.json +++ b/parser/testdata/parse/postgres_regress/mvcc.metadata.json @@ -1,9 +1,7 @@ { "todo": [ - "001", "005", "006", - "009", - "011" + "009" ] } diff --git a/parser/testdata/parse/postgres_regress/namespace.metadata.json b/parser/testdata/parse/postgres_regress/namespace.metadata.json index 8657686..1a4a238 100644 --- a/parser/testdata/parse/postgres_regress/namespace.metadata.json +++ b/parser/testdata/parse/postgres_regress/namespace.metadata.json @@ -1,12 +1,8 @@ { "todo": [ "002", - "004", "006", - "007", - "009", "011", - "013", "015", "022", "026", diff --git a/parser/testdata/parse/postgres_regress/numeric.metadata.json b/parser/testdata/parse/postgres_regress/numeric.metadata.json index 3c391e9..e29df22 100644 --- a/parser/testdata/parse/postgres_regress/numeric.metadata.json +++ b/parser/testdata/parse/postgres_regress/numeric.metadata.json @@ -10,20 +10,7 @@ "008", "009", "010", - "011", - "1003", "1004", - "412", - "413", - "424", - "425", - "436", - "437", - "448", - "449", - "460", - "461", - "472", "473", "474", "475", @@ -49,10 +36,7 @@ "753", "814", "982", - "989", "990", - "994", - "998", "999" ] } diff --git a/parser/testdata/parse/postgres_regress/numeric_big.metadata.json b/parser/testdata/parse/postgres_regress/numeric_big.metadata.json index 14f9ec0..1212a15 100644 --- a/parser/testdata/parse/postgres_regress/numeric_big.metadata.json +++ b/parser/testdata/parse/postgres_regress/numeric_big.metadata.json @@ -20,18 +20,6 @@ "018", "019", "020", - "021", - "422", - "423", - "434", - "435", - "446", - "447", - "458", - "459", - "470", - "471", - "482", "483", "484", "485", diff --git a/parser/testdata/parse/postgres_regress/partition_prune.metadata.json b/parser/testdata/parse/postgres_regress/partition_prune.metadata.json index ff5326a..43b00a9 100644 --- a/parser/testdata/parse/postgres_regress/partition_prune.metadata.json +++ b/parser/testdata/parse/postgres_regress/partition_prune.metadata.json @@ -289,14 +289,10 @@ "333", "334", "335", - "337", - "341", - "342", "343", "344", "345", "346", - "347", "348", "349", "361", @@ -316,7 +312,6 @@ "394", "399", "410", - "412", "414", "416", "417", diff --git a/parser/testdata/parse/postgres_regress/plpgsql.metadata.json b/parser/testdata/parse/postgres_regress/plpgsql.metadata.json index 20def0f..ece8cd0 100644 --- a/parser/testdata/parse/postgres_regress/plpgsql.metadata.json +++ b/parser/testdata/parse/postgres_regress/plpgsql.metadata.json @@ -149,8 +149,6 @@ "385", "387", "388", - "389", - "394", "396", "398", "400", @@ -336,26 +334,16 @@ "716", "718", "719", - "720", "721", - "722", - "724", - "726", "727", "728", "729", "730", "731", - "734", - "737", - "740", - "743", "744", "745", - "746", "747", "748", - "749", "750", "753", "755", diff --git a/parser/testdata/parse/postgres_regress/portals.metadata.json b/parser/testdata/parse/postgres_regress/portals.metadata.json index 000cfbd..687a810 100644 --- a/parser/testdata/parse/postgres_regress/portals.metadata.json +++ b/parser/testdata/parse/postgres_regress/portals.metadata.json @@ -1,95 +1,27 @@ { "todo": [ - "001", - "084", - "086", - "090", - "091", - "096", - "098", - "102", - "108", - "112", - "118", - "120", - "122", "123", - "126", "127", "128", "129", - "130", - "135", - "136", - "140", "143", "144", - "145", - "149", - "155", - "161", "162", - "165", - "173", - "175", - "180", - "182", - "197", - "199", - "213", - "215", - "221", "224", - "227", - "236", - "238", - "242", - "243", - "247", - "248", - "253", - "257", - "260", - "261", - "264", - "265", - "268", - "269", - "272", - "273", - "276", - "277", - "279", "280", "281", - "282", - "286", - "287", "288", - "293", - "294", "295", "296", "297", - "308", - "309", "311", - "316", "317", - "318", "319", - "324", - "325", "326", "327", - "331", - "332", "333", "334", - "338", - "339", "341", - "346", "347" ] } diff --git a/parser/testdata/parse/postgres_regress/portals_p2.metadata.json b/parser/testdata/parse/postgres_regress/portals_p2.metadata.json index a9dd67f..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/portals_p2.metadata.json +++ b/parser/testdata/parse/postgres_regress/portals_p2.metadata.json @@ -1,6 +1,3 @@ { - "todo": [ - "001", - "041" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/prepared_xacts.metadata.json b/parser/testdata/parse/postgres_regress/prepared_xacts.metadata.json index 2d12b82..53bd559 100644 --- a/parser/testdata/parse/postgres_regress/prepared_xacts.metadata.json +++ b/parser/testdata/parse/postgres_regress/prepared_xacts.metadata.json @@ -1,44 +1,11 @@ { "todo": [ "001", - "003", - "006", - "009", - "012", - "015", - "017", - "019", - "022", - "024", - "026", - "028", - "030", - "033", - "035", - "038", - "040", "042", - "043", - "046", - "047", "048", - "050", - "052", - "053", - "055", "056", - "057", "058", "059", - "064", - "068", - "069", - "070", - "072", - "073", - "074", - "075", - "078", "081", "082", "083" diff --git a/parser/testdata/parse/postgres_regress/privileges.metadata.json b/parser/testdata/parse/postgres_regress/privileges.metadata.json index 069d86d..09c9a9e 100644 --- a/parser/testdata/parse/postgres_regress/privileges.metadata.json +++ b/parser/testdata/parse/postgres_regress/privileges.metadata.json @@ -5,9 +5,7 @@ "027", "028", "029", - "031", "032", - "034", "035", "037", "038", @@ -36,8 +34,6 @@ "085", "086", "092", - "099", - "105", "116", "122", "123", @@ -58,10 +54,6 @@ "142", "143", "147", - "152", - "153", - "154", - "155", "156", "158", "159", @@ -71,10 +63,6 @@ "164", "165", "166", - "179", - "180", - "181", - "182", "184", "188", "189", @@ -104,13 +92,8 @@ "220", "222", "223", - "227", - "231", - "233", "235", - "238", "240", - "243", "245", "246", "247", diff --git a/parser/testdata/parse/postgres_regress/psql.metadata.json b/parser/testdata/parse/postgres_regress/psql.metadata.json index 6bd9557..c2b0a13 100644 --- a/parser/testdata/parse/postgres_regress/psql.metadata.json +++ b/parser/testdata/parse/postgres_regress/psql.metadata.json @@ -2,8 +2,6 @@ "todo": [ "026", "029", - "033", - "034", "035", "121", "125", diff --git a/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json b/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json index fd14daf..9e19b73 100644 --- a/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json +++ b/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json @@ -12,8 +12,6 @@ "034", "035", "038", - "039", - "054", "061", "065", "068", @@ -154,13 +152,9 @@ "376", "378", "380", - "381", "383", - "385", "386", - "387", "389", - "391", "392", "393", "394", diff --git a/parser/testdata/parse/postgres_regress/reindex_catalog.metadata.json b/parser/testdata/parse/postgres_regress/reindex_catalog.metadata.json index 4289c36..60bcbc5 100644 --- a/parser/testdata/parse/postgres_regress/reindex_catalog.metadata.json +++ b/parser/testdata/parse/postgres_regress/reindex_catalog.metadata.json @@ -11,13 +11,11 @@ "009", "010", "011", - "012", "014", "015", "016", "017", "018", - "019", - "020" + "019" ] } diff --git a/parser/testdata/parse/postgres_regress/rowtypes.metadata.json b/parser/testdata/parse/postgres_regress/rowtypes.metadata.json index 009e940..d066ee8 100644 --- a/parser/testdata/parse/postgres_regress/rowtypes.metadata.json +++ b/parser/testdata/parse/postgres_regress/rowtypes.metadata.json @@ -30,13 +30,11 @@ "152", "155", "160", - "161", "162", "163", "164", "165", "166", - "170", "171", "172", "173", diff --git a/parser/testdata/parse/postgres_regress/rules.metadata.json b/parser/testdata/parse/postgres_regress/rules.metadata.json index 88f8493..ca5b6ca 100644 --- a/parser/testdata/parse/postgres_regress/rules.metadata.json +++ b/parser/testdata/parse/postgres_regress/rules.metadata.json @@ -198,9 +198,7 @@ "569", "571", "572", - "573", "574", - "575", "576", "577", "578", diff --git a/parser/testdata/parse/postgres_regress/select_parallel.metadata.json b/parser/testdata/parse/postgres_regress/select_parallel.metadata.json index 0a72acb..33afd00 100644 --- a/parser/testdata/parse/postgres_regress/select_parallel.metadata.json +++ b/parser/testdata/parse/postgres_regress/select_parallel.metadata.json @@ -1,7 +1,6 @@ { "todo": [ "001", - "002", "007", "009", "010", @@ -76,23 +75,13 @@ "162", "165", "166", - "167", "169", - "170", "171", - "172", - "175", "176", "186", "187", - "188", "190", - "191", - "192", - "195", - "196", "198", - "199", "200", "202", "203", @@ -101,16 +90,13 @@ "208", "211", "212", - "213", "215", "216", "224", "225", - "227", "228", "229", "231", - "232", - "235" + "232" ] } diff --git a/parser/testdata/parse/postgres_regress/sequence.metadata.json b/parser/testdata/parse/postgres_regress/sequence.metadata.json index e9c2907..958cff5 100644 --- a/parser/testdata/parse/postgres_regress/sequence.metadata.json +++ b/parser/testdata/parse/postgres_regress/sequence.metadata.json @@ -78,65 +78,37 @@ "156", "157", "158", - "159", - "162", - "163", - "166", - "168", "170", "171", "172", - "174", - "175", "177", "178", "179", - "181", - "182", "184", "185", "186", - "188", - "189", "191", "193", "194", - "196", - "197", "199", "201", "202", - "204", - "205", "207", "209", "210", - "212", - "213", "215", "217", "218", - "220", - "221", "223", "225", "226", - "228", - "229", "231", "233", "234", - "236", - "237", "239", "240", - "241", - "243", "244", - "247", - "248", "250", - "251", "252", "255", "256", diff --git a/parser/testdata/parse/postgres_regress/stats.metadata.json b/parser/testdata/parse/postgres_regress/stats.metadata.json index 649b070..73e40ca 100644 --- a/parser/testdata/parse/postgres_regress/stats.metadata.json +++ b/parser/testdata/parse/postgres_regress/stats.metadata.json @@ -1,128 +1,48 @@ { "todo": [ - "007", "009", - "010", "011", "012", "013", "014", "015", - "019", - "025", - "027", - "029", - "030", - "033", - "035", - "037", - "038", - "039", - "042", - "045", - "047", - "048", - "049", - "052", - "054", - "060", - "066", "067", "069", - "071", - "080", - "081", - "083", - "085", - "088", - "089", - "091", - "095", "097", - "100", - "103", "104", - "105", - "108", - "110", - "112", "113", - "114", "117", "120", "123", "128", - "134", "137", - "139", - "145", "148", - "150", - "155", - "157", - "160", "161", - "162", - "164", - "168", - "169", "170", - "171", - "172", - "173", - "176", - "177", "178", - "179", - "180", - "181", "183", "184", - "185", "186", - "190", - "193", "197", "200", - "203", - "206", "210", - "213", - "217", "221", - "224", - "228", "232", - "235", - "238", "240", - "242", "246", "247", "253", "254", - "291", - "298", - "299", - "311", "316", "317", "323", - "325", "326", - "330", "332", "336", - "340", "342", - "343", "350", - "361", "362", - "364", - "369", "374", - "376", "380", "382", "391", diff --git a/parser/testdata/parse/postgres_regress/stats_ext.metadata.json b/parser/testdata/parse/postgres_regress/stats_ext.metadata.json index e0c0ca8..1353514 100644 --- a/parser/testdata/parse/postgres_regress/stats_ext.metadata.json +++ b/parser/testdata/parse/postgres_regress/stats_ext.metadata.json @@ -110,7 +110,6 @@ "139", "149", "150", - "162", "164", "175", "189", @@ -119,7 +118,6 @@ "199", "200", "205", - "206", "208", "216", "217", @@ -146,12 +144,10 @@ "274", "277", "278", - "281", "282", "284", "287", "288", - "291", "292", "294", "320", @@ -171,12 +167,10 @@ "425", "428", "429", - "432", "433", "435", "438", "439", - "442", "443", "445", "470", @@ -184,7 +178,6 @@ "497", "499", "501", - "503", "504", "506", "517", @@ -196,14 +189,11 @@ "533", "534", "535", - "547", "548", "550", "556", "557", - "563", "565", - "567", "568", "570", "574", diff --git a/parser/testdata/parse/postgres_regress/subscription.metadata.json b/parser/testdata/parse/postgres_regress/subscription.metadata.json index f787d13..84cd507 100644 --- a/parser/testdata/parse/postgres_regress/subscription.metadata.json +++ b/parser/testdata/parse/postgres_regress/subscription.metadata.json @@ -2,9 +2,7 @@ "todo": [ "006", "007", - "008", "009", - "010", "011", "012", "013", @@ -43,23 +41,17 @@ "055", "056", "057", - "058", "059", "060", - "061", "063", "065", "066", "067", "068", "069", - "070", "071", - "072", "073", - "074", "075", - "076", "077", "078", "079", @@ -83,12 +75,8 @@ "097", "098", "099", - "100", "101", - "102", - "103", "104", - "105", "106", "108", "109", @@ -121,9 +109,7 @@ "145", "147", "149", - "150", "151", - "152", "153", "154" ] diff --git a/parser/testdata/parse/postgres_regress/subselect.metadata.json b/parser/testdata/parse/postgres_regress/subselect.metadata.json index a9d0cea..eea4987 100644 --- a/parser/testdata/parse/postgres_regress/subselect.metadata.json +++ b/parser/testdata/parse/postgres_regress/subselect.metadata.json @@ -32,8 +32,6 @@ "119", "121", "126", - "130", - "132", "134", "139", "144", @@ -41,7 +39,6 @@ "152", "156", "158", - "162", "163", "164", "165", @@ -49,7 +46,6 @@ "168", "170", "171", - "173", "174", "176", "178", @@ -82,12 +78,8 @@ "226", "229", "230", - "231", - "235", - "236", "237", "239", - "241", "242", "244", "246", diff --git a/parser/testdata/parse/postgres_regress/sysviews.metadata.json b/parser/testdata/parse/postgres_regress/sysviews.metadata.json index f2165e7..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/sysviews.metadata.json +++ b/parser/testdata/parse/postgres_regress/sysviews.metadata.json @@ -1,6 +1,3 @@ { - "todo": [ - "004", - "008" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/tablesample.metadata.json b/parser/testdata/parse/postgres_regress/tablesample.metadata.json index 9805f86..9873a43 100644 --- a/parser/testdata/parse/postgres_regress/tablesample.metadata.json +++ b/parser/testdata/parse/postgres_regress/tablesample.metadata.json @@ -3,8 +3,6 @@ "001", "011", "012", - "013", - "029", "030", "031", "032", diff --git a/parser/testdata/parse/postgres_regress/tablespace.metadata.json b/parser/testdata/parse/postgres_regress/tablespace.metadata.json index cff1c51..9e4a609 100644 --- a/parser/testdata/parse/postgres_regress/tablespace.metadata.json +++ b/parser/testdata/parse/postgres_regress/tablespace.metadata.json @@ -23,10 +23,8 @@ "025", "026", "027", - "028", "029", "030", - "031", "035", "037", "038", @@ -125,9 +123,7 @@ "176", "177", "178", - "179", "180", - "181", "184", "185", "186", diff --git a/parser/testdata/parse/postgres_regress/temp.metadata.json b/parser/testdata/parse/postgres_regress/temp.metadata.json index 0044aa9..ad6177a 100644 --- a/parser/testdata/parse/postgres_regress/temp.metadata.json +++ b/parser/testdata/parse/postgres_regress/temp.metadata.json @@ -15,94 +15,47 @@ "019", "021", "022", - "023", - "027", "029", - "030", "031", - "033", "035", - "036", "037", - "041", - "043", "044", - "046", - "048", "049", - "051", "053", "054", - "055", "056", "057", - "060", - "063", "064", "065", - "066", "067", "069", "071", "072", "082", "084", - "089", "090", "091", - "093", "095", - "096", "097", "098", "099", - "101", - "103", "104", "105", "106", - "108", "111", - "112", "113", "114", - "116", - "118", "119", "120", - "123", "126", - "127", "128", - "129", "130", - "131", "132", - "133", - "134", "135", - "136", - "137", "138", - "139", - "140", "141", - "142", - "143", "144", - "145", "146", - "147", - "149", - "150", - "152", - "153", - "154", - "155", - "156", - "157", - "158", - "160", - "162" + "157" ] } diff --git a/parser/testdata/parse/postgres_regress/tid.metadata.json b/parser/testdata/parse/postgres_regress/tid.metadata.json index 9b7b7f5..995e0a2 100644 --- a/parser/testdata/parse/postgres_regress/tid.metadata.json +++ b/parser/testdata/parse/postgres_regress/tid.metadata.json @@ -1,11 +1,9 @@ { "todo": [ "008", - "012", "013", "016", "018", - "019", "020", "022", "023", @@ -16,7 +14,6 @@ "031", "032", "036", - "037", "038", "040", "041" diff --git a/parser/testdata/parse/postgres_regress/tidrangescan.metadata.json b/parser/testdata/parse/postgres_regress/tidrangescan.metadata.json index 7ba0fc8..b402087 100644 --- a/parser/testdata/parse/postgres_regress/tidrangescan.metadata.json +++ b/parser/testdata/parse/postgres_regress/tidrangescan.metadata.json @@ -15,8 +15,6 @@ "026", "033", "035", - "036", - "043", "044" ] } diff --git a/parser/testdata/parse/postgres_regress/tidscan.metadata.json b/parser/testdata/parse/postgres_regress/tidscan.metadata.json index 923d32c..999a052 100644 --- a/parser/testdata/parse/postgres_regress/tidscan.metadata.json +++ b/parser/testdata/parse/postgres_regress/tidscan.metadata.json @@ -9,17 +9,11 @@ "014", "017", "019", - "022", - "027", - "028", "032", "034", "037", - "038", "039", "042", - "045", - "048", "049" ] } diff --git a/parser/testdata/parse/postgres_regress/timestamp.metadata.json b/parser/testdata/parse/postgres_regress/timestamp.metadata.json index 941c1bd..f23fe5c 100644 --- a/parser/testdata/parse/postgres_regress/timestamp.metadata.json +++ b/parser/testdata/parse/postgres_regress/timestamp.metadata.json @@ -1,10 +1,5 @@ { "todo": [ - "001", - "002", - "011", - "015", - "022", - "023" + "001" ] } diff --git a/parser/testdata/parse/postgres_regress/timestamptz.metadata.json b/parser/testdata/parse/postgres_regress/timestamptz.metadata.json index befabd3..489123e 100644 --- a/parser/testdata/parse/postgres_regress/timestamptz.metadata.json +++ b/parser/testdata/parse/postgres_regress/timestamptz.metadata.json @@ -1,17 +1,10 @@ { "todo": [ "001", - "002", - "013", - "017", - "024", - "025", "209", "217", - "354", "362", "365", - "366", "367", "369" ] diff --git a/parser/testdata/parse/postgres_regress/timetz.metadata.json b/parser/testdata/parse/postgres_regress/timetz.metadata.json index b6525ba..7814d26 100644 --- a/parser/testdata/parse/postgres_regress/timetz.metadata.json +++ b/parser/testdata/parse/postgres_regress/timetz.metadata.json @@ -1,8 +1,6 @@ { "todo": [ "001", - "051", - "053", - "057" + "053" ] } diff --git a/parser/testdata/parse/postgres_regress/transactions.metadata.json b/parser/testdata/parse/postgres_regress/transactions.metadata.json index 136733c..d77d4dc 100644 --- a/parser/testdata/parse/postgres_regress/transactions.metadata.json +++ b/parser/testdata/parse/postgres_regress/transactions.metadata.json @@ -1,145 +1,28 @@ { "todo": [ - "001", "002", - "005", - "007", "008", - "011", - "014", - "017", - "018", - "021", - "022", - "025", "026", "027", "028", - "029", - "033", - "034", - "039", - "044", - "045", - "047", - "053", - "054", - "056", - "059", - "061", - "064", - "066", "068", "076", - "077", "078", - "079", "081", - "082", "083", - "084", "085", "086", - "087", - "088", - "089", "090", - "091", "092", "093", - "094", - "099", - "101", - "103", - "104", - "105", - "107", - "108", - "109", - "111", - "112", - "113", - "115", - "118", - "119", - "121", - "122", - "123", "124", - "125", - "127", - "129", - "131", - "132", - "133", - "135", - "136", - "138", - "139", - "141", - "143", - "144", - "146", - "148", - "151", - "153", - "155", - "157", - "159", - "162", - "164", - "166", - "168", - "171", - "173", - "175", - "177", - "179", - "181", - "183", - "185", - "187", - "189", - "191", - "193", - "195", "197", - "198", - "199", - "200", - "201", - "202", - "204", - "205", - "206", - "208", - "210", - "212", - "214", - "216", - "220", - "222", - "224", - "225", - "227", "229", - "230", - "233", "234", - "235", - "238", "239", - "240", - "243", "244", - "245", - "248", - "249", - "250", "251", - "254", "255", - "258", "259", "260", "261", @@ -147,104 +30,18 @@ "263", "266", "267", - "268", - "269", "270", - "275", - "277", - "278", "279", - "285", - "287", - "289", "290", "291", - "292", - "296", - "299", - "302", "303", "304", "305", - "307", - "313", - "319", - "324", - "325", - "329", - "331", - "336", - "337", - "341", - "342", - "346", - "347", - "351", - "352", - "356", - "357", - "362", - "367", - "371", - "372", - "373", "376", "377", - "387", - "388", - "390", - "391", - "392", - "394", - "395", - "397", - "399", - "401", - "403", - "405", - "409", - "412", "414", - "416", "417", - "419", - "421", - "422", - "423", - "426", - "429", - "430", - "431", - "432", - "434", - "437", "439", - "441", - "443", - "445", - "447", - "449", - "451", - "453", - "455", - "456", - "458", - "460", - "461", - "463", - "465", - "467", - "469", - "471", - "473", - "475", - "477", - "481", - "482", - "484", - "485", - "487", - "488", - "490" + "481" ] } diff --git a/parser/testdata/parse/postgres_regress/triggers.metadata.json b/parser/testdata/parse/postgres_regress/triggers.metadata.json index 98c3ad9..f7c1e79 100644 --- a/parser/testdata/parse/postgres_regress/triggers.metadata.json +++ b/parser/testdata/parse/postgres_regress/triggers.metadata.json @@ -57,10 +57,6 @@ "1022", "1023", "1024", - "1026", - "1027", - "1029", - "1030", "1031", "1032", "1033", @@ -131,12 +127,10 @@ "187", "188", "189", - "190", "191", "192", "193", "194", - "195", "196", "197", "198", @@ -166,8 +160,6 @@ "249", "250", "251", - "253", - "256", "258", "259", "261", @@ -399,11 +391,9 @@ "589", "592", "595", - "599", "600", "604", "605", - "606", "608", "613", "614", @@ -420,10 +410,6 @@ "629", "630", "631", - "632", - "636", - "637", - "641", "642", "643", "644", @@ -633,9 +619,7 @@ "926", "927", "928", - "929", "931", - "932", "933", "934", "935", diff --git a/parser/testdata/parse/postgres_regress/truncate.metadata.json b/parser/testdata/parse/postgres_regress/truncate.metadata.json index fa4974f..cbeece4 100644 --- a/parser/testdata/parse/postgres_regress/truncate.metadata.json +++ b/parser/testdata/parse/postgres_regress/truncate.metadata.json @@ -1,81 +1,33 @@ { "todo": [ "001", - "005", - "006", - "007", - "009", - "010", - "011", "013", "014", "015", "016", - "017", - "018", - "019", - "020", - "021", - "022", - "023", - "024", - "025", - "026", - "027", "028", - "034", - "035", - "036", - "037", - "038", - "046", "049", "050", "053", "055", "057", - "059", - "061", - "063", - "064", - "066", - "068", - "069", - "073", - "077", - "078", - "082", - "086", "087", "088", "089", "090", "092", - "095", "098", - "099", "101", - "104", "107", "108", "109", "110", "111", "112", - "116", - "120", "124", - "128", - "132", - "136", - "137", - "140", "144", "146", - "147", "148", - "150", - "151", "152", "153", "154", @@ -85,10 +37,6 @@ "158", "159", "160", - "161", - "163", - "166", - "169", "171", "172", "173", @@ -99,12 +47,10 @@ "178", "179", "181", - "183", "185", "186", "187", "188", - "190", "193" ] } diff --git a/parser/testdata/parse/postgres_regress/tuplesort.metadata.json b/parser/testdata/parse/postgres_regress/tuplesort.metadata.json index 480a11f..db24a7c 100644 --- a/parser/testdata/parse/postgres_regress/tuplesort.metadata.json +++ b/parser/testdata/parse/postgres_regress/tuplesort.metadata.json @@ -9,30 +9,14 @@ "022", "023", "025", - "027", "029", - "032", - "033", "035", - "038", - "039", "041", - "044", - "045", "047", - "050", - "052", "054", - "070", - "071", "074", - "090", - "092", - "095", "096", - "098", "103", - "105", - "106" + "105" ] } diff --git a/parser/testdata/parse/postgres_regress/txid.metadata.json b/parser/testdata/parse/postgres_regress/txid.metadata.json index 5445416..288317c 100644 --- a/parser/testdata/parse/postgres_regress/txid.metadata.json +++ b/parser/testdata/parse/postgres_regress/txid.metadata.json @@ -1,16 +1,6 @@ { "todo": [ "008", - "024", - "028", - "029", - "031", - "032", - "034", - "035", - "043", - "044", - "045", - "047" + "045" ] } diff --git a/parser/testdata/parse/postgres_regress/updatable_views.metadata.json b/parser/testdata/parse/postgres_regress/updatable_views.metadata.json index 4e562e4..36066e4 100644 --- a/parser/testdata/parse/postgres_regress/updatable_views.metadata.json +++ b/parser/testdata/parse/postgres_regress/updatable_views.metadata.json @@ -50,17 +50,13 @@ "1035", "1046", "1047", - "1048", "1059", "1060", "1061", - "1062", "1073", "1074", - "1075", "1086", "1087", - "1088", "1092", "1093", "1094", diff --git a/parser/testdata/parse/postgres_regress/uuid.metadata.json b/parser/testdata/parse/postgres_regress/uuid.metadata.json index 38e45f6..102dcc5 100644 --- a/parser/testdata/parse/postgres_regress/uuid.metadata.json +++ b/parser/testdata/parse/postgres_regress/uuid.metadata.json @@ -5,7 +5,6 @@ "023", "024", "025", - "034", "044" ] } diff --git a/parser/testdata/parse/postgres_regress/vacuum.metadata.json b/parser/testdata/parse/postgres_regress/vacuum.metadata.json index 4932591..ebe29e3 100644 --- a/parser/testdata/parse/postgres_regress/vacuum.metadata.json +++ b/parser/testdata/parse/postgres_regress/vacuum.metadata.json @@ -12,23 +12,17 @@ "043", "044", "046", - "049", "052", - "053", - "054", "055", "056", "059", "061", "062", - "064", - "065", "066", "067", "069", "070", "072", - "074", "075", "076", "077", @@ -110,9 +104,7 @@ "173", "174", "175", - "176", "177", - "178", "179", "180", "181", @@ -123,9 +115,7 @@ "187", "190", "191", - "193", "194", - "195", "196", "198", "199", diff --git a/parser/testdata/parse/postgres_regress/window.metadata.json b/parser/testdata/parse/postgres_regress/window.metadata.json index 8000e31..cd6df63 100644 --- a/parser/testdata/parse/postgres_regress/window.metadata.json +++ b/parser/testdata/parse/postgres_regress/window.metadata.json @@ -11,10 +11,8 @@ "092", "093", "123", - "124", "125", "128", - "129", "130", "133", "134", diff --git a/parser/testdata/parse/postgres_regress/with.metadata.json b/parser/testdata/parse/postgres_regress/with.metadata.json index 65f65d3..9ccc6a4 100644 --- a/parser/testdata/parse/postgres_regress/with.metadata.json +++ b/parser/testdata/parse/postgres_regress/with.metadata.json @@ -35,8 +35,6 @@ "186", "188", "189", - "190", - "193", "195", "197", "205", @@ -48,9 +46,7 @@ "225", "228", "229", - "230", "232", - "239", "241", "242", "245", diff --git a/parser/testdata/parse/postgres_regress/write_parallel.metadata.json b/parser/testdata/parse/postgres_regress/write_parallel.metadata.json index 1a7e569..0089c45 100644 --- a/parser/testdata/parse/postgres_regress/write_parallel.metadata.json +++ b/parser/testdata/parse/postgres_regress/write_parallel.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "001", "006", "007", "008", @@ -14,7 +13,6 @@ "017", "019", "020", - "021", - "022" + "021" ] } diff --git a/parser/testdata/parse/postgres_regress/xid.metadata.json b/parser/testdata/parse/postgres_regress/xid.metadata.json index 8cbb110..4782a5f 100644 --- a/parser/testdata/parse/postgres_regress/xid.metadata.json +++ b/parser/testdata/parse/postgres_regress/xid.metadata.json @@ -5,16 +5,6 @@ "031", "032", "045", - "061", - "065", - "066", - "068", - "069", - "071", - "072", - "080", - "081", - "082", - "084" + "082" ] } From 6e06a48d3d6360846a50a50525183150f9e02f89 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 16 Aug 2026 19:09:07 +0000 Subject: [PATCH 03/24] Milestone 6: CREATE TABLE/AS, sequences, views, indexes, matviews CreateStmt (table elements, column/table constraints, LIKE, partition specs and bounds, typed and partition-of tables), CreateTableAsStmt including AS EXECUTE, CreateSeqStmt/AlterSeqStmt, ViewStmt (recursive views via makeRecursiveViewSelect), IndexStmt, CreateMatViewStmt, RefreshMatViewStmt, and the shared definition/def_elem, CAS-bits, and key-action machinery. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01J19Kf5LpGUhi2vxFJjzQJE --- internal/parse/ddl_create.go | 1464 +++++++++++++++++ internal/parse/ddl_dispatch.go | 32 +- internal/parse/parser.go | 2 + .../constraints.metadata.json | 2 - .../postgres_regress/create_am.metadata.json | 2 - .../create_index.metadata.json | 1 - .../create_table.metadata.json | 1 - .../postgres_regress/errors.metadata.json | 2 - .../foreign_key.metadata.json | 1 - .../postgres_regress/generated.metadata.json | 1 - .../postgres_regress/with.metadata.json | 2 - .../deparse/ddl_create_index.metadata.json | 4 +- .../deparse/ddl_create_table.metadata.json | 4 +- .../postgres_regress/aggregates.metadata.json | 48 - .../alter_generic.metadata.json | 2 - .../alter_table.metadata.json | 310 ---- .../postgres_regress/amutils.metadata.json | 4 +- .../postgres_regress/arrays.metadata.json | 15 - .../parse/postgres_regress/bit.metadata.json | 9 +- .../postgres_regress/bitmapops.metadata.json | 3 - .../postgres_regress/boolean.metadata.json | 4 - .../parse/postgres_regress/box.metadata.json | 11 +- .../parse/postgres_regress/brin.metadata.json | 17 - .../postgres_regress/brin_bloom.metadata.json | 11 - .../postgres_regress/brin_multi.metadata.json | 32 - .../btree_index.metadata.json | 20 - .../parse/postgres_regress/case.metadata.json | 2 - .../parse/postgres_regress/char.metadata.json | 1 - .../postgres_regress/circle.metadata.json | 4 +- .../postgres_regress/cluster.metadata.json | 34 - .../collate.icu.utf8.metadata.json | 83 - .../collate.linux.utf8.metadata.json | 25 - .../postgres_regress/collate.metadata.json | 23 - .../collate.utf8.metadata.json | 1 - .../collate.windows.win1252.metadata.json | 23 - .../postgres_regress/combocid.metadata.json | 2 - .../compression.metadata.json | 21 - .../constraints.metadata.json | 50 - .../postgres_regress/conversion.metadata.json | 10 +- .../parse/postgres_regress/copy.metadata.json | 14 - .../postgres_regress/copydml.metadata.json | 1 - .../postgres_regress/copyselect.metadata.json | 3 - .../postgres_regress/create_am.metadata.json | 37 - .../create_function_sql.metadata.json | 7 - .../create_index.metadata.json | 140 -- .../create_index_spgist.metadata.json | 16 - .../create_misc.metadata.json | 6 - .../create_procedure.metadata.json | 1 - .../create_role.metadata.json | 4 - .../create_table.metadata.json | 212 --- .../create_table_like.metadata.json | 58 - .../create_type.metadata.json | 4 - .../create_view.metadata.json | 137 -- .../parse/postgres_regress/date.metadata.json | 4 +- .../postgres_regress/delete.metadata.json | 1 - .../postgres_regress/dependency.metadata.json | 7 - .../postgres_regress/domain.metadata.json | 21 - .../drop_if_exists.metadata.json | 4 - .../parse/postgres_regress/enum.metadata.json | 6 - .../postgres_regress/equivclass.metadata.json | 9 - .../postgres_regress/errors.metadata.json | 2 - .../event_trigger.metadata.json | 35 - .../event_trigger_login.metadata.json | 1 - .../postgres_regress/explain.metadata.json | 6 - .../expressions.metadata.json | 7 +- .../fast_default.metadata.json | 25 - .../postgres_regress/float4.metadata.json | 1 - .../postgres_regress/float8.metadata.json | 1 - .../foreign_data.metadata.json | 18 - .../foreign_key.metadata.json | 237 --- .../functional_deps.metadata.json | 11 - .../postgres_regress/generated.metadata.json | 43 +- .../postgres_regress/geometry.metadata.json | 2 - .../parse/postgres_regress/gin.metadata.json | 6 - .../parse/postgres_regress/gist.metadata.json | 16 - .../groupingsets.metadata.json | 10 - .../parse/postgres_regress/guc.metadata.json | 3 - .../postgres_regress/hash_index.metadata.json | 23 +- .../postgres_regress/hash_part.metadata.json | 6 - .../postgres_regress/horology.metadata.json | 1 - .../postgres_regress/identity.metadata.json | 50 - .../incremental_sort.metadata.json | 5 - .../index_including.metadata.json | 39 - .../index_including_gist.metadata.json | 13 - .../postgres_regress/indexing.metadata.json | 273 --- .../indirect_toast.metadata.json | 1 - .../parse/postgres_regress/inet.metadata.json | 4 - .../postgres_regress/inherit.metadata.json | 199 --- .../postgres_regress/insert.metadata.json | 94 -- .../insert_conflict.metadata.json | 49 - .../postgres_regress/interval.metadata.json | 5 - .../parse/postgres_regress/join.metadata.json | 80 - .../postgres_regress/join_hash.metadata.json | 10 - .../parse/postgres_regress/json.metadata.json | 6 +- .../postgres_regress/jsonb.metadata.json | 15 +- .../largeobject.metadata.json | 1 - .../postgres_regress/limit.metadata.json | 9 +- .../parse/postgres_regress/line.metadata.json | 4 +- .../parse/postgres_regress/lock.metadata.json | 13 - .../parse/postgres_regress/lseg.metadata.json | 4 +- .../postgres_regress/macaddr.metadata.json | 3 - .../postgres_regress/macaddr8.metadata.json | 3 - .../maintain_every.metadata.json | 4 - .../postgres_regress/matview.metadata.json | 82 - .../postgres_regress/memoize.metadata.json | 12 - .../postgres_regress/merge.metadata.json | 54 - .../parse/postgres_regress/misc.metadata.json | 4 - .../misc_functions.metadata.json | 1 - .../postgres_regress/money.metadata.json | 4 +- .../multirangetypes.metadata.json | 11 - .../parse/postgres_regress/mvcc.metadata.json | 2 - .../parse/postgres_regress/name.metadata.json | 1 - .../postgres_regress/namespace.metadata.json | 4 - .../postgres_regress/numeric.metadata.json | 24 - .../numeric_big.metadata.json | 18 - .../object_address.metadata.json | 4 - .../parse/postgres_regress/oid.metadata.json | 1 - .../partition_aggregate.metadata.json | 28 - .../partition_info.metadata.json | 19 - .../partition_join.metadata.json | 188 --- .../partition_prune.metadata.json | 234 --- .../parse/postgres_regress/path.metadata.json | 4 +- .../postgres_regress/pg_lsn.metadata.json | 1 - .../postgres_regress/plancache.metadata.json | 16 - .../postgres_regress/plpgsql.metadata.json | 42 - .../postgres_regress/point.metadata.json | 5 +- .../postgres_regress/polygon.metadata.json | 7 +- .../polymorphism.metadata.json | 2 - .../postgres_regress/portals.metadata.json | 9 - .../postgres_regress/predicate.metadata.json | 5 - .../postgres_regress/prepare.metadata.json | 5 +- .../prepared_xacts.metadata.json | 4 - .../postgres_regress/privileges.metadata.json | 15 - .../parse/postgres_regress/psql.metadata.json | 7 - .../psql_crosstab.metadata.json | 4 +- .../publication.metadata.json | 65 - .../postgres_regress/rangefuncs.metadata.json | 33 - .../postgres_regress/rangetypes.metadata.json | 19 - .../postgres_regress/reloptions.metadata.json | 27 - .../replica_identity.metadata.json | 14 - .../postgres_regress/returning.metadata.json | 6 - .../rowsecurity.metadata.json | 47 +- .../postgres_regress/rowtypes.metadata.json | 14 - .../postgres_regress/rules.metadata.json | 96 -- .../security_label.metadata.json | 3 - .../postgres_regress/select.metadata.json | 7 - .../select_distinct.metadata.json | 7 +- .../select_having.metadata.json | 1 - .../select_implicit.metadata.json | 3 - .../select_into.metadata.json | 17 - .../select_parallel.metadata.json | 11 +- .../select_views.metadata.json | 9 - .../postgres_regress/sequence.metadata.json | 72 - .../postgres_regress/spgist.metadata.json | 14 +- .../postgres_regress/sqljson.metadata.json | 7 - .../sqljson_jsontable.metadata.json | 14 - .../sqljson_queryfuncs.metadata.json | 44 - .../postgres_regress/stats.metadata.json | 26 - .../postgres_regress/stats_ext.metadata.json | 40 - .../postgres_regress/subselect.metadata.json | 32 - .../tablesample.metadata.json | 6 - .../postgres_regress/tablespace.metadata.json | 57 - .../parse/postgres_regress/temp.metadata.json | 35 - .../postgres_regress/test_setup.metadata.json | 19 - .../parse/postgres_regress/tid.metadata.json | 9 - .../tidrangescan.metadata.json | 1 - .../postgres_regress/tidscan.metadata.json | 1 - .../parse/postgres_regress/time.metadata.json | 4 +- .../postgres_regress/timestamp.metadata.json | 4 +- .../timestamptz.metadata.json | 4 - .../postgres_regress/timetz.metadata.json | 5 +- .../transactions.metadata.json | 19 - .../postgres_regress/triggers.metadata.json | 169 -- .../postgres_regress/truncate.metadata.json | 34 - .../postgres_regress/tsearch.metadata.json | 19 +- .../parse/postgres_regress/tsrf.metadata.json | 2 - .../postgres_regress/tuplesort.metadata.json | 6 - .../parse/postgres_regress/txid.metadata.json | 1 - .../type_sanity.metadata.json | 4 +- .../typed_table.metadata.json | 14 +- .../postgres_regress/union.metadata.json | 11 - .../updatable_views.metadata.json | 151 -- .../postgres_regress/update.metadata.json | 35 - .../parse/postgres_regress/uuid.metadata.json | 5 - .../postgres_regress/vacuum.metadata.json | 33 - .../vacuum_parallel.metadata.json | 4 - .../postgres_regress/varchar.metadata.json | 1 - .../postgres_regress/window.metadata.json | 11 - .../parse/postgres_regress/with.metadata.json | 27 - .../write_parallel.metadata.json | 6 - .../parse/postgres_regress/xid.metadata.json | 4 - .../parse/postgres_regress/xml.metadata.json | 19 +- .../postgres_regress/xmlmap.metadata.json | 5 +- 193 files changed, 1512 insertions(+), 4971 deletions(-) create mode 100644 internal/parse/ddl_create.go diff --git a/internal/parse/ddl_create.go b/internal/parse/ddl_create.go new file mode 100644 index 0000000..29c710b --- /dev/null +++ b/internal/parse/ddl_create.go @@ -0,0 +1,1464 @@ +package parse + +// CreateStmt (CREATE TABLE), CreateAsStmt (CREATE TABLE AS, including the +// AS EXECUTE variant that lives in gram.y's ExecuteStmt), CreateSeqStmt/ +// AlterSeqStmt, ViewStmt, IndexStmt, CreateMatViewStmt, RefreshMatViewStmt, +// and their shared table-element/constraint machinery. + +import ( + "fmt" + + "github.com/sqlc-dev/oliphant/ast" +) + +func nCreateStmt(n *ast.CreateStmt) *ast.Node { + return &ast.Node{Node: &ast.Node_CreateStmt{CreateStmt: n}} +} + +func nConstraint(n *ast.Constraint) *ast.Node { + return &ast.Node{Node: &ast.Node_Constraint{Constraint: n}} +} + +func nColumnDef(n *ast.ColumnDef) *ast.Node { + return &ast.Node{Node: &ast.Node_ColumnDef{ColumnDef: n}} +} + +// parseCreateTableOrAs parses CREATE [OptTemp] TABLE ...: CreateStmt, +// CreateAsStmt, or the CREATE TABLE ... AS EXECUTE form of ExecuteStmt. +// CREATE and OptTemp are consumed, TABLE is not. +func (p *parser) parseCreateTableOrAs(persistence string) *ast.Node { + p.expect(ast.Token_TABLE) + ifNotExists := false + if p.have(ast.Token_IF_P) { + p.expect(ast.Token_NOT) + p.expect(ast.Token_EXISTS) + ifNotExists = true + } + rel := p.parseQualifiedName() + rel.Relpersistence = persistence + + switch p.kind() { + case ast.Token_OF: + // gram.y: CreateStmt: ... qualified_name OF any_name ... + p.next() + ntok := p.peek() + of := makeTypeNameFromNameList(p.anyName()) + of.Location = ntok.Start + n := &ast.CreateStmt{ + Relation: rel, + OfTypename: of, + IfNotExists: ifNotExists, + } + if p.have(ast.Token('(')) { + n.TableElts = p.parseTypedTableElementList() + p.expect(ast.Token(')')) + } + p.finishCreateStmtTail(n) + return nCreateStmt(n) + + case ast.Token_PARTITION: + // gram.y: CreateStmt: ... qualified_name PARTITION OF ... + p.next() + p.expect(ast.Token_OF) + parent := p.parseQualifiedName() + n := &ast.CreateStmt{ + Relation: rel, + InhRelations: []*ast.Node{nRangeVar(parent)}, + IfNotExists: ifNotExists, + } + if p.have(ast.Token('(')) { + n.TableElts = p.parseTypedTableElementList() + p.expect(ast.Token(')')) + } + n.Partbound = p.parsePartitionBoundSpec() + p.finishCreateStmtTail(n) + return nCreateStmt(n) + + case ast.Token('('): + // Either CreateStmt's '(' OptTableElementList ')' or a + // create_as_target column list. The LALR tables keep both alive + // through the parens; commit to CREATE TABLE AS only once the AS + // is seen. + mark := p.mark() + var into *ast.IntoClause + err := p.try(func() { + into = p.parseCreateAsTarget(rel) + p.expect(ast.Token_AS) + }) + if err == nil { + return p.finishCreateTableAs(into, ifNotExists) + } + p.reset(mark) + n := &ast.CreateStmt{Relation: rel, IfNotExists: ifNotExists} + p.expect(ast.Token('(')) + if p.kind() != ast.Token(')') { + n.TableElts = p.parseTableElementList() + } + p.expect(ast.Token(')')) + if p.have(ast.Token_INHERITS) { + p.expect(ast.Token('(')) + n.InhRelations = p.parseQualifiedNameList() + p.expect(ast.Token(')')) + } + p.finishCreateStmtTail(n) + return nCreateStmt(n) + + default: + // create_as_target without a column list. + into := p.parseCreateAsTarget(rel) + p.expect(ast.Token_AS) + return p.finishCreateTableAs(into, ifNotExists) + } +} + +// finishCreateStmtTail parses the common CreateStmt tail: OptPartitionSpec +// table_access_method_clause OptWith OnCommitOption OptTableSpace. +func (p *parser) finishCreateStmtTail(n *ast.CreateStmt) { + n.Partspec = p.parseOptPartitionSpec() + if p.have(ast.Token_USING) { + n.AccessMethod = p.name() + } + n.Options = p.parseOptWithReloptions() + n.Oncommit = p.parseOnCommitOption() + if p.have(ast.Token_TABLESPACE) { + n.Tablespacename = p.name() + } +} + +// parseOptWithReloptions is gram.y's OptWith: +// +// WITH reloptions | WITHOUT OIDS | empty +func (p *parser) parseOptWithReloptions() []*ast.Node { + switch p.kind() { + case ast.Token_WITH: + if p.kindN(1) == ast.Token('(') { + p.next() + return p.parseReloptions() + } + case ast.Token_WITHOUT: + if p.kindN(1) == ast.Token_OIDS { + p.next() + p.next() + } + } + return nil +} + +// parseOnCommitOption is gram.y's OnCommitOption. +func (p *parser) parseOnCommitOption() ast.OnCommitAction { + if p.kind() == ast.Token_ON && p.kindN(1) == ast.Token_COMMIT { + p.next() + p.next() + switch p.kind() { + case ast.Token_DROP: + p.next() + return ast.OnCommitAction_ONCOMMIT_DROP + case ast.Token_DELETE_P: + p.next() + p.expect(ast.Token_ROWS) + return ast.OnCommitAction_ONCOMMIT_DELETE_ROWS + case ast.Token_PRESERVE: + p.next() + p.expect(ast.Token_ROWS) + return ast.OnCommitAction_ONCOMMIT_PRESERVE_ROWS + } + p.syntaxErrorAt() + } + return ast.OnCommitAction_ONCOMMIT_NOOP +} + +// parseCreateAsTarget is gram.y's create_as_target (minus the persistence, +// which the caller has already stored into rel): +// +// qualified_name opt_column_list table_access_method_clause OptWith +// OnCommitOption OptTableSpace +func (p *parser) parseCreateAsTarget(rel *ast.RangeVar) *ast.IntoClause { + into := &ast.IntoClause{Rel: rel} + if p.have(ast.Token('(')) { + into.ColNames = p.columnList() + p.expect(ast.Token(')')) + } + if p.have(ast.Token_USING) { + into.AccessMethod = p.name() + } + into.Options = p.parseOptWithReloptions() + into.OnCommit = p.parseOnCommitOption() + if p.have(ast.Token_TABLESPACE) { + into.TableSpaceName = p.name() + } + return into +} + +// finishCreateTableAs parses the query and opt_with_data after AS, +// producing CreateTableAsStmt for both the SelectStmt and EXECUTE forms. +func (p *parser) finishCreateTableAs(into *ast.IntoClause, ifNotExists bool) *ast.Node { + ctas := &ast.CreateTableAsStmt{ + Into: into, + Objtype: ast.ObjectType_OBJECT_TABLE, + IfNotExists: ifNotExists, + } + if p.have(ast.Token_EXECUTE) { + // gram.y: ExecuteStmt: CREATE OptTemp TABLE create_as_target AS + // EXECUTE name execute_param_clause opt_with_data + e := &ast.ExecuteStmt{Name: p.name()} + if p.have(ast.Token('(')) { + e.Params = p.parseExprList() + p.expect(ast.Token(')')) + } + ctas.Query = &ast.Node{Node: &ast.Node_ExecuteStmt{ExecuteStmt: e}} + } else { + ctas.Query = p.parseSelectStmt() + } + into.SkipData = !p.parseOptWithData() + return &ast.Node{Node: &ast.Node_CreateTableAsStmt{CreateTableAsStmt: ctas}} +} + +// parseOptWithData is gram.y's opt_with_data. +func (p *parser) parseOptWithData() bool { + if p.kind() == ast.Token_WITH { + switch { + case p.kindN(1) == ast.Token_DATA_P: + p.next() + p.next() + return true + case p.kindN(1) == ast.Token_NO && p.kindN(2) == ast.Token_DATA_P: + p.next() + p.next() + p.next() + return false + } + } + return true +} + +// parseTableElementList is gram.y's TableElementList. +func (p *parser) parseTableElementList() []*ast.Node { + list := []*ast.Node{p.parseTableElement()} + for p.have(ast.Token(',')) { + list = append(list, p.parseTableElement()) + } + return list +} + +// parseTableElement is gram.y's TableElement: columnDef | TableLikeClause | +// TableConstraint. +func (p *parser) parseTableElement() *ast.Node { + switch p.kind() { + case ast.Token_LIKE: + return p.parseTableLikeClause() + case ast.Token_CONSTRAINT, ast.Token_CHECK, ast.Token_UNIQUE, + ast.Token_PRIMARY, ast.Token_EXCLUDE, ast.Token_FOREIGN: + return p.parseTableConstraint() + } + return p.parseColumnDef() +} + +// parseTypedTableElementList is gram.y's TypedTableElementList. +func (p *parser) parseTypedTableElementList() []*ast.Node { + list := []*ast.Node{p.parseTypedTableElement()} + for p.have(ast.Token(',')) { + list = append(list, p.parseTypedTableElement()) + } + return list +} + +// parseTypedTableElement is gram.y's TypedTableElement: columnOptions | +// TableConstraint. +func (p *parser) parseTypedTableElement() *ast.Node { + switch p.kind() { + case ast.Token_CONSTRAINT, ast.Token_CHECK, ast.Token_UNIQUE, + ast.Token_PRIMARY, ast.Token_EXCLUDE, ast.Token_FOREIGN: + return p.parseTableConstraint() + } + // gram.y: columnOptions: ColId [WITH OPTIONS] ColQualList + tok := p.peek() + n := &ast.ColumnDef{ + Colname: p.colId(), + IsLocal: true, + Location: tok.Start, + } + if p.kind() == ast.Token_WITH && p.kindN(1) == ast.Token_OPTIONS { + p.next() + p.next() + } + n.Constraints, n.CollClause = p.parseColQualList() + return nColumnDef(n) +} + +// parseColumnDef is gram.y's columnDef: +// +// ColId Typename opt_column_storage opt_column_compression +// create_generic_options ColQualList +func (p *parser) parseColumnDef() *ast.Node { + tok := p.peek() + n := &ast.ColumnDef{ + Colname: p.colId(), + IsLocal: true, + Location: tok.Start, + } + n.TypeName = p.parseTypename() + if p.kind() == ast.Token_STORAGE { + p.next() + n.StorageName = p.parseColIdOrDefault() + } + if p.kind() == ast.Token_COMPRESSION { + p.next() + n.Compression = p.parseColIdOrDefault() + } + n.Fdwoptions = p.parseCreateGenericOptions() + n.Constraints, n.CollClause = p.parseColQualList() + return nColumnDef(n) +} + +// parseColIdOrDefault handles column_storage/column_compression's +// ColId-or-DEFAULT alternative. +func (p *parser) parseColIdOrDefault() string { + if p.have(ast.Token_DEFAULT) { + return "default" + } + return p.colId() +} + +// parseColQualList is gram.y's ColQualList plus SplitColQualList: collect +// column constraints, splitting out a single CollateClause. +func (p *parser) parseColQualList() ([]*ast.Node, *ast.CollateClause) { + var constraints []*ast.Node + var coll *ast.CollateClause + for { + tok := p.peek() + switch tok.Kind { + case ast.Token_COLLATE: + p.next() + c := &ast.CollateClause{Collname: p.anyName(), Location: tok.Start} + // gram.y: SplitColQualList + if coll != nil { + p.ereport("base_yyparse", "multiple COLLATE clauses not allowed", c.Location) + } + coll = c + case ast.Token_CONSTRAINT: + p.next() + name := p.name() + c := p.parseColConstraintElem() + c.Conname = name + c.Location = tok.Start + constraints = append(constraints, nConstraint(c)) + case ast.Token_NOT: + switch p.kindN(1) { + case ast.Token_NULL_P: + p.next() + p.next() + constraints = append(constraints, nConstraint(&ast.Constraint{ + Contype: ast.ConstrType_CONSTR_NOTNULL, + Location: tok.Start, + })) + case ast.Token_DEFERRABLE: + p.next() + p.next() + constraints = append(constraints, nConstraint(&ast.Constraint{ + Contype: ast.ConstrType_CONSTR_ATTR_NOT_DEFERRABLE, + Location: tok.Start, + })) + default: + return constraints, coll + } + case ast.Token_DEFERRABLE: + p.next() + constraints = append(constraints, nConstraint(&ast.Constraint{ + Contype: ast.ConstrType_CONSTR_ATTR_DEFERRABLE, + Location: tok.Start, + })) + case ast.Token_INITIALLY: + p.next() + switch { + case p.have(ast.Token_DEFERRED): + constraints = append(constraints, nConstraint(&ast.Constraint{ + Contype: ast.ConstrType_CONSTR_ATTR_DEFERRED, + Location: tok.Start, + })) + case p.have(ast.Token_IMMEDIATE): + constraints = append(constraints, nConstraint(&ast.Constraint{ + Contype: ast.ConstrType_CONSTR_ATTR_IMMEDIATE, + Location: tok.Start, + })) + default: + p.syntaxErrorAt() + } + case ast.Token_NULL_P, ast.Token_UNIQUE, ast.Token_PRIMARY, + ast.Token_CHECK, ast.Token_DEFAULT, ast.Token_GENERATED, + ast.Token_REFERENCES: + c := p.parseColConstraintElem() + constraints = append(constraints, nConstraint(c)) + default: + return constraints, coll + } + } +} + +// parseColConstraintElem is gram.y's ColConstraintElem. The leading +// CONSTRAINT name (if any) is handled by the caller. +func (p *parser) parseColConstraintElem() *ast.Constraint { + tok := p.peek() + n := &ast.Constraint{Location: tok.Start} + switch tok.Kind { + case ast.Token_NOT: + p.next() + p.expect(ast.Token_NULL_P) + n.Contype = ast.ConstrType_CONSTR_NOTNULL + case ast.Token_NULL_P: + p.next() + n.Contype = ast.ConstrType_CONSTR_NULL + case ast.Token_UNIQUE: + p.next() + n.Contype = ast.ConstrType_CONSTR_UNIQUE + n.NullsNotDistinct = !p.parseOptUniqueNullTreatment() + n.Options = p.parseOptDefinition() + n.Indexspace = p.parseOptConsTableSpace() + case ast.Token_PRIMARY: + p.next() + p.expect(ast.Token_KEY) + n.Contype = ast.ConstrType_CONSTR_PRIMARY + n.Options = p.parseOptDefinition() + n.Indexspace = p.parseOptConsTableSpace() + case ast.Token_CHECK: + p.next() + n.Contype = ast.ConstrType_CONSTR_CHECK + n.InitiallyValid = true + p.expect(ast.Token('(')) + n.RawExpr = p.parseAExpr(0) + p.expect(ast.Token(')')) + if p.kind() == ast.Token_NO && p.kindN(1) == ast.Token_INHERIT { + p.next() + p.next() + n.IsNoInherit = true + } + case ast.Token_DEFAULT: + p.next() + n.Contype = ast.ConstrType_CONSTR_DEFAULT + n.RawExpr = p.parseBExpr(0) + case ast.Token_GENERATED: + p.next() + wtok := p.peek() + n.GeneratedWhen = p.parseGeneratedWhen() + p.expect(ast.Token_AS) + if p.have(ast.Token_IDENTITY_P) { + n.Contype = ast.ConstrType_CONSTR_IDENTITY + if p.have(ast.Token('(')) { + n.Options = p.parseSeqOptList() + p.expect(ast.Token(')')) + } + } else { + n.Contype = ast.ConstrType_CONSTR_GENERATED + p.expect(ast.Token('(')) + n.RawExpr = p.parseAExpr(0) + p.expect(ast.Token(')')) + p.expect(ast.Token_STORED) + if n.GeneratedWhen != attributeIdentityAlways { + p.ereport("base_yyparse", "for a generated column, GENERATED ALWAYS must be specified", wtok.Start) + } + } + case ast.Token_REFERENCES: + p.next() + n.Contype = ast.ConstrType_CONSTR_FOREIGN + n.InitiallyValid = true + n.Pktable = p.parseQualifiedName() + if p.have(ast.Token('(')) { + n.PkAttrs = p.columnList() + p.expect(ast.Token(')')) + } + n.FkMatchtype = p.parseKeyMatch() + upd, del, delCols := p.parseKeyActions() + n.FkUpdAction = upd + n.FkDelAction = del + n.FkDelSetCols = delCols + default: + p.syntaxErrorAt() + } + return n +} + +// Identity attribute chars (pg_attribute.h). +const ( + attributeIdentityAlways = "a" + attributeIdentityByDefault = "d" +) + +// parseGeneratedWhen is gram.y's generated_when. +func (p *parser) parseGeneratedWhen() string { + switch { + case p.have(ast.Token_ALWAYS): + return attributeIdentityAlways + case p.have(ast.Token_BY): + p.expect(ast.Token_DEFAULT) + return attributeIdentityByDefault + } + p.syntaxErrorAt() + return "" +} + +// parseOptUniqueNullTreatment is gram.y's opt_unique_null_treatment; +// returns true for NULLS DISTINCT (the default). +func (p *parser) parseOptUniqueNullTreatment() bool { + if p.have(ast.Token_NULLS_P) { + if p.have(ast.Token_NOT) { + p.expect(ast.Token_DISTINCT) + return false + } + p.expect(ast.Token_DISTINCT) + return true + } + return true +} + +// parseOptDefinition is gram.y's opt_definition: WITH definition | empty. +func (p *parser) parseOptDefinition() []*ast.Node { + if p.kind() == ast.Token_WITH && p.kindN(1) == ast.Token('(') { + p.next() + return p.parseDefinition() + } + return nil +} + +// parseDefinition is gram.y's definition: '(' def_list ')'. +func (p *parser) parseDefinition() []*ast.Node { + p.expect(ast.Token('(')) + list := []*ast.Node{p.parseDefElem()} + for p.have(ast.Token(',')) { + list = append(list, p.parseDefElem()) + } + p.expect(ast.Token(')')) + return list +} + +// parseDefElem is gram.y's def_elem: ColLabel ['=' def_arg]. +func (p *parser) parseDefElem() *ast.Node { + tok := p.peek() + name := p.colLabel() + var arg *ast.Node + if p.have(ast.Token('=')) { + arg = p.parseDefArg() + } + return makeDefElem(name, arg, tok.Start) +} + +// parseOptConsTableSpace is gram.y's OptConsTableSpace: +// +// USING INDEX TABLESPACE name | empty +func (p *parser) parseOptConsTableSpace() string { + if p.kind() == ast.Token_USING && p.kindN(1) == ast.Token_INDEX && + p.kindN(2) == ast.Token_TABLESPACE { + p.next() + p.next() + p.next() + return p.name() + } + return "" +} + +// parseKeyMatch is gram.y's key_match. +func (p *parser) parseKeyMatch() string { + if p.kind() == ast.Token_MATCH { + mtok := p.next() + switch { + case p.have(ast.Token_FULL): + return "f" // FKCONSTR_MATCH_FULL + case p.have(ast.Token_PARTIAL): + p.ereport("base_yyparse", "MATCH PARTIAL not yet implemented", mtok.Start) + case p.have(ast.Token_SIMPLE): + return "s" // FKCONSTR_MATCH_SIMPLE + default: + p.syntaxErrorAt() + } + } + return "s" +} + +// parseKeyActions is gram.y's key_actions; returns the update action, the +// delete action, and the delete action's column list. +func (p *parser) parseKeyActions() (string, string, []*ast.Node) { + upd, del := "a", "a" // FKCONSTR_ACTION_NOACTION + var delCols []*ast.Node + haveUpd, haveDel := false, false + for p.kind() == ast.Token_ON && + (p.kindN(1) == ast.Token_UPDATE || p.kindN(1) == ast.Token_DELETE_P) { + ontok := p.next() + isUpd := p.next().Kind == ast.Token_UPDATE + action, cols := p.parseKeyAction() + if isUpd { + if haveUpd { + p.syntaxError(ontok) + } + haveUpd = true + if cols != nil { + // gram.y: key_update's column-list ereport + what := "SET DEFAULT" + if action == "n" { + what = "SET NULL" + } + p.ereport("base_yyparse", fmt.Sprintf("a column list with %s is only supported for ON DELETE actions", what), ontok.Start) + } + upd = action + } else { + if haveDel { + p.syntaxError(ontok) + } + haveDel = true + del = action + delCols = cols + } + } + return upd, del, delCols +} + +// parseKeyAction is gram.y's key_action. +func (p *parser) parseKeyAction() (string, []*ast.Node) { + switch { + case p.have(ast.Token_NO): + p.expect(ast.Token_ACTION) + return "a", nil + case p.have(ast.Token_RESTRICT): + return "r", nil + case p.have(ast.Token_CASCADE): + return "c", nil + case p.have(ast.Token_SET): + var action string + switch { + case p.have(ast.Token_NULL_P): + action = "n" + case p.have(ast.Token_DEFAULT): + action = "d" + default: + p.syntaxErrorAt() + } + var cols []*ast.Node + if p.have(ast.Token('(')) { + cols = p.columnList() + p.expect(ast.Token(')')) + } + return action, cols + } + p.syntaxErrorAt() + return "", nil +} + +// parseTableLikeClause is gram.y's TableLikeClause. +func (p *parser) parseTableLikeClause() *ast.Node { + p.expect(ast.Token_LIKE) + n := &ast.TableLikeClause{Relation: p.parseQualifiedName()} + // gram.y: TableLikeOptionList + for { + switch { + case p.have(ast.Token_INCLUDING): + n.Options |= p.parseTableLikeOption() + case p.have(ast.Token_EXCLUDING): + n.Options &^= p.parseTableLikeOption() + default: + return &ast.Node{Node: &ast.Node_TableLikeClause{TableLikeClause: n}} + } + } +} + +// CREATE_TABLE_LIKE_* bits (parsenodes.h). +const ( + createTableLikeComments = 1 << 0 + createTableLikeCompression = 1 << 1 + createTableLikeConstraints = 1 << 2 + createTableLikeDefaults = 1 << 3 + createTableLikeGenerated = 1 << 4 + createTableLikeIdentity = 1 << 5 + createTableLikeIndexes = 1 << 6 + createTableLikeStatistics = 1 << 7 + createTableLikeStorage = 1 << 8 + createTableLikeAll = 0x7FFFFFFF +) + +// parseTableLikeOption is gram.y's TableLikeOption. +func (p *parser) parseTableLikeOption() uint32 { + switch { + case p.have(ast.Token_COMMENTS): + return createTableLikeComments + case p.have(ast.Token_COMPRESSION): + return createTableLikeCompression + case p.have(ast.Token_CONSTRAINTS): + return createTableLikeConstraints + case p.have(ast.Token_DEFAULTS): + return createTableLikeDefaults + case p.have(ast.Token_IDENTITY_P): + return createTableLikeIdentity + case p.have(ast.Token_GENERATED): + return createTableLikeGenerated + case p.have(ast.Token_INDEXES): + return createTableLikeIndexes + case p.have(ast.Token_STATISTICS): + return createTableLikeStatistics + case p.have(ast.Token_STORAGE): + return createTableLikeStorage + case p.have(ast.Token_ALL): + return createTableLikeAll + } + p.syntaxErrorAt() + return 0 +} + +// parseTableConstraint is gram.y's TableConstraint. +func (p *parser) parseTableConstraint() *ast.Node { + tok := p.peek() + if tok.Kind == ast.Token_CONSTRAINT { + p.next() + name := p.name() + c := p.parseConstraintElem() + c.Conname = name + c.Location = tok.Start + return nConstraint(c) + } + return nConstraint(p.parseConstraintElem()) +} + +// Constraint attribute bits (gram.y CAS_*). +const ( + casNotDeferrable = 1 << 0 + casDeferrable = 1 << 1 + casInitiallyImmediate = 1 << 2 + casInitiallyDeferred = 1 << 3 + casNotValid = 1 << 4 + casNoInherit = 1 << 5 +) + +// parseConstraintAttributeSpec is gram.y's ConstraintAttributeSpec; returns +// the accumulated CAS bits and the location of the spec (its first token, +// or -1 when empty). +func (p *parser) parseConstraintAttributeSpec() (int, int32) { + spec := 0 + loc := int32(-1) + for { + tok := p.peek() + var bit int + switch tok.Kind { + case ast.Token_NOT: + switch p.kindN(1) { + case ast.Token_DEFERRABLE: + p.next() + p.next() + bit = casNotDeferrable + case ast.Token_VALID: + p.next() + p.next() + bit = casNotValid + default: + return spec, loc + } + case ast.Token_DEFERRABLE: + p.next() + bit = casDeferrable + case ast.Token_INITIALLY: + switch p.kindN(1) { + case ast.Token_IMMEDIATE: + p.next() + p.next() + bit = casInitiallyImmediate + case ast.Token_DEFERRED: + p.next() + p.next() + bit = casInitiallyDeferred + default: + return spec, loc + } + case ast.Token_NO: + if p.kindN(1) == ast.Token_INHERIT { + p.next() + p.next() + bit = casNoInherit + } else { + return spec, loc + } + default: + return spec, loc + } + newspec := spec | bit + // gram.y: ConstraintAttributeSpec conflict checks, reported at @2. + if newspec&(casNotDeferrable|casInitiallyDeferred) == casNotDeferrable|casInitiallyDeferred { + p.ereport("base_yyparse", "constraint declared INITIALLY DEFERRED must be DEFERRABLE", tok.Start) + } + if newspec&(casNotDeferrable|casDeferrable) == casNotDeferrable|casDeferrable || + newspec&(casInitiallyImmediate|casInitiallyDeferred) == casInitiallyImmediate|casInitiallyDeferred { + p.ereport("base_yyparse", "conflicting constraint properties", tok.Start) + } + spec = newspec + if loc < 0 { + loc = tok.Start + } + } +} + +// processCASbits is gram.y's processCASbits: apply the attribute bits to +// the flags the constraint type supports, erroring on the rest. +func (p *parser) processCASbits(casBits int, loc int32, constrType string, + deferrable, initdeferred, notValid, noInherit *bool) { + if casBits&(casDeferrable|casInitiallyDeferred) != 0 { + if deferrable != nil { + *deferrable = true + } else { + p.ereport("base_yyparse", + fmt.Sprintf("%s constraints cannot be marked DEFERRABLE", constrType), loc) + } + } + if casBits&casInitiallyDeferred != 0 { + if initdeferred != nil { + *initdeferred = true + } else { + p.ereport("base_yyparse", + fmt.Sprintf("%s constraints cannot be marked DEFERRABLE", constrType), loc) + } + } + if casBits&casNotValid != 0 { + if notValid != nil { + *notValid = true + } else { + p.ereport("base_yyparse", + fmt.Sprintf("%s constraints cannot be marked NOT VALID", constrType), loc) + } + } + if casBits&casNoInherit != 0 { + if noInherit != nil { + *noInherit = true + } else { + p.ereport("base_yyparse", + fmt.Sprintf("%s constraints cannot be marked NO INHERIT", constrType), loc) + } + } +} + +// parseConstraintElem is gram.y's ConstraintElem. The leading CONSTRAINT +// name (if any) is handled by the caller. +func (p *parser) parseConstraintElem() *ast.Constraint { + tok := p.peek() + n := &ast.Constraint{Location: tok.Start} + switch tok.Kind { + case ast.Token_CHECK: + p.next() + n.Contype = ast.ConstrType_CONSTR_CHECK + p.expect(ast.Token('(')) + n.RawExpr = p.parseAExpr(0) + p.expect(ast.Token(')')) + cas, casLoc := p.parseConstraintAttributeSpec() + p.processCASbits(cas, casLoc, "CHECK", nil, nil, &n.SkipValidation, &n.IsNoInherit) + n.InitiallyValid = !n.SkipValidation + case ast.Token_UNIQUE: + p.next() + n.Contype = ast.ConstrType_CONSTR_UNIQUE + if p.kind() == ast.Token_USING && p.kindN(1) == ast.Token_INDEX && + p.kindN(2) != ast.Token_TABLESPACE { + // gram.y: UNIQUE ExistingIndex + p.next() + p.next() + n.Indexname = p.name() + cas, casLoc := p.parseConstraintAttributeSpec() + p.processCASbits(cas, casLoc, "UNIQUE", &n.Deferrable, &n.Initdeferred, nil, nil) + break + } + n.NullsNotDistinct = !p.parseOptUniqueNullTreatment() + p.expect(ast.Token('(')) + n.Keys = p.columnList() + p.expect(ast.Token(')')) + n.Including = p.parseOptCInclude() + n.Options = p.parseOptDefinition() + n.Indexspace = p.parseOptConsTableSpace() + cas, casLoc := p.parseConstraintAttributeSpec() + p.processCASbits(cas, casLoc, "UNIQUE", &n.Deferrable, &n.Initdeferred, nil, nil) + case ast.Token_PRIMARY: + p.next() + p.expect(ast.Token_KEY) + n.Contype = ast.ConstrType_CONSTR_PRIMARY + if p.kind() == ast.Token_USING && p.kindN(1) == ast.Token_INDEX && + p.kindN(2) != ast.Token_TABLESPACE { + p.next() + p.next() + n.Indexname = p.name() + cas, casLoc := p.parseConstraintAttributeSpec() + p.processCASbits(cas, casLoc, "PRIMARY KEY", &n.Deferrable, &n.Initdeferred, nil, nil) + break + } + p.expect(ast.Token('(')) + n.Keys = p.columnList() + p.expect(ast.Token(')')) + n.Including = p.parseOptCInclude() + n.Options = p.parseOptDefinition() + n.Indexspace = p.parseOptConsTableSpace() + cas, casLoc := p.parseConstraintAttributeSpec() + p.processCASbits(cas, casLoc, "PRIMARY KEY", &n.Deferrable, &n.Initdeferred, nil, nil) + case ast.Token_EXCLUDE: + p.next() + n.Contype = ast.ConstrType_CONSTR_EXCLUSION + // access_method_clause + if p.have(ast.Token_USING) { + n.AccessMethod = p.name() + } else { + n.AccessMethod = "btree" // DEFAULT_INDEX_TYPE + } + p.expect(ast.Token('(')) + n.Exclusions = p.parseExclusionConstraintList() + p.expect(ast.Token(')')) + n.Including = p.parseOptCInclude() + n.Options = p.parseOptDefinition() + n.Indexspace = p.parseOptConsTableSpace() + if p.have(ast.Token_WHERE) { + p.expect(ast.Token('(')) + n.WhereClause = p.parseAExpr(0) + p.expect(ast.Token(')')) + } + cas, casLoc := p.parseConstraintAttributeSpec() + p.processCASbits(cas, casLoc, "EXCLUDE", &n.Deferrable, &n.Initdeferred, nil, nil) + case ast.Token_FOREIGN: + p.next() + p.expect(ast.Token_KEY) + n.Contype = ast.ConstrType_CONSTR_FOREIGN + p.expect(ast.Token('(')) + n.FkAttrs = p.columnList() + p.expect(ast.Token(')')) + p.expect(ast.Token_REFERENCES) + n.Pktable = p.parseQualifiedName() + if p.have(ast.Token('(')) { + n.PkAttrs = p.columnList() + p.expect(ast.Token(')')) + } + n.FkMatchtype = p.parseKeyMatch() + upd, del, delCols := p.parseKeyActions() + n.FkUpdAction = upd + n.FkDelAction = del + n.FkDelSetCols = delCols + cas, casLoc := p.parseConstraintAttributeSpec() + p.processCASbits(cas, casLoc, "FOREIGN KEY", &n.Deferrable, &n.Initdeferred, &n.SkipValidation, nil) + n.InitiallyValid = !n.SkipValidation + default: + p.syntaxErrorAt() + } + return n +} + +// parseOptCInclude is gram.y's opt_c_include. +func (p *parser) parseOptCInclude() []*ast.Node { + if p.have(ast.Token_INCLUDE) { + p.expect(ast.Token('(')) + cols := p.columnList() + p.expect(ast.Token(')')) + return cols + } + return nil +} + +// parseExclusionConstraintList is gram.y's ExclusionConstraintList. +func (p *parser) parseExclusionConstraintList() []*ast.Node { + list := []*ast.Node{p.parseExclusionConstraintElem()} + for p.have(ast.Token(',')) { + list = append(list, p.parseExclusionConstraintElem()) + } + return list +} + +// parseExclusionConstraintElem is gram.y's ExclusionConstraintElem: +// +// index_elem WITH any_operator | index_elem WITH OPERATOR '(' any_operator ')' +func (p *parser) parseExclusionConstraintElem() *ast.Node { + el := p.parseIndexElem() + p.expect(ast.Token_WITH) + var op []*ast.Node + if p.have(ast.Token_OPERATOR) { + p.expect(ast.Token('(')) + op = p.parseAnyOperator() + p.expect(ast.Token(')')) + } else { + op = p.parseAnyOperator() + } + return nList([]*ast.Node{el, nList(op)}) +} + +// parseOptPartitionSpec is gram.y's OptPartitionSpec. +func (p *parser) parseOptPartitionSpec() *ast.PartitionSpec { + if p.kind() != ast.Token_PARTITION { + return nil + } + tok := p.next() + p.expect(ast.Token_BY) + stok := p.peek() + strategy := p.colId() + n := &ast.PartitionSpec{Location: tok.Start} + // gram.y: parsePartitionStrategy + switch { + case strEqualsFold(strategy, "list"): + n.Strategy = ast.PartitionStrategy_PARTITION_STRATEGY_LIST + case strEqualsFold(strategy, "range"): + n.Strategy = ast.PartitionStrategy_PARTITION_STRATEGY_RANGE + case strEqualsFold(strategy, "hash"): + n.Strategy = ast.PartitionStrategy_PARTITION_STRATEGY_HASH + default: + p.fail(p.filter.ParserError("base_yyparse", + fmt.Sprintf("unrecognized partitioning strategy %q", strategy), -1)) + _ = stok + } + p.expect(ast.Token('(')) + n.PartParams = []*ast.Node{p.parsePartElem()} + for p.have(ast.Token(',')) { + n.PartParams = append(n.PartParams, p.parsePartElem()) + } + p.expect(ast.Token(')')) + return n +} + +// parsePartElem is gram.y's part_elem. +func (p *parser) parsePartElem() *ast.Node { + tok := p.peek() + n := &ast.PartitionElem{Location: tok.Start} + switch { + case tok.Kind == ast.Token('('): + p.next() + n.Expr = p.parseAExpr(0) + p.expect(ast.Token(')')) + case p.startsFunctionCallAhead(): + n.Expr = p.parseFuncExprWindowless() + default: + n.Name = p.colId() + } + if p.have(ast.Token_COLLATE) { + n.Collation = p.anyName() + } + if isColIdToken(p.peek()) { + n.Opclass = p.anyName() + } + return &ast.Node{Node: &ast.Node_PartitionElem{PartitionElem: n}} +} + +// parsePartitionBoundSpec is gram.y's PartitionBoundSpec. +func (p *parser) parsePartitionBoundSpec() *ast.PartitionBoundSpec { + if p.have(ast.Token_DEFAULT) { + return &ast.PartitionBoundSpec{IsDefault: true, Location: p.toks[p.pos-1].Start} + } + p.expect(ast.Token_FOR) + p.expect(ast.Token_VALUES) + tok := p.peek() + switch tok.Kind { + case ast.Token_WITH: + // hash partition + p.next() + p.expect(ast.Token('(')) + n := &ast.PartitionBoundSpec{ + Strategy: "h", // PARTITION_STRATEGY_HASH + Modulus: -1, Remainder: -1, + Location: tok.Start, + } + for { + etok := p.peek() + name := p.nonReservedWord() + itok := p.peek() + val := p.iconst() + _ = itok + switch name { + case "modulus": + if n.Modulus != -1 { + p.ereport("base_yyparse", "modulus for hash partition provided more than once", etok.Start) + } + n.Modulus = val + case "remainder": + if n.Remainder != -1 { + p.ereport("base_yyparse", "remainder for hash partition provided more than once", etok.Start) + } + n.Remainder = val + default: + p.ereport("base_yyparse", + fmt.Sprintf("unrecognized hash partition bound specification %q", name), etok.Start) + } + if !p.have(ast.Token(',')) { + break + } + } + p.expect(ast.Token(')')) + if n.Modulus == -1 { + p.ereport("base_yyparse", "modulus for hash partition must be specified", -1) + } + if n.Remainder == -1 { + p.ereport("base_yyparse", "remainder for hash partition must be specified", -1) + } + return n + case ast.Token_IN_P: + p.next() + p.expect(ast.Token('(')) + n := &ast.PartitionBoundSpec{ + Strategy: "l", // PARTITION_STRATEGY_LIST + Listdatums: p.parseExprList(), + Location: tok.Start, + } + p.expect(ast.Token(')')) + return n + case ast.Token_FROM: + p.next() + p.expect(ast.Token('(')) + n := &ast.PartitionBoundSpec{ + Strategy: "r", // PARTITION_STRATEGY_RANGE + Lowerdatums: p.parseExprList(), + Location: tok.Start, + } + p.expect(ast.Token(')')) + p.expect(ast.Token_TO) + p.expect(ast.Token('(')) + n.Upperdatums = p.parseExprList() + p.expect(ast.Token(')')) + return n + } + p.syntaxErrorAt() + return nil +} + +// strEqualsFold is pg_strcasecmp(a, b) == 0 for ASCII. +func strEqualsFold(a, b string) bool { + if len(a) != len(b) { + return false + } + for i := 0; i < len(a); i++ { + ca, cb := a[i], b[i] + if 'A' <= ca && ca <= 'Z' { + ca += 'a' - 'A' + } + if 'A' <= cb && cb <= 'Z' { + cb += 'a' - 'A' + } + if ca != cb { + return false + } + } + return true +} + +// parseCreateGenericOptions is gram.y's create_generic_options: +// +// OPTIONS '(' generic_option_list ')' | empty +func (p *parser) parseCreateGenericOptions() []*ast.Node { + if p.kind() != ast.Token_OPTIONS || p.kindN(1) != ast.Token('(') { + return nil + } + p.next() + p.next() + list := []*ast.Node{p.parseGenericOptionElem()} + for p.have(ast.Token(',')) { + list = append(list, p.parseGenericOptionElem()) + } + p.expect(ast.Token(')')) + return list +} + +// parseGenericOptionElem is gram.y's generic_option_elem: +// +// generic_option_name generic_option_arg +func (p *parser) parseGenericOptionElem() *ast.Node { + tok := p.peek() + name := p.colLabel() + return makeDefElem(name, nStr(p.sconst()), tok.Start) +} + +// parseCreateSeqStmt is gram.y's CreateSeqStmt; CREATE OptTemp consumed, +// SEQUENCE not. +func (p *parser) parseCreateSeqStmt(persistence string) *ast.Node { + p.expect(ast.Token_SEQUENCE) + n := &ast.CreateSeqStmt{} + if p.have(ast.Token_IF_P) { + p.expect(ast.Token_NOT) + p.expect(ast.Token_EXISTS) + n.IfNotExists = true + } + n.Sequence = p.parseQualifiedName() + n.Sequence.Relpersistence = persistence + if p.seqOptElemStarts() { + n.Options = p.parseSeqOptList() + } + return &ast.Node{Node: &ast.Node_CreateSeqStmt{CreateSeqStmt: n}} +} + +// parseAlterSeqStmt is gram.y's AlterSeqStmt; ALTER SEQUENCE consumed. +func (p *parser) parseAlterSeqStmt() *ast.Node { + n := &ast.AlterSeqStmt{} + if p.have(ast.Token_IF_P) { + p.expect(ast.Token_EXISTS) + n.MissingOk = true + } + n.Sequence = p.parseQualifiedName() + n.Options = p.parseSeqOptList() + return &ast.Node{Node: &ast.Node_AlterSeqStmt{AlterSeqStmt: n}} +} + +// seqOptElemStarts reports whether the lookahead begins a SeqOptElem. +func (p *parser) seqOptElemStarts() bool { + switch p.kind() { + case ast.Token_AS, ast.Token_CACHE, ast.Token_CYCLE, ast.Token_INCREMENT, + ast.Token_LOGGED, ast.Token_MAXVALUE, ast.Token_MINVALUE, + ast.Token_OWNED, ast.Token_SEQUENCE, ast.Token_START, + ast.Token_RESTART, ast.Token_UNLOGGED: + return true + case ast.Token_NO: + switch p.kindN(1) { + case ast.Token_CYCLE, ast.Token_MAXVALUE, ast.Token_MINVALUE: + return true + } + } + return false +} + +// parseSeqOptList is gram.y's SeqOptList: one or more SeqOptElem. +func (p *parser) parseSeqOptList() []*ast.Node { + list := []*ast.Node{p.parseSeqOptElem()} + for p.seqOptElemStarts() { + list = append(list, p.parseSeqOptElem()) + } + return list +} + +// parseSeqOptElem is gram.y's SeqOptElem. +func (p *parser) parseSeqOptElem() *ast.Node { + tok := p.peek() + switch tok.Kind { + case ast.Token_AS: + p.next() + return makeDefElem("as", nTypeName(p.parseSimpleTypename()), tok.Start) + case ast.Token_CACHE: + p.next() + return makeDefElem("cache", p.parseNumericOnly(), tok.Start) + case ast.Token_CYCLE: + p.next() + return makeDefElem("cycle", nBoolean(true), tok.Start) + case ast.Token_NO: + p.next() + switch { + case p.have(ast.Token_CYCLE): + return makeDefElem("cycle", nBoolean(false), tok.Start) + case p.have(ast.Token_MAXVALUE): + return makeDefElem("maxvalue", nil, tok.Start) + case p.have(ast.Token_MINVALUE): + return makeDefElem("minvalue", nil, tok.Start) + } + p.syntaxErrorAt() + case ast.Token_INCREMENT: + p.next() + p.have(ast.Token_BY) + return makeDefElem("increment", p.parseNumericOnly(), tok.Start) + case ast.Token_LOGGED: + p.next() + return makeDefElem("logged", nil, tok.Start) + case ast.Token_MAXVALUE: + p.next() + return makeDefElem("maxvalue", p.parseNumericOnly(), tok.Start) + case ast.Token_MINVALUE: + p.next() + return makeDefElem("minvalue", p.parseNumericOnly(), tok.Start) + case ast.Token_OWNED: + p.next() + p.expect(ast.Token_BY) + return makeDefElem("owned_by", nList(p.anyName()), tok.Start) + case ast.Token_SEQUENCE: + p.next() + p.expect(ast.Token_NAME_P) + return makeDefElem("sequence_name", nList(p.anyName()), tok.Start) + case ast.Token_START: + p.next() + p.parseOptWith() + return makeDefElem("start", p.parseNumericOnly(), tok.Start) + case ast.Token_RESTART: + p.next() + switch p.kind() { + case ast.Token_WITH, ast.Token_WITH_LA, ast.Token_ICONST, + ast.Token_FCONST, ast.Token('+'), ast.Token('-'): + p.parseOptWith() + return makeDefElem("restart", p.parseNumericOnly(), tok.Start) + } + return makeDefElem("restart", nil, tok.Start) + case ast.Token_UNLOGGED: + p.next() + return makeDefElem("unlogged", nil, tok.Start) + } + p.syntaxErrorAt() + return nil +} + +// parseViewStmt is gram.y's ViewStmt. CREATE [OR REPLACE] [OptTemp] is +// consumed; [RECURSIVE] VIEW is not. +func (p *parser) parseViewStmt(replace bool, persistence string) *ast.Node { + n := &ast.ViewStmt{Replace: replace} + recursive := p.have(ast.Token_RECURSIVE) + p.expect(ast.Token_VIEW) + n.View = p.parseQualifiedName() + n.View.Relpersistence = persistence + if recursive { + p.expect(ast.Token('(')) + n.Aliases = p.columnList() + p.expect(ast.Token(')')) + } else if p.have(ast.Token('(')) { + n.Aliases = p.columnList() + p.expect(ast.Token(')')) + } + if p.kind() == ast.Token_WITH && p.kindN(1) == ast.Token('(') { + p.next() + n.Options = p.parseReloptions() + } + p.expect(ast.Token_AS) + query := p.parseSelectStmt() + // opt_check_option + n.WithCheckOption = ast.ViewCheckOption_NO_CHECK_OPTION + if p.kind() == ast.Token_WITH || p.kind() == ast.Token_WITH_LA { + ctok := p.peekN(1) + switch ctok.Kind { + case ast.Token_CHECK: + p.next() + p.next() + p.expect(ast.Token_OPTION) + n.WithCheckOption = ast.ViewCheckOption_CASCADED_CHECK_OPTION + case ast.Token_CASCADED: + p.next() + p.next() + p.expect(ast.Token_CHECK) + p.expect(ast.Token_OPTION) + n.WithCheckOption = ast.ViewCheckOption_CASCADED_CHECK_OPTION + case ast.Token_LOCAL: + p.next() + p.next() + p.expect(ast.Token_CHECK) + p.expect(ast.Token_OPTION) + n.WithCheckOption = ast.ViewCheckOption_LOCAL_CHECK_OPTION + } + } + if recursive { + if n.WithCheckOption != ast.ViewCheckOption_NO_CHECK_OPTION { + p.ereport("base_yyparse", "WITH CHECK OPTION not supported on recursive views", -1) + } + n.Query = makeRecursiveViewSelect(n.View.Relname, n.Aliases, query) + } else { + n.Query = query + } + return &ast.Node{Node: &ast.Node_ViewStmt{ViewStmt: n}} +} + +// makeRecursiveViewSelect wraps a recursive view's query in +// WITH RECURSIVE name (aliases) AS (query) SELECT aliases FROM name, +// mirroring gram.y's support function of the same name. +func makeRecursiveViewSelect(relname string, aliases []*ast.Node, query *ast.Node) *ast.Node { + cte := &ast.CommonTableExpr{ + Ctename: relname, + Aliascolnames: aliases, + Ctematerialized: ast.CTEMaterialize_CTEMaterializeDefault, + Ctequery: query, + Location: -1, + } + w := &ast.WithClause{ + Recursive: true, + Ctes: []*ast.Node{nCommonTableExpr(cte)}, + Location: -1, + } + var tl []*ast.Node + for _, a := range aliases { + tl = append(tl, nResTarget(&ast.ResTarget{ + Val: nColumnRef(&ast.ColumnRef{ + Fields: []*ast.Node{nStr(asString(a).Sval)}, + Location: -1, + }), + Location: -1, + })) + } + s := &ast.SelectStmt{ + WithClause: w, + TargetList: tl, + FromClause: []*ast.Node{nRangeVar(makeRangeVar("", relname, -1))}, + LimitOption: ast.LimitOption_LIMIT_OPTION_DEFAULT, + Op: ast.SetOperation_SETOP_NONE, + } + return nSelectStmt(s) +} + +// parseIndexStmt is gram.y's IndexStmt. CREATE is consumed; [UNIQUE] INDEX +// is not. +func (p *parser) parseIndexStmt() *ast.Node { + n := &ast.IndexStmt{} + n.Unique = p.have(ast.Token_UNIQUE) + p.expect(ast.Token_INDEX) + n.Concurrent = p.have(ast.Token_CONCURRENTLY) + if p.have(ast.Token_IF_P) { + p.expect(ast.Token_NOT) + p.expect(ast.Token_EXISTS) + n.IfNotExists = true + n.Idxname = p.name() + } else if p.kind() != ast.Token_ON { + n.Idxname = p.name() + } + p.expect(ast.Token_ON) + rel := p.parseRelationExpr() + n.Relation = rel.GetRangeVar() + if p.have(ast.Token_USING) { + n.AccessMethod = p.name() + } else { + n.AccessMethod = "btree" // DEFAULT_INDEX_TYPE + } + p.expect(ast.Token('(')) + n.IndexParams = p.parseIndexParams() + p.expect(ast.Token(')')) + if p.have(ast.Token_INCLUDE) { + p.expect(ast.Token('(')) + n.IndexIncludingParams = p.parseIndexParams() + p.expect(ast.Token(')')) + } + n.NullsNotDistinct = !p.parseOptUniqueNullTreatment() + if p.kind() == ast.Token_WITH && p.kindN(1) == ast.Token('(') { + p.next() + n.Options = p.parseReloptions() + } + if p.have(ast.Token_TABLESPACE) { + n.TableSpace = p.name() + } + if p.have(ast.Token_WHERE) { + n.WhereClause = p.parseAExpr(0) + } + return &ast.Node{Node: &ast.Node_IndexStmt{IndexStmt: n}} +} + +// parseCreateMatViewStmt is gram.y's CreateMatViewStmt. CREATE [UNLOGGED] +// is consumed; MATERIALIZED VIEW is not. +func (p *parser) parseCreateMatViewStmt(persistence string) *ast.Node { + p.expect(ast.Token_MATERIALIZED) + p.expect(ast.Token_VIEW) + ctas := &ast.CreateTableAsStmt{ + Objtype: ast.ObjectType_OBJECT_MATVIEW, + } + if p.have(ast.Token_IF_P) { + p.expect(ast.Token_NOT) + p.expect(ast.Token_EXISTS) + ctas.IfNotExists = true + } + // create_mv_target: qualified_name opt_column_list + // table_access_method_clause opt_reloptions OptTableSpace + rel := p.parseQualifiedName() + rel.Relpersistence = persistence + into := &ast.IntoClause{Rel: rel, OnCommit: ast.OnCommitAction_ONCOMMIT_NOOP} + if p.have(ast.Token('(')) { + into.ColNames = p.columnList() + p.expect(ast.Token(')')) + } + if p.have(ast.Token_USING) { + into.AccessMethod = p.name() + } + if p.kind() == ast.Token_WITH && p.kindN(1) == ast.Token('(') { + p.next() + into.Options = p.parseReloptions() + } + if p.have(ast.Token_TABLESPACE) { + into.TableSpaceName = p.name() + } + ctas.Into = into + p.expect(ast.Token_AS) + ctas.Query = p.parseSelectStmt() + into.SkipData = !p.parseOptWithData() + return &ast.Node{Node: &ast.Node_CreateTableAsStmt{CreateTableAsStmt: ctas}} +} + +// parseRefreshMatViewStmt is gram.y's RefreshMatViewStmt. +func (p *parser) parseRefreshMatViewStmt() *ast.Node { + p.expect(ast.Token_REFRESH) + p.expect(ast.Token_MATERIALIZED) + p.expect(ast.Token_VIEW) + n := &ast.RefreshMatViewStmt{} + n.Concurrent = p.have(ast.Token_CONCURRENTLY) + n.Relation = p.parseQualifiedName() + n.SkipData = !p.parseOptWithData() + return &ast.Node{Node: &ast.Node_RefreshMatViewStmt{RefreshMatViewStmt: n}} +} diff --git a/internal/parse/ddl_dispatch.go b/internal/parse/ddl_dispatch.go index a8340d3..a8a5548 100644 --- a/internal/parse/ddl_dispatch.go +++ b/internal/parse/ddl_dispatch.go @@ -71,6 +71,10 @@ func (p *parser) parseCreateStmtFamily(schemaElt bool) *ast.Node { p.next() return p.parseCreateTrigStmt(false, true) } + case ast.Token_MATERIALIZED: + if !schemaElt { + return p.parseCreateMatViewStmt(relPersistPermanent) + } } return nil } @@ -118,6 +122,11 @@ func (p *parser) parseOptTempHeadedCreate(schemaElt bool) *ast.Node { if p.kindN(1) == ast.Token_VIEW { return p.parseViewStmt(false, persistence) } + case ast.Token_MATERIALIZED: + // CREATE UNLOGGED MATERIALIZED VIEW (OptNoLog) + if persistence == relPersistUnlogged { + return p.parseCreateMatViewStmt(persistence) + } } p.syntaxErrorAt() return nil @@ -169,6 +178,9 @@ func (p *parser) parseAlterDispatch() *ast.Node { case ast.Token_GROUP_P: p.next() return p.parseAlterGroupStmt() + case ast.Token_SEQUENCE: + p.next() + return p.parseAlterSeqStmt() } p.syntaxErrorAt() return nil @@ -202,26 +214,6 @@ const ( // Stubs for productions landing later in milestones 6-7; each fails with // the syntax error the dispatcher would otherwise have raised. -func (p *parser) parseCreateTableOrAs(persistence string) *ast.Node { - p.syntaxErrorAt() - return nil -} - -func (p *parser) parseIndexStmt() *ast.Node { - p.syntaxErrorAt() - return nil -} - -func (p *parser) parseCreateSeqStmt(persistence string) *ast.Node { - p.syntaxErrorAt() - return nil -} - -func (p *parser) parseViewStmt(orReplace bool, persistence string) *ast.Node { - p.syntaxErrorAt() - return nil -} - func (p *parser) parseCreateTrigStmt(orReplace, isConstraint bool) *ast.Node { p.syntaxErrorAt() return nil diff --git a/internal/parse/parser.go b/internal/parse/parser.go index 4afdba5..db14651 100644 --- a/internal/parse/parser.go +++ b/internal/parse/parser.go @@ -261,6 +261,8 @@ func (p *parser) parseToplevelStmt() *ast.Node { return p.parseCheckPointStmt() case ast.Token_DISCARD: return p.parseDiscardStmt() + case ast.Token_REFRESH: + return p.parseRefreshMatViewStmt() } p.syntaxError(tok) return nil diff --git a/parser/testdata/deparse/postgres_regress/constraints.metadata.json b/parser/testdata/deparse/postgres_regress/constraints.metadata.json index 60b2f8d..2fb26ba 100644 --- a/parser/testdata/deparse/postgres_regress/constraints.metadata.json +++ b/parser/testdata/deparse/postgres_regress/constraints.metadata.json @@ -14,8 +14,6 @@ "012", "013", "014", - "015", - "016", "017", "018", "019", diff --git a/parser/testdata/deparse/postgres_regress/create_am.metadata.json b/parser/testdata/deparse/postgres_regress/create_am.metadata.json index fbb7044..7d5792b 100644 --- a/parser/testdata/deparse/postgres_regress/create_am.metadata.json +++ b/parser/testdata/deparse/postgres_regress/create_am.metadata.json @@ -35,8 +35,6 @@ "033", "034", "035", - "037", - "038", "039", "040", "041", diff --git a/parser/testdata/deparse/postgres_regress/create_index.metadata.json b/parser/testdata/deparse/postgres_regress/create_index.metadata.json index 185d38e..fdcb254 100644 --- a/parser/testdata/deparse/postgres_regress/create_index.metadata.json +++ b/parser/testdata/deparse/postgres_regress/create_index.metadata.json @@ -2,7 +2,6 @@ "todo": [ "001", "002", - "003", "004", "005", "006", diff --git a/parser/testdata/deparse/postgres_regress/create_table.metadata.json b/parser/testdata/deparse/postgres_regress/create_table.metadata.json index 5e22279..589c734 100644 --- a/parser/testdata/deparse/postgres_regress/create_table.metadata.json +++ b/parser/testdata/deparse/postgres_regress/create_table.metadata.json @@ -132,7 +132,6 @@ "131", "132", "133", - "134", "135", "136", "137", diff --git a/parser/testdata/deparse/postgres_regress/errors.metadata.json b/parser/testdata/deparse/postgres_regress/errors.metadata.json index 8516704..06607ee 100644 --- a/parser/testdata/deparse/postgres_regress/errors.metadata.json +++ b/parser/testdata/deparse/postgres_regress/errors.metadata.json @@ -67,8 +67,6 @@ "070", "071", "072", - "074", - "075", "078", "079", "080", diff --git a/parser/testdata/deparse/postgres_regress/foreign_key.metadata.json b/parser/testdata/deparse/postgres_regress/foreign_key.metadata.json index 0d39ce9..729dd21 100644 --- a/parser/testdata/deparse/postgres_regress/foreign_key.metadata.json +++ b/parser/testdata/deparse/postgres_regress/foreign_key.metadata.json @@ -382,7 +382,6 @@ "225", "226", "227", - "228", "229", "230", "231", diff --git a/parser/testdata/deparse/postgres_regress/generated.metadata.json b/parser/testdata/deparse/postgres_regress/generated.metadata.json index b6ecb7b..3dedd91 100644 --- a/parser/testdata/deparse/postgres_regress/generated.metadata.json +++ b/parser/testdata/deparse/postgres_regress/generated.metadata.json @@ -20,7 +20,6 @@ "018", "019", "020", - "021", "022", "023", "024", diff --git a/parser/testdata/deparse/postgres_regress/with.metadata.json b/parser/testdata/deparse/postgres_regress/with.metadata.json index b24b526..f20df62 100644 --- a/parser/testdata/deparse/postgres_regress/with.metadata.json +++ b/parser/testdata/deparse/postgres_regress/with.metadata.json @@ -285,8 +285,6 @@ "283", "284", "285", - "286", - "287", "288", "289", "290", diff --git a/parser/testdata/parse/deparse/ddl_create_index.metadata.json b/parser/testdata/parse/deparse/ddl_create_index.metadata.json index f23fe5c..737fd31 100644 --- a/parser/testdata/parse/deparse/ddl_create_index.metadata.json +++ b/parser/testdata/parse/deparse/ddl_create_index.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "001" - ] + "todo": [] } diff --git a/parser/testdata/parse/deparse/ddl_create_table.metadata.json b/parser/testdata/parse/deparse/ddl_create_table.metadata.json index f23fe5c..737fd31 100644 --- a/parser/testdata/parse/deparse/ddl_create_table.metadata.json +++ b/parser/testdata/parse/deparse/ddl_create_table.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "001" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/aggregates.metadata.json b/parser/testdata/parse/postgres_regress/aggregates.metadata.json index 97e2edb..86f82bb 100644 --- a/parser/testdata/parse/postgres_regress/aggregates.metadata.json +++ b/parser/testdata/parse/postgres_regress/aggregates.metadata.json @@ -1,13 +1,9 @@ { "todo": [ - "002", "004", - "081", "095", "109", "111", - "113", - "119", "125", "127", "129", @@ -22,39 +18,22 @@ "150", "152", "154", - "156", - "157", - "158", - "159", - "160", - "161", - "162", - "163", "168", "170", "172", "175", - "181", - "182", - "183", "184", "185", "186", "187", "188", - "189", "190", "191", - "192", - "193", - "194", "195", "196", "197", "198", "199", - "200", - "201", "208", "209", "210", @@ -66,23 +45,12 @@ "219", "220", "221", - "241", - "244", - "247", - "250", - "253", - "256", - "259", "262", - "275", "283", - "284", - "292", "294", "298", "306", "307", - "357", "360", "368", "369", @@ -99,8 +67,6 @@ "393", "397", "398", - "401", - "402", "403", "406", "407", @@ -108,16 +74,12 @@ "411", "414", "415", - "416", "417", - "418", "419", "422", "424", "425", "428", - "429", - "430", "432", "433", "434", @@ -133,20 +95,10 @@ "461", "463", "472", - "480", "481", - "482", "483", "486", - "487", - "488", - "490", - "491", "495", - "496", - "497", - "499", - "500", "507", "508", "509", diff --git a/parser/testdata/parse/postgres_regress/alter_generic.metadata.json b/parser/testdata/parse/postgres_regress/alter_generic.metadata.json index ab7db15..8e6a3ff 100644 --- a/parser/testdata/parse/postgres_regress/alter_generic.metadata.json +++ b/parser/testdata/parse/postgres_regress/alter_generic.metadata.json @@ -192,7 +192,6 @@ "244", "245", "246", - "248", "249", "250", "251", @@ -200,7 +199,6 @@ "253", "254", "255", - "257", "258", "259", "260", diff --git a/parser/testdata/parse/postgres_regress/alter_table.metadata.json b/parser/testdata/parse/postgres_regress/alter_table.metadata.json index 3414388..3acc344 100644 --- a/parser/testdata/parse/postgres_regress/alter_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/alter_table.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "005", "006", "007", "008", @@ -28,7 +27,6 @@ "030", "031", "034", - "035", "036", "037", "038", @@ -51,7 +49,6 @@ "055", "056", "057", - "060", "061", "062", "063", @@ -59,14 +56,10 @@ "065", "066", "067", - "068", - "069", "070", "073", "077", "078", - "079", - "080", "081", "082", "083", @@ -76,15 +69,11 @@ "088", "089", "091", - "092", - "093", "096", "099", "100", "1003", "1007", - "101", - "1010", "1011", "1012", "1013", @@ -102,8 +91,6 @@ "1031", "1033", "1035", - "1039", - "1040", "1041", "1042", "1043", @@ -152,17 +139,12 @@ "1089", "109", "1090", - "1091", "1092", "1093", - "1094", - "1095", "1096", "1097", "1098", "1099", - "1100", - "1101", "1102", "1103", "1104", @@ -175,27 +157,16 @@ "1110", "1111", "1112", - "1113", "1114", "1115", "1116", "1117", "1118", - "1119", "1120", "1121", "1122", "1123", "1124", - "1125", - "1126", - "1127", - "1128", - "1129", - "113", - "1130", - "1131", - "1132", "1133", "1134", "1135", @@ -203,34 +174,27 @@ "1137", "1138", "1139", - "114", "1140", "1141", "1142", "1143", "1144", - "1145", - "1146", "1147", "1149", - "115", "1150", "1151", "1152", "1153", "1154", "1155", - "1156", "1158", "1159", - "116", "1160", "1161", "1162", "1163", "1164", "1165", - "1166", "1167", "1168", "1169", @@ -243,9 +207,7 @@ "1176", "1177", "1178", - "1179", "118", - "1180", "1181", "1182", "1183", @@ -258,28 +220,19 @@ "1192", "1193", "1194", - "1198", - "1199", "1200", "1201", "1202", "1203", "1204", - "1208", - "1211", - "1212", "1213", "1214", "1215", "1216", "1217", - "1218", "1223", "1224", "1225", - "1226", - "1228", - "1229", "123", "1230", "1231", @@ -288,10 +241,7 @@ "1235", "1236", "1237", - "1238", "124", - "1240", - "1241", "1242", "1243", "1244", @@ -300,7 +250,6 @@ "1248", "1249", "1250", - "1251", "1252", "1253", "1254", @@ -314,51 +263,35 @@ "1262", "1263", "1264", - "1265", - "1267", "1268", "1269", - "1270", "1272", "1273", - "1274", "1275", "1276", - "1277", "1278", "1279", "128", - "1280", "1281", "1282", - "1283", "1284", "1285", "1286", "1287", "1288", - "1289", "129", "1290", "1291", "1292", "1293", - "1294", - "1295", "1296", "1297", - "1298", - "1299", "1300", "1301", "1302", - "1305", "1306", - "1308", "1309", "1311", - "1314", - "1315", "1316", "1317", "1318", @@ -366,71 +299,45 @@ "132", "1320", "1323", - "1324", - "1325", "1326", "1327", "1328", - "1329", - "133", "1330", "1331", - "1332", "1333", "1334", - "1335", "1336", "1337", - "1338", "1339", "134", "1340", "1341", "1342", - "1343", "1344", "1345", "1346", "1347", - "1348", "1349", - "1352", "1353", "1354", - "1355", "1356", - "1357", "1358", - "1359", "136", - "1360", "1362", "1364", - "1365", - "1367", "1368", "1370", - "1371", "1372", "1373", "1374", "1375", "1376", - "1377", - "1378", - "1379", "1381", "1383", - "1384", "1385", - "1386", - "1387", "1388", - "1390", "1391", "1392", - "1393", - "1394", "1396", "1398", "1399", @@ -438,11 +345,8 @@ "1401", "1402", "1403", - "1404", "1405", "1406", - "1407", - "1408", "1409", "1410", "1411", @@ -450,53 +354,34 @@ "1413", "1416", "1417", - "1418", - "1419", - "1421", "1422", "1424", "1425", "1426", "1427", - "1428", - "1429", "143", - "1430", - "1431", "1432", - "1433", "1434", "1435", - "1436", - "1437", "1438", - "1439", "144", - "1440", - "1441", "1442", "1443", "1444", - "1445", "1447", "1449", "145", - "1450", - "1451", "1453", "1455", - "1456", "1457", "1458", "1459", "146", "1460", - "1461", "1462", "1463", "1464", "1465", - "1466", "1467", "1468", "1469", @@ -504,26 +389,18 @@ "1470", "1471", "1474", - "1475", - "1476", "1477", "1478", "148", "1480", - "1481", - "1482", "1484", - "1486", "1487", "1488", "1489", "149", "1490", - "1491", "1492", "1493", - "1494", - "1495", "1496", "1497", "1499", @@ -541,7 +418,6 @@ "151", "1510", "1511", - "1512", "1513", "1514", "1515", @@ -552,8 +428,6 @@ "152", "1520", "1521", - "1522", - "1523", "1524", "1525", "1526", @@ -563,9 +437,6 @@ "1530", "1531", "1532", - "1533", - "1534", - "1535", "1536", "1537", "1538", @@ -575,100 +446,69 @@ "1543", "1544", "1545", - "1546", - "1547", "1548", "1549", "155", "1550", - "1551", "1553", "1554", "1555", "1556", - "1558", - "1559", "156", - "1560", "1561", "1563", "1565", "1566", - "1567", "1568", "1569", - "157", - "1570", - "1571", - "1572", - "1573", "1574", "1575", "1576", "1577", "1578", - "1579", - "158", "1580", "1581", "1583", "1584", "1585", "1586", - "1587", - "1588", "1589", "159", "1590", "1591", "1592", - "1593", - "1594", "1596", "1597", "1599", "160", "1600", - "1602", - "1603", "1604", "1605", "1606", "1607", - "1608", "1609", "161", - "1610", "1611", "1612", "1613", - "1614", - "1615", "1616", "1617", "1618", "1619", "162", "1620", - "1621", "1622", "1623", - "1624", "1625", - "1626", "1627", "1629", "163", "1631", "1633", "1635", - "1636", - "1637", - "1638", "164", "1640", "1642", - "1646", "1648", "165", "1650", @@ -680,16 +520,10 @@ "168", "169", "170", - "171", "172", "173", - "174", "175", "176", - "177", - "178", - "179", - "180", "188", "189", "190", @@ -704,8 +538,6 @@ "202", "204", "205", - "207", - "208", "210", "211", "213", @@ -713,8 +545,6 @@ "216", "217", "218", - "219", - "220", "223", "224", "226", @@ -726,49 +556,33 @@ "233", "234", "235", - "237", - "238", - "239", "240", "241", "242", - "243", "244", "245", "246", "247", "248", - "249", - "251", "252", "253", "254", - "255", "256", "259", - "260", "261", "262", "263", - "264", - "266", "267", "270", "271", - "272", - "273", "274", "275", - "276", "277", "278", - "279", "280", "281", "282", "283", - "284", - "285", "286", "287", "288", @@ -778,31 +592,20 @@ "292", "293", "294", - "297", "298", "301", - "302", "304", "306", - "307", "308", "309", - "310", "311", "314", - "315", "316", "318", - "319", - "320", - "321", "322", "327", "328", "329", - "330", - "331", - "332", "333", "334", "337", @@ -820,73 +623,54 @@ "350", "352", "353", - "354", - "355", "356", "360", "361", "362", - "363", "364", "368", "369", - "370", "373", "375", - "376", "377", "378", - "379", "380", "386", - "387", "388", "391", - "392", "393", "398", "399", "400", "401", - "402", "405", "407", - "408", "410", "412", - "413", "414", "415", - "416", "418", "419", "420", - "421", "423", "424", - "425", "426", "427", "428", - "429", "431", "432", "433", - "434", "436", "437", "438", - "439", "440", "441", "450", - "451", "455", "456", "457", "458", "459", - "460", "461", "462", "463", @@ -895,12 +679,10 @@ "468", "469", "470", - "471", "472", "473", "474", "475", - "476", "478", "479", "480", @@ -917,8 +699,6 @@ "495", "496", "497", - "498", - "499", "500", "503", "506", @@ -928,7 +708,6 @@ "514", "516", "517", - "518", "520", "522", "524", @@ -936,7 +715,6 @@ "528", "529", "530", - "531", "532", "534", "536", @@ -945,14 +723,12 @@ "541", "542", "543", - "544", "546", "547", "582", "583", "584", "585", - "586", "588", "589", "590", @@ -981,52 +757,33 @@ "613", "614", "615", - "616", "617", "618", "619", "620", "621", - "622", - "623", - "625", "627", "630", "631", "632", "633", "635", - "636", "638", "639", "642", - "643", "645", - "646", "650", "653", "654", - "655", - "656", - "657", - "658", - "659", "660", "661", - "662", "664", "674", - "675", - "676", - "677", "678", "679", "680", "681", "682", - "683", - "684", - "685", "686", "687", "688", @@ -1036,58 +793,38 @@ "692", "693", "694", - "695", - "696", "697", "698", "700", "702", - "703", - "704", "705", "706", "708", - "709", - "710", "711", "712", "713", "714", - "715", - "716", "717", "718", "719", "720", - "721", - "722", - "723", - "724", "726", "727", "728", "729", "730", "731", - "732", "733", "734", "736", - "737", - "738", - "739", "740", - "742", - "743", "744", "745", "752", "753", - "754", "757", "764", "765", - "766", "770", "771", "772", @@ -1100,120 +837,73 @@ "784", "785", "787", - "788", "789", "790", "791", "792", - "793", - "794", "795", "796", "797", "798", - "799", "804", "806", - "808", "809", - "811", - "812", "813", "814", - "815", "816", "818", - "819", - "820", "821", "822", - "823", - "824", - "826", - "828", - "829", "830", "831", "832", - "833", "834", "835", - "836", "837", "838", - "839", "840", "841", - "844", "847", "850", - "851", "852", "853", "854", "855", - "856", "857", "858", "859", - "860", "862", "863", "865", - "867", - "868", "869", - "870", - "871", "873", "875", "876", "877", "878", "880", - "882", - "883", "884", "886", - "887", - "888", - "889", - "890", "891", "892", "893", "897", "898", - "899", - "900", "902", "903", "905", - "906", - "908", - "909", "910", - "912", "913", "915", "916", "917", - "919", - "920", - "921", - "922", - "923", "924", "929", - "930", "939", "940", "941", "942", "943", - "944", - "945", - "947", "950", "954", "958", diff --git a/parser/testdata/parse/postgres_regress/amutils.metadata.json b/parser/testdata/parse/postgres_regress/amutils.metadata.json index 9048bdc..e2f1b87 100644 --- a/parser/testdata/parse/postgres_regress/amutils.metadata.json +++ b/parser/testdata/parse/postgres_regress/amutils.metadata.json @@ -1,7 +1,5 @@ { "todo": [ - "006", - "007", - "009" + "007" ] } diff --git a/parser/testdata/parse/postgres_regress/arrays.metadata.json b/parser/testdata/parse/postgres_regress/arrays.metadata.json index 77fa56a..8f24aaa 100644 --- a/parser/testdata/parse/postgres_regress/arrays.metadata.json +++ b/parser/testdata/parse/postgres_regress/arrays.metadata.json @@ -1,21 +1,9 @@ { "todo": [ - "001", - "002", "004", - "048", - "064", - "075", - "107", - "109", - "119", "155", - "223", - "234", "245", - "300", "312", - "313", "315", "318", "319", @@ -24,10 +12,7 @@ "322", "325", "326", - "444", - "449", "451", - "452", "458", "460", "461" diff --git a/parser/testdata/parse/postgres_regress/bit.metadata.json b/parser/testdata/parse/postgres_regress/bit.metadata.json index 815e758..b4f7717 100644 --- a/parser/testdata/parse/postgres_regress/bit.metadata.json +++ b/parser/testdata/parse/postgres_regress/bit.metadata.json @@ -1,17 +1,10 @@ { "todo": [ - "001", - "008", "030", - "031", "036", "037", - "038", "043", - "085", - "096", "105", - "106", - "120" + "106" ] } diff --git a/parser/testdata/parse/postgres_regress/bitmapops.metadata.json b/parser/testdata/parse/postgres_regress/bitmapops.metadata.json index c9906ad..e9cea49 100644 --- a/parser/testdata/parse/postgres_regress/bitmapops.metadata.json +++ b/parser/testdata/parse/postgres_regress/bitmapops.metadata.json @@ -1,8 +1,5 @@ { "todo": [ - "001", - "003", - "004", "010" ] } diff --git a/parser/testdata/parse/postgres_regress/boolean.metadata.json b/parser/testdata/parse/postgres_regress/boolean.metadata.json index 134ef67..b0dc46d 100644 --- a/parser/testdata/parse/postgres_regress/boolean.metadata.json +++ b/parser/testdata/parse/postgres_regress/boolean.metadata.json @@ -1,9 +1,5 @@ { "todo": [ - "044", - "054", - "073", - "078", "095", "096", "097", diff --git a/parser/testdata/parse/postgres_regress/box.metadata.json b/parser/testdata/parse/postgres_regress/box.metadata.json index c237578..fa1b208 100644 --- a/parser/testdata/parse/postgres_regress/box.metadata.json +++ b/parser/testdata/parse/postgres_regress/box.metadata.json @@ -1,8 +1,5 @@ { "todo": [ - "001", - "030", - "032", "036", "038", "040", @@ -16,13 +13,7 @@ "056", "058", "060", - "061", - "065", - "069", - "070", "089", - "090", - "092", - "093" + "092" ] } diff --git a/parser/testdata/parse/postgres_regress/brin.metadata.json b/parser/testdata/parse/postgres_regress/brin.metadata.json index fe269bd..85cbf8b 100644 --- a/parser/testdata/parse/postgres_regress/brin.metadata.json +++ b/parser/testdata/parse/postgres_regress/brin.metadata.json @@ -1,34 +1,17 @@ { "todo": [ - "001", - "004", - "005", "007", "012", - "022", - "023", "024", - "031", - "032", "038", - "039", - "041", - "042", "043", "044", "045", - "046", - "048", - "050", "051", "052", "055", "057", - "059", - "060", "062", - "063", - "065", "067", "068" ] diff --git a/parser/testdata/parse/postgres_regress/brin_bloom.metadata.json b/parser/testdata/parse/postgres_regress/brin_bloom.metadata.json index 4c593f7..4630539 100644 --- a/parser/testdata/parse/postgres_regress/brin_bloom.metadata.json +++ b/parser/testdata/parse/postgres_regress/brin_bloom.metadata.json @@ -1,19 +1,8 @@ { "todo": [ - "001", - "004", - "005", - "006", - "007", - "008", "010", "015", - "025", - "026", "027", - "034", - "036", - "037", "038", "039", "040" diff --git a/parser/testdata/parse/postgres_regress/brin_multi.metadata.json b/parser/testdata/parse/postgres_regress/brin_multi.metadata.json index f9b38d0..d70c61d 100644 --- a/parser/testdata/parse/postgres_regress/brin_multi.metadata.json +++ b/parser/testdata/parse/postgres_regress/brin_multi.metadata.json @@ -1,60 +1,28 @@ { "todo": [ - "001", - "004", - "005", - "006", "007", - "008", - "009", "011", "016", - "020", - "021", "024", - "032", - "034", "035", - "036", - "037", "038", - "045", - "047", - "048", "049", "050", "051", - "052", - "054", - "055", "099", - "101", - "103", "119", - "121", - "125", "126", - "127", - "130", "132", "133", - "135", - "138", "140", "141", "142", - "144", - "147", "149", "150", "151", - "154", - "157", "159", "160", "161", - "163", - "166", "168", "169", "170" diff --git a/parser/testdata/parse/postgres_regress/btree_index.metadata.json b/parser/testdata/parse/postgres_regress/btree_index.metadata.json index 01a76b8..92e0733 100644 --- a/parser/testdata/parse/postgres_regress/btree_index.metadata.json +++ b/parser/testdata/parse/postgres_regress/btree_index.metadata.json @@ -1,17 +1,9 @@ { "todo": [ - "001", - "002", - "003", - "004", "009", "010", "011", "012", - "013", - "014", - "015", - "016", "032", "034", "036", @@ -23,29 +15,17 @@ "052", "054", "056", - "060", - "061", "063", "065", "067", "069", - "072", - "073", - "074", "075", "076", - "079", "080", - "081", - "083", "085", "087", - "089", - "090", "091", "092", - "093", - "094", "095", "096" ] diff --git a/parser/testdata/parse/postgres_regress/case.metadata.json b/parser/testdata/parse/postgres_regress/case.metadata.json index 5a66509..77463e8 100644 --- a/parser/testdata/parse/postgres_regress/case.metadata.json +++ b/parser/testdata/parse/postgres_regress/case.metadata.json @@ -1,7 +1,5 @@ { "todo": [ - "001", - "002", "033", "034", "035", diff --git a/parser/testdata/parse/postgres_regress/char.metadata.json b/parser/testdata/parse/postgres_regress/char.metadata.json index 80ec909..4346845 100644 --- a/parser/testdata/parse/postgres_regress/char.metadata.json +++ b/parser/testdata/parse/postgres_regress/char.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "002", "018" ] } diff --git a/parser/testdata/parse/postgres_regress/circle.metadata.json b/parser/testdata/parse/postgres_regress/circle.metadata.json index 4ba0f2e..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/circle.metadata.json +++ b/parser/testdata/parse/postgres_regress/circle.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "002" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/cluster.metadata.json b/parser/testdata/parse/postgres_regress/cluster.metadata.json index 4fbe298..fafcb7f 100644 --- a/parser/testdata/parse/postgres_regress/cluster.metadata.json +++ b/parser/testdata/parse/postgres_regress/cluster.metadata.json @@ -1,19 +1,9 @@ { "todo": [ - "001", - "002", - "003", - "004", - "005", - "006", - "013", "046", "057", "059", "061", - "063", - "064", - "065", "066", "067", "068", @@ -22,49 +12,25 @@ "077", "090", "096", - "098", "111", - "115", "117", "119", "121", - "122", "123", "124", - "125", - "126", - "127", - "128", - "129", - "130", - "131", - "132", "133", "134", - "135", - "136", "137", - "138", "140", "141", "142", "143", - "144", - "145", - "146", - "148", "149", "151", "153", - "154", "156", "159", - "161", - "162", "165", - "169", - "171", - "172", "175", "177", "180", diff --git a/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json b/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json index cd0974b..0a5f57d 100644 --- a/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json @@ -1,35 +1,14 @@ { "todo": [ - "005", - "006", - "007", - "008", - "009", - "010", - "011", "023", "024", - "025", - "028", - "040", - "062", - "070", - "071", - "072", "089", - "111", "120", "121", "122", "125", "127", "134", - "138", - "139", - "140", - "141", - "142", - "143", "146", "148", "155", @@ -58,12 +37,8 @@ "186", "188", "189", - "190", "191", "192", - "193", - "194", - "195", "196", "197", "198", @@ -81,73 +56,15 @@ "225", "226", "228", - "229", "233", "234", "235", "236", - "237", - "243", "249", "250", "253", "255", - "257", - "258", - "259", - "281", - "283", - "286", - "287", - "288", - "289", - "309", - "311", - "314", - "315", - "316", - "317", - "337", - "339", - "342", - "344", - "357", - "362", "366", - "368", - "374", - "376", - "387", - "389", - "400", - "401", - "405", - "406", - "410", - "411", - "412", - "416", - "417", - "418", - "422", - "423", - "424", - "428", - "429", - "430", - "434", - "435", - "439", - "440", - "444", - "445", - "446", - "450", - "451", - "452", - "458", - "459", - "460", "462", "464", "467", diff --git a/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json b/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json index 32172f1..d3b07af 100644 --- a/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json @@ -1,35 +1,14 @@ { "todo": [ - "005", - "006", - "007", - "008", - "009", - "010", - "011", "023", "024", - "025", - "028", - "040", - "062", - "078", - "079", - "080", "097", - "119", "128", "129", "130", "133", "135", "142", - "146", - "147", - "148", - "149", - "150", - "151", "155", "156", "157", @@ -53,12 +32,8 @@ "179", "181", "182", - "183", "184", "185", - "186", - "187", - "188", "189", "190", "191", diff --git a/parser/testdata/parse/postgres_regress/collate.metadata.json b/parser/testdata/parse/postgres_regress/collate.metadata.json index 660d10e..afb6be6 100644 --- a/parser/testdata/parse/postgres_regress/collate.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.metadata.json @@ -1,30 +1,10 @@ { "todo": [ - "003", - "004", - "005", - "006", "013", "014", - "015", - "018", - "028", - "033", - "034", - "035", "048", - "071", "083", "087", - "090", - "091", - "092", - "093", - "094", - "095", - "100", - "102", - "105", "107", "109", "113", @@ -37,11 +17,8 @@ "121", "122", "123", - "124", "125", "126", - "127", - "133", "134", "135", "136", diff --git a/parser/testdata/parse/postgres_regress/collate.utf8.metadata.json b/parser/testdata/parse/postgres_regress/collate.utf8.metadata.json index 2f0f974..5fb5fdd 100644 --- a/parser/testdata/parse/postgres_regress/collate.utf8.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.utf8.metadata.json @@ -4,7 +4,6 @@ "004", "005", "006", - "007", "010" ] } diff --git a/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json b/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json index 8b0dc93..eecf679 100644 --- a/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json @@ -1,33 +1,14 @@ { "todo": [ - "005", - "006", - "007", - "008", - "009", - "010", - "011", "023", "024", - "025", - "028", - "053", - "057", - "058", "072", - "093", "099", "100", "101", "104", "106", "113", - "117", - "118", - "119", - "120", - "121", - "122", "126", "127", "128", @@ -51,12 +32,8 @@ "150", "152", "153", - "154", "155", "156", - "157", - "158", - "159", "160", "161", "162", diff --git a/parser/testdata/parse/postgres_regress/combocid.metadata.json b/parser/testdata/parse/postgres_regress/combocid.metadata.json index d1241a5..257320f 100644 --- a/parser/testdata/parse/postgres_regress/combocid.metadata.json +++ b/parser/testdata/parse/postgres_regress/combocid.metadata.json @@ -1,7 +1,5 @@ { "todo": [ - "001", - "052", "062" ] } diff --git a/parser/testdata/parse/postgres_regress/compression.metadata.json b/parser/testdata/parse/postgres_regress/compression.metadata.json index 353bf12..be1ce7d 100644 --- a/parser/testdata/parse/postgres_regress/compression.metadata.json +++ b/parser/testdata/parse/postgres_regress/compression.metadata.json @@ -1,31 +1,14 @@ { "todo": [ - "002", - "003", - "005", - "013", - "017", "018", - "019", - "020", "025", - "026", "033", - "034", "035", "036", "037", "038", "039", - "042", - "045", - "046", - "047", "048", - "053", - "054", - "055", - "056", "061", "064", "065", @@ -33,10 +16,6 @@ "067", "073", "075", - "076", - "077", - "084", - "085", "086", "087" ] diff --git a/parser/testdata/parse/postgres_regress/constraints.metadata.json b/parser/testdata/parse/postgres_regress/constraints.metadata.json index 2fd6de9..4e24078 100644 --- a/parser/testdata/parse/postgres_regress/constraints.metadata.json +++ b/parser/testdata/parse/postgres_regress/constraints.metadata.json @@ -1,89 +1,41 @@ { "todo": [ - "001", - "008", - "009", - "015", - "016", - "017", "018", - "019", - "027", - "028", - "036", - "037", - "059", "063", - "064", - "065", "071", - "072", - "073", "076", - "077", - "078", "083", - "085", - "086", "096", - "102", - "107", "115", - "116", "124", - "125", "137", - "138", "148", - "149", "157", - "158", "175", "176", - "198", - "199", - "200", "210", - "211", - "212", "213", "215", - "216", - "217", "218", - "219", - "220", "221", "222", "224", "225", - "226", - "227", - "228", "229", "230", "231", - "232", - "233", - "234", "235", "236", "237", - "238", - "239", "240", - "241", "243", "257", - "258", "267", "268", "269", - "270", "288", "290", "291", - "294", "295", "296", "297", @@ -100,8 +52,6 @@ "314", "315", "316", - "317", - "318", "319" ] } diff --git a/parser/testdata/parse/postgres_regress/conversion.metadata.json b/parser/testdata/parse/postgres_regress/conversion.metadata.json index bb855f0..bd160ed 100644 --- a/parser/testdata/parse/postgres_regress/conversion.metadata.json +++ b/parser/testdata/parse/postgres_regress/conversion.metadata.json @@ -11,14 +11,6 @@ "012", "013", "014", - "017", - "018", - "025", - "034", - "038", - "043", - "047", - "053", - "058" + "017" ] } diff --git a/parser/testdata/parse/postgres_regress/copy.metadata.json b/parser/testdata/parse/postgres_regress/copy.metadata.json index f4d28fd..8eaa05a 100644 --- a/parser/testdata/parse/postgres_regress/copy.metadata.json +++ b/parser/testdata/parse/postgres_regress/copy.metadata.json @@ -1,35 +1,21 @@ { "todo": [ - "001", - "007", - "014", - "017", - "020", - "021", - "022", "023", "024", "037", "038", - "042", "043", "047", - "048", "049", "050", "054", "055", "056", - "057", "058", "059", "070", "076", - "077", "081", - "082", - "083", - "084", "087" ] } diff --git a/parser/testdata/parse/postgres_regress/copydml.metadata.json b/parser/testdata/parse/postgres_regress/copydml.metadata.json index 656afe6..46b41c7 100644 --- a/parser/testdata/parse/postgres_regress/copydml.metadata.json +++ b/parser/testdata/parse/postgres_regress/copydml.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "001", "013", "015", "016", diff --git a/parser/testdata/parse/postgres_regress/copyselect.metadata.json b/parser/testdata/parse/postgres_regress/copyselect.metadata.json index 0e9fa4a..949c5c7 100644 --- a/parser/testdata/parse/postgres_regress/copyselect.metadata.json +++ b/parser/testdata/parse/postgres_regress/copyselect.metadata.json @@ -1,8 +1,5 @@ { "todo": [ - "001", - "007", - "013", "021" ] } diff --git a/parser/testdata/parse/postgres_regress/create_am.metadata.json b/parser/testdata/parse/postgres_regress/create_am.metadata.json index 6190df8..8bac815 100644 --- a/parser/testdata/parse/postgres_regress/create_am.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_am.metadata.json @@ -3,9 +3,7 @@ "001", "002", "003", - "004", "005", - "006", "008", "012", "014", @@ -15,66 +13,31 @@ "027", "028", "029", - "031", - "034", - "037", - "038", - "039", - "041", "043", - "044", - "046", - "048", - "050", - "051", - "054", "056", "058", "060", "065", "068", - "071", "073", "076", "077", "078", "079", "080", - "081", "083", - "086", "089", "093", "097", "099", - "103", - "105", "107", - "108", "109", - "111", "112", - "113", - "114", "115", - "116", - "117", "119", - "123", - "124", - "126", - "127", - "128", - "129", - "130", - "131", "132", "133", "134", - "137", - "138", - "139", - "140", "141", "142" ] diff --git a/parser/testdata/parse/postgres_regress/create_function_sql.metadata.json b/parser/testdata/parse/postgres_regress/create_function_sql.metadata.json index 650ae32..4c9a745 100644 --- a/parser/testdata/parse/postgres_regress/create_function_sql.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_function_sql.metadata.json @@ -39,15 +39,12 @@ "060", "063", "065", - "068", "069", "071", "072", "073", "074", "089", - "090", - "092", "093", "095", "096", @@ -56,10 +53,8 @@ "100", "101", "102", - "103", "104", "105", - "106", "107", "112", "113", @@ -72,7 +67,6 @@ "120", "121", "122", - "123", "125", "127", "128", @@ -81,7 +75,6 @@ "133", "135", "137", - "138", "139", "141", "144", diff --git a/parser/testdata/parse/postgres_regress/create_index.metadata.json b/parser/testdata/parse/postgres_regress/create_index.metadata.json index c315fd5..88e28a7 100644 --- a/parser/testdata/parse/postgres_regress/create_index.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_index.metadata.json @@ -1,38 +1,10 @@ { "todo": [ - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", "017", "018", "019", - "020", - "021", - "022", - "023", - "024", "027", "028", - "029", - "030", - "032", - "033", - "036", - "037", - "038", "065", "067", "069", @@ -55,70 +27,28 @@ "103", "105", "110", - "115", "117", - "125", "126", - "139", "140", "153", - "154", - "165", - "167", "169", - "170", - "171", - "172", "173", - "175", "176", "178", - "180", - "181", - "182", "190", - "192", - "193", - "195", "198", - "199", - "200", "206", - "207", - "208", - "214", - "215", - "216", - "221", "222", "223", - "224", - "225", - "226", - "229", - "230", - "232", - "233", - "234", - "235", - "237", "239", - "240", "241", "242", - "244", "246", "247", "249", "250", - "251", - "253", "254", "255", - "257", - "259", - "261", - "263", "264", "265", "266", @@ -131,45 +61,25 @@ "275", "276", "277", - "278", - "280", "281", - "282", "283", "284", - "285", "286", - "287", "288", "289", - "290", - "291", "292", "293", - "294", - "295", "296", "297", - "298", - "299", - "300", - "301", "302", - "303", - "305", "315", - "316", "324", - "325", "332", "333", "340", - "341", "354", "355", "357", - "359", - "360", "361", "362", "364", @@ -186,67 +96,38 @@ "386", "388", "390", - "391", "392", "393", "394", "395", "396", "397", - "398", "399", "400", - "401", "402", "403", "404", - "405", - "406", - "407", - "408", "409", - "410", - "413", "415", "416", - "418", "420", "421", "422", - "424", - "425", "426", "428", "430", "432", - "433", - "434", "435", "436", "438", - "439", - "440", "441", "443", "445", - "446", - "447", - "448", "449", "450", - "451", - "452", - "453", - "454", - "455", - "456", - "457", "458", - "459", "460", - "461", "462", - "463", "464", "468", "469", @@ -287,47 +168,26 @@ "521", "522", "523", - "524", - "526", "527", "528", "530", "531", "532", - "533", - "535", - "536", - "537", "538", "539", "544", "548", "554", - "555", - "557", "558", "559", "561", - "563", - "564", "565", "566", - "568", - "570", "571", - "573", "575", "577", "578", - "581", - "583", - "585", - "586", - "587", - "588", - "589", "592", - "593", "595", "597", "599", diff --git a/parser/testdata/parse/postgres_regress/create_index_spgist.metadata.json b/parser/testdata/parse/postgres_regress/create_index_spgist.metadata.json index 081602a..9ab1f9c 100644 --- a/parser/testdata/parse/postgres_regress/create_index_spgist.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_index_spgist.metadata.json @@ -1,14 +1,5 @@ { "todo": [ - "001", - "004", - "005", - "006", - "007", - "011", - "025", - "026", - "027", "045", "047", "049", @@ -20,11 +11,8 @@ "061", "063", "065", - "066", "068", - "069", "071", - "072", "074", "076", "078", @@ -33,12 +21,8 @@ "084", "086", "088", - "089", "091", - "092", "094", - "095", - "098", "099", "103", "105", diff --git a/parser/testdata/parse/postgres_regress/create_misc.metadata.json b/parser/testdata/parse/postgres_regress/create_misc.metadata.json index 6d5c740..f26b67d 100644 --- a/parser/testdata/parse/postgres_regress/create_misc.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_misc.metadata.json @@ -1,11 +1,5 @@ { "todo": [ - "001", - "002", - "003", - "004", - "005", - "006", "057", "058", "059", diff --git a/parser/testdata/parse/postgres_regress/create_procedure.metadata.json b/parser/testdata/parse/postgres_regress/create_procedure.metadata.json index f4aa813..54d49ff 100644 --- a/parser/testdata/parse/postgres_regress/create_procedure.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_procedure.metadata.json @@ -1,7 +1,6 @@ { "todo": [ "003", - "004", "005", "012", "017", diff --git a/parser/testdata/parse/postgres_regress/create_role.metadata.json b/parser/testdata/parse/postgres_regress/create_role.metadata.json index b8c9e3c..7ab11ba 100644 --- a/parser/testdata/parse/postgres_regress/create_role.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_role.metadata.json @@ -7,9 +7,6 @@ "051", "053", "054", - "057", - "058", - "059", "060", "062", "063", @@ -18,7 +15,6 @@ "066", "068", "071", - "073", "074", "077", "078", diff --git a/parser/testdata/parse/postgres_regress/create_table.metadata.json b/parser/testdata/parse/postgres_regress/create_table.metadata.json index 07df449..9c61d92 100644 --- a/parser/testdata/parse/postgres_regress/create_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_table.metadata.json @@ -1,295 +1,83 @@ { "todo": [ - "001", "002", - "003", - "004", - "005", "007", "008", "010", - "012", - "013", - "014", - "015", - "016", - "017", "018", - "019", - "020", - "021", "022", - "024", - "025", - "027", "028", "032", - "033", - "034", - "035", "036", - "037", "038", - "039", "041", - "042", - "043", - "044", - "045", - "046", - "047", - "048", - "050", "052", "055", - "056", "058", "060", "063", - "064", - "065", "066", - "067", "068", - "069", - "070", - "071", - "072", "073", - "074", "075", "076", - "077", - "078", - "079", - "080", "081", - "082", "083", - "084", - "085", - "086", - "087", - "088", "089", - "090", "092", - "093", - "094", - "096", "097", - "098", - "099", - "100", "101", "102", - "103", - "104", - "105", "106", "107", "108", - "109", "110", "111", "112", "114", - "115", "116", "117", "118", - "120", - "121", - "122", - "123", - "124", - "125", - "126", - "127", - "128", - "129", - "130", - "131", - "132", - "133", - "134", - "135", - "136", - "137", - "138", - "139", - "140", "141", - "142", - "143", - "144", - "145", "146", - "147", - "148", - "149", "150", - "151", - "152", - "153", - "154", - "155", - "156", - "157", - "158", - "159", - "160", - "161", - "162", - "163", - "164", - "165", - "166", - "167", - "168", - "169", - "170", - "171", - "172", - "173", - "174", - "175", - "176", - "177", - "178", - "179", "180", - "181", - "182", "183", - "184", - "185", - "186", - "187", - "188", - "189", - "191", - "192", - "193", - "194", - "195", - "196", - "197", - "198", - "199", - "200", - "201", - "202", - "203", - "204", - "205", - "207", - "208", - "209", - "210", - "211", - "212", - "213", - "214", - "215", - "216", - "217", - "218", - "219", - "220", - "221", - "222", - "223", - "224", - "225", - "226", - "227", - "229", - "230", "232", "234", "235", "236", - "238", - "239", - "240", - "241", - "242", "244", - "245", - "246", - "247", "248", - "249", - "250", - "251", "252", - "253", - "254", - "255", - "256", - "257", "258", - "259", - "260", "261", - "262", - "263", - "264", "265", "266", "267", - "268", - "269", "272", "273", "274", "275", - "276", "277", "278", "280", - "281", - "282", - "283", "284", - "285", - "286", - "287", "288", - "289", - "290", - "291", - "292", - "293", "294", "295", - "296", "297", "298", "300", "301", - "302", - "303", - "304", "307", - "308", - "309", "310", "311", "312", - "313", - "315", "316", - "317", "318", "319", "320", - "321", - "322", - "323", - "324", - "325", "326" ] } diff --git a/parser/testdata/parse/postgres_regress/create_table_like.metadata.json b/parser/testdata/parse/postgres_regress/create_table_like.metadata.json index 501f3ef..19c62e0 100644 --- a/parser/testdata/parse/postgres_regress/create_table_like.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_table_like.metadata.json @@ -1,54 +1,20 @@ { "todo": [ - "001", - "002", - "003", - "004", - "005", - "011", - "012", "015", "016", - "017", "019", - "020", "025", - "026", - "029", - "032", "035", - "036", - "039", - "042", "045", - "046", - "047", - "048", - "049", - "050", - "059", - "060", - "061", - "062", "063", "064", - "065", "066", "067", "068", - "069", "072", - "073", - "074", - "075", - "076", "080", "081", - "082", "083", - "084", - "085", - "086", "087", "088", "089", @@ -59,42 +25,18 @@ "094", "095", "096", - "097", "098", "099", - "100", "101", "102", - "103", "104", "105", "106", - "107", "108", - "109", - "110", - "111", - "113", - "114", - "116", - "119", - "120", - "121", "122", - "126", "128", - "129", - "130", - "131", "132", - "133", - "134", - "135", - "136", - "137", - "138", "139", - "140", "141", "142", "143", diff --git a/parser/testdata/parse/postgres_regress/create_type.metadata.json b/parser/testdata/parse/postgres_regress/create_type.metadata.json index 9175d93..8c35676 100644 --- a/parser/testdata/parse/postgres_regress/create_type.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_type.metadata.json @@ -19,7 +19,6 @@ "017", "018", "019", - "020", "023", "024", "025", @@ -44,11 +43,8 @@ "045", "046", "047", - "048", - "049", "062", "063", - "065", "068", "069", "070", diff --git a/parser/testdata/parse/postgres_regress/create_view.metadata.json b/parser/testdata/parse/postgres_regress/create_view.metadata.json index ade9478..3ff780c 100644 --- a/parser/testdata/parse/postgres_regress/create_view.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_view.metadata.json @@ -1,102 +1,16 @@ { "todo": [ "001", - "002", "004", - "006", - "007", - "008", "009", "010", "011", - "012", - "013", "014", - "015", - "016", - "018", - "019", - "021", - "023", - "024", - "025", - "026", - "027", - "028", "029", "030", "031", - "033", - "034", - "035", - "036", - "037", - "038", "039", - "040", - "041", - "042", - "043", - "044", - "045", - "046", - "047", - "048", - "049", - "050", - "051", - "052", - "053", - "054", - "055", - "056", - "057", - "058", - "063", - "064", - "065", - "066", - "067", - "068", - "069", - "070", - "071", - "072", - "073", - "076", - "077", - "078", - "079", - "080", - "081", - "083", - "085", - "086", - "087", - "088", - "089", - "090", - "091", - "092", - "093", - "094", - "096", - "097", - "098", - "099", - "100", - "101", - "102", - "104", - "106", "109", - "110", - "111", - "112", - "113", - "114", - "115", - "116", "117", "118", "119", @@ -105,94 +19,43 @@ "122", "123", "124", - "125", "126", "127", - "128", - "129", - "130", - "131", - "132", - "133", - "138", - "139", - "140", - "141", - "142", - "143", - "144", - "145", "151", "152", "158", "164", "165", "171", - "177", - "178", - "179", "181", "183", "185", - "187", "188", - "191", "192", - "193", - "194", - "196", - "198", "200", "201", "202", "203", - "207", "208", - "209", - "210", - "212", - "213", - "214", "216", - "218", - "219", - "220", - "221", "223", - "225", "227", "228", - "229", "232", "235", "237", "241", "244", "249", - "250", "253", "255", "257", - "258", - "262", - "266", - "270", "271", - "272", "274", - "278", "280", "282", - "284", - "286", - "288", - "291", - "293", "295", "296", - "297", - "299", - "300", "306", "307" ] diff --git a/parser/testdata/parse/postgres_regress/date.metadata.json b/parser/testdata/parse/postgres_regress/date.metadata.json index f23fe5c..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/date.metadata.json +++ b/parser/testdata/parse/postgres_regress/date.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "001" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/delete.metadata.json b/parser/testdata/parse/postgres_regress/delete.metadata.json index b7e3a9e..e9cea49 100644 --- a/parser/testdata/parse/postgres_regress/delete.metadata.json +++ b/parser/testdata/parse/postgres_regress/delete.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "001", "010" ] } diff --git a/parser/testdata/parse/postgres_regress/dependency.metadata.json b/parser/testdata/parse/postgres_regress/dependency.metadata.json index b82a2fe..ed7ee3a 100644 --- a/parser/testdata/parse/postgres_regress/dependency.metadata.json +++ b/parser/testdata/parse/postgres_regress/dependency.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "005", "006", "007", "010", @@ -14,22 +13,16 @@ "028", "029", "030", - "031", "032", - "034", "035", "037", "038", "039", - "042", "043", "044", "045", "046", - "047", - "048", "049", - "050", "051", "054", "057", diff --git a/parser/testdata/parse/postgres_regress/domain.metadata.json b/parser/testdata/parse/postgres_regress/domain.metadata.json index bdf8a2a..fa81ee8 100644 --- a/parser/testdata/parse/postgres_regress/domain.metadata.json +++ b/parser/testdata/parse/postgres_regress/domain.metadata.json @@ -10,7 +10,6 @@ "008", "009", "010", - "013", "023", "024", "025", @@ -22,7 +21,6 @@ "039", "040", "041", - "042", "063", "064", "065", @@ -30,16 +28,13 @@ "067", "068", "069", - "070", "071", "072", - "073", "075", "077", "079", "084", "085", - "086", "088", "090", "092", @@ -47,12 +42,10 @@ "097", "100", "102", - "103", "106", "109", "112", "113", - "114", "117", "118", "119", @@ -60,7 +53,6 @@ "126", "127", "128", - "129", "131", "133", "135", @@ -69,14 +61,11 @@ "142", "143", "144", - "145", "147", "148", "149", "151", - "152", "153", - "154", "158", "160", "162", @@ -90,11 +79,9 @@ "172", "173", "174", - "181", "188", "189", "190", - "191", "194", "195", "196", @@ -104,30 +91,24 @@ "206", "212", "213", - "214", "216", "217", - "218", "220", "221", "222", - "223", "225", "226", "227", "228", - "229", "231", "232", "233", "234", - "235", "237", "238", "239", "240", "241", - "242", "246", "247", "248", @@ -140,7 +121,6 @@ "259", "262", "263", - "266", "272", "275", "276", @@ -154,7 +134,6 @@ "290", "291", "292", - "295", "299", "300", "301", diff --git a/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json b/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json index bac7d61..61c2f6f 100644 --- a/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json +++ b/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json @@ -2,20 +2,16 @@ "todo": [ "001", "002", - "003", "004", "005", - "006", "007", "008", "009", "010", - "011", "012", "013", "014", "015", - "016", "017", "018", "019", diff --git a/parser/testdata/parse/postgres_regress/enum.metadata.json b/parser/testdata/parse/postgres_regress/enum.metadata.json index d817f2c..0dfdd82 100644 --- a/parser/testdata/parse/postgres_regress/enum.metadata.json +++ b/parser/testdata/parse/postgres_regress/enum.metadata.json @@ -43,10 +43,7 @@ "054", "055", "056", - "058", - "075", "085", - "086", "088", "091", "095", @@ -54,10 +51,7 @@ "111", "113", "115", - "116", - "117", "122", - "123", "124", "125", "127", diff --git a/parser/testdata/parse/postgres_regress/equivclass.metadata.json b/parser/testdata/parse/postgres_regress/equivclass.metadata.json index 4022f33..fd5d95c 100644 --- a/parser/testdata/parse/postgres_regress/equivclass.metadata.json +++ b/parser/testdata/parse/postgres_regress/equivclass.metadata.json @@ -29,9 +29,6 @@ "027", "028", "029", - "030", - "031", - "032", "035", "036", "037", @@ -41,10 +38,6 @@ "041", "042", "043", - "044", - "045", - "046", - "047", "048", "049", "050", @@ -62,8 +55,6 @@ "073", "075", "076", - "077", - "078", "079" ] } diff --git a/parser/testdata/parse/postgres_regress/errors.metadata.json b/parser/testdata/parse/postgres_regress/errors.metadata.json index 8ea3965..95ed748 100644 --- a/parser/testdata/parse/postgres_regress/errors.metadata.json +++ b/parser/testdata/parse/postgres_regress/errors.metadata.json @@ -44,8 +44,6 @@ "056", "057", "058", - "074", - "075", "078", "079", "080", diff --git a/parser/testdata/parse/postgres_regress/event_trigger.metadata.json b/parser/testdata/parse/postgres_regress/event_trigger.metadata.json index f16e1c7..fa872c8 100644 --- a/parser/testdata/parse/postgres_regress/event_trigger.metadata.json +++ b/parser/testdata/parse/postgres_regress/event_trigger.metadata.json @@ -20,14 +20,9 @@ "019", "022", "024", - "025", "026", - "028", "029", - "030", "031", - "032", - "034", "035", "037", "039", @@ -50,18 +45,8 @@ "058", "059", "060", - "064", - "066", - "067", - "068", - "069", - "070", - "071", - "072", "073", "074", - "076", - "078", "079", "080", "081", @@ -78,11 +63,6 @@ "097", "098", "099", - "100", - "101", - "102", - "103", - "104", "105", "106", "107", @@ -94,11 +74,9 @@ "113", "114", "115", - "116", "117", "118", "119", - "120", "121", "122", "123", @@ -108,12 +86,10 @@ "127", "129", "130", - "131", "133", "134", "135", "136", - "137", "138", "139", "140", @@ -122,10 +98,7 @@ "147", "149", "150", - "151", - "152", "153", - "154", "155", "156", "157", @@ -136,8 +109,6 @@ "162", "163", "164", - "165", - "166", "167", "168", "169", @@ -150,21 +121,16 @@ "176", "178", "179", - "180", - "181", "182", "183", "184", "185", "186", "187", - "188", "189", "190", - "191", "192", "193", - "194", "195", "196", "197", @@ -177,7 +143,6 @@ "204", "205", "206", - "208", "209", "210", "211", diff --git a/parser/testdata/parse/postgres_regress/event_trigger_login.metadata.json b/parser/testdata/parse/postgres_regress/event_trigger_login.metadata.json index 8b00fe0..c2a2541 100644 --- a/parser/testdata/parse/postgres_regress/event_trigger_login.metadata.json +++ b/parser/testdata/parse/postgres_regress/event_trigger_login.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "001", "002", "003", "004", diff --git a/parser/testdata/parse/postgres_regress/explain.metadata.json b/parser/testdata/parse/postgres_regress/explain.metadata.json index 3eaab8e..e942496 100644 --- a/parser/testdata/parse/postgres_regress/explain.metadata.json +++ b/parser/testdata/parse/postgres_regress/explain.metadata.json @@ -2,13 +2,7 @@ "todo": [ "001", "002", - "029", - "030", - "031", - "032", - "033", "035", - "043", "044" ] } diff --git a/parser/testdata/parse/postgres_regress/expressions.metadata.json b/parser/testdata/parse/postgres_regress/expressions.metadata.json index 3ded1ce..4ece716 100644 --- a/parser/testdata/parse/postgres_regress/expressions.metadata.json +++ b/parser/testdata/parse/postgres_regress/expressions.metadata.json @@ -1,10 +1,6 @@ { "todo": [ - "021", - "022", "023", - "024", - "025", "026", "028", "029", @@ -21,7 +17,6 @@ "059", "060", "061", - "062", - "063" + "062" ] } diff --git a/parser/testdata/parse/postgres_regress/fast_default.metadata.json b/parser/testdata/parse/postgres_regress/fast_default.metadata.json index 8f0b084..1ad6e8f 100644 --- a/parser/testdata/parse/postgres_regress/fast_default.metadata.json +++ b/parser/testdata/parse/postgres_regress/fast_default.metadata.json @@ -1,16 +1,13 @@ { "todo": [ - "003", "005", "006", "007", - "008", "009", "010", "011", "012", "013", - "014", "017", "019", "021", @@ -26,7 +23,6 @@ "041", "045", "046", - "047", "050", "052", "054", @@ -39,7 +35,6 @@ "068", "069", "070", - "071", "073", "075", "076", @@ -50,14 +45,12 @@ "084", "085", "086", - "087", "090", "092", "094", "095", "097", "098", - "099", "102", "104", "107", @@ -66,70 +59,53 @@ "115", "117", "121", - "122", "125", "127", "129", - "132", - "135", "136", "138", "139", - "140", "142", "143", "144", "148", - "149", "151", "152", "153", "157", - "158", "160", "161", "162", "166", - "167", "169", "170", "171", "175", - "176", "178", "179", "180", "184", - "185", "187", "188", "189", "193", - "194", "196", "197", "198", "202", - "203", "205", "206", "207", "211", - "212", - "213", "215", "216", - "218", "220", "221", "223", - "225", "227", "228", "230", - "233", "235", - "236", "243", "244", "245", @@ -151,7 +127,6 @@ "262", "263", "264", - "266", "268" ] } diff --git a/parser/testdata/parse/postgres_regress/float4.metadata.json b/parser/testdata/parse/postgres_regress/float4.metadata.json index 2e39566..ae4e66b 100644 --- a/parser/testdata/parse/postgres_regress/float4.metadata.json +++ b/parser/testdata/parse/postgres_regress/float4.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "001", "090", "091", "092", diff --git a/parser/testdata/parse/postgres_regress/float8.metadata.json b/parser/testdata/parse/postgres_regress/float8.metadata.json index e0ffb1c..93682db 100644 --- a/parser/testdata/parse/postgres_regress/float8.metadata.json +++ b/parser/testdata/parse/postgres_regress/float8.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "001", "139", "159", "160", diff --git a/parser/testdata/parse/postgres_regress/foreign_data.metadata.json b/parser/testdata/parse/postgres_regress/foreign_data.metadata.json index 23b1a19..2555abb 100644 --- a/parser/testdata/parse/postgres_regress/foreign_data.metadata.json +++ b/parser/testdata/parse/postgres_regress/foreign_data.metadata.json @@ -144,44 +144,31 @@ "200", "201", "202", - "203", "204", "205", "206", "207", "208", "209", - "210", "212", - "213", "214", - "215", - "216", "217", "218", - "219", - "220", "221", "222", "223", "224", - "225", "226", "227", "228", "229", "230", "231", - "232", - "233", - "234", "235", "236", "237", - "238", "239", "240", - "241", "242", "243", "244", @@ -213,7 +200,6 @@ "270", "271", "272", - "273", "274", "275", "276", @@ -324,12 +310,10 @@ "423", "424", "425", - "426", "427", "428", "429", "430", - "431", "432", "433", "434", @@ -379,7 +363,6 @@ "480", "481", "482", - "483", "484", "485", "486", @@ -403,7 +386,6 @@ "504", "505", "506", - "507", "508", "509", "510", diff --git a/parser/testdata/parse/postgres_regress/foreign_key.metadata.json b/parser/testdata/parse/postgres_regress/foreign_key.metadata.json index f9892de..4be9c08 100644 --- a/parser/testdata/parse/postgres_regress/foreign_key.metadata.json +++ b/parser/testdata/parse/postgres_regress/foreign_key.metadata.json @@ -1,11 +1,7 @@ { "todo": [ - "001", - "002", "018", "019", - "020", - "021", "022", "023", "024", @@ -13,26 +9,15 @@ "050", "053", "054", - "055", - "056", "080", "081", "082", - "083", - "084", - "1000", "1005", - "1008", - "1009", - "1010", - "1011", "1012", - "1013", "1018", "1019", "1020", "1021", - "1022", "1023", "1024", "1028", @@ -42,14 +27,9 @@ "1037", "1038", "104", - "105", - "106", - "1065", "1075", "1076", - "1077", "1078", - "1079", "1080", "1081", "109", @@ -72,131 +52,56 @@ "1116", "1117", "1118", - "112", "1120", "1121", "1124", "1125", "1128", "1129", - "113", "1131", "1132", "1133", "1135", - "1140", - "1141", - "1142", "1143", - "1144", - "1145", "1153", "131", "132", - "133", - "134", "142", "143", - "144", - "145", "167", "168", - "169", - "170", "193", "194", - "195", - "196", "223", "224", - "225", - "226", - "227", - "228", - "229", "235", "236", - "237", - "238", - "239", - "240", - "241", "242", - "243", - "244", "245", "246", - "247", - "249", - "250", - "251", "256", - "257", "258", - "259", - "261", "266", "267", - "268", - "269", - "270", - "271", - "272", - "273", - "274", "275", - "276", "277", "278", - "279", "280", - "281", "282", - "283", - "284", - "285", - "286", - "287", - "288", "298", - "300", "310", "311", "312", - "313", - "314", "324", "325", - "326", - "327", - "328", - "329", - "330", - "331", - "332", "333", "334", - "335", - "336", - "337", - "338", - "339", "340", "341", - "342", - "343", "350", - "351", - "352", "361", - "362", - "363", "370", - "371", - "372", "376", - "377", - "378", "379", "380", "381", @@ -210,78 +115,39 @@ "389", "390", "391", - "392", - "393", "417", "424", "425", "426", "427", - "428", - "432", - "447", - "455", - "456", "463", - "467", - "468", "476", - "477", - "478", "485", - "486", - "487", "488", "489", - "491", - "492", "497", - "498", - "499", - "500", "502", - "503", - "504", "520", "524", "526", - "527", - "528", "536", - "537", "538", - "539", "540", - "541", "542", "543", "544", - "545", "546", "547", - "548", "549", - "550", - "551", "552", "553", "554", "574", "575", - "576", - "577", - "578", "581", "583", - "584", - "585", - "586", "587", - "588", - "589", "590", - "598", - "599", "601", "603", "605", @@ -294,59 +160,36 @@ "637", "638", "644", - "645", "646", "648", "650", "651", - "652", "653", "654", "655", - "656", - "657", - "658", "659", "660", "661", "662", - "663", - "664", "665", "666", "667", "668", "669", "670", - "671", - "672", - "673", "675", "677", - "678", - "679", "680", "681", - "682", - "683", - "684", "685", "686", "688", - "690", - "691", "693", "697", "698", "700", - "702", - "703", "704", - "705", - "706", - "707", "708", - "709", "710", "716", "719", @@ -361,16 +204,12 @@ "731", "732", "733", - "734", "735", - "736", - "737", "738", "739", "740", "741", "746", - "747", "750", "751", "752", @@ -380,39 +219,18 @@ "756", "757", "768", - "771", - "772", - "773", "774", "775", "776", - "777", - "778", "779", - "780", "781", "782", - "783", - "784", "785", - "786", "787", - "788", - "789", "790", - "791", - "825", - "826", "827", "828", "829", - "832", - "833", - "834", - "835", - "836", - "837", - "839", "841", "842", "843", @@ -428,87 +246,32 @@ "854", "855", "856", - "859", - "860", - "861", - "862", - "863", - "864", "865", - "866", - "867", - "868", - "869", "870", "871", "872", - "873", - "874", "875", "876", - "878", "880", - "883", - "884", - "885", - "886", - "887", - "903", - "904", - "905", - "906", "907", "908", "915", - "916", - "917", - "918", - "919", - "920", - "921", "922", "925", "926", "931", - "932", - "933", - "934", - "935", "936", "937", "944", - "945", - "946", - "947", - "948", - "949", "950", "951", "952", "959", "960", - "963", - "964", - "965", - "966", - "967", - "968", - "969", - "970", "971", - "972", "979", - "982", - "983", - "984", - "985", "986", - "987", "992", - "995", - "996", - "997", - "998", "999" ] } diff --git a/parser/testdata/parse/postgres_regress/functional_deps.metadata.json b/parser/testdata/parse/postgres_regress/functional_deps.metadata.json index 641220a..60a073a 100644 --- a/parser/testdata/parse/postgres_regress/functional_deps.metadata.json +++ b/parser/testdata/parse/postgres_regress/functional_deps.metadata.json @@ -1,24 +1,13 @@ { "todo": [ - "001", - "002", - "013", - "014", "017", - "019", - "020", - "023", - "024", "025", "026", - "027", "028", "029", "030", - "031", "032", "033", - "034", "035", "036", "039" diff --git a/parser/testdata/parse/postgres_regress/generated.metadata.json b/parser/testdata/parse/postgres_regress/generated.metadata.json index b66ba58..d94bac8 100644 --- a/parser/testdata/parse/postgres_regress/generated.metadata.json +++ b/parser/testdata/parse/postgres_regress/generated.metadata.json @@ -1,58 +1,17 @@ { "todo": [ - "002", - "003", - "006", - "007", - "008", - "009", - "010", - "011", - "012", "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "021", - "039", "042", - "048", "052", - "053", "061", "066", - "068", - "073", - "074", - "075", "076", "077", - "078", - "079", - "080", - "081", "082", - "083", "084", - "085", "086", - "087", - "088", "089", - "090", - "091", "092", - "093", - "094", - "095", - "096", - "097", - "102", - "103", - "108" + "102" ] } diff --git a/parser/testdata/parse/postgres_regress/geometry.metadata.json b/parser/testdata/parse/postgres_regress/geometry.metadata.json index 3e9af09..718c792 100644 --- a/parser/testdata/parse/postgres_regress/geometry.metadata.json +++ b/parser/testdata/parse/postgres_regress/geometry.metadata.json @@ -1,8 +1,6 @@ { "todo": [ - "151", "153", - "155", "157" ] } diff --git a/parser/testdata/parse/postgres_regress/gin.metadata.json b/parser/testdata/parse/postgres_regress/gin.metadata.json index dd545a4..0a15311 100644 --- a/parser/testdata/parse/postgres_regress/gin.metadata.json +++ b/parser/testdata/parse/postgres_regress/gin.metadata.json @@ -1,15 +1,11 @@ { "todo": [ - "001", - "002", "007", "010", "011", "015", "016", "019", - "022", - "023", "026", "029", "031", @@ -21,8 +17,6 @@ "046", "049", "055", - "056", - "057", "059" ] } diff --git a/parser/testdata/parse/postgres_regress/gist.metadata.json b/parser/testdata/parse/postgres_regress/gist.metadata.json index d54b82a..05dd33c 100644 --- a/parser/testdata/parse/postgres_regress/gist.metadata.json +++ b/parser/testdata/parse/postgres_regress/gist.metadata.json @@ -1,42 +1,26 @@ { "todo": [ - "001", - "002", - "003", - "004", - "005", "006", - "007", - "008", - "009", "014", "015", "016", - "017", "019", - "023", "024", "026", "028", "030", "032", - "033", "034", "036", "038", "040", - "041", "042", "044", - "045", "046", "048", "050", "052", - "054", "058", - "059", - "060", "062" ] } diff --git a/parser/testdata/parse/postgres_regress/groupingsets.metadata.json b/parser/testdata/parse/postgres_regress/groupingsets.metadata.json index bdd92b2..9a7e90e 100644 --- a/parser/testdata/parse/postgres_regress/groupingsets.metadata.json +++ b/parser/testdata/parse/postgres_regress/groupingsets.metadata.json @@ -1,18 +1,12 @@ { "todo": [ - "001", - "002", - "004", "006", - "007", - "009", "010", "037", "043", "045", "047", "051", - "052", "065", "071", "073", @@ -35,16 +29,12 @@ "131", "132", "134", - "137", "138", "139", - "145", "146", "147", "153", - "154", "157", - "158", "163", "164", "169", diff --git a/parser/testdata/parse/postgres_regress/guc.metadata.json b/parser/testdata/parse/postgres_regress/guc.metadata.json index 2d7f68e..2946f44 100644 --- a/parser/testdata/parse/postgres_regress/guc.metadata.json +++ b/parser/testdata/parse/postgres_regress/guc.metadata.json @@ -1,7 +1,5 @@ { "todo": [ - "141", - "149", "170", "174", "176", @@ -12,7 +10,6 @@ "188", "199", "201", - "208", "214" ] } diff --git a/parser/testdata/parse/postgres_regress/hash_index.metadata.json b/parser/testdata/parse/postgres_regress/hash_index.metadata.json index 12dd7e2..e6c643c 100644 --- a/parser/testdata/parse/postgres_regress/hash_index.metadata.json +++ b/parser/testdata/parse/postgres_regress/hash_index.metadata.json @@ -1,39 +1,18 @@ { "todo": [ - "001", - "002", - "003", - "004", "009", "010", "011", "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "044", - "046", "059", "060", "061", "062", - "063", - "064", "070", "078", "086", "087", - "088", - "090", "091", - "092", - "094", - "095", - "096", - "097" + "095" ] } diff --git a/parser/testdata/parse/postgres_regress/hash_part.metadata.json b/parser/testdata/parse/postgres_regress/hash_part.metadata.json index f585d02..718acae 100644 --- a/parser/testdata/parse/postgres_regress/hash_part.metadata.json +++ b/parser/testdata/parse/postgres_regress/hash_part.metadata.json @@ -1,11 +1,5 @@ { "todo": [ - "001", - "002", - "017", - "022", - "023", - "024", "026", "027", "028" diff --git a/parser/testdata/parse/postgres_regress/horology.metadata.json b/parser/testdata/parse/postgres_regress/horology.metadata.json index 95b6627..ed0043a 100644 --- a/parser/testdata/parse/postgres_regress/horology.metadata.json +++ b/parser/testdata/parse/postgres_regress/horology.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "193", "201", "216", "218", diff --git a/parser/testdata/parse/postgres_regress/identity.metadata.json b/parser/testdata/parse/postgres_regress/identity.metadata.json index 56c9f23..8964c78 100644 --- a/parser/testdata/parse/postgres_regress/identity.metadata.json +++ b/parser/testdata/parse/postgres_regress/identity.metadata.json @@ -1,10 +1,6 @@ { "todo": [ - "002", - "003", - "004", "005", - "009", "010", "011", "012", @@ -12,57 +8,33 @@ "014", "015", "016", - "017", - "018", - "019", - "020", - "033", "051", - "069", "073", "074", "075", "077", - "081", - "082", - "083", - "084", "097", - "098", "099", "101", "103", - "104", "105", "106", "108", - "109", "110", "111", - "112", "113", "114", "115", "116", - "117", "119", "124", - "125", - "126", - "129", - "130", - "131", - "134", - "135", "136", "137", "139", "140", "141", - "143", "144", "149", - "151", "152", "153", "154", @@ -72,19 +44,11 @@ "159", "161", "162", - "163", "164", - "165", - "166", - "169", "171", "172", "173", - "176", "180", - "183", - "184", - "185", "188", "194", "195", @@ -92,8 +56,6 @@ "197", "203", "209", - "210", - "211", "214", "216", "217", @@ -107,29 +69,17 @@ "234", "235", "236", - "237", - "238", - "239", "240", "241", "242", "243", - "244", "245", "246", - "248", - "249", - "250", "251", - "252", "253", - "254", - "255", "264", "265", - "266", "267", - "268", "269" ] } diff --git a/parser/testdata/parse/postgres_regress/incremental_sort.metadata.json b/parser/testdata/parse/postgres_regress/incremental_sort.metadata.json index 6ee51e3..ef0aeb6 100644 --- a/parser/testdata/parse/postgres_regress/incremental_sort.metadata.json +++ b/parser/testdata/parse/postgres_regress/incremental_sort.metadata.json @@ -2,7 +2,6 @@ "todo": [ "001", "003", - "005", "006", "007", "008", @@ -32,8 +31,6 @@ "070", "072", "075", - "081", - "083", "084", "086", "088", @@ -49,8 +46,6 @@ "106", "107", "108", - "116", - "117", "118", "119" ] diff --git a/parser/testdata/parse/postgres_regress/index_including.metadata.json b/parser/testdata/parse/postgres_regress/index_including.metadata.json index 0f614d2..621e7bb 100644 --- a/parser/testdata/parse/postgres_regress/index_including.metadata.json +++ b/parser/testdata/parse/postgres_regress/index_including.metadata.json @@ -1,79 +1,40 @@ { "todo": [ - "001", - "003", - "004", - "006", - "008", "009", "010", - "012", - "014", "015", - "016", "018", - "020", - "022", "023", - "025", "027", - "028", "032", - "033", "039", "042", "044", - "046", "050", - "051", "057", - "058", "063", - "064", - "065", "067", "069", - "070", - "071", "073", "075", - "076", "078", "080", "082", - "083", - "084", "085", "086", "087", "088", "089", - "090", - "092", "094", - "095", "097", "099", "101", "103", - "104", - "105", - "106", - "107", - "108", - "109", - "110", - "111", "112", - "113", - "115", "121", - "122", "124", "125", "126", - "127", - "128", "130", "132", "135" diff --git a/parser/testdata/parse/postgres_regress/index_including_gist.metadata.json b/parser/testdata/parse/postgres_regress/index_including_gist.metadata.json index 45ca302..bcfad8b 100644 --- a/parser/testdata/parse/postgres_regress/index_including_gist.metadata.json +++ b/parser/testdata/parse/postgres_regress/index_including_gist.metadata.json @@ -1,30 +1,17 @@ { "todo": [ - "001", - "003", "007", "009", - "010", - "011", "016", "018", - "019", - "021", "023", - "024", - "026", "028", "030", "032", - "033", - "035", "039", - "040", - "042", "043", "044", "045", - "046", "049", "050" ] diff --git a/parser/testdata/parse/postgres_regress/indexing.metadata.json b/parser/testdata/parse/postgres_regress/indexing.metadata.json index 45b02ea..ae5e3ab 100644 --- a/parser/testdata/parse/postgres_regress/indexing.metadata.json +++ b/parser/testdata/parse/postgres_regress/indexing.metadata.json @@ -1,66 +1,26 @@ { "todo": [ - "001", - "002", "005", - "006", - "007", - "008", - "009", "011", - "012", "014", - "015", - "016", - "017", "018", - "019", - "020", - "021", "023", - "024", - "025", - "026", "028", "029", - "030", - "031", - "032", - "033", "034", - "035", - "036", "037", "038", "040", "041", - "042", - "043", - "044", - "045", "047", - "048", - "049", - "050", "051", "052", "053", - "055", "056", "058", - "059", - "060", - "061", "062", "063", "065", - "066", - "067", - "068", - "069", - "070", - "071", - "072", "073", "074", "075", @@ -70,56 +30,21 @@ "079", "080", "081", - "082", "083", "084", - "086", - "087", - "088", - "089", - "090", - "091", - "092", "093", "094", - "095", - "096", - "097", - "098", - "099", - "100", - "101", - "102", "104", "106", - "107", "108", "109", - "110", - "111", - "112", - "113", "115", - "117", - "119", "121", - "122", - "123", - "124", - "125", - "126", "128", - "130", "131", "133", - "134", - "135", - "136", - "137", - "138", "139", "140", - "141", "143", "144", "145", @@ -127,211 +52,97 @@ "147", "148", "150", - "152", - "153", - "154", - "155", - "156", "157", "158", - "159", "161", "162", "163", "164", "166", - "168", - "169", - "170", - "171", "172", "173", "174", - "175", - "176", - "177", - "178", - "179", "180", "181", - "182", "184", - "185", - "186", - "187", - "188", - "189", - "190", "191", "192", - "193", - "194", - "195", "197", - "198", - "199", - "200", - "201", "202", "203", - "204", - "205", - "206", "208", - "209", "210", "211", - "212", - "213", "214", "215", "216", - "217", - "218", - "219", - "220", - "221", - "222", - "223", "224", "225", "226", "227", "228", "230", - "231", - "232", - "233", - "234", "235", - "236", - "237", - "238", "239", "241", - "242", - "243", - "244", "245", "246", "247", - "248", "249", - "250", - "251", "252", "254", - "255", "256", - "257", "258", "259", - "260", - "261", "262", "263", - "264", "266", - "267", "268", "269", "270", - "271", - "272", - "273", "274", "276", - "277", "278", "279", "280", - "281", - "282", - "283", "284", "286", - "287", - "288", "289", - "290", - "291", "292", - "293", - "294", - "295", - "296", - "297", "298", - "299", "300", - "301", "302", - "303", "304", - "305", - "306", - "307", "308", - "309", - "310", "311", - "312", - "313", - "314", "315", "316", - "317", "318", - "319", "320", "321", "322", - "323", "324", "325", - "326", "327", "328", - "329", "330", "331", - "332", "333", "334", - "335", "336", "337", - "338", "339", "340", - "341", "342", "343", - "344", "345", "346", - "347", - "348", - "349", - "350", - "351", - "352", "353", "355", - "356", - "357", "358", - "359", - "360", "361", "362", - "363", - "364", - "365", "367", - "368", - "369", - "370", "371", "372", "374", @@ -340,26 +151,17 @@ "377", "378", "380", - "381", - "382", "383", "384", "385", - "386", - "387", - "388", "389", "390", "391", - "392", - "393", "394", "395", "396", "398", "400", - "401", - "402", "403", "404", "405", @@ -368,123 +170,48 @@ "408", "409", "410", - "411", - "412", - "413", "414", "415", "417", - "418", - "419", - "420", "421", "422", "423", "424", - "425", - "426", - "427", "429", - "430", "431", "440", - "441", - "442", - "444", "445", "446", - "447", "448", "449", - "450", "451", "452", "454", - "455", - "456", - "457", - "458", - "459", - "460", - "461", "462", - "463", - "464", - "465", - "466", "467", - "468", - "469", "470", - "473", - "474", - "475", "476", "477", "478", - "479", - "480", "481", - "482", - "483", - "484", "485", - "487", - "488", - "489", - "490", - "493", "494", "495", - "498", - "499", - "500", "501", - "504", - "505", - "506", "507", "508", "509", "510", - "511", - "512", "513", "514", "515", "516", - "517", - "518", - "519", - "520", - "521", - "522", - "523", "524", "525", - "526", - "527", - "528", - "529", - "530", - "531", "532", "534", - "535", - "536", - "537", - "538", - "539", - "541", - "542", "544", - "546", - "547", - "548", - "549", - "550", "551", - "552", "554", "556", "557", diff --git a/parser/testdata/parse/postgres_regress/indirect_toast.metadata.json b/parser/testdata/parse/postgres_regress/indirect_toast.metadata.json index 4a01470..a2ec601 100644 --- a/parser/testdata/parse/postgres_regress/indirect_toast.metadata.json +++ b/parser/testdata/parse/postgres_regress/indirect_toast.metadata.json @@ -1,7 +1,6 @@ { "todo": [ "001", - "003", "014", "016", "017", diff --git a/parser/testdata/parse/postgres_regress/inet.metadata.json b/parser/testdata/parse/postgres_regress/inet.metadata.json index e73ecde..dbea2be 100644 --- a/parser/testdata/parse/postgres_regress/inet.metadata.json +++ b/parser/testdata/parse/postgres_regress/inet.metadata.json @@ -1,17 +1,13 @@ { "todo": [ "001", - "002", - "036", "038", "040", "042", "044", "047", - "048", "061", "064", - "065", "078", "081" ] diff --git a/parser/testdata/parse/postgres_regress/inherit.metadata.json b/parser/testdata/parse/postgres_regress/inherit.metadata.json index 54e44a7..90447bf 100644 --- a/parser/testdata/parse/postgres_regress/inherit.metadata.json +++ b/parser/testdata/parse/postgres_regress/inherit.metadata.json @@ -1,81 +1,35 @@ { "todo": [ - "001", - "002", - "003", - "004", - "078", - "080", - "081", - "083", "084", "085", "086", "088", "089", - "090", - "091", "093", "095", "098", - "099", - "100", - "101", - "102", - "119", - "121", - "123", - "124", - "125", - "126", "134", "135", - "136", - "137", - "138", - "139", - "140", - "141", "145", "146", - "147", - "148", - "149", - "150", - "151", - "152", "153", "155", - "157", - "158", - "159", "160", "161", - "162", "163", "164", - "166", - "167", "168", - "169", - "170", - "171", "175", "176", "177", "178", "179", - "180", - "181", "182", - "183", "186", "187", "188", "189", - "190", "191", - "192", "196", "197", "199", @@ -87,123 +41,65 @@ "211", "213", "214", - "215", - "216", "218", "219", - "220", - "221", - "222", "224", "226", "227", "228", - "229", - "230", - "231", "233", "234", "237", - "239", - "240", "241", "242", - "243", - "244", "245", - "246", "247", "248", - "249", - "250", - "251", "252", "253", "254", "255", "256", - "257", - "258", - "259", - "260", "261", "262", - "263", - "264", - "265", "266", - "267", "268", "269", "271", - "272", - "273", "274", "275", "276", - "277", - "278", "279", "280", "281", - "282", - "283", - "284", "285", "286", "287", "288", - "289", - "291", - "293", "298", - "299", - "300", "301", "302", "303", "304", "306", - "307", - "308", "309", "310", "311", - "312", - "313", - "314", - "315", "316", "317", "318", - "319", - "320", - "321", - "322", "323", "324", - "325", - "326", - "327", - "328", "329", "330", "331", "332", "333", - "334", - "335", "336", "337", "338", "340", "341", - "345", - "346", - "348", - "350", - "351", - "352", "353", "354", "355", @@ -211,27 +107,14 @@ "358", "359", "361", - "362", - "363", - "364", - "365", - "366", - "367", - "368", "376", "378", "383", "385", "389", "391", - "392", - "393", - "394", - "395", "397", "399", - "400", - "401", "404", "405", "406", @@ -243,60 +126,28 @@ "415", "416", "417", - "422", - "423", "424", "427", "430", - "431", - "432", - "433", "434", "435", "437", "442", - "443", - "444", "450", "453", "454", - "456", - "458", "460", "462", "464", "465", - "467", - "468", - "469", - "470", - "471", "478", "479", - "480", - "481", - "482", - "483", "484", "485", "486", "487", "488", "489", - "490", - "491", - "492", - "493", - "494", - "495", - "496", - "497", - "498", - "499", - "500", - "501", - "502", - "503", "504", "505", "506", @@ -307,14 +158,6 @@ "511", "512", "513", - "514", - "515", - "516", - "517", - "518", - "519", - "520", - "521", "522", "523", "524", @@ -322,82 +165,44 @@ "526", "527", "528", - "529", - "530", - "531", "533", "535", - "536", "537", "538", "539", "540", "541", - "542", - "543", - "544", "545", "546", "547", "548", - "551", - "552", - "553", - "554", "555", - "556", - "557", "558", "559", - "560", - "561", "562", "563", "564", - "565", "566", "567", "568", "569", "570", "573", - "574", - "575", - "576", - "577", "578", "580", "582", - "583", - "584", - "585", - "586", "587", "588", - "589", - "590", - "591", - "592", - "593", - "594", "595", "596", "597", "598", "599", - "600", - "601", - "602", - "603", "604", "605", "606", - "607", - "608", - "609", "610", "611", - "612", "614", "616", "617", @@ -409,10 +214,6 @@ "626", "628", "630", - "631", - "632", - "633", - "634", "635", "636", "637", diff --git a/parser/testdata/parse/postgres_regress/insert.metadata.json b/parser/testdata/parse/postgres_regress/insert.metadata.json index 71486f1..b856fe8 100644 --- a/parser/testdata/parse/postgres_regress/insert.metadata.json +++ b/parser/testdata/parse/postgres_regress/insert.metadata.json @@ -1,13 +1,9 @@ { "todo": [ - "001", "017", - "018", "019", "025", "026", - "027", - "043", "044", "045", "046", @@ -15,9 +11,6 @@ "048", "049", "050", - "051", - "052", - "075", "076", "077", "078", @@ -28,54 +21,14 @@ "083", "084", "085", - "086", - "089", "092", "093", "094", "095", - "096", - "098", - "099", - "100", - "101", - "110", - "111", - "112", - "113", - "119", - "120", - "121", - "122", "126", - "127", - "128", - "129", - "130", - "131", - "132", - "152", - "167", - "168", - "169", - "170", - "171", - "172", - "173", - "174", - "181", - "182", - "183", - "184", - "185", "191", "192", - "193", - "194", "199", - "200", - "201", - "202", "203", "204", "205", @@ -87,21 +40,13 @@ "216", "218", "219", - "221", - "222", "224", "225", - "226", - "227", "228", - "229", - "230", "231", "232", "233", "235", - "236", - "237", "238", "239", "240", @@ -109,47 +54,23 @@ "243", "245", "246", - "247", - "248", - "249", - "256", "259", "260", - "261", - "262", - "263", - "264", - "265", "266", "274", "276", "277", "284", "285", - "286", - "287", "289", "290", "294", "299", "300", "302", - "303", - "304", - "305", - "306", - "307", - "308", - "309", - "310", - "311", - "312", "332", - "333", - "334", "335", "336", - "339", "341", "342", "343", @@ -158,9 +79,6 @@ "350", "351", "352", - "353", - "354", - "355", "356", "357", "358", @@ -169,20 +87,8 @@ "361", "365", "366", - "367", - "368", - "369", - "370", - "371", - "372", - "373", - "374", - "375", "378", - "379", - "380", "382", - "383", "384", "385", "387" diff --git a/parser/testdata/parse/postgres_regress/insert_conflict.metadata.json b/parser/testdata/parse/postgres_regress/insert_conflict.metadata.json index 017994c..616248b 100644 --- a/parser/testdata/parse/postgres_regress/insert_conflict.metadata.json +++ b/parser/testdata/parse/postgres_regress/insert_conflict.metadata.json @@ -1,11 +1,5 @@ { "todo": [ - "001", - "002", - "003", - "004", - "005", - "006", "007", "008", "009", @@ -23,90 +17,47 @@ "021", "022", "023", - "024", "025", "026", "027", - "028", "029", "030", "031", "032", "048", - "049", "056", - "057", - "058", "065", "066", - "067", "072", - "073", - "074", "077", "081", "082", - "083", - "084", "088", "089", - "090", "097", - "098", "103", "104", "105", "106", "107", - "108", "111", - "112", - "113", - "114", "118", - "119", - "120", "125", "126", - "127", - "128", - "129", - "130", "148", "149", - "150", "156", - "157", "161", "164", - "165", "172", - "173", "193", - "194", - "195", - "204", "205", "210", - "211", - "216", - "217", "226", - "227", - "228", - "229", "232", - "233", - "234", - "235", - "236", - "237", "238", "241", - "242", - "243", "244", - "245", "246", "251", "252", diff --git a/parser/testdata/parse/postgres_regress/interval.metadata.json b/parser/testdata/parse/postgres_regress/interval.metadata.json index 57de260..88d3854 100644 --- a/parser/testdata/parse/postgres_regress/interval.metadata.json +++ b/parser/testdata/parse/postgres_regress/interval.metadata.json @@ -1,13 +1,8 @@ { "todo": [ - "013", - "049", - "057", "059", "063", - "064", "070", - "376", "379" ] } diff --git a/parser/testdata/parse/postgres_regress/join.metadata.json b/parser/testdata/parse/postgres_regress/join.metadata.json index d8dd3a7..da5e62a 100644 --- a/parser/testdata/parse/postgres_regress/join.metadata.json +++ b/parser/testdata/parse/postgres_regress/join.metadata.json @@ -1,15 +1,7 @@ { "todo": [ - "001", - "002", - "023", "025", "067", - "068", - "069", - "070", - "090", - "096", "119", "121", "124", @@ -36,20 +28,10 @@ "155", "156", "157", - "158", - "159", - "160", - "176", - "185", - "188", - "197", - "199", "200", "203", "210", - "215", "217", - "218", "220", "222", "225", @@ -57,35 +39,14 @@ "227", "228", "229", - "230", "231", - "232", - "233", - "240", - "241", - "249", - "250", - "251", - "255", - "265", - "266", "270", - "271", - "272", "273", "276", - "283", - "284", - "285", "297", - "299", - "300", - "301", "311", "313", "315", - "319", - "320", "321", "322", "323", @@ -145,7 +106,6 @@ "400", "402", "404", - "407", "408", "410", "412", @@ -157,10 +117,6 @@ "426", "428", "430", - "433", - "434", - "435", - "436", "441", "442", "443", @@ -184,32 +140,20 @@ "461", "462", "463", - "464", - "465", "466", - "468", - "469", "473", "475", "477", "479", - "481", - "482", - "489", "492", "493", "494", - "497", "498", "499", - "503", "505", - "509", "511", "512", "515", - "517", - "518", "520", "530", "532", @@ -238,30 +182,17 @@ "584", "587", "589", - "599", - "607", - "608", - "609", - "610", - "612", "614", "616", "617", - "619", - "621", "622", "623", "624", "625", - "628", - "629", "632", "633", "634", "635", - "637", - "638", - "639", "643", "644", "645", @@ -278,9 +209,6 @@ "656", "657", "658", - "659", - "660", - "661", "665", "666", "667", @@ -288,11 +216,8 @@ "669", "670", "671", - "672", "673", "674", - "678", - "679", "681", "682", "684", @@ -301,16 +226,11 @@ "692", "693", "694", - "695", "696", - "697", "698", "699", - "700", - "702", "703", "706", - "710", "712", "713", "714", diff --git a/parser/testdata/parse/postgres_regress/join_hash.metadata.json b/parser/testdata/parse/postgres_regress/join_hash.metadata.json index 15e874f..2de7a9b 100644 --- a/parser/testdata/parse/postgres_regress/join_hash.metadata.json +++ b/parser/testdata/parse/postgres_regress/join_hash.metadata.json @@ -2,18 +2,14 @@ "todo": [ "005", "006", - "007", "008", "009", - "010", "011", "012", "013", - "015", "016", "017", "018", - "021", "022", "027", "036", @@ -27,9 +23,7 @@ "106", "115", "124", - "135", "136", - "137", "138", "150", "165", @@ -42,10 +36,6 @@ "223", "228", "236", - "245", - "246", - "259", - "260", "270", "272", "277" diff --git a/parser/testdata/parse/postgres_regress/json.metadata.json b/parser/testdata/parse/postgres_regress/json.metadata.json index efc9d61..1fd747e 100644 --- a/parser/testdata/parse/postgres_regress/json.metadata.json +++ b/parser/testdata/parse/postgres_regress/json.metadata.json @@ -1,8 +1,6 @@ { "todo": [ - "065", "068", - "092", "212", "213", "214", @@ -12,14 +10,12 @@ "218", "219", "312", - "332", "335", "336", "337", "338", "339", "340", - "341", - "374" + "341" ] } diff --git a/parser/testdata/parse/postgres_regress/jsonb.metadata.json b/parser/testdata/parse/postgres_regress/jsonb.metadata.json index 9f64d58..1365521 100644 --- a/parser/testdata/parse/postgres_regress/jsonb.metadata.json +++ b/parser/testdata/parse/postgres_regress/jsonb.metadata.json @@ -1,10 +1,6 @@ { "todo": [ - "001", - "058", "059", - "079", - "266", "353", "354", "355", @@ -22,7 +18,6 @@ "459", "468", "469", - "519", "522", "523", "524", @@ -30,21 +25,13 @@ "526", "527", "528", - "556", "570", "588", - "600", "617", "618", - "619", "623", - "624", "645", "658", - "683", - "687", - "905", - "996", - "997" + "996" ] } diff --git a/parser/testdata/parse/postgres_regress/largeobject.metadata.json b/parser/testdata/parse/postgres_regress/largeobject.metadata.json index 5a5c0c1..23ab776 100644 --- a/parser/testdata/parse/postgres_regress/largeobject.metadata.json +++ b/parser/testdata/parse/postgres_regress/largeobject.metadata.json @@ -3,7 +3,6 @@ "004", "006", "007", - "009", "031", "091", "123" diff --git a/parser/testdata/parse/postgres_regress/limit.metadata.json b/parser/testdata/parse/postgres_regress/limit.metadata.json index e1dd481..011e75c 100644 --- a/parser/testdata/parse/postgres_regress/limit.metadata.json +++ b/parser/testdata/parse/postgres_regress/limit.metadata.json @@ -1,18 +1,11 @@ { "todo": [ - "052", "053", "056", "059", "061", "063", "065", - "067", - "075", - "076", - "077", - "078", - "079", - "080" + "067" ] } diff --git a/parser/testdata/parse/postgres_regress/line.metadata.json b/parser/testdata/parse/postgres_regress/line.metadata.json index f23fe5c..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/line.metadata.json +++ b/parser/testdata/parse/postgres_regress/line.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "001" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/lock.metadata.json b/parser/testdata/parse/postgres_regress/lock.metadata.json index 1ebb50f..617e618 100644 --- a/parser/testdata/parse/postgres_regress/lock.metadata.json +++ b/parser/testdata/parse/postgres_regress/lock.metadata.json @@ -1,23 +1,10 @@ { "todo": [ - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", "013", - "058", - "062", - "066", - "067", "071", "083", "089", "096", - "097", "103", "109", "115", diff --git a/parser/testdata/parse/postgres_regress/lseg.metadata.json b/parser/testdata/parse/postgres_regress/lseg.metadata.json index f23fe5c..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/lseg.metadata.json +++ b/parser/testdata/parse/postgres_regress/lseg.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "001" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/macaddr.metadata.json b/parser/testdata/parse/postgres_regress/macaddr.metadata.json index eddbb92..1b1a6fa 100644 --- a/parser/testdata/parse/postgres_regress/macaddr.metadata.json +++ b/parser/testdata/parse/postgres_regress/macaddr.metadata.json @@ -1,8 +1,5 @@ { "todo": [ - "001", - "017", - "018", "031" ] } diff --git a/parser/testdata/parse/postgres_regress/macaddr8.metadata.json b/parser/testdata/parse/postgres_regress/macaddr8.metadata.json index 985171f..900dcff 100644 --- a/parser/testdata/parse/postgres_regress/macaddr8.metadata.json +++ b/parser/testdata/parse/postgres_regress/macaddr8.metadata.json @@ -1,8 +1,5 @@ { "todo": [ - "022", - "045", - "046", "067" ] } diff --git a/parser/testdata/parse/postgres_regress/maintain_every.metadata.json b/parser/testdata/parse/postgres_regress/maintain_every.metadata.json index 2831c80..9a67e8d 100644 --- a/parser/testdata/parse/postgres_regress/maintain_every.metadata.json +++ b/parser/testdata/parse/postgres_regress/maintain_every.metadata.json @@ -1,9 +1,5 @@ { "todo": [ - "003", - "004", - "005", - "006", "007", "009", "011", diff --git a/parser/testdata/parse/postgres_regress/matview.metadata.json b/parser/testdata/parse/postgres_regress/matview.metadata.json index 956842d..c8368bb 100644 --- a/parser/testdata/parse/postgres_regress/matview.metadata.json +++ b/parser/testdata/parse/postgres_regress/matview.metadata.json @@ -1,120 +1,38 @@ { "todo": [ - "001", - "003", "005", - "006", - "009", - "011", "013", - "014", - "016", - "017", - "018", - "019", - "020", "021", - "022", - "023", - "024", - "025", "027", - "032", - "033", "037", "038", "039", - "043", - "044", - "045", - "046", "047", "048", "049", "053", - "054", "057", "059", - "061", - "062", - "063", - "064", "066", - "067", - "068", - "069", - "071", - "072", "073", - "074", - "075", - "076", - "077", - "078", - "081", - "082", "083", - "084", - "085", "086", - "087", - "089", - "090", - "092", "094", - "095", - "096", - "097", - "098", - "099", - "100", - "101", "102", - "104", - "105", - "107", - "108", - "109", - "110", "116", - "117", "119", - "120", - "121", - "122", "123", - "124", - "125", "129", - "132", - "133", - "134", - "135", - "136", - "138", - "139", "140", "143", - "144", - "145", - "146", "147", "150", "157", "158", - "160", "161", - "162", - "163", "164", - "165", "167", "168", - "170", - "171", - "172", - "173", - "174", "175", "176", "177", diff --git a/parser/testdata/parse/postgres_regress/memoize.metadata.json b/parser/testdata/parse/postgres_regress/memoize.metadata.json index ad03fb8..d1919d6 100644 --- a/parser/testdata/parse/postgres_regress/memoize.metadata.json +++ b/parser/testdata/parse/postgres_regress/memoize.metadata.json @@ -1,24 +1,12 @@ { "todo": [ "001", - "011", - "014", "015", "017", - "021", - "022", "024", "028", - "029", - "030", - "031", "034", "037", - "039", - "040", - "041", - "044", - "045", "046", "050", "052", diff --git a/parser/testdata/parse/postgres_regress/merge.metadata.json b/parser/testdata/parse/postgres_regress/merge.metadata.json index 60d11f7..ff66ff2 100644 --- a/parser/testdata/parse/postgres_regress/merge.metadata.json +++ b/parser/testdata/parse/postgres_regress/merge.metadata.json @@ -2,17 +2,12 @@ "todo": [ "004", "005", - "006", - "007", "012", "013", - "014", - "015", "016", "017", "018", "020", - "033", "035", "040", "043", @@ -24,8 +19,6 @@ "075", "118", "119", - "159", - "160", "203", "204", "205", @@ -47,38 +40,17 @@ "233", "235", "262", - "276", - "277", - "284", - "304", - "310", "320", "324", "328", - "331", - "332", "335", "344", "345", - "346", - "347", - "348", "349", "350", "363", - "364", - "365", - "366", - "367", - "368", - "369", "381", "394", - "395", - "396", - "397", - "398", - "399", "400", "401", "402", @@ -97,41 +69,21 @@ "433", "436", "437", - "438", - "439", - "440", - "441", - "442", - "443", - "444", - "445", "453", "454", - "455", - "456", - "457", "459", "462", "463", "465", "466", - "467", - "468", - "469", "484", "485", "488", - "489", "493", - "494", - "495", - "496", - "497", "498", "499", "501", "502", - "510", "531", "532", "533", @@ -140,15 +92,9 @@ "540", "545", "546", - "547", - "549", "553", - "554", - "556", - "557", "561", "562", - "565", "567", "568", "569" diff --git a/parser/testdata/parse/postgres_regress/misc.metadata.json b/parser/testdata/parse/postgres_regress/misc.metadata.json index d360ac8..8c01943 100644 --- a/parser/testdata/parse/postgres_regress/misc.metadata.json +++ b/parser/testdata/parse/postgres_regress/misc.metadata.json @@ -3,10 +3,6 @@ "001", "002", "008", - "010", - "015", - "018", - "019", "027", "028", "029", diff --git a/parser/testdata/parse/postgres_regress/misc_functions.metadata.json b/parser/testdata/parse/postgres_regress/misc_functions.metadata.json index 55a0628..a3cd13c 100644 --- a/parser/testdata/parse/postgres_regress/misc_functions.metadata.json +++ b/parser/testdata/parse/postgres_regress/misc_functions.metadata.json @@ -13,7 +13,6 @@ "098", "099", "113", - "116", "119" ] } diff --git a/parser/testdata/parse/postgres_regress/money.metadata.json b/parser/testdata/parse/postgres_regress/money.metadata.json index f23fe5c..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/money.metadata.json +++ b/parser/testdata/parse/postgres_regress/money.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "001" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json b/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json index 40cae8f..e6f7d4d 100644 --- a/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json +++ b/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json @@ -1,17 +1,9 @@ { "todo": [ - "068", - "069", "104", - "366", - "372", "373", "455", - "456", - "480", - "481", "505", - "507", "510", "511", "512", @@ -36,9 +28,7 @@ "540", "542", "543", - "544", "545", - "546", "547", "548", "551", @@ -52,7 +42,6 @@ "568", "571", "572", - "574", "577", "582", "583", diff --git a/parser/testdata/parse/postgres_regress/mvcc.metadata.json b/parser/testdata/parse/postgres_regress/mvcc.metadata.json index bd05de3..e25e31e 100644 --- a/parser/testdata/parse/postgres_regress/mvcc.metadata.json +++ b/parser/testdata/parse/postgres_regress/mvcc.metadata.json @@ -1,7 +1,5 @@ { "todo": [ - "005", - "006", "009" ] } diff --git a/parser/testdata/parse/postgres_regress/name.metadata.json b/parser/testdata/parse/postgres_regress/name.metadata.json index a7ac0dd..70110f3 100644 --- a/parser/testdata/parse/postgres_regress/name.metadata.json +++ b/parser/testdata/parse/postgres_regress/name.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "003", "022", "023" ] diff --git a/parser/testdata/parse/postgres_regress/namespace.metadata.json b/parser/testdata/parse/postgres_regress/namespace.metadata.json index 1a4a238..bc6b9b5 100644 --- a/parser/testdata/parse/postgres_regress/namespace.metadata.json +++ b/parser/testdata/parse/postgres_regress/namespace.metadata.json @@ -8,14 +8,10 @@ "026", "027", "031", - "032", - "034", - "035", "036", "037", "038", "039", - "040", "042" ] } diff --git a/parser/testdata/parse/postgres_regress/numeric.metadata.json b/parser/testdata/parse/postgres_regress/numeric.metadata.json index e29df22..e95aa5e 100644 --- a/parser/testdata/parse/postgres_regress/numeric.metadata.json +++ b/parser/testdata/parse/postgres_regress/numeric.metadata.json @@ -1,24 +1,6 @@ { "todo": [ - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", "1004", - "473", - "474", - "475", - "476", - "477", - "478", - "479", - "480", "481", "482", "483", @@ -27,15 +9,9 @@ "486", "487", "488", - "582", "595", - "630", "639", - "668", "678", - "753", - "814", - "982", "990", "999" ] diff --git a/parser/testdata/parse/postgres_regress/numeric_big.metadata.json b/parser/testdata/parse/postgres_regress/numeric_big.metadata.json index 1212a15..1d448a9 100644 --- a/parser/testdata/parse/postgres_regress/numeric_big.metadata.json +++ b/parser/testdata/parse/postgres_regress/numeric_big.metadata.json @@ -10,24 +10,6 @@ "008", "009", "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "483", - "484", - "485", - "486", - "487", - "488", - "489", - "490", "491", "492", "493", diff --git a/parser/testdata/parse/postgres_regress/object_address.metadata.json b/parser/testdata/parse/postgres_regress/object_address.metadata.json index 6f0e0f4..8c0fd1d 100644 --- a/parser/testdata/parse/postgres_regress/object_address.metadata.json +++ b/parser/testdata/parse/postgres_regress/object_address.metadata.json @@ -6,10 +6,6 @@ "010", "011", "012", - "013", - "014", - "015", - "016", "017", "018", "019", diff --git a/parser/testdata/parse/postgres_regress/oid.metadata.json b/parser/testdata/parse/postgres_regress/oid.metadata.json index 6120e61..8d0b128 100644 --- a/parser/testdata/parse/postgres_regress/oid.metadata.json +++ b/parser/testdata/parse/postgres_regress/oid.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "001", "037" ] } diff --git a/parser/testdata/parse/postgres_regress/partition_aggregate.metadata.json b/parser/testdata/parse/postgres_regress/partition_aggregate.metadata.json index 40742ea..c2c4e11 100644 --- a/parser/testdata/parse/postgres_regress/partition_aggregate.metadata.json +++ b/parser/testdata/parse/postgres_regress/partition_aggregate.metadata.json @@ -1,9 +1,5 @@ { "todo": [ - "005", - "006", - "007", - "008", "010", "011", "013", @@ -19,14 +15,6 @@ "032", "033", "034", - "035", - "036", - "037", - "038", - "039", - "040", - "041", - "042", "045", "046", "047", @@ -39,22 +27,10 @@ "062", "064", "066", - "068", - "069", - "070", - "071", "073", "074", "076", "078", - "080", - "081", - "082", - "083", - "084", - "085", - "086", - "087", "088", "089", "091", @@ -66,10 +42,6 @@ "106", "108", "110", - "113", - "114", - "115", - "116", "118", "119", "121", diff --git a/parser/testdata/parse/postgres_regress/partition_info.metadata.json b/parser/testdata/parse/postgres_regress/partition_info.metadata.json index 6cd26b2..771e9a3 100644 --- a/parser/testdata/parse/postgres_regress/partition_info.metadata.json +++ b/parser/testdata/parse/postgres_regress/partition_info.metadata.json @@ -1,32 +1,13 @@ { "todo": [ - "007", - "008", - "009", - "010", - "011", - "012", - "013", - "018", - "019", "020", - "021", "022", - "023", "024", - "025", "026", - "027", "028", - "029", "030", "049", - "050", "054", - "055", - "056", - "057", - "058", "071", "072", "073" diff --git a/parser/testdata/parse/postgres_regress/partition_join.metadata.json b/parser/testdata/parse/postgres_regress/partition_join.metadata.json index 356df95..d350381 100644 --- a/parser/testdata/parse/postgres_regress/partition_join.metadata.json +++ b/parser/testdata/parse/postgres_regress/partition_join.metadata.json @@ -1,20 +1,6 @@ { "todo": [ - "002", - "003", - "004", - "005", - "007", - "008", - "009", "010", - "011", - "012", - "013", - "014", - "016", - "017", - "018", "019", "020", "022", @@ -33,18 +19,7 @@ "047", "051", "055", - "056", - "057", - "058", - "059", - "061", - "062", - "063", "064", - "065", - "066", - "067", - "068", "070", "071", "073", @@ -59,51 +34,19 @@ "093", "095", "097", - "101", - "102", - "103", - "104", "106", - "107", - "108", - "109", - "110", "112", "113", - "115", - "116", - "117", - "118", "120", - "121", - "122", - "123", - "124", "126", - "127", - "128", - "129", - "130", "132", "133", "135", "136", "137", "138", - "139", - "140", - "141", - "142", "144", - "145", - "146", - "147", - "148", "150", - "151", - "152", - "153", - "154", "156", "157", "159", @@ -120,23 +63,7 @@ "170", "171", "172", - "173", - "174", - "175", - "176", - "177", - "178", - "179", - "180", "182", - "183", - "184", - "185", - "186", - "187", - "188", - "189", - "190", "192", "193", "195", @@ -147,23 +74,9 @@ "204", "206", "207", - "208", - "209", - "210", "212", - "213", - "214", - "215", "217", - "218", - "219", - "220", - "221", "223", - "224", - "225", - "226", - "227", "229", "230", "231", @@ -174,38 +87,17 @@ "236", "237", "238", - "239", - "240", - "241", - "242", - "243", - "244", - "245", - "246", - "249", - "250", "251", "252", "253", "255", - "257", - "258", - "259", - "260", - "261", "263", - "264", - "265", - "266", - "267", - "268", "272", "273", "275", "277", "279", "281", - "283", "285", "286", "288", @@ -217,8 +109,6 @@ "297", "299", "300", - "301", - "302", "304", "305", "306", @@ -246,51 +136,27 @@ "329", "330", "331", - "332", - "333", - "334", - "335", "337", "338", "340", "341", "342", - "343", - "344", - "345", - "346", - "347", "349", - "350", - "351", - "352", - "353", "355", "356", "358", - "359", "360", - "361", "362", "363", "365", "366", - "367", - "368", - "369", - "370", "372", - "373", - "374", - "375", - "376", "378", "379", "381", "383", "385", "387", - "389", "391", "392", "394", @@ -301,8 +167,6 @@ "402", "403", "404", - "405", - "406", "408", "409", "410", @@ -313,10 +177,8 @@ "415", "416", "417", - "418", "421", "422", - "423", "426", "427", "429", @@ -325,7 +187,6 @@ "435", "437", "438", - "439", "441", "442", "443", @@ -333,7 +194,6 @@ "445", "447", "448", - "449", "451", "452", "454", @@ -349,7 +209,6 @@ "467", "468", "470", - "471", "473", "474", "475", @@ -359,86 +218,39 @@ "479", "480", "481", - "482", - "483", - "484", "486", "487", "489", - "490", "493", "494", "496", - "497", "499", "500", "502", "503", "504", - "505", - "506", - "507", - "508", - "509", "512", - "513", - "514", - "515", - "516", - "517", "520", "521", "523", - "525", "526", - "527", "528", "529", "531", "533", "534", - "535", - "536", - "537", "539", - "540", - "541", - "542", "544", - "545", - "546", - "547", "549", "550", "552", "553", "554", - "555", - "556", - "557", - "558", - "559", - "560", - "561", - "562", - "563", "566", - "567", - "568", - "569", - "570", - "571", - "572", - "573", - "574", - "575", "582", "583", "585", "587", - "589", - "590", - "591", "593", "596", "597", diff --git a/parser/testdata/parse/postgres_regress/partition_prune.metadata.json b/parser/testdata/parse/postgres_regress/partition_prune.metadata.json index 43b00a9..82f3825 100644 --- a/parser/testdata/parse/postgres_regress/partition_prune.metadata.json +++ b/parser/testdata/parse/postgres_regress/partition_prune.metadata.json @@ -1,12 +1,5 @@ { "todo": [ - "002", - "003", - "004", - "005", - "006", - "007", - "008", "009", "010", "011", @@ -19,33 +12,9 @@ "018", "019", "020", - "021", - "022", - "023", - "024", "025", "026", - "027", - "028", - "029", - "030", - "031", - "032", - "033", - "034", - "035", - "036", - "037", - "038", - "039", "040", - "041", - "042", - "043", - "044", - "045", - "046", - "047", "048", "049", "050", @@ -80,16 +49,6 @@ "079", "080", "081", - "082", - "083", - "084", - "085", - "086", - "087", - "088", - "089", - "090", - "091", "092", "093", "094", @@ -109,14 +68,6 @@ "108", "109", "110", - "111", - "112", - "113", - "114", - "115", - "116", - "117", - "118", "119", "120", "121", @@ -126,10 +77,6 @@ "125", "126", "127", - "128", - "129", - "130", - "131", "133", "134", "135", @@ -138,7 +85,6 @@ "138", "139", "140", - "150", "152", "153", "154", @@ -146,10 +92,6 @@ "160", "161", "162", - "163", - "164", - "165", - "166", "168", "169", "170", @@ -158,20 +100,9 @@ "173", "174", "175", - "185", - "190", - "191", - "192", - "193", - "194", - "195", "196", "197", "198", - "199", - "200", - "201", - "202", "203", "204", "205", @@ -185,11 +116,6 @@ "213", "214", "215", - "216", - "217", - "218", - "219", - "220", "221", "222", "223", @@ -198,48 +124,22 @@ "227", "228", "229", - "230", - "231", - "232", - "233", "234", "235", "236", "237", "238", "239", - "240", - "241", - "242", - "243", "244", "245", "246", - "247", - "248", - "249", "250", - "251", - "252", - "253", "254", - "255", - "256", - "257", "258", - "259", "260", "261", - "262", - "263", - "264", "265", "266", - "267", - "268", - "269", - "270", - "271", "279", "280", "281", @@ -260,74 +160,28 @@ "296", "297", "298", - "299", - "300", - "301", - "302", - "303", - "304", - "305", - "306", - "307", - "308", - "309", - "310", - "311", "314", "315", "318", "319", "321", "323", - "324", - "325", - "326", "328", "330", - "331", - "332", - "333", - "334", - "335", "343", "344", "345", "346", "348", "349", - "361", "364", - "365", - "366", - "367", - "368", - "369", - "370", - "371", - "372", - "373", "391", "392", "393", - "394", "399", "410", "414", "416", - "417", - "419", - "420", - "421", - "422", - "423", - "424", - "425", - "426", - "427", - "428", - "429", - "430", - "431", "435", "436", "440", @@ -335,20 +189,11 @@ "446", "450", "452", - "453", - "454", - "455", - "456", "457", "458", "459", "461", "463", - "464", - "465", - "466", - "467", - "468", "471", "472", "473", @@ -356,10 +201,6 @@ "477", "478", "479", - "480", - "481", - "482", - "483", "484", "485", "486", @@ -369,26 +210,13 @@ "490", "491", "492", - "493", - "494", - "495", - "496", "498", "500", "503", "505", - "506", - "508", - "509", - "510", "511", "512", "513", - "516", - "517", - "518", - "519", - "521", "522", "524", "526", @@ -396,47 +224,29 @@ "532", "534", "537", - "539", - "540", - "541", "542", "543", "544", "545", "546", "547", - "548", - "549", - "550", "553", "554", "555", "556", "557", - "558", - "559", - "560", "561", "562", "563", "564", "565", - "566", - "567", - "568", "569", "570", "571", "572", - "573", - "574", - "575", "576", "577", "578", - "579", - "580", - "581", "582", "583", "584", @@ -447,81 +257,37 @@ "592", "593", "594", - "595", - "596", - "597", "599", "600", "601", "602", "603", - "606", - "607", - "608", "609", "610", "611", - "612", - "613", - "614", - "615", - "616", - "617", - "618", - "619", - "620", - "621", "623", "626", "628", - "629", - "630", - "631", - "632", "633", "636", "637", "639", "640", "643", - "646", - "647", - "648", - "649", "650", "653", - "657", - "658", - "659", - "660", - "661", - "662", - "663", "664", "666", - "667", - "668", - "669", "670", - "671", - "672", - "673", "674", - "675", - "676", - "677", "678", "679", "680", "681", "682", - "683", "688", "689", "690", - "691", - "692", - "693", "694", "695", "696", diff --git a/parser/testdata/parse/postgres_regress/path.metadata.json b/parser/testdata/parse/postgres_regress/path.metadata.json index f23fe5c..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/path.metadata.json +++ b/parser/testdata/parse/postgres_regress/path.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "001" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/pg_lsn.metadata.json b/parser/testdata/parse/postgres_regress/pg_lsn.metadata.json index 32a21c3..2a28184 100644 --- a/parser/testdata/parse/postgres_regress/pg_lsn.metadata.json +++ b/parser/testdata/parse/postgres_regress/pg_lsn.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "001", "012", "030" ] diff --git a/parser/testdata/parse/postgres_regress/plancache.metadata.json b/parser/testdata/parse/postgres_regress/plancache.metadata.json index b04b95f..1464d56 100644 --- a/parser/testdata/parse/postgres_regress/plancache.metadata.json +++ b/parser/testdata/parse/postgres_regress/plancache.metadata.json @@ -1,36 +1,20 @@ { "todo": [ - "001", "006", - "009", "012", "015", - "018", - "021", "023", - "027", "028", - "030", - "032", "034", "035", "044", "046", "047", - "049", "052", - "053", "055", - "058", - "059", - "060", - "061", - "065", "067", "069", "071", - "073", - "075", "076", "080", "083", diff --git a/parser/testdata/parse/postgres_regress/plpgsql.metadata.json b/parser/testdata/parse/postgres_regress/plpgsql.metadata.json index ece8cd0..31c99af 100644 --- a/parser/testdata/parse/postgres_regress/plpgsql.metadata.json +++ b/parser/testdata/parse/postgres_regress/plpgsql.metadata.json @@ -1,26 +1,5 @@ { "todo": [ - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "021", "022", "023", "024", @@ -92,9 +71,7 @@ "090", "091", "092", - "093", "283", - "285", "286", "289", "291", @@ -135,16 +112,13 @@ "358", "359", "362", - "363", "364", "365", "368", - "369", "370", "374", "380", "381", - "382", "384", "385", "387", @@ -173,7 +147,6 @@ "428", "430", "431", - "432", "433", "434", "436", @@ -189,7 +162,6 @@ "450", "452", "453", - "455", "457", "459", "461", @@ -225,7 +197,6 @@ "527", "531", "533", - "534", "535", "537", "538", @@ -249,7 +220,6 @@ "569", "571", "572", - "574", "575", "578", "581", @@ -257,7 +227,6 @@ "583", "584", "586", - "587", "589", "591", "593", @@ -334,7 +303,6 @@ "716", "718", "719", - "721", "727", "728", "729", @@ -377,7 +345,6 @@ "809", "812", "813", - "814", "815", "818", "821", @@ -418,15 +385,11 @@ "871", "872", "873", - "874", "875", "876", "877", "880", "881", - "883", - "884", - "885", "886", "887", "888", @@ -441,20 +404,15 @@ "902", "903", "905", - "915", "916", "917", "918", "921", "923", - "925", "927", "928", "930", "931", - "932", - "933", - "934", "937", "939", "941" diff --git a/parser/testdata/parse/postgres_regress/point.metadata.json b/parser/testdata/parse/postgres_regress/point.metadata.json index 75ee143..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/point.metadata.json +++ b/parser/testdata/parse/postgres_regress/point.metadata.json @@ -1,6 +1,3 @@ { - "todo": [ - "023", - "025" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/polygon.metadata.json b/parser/testdata/parse/postgres_regress/polygon.metadata.json index 14c71ac..57325af 100644 --- a/parser/testdata/parse/postgres_regress/polygon.metadata.json +++ b/parser/testdata/parse/postgres_regress/polygon.metadata.json @@ -1,9 +1,5 @@ { "todo": [ - "001", - "015", - "019", - "023", "027", "029", "031", @@ -16,7 +12,6 @@ "045", "047", "049", - "053", - "054" + "053" ] } diff --git a/parser/testdata/parse/postgres_regress/polymorphism.metadata.json b/parser/testdata/parse/postgres_regress/polymorphism.metadata.json index 33e17fc..1e2c748 100644 --- a/parser/testdata/parse/postgres_regress/polymorphism.metadata.json +++ b/parser/testdata/parse/postgres_regress/polymorphism.metadata.json @@ -107,7 +107,6 @@ "136", "137", "138", - "139", "172", "173", "176", @@ -170,7 +169,6 @@ "327", "328", "357", - "358", "360", "361", "362", diff --git a/parser/testdata/parse/postgres_regress/portals.metadata.json b/parser/testdata/parse/postgres_regress/portals.metadata.json index 687a810..dc5c5f6 100644 --- a/parser/testdata/parse/postgres_regress/portals.metadata.json +++ b/parser/testdata/parse/postgres_regress/portals.metadata.json @@ -1,27 +1,18 @@ { "todo": [ "123", - "127", "128", "129", "143", "144", - "162", - "224", - "280", "281", "288", - "295", - "296", - "297", - "311", "317", "319", "326", "327", "333", "334", - "341", "347" ] } diff --git a/parser/testdata/parse/postgres_regress/predicate.metadata.json b/parser/testdata/parse/postgres_regress/predicate.metadata.json index 7ea3a46..a864545 100644 --- a/parser/testdata/parse/postgres_regress/predicate.metadata.json +++ b/parser/testdata/parse/postgres_regress/predicate.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "001", "002", "003", "004", @@ -18,8 +17,6 @@ "016", "017", "018", - "019", - "020", "021", "022", "023", @@ -28,8 +25,6 @@ "026", "027", "028", - "029", - "030", "035", "036", "037", diff --git a/parser/testdata/parse/postgres_regress/prepare.metadata.json b/parser/testdata/parse/postgres_regress/prepare.metadata.json index 27febf1..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/prepare.metadata.json +++ b/parser/testdata/parse/postgres_regress/prepare.metadata.json @@ -1,6 +1,3 @@ { - "todo": [ - "024", - "026" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/prepared_xacts.metadata.json b/parser/testdata/parse/postgres_regress/prepared_xacts.metadata.json index 53bd559..62308f9 100644 --- a/parser/testdata/parse/postgres_regress/prepared_xacts.metadata.json +++ b/parser/testdata/parse/postgres_regress/prepared_xacts.metadata.json @@ -1,11 +1,7 @@ { "todo": [ - "001", "042", - "048", - "056", "058", - "059", "081", "082", "083" diff --git a/parser/testdata/parse/postgres_regress/privileges.metadata.json b/parser/testdata/parse/postgres_regress/privileges.metadata.json index 09c9a9e..d56ffc7 100644 --- a/parser/testdata/parse/postgres_regress/privileges.metadata.json +++ b/parser/testdata/parse/postgres_regress/privileges.metadata.json @@ -53,25 +53,18 @@ "141", "142", "143", - "147", "156", "158", "159", - "161", "162", "163", "164", "165", "166", "184", - "188", - "189", - "190", "191", "193", "195", - "196", - "197", "198", "199", "200", @@ -90,20 +83,12 @@ "218", "219", "220", - "222", "223", "235", "240", - "245", - "246", - "247", - "248", "251", "252", - "262", "264", - "271", - "272", "273", "274", "316", diff --git a/parser/testdata/parse/postgres_regress/psql.metadata.json b/parser/testdata/parse/postgres_regress/psql.metadata.json index c2b0a13..51c2ceb 100644 --- a/parser/testdata/parse/postgres_regress/psql.metadata.json +++ b/parser/testdata/parse/postgres_regress/psql.metadata.json @@ -1,15 +1,8 @@ { "todo": [ "026", - "029", - "035", - "121", "125", "127", - "129", - "130", - "131", - "132", "135", "136", "193" diff --git a/parser/testdata/parse/postgres_regress/psql_crosstab.metadata.json b/parser/testdata/parse/postgres_regress/psql_crosstab.metadata.json index 088c33a..4ba0f2e 100644 --- a/parser/testdata/parse/postgres_regress/psql_crosstab.metadata.json +++ b/parser/testdata/parse/postgres_regress/psql_crosstab.metadata.json @@ -1,7 +1,5 @@ { "todo": [ - "001", - "002", - "005" + "002" ] } diff --git a/parser/testdata/parse/postgres_regress/publication.metadata.json b/parser/testdata/parse/postgres_regress/publication.metadata.json index b4b7eec..840094f 100644 --- a/parser/testdata/parse/postgres_regress/publication.metadata.json +++ b/parser/testdata/parse/postgres_regress/publication.metadata.json @@ -8,13 +8,8 @@ "015", "016", "017", - "019", - "020", - "021", - "022", "024", "026", - "027", "028", "029", "030", @@ -35,16 +30,12 @@ "049", "051", "052", - "053", - "054", "056", "057", "059", "060", "062", "063", - "065", - "066", "067", "068", "069", @@ -54,13 +45,6 @@ "078", "080", "081", - "082", - "083", - "084", - "085", - "086", - "088", - "090", "092", "094", "095", @@ -94,7 +78,6 @@ "133", "134", "135", - "136", "137", "138", "139", @@ -127,10 +110,6 @@ "168", "169", "170", - "171", - "172", - "173", - "174", "175", "177", "180", @@ -147,10 +126,8 @@ "198", "200", "202", - "203", "204", "205", - "206", "207", "208", "210", @@ -176,7 +153,6 @@ "238", "241", "242", - "244", "245", "246", "248", @@ -185,7 +161,6 @@ "251", "252", "253", - "254", "255", "256", "258", @@ -193,24 +168,18 @@ "260", "263", "265", - "266", "267", "269", "271", - "272", "273", "274", "276", "277", - "279", "280", "281", "282", - "283", - "284", "285", "286", - "287", "288", "289", "291", @@ -229,12 +198,9 @@ "309", "310", "312", - "313", "314", - "315", "316", "317", - "318", "319", "320", "321", @@ -251,15 +217,10 @@ "336", "337", "339", - "341", "342", "343", "344", "345", - "346", - "347", - "348", - "349", "350", "352", "355", @@ -276,10 +237,8 @@ "373", "375", "377", - "378", "379", "380", - "381", "382", "383", "385", @@ -301,15 +260,12 @@ "408", "409", "410", - "412", "415", "418", "420", "421", - "422", "423", "424", - "425", "426", "427", "428", @@ -323,9 +279,7 @@ "438", "439", "440", - "441", "442", - "444", "446", "448", "450", @@ -352,10 +306,6 @@ "486", "487", "488", - "493", - "494", - "495", - "496", "498", "499", "500", @@ -389,12 +339,8 @@ "531", "534", "536", - "540", - "541", "545", "549", - "550", - "551", "555", "561", "563", @@ -416,8 +362,6 @@ "581", "582", "583", - "587", - "588", "589", "591", "592", @@ -430,25 +374,16 @@ "604", "605", "606", - "607", - "608", - "609", - "610", "611", "612", "615", "616", "617", "618", - "619", - "620", - "621", "623", "629", "630", "631", - "632", - "633", "635", "641", "642", diff --git a/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json b/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json index 9e19b73..b1fd41e 100644 --- a/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json +++ b/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json @@ -1,64 +1,38 @@ { "todo": [ - "001", "005", - "014", "017", - "019", "022", - "027", "030", - "031", "034", - "035", "038", - "061", "065", - "068", "070", - "071", "073", "074", - "077", "079", - "080", "082", "083", - "086", "088", - "089", "091", "092", - "095", "097", - "098", "100", "101", - "104", "106", - "107", "109", "110", - "113", "115", - "116", "118", "119", - "122", "124", - "125", "127", "128", - "131", "133", - "134", "136", "137", - "140", "142", - "143", "145", - "148", "151", "152", "153", @@ -72,8 +46,6 @@ "161", "162", "163", - "164", - "165", "166", "167", "168", @@ -108,13 +80,11 @@ "275", "276", "278", - "279", "280", "284", "287", "293", "294", - "297", "298", "302", "307", @@ -122,7 +92,6 @@ "314", "315", "320", - "321", "322", "326", "327", @@ -145,11 +114,9 @@ "355", "357", "362", - "363", "366", "367", "370", - "376", "378", "380", "383", diff --git a/parser/testdata/parse/postgres_regress/rangetypes.metadata.json b/parser/testdata/parse/postgres_regress/rangetypes.metadata.json index e541eb3..7f442a3 100644 --- a/parser/testdata/parse/postgres_regress/rangetypes.metadata.json +++ b/parser/testdata/parse/postgres_regress/rangetypes.metadata.json @@ -1,31 +1,14 @@ { "todo": [ - "042", - "043", "103", - "104", - "105", "129", - "130", - "131", - "163", - "164", "172", "219", - "220", - "241", - "242", "278", - "279", "291", - "296", - "297", - "301", "302", "305", - "306", "317", - "319", "322", "323", "324", @@ -46,7 +29,6 @@ "350", "354", "355", - "357", "360", "361", "366", @@ -76,7 +58,6 @@ "399", "400", "401", - "402", "404", "406", "407" diff --git a/parser/testdata/parse/postgres_regress/reloptions.metadata.json b/parser/testdata/parse/postgres_regress/reloptions.metadata.json index 6b8d7c4..c8f2440 100644 --- a/parser/testdata/parse/postgres_regress/reloptions.metadata.json +++ b/parser/testdata/parse/postgres_regress/reloptions.metadata.json @@ -1,22 +1,5 @@ { "todo": [ - "001", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "018", "019", "021", "023", @@ -24,24 +7,14 @@ "027", "029", "031", - "032", "035", "038", "041", "043", - "044", "047", "049", - "051", "052", - "053", - "056", - "058", - "059", - "060", - "061", "062", - "064", "065" ] } diff --git a/parser/testdata/parse/postgres_regress/replica_identity.metadata.json b/parser/testdata/parse/postgres_regress/replica_identity.metadata.json index 1a54433..c6769e7 100644 --- a/parser/testdata/parse/postgres_regress/replica_identity.metadata.json +++ b/parser/testdata/parse/postgres_regress/replica_identity.metadata.json @@ -1,14 +1,5 @@ { "todo": [ - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", "013", "014", "015", @@ -24,16 +15,11 @@ "029", "032", "034", - "036", "037", "038", - "039", - "040", "041", "042", "043", - "044", - "045", "046", "047", "048", diff --git a/parser/testdata/parse/postgres_regress/returning.metadata.json b/parser/testdata/parse/postgres_regress/returning.metadata.json index 8a183ee..618a4a5 100644 --- a/parser/testdata/parse/postgres_regress/returning.metadata.json +++ b/parser/testdata/parse/postgres_regress/returning.metadata.json @@ -1,24 +1,18 @@ { "todo": [ - "001", - "015", "017", "029", - "030", "031", "034", "035", "040", "045", - "050", "053", "056", "057", "058", "061", "062", - "063", - "067", "069" ] } diff --git a/parser/testdata/parse/postgres_regress/rowsecurity.metadata.json b/parser/testdata/parse/postgres_regress/rowsecurity.metadata.json index 2d5aff4..e5b02a8 100644 --- a/parser/testdata/parse/postgres_regress/rowsecurity.metadata.json +++ b/parser/testdata/parse/postgres_regress/rowsecurity.metadata.json @@ -6,11 +6,8 @@ "021", "023", "024", - "026", "027", - "029", "030", - "032", "033", "035", "036", @@ -28,12 +25,9 @@ "070", "072", "073", - "107", "108", "109", - "111", "112", - "114", "115", "116", "118", @@ -49,11 +43,7 @@ "136", "140", "144", - "146", "147", - "148", - "149", - "150", "151", "152", "153", @@ -72,37 +62,26 @@ "189", "194", "213", - "218", - "219", "220", "221", "222", "223", - "225", "226", "227", - "231", "232", "233", "234", - "238", - "239", "241", "242", "246", - "247", - "248", "250", "251", - "255", - "257", "259", "260", "261", "262", "263", "264", - "266", "270", "271", "274", @@ -124,11 +103,9 @@ "318", "325", "326", - "330", "332", "333", "334", - "336", "337", "339", "344", @@ -153,8 +130,6 @@ "409", "410", "420", - "423", - "424", "425", "427", "428", @@ -175,19 +150,16 @@ "454", "455", "456", - "458", "459", "462", "465", "466", - "468", "469", "472", "475", "478", "480", "483", - "485", "487", "490", "493", @@ -197,14 +169,12 @@ "503", "504", "506", - "508", "509", "510", "512", "515", "518", "520", - "522", "523", "524", "527", @@ -219,7 +189,6 @@ "551", "554", "556", - "558", "559", "561", "562", @@ -227,8 +196,6 @@ "564", "565", "566", - "575", - "576", "577", "578", "579", @@ -236,22 +203,18 @@ "581", "582", "583", - "585", "586", "587", - "589", "590", "591", "594", "595", "598", "600", - "601", "604", "606", "607", "609", - "610", "611", "612", "613", @@ -260,19 +223,14 @@ "619", "621", "623", - "624", "625", "626", "627", "631", "637", "639", - "642", "644", "646", - "647", - "652", - "653", "654", "655", "656", @@ -286,14 +244,11 @@ "682", "685", "687", - "688", "689", "690", "691", - "715", "716", "717", - "718", - "742" + "718" ] } diff --git a/parser/testdata/parse/postgres_regress/rowtypes.metadata.json b/parser/testdata/parse/postgres_regress/rowtypes.metadata.json index d066ee8..3624ce9 100644 --- a/parser/testdata/parse/postgres_regress/rowtypes.metadata.json +++ b/parser/testdata/parse/postgres_regress/rowtypes.metadata.json @@ -1,23 +1,16 @@ { "todo": [ "001", - "002", "003", - "020", - "026", "029", "030", - "038", "061", "063", "065", "067", - "069", - "073", "075", "079", "094", - "095", "099", "113", "116", @@ -30,12 +23,10 @@ "152", "155", "160", - "162", "163", "164", "165", "166", - "171", "172", "173", "174", @@ -43,19 +34,14 @@ "191", "194", "205", - "209", - "210", - "213", "216", "218", "220", - "222", "224", "225", "226", "227", "228", - "229", "237" ] } diff --git a/parser/testdata/parse/postgres_regress/rules.metadata.json b/parser/testdata/parse/postgres_regress/rules.metadata.json index ca5b6ca..49dd0a7 100644 --- a/parser/testdata/parse/postgres_regress/rules.metadata.json +++ b/parser/testdata/parse/postgres_regress/rules.metadata.json @@ -1,85 +1,36 @@ { "todo": [ - "001", - "002", - "003", - "004", "005", "006", "007", "008", "009", "010", - "011", - "012", - "013", - "014", "015", "016", "017", "018", - "019", - "020", - "021", "022", "023", "024", - "025", - "026", - "027", - "028", - "029", - "030", "031", "032", "033", "034", - "035", - "036", - "037", "038", "039", "040", "041", - "042", - "043", - "044", - "045", "046", "047", "048", "049", - "229", - "230", - "231", - "232", - "233", - "234", - "235", - "236", "237", - "238", - "275", - "276", - "277", - "289", - "290", - "291", - "292", - "293", - "294", - "312", "313", "316", "317", "318", - "319", - "320", "321", - "329", - "330", - "340", - "341", "342", "346", "347", @@ -87,54 +38,31 @@ "353", "354", "355", - "356", - "359", - "361", "362", "371", "372", "373", "374", - "377", - "378", "379", "381", - "384", - "385", - "386", "404", - "407", "408", "409", - "410", "411", "412", - "413", "414", - "415", "416", "417", - "418", - "419", - "420", - "421", - "428", "429", "435", - "436", - "437", - "438", "439", "440", "441", "442", - "450", "452", "454", "456", "457", - "461", - "462", "464", "469", "471", @@ -142,17 +70,11 @@ "476", "477", "478", - "479", - "480", "481", "482", - "483", - "484", "485", "486", "490", - "491", - "492", "493", "494", "497", @@ -160,18 +82,11 @@ "499", "500", "501", - "502", "503", "504", - "505", "506", - "507", "508", - "509", "510", - "511", - "512", - "513", "514", "519", "520", @@ -183,39 +98,28 @@ "538", "539", "540", - "555", - "556", "557", "558", "559", - "560", - "561", "562", "563", "564", "567", "568", "569", - "571", "572", "574", "576", "577", "578", - "579", - "580", "581", "583", "585", "588", "594", "595", - "597", - "598", - "599", "600", "601", - "605", "606", "607", "608", diff --git a/parser/testdata/parse/postgres_regress/security_label.metadata.json b/parser/testdata/parse/postgres_regress/security_label.metadata.json index f2112ac..9973bb2 100644 --- a/parser/testdata/parse/postgres_regress/security_label.metadata.json +++ b/parser/testdata/parse/postgres_regress/security_label.metadata.json @@ -1,8 +1,5 @@ { "todo": [ - "007", - "008", - "009", "010", "011", "012", diff --git a/parser/testdata/parse/postgres_regress/select.metadata.json b/parser/testdata/parse/postgres_regress/select.metadata.json index b1be8af..f4e049f 100644 --- a/parser/testdata/parse/postgres_regress/select.metadata.json +++ b/parser/testdata/parse/postgres_regress/select.metadata.json @@ -1,13 +1,8 @@ { "todo": [ "008", - "028", - "031", - "038", "044", - "045", "050", - "051", "056", "058", "059", @@ -20,8 +15,6 @@ "075", "078", "081", - "084", - "085", "086", "087" ] diff --git a/parser/testdata/parse/postgres_regress/select_distinct.metadata.json b/parser/testdata/parse/postgres_regress/select_distinct.metadata.json index f342e05..9983a50 100644 --- a/parser/testdata/parse/postgres_regress/select_distinct.metadata.json +++ b/parser/testdata/parse/postgres_regress/select_distinct.metadata.json @@ -2,12 +2,8 @@ "todo": [ "006", "011", - "012", - "014", "016", "021", - "022", - "024", "029", "030", "031", @@ -20,7 +16,6 @@ "047", "049", "051", - "056", - "060" + "056" ] } diff --git a/parser/testdata/parse/postgres_regress/select_having.metadata.json b/parser/testdata/parse/postgres_regress/select_having.metadata.json index 36b740f..3b2ed2e 100644 --- a/parser/testdata/parse/postgres_regress/select_having.metadata.json +++ b/parser/testdata/parse/postgres_regress/select_having.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "001", "023" ] } diff --git a/parser/testdata/parse/postgres_regress/select_implicit.metadata.json b/parser/testdata/parse/postgres_regress/select_implicit.metadata.json index b9415e3..79e7a27 100644 --- a/parser/testdata/parse/postgres_regress/select_implicit.metadata.json +++ b/parser/testdata/parse/postgres_regress/select_implicit.metadata.json @@ -1,8 +1,5 @@ { "todo": [ - "001", - "028", - "040", "042", "043", "044" diff --git a/parser/testdata/parse/postgres_regress/select_into.metadata.json b/parser/testdata/parse/postgres_regress/select_into.metadata.json index 3563299..d9f6f9e 100644 --- a/parser/testdata/parse/postgres_regress/select_into.metadata.json +++ b/parser/testdata/parse/postgres_regress/select_into.metadata.json @@ -4,23 +4,12 @@ "004", "007", "008", - "010", "012", - "013", "014", - "016", "017", - "018", "019", "021", "025", - "027", - "029", - "030", - "031", - "032", - "033", - "034", "039", "040", "041", @@ -30,12 +19,6 @@ "047", "048", "049", - "053", - "055", - "056", - "057", - "058", - "059", "060", "061", "062", diff --git a/parser/testdata/parse/postgres_regress/select_parallel.metadata.json b/parser/testdata/parse/postgres_regress/select_parallel.metadata.json index 33afd00..29a9ccc 100644 --- a/parser/testdata/parse/postgres_regress/select_parallel.metadata.json +++ b/parser/testdata/parse/postgres_regress/select_parallel.metadata.json @@ -18,9 +18,6 @@ "024", "026", "029", - "031", - "032", - "033", "034", "035", "037", @@ -50,8 +47,6 @@ "091", "101", "103", - "105", - "107", "110", "111", "112", @@ -86,17 +81,13 @@ "202", "203", "204", - "205", "208", - "211", "212", "215", "216", "224", "225", "228", - "229", - "231", - "232" + "231" ] } diff --git a/parser/testdata/parse/postgres_regress/select_views.metadata.json b/parser/testdata/parse/postgres_regress/select_views.metadata.json index 208ec73..9cb5225 100644 --- a/parser/testdata/parse/postgres_regress/select_views.metadata.json +++ b/parser/testdata/parse/postgres_regress/select_views.metadata.json @@ -1,15 +1,6 @@ { "todo": [ "005", - "006", - "007", - "008", - "012", - "013", - "014", - "015", - "016", - "017", "018", "019", "020", diff --git a/parser/testdata/parse/postgres_regress/sequence.metadata.json b/parser/testdata/parse/postgres_regress/sequence.metadata.json index 958cff5..ffb2fdf 100644 --- a/parser/testdata/parse/postgres_regress/sequence.metadata.json +++ b/parser/testdata/parse/postgres_regress/sequence.metadata.json @@ -1,117 +1,45 @@ { "todo": [ - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "021", - "022", - "023", - "024", - "025", - "026", - "027", - "028", - "029", - "030", - "031", - "032", - "033", - "034", - "035", - "036", - "037", - "044", - "061", - "062", "077", - "078", "079", "084", "085", - "088", - "089", - "090", "091", "092", "093", "094", "095", "096", - "097", - "098", - "099", - "100", - "103", - "105", - "106", - "107", - "113", - "119", - "125", - "131", - "135", "139", "140", "141", - "142", - "149", "152", - "154", "155", "156", "157", - "158", - "170", "171", "172", - "177", "178", "179", - "184", "185", "186", - "191", "193", "194", - "199", "201", "202", - "207", "209", "210", - "215", "217", "218", - "223", "225", "226", - "231", "233", "234", - "239", "240", "244", - "250", "252", "255", - "256", "260" ] } diff --git a/parser/testdata/parse/postgres_regress/spgist.metadata.json b/parser/testdata/parse/postgres_regress/spgist.metadata.json index bd3d21f..67bd6c7 100644 --- a/parser/testdata/parse/postgres_regress/spgist.metadata.json +++ b/parser/testdata/parse/postgres_regress/spgist.metadata.json @@ -1,22 +1,10 @@ { "todo": [ - "001", - "002", "005", "010", - "011", - "013", - "015", - "016", - "019", - "020", "021", "022", "023", - "024", - "025", - "027", - "029", - "030" + "027" ] } diff --git a/parser/testdata/parse/postgres_regress/sqljson.metadata.json b/parser/testdata/parse/postgres_regress/sqljson.metadata.json index 26aba7f..c59aa53 100644 --- a/parser/testdata/parse/postgres_regress/sqljson.metadata.json +++ b/parser/testdata/parse/postgres_regress/sqljson.metadata.json @@ -18,25 +18,18 @@ "108", "109", "163", - "164", "165", "171", - "172", "173", "174", "175", - "176", "177", "178", "179", - "180", "181", "182", - "183", "184", - "194", "200", - "201", "202", "208", "211", diff --git a/parser/testdata/parse/postgres_regress/sqljson_jsontable.metadata.json b/parser/testdata/parse/postgres_regress/sqljson_jsontable.metadata.json index 86f93ab..0591af4 100644 --- a/parser/testdata/parse/postgres_regress/sqljson_jsontable.metadata.json +++ b/parser/testdata/parse/postgres_regress/sqljson_jsontable.metadata.json @@ -3,12 +3,6 @@ "010", "012", "016", - "017", - "027", - "028", - "029", - "030", - "031", "032", "033", "034", @@ -25,18 +19,10 @@ "066", "067", "073", - "091", - "095", "096", - "097", - "104", "105", "106", - "112", - "113", "114", - "115", - "116", "117" ] } diff --git a/parser/testdata/parse/postgres_regress/sqljson_queryfuncs.metadata.json b/parser/testdata/parse/postgres_regress/sqljson_queryfuncs.metadata.json index d905161..67dc999 100644 --- a/parser/testdata/parse/postgres_regress/sqljson_queryfuncs.metadata.json +++ b/parser/testdata/parse/postgres_regress/sqljson_queryfuncs.metadata.json @@ -10,57 +10,13 @@ "180", "181", "182", - "200", "209", - "210", - "211", - "212", - "213", - "214", - "215", - "216", - "217", - "218", - "219", - "220", - "221", - "222", - "223", - "224", - "225", - "226", - "227", - "228", - "229", - "230", - "231", - "232", - "233", - "234", - "235", - "236", - "237", - "238", - "239", - "240", - "241", - "242", - "243", - "244", - "245", - "246", - "247", - "248", - "249", "250", "255", "256", "257", - "267", - "268", "270", "271", - "280", "291", "292", "301", diff --git a/parser/testdata/parse/postgres_regress/stats.metadata.json b/parser/testdata/parse/postgres_regress/stats.metadata.json index 73e40ca..ee0ea59 100644 --- a/parser/testdata/parse/postgres_regress/stats.metadata.json +++ b/parser/testdata/parse/postgres_regress/stats.metadata.json @@ -1,19 +1,10 @@ { "todo": [ - "009", - "011", - "012", - "013", - "014", - "015", "067", "069", "097", "104", "113", - "117", - "120", - "123", "128", "137", "148", @@ -22,7 +13,6 @@ "178", "183", "184", - "186", "197", "200", "210", @@ -31,40 +21,24 @@ "240", "246", "247", - "253", "254", - "316", - "317", "323", - "326", - "332", "336", "342", - "350", "362", "374", "380", - "382", "391", - "398", "400", "401", - "408", - "417", - "419", "420", "424", "425", - "426", - "428", "430", "433", "435", - "436", - "438", "440", "442", - "444", "447" ] } diff --git a/parser/testdata/parse/postgres_regress/stats_ext.metadata.json b/parser/testdata/parse/postgres_regress/stats_ext.metadata.json index 1353514..3f98462 100644 --- a/parser/testdata/parse/postgres_regress/stats_ext.metadata.json +++ b/parser/testdata/parse/postgres_regress/stats_ext.metadata.json @@ -1,7 +1,6 @@ { "todo": [ "001", - "002", "003", "004", "005", @@ -26,7 +25,6 @@ "024", "025", "026", - "027", "028", "029", "032", @@ -44,7 +42,6 @@ "049", "050", "052", - "054", "055", "057", "058", @@ -57,24 +54,16 @@ "066", "067", "068", - "069", - "070", "072", "073", "074", - "075", - "076", - "077", "081", "084", "085", "090", - "091", - "092", "094", "095", "099", - "100", "101", "102", "104", @@ -83,17 +72,10 @@ "108", "110", "112", - "114", - "115", - "116", - "117", - "118", "119", "120", "121", "122", - "123", - "124", "125", "126", "127", @@ -106,7 +88,6 @@ "134", "135", "136", - "137", "139", "149", "150", @@ -138,9 +119,6 @@ "260", "268", "269", - "270", - "271", - "272", "274", "277", "278", @@ -157,13 +135,11 @@ "352", "378", "379", - "406", "408", "414", "415", "416", "422", - "423", "425", "428", "429", @@ -198,59 +174,46 @@ "570", "574", "575", - "580", "582", "585", "586", "589", - "590", "592", "593", - "594", "596", "601", "602", - "607", "611", "620", "621", "630", - "631", "633", "641", "642", "643", "651", - "652", "654", "657", "658", "661", "662", - "663", "665", "669", "670", "674", - "675", "677", "679", "680", "682", - "683", "684", "686", "688", - "690", "692", "693", - "694", "695", "696", "697", - "698", "699", - "700", "701", "704", "705", @@ -268,17 +231,14 @@ "729", "730", "731", - "736", "737", "743", "744", "745", - "751", "752", "758", "759", "760", - "766", "768", "769", "770", diff --git a/parser/testdata/parse/postgres_regress/subselect.metadata.json b/parser/testdata/parse/postgres_regress/subselect.metadata.json index eea4987..18a3e67 100644 --- a/parser/testdata/parse/postgres_regress/subselect.metadata.json +++ b/parser/testdata/parse/postgres_regress/subselect.metadata.json @@ -1,11 +1,8 @@ { "todo": [ - "014", "032", "034", - "040", "042", - "043", "044", "048", "049", @@ -13,30 +10,10 @@ "052", "053", "054", - "059", - "060", - "071", - "083", "085", - "086", - "087", - "088", "089", "093", - "099", - "101", - "105", - "108", - "113", - "117", - "119", - "121", "126", - "134", - "139", - "144", - "147", - "152", "156", "158", "163", @@ -48,9 +25,6 @@ "171", "174", "176", - "178", - "179", - "180", "182", "183", "186", @@ -60,25 +34,19 @@ "190", "192", "194", - "196", - "197", - "200", "203", "205", "207", "210", - "212", "215", "216", "218", "219", "221", "223", - "224", "226", "229", "230", - "237", "239", "242", "244", diff --git a/parser/testdata/parse/postgres_regress/tablesample.metadata.json b/parser/testdata/parse/postgres_regress/tablesample.metadata.json index 9873a43..f82a533 100644 --- a/parser/testdata/parse/postgres_regress/tablesample.metadata.json +++ b/parser/testdata/parse/postgres_regress/tablesample.metadata.json @@ -1,15 +1,9 @@ { "todo": [ - "001", - "011", - "012", "030", "031", "032", "038", - "052", - "053", - "054", "055", "056" ] diff --git a/parser/testdata/parse/postgres_regress/tablespace.metadata.json b/parser/testdata/parse/postgres_regress/tablespace.metadata.json index 9e4a609..55b89d4 100644 --- a/parser/testdata/parse/postgres_regress/tablespace.metadata.json +++ b/parser/testdata/parse/postgres_regress/tablespace.metadata.json @@ -19,8 +19,6 @@ "020", "021", "022", - "023", - "025", "026", "027", "029", @@ -31,55 +29,16 @@ "040", "042", "046", - "047", - "048", - "049", - "050", - "051", - "052", - "053", "054", - "055", "056", - "057", "058", - "059", "060", - "062", "063", "065", - "067", - "071", - "074", - "076", - "078", - "080", - "082", - "084", - "086", "087", - "088", - "089", - "090", "091", - "092", - "093", - "095", "098", - "099", - "100", - "101", - "102", - "104", - "105", - "107", - "108", - "109", - "111", "112", - "113", - "115", - "116", "117", "118", "120", @@ -87,10 +46,6 @@ "125", "126", "127", - "128", - "129", - "131", - "132", "133", "134", "136", @@ -98,38 +53,26 @@ "141", "142", "143", - "144", "147", "149", "151", - "152", "154", - "155", - "157", "158", "159", - "160", - "161", "162", "163", "164", "165", "166", - "170", "171", - "172", "174", - "175", "176", "177", "178", "180", "184", "185", - "186", - "187", "188", - "190", "191", "192", "193", diff --git a/parser/testdata/parse/postgres_regress/temp.metadata.json b/parser/testdata/parse/postgres_regress/temp.metadata.json index ad6177a..1b597a2 100644 --- a/parser/testdata/parse/postgres_regress/temp.metadata.json +++ b/parser/testdata/parse/postgres_regress/temp.metadata.json @@ -1,61 +1,26 @@ { "todo": [ - "001", - "002", - "003", - "004", "006", "007", "009", "010", - "011", - "013", "016", "018", - "019", - "021", - "022", "029", - "031", "035", - "037", - "044", "049", - "053", - "054", - "056", - "057", - "064", - "065", - "067", - "069", "071", "072", "082", "084", - "090", - "091", "095", - "097", - "098", - "099", - "104", - "105", - "106", "111", - "113", - "114", - "119", - "120", "126", "128", "130", "132", "135", "138", - "141", - "144", - "146", "157" ] } diff --git a/parser/testdata/parse/postgres_regress/test_setup.metadata.json b/parser/testdata/parse/postgres_regress/test_setup.metadata.json index 779e517..88c27e4 100644 --- a/parser/testdata/parse/postgres_regress/test_setup.metadata.json +++ b/parser/testdata/parse/postgres_regress/test_setup.metadata.json @@ -2,42 +2,23 @@ "todo": [ "002", "004", - "005", "007", - "008", "010", - "011", "013", - "014", "016", - "017", "019", - "020", - "022", "024", - "025", "027", - "028", "030", - "031", "032", - "033", "035", - "036", "037", - "038", "040", - "041", "043", - "044", "046", - "047", "049", - "050", "052", - "053", "055", - "056", "058", "059", "060", diff --git a/parser/testdata/parse/postgres_regress/tid.metadata.json b/parser/testdata/parse/postgres_regress/tid.metadata.json index 995e0a2..a821061 100644 --- a/parser/testdata/parse/postgres_regress/tid.metadata.json +++ b/parser/testdata/parse/postgres_regress/tid.metadata.json @@ -1,20 +1,11 @@ { "todo": [ - "008", - "013", - "016", "018", - "020", "022", - "023", "025", - "026", "028", - "029", "031", - "032", "036", - "038", "040", "041" ] diff --git a/parser/testdata/parse/postgres_regress/tidrangescan.metadata.json b/parser/testdata/parse/postgres_regress/tidrangescan.metadata.json index b402087..81a336b 100644 --- a/parser/testdata/parse/postgres_regress/tidrangescan.metadata.json +++ b/parser/testdata/parse/postgres_regress/tidrangescan.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "002", "003", "005", "009", diff --git a/parser/testdata/parse/postgres_regress/tidscan.metadata.json b/parser/testdata/parse/postgres_regress/tidscan.metadata.json index 999a052..a552786 100644 --- a/parser/testdata/parse/postgres_regress/tidscan.metadata.json +++ b/parser/testdata/parse/postgres_regress/tidscan.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "001", "004", "006", "008", diff --git a/parser/testdata/parse/postgres_regress/time.metadata.json b/parser/testdata/parse/postgres_regress/time.metadata.json index f23fe5c..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/time.metadata.json +++ b/parser/testdata/parse/postgres_regress/time.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "001" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/timestamp.metadata.json b/parser/testdata/parse/postgres_regress/timestamp.metadata.json index f23fe5c..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/timestamp.metadata.json +++ b/parser/testdata/parse/postgres_regress/timestamp.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "001" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/timestamptz.metadata.json b/parser/testdata/parse/postgres_regress/timestamptz.metadata.json index 489123e..ee79512 100644 --- a/parser/testdata/parse/postgres_regress/timestamptz.metadata.json +++ b/parser/testdata/parse/postgres_regress/timestamptz.metadata.json @@ -1,11 +1,7 @@ { "todo": [ - "001", - "209", "217", - "362", "365", - "367", "369" ] } diff --git a/parser/testdata/parse/postgres_regress/timetz.metadata.json b/parser/testdata/parse/postgres_regress/timetz.metadata.json index 7814d26..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/timetz.metadata.json +++ b/parser/testdata/parse/postgres_regress/timetz.metadata.json @@ -1,6 +1,3 @@ { - "todo": [ - "001", - "053" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/transactions.metadata.json b/parser/testdata/parse/postgres_regress/transactions.metadata.json index d77d4dc..e2135ff 100644 --- a/parser/testdata/parse/postgres_regress/transactions.metadata.json +++ b/parser/testdata/parse/postgres_regress/transactions.metadata.json @@ -1,47 +1,28 @@ { "todo": [ - "002", - "008", "026", - "027", - "028", "068", - "076", "078", - "081", - "083", "085", - "086", - "090", "092", - "093", - "124", "197", "229", "234", "239", "244", - "251", - "255", "259", "260", "261", "262", - "263", "266", "267", - "270", - "279", "290", "291", "303", "304", - "305", "376", - "377", "414", "417", - "439", "481" ] } diff --git a/parser/testdata/parse/postgres_regress/triggers.metadata.json b/parser/testdata/parse/postgres_regress/triggers.metadata.json index f7c1e79..3410fbc 100644 --- a/parser/testdata/parse/postgres_regress/triggers.metadata.json +++ b/parser/testdata/parse/postgres_regress/triggers.metadata.json @@ -5,13 +5,6 @@ "003", "004", "005", - "006", - "007", - "008", - "009", - "010", - "011", - "018", "019", "020", "021", @@ -23,24 +16,18 @@ "043", "044", "045", - "046", "047", "054", "055", "062", "069", "076", - "077", "078", "081", "085", "089", - "090", - "091", "092", "093", - "1000", - "1001", "1002", "1007", "1008", @@ -52,17 +39,11 @@ "1017", "1018", "1019", - "1020", - "1021", "1022", "1023", "1024", "1031", "1032", - "1033", - "1034", - "1035", - "1036", "1037", "1038", "1039", @@ -74,8 +55,6 @@ "1046", "1047", "1049", - "1050", - "1051", "1052", "1053", "1054", @@ -83,8 +62,6 @@ "1056", "117", "118", - "119", - "120", "122", "123", "124", @@ -104,7 +81,6 @@ "155", "156", "157", - "158", "160", "162", "163", @@ -113,7 +89,6 @@ "166", "167", "168", - "172", "173", "174", "175", @@ -131,8 +106,6 @@ "192", "193", "194", - "196", - "197", "198", "199", "200", @@ -145,26 +118,21 @@ "219", "224", "225", - "226", "227", "228", "232", "233", "234", - "235", "236", "237", "243", "247", "248", "249", - "250", "251", "258", - "259", "261", "266", - "267", "268", "269", "270", @@ -193,16 +161,12 @@ "302", "303", "304", - "305", - "307", - "308", "309", "310", "311", "312", "313", "314", - "329", "331", "332", "336", @@ -210,9 +174,6 @@ "338", "347", "348", - "349", - "350", - "351", "352", "353", "354", @@ -223,8 +184,6 @@ "364", "365", "366", - "367", - "368", "369", "370", "371", @@ -239,7 +198,6 @@ "395", "396", "397", - "398", "399", "400", "401", @@ -247,20 +205,16 @@ "412", "413", "414", - "415", - "416", "417", "418", "419", "422", "423", - "424", "425", "426", "428", "430", "431", - "432", "433", "434", "435", @@ -268,27 +222,17 @@ "446", "447", "448", - "449", - "450", "451", "452", "453", "454", "455", - "456", "457", "458", "459", "460", - "461", - "462", "463", - "464", - "465", "466", - "467", - "468", - "469", "470", "472", "473", @@ -305,7 +249,6 @@ "486", "487", "488", - "490", "491", "492", "493", @@ -313,12 +256,6 @@ "495", "496", "497", - "498", - "499", - "500", - "501", - "502", - "503", "504", "505", "506", @@ -344,128 +281,74 @@ "531", "533", "535", - "536", - "537", - "538", - "539", "540", "541", "542", "543", "544", "546", - "547", - "548", - "549", "551", "552", "553", "554", "555", "558", - "559", - "560", "561", "562", - "563", - "564", "565", "567", "568", "569", - "570", "571", - "572", "573", "574", - "575", "576", "577", "578", "579", "583", - "584", - "585", - "586", "587", "589", "592", "595", - "600", "604", "605", - "608", "613", - "614", "615", - "616", - "617", "618", "623", "624", - "625", - "626", "627", - "628", "629", "630", "631", "642", "643", - "644", - "645", - "646", "647", "648", "649", - "650", - "651", - "652", "653", "656", - "657", - "658", - "659", - "660", - "661", "662", "663", "664", "665", - "666", - "667", - "668", "669", "671", - "672", - "673", - "674", "675", "676", "677", - "678", - "679", - "680", "681", "685", "686", - "687", - "688", "689", - "690", - "691", - "692", "694", - "695", - "696", "697", "698", "699", "700", "702", "704", - "705", - "706", "707", "708", "710", @@ -473,22 +356,12 @@ "713", "715", "717", - "718", - "719", "721", "723", - "724", - "725", "726", "727", "729", - "731", - "733", "734", - "736", - "737", - "739", - "740", "741", "744", "750", @@ -496,12 +369,8 @@ "752", "753", "754", - "755", - "756", - "757", "758", "759", - "760", "761", "762", "763", @@ -530,8 +399,6 @@ "801", "804", "805", - "806", - "807", "808", "809", "810", @@ -541,9 +408,6 @@ "814", "815", "816", - "817", - "818", - "819", "820", "821", "822", @@ -551,11 +415,7 @@ "826", "829", "830", - "831", - "832", - "833", "834", - "835", "836", "837", "838", @@ -568,7 +428,6 @@ "845", "846", "847", - "860", "862", "863", "864", @@ -581,8 +440,6 @@ "871", "872", "874", - "875", - "876", "877", "878", "879", @@ -590,64 +447,43 @@ "881", "882", "883", - "884", - "885", "886", "887", "892", "893", - "894", "895", "896", - "900", - "901", - "902", - "903", - "904", "905", "906", "910", "911", "912", "913", - "914", - "915", "916", "917", "918", "919", "926", - "927", - "928", "931", "933", - "934", "935", "936", "937", "940", "943", - "944", "945", "946", "947", - "948", "953", "954", "955", "956", - "957", "958", "959", "960", "961", "963", "966", - "967", - "968", - "969", - "970", - "971", "972", "974", "976", @@ -659,13 +495,8 @@ "988", "989", "990", - "991", "992", "993", - "994", - "995", - "996", - "997", "998", "999" ] diff --git a/parser/testdata/parse/postgres_regress/truncate.metadata.json b/parser/testdata/parse/postgres_regress/truncate.metadata.json index cbeece4..fdaeacc 100644 --- a/parser/testdata/parse/postgres_regress/truncate.metadata.json +++ b/parser/testdata/parse/postgres_regress/truncate.metadata.json @@ -1,19 +1,8 @@ { "todo": [ - "001", - "013", - "014", - "015", - "016", "028", "049", - "050", - "053", - "055", - "057", "087", - "088", - "089", "090", "092", "098", @@ -21,36 +10,13 @@ "107", "108", "109", - "110", - "111", - "112", - "124", "144", - "146", - "148", "152", "153", "154", - "155", - "156", - "157", - "158", - "159", - "160", "171", "172", - "173", - "174", - "175", - "176", - "177", - "178", - "179", - "181", "185", - "186", - "187", - "188", "193" ] } diff --git a/parser/testdata/parse/postgres_regress/tsearch.metadata.json b/parser/testdata/parse/postgres_regress/tsearch.metadata.json index 5a90d19..70d93b9 100644 --- a/parser/testdata/parse/postgres_regress/tsearch.metadata.json +++ b/parser/testdata/parse/postgres_regress/tsearch.metadata.json @@ -1,36 +1,19 @@ { "todo": [ - "007", "009", - "034", "038", "065", - "090", - "091", - "092", - "093", - "094", - "095", "096", "097", "122", - "123", "124", "152", - "153", "155", "180", "182", - "282", "285", - "292", - "324", "348", "356", - "357", - "358", - "359", - "367", - "370" + "357" ] } diff --git a/parser/testdata/parse/postgres_regress/tsrf.metadata.json b/parser/testdata/parse/postgres_regress/tsrf.metadata.json index ef4607d..2b43c3e 100644 --- a/parser/testdata/parse/postgres_regress/tsrf.metadata.json +++ b/parser/testdata/parse/postgres_regress/tsrf.metadata.json @@ -1,11 +1,9 @@ { "todo": [ "007", - "009", "011", "013", "045", - "047", "065", "067", "069", diff --git a/parser/testdata/parse/postgres_regress/tuplesort.metadata.json b/parser/testdata/parse/postgres_regress/tuplesort.metadata.json index db24a7c..4a4877a 100644 --- a/parser/testdata/parse/postgres_regress/tuplesort.metadata.json +++ b/parser/testdata/parse/postgres_regress/tuplesort.metadata.json @@ -1,12 +1,7 @@ { "todo": [ - "003", - "015", - "016", "017", "019", - "021", - "022", "023", "025", "029", @@ -15,7 +10,6 @@ "047", "054", "074", - "096", "103", "105" ] diff --git a/parser/testdata/parse/postgres_regress/txid.metadata.json b/parser/testdata/parse/postgres_regress/txid.metadata.json index 288317c..d87384c 100644 --- a/parser/testdata/parse/postgres_regress/txid.metadata.json +++ b/parser/testdata/parse/postgres_regress/txid.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "008", "045" ] } diff --git a/parser/testdata/parse/postgres_regress/type_sanity.metadata.json b/parser/testdata/parse/postgres_regress/type_sanity.metadata.json index 5b604f4..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/type_sanity.metadata.json +++ b/parser/testdata/parse/postgres_regress/type_sanity.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "060" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/typed_table.metadata.json b/parser/testdata/parse/postgres_regress/typed_table.metadata.json index 6043573..879373e 100644 --- a/parser/testdata/parse/postgres_regress/typed_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/typed_table.metadata.json @@ -1,28 +1,16 @@ { "todo": [ - "001", "002", - "003", - "004", "006", "008", "009", "010", "011", - "012", "013", - "014", - "015", - "016", - "017", "018", "019", - "020", "021", "022", - "023", - "025", - "027", - "028" + "025" ] } diff --git a/parser/testdata/parse/postgres_regress/union.metadata.json b/parser/testdata/parse/postgres_regress/union.metadata.json index 743584d..7d25577 100644 --- a/parser/testdata/parse/postgres_regress/union.metadata.json +++ b/parser/testdata/parse/postgres_regress/union.metadata.json @@ -29,19 +29,10 @@ "116", "124", "125", - "138", - "139", - "140", "147", "148", - "149", "150", - "151", - "154", "157", - "163", - "164", - "165", "166", "167", "169", @@ -51,8 +42,6 @@ "176", "178", "180", - "181", - "182", "183", "184", "186", diff --git a/parser/testdata/parse/postgres_regress/updatable_views.metadata.json b/parser/testdata/parse/postgres_regress/updatable_views.metadata.json index 36066e4..8eafd92 100644 --- a/parser/testdata/parse/postgres_regress/updatable_views.metadata.json +++ b/parser/testdata/parse/postgres_regress/updatable_views.metadata.json @@ -1,27 +1,5 @@ { "todo": [ - "002", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "021", - "022", - "023", - "024", "068", "086", "087", @@ -29,23 +7,15 @@ "093", "094", "095", - "096", - "098", "1007", "1008", "1009", - "1011", - "1013", - "1018", - "1020", "1024", "1025", "1026", "1027", "1028", "1029", - "1032", - "1033", "1034", "1035", "1046", @@ -59,8 +29,6 @@ "1087", "1092", "1093", - "1094", - "1095", "1096", "1099", "1100", @@ -70,28 +38,18 @@ "114", "115", "116", - "117", "118", "122", "123", - "124", - "126", - "127", "141", "142", "143", - "144", - "146", - "147", "151", "155", "159", "169", "170", "171", - "172", - "174", - "175", "179", "180", "184", @@ -104,33 +62,23 @@ "210", "214", "215", - "216", - "218", "219", "222", "223", - "228", - "230", "232", "233", "234", "235", - "238", "262", "276", "277", "290", - "291", - "294", - "300", "306", "318", "325", "337", "344", "356", - "358", - "360", "361", "363", "364", @@ -141,10 +89,7 @@ "400", "406", "413", - "414", - "417", "418", - "423", "424", "429", "430", @@ -157,91 +102,46 @@ "487", "509", "527", - "531", - "535", "536", "541", - "542", "545", "546", - "547", "550", "551", "552", "553", - "554", - "556", "560", "563", - "564", - "566", "569", - "570", - "572", - "580", - "588", "598", - "599", - "600", "611", - "612", - "613", - "616", - "617", - "639", - "640", "643", "647", "648", - "649", - "651", "666", - "667", - "668", - "669", - "677", "682", "683", "686", "690", - "691", - "692", - "693", - "694", "702", - "703", - "704", "713", - "714", - "715", - "717", "722", "723", "724", - "725", "726", "727", - "728", "732", "733", - "734", - "735", "736", "737", - "738", "748", "752", "753", "754", "762", "763", - "764", - "765", "766", - "767", "769", - "770", - "772", "773", "774", "778", @@ -249,123 +149,72 @@ "787", "788", "789", - "790", "798", "799", "800", "801", "802", - "803", "805", "806", - "807", "809", "811", "814", - "815", - "816", "818", - "819", - "820", "822", - "823", - "824", "826", - "827", - "828", "830", - "831", "834", "838", "843", "844", "845", - "846", - "847", - "848", - "849", "853", "854", "855", "856", - "857", - "858", - "859", - "860", "865", "866", "867", "868", - "869", - "870", - "871", "872", "873", "874", - "875", "880", "881", "882", "883", - "884", - "886", - "888", - "889", "898", "899", "900", "901", - "902", - "903", "904", - "905", "906", "907", "908", "909", - "910", - "911", - "912", "915", "916", - "917", - "918", - "919", "920", "921", "922", "923", "924", "925", - "926", - "934", "940", "941", - "942", - "943", - "944", "946", - "947", "948", "949", - "950", - "952", "954", "955", - "956", - "958", "965", "968", "969", - "970", - "971", "973", "980", "983", "987", "988", - "992", - "994", "995", "996", "997" diff --git a/parser/testdata/parse/postgres_regress/update.metadata.json b/parser/testdata/parse/postgres_regress/update.metadata.json index 3ccc31b..80581a2 100644 --- a/parser/testdata/parse/postgres_regress/update.metadata.json +++ b/parser/testdata/parse/postgres_regress/update.metadata.json @@ -1,36 +1,19 @@ { "todo": [ - "001", - "002", "035", "044", "045", - "046", - "047", - "048", "049", "053", - "054", - "055", "056", - "057", - "058", "059", - "060", - "061", - "063", "064", "065", "066", "067", - "068", - "069", "070", - "071", "072", "073", - "082", - "084", "089", "091", "092", @@ -87,26 +70,14 @@ "171", "172", "173", - "174", "183", - "184", - "185", - "186", "191", - "192", - "193", - "194", "195", "196", "197", "205", - "206", - "207", - "208", "209", - "210", "211", - "212", "213", "222", "223", @@ -115,16 +86,10 @@ "229", "232", "235", - "236", "240", "241", "242", "243", - "244", - "245", - "246", - "247", - "248", "255", "256", "257" diff --git a/parser/testdata/parse/postgres_regress/uuid.metadata.json b/parser/testdata/parse/postgres_regress/uuid.metadata.json index 102dcc5..5b4808a 100644 --- a/parser/testdata/parse/postgres_regress/uuid.metadata.json +++ b/parser/testdata/parse/postgres_regress/uuid.metadata.json @@ -1,10 +1,5 @@ { "todo": [ - "001", - "002", - "023", - "024", - "025", "044" ] } diff --git a/parser/testdata/parse/postgres_regress/vacuum.metadata.json b/parser/testdata/parse/postgres_regress/vacuum.metadata.json index ebe29e3..8a8e8aa 100644 --- a/parser/testdata/parse/postgres_regress/vacuum.metadata.json +++ b/parser/testdata/parse/postgres_regress/vacuum.metadata.json @@ -1,25 +1,18 @@ { "todo": [ - "001", "018", "034", "037", "038", - "039", "040", "041", "042", "043", - "044", "046", "052", - "055", - "056", "059", "061", "062", - "066", - "067", "069", "070", "072", @@ -29,16 +22,6 @@ "078", "079", "080", - "081", - "083", - "084", - "085", - "086", - "087", - "088", - "089", - "091", - "092", "094", "096", "098", @@ -48,14 +31,10 @@ "102", "104", "106", - "108", - "109", "110", "111", "113", "114", - "115", - "116", "117", "119", "120", @@ -72,21 +51,15 @@ "134", "135", "136", - "137", "139", "141", "143", "144", - "145", - "146", "149", "150", "151", "152", "153", - "154", - "155", - "156", "158", "159", "160", @@ -116,9 +89,7 @@ "190", "191", "194", - "196", "198", - "199", "200", "202", "204", @@ -142,10 +113,6 @@ "228", "229", "230", - "231", - "232", - "233", - "234", "237", "238", "239", diff --git a/parser/testdata/parse/postgres_regress/vacuum_parallel.metadata.json b/parser/testdata/parse/postgres_regress/vacuum_parallel.metadata.json index a51e30f..4d49589 100644 --- a/parser/testdata/parse/postgres_regress/vacuum_parallel.metadata.json +++ b/parser/testdata/parse/postgres_regress/vacuum_parallel.metadata.json @@ -1,9 +1,5 @@ { "todo": [ - "003", - "005", - "006", - "007", "011" ] } diff --git a/parser/testdata/parse/postgres_regress/varchar.metadata.json b/parser/testdata/parse/postgres_regress/varchar.metadata.json index 69a5a4c..72bfdf3 100644 --- a/parser/testdata/parse/postgres_regress/varchar.metadata.json +++ b/parser/testdata/parse/postgres_regress/varchar.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "001", "017" ] } diff --git a/parser/testdata/parse/postgres_regress/window.metadata.json b/parser/testdata/parse/postgres_regress/window.metadata.json index cd6df63..0f0bace 100644 --- a/parser/testdata/parse/postgres_regress/window.metadata.json +++ b/parser/testdata/parse/postgres_regress/window.metadata.json @@ -1,15 +1,7 @@ { "todo": [ - "001", "045", - "074", - "077", - "080", - "083", - "086", - "089", "092", - "093", "123", "125", "128", @@ -19,9 +11,6 @@ "136", "137", "138", - "145", - "166", - "238", "241", "246", "265", diff --git a/parser/testdata/parse/postgres_regress/with.metadata.json b/parser/testdata/parse/postgres_regress/with.metadata.json index 9ccc6a4..e2b3880 100644 --- a/parser/testdata/parse/postgres_regress/with.metadata.json +++ b/parser/testdata/parse/postgres_regress/with.metadata.json @@ -1,52 +1,31 @@ { "todo": [ - "006", - "008", - "018", - "033", - "037", - "041", - "046", "049", "050", "051", - "052", "054", "057", "060", "062", - "070", - "073", "078", "081", - "097", - "098", - "109", "117", - "130", - "149", "150", "155", "173", "176", - "177", - "181", "182", "186", - "188", "189", "195", "197", - "205", "206", "216", - "217", "218", "222", "225", "228", "229", - "232", "241", "242", "245", @@ -56,9 +35,6 @@ "251", "254", "255", - "256", - "257", - "258", "270", "275", "277", @@ -66,9 +42,6 @@ "281", "283", "285", - "286", - "287", - "290", "293" ] } diff --git a/parser/testdata/parse/postgres_regress/write_parallel.metadata.json b/parser/testdata/parse/postgres_regress/write_parallel.metadata.json index 0089c45..4e66c6f 100644 --- a/parser/testdata/parse/postgres_regress/write_parallel.metadata.json +++ b/parser/testdata/parse/postgres_regress/write_parallel.metadata.json @@ -1,18 +1,12 @@ { "todo": [ "006", - "007", "008", "009", "011", "012", - "013", - "014", - "015", - "016", "017", "019", - "020", "021" ] } diff --git a/parser/testdata/parse/postgres_regress/xid.metadata.json b/parser/testdata/parse/postgres_regress/xid.metadata.json index 4782a5f..638b099 100644 --- a/parser/testdata/parse/postgres_regress/xid.metadata.json +++ b/parser/testdata/parse/postgres_regress/xid.metadata.json @@ -1,10 +1,6 @@ { "todo": [ - "027", - "030", - "031", "032", - "045", "082" ] } diff --git a/parser/testdata/parse/postgres_regress/xml.metadata.json b/parser/testdata/parse/postgres_regress/xml.metadata.json index 57117ef..2a75c93 100644 --- a/parser/testdata/parse/postgres_regress/xml.metadata.json +++ b/parser/testdata/parse/postgres_regress/xml.metadata.json @@ -1,28 +1,11 @@ { "todo": [ - "001", - "134", - "135", - "136", - "137", - "138", - "139", - "140", - "141", - "142", - "143", - "144", "163", - "184", - "214", - "217", "219", "220", - "224", "242", "244", "245", - "250", - "254" + "250" ] } diff --git a/parser/testdata/parse/postgres_regress/xmlmap.metadata.json b/parser/testdata/parse/postgres_regress/xmlmap.metadata.json index 87c9b99..37a17b8 100644 --- a/parser/testdata/parse/postgres_regress/xmlmap.metadata.json +++ b/parser/testdata/parse/postgres_regress/xmlmap.metadata.json @@ -1,11 +1,8 @@ { "todo": [ - "002", "004", - "005", "006", "036", - "037", - "038" + "037" ] } From ba484f0f08973141c1e682d03d8f53bd61ed911b Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 16 Aug 2026 19:13:17 +0000 Subject: [PATCH 04/24] Milestone 6: ALTER TABLE family AlterTableStmt over TABLE/INDEX/SEQUENCE/VIEW/MATERIALIZED VIEW/FOREIGN TABLE, the full alter_table_cmd set, partition ATTACH/DETACH commands, AlterTableMoveAllStmt, alter_generic_options, identity column options, and AlterCompositeTypeStmt (ALTER TYPE ... ATTRIBUTE). Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01J19Kf5LpGUhi2vxFJjzQJE --- internal/parse/ddl_altertable.go | 709 ++++++++++++++++++ internal/parse/ddl_create.go | 12 - internal/parse/ddl_dispatch.go | 46 +- .../alter_table.metadata.json | 2 - .../postgres_regress/errors.metadata.json | 1 - .../foreign_key.metadata.json | 1 - ...l_alter_table_add_constraint.metadata.json | 4 +- .../testdata/parse/libpg_query.metadata.json | 1 - .../postgres_regress/aggregates.metadata.json | 1 - .../alter_table.metadata.json | 508 +------------ .../btree_index.metadata.json | 4 - .../postgres_regress/cluster.metadata.json | 8 - .../postgres_regress/collate.metadata.json | 2 - .../compression.metadata.json | 9 - .../constraints.metadata.json | 19 +- .../parse/postgres_regress/copy.metadata.json | 5 - .../postgres_regress/create_am.metadata.json | 17 - .../create_index.metadata.json | 16 - .../create_misc.metadata.json | 5 +- .../create_role.metadata.json | 7 - .../create_table.metadata.json | 12 - .../create_table_like.metadata.json | 8 - .../create_view.metadata.json | 21 - .../postgres_regress/dependency.metadata.json | 2 - .../postgres_regress/domain.metadata.json | 5 - .../postgres_regress/equivclass.metadata.json | 1 - .../postgres_regress/errors.metadata.json | 1 - .../event_trigger.metadata.json | 7 - .../fast_default.metadata.json | 64 +- .../foreign_data.metadata.json | 102 --- .../foreign_key.metadata.json | 152 +--- .../functional_deps.metadata.json | 9 +- .../postgres_regress/generated.metadata.json | 5 - .../parse/postgres_regress/gin.metadata.json | 1 - .../parse/postgres_regress/gist.metadata.json | 1 - .../groupingsets.metadata.json | 3 - .../postgres_regress/hash_index.metadata.json | 1 - .../postgres_regress/identity.metadata.json | 64 +- .../index_including.metadata.json | 16 - .../index_including_gist.metadata.json | 1 - .../postgres_regress/indexing.metadata.json | 132 ---- .../postgres_regress/inherit.metadata.json | 52 -- .../postgres_regress/insert.metadata.json | 31 - .../insert_conflict.metadata.json | 6 - .../parse/postgres_regress/join.metadata.json | 2 - .../postgres_regress/join_hash.metadata.json | 8 - .../postgres_regress/merge.metadata.json | 19 - .../postgres_regress/numeric.metadata.json | 4 +- .../partition_aggregate.metadata.json | 5 - .../partition_info.metadata.json | 6 - .../partition_join.metadata.json | 28 - .../partition_prune.metadata.json | 8 - .../postgres_regress/plancache.metadata.json | 4 - .../postgres_regress/plpgsql.metadata.json | 5 - .../postgres_regress/predicate.metadata.json | 3 - .../postgres_regress/privileges.metadata.json | 1 - .../publication.metadata.json | 47 -- .../postgres_regress/rangefuncs.metadata.json | 4 - .../postgres_regress/reloptions.metadata.json | 13 +- .../replica_identity.metadata.json | 23 - .../postgres_regress/returning.metadata.json | 1 - .../rowsecurity.metadata.json | 25 - .../postgres_regress/rowtypes.metadata.json | 3 - .../postgres_regress/rules.metadata.json | 7 - .../security_label.metadata.json | 2 - .../select_parallel.metadata.json | 23 - .../select_views.metadata.json | 4 +- .../postgres_regress/sequence.metadata.json | 2 - .../postgres_regress/spgist.metadata.json | 1 - .../postgres_regress/stats.metadata.json | 2 - .../postgres_regress/stats_ext.metadata.json | 9 - .../postgres_regress/tablespace.metadata.json | 29 - .../postgres_regress/triggers.metadata.json | 69 +- .../postgres_regress/truncate.metadata.json | 1 - .../postgres_regress/tsearch.metadata.json | 1 - .../typed_table.metadata.json | 3 - .../postgres_regress/union.metadata.json | 1 - .../updatable_views.metadata.json | 26 - .../postgres_regress/update.metadata.json | 16 - .../postgres_regress/vacuum.metadata.json | 13 - .../parse/postgres_regress/with.metadata.json | 2 - .../postgres_regress/xmlmap.metadata.json | 1 - 82 files changed, 766 insertions(+), 1729 deletions(-) create mode 100644 internal/parse/ddl_altertable.go diff --git a/internal/parse/ddl_altertable.go b/internal/parse/ddl_altertable.go new file mode 100644 index 0000000..6b27385 --- /dev/null +++ b/internal/parse/ddl_altertable.go @@ -0,0 +1,709 @@ +package parse + +// AlterTableStmt (ALTER TABLE/INDEX/SEQUENCE/VIEW/MATERIALIZED VIEW/FOREIGN +// TABLE), AlterTableMoveAllStmt, AlterCompositeTypeStmt, and the +// alter_table_cmd machinery. + +import ( + "fmt" + + "github.com/sqlc-dev/oliphant/ast" +) + +func nAlterTableCmd(n *ast.AlterTableCmd) *ast.Node { + return &ast.Node{Node: &ast.Node_AlterTableCmd{AlterTableCmd: n}} +} + +func newAlterTableCmd(subtype ast.AlterTableType) *ast.AlterTableCmd { + // makeNode zeroes the C struct; behavior 0 is DROP_RESTRICT. + return &ast.AlterTableCmd{Subtype: subtype, Behavior: ast.DropBehavior_DROP_RESTRICT} +} + +// parseAlterTableStmt parses the AlterTableStmt family. ALTER and the +// object-kind keywords (TABLE / INDEX / SEQUENCE / VIEW / MATERIALIZED +// VIEW / FOREIGN TABLE) are consumed by the dispatcher, which passes the +// objtype; relExpr says whether the target uses relation_expr (TABLE, +// FOREIGN TABLE) or qualified_name. +func (p *parser) parseAlterTableStmt(objtype ast.ObjectType, relExpr, allowMoveAll bool) *ast.Node { + // ALTER TABLE/INDEX/MATERIALIZED VIEW ALL IN TABLESPACE ... + if allowMoveAll && p.kind() == ast.Token_ALL { + p.next() + p.expect(ast.Token_IN_P) + p.expect(ast.Token_TABLESPACE) + n := &ast.AlterTableMoveAllStmt{Objtype: objtype} + n.OrigTablespacename = p.name() + if p.have(ast.Token_OWNED) { + p.expect(ast.Token_BY) + n.Roles = p.parseRoleList() + } + p.expect(ast.Token_SET) + p.expect(ast.Token_TABLESPACE) + n.NewTablespacename = p.name() + n.Nowait = p.have(ast.Token_NOWAIT) + return &ast.Node{Node: &ast.Node_AlterTableMoveAllStmt{AlterTableMoveAllStmt: n}} + } + + n := &ast.AlterTableStmt{Objtype: objtype} + if p.have(ast.Token_IF_P) { + p.expect(ast.Token_EXISTS) + n.MissingOk = true + } + if relExpr { + n.Relation = p.parseRelationExpr().GetRangeVar() + } else { + n.Relation = p.parseQualifiedName() + } + n.Cmds = p.parseAlterTableCmds() + return &ast.Node{Node: &ast.Node_AlterTableStmt{AlterTableStmt: n}} +} + +// parseAlterTableCmds is gram.y's alter_table_cmds, plus the partition_cmd +// and index_partition_cmd singletons (ATTACH/DETACH PARTITION). +func (p *parser) parseAlterTableCmds() []*ast.Node { + list := []*ast.Node{p.parseAlterTableCmd()} + for p.have(ast.Token(',')) { + list = append(list, p.parseAlterTableCmd()) + } + return list +} + +// parseAlterTableCmd is gram.y's alter_table_cmd / partition_cmd / +// index_partition_cmd. +func (p *parser) parseAlterTableCmd() *ast.Node { + tok := p.peek() + switch tok.Kind { + case ast.Token_ATTACH: + // partition_cmd: ATTACH PARTITION qualified_name [PartitionBoundSpec] + p.next() + p.expect(ast.Token_PARTITION) + n := newAlterTableCmd(ast.AlterTableType_AT_AttachPartition) + cmd := &ast.PartitionCmd{Name: p.parseQualifiedName()} + switch p.kind() { + case ast.Token_FOR, ast.Token_DEFAULT: + cmd.Bound = p.parsePartitionBoundSpec() + } + n.Def = &ast.Node{Node: &ast.Node_PartitionCmd{PartitionCmd: cmd}} + return nAlterTableCmd(n) + + case ast.Token_DETACH: + p.next() + p.expect(ast.Token_PARTITION) + cmd := &ast.PartitionCmd{Name: p.parseQualifiedName()} + subtype := ast.AlterTableType_AT_DetachPartition + if p.have(ast.Token_FINALIZE) { + subtype = ast.AlterTableType_AT_DetachPartitionFinalize + } else { + cmd.Concurrent = p.have(ast.Token_CONCURRENTLY) + } + n := newAlterTableCmd(subtype) + n.Def = &ast.Node{Node: &ast.Node_PartitionCmd{PartitionCmd: cmd}} + return nAlterTableCmd(n) + + case ast.Token_ADD_P: + p.next() + switch p.kind() { + case ast.Token_CONSTRAINT, ast.Token_CHECK, ast.Token_UNIQUE, + ast.Token_PRIMARY, ast.Token_EXCLUDE, ast.Token_FOREIGN: + n := newAlterTableCmd(ast.AlterTableType_AT_AddConstraint) + n.Def = p.parseTableConstraint() + return nAlterTableCmd(n) + case ast.Token_COLUMN: + p.next() + } + n := newAlterTableCmd(ast.AlterTableType_AT_AddColumn) + if p.have(ast.Token_IF_P) { + p.expect(ast.Token_NOT) + p.expect(ast.Token_EXISTS) + n.MissingOk = true + } + n.Def = p.parseColumnDef() + return nAlterTableCmd(n) + + case ast.Token_ALTER: + p.next() + if p.kind() == ast.Token_CONSTRAINT { + // ALTER CONSTRAINT name ConstraintAttributeSpec + p.next() + n := newAlterTableCmd(ast.AlterTableType_AT_AlterConstraint) + c := &ast.Constraint{ + Contype: ast.ConstrType_CONSTR_FOREIGN, + Conname: p.name(), + } + cas, casLoc := p.parseConstraintAttributeSpec() + p.processCASbits(cas, casLoc, "FOREIGN KEY", &c.Deferrable, &c.Initdeferred, nil, nil) + n.Def = nConstraint(c) + return nAlterTableCmd(n) + } + p.have(ast.Token_COLUMN) + if p.kind() == ast.Token_ICONST { + // ALTER opt_column Iconst SET STATISTICS set_statistics_value + itok := p.peek() + num := p.iconst() + p.expect(ast.Token_SET) + p.expect(ast.Token_STATISTICS) + if num <= 0 || num > 32767 { + p.ereport("base_yyparse", "column number must be in range from 1 to 32767", itok.Start) + } + n := newAlterTableCmd(ast.AlterTableType_AT_SetStatistics) + n.Num = num + n.Def = p.parseSetStatisticsValue() + return nAlterTableCmd(n) + } + return p.parseAlterColumnCmd() + + case ast.Token_DROP: + p.next() + switch p.kind() { + case ast.Token_CONSTRAINT: + p.next() + n := newAlterTableCmd(ast.AlterTableType_AT_DropConstraint) + if p.have(ast.Token_IF_P) { + p.expect(ast.Token_EXISTS) + n.MissingOk = true + } + n.Name = p.name() + n.Behavior = p.parseOptDropBehavior() + return nAlterTableCmd(n) + case ast.Token_COLUMN: + p.next() + } + n := newAlterTableCmd(ast.AlterTableType_AT_DropColumn) + if p.have(ast.Token_IF_P) { + p.expect(ast.Token_EXISTS) + n.MissingOk = true + } + n.Name = p.colId() + n.Behavior = p.parseOptDropBehavior() + return nAlterTableCmd(n) + + case ast.Token_VALIDATE: + p.next() + p.expect(ast.Token_CONSTRAINT) + n := newAlterTableCmd(ast.AlterTableType_AT_ValidateConstraint) + n.Name = p.name() + return nAlterTableCmd(n) + + case ast.Token_SET: + p.next() + switch p.kind() { + case ast.Token_WITHOUT: + p.next() + switch { + case p.have(ast.Token_OIDS): + return nAlterTableCmd(newAlterTableCmd(ast.AlterTableType_AT_DropOids)) + case p.have(ast.Token_CLUSTER): + return nAlterTableCmd(newAlterTableCmd(ast.AlterTableType_AT_DropCluster)) + } + p.syntaxErrorAt() + case ast.Token_LOGGED: + p.next() + return nAlterTableCmd(newAlterTableCmd(ast.AlterTableType_AT_SetLogged)) + case ast.Token_UNLOGGED: + p.next() + return nAlterTableCmd(newAlterTableCmd(ast.AlterTableType_AT_SetUnLogged)) + case ast.Token_ACCESS: + p.next() + p.expect(ast.Token_METHOD) + n := newAlterTableCmd(ast.AlterTableType_AT_SetAccessMethod) + if !p.have(ast.Token_DEFAULT) { + n.Name = p.colId() + } + return nAlterTableCmd(n) + case ast.Token_TABLESPACE: + p.next() + n := newAlterTableCmd(ast.AlterTableType_AT_SetTableSpace) + n.Name = p.name() + return nAlterTableCmd(n) + case ast.Token('('): + n := newAlterTableCmd(ast.AlterTableType_AT_SetRelOptions) + n.Def = nList(p.parseReloptions()) + return nAlterTableCmd(n) + } + p.syntaxErrorAt() + + case ast.Token_RESET: + p.next() + n := newAlterTableCmd(ast.AlterTableType_AT_ResetRelOptions) + n.Def = nList(p.parseReloptions()) + return nAlterTableCmd(n) + + case ast.Token_REPLICA: + p.next() + p.expect(ast.Token_IDENTITY_P) + n := newAlterTableCmd(ast.AlterTableType_AT_ReplicaIdentity) + r := &ast.ReplicaIdentityStmt{} + switch { + case p.have(ast.Token_NOTHING): + r.IdentityType = "n" + case p.have(ast.Token_FULL): + r.IdentityType = "f" + case p.have(ast.Token_DEFAULT): + r.IdentityType = "d" + case p.have(ast.Token_USING): + p.expect(ast.Token_INDEX) + r.IdentityType = "i" + r.Name = p.name() + default: + p.syntaxErrorAt() + } + n.Def = &ast.Node{Node: &ast.Node_ReplicaIdentityStmt{ReplicaIdentityStmt: r}} + return nAlterTableCmd(n) + + case ast.Token_ENABLE_P: + p.next() + switch { + case p.have(ast.Token_TRIGGER): + switch { + case p.have(ast.Token_ALL): + return nAlterTableCmd(newAlterTableCmd(ast.AlterTableType_AT_EnableTrigAll)) + case p.have(ast.Token_USER): + return nAlterTableCmd(newAlterTableCmd(ast.AlterTableType_AT_EnableTrigUser)) + } + n := newAlterTableCmd(ast.AlterTableType_AT_EnableTrig) + n.Name = p.name() + return nAlterTableCmd(n) + case p.have(ast.Token_ALWAYS): + switch { + case p.have(ast.Token_TRIGGER): + n := newAlterTableCmd(ast.AlterTableType_AT_EnableAlwaysTrig) + n.Name = p.name() + return nAlterTableCmd(n) + case p.have(ast.Token_RULE): + n := newAlterTableCmd(ast.AlterTableType_AT_EnableAlwaysRule) + n.Name = p.name() + return nAlterTableCmd(n) + } + p.syntaxErrorAt() + case p.have(ast.Token_REPLICA): + switch { + case p.have(ast.Token_TRIGGER): + n := newAlterTableCmd(ast.AlterTableType_AT_EnableReplicaTrig) + n.Name = p.name() + return nAlterTableCmd(n) + case p.have(ast.Token_RULE): + n := newAlterTableCmd(ast.AlterTableType_AT_EnableReplicaRule) + n.Name = p.name() + return nAlterTableCmd(n) + } + p.syntaxErrorAt() + case p.have(ast.Token_RULE): + n := newAlterTableCmd(ast.AlterTableType_AT_EnableRule) + n.Name = p.name() + return nAlterTableCmd(n) + case p.have(ast.Token_ROW): + p.expect(ast.Token_LEVEL) + p.expect(ast.Token_SECURITY) + return nAlterTableCmd(newAlterTableCmd(ast.AlterTableType_AT_EnableRowSecurity)) + } + p.syntaxErrorAt() + + case ast.Token_DISABLE_P: + p.next() + switch { + case p.have(ast.Token_TRIGGER): + switch { + case p.have(ast.Token_ALL): + return nAlterTableCmd(newAlterTableCmd(ast.AlterTableType_AT_DisableTrigAll)) + case p.have(ast.Token_USER): + return nAlterTableCmd(newAlterTableCmd(ast.AlterTableType_AT_DisableTrigUser)) + } + n := newAlterTableCmd(ast.AlterTableType_AT_DisableTrig) + n.Name = p.name() + return nAlterTableCmd(n) + case p.have(ast.Token_RULE): + n := newAlterTableCmd(ast.AlterTableType_AT_DisableRule) + n.Name = p.name() + return nAlterTableCmd(n) + case p.have(ast.Token_ROW): + p.expect(ast.Token_LEVEL) + p.expect(ast.Token_SECURITY) + return nAlterTableCmd(newAlterTableCmd(ast.AlterTableType_AT_DisableRowSecurity)) + } + p.syntaxErrorAt() + + case ast.Token_FORCE: + p.next() + p.expect(ast.Token_ROW) + p.expect(ast.Token_LEVEL) + p.expect(ast.Token_SECURITY) + return nAlterTableCmd(newAlterTableCmd(ast.AlterTableType_AT_ForceRowSecurity)) + + case ast.Token_NO: + p.next() + switch { + case p.have(ast.Token_INHERIT): + n := newAlterTableCmd(ast.AlterTableType_AT_DropInherit) + n.Def = nRangeVar(p.parseQualifiedName()) + return nAlterTableCmd(n) + case p.have(ast.Token_FORCE): + p.expect(ast.Token_ROW) + p.expect(ast.Token_LEVEL) + p.expect(ast.Token_SECURITY) + return nAlterTableCmd(newAlterTableCmd(ast.AlterTableType_AT_NoForceRowSecurity)) + } + p.syntaxErrorAt() + + case ast.Token_INHERIT: + p.next() + n := newAlterTableCmd(ast.AlterTableType_AT_AddInherit) + n.Def = nRangeVar(p.parseQualifiedName()) + return nAlterTableCmd(n) + + case ast.Token_OF: + p.next() + ntok := p.peek() + def := makeTypeNameFromNameList(p.anyName()) + def.Location = ntok.Start + n := newAlterTableCmd(ast.AlterTableType_AT_AddOf) + n.Def = nTypeName(def) + return nAlterTableCmd(n) + + case ast.Token_NOT: + p.next() + p.expect(ast.Token_OF) + return nAlterTableCmd(newAlterTableCmd(ast.AlterTableType_AT_DropOf)) + + case ast.Token_OWNER: + p.next() + p.expect(ast.Token_TO) + n := newAlterTableCmd(ast.AlterTableType_AT_ChangeOwner) + n.Newowner = p.parseRoleSpec() + return nAlterTableCmd(n) + + case ast.Token_CLUSTER: + p.next() + p.expect(ast.Token_ON) + n := newAlterTableCmd(ast.AlterTableType_AT_ClusterOn) + n.Name = p.name() + return nAlterTableCmd(n) + + case ast.Token_OPTIONS: + n := newAlterTableCmd(ast.AlterTableType_AT_GenericOptions) + n.Def = nList(p.parseAlterGenericOptions()) + return nAlterTableCmd(n) + } + p.syntaxErrorAt() + return nil +} + +// parseSetStatisticsValue is gram.y's set_statistics_value. +func (p *parser) parseSetStatisticsValue() *ast.Node { + if p.have(ast.Token_DEFAULT) { + return nil + } + return nInteger(p.parseSignedIconst()) +} + +// parseAlterColumnCmd handles the ALTER [COLUMN] ColId ... alternatives of +// alter_table_cmd; ALTER opt_column are consumed. +func (p *parser) parseAlterColumnCmd() *ast.Node { + colname := p.colId() + switch p.kind() { + case ast.Token_SET: + p.next() + switch p.kind() { + case ast.Token_DEFAULT: + p.next() + n := newAlterTableCmd(ast.AlterTableType_AT_ColumnDefault) + n.Name = colname + n.Def = p.parseAExpr(0) + return nAlterTableCmd(n) + case ast.Token_NOT: + p.next() + p.expect(ast.Token_NULL_P) + n := newAlterTableCmd(ast.AlterTableType_AT_SetNotNull) + n.Name = colname + return nAlterTableCmd(n) + case ast.Token_EXPRESSION: + p.next() + p.expect(ast.Token_AS) + p.expect(ast.Token('(')) + n := newAlterTableCmd(ast.AlterTableType_AT_SetExpression) + n.Name = colname + n.Def = p.parseAExpr(0) + p.expect(ast.Token(')')) + return nAlterTableCmd(n) + case ast.Token_STATISTICS: + p.next() + n := newAlterTableCmd(ast.AlterTableType_AT_SetStatistics) + n.Name = colname + n.Def = p.parseSetStatisticsValue() + return nAlterTableCmd(n) + case ast.Token('('): + n := newAlterTableCmd(ast.AlterTableType_AT_SetOptions) + n.Name = colname + n.Def = nList(p.parseReloptions()) + return nAlterTableCmd(n) + case ast.Token_STORAGE: + p.next() + n := newAlterTableCmd(ast.AlterTableType_AT_SetStorage) + n.Name = colname + n.Def = nStr(p.parseColIdOrDefault()) + return nAlterTableCmd(n) + case ast.Token_COMPRESSION: + p.next() + n := newAlterTableCmd(ast.AlterTableType_AT_SetCompression) + n.Name = colname + n.Def = nStr(p.parseColIdOrDefault()) + return nAlterTableCmd(n) + case ast.Token_DATA_P: + p.next() + p.expect(ast.Token_TYPE_P) + return p.parseAlterColumnType(colname) + case ast.Token_GENERATED: + // alter_identity_column_option: SET GENERATED generated_when + return p.parseAlterIdentityOptions(colname, true) + default: + // alter_identity_column_option: SET SeqOptElem + if p.seqOptElemStarts() || p.kind() == ast.Token_AS { + return p.parseAlterIdentityOptions(colname, true) + } + } + p.syntaxErrorAt() + case ast.Token_DROP: + p.next() + switch { + case p.have(ast.Token_NOT): + p.expect(ast.Token_NULL_P) + n := newAlterTableCmd(ast.AlterTableType_AT_DropNotNull) + n.Name = colname + return nAlterTableCmd(n) + case p.have(ast.Token_DEFAULT): + n := newAlterTableCmd(ast.AlterTableType_AT_ColumnDefault) + n.Name = colname + return nAlterTableCmd(n) + case p.have(ast.Token_EXPRESSION): + n := newAlterTableCmd(ast.AlterTableType_AT_DropExpression) + n.Name = colname + if p.have(ast.Token_IF_P) { + p.expect(ast.Token_EXISTS) + n.MissingOk = true + } + return nAlterTableCmd(n) + case p.have(ast.Token_IDENTITY_P): + n := newAlterTableCmd(ast.AlterTableType_AT_DropIdentity) + n.Name = colname + if p.have(ast.Token_IF_P) { + p.expect(ast.Token_EXISTS) + n.MissingOk = true + } + return nAlterTableCmd(n) + } + p.syntaxErrorAt() + case ast.Token_TYPE_P: + p.next() + return p.parseAlterColumnType(colname) + case ast.Token_ADD_P: + // ALTER col ADD GENERATED generated_when AS IDENTITY [(seqopts)] + p.next() + gtok := p.expect(ast.Token_GENERATED) + c := &ast.Constraint{ + Contype: ast.ConstrType_CONSTR_IDENTITY, + Location: gtok.Start, + } + c.GeneratedWhen = p.parseGeneratedWhen() + p.expect(ast.Token_AS) + p.expect(ast.Token_IDENTITY_P) + if p.have(ast.Token('(')) { + c.Options = p.parseSeqOptList() + p.expect(ast.Token(')')) + } + n := newAlterTableCmd(ast.AlterTableType_AT_AddIdentity) + n.Name = colname + n.Def = nConstraint(c) + return nAlterTableCmd(n) + case ast.Token_RESTART: + return p.parseAlterIdentityOptions(colname, false) + case ast.Token_OPTIONS: + n := newAlterTableCmd(ast.AlterTableType_AT_AlterColumnGenericOptions) + n.Name = colname + n.Def = nList(p.parseAlterGenericOptions()) + return nAlterTableCmd(n) + } + p.syntaxErrorAt() + return nil +} + +// parseAlterColumnType finishes ALTER [COLUMN] col [SET DATA] TYPE: +// +// Typename opt_collate_clause alter_using +func (p *parser) parseAlterColumnType(colname string) *ast.Node { + n := newAlterTableCmd(ast.AlterTableType_AT_AlterColumnType) + n.Name = colname + def := &ast.ColumnDef{Location: -1} + def.TypeName = p.parseTypename() + if p.kind() == ast.Token_COLLATE { + ctok := p.next() + def.CollClause = &ast.CollateClause{ + Collname: p.anyName(), + Location: ctok.Start, + } + } + if p.have(ast.Token_USING) { + def.RawDefault = p.parseAExpr(0) + } + n.Def = nColumnDef(def) + return nAlterTableCmd(n) +} + +// parseAlterIdentityOptions is gram.y's +// alter_identity_column_option_list; firstIsSet marks that the caller's +// lookahead sits after a consumed SET. +func (p *parser) parseAlterIdentityOptions(colname string, firstIsSet bool) *ast.Node { + n := newAlterTableCmd(ast.AlterTableType_AT_SetIdentity) + n.Name = colname + var opts []*ast.Node + first := true + for { + var setConsumed bool + if first { + setConsumed = firstIsSet + first = false + } else { + switch p.kind() { + case ast.Token_RESTART: + case ast.Token_SET: + p.next() + setConsumed = true + default: + n.Def = nList(opts) + return nAlterTableCmd(n) + } + } + if !setConsumed { + if p.kind() != ast.Token_RESTART { + n.Def = nList(opts) + return nAlterTableCmd(n) + } + rtok := p.next() + switch p.kind() { + case ast.Token_WITH, ast.Token_WITH_LA, ast.Token_ICONST, + ast.Token_FCONST, ast.Token('+'), ast.Token('-'): + p.parseOptWith() + opts = append(opts, makeDefElem("restart", p.parseNumericOnly(), rtok.Start)) + default: + opts = append(opts, makeDefElem("restart", nil, rtok.Start)) + } + continue + } + // SET GENERATED generated_when | SET SeqOptElem + if p.kind() == ast.Token_GENERATED { + stok := p.toks[p.pos-1] + p.next() + when := p.parseGeneratedWhen() + ival := int32('a') + if when == attributeIdentityByDefault { + ival = 'd' + } + opts = append(opts, makeDefElem("generated", nInteger(ival), stok.Start)) + continue + } + etok := p.peek() + el := p.parseSeqOptElem() + name := el.GetDefElem().GetDefname() + if name == "as" || name == "restart" || name == "owned_by" { + p.ereport("base_yyparse", + fmt.Sprintf("sequence option %q not supported here", name), etok.Start) + } + opts = append(opts, el) + } +} + +// parseAlterGenericOptions is gram.y's alter_generic_options: +// +// OPTIONS '(' alter_generic_option_list ')' +func (p *parser) parseAlterGenericOptions() []*ast.Node { + p.expect(ast.Token_OPTIONS) + p.expect(ast.Token('(')) + list := []*ast.Node{p.parseAlterGenericOptionElem()} + for p.have(ast.Token(',')) { + list = append(list, p.parseAlterGenericOptionElem()) + } + p.expect(ast.Token(')')) + return list +} + +// parseAlterGenericOptionElem is gram.y's alter_generic_option_elem. +func (p *parser) parseAlterGenericOptionElem() *ast.Node { + switch p.kind() { + case ast.Token_SET: + p.next() + el := p.parseGenericOptionElem() + el.GetDefElem().Defaction = ast.DefElemAction_DEFELEM_SET + return el + case ast.Token_ADD_P: + p.next() + el := p.parseGenericOptionElem() + el.GetDefElem().Defaction = ast.DefElemAction_DEFELEM_ADD + return el + case ast.Token_DROP: + p.next() + ntok := p.peek() + name := p.colLabel() + return makeDefElemExtended("", name, nil, ast.DefElemAction_DEFELEM_DROP, ntok.Start) + } + return p.parseGenericOptionElem() +} + +// parseAlterTypeDispatch routes ALTER TYPE_P any_name ...; the composite +// AlterCompositeTypeStmt lives here, with the rest of the ALTER TYPE +// family (enum, owner, rename, schema, generic) added in milestone 7. +func (p *parser) parseAlterTypeDispatch() *ast.Node { + ntok := p.peek() + names := p.anyName() + switch p.kind() { + case ast.Token_ADD_P, ast.Token_DROP, ast.Token_ALTER: + if p.kindN(1) == ast.Token_ATTRIBUTE { + // gram.y: AlterCompositeTypeStmt: ALTER TYPE_P any_name + // alter_type_cmds + n := &ast.AlterTableStmt{ + Objtype: ast.ObjectType_OBJECT_TYPE, + Relation: p.makeRangeVarFromAnyName(names, ntok.Start), + } + n.Cmds = []*ast.Node{p.parseAlterTypeCmd()} + for p.have(ast.Token(',')) { + n.Cmds = append(n.Cmds, p.parseAlterTypeCmd()) + } + return &ast.Node{Node: &ast.Node_AlterTableStmt{AlterTableStmt: n}} + } + } + p.syntaxErrorAt() + return nil +} + +// parseAlterTypeCmd is gram.y's alter_type_cmd. +func (p *parser) parseAlterTypeCmd() *ast.Node { + switch p.kind() { + case ast.Token_ADD_P: + p.next() + p.expect(ast.Token_ATTRIBUTE) + n := newAlterTableCmd(ast.AlterTableType_AT_AddColumn) + n.Def = p.parseTableFuncElement() + n.Behavior = p.parseOptDropBehavior() + return nAlterTableCmd(n) + case ast.Token_DROP: + p.next() + p.expect(ast.Token_ATTRIBUTE) + n := newAlterTableCmd(ast.AlterTableType_AT_DropColumn) + if p.have(ast.Token_IF_P) { + p.expect(ast.Token_EXISTS) + n.MissingOk = true + } + n.Name = p.colId() + n.Behavior = p.parseOptDropBehavior() + return nAlterTableCmd(n) + case ast.Token_ALTER: + p.next() + p.expect(ast.Token_ATTRIBUTE) + colname := p.colId() + if p.have(ast.Token_SET) { + p.expect(ast.Token_DATA_P) + } + p.expect(ast.Token_TYPE_P) + cmd := p.parseAlterColumnType(colname) + cmd.GetAlterTableCmd().Behavior = p.parseOptDropBehavior() + return cmd + } + p.syntaxErrorAt() + return nil +} diff --git a/internal/parse/ddl_create.go b/internal/parse/ddl_create.go index 29c710b..39be30e 100644 --- a/internal/parse/ddl_create.go +++ b/internal/parse/ddl_create.go @@ -1170,18 +1170,6 @@ func (p *parser) parseCreateSeqStmt(persistence string) *ast.Node { return &ast.Node{Node: &ast.Node_CreateSeqStmt{CreateSeqStmt: n}} } -// parseAlterSeqStmt is gram.y's AlterSeqStmt; ALTER SEQUENCE consumed. -func (p *parser) parseAlterSeqStmt() *ast.Node { - n := &ast.AlterSeqStmt{} - if p.have(ast.Token_IF_P) { - p.expect(ast.Token_EXISTS) - n.MissingOk = true - } - n.Sequence = p.parseQualifiedName() - n.Options = p.parseSeqOptList() - return &ast.Node{Node: &ast.Node_AlterSeqStmt{AlterSeqStmt: n}} -} - // seqOptElemStarts reports whether the lookahead begins a SeqOptElem. func (p *parser) seqOptElemStarts() bool { switch p.kind() { diff --git a/internal/parse/ddl_dispatch.go b/internal/parse/ddl_dispatch.go index a8a5548..23611ce 100644 --- a/internal/parse/ddl_dispatch.go +++ b/internal/parse/ddl_dispatch.go @@ -178,9 +178,53 @@ func (p *parser) parseAlterDispatch() *ast.Node { case ast.Token_GROUP_P: p.next() return p.parseAlterGroupStmt() + case ast.Token_TABLE: + p.next() + return p.parseAlterTableStmt(ast.ObjectType_OBJECT_TABLE, true, true) + case ast.Token_INDEX: + p.next() + return p.parseAlterTableStmt(ast.ObjectType_OBJECT_INDEX, false, true) + case ast.Token_VIEW: + p.next() + return p.parseAlterTableStmt(ast.ObjectType_OBJECT_VIEW, false, false) + case ast.Token_MATERIALIZED: + if p.kindN(1) == ast.Token_VIEW { + p.next() + p.next() + return p.parseAlterTableStmt(ast.ObjectType_OBJECT_MATVIEW, false, true) + } + case ast.Token_FOREIGN: + if p.kindN(1) == ast.Token_TABLE { + p.next() + p.next() + return p.parseAlterTableStmt(ast.ObjectType_OBJECT_FOREIGN_TABLE, true, false) + } case ast.Token_SEQUENCE: + // AlterSeqStmt (SeqOptList) and AlterTableStmt (alter_table_cmds) + // share the prefix through the sequence name; the next token picks + // the production, exactly as the LALR tables do. + p.next() + missingOk := false + if p.have(ast.Token_IF_P) { + p.expect(ast.Token_EXISTS) + missingOk = true + } + rel := p.parseQualifiedName() + if p.seqOptElemStarts() { + n := &ast.AlterSeqStmt{Sequence: rel, MissingOk: missingOk} + n.Options = p.parseSeqOptList() + return &ast.Node{Node: &ast.Node_AlterSeqStmt{AlterSeqStmt: n}} + } + n := &ast.AlterTableStmt{ + Objtype: ast.ObjectType_OBJECT_SEQUENCE, + Relation: rel, + MissingOk: missingOk, + } + n.Cmds = p.parseAlterTableCmds() + return &ast.Node{Node: &ast.Node_AlterTableStmt{AlterTableStmt: n}} + case ast.Token_TYPE_P: p.next() - return p.parseAlterSeqStmt() + return p.parseAlterTypeDispatch() } p.syntaxErrorAt() return nil diff --git a/parser/testdata/deparse/postgres_regress/alter_table.metadata.json b/parser/testdata/deparse/postgres_regress/alter_table.metadata.json index bfe6d13..16a336a 100644 --- a/parser/testdata/deparse/postgres_regress/alter_table.metadata.json +++ b/parser/testdata/deparse/postgres_regress/alter_table.metadata.json @@ -60,7 +60,6 @@ "058", "059", "060", - "061", "062", "063", "064", @@ -1237,7 +1236,6 @@ "581", "582", "583", - "584", "585", "586", "587", diff --git a/parser/testdata/deparse/postgres_regress/errors.metadata.json b/parser/testdata/deparse/postgres_regress/errors.metadata.json index 06607ee..d654d87 100644 --- a/parser/testdata/deparse/postgres_regress/errors.metadata.json +++ b/parser/testdata/deparse/postgres_regress/errors.metadata.json @@ -12,7 +12,6 @@ "012", "013", "014", - "015", "016", "017", "018", diff --git a/parser/testdata/deparse/postgres_regress/foreign_key.metadata.json b/parser/testdata/deparse/postgres_regress/foreign_key.metadata.json index 729dd21..0a20572 100644 --- a/parser/testdata/deparse/postgres_regress/foreign_key.metadata.json +++ b/parser/testdata/deparse/postgres_regress/foreign_key.metadata.json @@ -578,7 +578,6 @@ "422", "423", "424", - "425", "426", "427", "428", diff --git a/parser/testdata/parse/deparse/ddl_alter_table_add_constraint.metadata.json b/parser/testdata/parse/deparse/ddl_alter_table_add_constraint.metadata.json index f23fe5c..737fd31 100644 --- a/parser/testdata/parse/deparse/ddl_alter_table_add_constraint.metadata.json +++ b/parser/testdata/parse/deparse/ddl_alter_table_add_constraint.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "001" - ] + "todo": [] } diff --git a/parser/testdata/parse/libpg_query.metadata.json b/parser/testdata/parse/libpg_query.metadata.json index fc68676..75acf0e 100644 --- a/parser/testdata/parse/libpg_query.metadata.json +++ b/parser/testdata/parse/libpg_query.metadata.json @@ -2,7 +2,6 @@ "todo": [ "009", "010", - "034", "035" ] } diff --git a/parser/testdata/parse/postgres_regress/aggregates.metadata.json b/parser/testdata/parse/postgres_regress/aggregates.metadata.json index 86f82bb..937b03e 100644 --- a/parser/testdata/parse/postgres_regress/aggregates.metadata.json +++ b/parser/testdata/parse/postgres_regress/aggregates.metadata.json @@ -86,7 +86,6 @@ "435", "439", "440", - "441", "444", "448", "449", diff --git a/parser/testdata/parse/postgres_regress/alter_table.metadata.json b/parser/testdata/parse/postgres_regress/alter_table.metadata.json index 3acc344..ff7872c 100644 --- a/parser/testdata/parse/postgres_regress/alter_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/alter_table.metadata.json @@ -3,58 +3,7 @@ "006", "007", "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "021", - "022", - "023", - "024", - "025", - "026", - "027", - "028", - "029", - "030", - "031", "034", - "036", - "037", - "038", - "039", - "040", - "041", - "042", - "043", - "044", - "045", - "046", - "047", - "048", - "049", - "050", - "051", - "052", - "053", - "054", - "055", - "056", - "057", - "061", - "062", - "063", - "064", - "065", - "066", "067", "070", "073", @@ -72,16 +21,6 @@ "096", "099", "100", - "1003", - "1007", - "1011", - "1012", - "1013", - "1014", - "1016", - "1018", - "1021", - "1023", "1025", "1026", "1027", @@ -167,45 +106,14 @@ "1122", "1123", "1124", - "1133", - "1134", - "1135", - "1136", - "1137", - "1138", - "1139", - "1140", - "1141", "1142", - "1143", - "1144", - "1147", "1149", - "1150", - "1151", - "1152", - "1153", "1154", "1155", - "1158", - "1159", - "1160", - "1161", "1162", "1163", "1164", "1165", - "1167", - "1168", - "1169", - "1170", - "1171", - "1172", - "1173", - "1174", - "1175", - "1176", - "1177", "1178", "118", "1181", @@ -230,240 +138,79 @@ "1215", "1216", "1217", - "1223", - "1224", "1225", "123", - "1230", - "1231", - "1232", - "1234", "1235", "1236", "1237", "124", - "1242", - "1243", - "1244", - "1245", - "1247", "1248", "1249", "1250", - "1252", - "1253", - "1254", - "1255", - "1256", - "1257", - "1258", - "1259", - "1260", - "1261", - "1262", - "1263", "1264", "1268", "1269", "1272", "1273", - "1275", "1276", - "1278", "1279", "128", - "1281", - "1282", - "1284", "1285", - "1286", "1287", - "1288", "129", - "1290", - "1291", - "1292", "1293", - "1296", "1297", - "1300", "1301", - "1302", - "1306", - "1309", "1311", - "1316", - "1317", "1318", - "1319", "132", - "1320", "1323", - "1326", "1327", "1328", - "1330", "1331", - "1333", "1334", - "1336", "1337", - "1339", "134", "1340", - "1341", "1342", - "1344", - "1345", - "1346", "1347", - "1349", - "1353", "1354", - "1356", - "1358", "136", - "1362", - "1364", - "1368", - "1370", - "1372", - "1373", - "1374", - "1375", - "1376", - "1381", - "1383", - "1385", - "1388", - "1391", - "1392", - "1396", - "1398", - "1399", - "1400", - "1401", - "1402", - "1403", - "1405", - "1406", - "1409", - "1410", - "1411", - "1412", - "1413", - "1416", - "1417", - "1422", - "1424", - "1425", - "1426", - "1427", "143", - "1432", - "1434", "1435", "1438", "144", - "1442", - "1443", "1444", - "1447", - "1449", "145", - "1453", - "1455", - "1457", - "1458", - "1459", - "146", "1460", - "1462", "1463", - "1464", - "1465", - "1467", - "1468", - "1469", "147", "1470", - "1471", "1474", - "1477", "1478", - "148", "1480", - "1484", - "1487", - "1488", "1489", - "149", - "1490", - "1492", "1493", - "1496", "1497", "1499", "150", - "1500", - "1501", - "1502", - "1503", "1504", "1505", - "1506", - "1507", - "1508", - "1509", - "151", - "1510", - "1511", - "1513", - "1514", - "1515", - "1516", "1517", - "1518", - "1519", - "152", - "1520", - "1521", - "1524", - "1525", - "1526", "1527", - "1528", "153", "1530", "1531", "1532", - "1536", - "1537", - "1538", - "1539", "154", - "1541", - "1543", "1544", "1545", - "1548", - "1549", "155", "1550", - "1553", "1554", "1555", "1556", - "156", - "1561", - "1563", - "1565", - "1566", - "1568", "1569", - "1574", - "1575", - "1576", "1577", "1578", "1580", @@ -472,13 +219,10 @@ "1584", "1585", "1586", - "1589", "159", "1590", "1591", "1592", - "1596", - "1597", "1599", "160", "1600", @@ -486,31 +230,22 @@ "1605", "1606", "1607", - "1609", "161", "1611", "1612", "1613", "1616", - "1617", "1618", "1619", - "162", "1620", "1622", "1623", - "1625", - "1627", "1629", "163", - "1631", "1633", "1635", "164", - "1640", - "1642", "1648", - "165", "1650", "1651", "1652", @@ -519,217 +254,74 @@ "167", "168", "169", - "170", "172", "173", "175", "176", - "188", - "189", - "190", - "192", - "193", - "195", - "196", - "198", - "199", - "200", - "201", - "202", - "204", - "205", - "210", - "211", - "213", "214", - "216", - "217", - "218", - "223", - "224", - "226", "228", - "229", "230", "231", "232", "233", "234", "235", - "240", - "241", "242", "244", "245", - "246", "247", - "248", - "252", - "253", "254", - "256", "259", - "261", "262", "263", - "267", "270", "271", - "274", "275", - "277", "278", - "280", - "281", "282", "283", - "286", - "287", - "288", - "289", - "290", - "291", - "292", - "293", - "294", - "298", "301", - "304", "306", - "308", "309", - "311", "314", - "316", "318", - "322", "327", "328", "329", - "333", - "334", - "337", - "338", "339", - "340", - "341", - "342", - "343", - "344", - "346", - "347", - "348", - "349", - "350", "352", "353", - "356", - "360", "361", "362", - "364", "368", "369", - "373", "375", - "377", "378", - "380", "386", - "388", "391", - "393", - "398", - "399", - "400", "401", - "405", "407", - "410", "412", - "414", "415", - "418", - "419", "420", - "423", "424", - "426", "427", "428", - "431", "432", "433", - "436", "437", "438", - "440", - "441", "450", "455", - "456", - "457", - "458", - "459", - "461", - "462", - "463", - "464", - "466", - "468", - "469", - "470", - "472", - "473", "474", "475", - "478", - "479", - "480", - "481", - "482", - "483", - "485", - "486", - "489", - "490", - "491", - "493", - "494", - "495", - "496", "497", - "500", - "503", - "506", - "507", - "509", - "511", - "514", "516", "517", - "520", - "522", - "524", - "525", - "528", - "529", - "530", "532", - "534", - "536", "539", "540", "541", - "542", - "543", - "546", - "547", - "582", - "583", - "584", - "585", - "588", "589", "590", "591", @@ -737,53 +329,18 @@ "593", "594", "595", - "596", - "597", - "598", - "599", - "600", - "601", - "602", - "603", - "604", - "605", - "606", - "607", "608", "609", - "610", - "611", - "612", - "613", - "614", - "615", - "617", - "618", - "619", - "620", "621", "627", "630", - "631", - "632", - "633", "635", - "638", - "639", "642", - "645", - "650", "653", "654", "660", "661", - "664", "674", - "678", - "679", - "680", - "681", - "682", "686", "687", "688", @@ -791,35 +348,11 @@ "690", "691", "692", - "693", - "694", - "697", - "698", - "700", "702", - "705", - "706", "708", - "711", - "712", - "713", "714", - "717", - "718", - "719", "720", - "726", - "727", - "728", - "729", - "730", - "731", - "733", - "734", "736", - "740", - "744", - "745", "752", "753", "757", @@ -830,17 +363,9 @@ "772", "777", "779", - "780", "781", - "782", - "783", - "784", "785", "787", - "789", - "790", - "791", - "792", "795", "796", "797", @@ -854,7 +379,6 @@ "818", "821", "822", - "830", "831", "832", "834", @@ -865,31 +389,13 @@ "841", "847", "850", - "852", - "853", "854", - "855", - "857", - "858", "859", - "862", - "863", - "865", - "869", "873", - "875", - "876", - "877", - "878", "880", - "884", "886", - "891", - "892", - "893", "897", "898", - "902", "903", "905", "910", @@ -904,18 +410,6 @@ "941", "942", "943", - "950", - "954", - "958", - "962", - "966", - "970", - "974", - "978", - "982", - "986", - "990", - "994", - "999" + "994" ] } diff --git a/parser/testdata/parse/postgres_regress/btree_index.metadata.json b/parser/testdata/parse/postgres_regress/btree_index.metadata.json index 92e0733..babec6c 100644 --- a/parser/testdata/parse/postgres_regress/btree_index.metadata.json +++ b/parser/testdata/parse/postgres_regress/btree_index.metadata.json @@ -21,12 +21,8 @@ "069", "075", "076", - "080", - "085", "087", - "091", "092", - "095", "096" ] } diff --git a/parser/testdata/parse/postgres_regress/cluster.metadata.json b/parser/testdata/parse/postgres_regress/cluster.metadata.json index fafcb7f..1c500d1 100644 --- a/parser/testdata/parse/postgres_regress/cluster.metadata.json +++ b/parser/testdata/parse/postgres_regress/cluster.metadata.json @@ -1,11 +1,7 @@ { "todo": [ "046", - "057", - "059", "061", - "066", - "067", "068", "075", "076", @@ -22,12 +18,8 @@ "134", "137", "140", - "141", - "142", "143", - "149", "151", - "153", "156", "159", "165", diff --git a/parser/testdata/parse/postgres_regress/collate.metadata.json b/parser/testdata/parse/postgres_regress/collate.metadata.json index afb6be6..73495be 100644 --- a/parser/testdata/parse/postgres_regress/collate.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.metadata.json @@ -5,8 +5,6 @@ "048", "083", "087", - "107", - "109", "113", "114", "115", diff --git a/parser/testdata/parse/postgres_regress/compression.metadata.json b/parser/testdata/parse/postgres_regress/compression.metadata.json index be1ce7d..053c2b8 100644 --- a/parser/testdata/parse/postgres_regress/compression.metadata.json +++ b/parser/testdata/parse/postgres_regress/compression.metadata.json @@ -6,17 +6,8 @@ "035", "036", "037", - "038", - "039", - "048", - "061", - "064", - "065", - "066", - "067", "073", "075", - "086", "087" ] } diff --git a/parser/testdata/parse/postgres_regress/constraints.metadata.json b/parser/testdata/parse/postgres_regress/constraints.metadata.json index 4e24078..5cb8089 100644 --- a/parser/testdata/parse/postgres_regress/constraints.metadata.json +++ b/parser/testdata/parse/postgres_regress/constraints.metadata.json @@ -11,30 +11,14 @@ "137", "148", "157", - "175", - "176", "210", - "213", "215", - "218", - "221", - "222", - "224", "225", - "229", - "230", "231", - "235", - "236", "237", - "240", - "243", "257", - "267", "268", "269", - "288", - "290", "291", "295", "296", @@ -51,7 +35,6 @@ "311", "314", "315", - "316", - "319" + "316" ] } diff --git a/parser/testdata/parse/postgres_regress/copy.metadata.json b/parser/testdata/parse/postgres_regress/copy.metadata.json index 8eaa05a..4d956b5 100644 --- a/parser/testdata/parse/postgres_regress/copy.metadata.json +++ b/parser/testdata/parse/postgres_regress/copy.metadata.json @@ -1,7 +1,5 @@ { "todo": [ - "023", - "024", "037", "038", "043", @@ -11,9 +9,6 @@ "054", "055", "056", - "058", - "059", - "070", "076", "081", "087" diff --git a/parser/testdata/parse/postgres_regress/create_am.metadata.json b/parser/testdata/parse/postgres_regress/create_am.metadata.json index 8bac815..47a1121 100644 --- a/parser/testdata/parse/postgres_regress/create_am.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_am.metadata.json @@ -14,26 +14,9 @@ "028", "029", "043", - "056", - "058", - "060", - "065", - "068", - "073", - "076", - "077", - "078", "079", "080", "083", - "089", - "093", - "097", - "099", - "107", - "109", - "112", - "115", "119", "132", "133", diff --git a/parser/testdata/parse/postgres_regress/create_index.metadata.json b/parser/testdata/parse/postgres_regress/create_index.metadata.json index 88e28a7..714f0a7 100644 --- a/parser/testdata/parse/postgres_regress/create_index.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_index.metadata.json @@ -38,7 +38,6 @@ "190", "198", "206", - "222", "223", "239", "241", @@ -61,15 +60,9 @@ "275", "276", "277", - "281", - "283", "284", - "286", - "288", "289", - "292", "293", - "296", "297", "302", "315", @@ -106,8 +99,6 @@ "400", "402", "403", - "404", - "409", "415", "416", "420", @@ -117,18 +108,12 @@ "428", "430", "432", - "435", "436", "438", - "441", "443", "445", "449", "450", - "458", - "460", - "462", - "464", "468", "469", "471", @@ -173,7 +158,6 @@ "530", "531", "532", - "538", "539", "544", "548", diff --git a/parser/testdata/parse/postgres_regress/create_misc.metadata.json b/parser/testdata/parse/postgres_regress/create_misc.metadata.json index f26b67d..d23604e 100644 --- a/parser/testdata/parse/postgres_regress/create_misc.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_misc.metadata.json @@ -13,9 +13,6 @@ "075", "076", "078", - "080", - "082", - "084", - "086" + "080" ] } diff --git a/parser/testdata/parse/postgres_regress/create_role.metadata.json b/parser/testdata/parse/postgres_regress/create_role.metadata.json index 7ab11ba..4c9193c 100644 --- a/parser/testdata/parse/postgres_regress/create_role.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_role.metadata.json @@ -9,22 +9,15 @@ "054", "060", "062", - "063", "064", - "065", "066", "068", "071", "074", "077", - "078", - "079", "080", "081", - "082", "083", - "084", - "085", "086", "108", "126", diff --git a/parser/testdata/parse/postgres_regress/create_table.metadata.json b/parser/testdata/parse/postgres_regress/create_table.metadata.json index 9c61d92..fc84bf9 100644 --- a/parser/testdata/parse/postgres_regress/create_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_table.metadata.json @@ -31,11 +31,9 @@ "106", "107", "108", - "110", "111", "112", "114", - "116", "117", "118", "141", @@ -43,10 +41,6 @@ "150", "180", "183", - "232", - "234", - "235", - "236", "244", "248", "252", @@ -71,13 +65,7 @@ "300", "301", "307", - "310", - "311", - "312", "316", - "318", - "319", - "320", "326" ] } diff --git a/parser/testdata/parse/postgres_regress/create_table_like.metadata.json b/parser/testdata/parse/postgres_regress/create_table_like.metadata.json index 19c62e0..79d66de 100644 --- a/parser/testdata/parse/postgres_regress/create_table_like.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_table_like.metadata.json @@ -1,13 +1,10 @@ { "todo": [ - "015", - "016", "019", "025", "035", "045", "063", - "064", "066", "067", "068", @@ -24,15 +21,10 @@ "093", "094", "095", - "096", - "098", "099", - "101", - "102", "104", "105", "106", - "108", "122", "128", "132", diff --git a/parser/testdata/parse/postgres_regress/create_view.metadata.json b/parser/testdata/parse/postgres_regress/create_view.metadata.json index 3ff780c..7eb2567 100644 --- a/parser/testdata/parse/postgres_regress/create_view.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_view.metadata.json @@ -5,7 +5,6 @@ "009", "010", "011", - "014", "029", "030", "031", @@ -21,33 +20,13 @@ "124", "126", "127", - "151", - "152", "158", - "164", - "165", - "171", - "181", - "183", - "185", "188", - "192", - "200", - "201", - "202", - "203", - "208", - "216", - "223", - "227", "228", - "232", - "235", "237", "241", "244", "249", - "253", "255", "257", "271", diff --git a/parser/testdata/parse/postgres_regress/dependency.metadata.json b/parser/testdata/parse/postgres_regress/dependency.metadata.json index ed7ee3a..9decfc4 100644 --- a/parser/testdata/parse/postgres_regress/dependency.metadata.json +++ b/parser/testdata/parse/postgres_regress/dependency.metadata.json @@ -6,7 +6,6 @@ "012", "014", "016", - "018", "020", "026", "027", @@ -22,7 +21,6 @@ "044", "045", "046", - "049", "051", "054", "057", diff --git a/parser/testdata/parse/postgres_regress/domain.metadata.json b/parser/testdata/parse/postgres_regress/domain.metadata.json index fa81ee8..4fa0313 100644 --- a/parser/testdata/parse/postgres_regress/domain.metadata.json +++ b/parser/testdata/parse/postgres_regress/domain.metadata.json @@ -30,9 +30,6 @@ "069", "071", "072", - "075", - "077", - "079", "084", "085", "088", @@ -82,9 +79,7 @@ "188", "189", "190", - "194", "195", - "196", "197", "202", "204", diff --git a/parser/testdata/parse/postgres_regress/equivclass.metadata.json b/parser/testdata/parse/postgres_regress/equivclass.metadata.json index fd5d95c..50c8160 100644 --- a/parser/testdata/parse/postgres_regress/equivclass.metadata.json +++ b/parser/testdata/parse/postgres_regress/equivclass.metadata.json @@ -45,7 +45,6 @@ "056", "057", "060", - "063", "064", "066", "067", diff --git a/parser/testdata/parse/postgres_regress/errors.metadata.json b/parser/testdata/parse/postgres_regress/errors.metadata.json index 95ed748..e3a13d4 100644 --- a/parser/testdata/parse/postgres_regress/errors.metadata.json +++ b/parser/testdata/parse/postgres_regress/errors.metadata.json @@ -2,7 +2,6 @@ "todo": [ "013", "014", - "015", "016", "017", "018", diff --git a/parser/testdata/parse/postgres_regress/event_trigger.metadata.json b/parser/testdata/parse/postgres_regress/event_trigger.metadata.json index fa872c8..753fb08 100644 --- a/parser/testdata/parse/postgres_regress/event_trigger.metadata.json +++ b/parser/testdata/parse/postgres_regress/event_trigger.metadata.json @@ -51,7 +51,6 @@ "080", "081", "082", - "083", "084", "086", "088", @@ -63,10 +62,6 @@ "097", "098", "099", - "105", - "106", - "107", - "108", "109", "110", "111", @@ -87,10 +82,8 @@ "129", "130", "133", - "134", "135", "136", - "138", "139", "140", "143", diff --git a/parser/testdata/parse/postgres_regress/fast_default.metadata.json b/parser/testdata/parse/postgres_regress/fast_default.metadata.json index 1ad6e8f..cd0f34d 100644 --- a/parser/testdata/parse/postgres_regress/fast_default.metadata.json +++ b/parser/testdata/parse/postgres_regress/fast_default.metadata.json @@ -4,112 +4,51 @@ "006", "007", "009", - "010", - "011", - "012", - "013", - "017", - "019", - "021", - "023", - "025", - "027", - "029", - "031", - "033", - "035", - "037", - "039", - "041", "045", "046", - "050", - "052", - "054", - "056", - "058", - "060", - "062", "066", "067", "068", "069", "070", - "073", - "075", - "076", - "078", "081", "082", "083", "084", "085", "086", - "090", - "092", "094", - "095", "097", "098", - "102", - "104", "107", "109", "113", "115", "117", "121", - "125", - "127", - "129", - "136", "138", "139", - "142", - "143", "144", "148", - "151", - "152", "153", "157", - "160", - "161", "162", "166", - "169", - "170", "171", "175", - "178", - "179", "180", "184", - "187", - "188", "189", "193", - "196", - "197", "198", "202", - "205", - "206", "207", "211", - "215", - "216", - "220", - "221", "223", - "227", - "228", "230", - "235", "243", "244", "245", - "246", "247", "249", "250", @@ -126,7 +65,6 @@ "261", "262", "263", - "264", - "268" + "264" ] } diff --git a/parser/testdata/parse/postgres_regress/foreign_data.metadata.json b/parser/testdata/parse/postgres_regress/foreign_data.metadata.json index 2555abb..e769c4f 100644 --- a/parser/testdata/parse/postgres_regress/foreign_data.metadata.json +++ b/parser/testdata/parse/postgres_regress/foreign_data.metadata.json @@ -152,91 +152,36 @@ "209", "212", "214", - "217", "218", "221", "222", - "223", "224", - "226", "227", "228", - "229", "230", "231", "235", "236", - "237", - "239", "240", - "242", "243", "244", - "245", "246", "247", "248", "249", "250", "251", - "252", - "253", - "254", - "255", - "256", - "257", - "258", - "259", - "260", - "261", - "262", "263", "264", "265", - "266", - "267", - "268", - "269", - "270", - "271", - "272", "274", "275", - "276", - "277", - "278", - "279", - "280", - "281", - "282", - "283", - "284", - "285", - "286", - "287", "288", - "289", "290", "291", "292", - "293", - "294", - "295", - "296", - "297", - "298", - "299", - "300", "301", "302", - "303", - "304", - "305", - "306", - "307", - "308", - "309", - "310", "311", "312", "313", @@ -303,8 +248,6 @@ "416", "417", "418", - "419", - "420", "421", "422", "423", @@ -313,41 +256,13 @@ "427", "428", "429", - "430", "432", - "433", - "434", - "435", - "436", - "437", - "438", - "439", - "440", - "441", "442", "443", "444", - "445", - "446", - "447", - "448", - "449", - "450", - "451", - "452", - "453", - "454", - "455", "457", "458", "459", - "460", - "461", - "462", - "463", - "464", - "466", - "467", "468", "469", "470", @@ -366,29 +281,12 @@ "484", "485", "486", - "487", "488", "489", - "490", - "491", - "492", - "493", - "494", - "495", - "496", - "497", - "498", - "499", - "500", - "501", - "502", - "503", - "504", "505", "506", "508", "509", - "510", "511", "512", "513", diff --git a/parser/testdata/parse/postgres_regress/foreign_key.metadata.json b/parser/testdata/parse/postgres_regress/foreign_key.metadata.json index 4be9c08..ef8660d 100644 --- a/parser/testdata/parse/postgres_regress/foreign_key.metadata.json +++ b/parser/testdata/parse/postgres_regress/foreign_key.metadata.json @@ -13,14 +13,10 @@ "081", "082", "1005", - "1012", "1018", "1019", - "1020", - "1021", "1023", "1024", - "1028", "103", "1030", "1031", @@ -29,15 +25,7 @@ "104", "1075", "1076", - "1078", - "1080", - "1081", - "109", - "1090", - "1092", - "1099", "110", - "1100", "1103", "1104", "1105", @@ -49,20 +37,7 @@ "1110", "1113", "1114", - "1116", - "1117", - "1118", - "1120", - "1121", - "1124", - "1125", - "1128", - "1129", - "1131", - "1132", - "1133", "1135", - "1143", "1153", "131", "132", @@ -102,140 +77,36 @@ "361", "370", "376", - "379", - "380", - "381", - "382", - "383", - "384", - "385", - "386", - "387", - "388", - "389", - "390", "391", - "417", - "424", - "425", "426", "427", - "463", "476", "485", "488", "489", "497", "502", - "520", - "524", "526", "536", - "538", - "540", - "542", - "543", - "544", - "546", - "547", - "549", - "552", - "553", - "554", - "574", "575", "581", "583", - "587", - "590", - "601", - "603", "605", - "613", - "614", - "621", - "622", - "627", - "628", - "637", - "638", "644", - "646", "648", - "650", "651", - "653", - "654", "655", - "659", - "660", - "661", - "662", - "665", - "666", - "667", - "668", - "669", - "670", - "675", - "677", - "680", "681", - "685", "686", "688", - "693", - "697", "698", "700", - "704", - "708", - "710", - "716", - "719", - "722", - "723", - "724", - "725", - "726", - "727", "729", - "730", - "731", - "732", - "733", - "735", - "738", - "739", "740", - "741", - "746", "750", - "751", - "752", - "753", - "754", - "755", - "756", "757", "768", - "774", - "775", - "776", - "779", - "781", - "782", - "785", - "787", - "790", - "827", - "828", "829", - "841", - "842", - "843", - "844", - "845", "846", "847", "848", @@ -244,34 +115,13 @@ "852", "853", "854", - "855", "856", - "865", - "870", - "871", - "872", - "875", - "876", - "880", - "907", - "908", "915", - "922", - "925", - "926", "931", - "936", - "937", "944", - "950", - "951", - "952", "959", "960", - "971", "979", - "986", - "992", - "999" + "992" ] } diff --git a/parser/testdata/parse/postgres_regress/functional_deps.metadata.json b/parser/testdata/parse/postgres_regress/functional_deps.metadata.json index 60a073a..94506f6 100644 --- a/parser/testdata/parse/postgres_regress/functional_deps.metadata.json +++ b/parser/testdata/parse/postgres_regress/functional_deps.metadata.json @@ -1,15 +1,8 @@ { "todo": [ - "017", - "025", "026", - "028", - "029", "030", - "032", "033", - "035", - "036", - "039" + "036" ] } diff --git a/parser/testdata/parse/postgres_regress/generated.metadata.json b/parser/testdata/parse/postgres_regress/generated.metadata.json index d94bac8..a3d4062 100644 --- a/parser/testdata/parse/postgres_regress/generated.metadata.json +++ b/parser/testdata/parse/postgres_regress/generated.metadata.json @@ -3,13 +3,8 @@ "013", "042", "052", - "061", "066", - "076", "077", - "082", - "084", - "086", "089", "092", "102" diff --git a/parser/testdata/parse/postgres_regress/gin.metadata.json b/parser/testdata/parse/postgres_regress/gin.metadata.json index 0a15311..8a35f5e 100644 --- a/parser/testdata/parse/postgres_regress/gin.metadata.json +++ b/parser/testdata/parse/postgres_regress/gin.metadata.json @@ -2,7 +2,6 @@ "todo": [ "007", "010", - "011", "015", "016", "019", diff --git a/parser/testdata/parse/postgres_regress/gist.metadata.json b/parser/testdata/parse/postgres_regress/gist.metadata.json index 05dd33c..8904440 100644 --- a/parser/testdata/parse/postgres_regress/gist.metadata.json +++ b/parser/testdata/parse/postgres_regress/gist.metadata.json @@ -2,7 +2,6 @@ "todo": [ "006", "014", - "015", "016", "019", "024", diff --git a/parser/testdata/parse/postgres_regress/groupingsets.metadata.json b/parser/testdata/parse/postgres_regress/groupingsets.metadata.json index 9a7e90e..6d29d5d 100644 --- a/parser/testdata/parse/postgres_regress/groupingsets.metadata.json +++ b/parser/testdata/parse/postgres_regress/groupingsets.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "006", "010", "037", "043", @@ -30,9 +29,7 @@ "132", "134", "138", - "139", "146", - "147", "153", "157", "163", diff --git a/parser/testdata/parse/postgres_regress/hash_index.metadata.json b/parser/testdata/parse/postgres_regress/hash_index.metadata.json index e6c643c..17805cc 100644 --- a/parser/testdata/parse/postgres_regress/hash_index.metadata.json +++ b/parser/testdata/parse/postgres_regress/hash_index.metadata.json @@ -5,7 +5,6 @@ "011", "012", "059", - "060", "061", "062", "070", diff --git a/parser/testdata/parse/postgres_regress/identity.metadata.json b/parser/testdata/parse/postgres_regress/identity.metadata.json index 8964c78..bf0e9d2 100644 --- a/parser/testdata/parse/postgres_regress/identity.metadata.json +++ b/parser/testdata/parse/postgres_regress/identity.metadata.json @@ -1,85 +1,23 @@ { "todo": [ - "005", - "010", - "011", - "012", - "013", - "014", - "015", - "016", "051", - "073", - "074", - "075", - "077", "097", - "099", - "101", - "103", - "105", "106", "108", - "110", - "111", - "113", - "114", - "115", - "116", - "119", - "124", - "136", - "137", - "139", - "140", - "141", "144", "149", - "152", - "153", - "154", "155", - "156", "157", - "159", "161", "162", "164", - "171", - "172", - "173", "180", - "188", - "194", - "195", - "196", - "197", - "203", "209", - "214", - "216", - "217", - "219", - "223", - "224", - "225", - "231", - "232", - "233", - "234", - "235", - "236", - "240", - "241", "242", "243", - "245", - "246", "251", "253", "264", - "265", - "267", - "269" + "265" ] } diff --git a/parser/testdata/parse/postgres_regress/index_including.metadata.json b/parser/testdata/parse/postgres_regress/index_including.metadata.json index 621e7bb..8ed0541 100644 --- a/parser/testdata/parse/postgres_regress/index_including.metadata.json +++ b/parser/testdata/parse/postgres_regress/index_including.metadata.json @@ -1,11 +1,5 @@ { "todo": [ - "009", - "010", - "015", - "018", - "023", - "027", "032", "039", "042", @@ -13,22 +7,12 @@ "050", "057", "063", - "067", "069", - "073", "075", - "078", - "080", "082", - "085", - "086", - "087", - "088", "089", "094", - "097", "099", - "101", "103", "112", "121", diff --git a/parser/testdata/parse/postgres_regress/index_including_gist.metadata.json b/parser/testdata/parse/postgres_regress/index_including_gist.metadata.json index bcfad8b..55ce952 100644 --- a/parser/testdata/parse/postgres_regress/index_including_gist.metadata.json +++ b/parser/testdata/parse/postgres_regress/index_including_gist.metadata.json @@ -6,7 +6,6 @@ "018", "023", "028", - "030", "032", "039", "043", diff --git a/parser/testdata/parse/postgres_regress/indexing.metadata.json b/parser/testdata/parse/postgres_regress/indexing.metadata.json index ae5e3ab..13f8404 100644 --- a/parser/testdata/parse/postgres_regress/indexing.metadata.json +++ b/parser/testdata/parse/postgres_regress/indexing.metadata.json @@ -7,10 +7,6 @@ "023", "028", "029", - "034", - "037", - "038", - "040", "041", "047", "051", @@ -21,91 +17,27 @@ "062", "063", "065", - "073", - "074", - "075", - "076", - "077", - "078", - "079", - "080", - "081", - "083", "084", - "093", "094", - "104", - "106", - "108", "109", - "115", "121", - "128", - "131", "133", - "139", - "140", - "143", - "144", - "145", "146", "147", "148", "150", - "157", - "158", - "161", - "162", - "163", "164", "166", - "172", - "173", "174", - "180", - "181", "184", - "191", - "192", "197", - "202", - "203", "208", - "210", "211", - "214", - "215", - "216", - "224", - "225", - "226", - "227", - "228", "230", - "235", - "239", "241", - "245", - "246", - "247", - "249", - "252", "254", - "256", - "258", - "259", - "262", - "263", "266", - "268", - "269", - "270", - "274", "276", - "278", - "279", - "280", - "284", "286", "289", "292", @@ -115,70 +47,29 @@ "304", "308", "311", - "315", - "316", "318", - "320", - "321", "322", - "324", "325", - "327", "328", - "330", "331", - "333", "334", - "336", "337", - "339", "340", - "342", "343", - "345", "346", - "353", "355", "358", - "361", "362", "367", - "371", - "372", "374", "375", - "376", - "377", - "378", "380", - "383", - "384", "385", - "389", - "390", "391", - "394", - "395", - "396", - "398", "400", - "403", - "404", - "405", - "406", - "407", - "408", - "409", "410", - "414", - "415", "417", - "421", - "422", - "423", "424", - "429", - "431", "440", "445", "446", @@ -187,34 +78,11 @@ "451", "452", "454", - "462", - "467", - "470", - "476", - "477", - "478", - "481", - "485", - "494", - "495", - "501", - "507", - "508", - "509", "510", - "513", - "514", - "515", "516", - "524", "525", - "532", "534", "544", - "551", - "554", - "556", - "557", "560" ] } diff --git a/parser/testdata/parse/postgres_regress/inherit.metadata.json b/parser/testdata/parse/postgres_regress/inherit.metadata.json index 90447bf..ccf2607 100644 --- a/parser/testdata/parse/postgres_regress/inherit.metadata.json +++ b/parser/testdata/parse/postgres_regress/inherit.metadata.json @@ -16,8 +16,6 @@ "155", "160", "161", - "163", - "164", "168", "175", "176", @@ -29,77 +27,39 @@ "187", "188", "189", - "191", - "196", - "197", - "199", - "203", - "204", - "206", - "207", - "209", - "211", "213", "214", "218", "219", - "224", "226", "227", "228", - "233", - "234", - "237", "241", "242", - "245", - "247", "248", "252", "253", "254", "255", "256", - "261", "262", "266", "268", "269", "271", - "274", "275", "276", - "279", "280", "281", - "285", "286", "287", "288", "298", - "301", - "302", - "303", - "304", "306", - "309", - "310", "311", - "316", - "317", "318", - "323", "324", - "329", - "330", - "331", - "332", "333", - "336", - "337", - "338", - "340", - "341", "353", "354", "355", @@ -126,18 +86,13 @@ "415", "416", "417", - "424", "427", "430", - "434", - "435", "437", "442", "450", "453", "454", - "460", - "462", "464", "465", "478", @@ -201,8 +156,6 @@ "604", "605", "606", - "610", - "611", "614", "616", "617", @@ -214,11 +167,6 @@ "626", "628", "630", - "635", - "636", - "637", - "638", - "639", "677" ] } diff --git a/parser/testdata/parse/postgres_regress/insert.metadata.json b/parser/testdata/parse/postgres_regress/insert.metadata.json index b856fe8..35173f4 100644 --- a/parser/testdata/parse/postgres_regress/insert.metadata.json +++ b/parser/testdata/parse/postgres_regress/insert.metadata.json @@ -1,7 +1,6 @@ { "todo": [ "017", - "019", "025", "026", "044", @@ -29,38 +28,14 @@ "191", "192", "199", - "203", - "204", - "205", - "206", - "208", - "209", - "214", "215", "216", "218", "219", "224", - "225", - "228", - "231", - "232", - "233", - "235", - "238", - "239", - "240", "242", "243", "245", - "246", - "259", - "260", - "266", - "274", - "276", - "277", - "284", "285", "289", "290", @@ -79,18 +54,12 @@ "350", "351", "352", - "356", "357", "358", "359", - "360", - "361", "365", "366", "378", - "382", - "384", - "385", "387" ] } diff --git a/parser/testdata/parse/postgres_regress/insert_conflict.metadata.json b/parser/testdata/parse/postgres_regress/insert_conflict.metadata.json index 616248b..bb39d25 100644 --- a/parser/testdata/parse/postgres_regress/insert_conflict.metadata.json +++ b/parser/testdata/parse/postgres_regress/insert_conflict.metadata.json @@ -47,18 +47,12 @@ "148", "149", "156", - "161", "164", "172", "193", - "205", - "210", "226", "232", - "238", "241", - "244", - "246", "251", "252", "256", diff --git a/parser/testdata/parse/postgres_regress/join.metadata.json b/parser/testdata/parse/postgres_regress/join.metadata.json index da5e62a..596eade 100644 --- a/parser/testdata/parse/postgres_regress/join.metadata.json +++ b/parser/testdata/parse/postgres_regress/join.metadata.json @@ -187,9 +187,7 @@ "617", "622", "623", - "624", "625", - "632", "633", "634", "635", diff --git a/parser/testdata/parse/postgres_regress/join_hash.metadata.json b/parser/testdata/parse/postgres_regress/join_hash.metadata.json index 2de7a9b..9e9480a 100644 --- a/parser/testdata/parse/postgres_regress/join_hash.metadata.json +++ b/parser/testdata/parse/postgres_regress/join_hash.metadata.json @@ -2,15 +2,9 @@ "todo": [ "005", "006", - "008", "009", - "011", - "012", "013", - "016", - "017", "018", - "022", "027", "036", "045", @@ -23,8 +17,6 @@ "106", "115", "124", - "136", - "138", "150", "165", "180", diff --git a/parser/testdata/parse/postgres_regress/merge.metadata.json b/parser/testdata/parse/postgres_regress/merge.metadata.json index ff66ff2..904f22e 100644 --- a/parser/testdata/parse/postgres_regress/merge.metadata.json +++ b/parser/testdata/parse/postgres_regress/merge.metadata.json @@ -2,23 +2,16 @@ "todo": [ "004", "005", - "012", - "013", - "016", - "017", "018", "020", "035", "040", "043", - "069", "070", "071", "072", "073", "075", - "118", - "119", "203", "204", "205", @@ -51,11 +44,6 @@ "363", "381", "394", - "400", - "401", - "402", - "403", - "404", "407", "415", "419", @@ -64,8 +52,6 @@ "425", "426", "427", - "431", - "432", "433", "436", "437", @@ -80,15 +66,10 @@ "485", "488", "493", - "498", - "499", "501", "502", "531", - "532", "533", - "538", - "539", "540", "545", "546", diff --git a/parser/testdata/parse/postgres_regress/numeric.metadata.json b/parser/testdata/parse/postgres_regress/numeric.metadata.json index e95aa5e..946106b 100644 --- a/parser/testdata/parse/postgres_regress/numeric.metadata.json +++ b/parser/testdata/parse/postgres_regress/numeric.metadata.json @@ -11,8 +11,6 @@ "488", "595", "639", - "678", - "990", - "999" + "678" ] } diff --git a/parser/testdata/parse/postgres_regress/partition_aggregate.metadata.json b/parser/testdata/parse/postgres_regress/partition_aggregate.metadata.json index c2c4e11..159c333 100644 --- a/parser/testdata/parse/postgres_regress/partition_aggregate.metadata.json +++ b/parser/testdata/parse/postgres_regress/partition_aggregate.metadata.json @@ -31,8 +31,6 @@ "074", "076", "078", - "088", - "089", "091", "094", "096", @@ -45,11 +43,8 @@ "118", "119", "121", - "123", - "124", "125", "126", - "128", "129", "130", "134" diff --git a/parser/testdata/parse/postgres_regress/partition_info.metadata.json b/parser/testdata/parse/postgres_regress/partition_info.metadata.json index 771e9a3..415497b 100644 --- a/parser/testdata/parse/postgres_regress/partition_info.metadata.json +++ b/parser/testdata/parse/postgres_regress/partition_info.metadata.json @@ -1,11 +1,5 @@ { "todo": [ - "020", - "022", - "024", - "026", - "028", - "030", "049", "054", "071", diff --git a/parser/testdata/parse/postgres_regress/partition_join.metadata.json b/parser/testdata/parse/postgres_regress/partition_join.metadata.json index d350381..ff3b45f 100644 --- a/parser/testdata/parse/postgres_regress/partition_join.metadata.json +++ b/parser/testdata/parse/postgres_regress/partition_join.metadata.json @@ -49,18 +49,10 @@ "150", "156", "157", - "159", - "160", "161", - "162", - "163", "164", "165", - "166", - "167", "168", - "169", - "170", "171", "172", "182", @@ -108,7 +100,6 @@ "296", "297", "299", - "300", "304", "305", "306", @@ -118,18 +109,11 @@ "310", "311", "312", - "313", - "314", - "315", "316", "317", - "319", "320", - "321", "322", "323", - "324", - "325", "326", "327", "328", @@ -166,7 +150,6 @@ "401", "402", "403", - "404", "408", "409", "410", @@ -175,10 +158,7 @@ "413", "414", "415", - "416", - "417", "421", - "422", "426", "427", "429", @@ -186,10 +166,8 @@ "433", "435", "437", - "438", "441", "442", - "443", "444", "445", "447", @@ -201,22 +179,16 @@ "458", "460", "461", - "462", - "463", "464", "465", "466", "467", "468", - "470", "473", "474", - "475", - "476", "477", "478", "479", - "480", "481", "486", "487", diff --git a/parser/testdata/parse/postgres_regress/partition_prune.metadata.json b/parser/testdata/parse/postgres_regress/partition_prune.metadata.json index 82f3825..ad8a72d 100644 --- a/parser/testdata/parse/postgres_regress/partition_prune.metadata.json +++ b/parser/testdata/parse/postgres_regress/partition_prune.metadata.json @@ -14,7 +14,6 @@ "020", "025", "026", - "040", "048", "049", "050", @@ -116,9 +115,6 @@ "213", "214", "215", - "221", - "222", - "223", "225", "226", "227", @@ -189,9 +185,6 @@ "446", "450", "452", - "457", - "458", - "459", "461", "463", "471", @@ -274,7 +267,6 @@ "639", "640", "643", - "650", "653", "664", "666", diff --git a/parser/testdata/parse/postgres_regress/plancache.metadata.json b/parser/testdata/parse/postgres_regress/plancache.metadata.json index 1464d56..6903c5e 100644 --- a/parser/testdata/parse/postgres_regress/plancache.metadata.json +++ b/parser/testdata/parse/postgres_regress/plancache.metadata.json @@ -1,18 +1,14 @@ { "todo": [ "006", - "012", - "015", "023", "028", "034", "035", - "044", "046", "047", "052", "055", - "067", "069", "071", "076", diff --git a/parser/testdata/parse/postgres_regress/plpgsql.metadata.json b/parser/testdata/parse/postgres_regress/plpgsql.metadata.json index 31c99af..5e6ff35 100644 --- a/parser/testdata/parse/postgres_regress/plpgsql.metadata.json +++ b/parser/testdata/parse/postgres_regress/plpgsql.metadata.json @@ -197,7 +197,6 @@ "527", "531", "533", - "535", "537", "538", "539", @@ -228,9 +227,6 @@ "584", "586", "589", - "591", - "593", - "595", "597", "598", "599", @@ -408,7 +404,6 @@ "917", "918", "921", - "923", "927", "928", "930", diff --git a/parser/testdata/parse/postgres_regress/predicate.metadata.json b/parser/testdata/parse/postgres_regress/predicate.metadata.json index a864545..f2d5a84 100644 --- a/parser/testdata/parse/postgres_regress/predicate.metadata.json +++ b/parser/testdata/parse/postgres_regress/predicate.metadata.json @@ -17,11 +17,8 @@ "016", "017", "018", - "021", "022", "023", - "024", - "025", "026", "027", "028", diff --git a/parser/testdata/parse/postgres_regress/privileges.metadata.json b/parser/testdata/parse/postgres_regress/privileges.metadata.json index d56ffc7..bd9a8ca 100644 --- a/parser/testdata/parse/postgres_regress/privileges.metadata.json +++ b/parser/testdata/parse/postgres_regress/privileges.metadata.json @@ -62,7 +62,6 @@ "165", "166", "184", - "191", "193", "195", "198", diff --git a/parser/testdata/parse/postgres_regress/publication.metadata.json b/parser/testdata/parse/postgres_regress/publication.metadata.json index 840094f..defd474 100644 --- a/parser/testdata/parse/postgres_regress/publication.metadata.json +++ b/parser/testdata/parse/postgres_regress/publication.metadata.json @@ -37,10 +37,7 @@ "062", "063", "067", - "068", - "069", "071", - "074", "076", "078", "080", @@ -110,25 +107,16 @@ "168", "169", "170", - "175", "177", "180", "182", "184", "186", - "188", - "189", "190", "192", - "194", - "195", "196", "198", "200", - "202", - "204", - "205", - "207", "208", "210", "212", @@ -159,53 +147,30 @@ "249", "250", "251", - "252", "253", - "255", - "256", "258", - "259", "260", "263", "265", "267", - "269", "271", - "273", "274", "276", "277", "280", "281", "282", - "285", - "286", - "288", - "289", "291", "293", "294", "296", "297", "299", - "300", "301", "303", - "304", "305", - "306", - "308", - "309", - "310", "312", "314", - "316", - "317", - "319", - "320", - "321", - "322", - "324", "327", "328", "329", @@ -217,29 +182,19 @@ "336", "337", "339", - "342", "343", "344", "345", - "350", "352", "355", "357", "359", "361", - "363", - "364", "365", "367", - "369", - "370", "371", "373", "375", - "377", - "379", - "380", - "382", "383", "385", "387", @@ -280,7 +235,6 @@ "439", "440", "442", - "446", "448", "450", "452", @@ -374,7 +328,6 @@ "604", "605", "606", - "611", "612", "615", "616", diff --git a/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json b/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json index b1fd41e..51e3427 100644 --- a/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json +++ b/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json @@ -114,12 +114,8 @@ "355", "357", "362", - "366", "367", "370", - "378", - "380", - "383", "386", "389", "392", diff --git a/parser/testdata/parse/postgres_regress/reloptions.metadata.json b/parser/testdata/parse/postgres_regress/reloptions.metadata.json index c8f2440..df0a9c2 100644 --- a/parser/testdata/parse/postgres_regress/reloptions.metadata.json +++ b/parser/testdata/parse/postgres_regress/reloptions.metadata.json @@ -1,20 +1,9 @@ { "todo": [ - "019", - "021", - "023", - "025", - "027", - "029", "031", "035", - "038", "041", "043", - "047", - "049", - "052", - "062", - "065" + "052" ] } diff --git a/parser/testdata/parse/postgres_regress/replica_identity.metadata.json b/parser/testdata/parse/postgres_regress/replica_identity.metadata.json index c6769e7..f2e07a4 100644 --- a/parser/testdata/parse/postgres_regress/replica_identity.metadata.json +++ b/parser/testdata/parse/postgres_regress/replica_identity.metadata.json @@ -1,30 +1,7 @@ { "todo": [ - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "022", - "024", - "025", - "026", - "029", - "032", - "034", - "037", "038", - "041", "042", - "043", - "046", - "047", - "048", - "049", - "050", "051", "052", "053", diff --git a/parser/testdata/parse/postgres_regress/returning.metadata.json b/parser/testdata/parse/postgres_regress/returning.metadata.json index 618a4a5..64589b8 100644 --- a/parser/testdata/parse/postgres_regress/returning.metadata.json +++ b/parser/testdata/parse/postgres_regress/returning.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "017", "029", "031", "034", diff --git a/parser/testdata/parse/postgres_regress/rowsecurity.metadata.json b/parser/testdata/parse/postgres_regress/rowsecurity.metadata.json index e5b02a8..786785d 100644 --- a/parser/testdata/parse/postgres_regress/rowsecurity.metadata.json +++ b/parser/testdata/parse/postgres_regress/rowsecurity.metadata.json @@ -9,7 +9,6 @@ "027", "030", "033", - "035", "036", "037", "038", @@ -24,16 +23,11 @@ "069", "070", "072", - "073", - "108", "109", "112", - "115", "116", "118", "119", - "120", - "121", "124", "126", "128", @@ -47,13 +41,11 @@ "151", "152", "153", - "155", "156", "157", "162", "165", "168", - "176", "177", "182", "185", @@ -67,10 +59,8 @@ "222", "223", "226", - "227", "232", "233", - "234", "241", "242", "246", @@ -80,8 +70,6 @@ "260", "261", "262", - "263", - "264", "270", "271", "274", @@ -104,7 +92,6 @@ "325", "326", "332", - "333", "334", "337", "339", @@ -122,7 +109,6 @@ "376", "377", "383", - "384", "385", "386", "387", @@ -133,7 +119,6 @@ "425", "427", "428", - "429", "432", "434", "436", @@ -195,14 +180,11 @@ "563", "564", "565", - "566", "577", "578", "579", "580", "581", - "582", - "583", "586", "587", "590", @@ -218,13 +200,11 @@ "611", "612", "613", - "614", "617", "619", "621", "623", "625", - "626", "627", "631", "637", @@ -233,22 +213,17 @@ "646", "654", "655", - "656", "663", - "664", "669", "671", - "672", "675", "678", "682", "685", "687", "689", - "690", "691", "716", - "717", "718" ] } diff --git a/parser/testdata/parse/postgres_regress/rowtypes.metadata.json b/parser/testdata/parse/postgres_regress/rowtypes.metadata.json index 3624ce9..5de6298 100644 --- a/parser/testdata/parse/postgres_regress/rowtypes.metadata.json +++ b/parser/testdata/parse/postgres_regress/rowtypes.metadata.json @@ -2,8 +2,6 @@ "todo": [ "001", "003", - "029", - "030", "061", "063", "065", @@ -32,7 +30,6 @@ "174", "175", "191", - "194", "205", "216", "218", diff --git a/parser/testdata/parse/postgres_regress/rules.metadata.json b/parser/testdata/parse/postgres_regress/rules.metadata.json index 49dd0a7..a20b1fc 100644 --- a/parser/testdata/parse/postgres_regress/rules.metadata.json +++ b/parser/testdata/parse/postgres_regress/rules.metadata.json @@ -104,18 +104,12 @@ "562", "563", "564", - "567", - "568", - "569", "572", "574", "576", "577", "578", "581", - "583", - "585", - "588", "594", "595", "600", @@ -123,7 +117,6 @@ "606", "607", "608", - "609", "615", "616", "617", diff --git a/parser/testdata/parse/postgres_regress/security_label.metadata.json b/parser/testdata/parse/postgres_regress/security_label.metadata.json index 9973bb2..a20be60 100644 --- a/parser/testdata/parse/postgres_regress/security_label.metadata.json +++ b/parser/testdata/parse/postgres_regress/security_label.metadata.json @@ -2,8 +2,6 @@ "todo": [ "010", "011", - "012", - "013", "014", "015", "016", diff --git a/parser/testdata/parse/postgres_regress/select_parallel.metadata.json b/parser/testdata/parse/postgres_regress/select_parallel.metadata.json index 29a9ccc..9fa565d 100644 --- a/parser/testdata/parse/postgres_regress/select_parallel.metadata.json +++ b/parser/testdata/parse/postgres_regress/select_parallel.metadata.json @@ -2,54 +2,31 @@ "todo": [ "001", "007", - "009", - "010", "011", - "013", - "014", - "015", - "016", "017", - "019", - "020", - "021", - "022", - "023", - "024", "026", "029", "034", "035", "037", "040", - "044", "045", "046", "048", "049", "051", - "054", "055", "057", - "058", - "062", "063", - "068", "072", "074", "076", "079", "081", - "086", - "087", "088", - "090", - "091", "101", "103", - "110", "111", - "112", "114", "121", "122", diff --git a/parser/testdata/parse/postgres_regress/select_views.metadata.json b/parser/testdata/parse/postgres_regress/select_views.metadata.json index 9cb5225..cf39889 100644 --- a/parser/testdata/parse/postgres_regress/select_views.metadata.json +++ b/parser/testdata/parse/postgres_regress/select_views.metadata.json @@ -14,8 +14,6 @@ "034", "036", "038", - "040", - "046", - "047" + "040" ] } diff --git a/parser/testdata/parse/postgres_regress/sequence.metadata.json b/parser/testdata/parse/postgres_regress/sequence.metadata.json index ffb2fdf..0a7a883 100644 --- a/parser/testdata/parse/postgres_regress/sequence.metadata.json +++ b/parser/testdata/parse/postgres_regress/sequence.metadata.json @@ -15,8 +15,6 @@ "140", "141", "152", - "155", - "156", "157", "171", "172", diff --git a/parser/testdata/parse/postgres_regress/spgist.metadata.json b/parser/testdata/parse/postgres_regress/spgist.metadata.json index 67bd6c7..18b8b59 100644 --- a/parser/testdata/parse/postgres_regress/spgist.metadata.json +++ b/parser/testdata/parse/postgres_regress/spgist.metadata.json @@ -2,7 +2,6 @@ "todo": [ "005", "010", - "021", "022", "023", "027" diff --git a/parser/testdata/parse/postgres_regress/stats.metadata.json b/parser/testdata/parse/postgres_regress/stats.metadata.json index ee0ea59..4724244 100644 --- a/parser/testdata/parse/postgres_regress/stats.metadata.json +++ b/parser/testdata/parse/postgres_regress/stats.metadata.json @@ -25,10 +25,8 @@ "323", "336", "342", - "362", "374", "380", - "391", "400", "401", "420", diff --git a/parser/testdata/parse/postgres_regress/stats_ext.metadata.json b/parser/testdata/parse/postgres_regress/stats_ext.metadata.json index 3f98462..97e3bfb 100644 --- a/parser/testdata/parse/postgres_regress/stats_ext.metadata.json +++ b/parser/testdata/parse/postgres_regress/stats_ext.metadata.json @@ -40,12 +40,9 @@ "047", "048", "049", - "050", "052", - "055", "057", "058", - "059", "060", "061", "063", @@ -232,20 +229,15 @@ "730", "731", "737", - "743", "744", "745", - "752", - "758", "759", "760", "768", "769", "770", - "775", "780", "782", - "783", "785", "786", "788", @@ -260,7 +252,6 @@ "802", "804", "806", - "807", "808", "809", "810", diff --git a/parser/testdata/parse/postgres_regress/tablespace.metadata.json b/parser/testdata/parse/postgres_regress/tablespace.metadata.json index 55b89d4..f86412d 100644 --- a/parser/testdata/parse/postgres_regress/tablespace.metadata.json +++ b/parser/testdata/parse/postgres_regress/tablespace.metadata.json @@ -24,64 +24,35 @@ "029", "030", "035", - "037", - "038", - "040", "042", "046", - "054", - "056", - "058", - "060", "063", "065", - "087", - "091", "098", "112", - "117", - "118", "120", "122", "125", "126", "127", - "133", - "134", "136", "138", "141", "142", "143", - "147", - "149", "151", - "154", "158", "159", - "162", - "163", - "164", - "165", - "166", - "171", "174", "176", - "177", "178", "180", "184", "185", - "188", "191", "192", "193", "195", - "196", - "197", - "198", - "199", - "200", "201", "202" ] diff --git a/parser/testdata/parse/postgres_regress/triggers.metadata.json b/parser/testdata/parse/postgres_regress/triggers.metadata.json index 3410fbc..71d4696 100644 --- a/parser/testdata/parse/postgres_regress/triggers.metadata.json +++ b/parser/testdata/parse/postgres_regress/triggers.metadata.json @@ -23,12 +23,9 @@ "069", "076", "078", - "081", - "085", "089", "092", "093", - "1002", "1007", "1008", "1009", @@ -39,7 +36,6 @@ "1017", "1018", "1019", - "1022", "1023", "1024", "1031", @@ -67,7 +63,6 @@ "124", "125", "127", - "131", "134", "135", "136", @@ -101,21 +96,14 @@ "186", "187", "188", - "189", "191", "192", "193", - "194", "198", "199", "200", "201", "202", - "204", - "206", - "208", - "212", - "219", "224", "225", "227", @@ -232,25 +220,17 @@ "459", "460", "463", - "466", - "470", "472", "473", "474", "475", "477", "479", - "480", "481", - "482", "483", "484", - "485", - "486", - "487", "488", "491", - "492", "493", "494", "495", @@ -278,8 +258,6 @@ "523", "524", "525", - "531", - "533", "535", "540", "541", @@ -295,15 +273,9 @@ "558", "561", "562", - "565", "567", "568", "569", - "571", - "573", - "574", - "576", - "577", "578", "579", "583", @@ -318,60 +290,34 @@ "618", "623", "624", - "627", - "629", "630", "631", "642", "643", - "647", - "648", "649", - "653", "656", - "662", - "663", "664", "665", - "669", "671", - "675", - "676", "677", - "681", "685", "686", - "689", "694", "697", "698", "699", - "700", - "702", "704", "707", "708", - "710", - "711", - "713", - "715", "717", - "721", "723", "726", "727", - "729", - "734", - "741", - "744", "750", "751", "752", "753", "754", - "758", - "759", - "761", "762", "763", "764", @@ -384,8 +330,6 @@ "771", "772", "773", - "787", - "788", "789", "790", "791", @@ -400,11 +344,8 @@ "804", "805", "808", - "809", "810", - "811", "812", - "813", "814", "815", "816", @@ -415,7 +356,6 @@ "826", "829", "830", - "834", "836", "837", "838", @@ -428,8 +368,6 @@ "845", "846", "847", - "862", - "863", "864", "865", "866", @@ -441,11 +379,8 @@ "872", "874", "877", - "878", "879", - "880", "881", - "882", "883", "886", "887", @@ -496,8 +431,6 @@ "989", "990", "992", - "993", - "998", - "999" + "993" ] } diff --git a/parser/testdata/parse/postgres_regress/truncate.metadata.json b/parser/testdata/parse/postgres_regress/truncate.metadata.json index fdaeacc..3893522 100644 --- a/parser/testdata/parse/postgres_regress/truncate.metadata.json +++ b/parser/testdata/parse/postgres_regress/truncate.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "028", "049", "087", "090", diff --git a/parser/testdata/parse/postgres_regress/tsearch.metadata.json b/parser/testdata/parse/postgres_regress/tsearch.metadata.json index 70d93b9..c22dbe1 100644 --- a/parser/testdata/parse/postgres_regress/tsearch.metadata.json +++ b/parser/testdata/parse/postgres_regress/tsearch.metadata.json @@ -11,7 +11,6 @@ "155", "180", "182", - "285", "348", "356", "357" diff --git a/parser/testdata/parse/postgres_regress/typed_table.metadata.json b/parser/testdata/parse/postgres_regress/typed_table.metadata.json index 879373e..c5cd6a2 100644 --- a/parser/testdata/parse/postgres_regress/typed_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/typed_table.metadata.json @@ -2,11 +2,8 @@ "todo": [ "002", "006", - "008", - "009", "010", "011", - "013", "018", "019", "021", diff --git a/parser/testdata/parse/postgres_regress/union.metadata.json b/parser/testdata/parse/postgres_regress/union.metadata.json index 7d25577..04ab2e0 100644 --- a/parser/testdata/parse/postgres_regress/union.metadata.json +++ b/parser/testdata/parse/postgres_regress/union.metadata.json @@ -31,7 +31,6 @@ "125", "147", "148", - "150", "157", "166", "167", diff --git a/parser/testdata/parse/postgres_regress/updatable_views.metadata.json b/parser/testdata/parse/postgres_regress/updatable_views.metadata.json index 8eafd92..818e25b 100644 --- a/parser/testdata/parse/postgres_regress/updatable_views.metadata.json +++ b/parser/testdata/parse/postgres_regress/updatable_views.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "068", "086", "087", "088", @@ -16,8 +15,6 @@ "1027", "1028", "1029", - "1034", - "1035", "1046", "1047", "1059", @@ -29,7 +26,6 @@ "1087", "1092", "1093", - "1096", "1099", "1100", "111", @@ -79,7 +75,6 @@ "337", "344", "356", - "361", "363", "364", "377", @@ -89,7 +84,6 @@ "400", "406", "413", - "418", "424", "429", "430", @@ -102,7 +96,6 @@ "487", "509", "527", - "536", "541", "545", "546", @@ -119,9 +112,6 @@ "647", "648", "666", - "682", - "683", - "686", "690", "702", "713", @@ -134,7 +124,6 @@ "733", "736", "737", - "748", "752", "753", "754", @@ -144,7 +133,6 @@ "769", "773", "774", - "778", "786", "787", "788", @@ -176,9 +164,6 @@ "866", "867", "868", - "872", - "873", - "874", "880", "881", "882", @@ -194,25 +179,14 @@ "909", "915", "916", - "920", - "921", - "922", - "923", - "924", - "925", "940", "941", - "946", - "948", - "949", "954", "955", "965", "968", "969", "973", - "980", - "983", "987", "988", "995", diff --git a/parser/testdata/parse/postgres_regress/update.metadata.json b/parser/testdata/parse/postgres_regress/update.metadata.json index 80581a2..bf20048 100644 --- a/parser/testdata/parse/postgres_regress/update.metadata.json +++ b/parser/testdata/parse/postgres_regress/update.metadata.json @@ -3,16 +3,7 @@ "035", "044", "045", - "049", "053", - "056", - "059", - "064", - "065", - "066", - "067", - "070", - "072", "073", "089", "091", @@ -30,7 +21,6 @@ "108", "109", "110", - "111", "113", "114", "115", @@ -72,13 +62,7 @@ "173", "183", "191", - "195", - "196", - "197", "205", - "209", - "211", - "213", "222", "223", "227", diff --git a/parser/testdata/parse/postgres_regress/vacuum.metadata.json b/parser/testdata/parse/postgres_regress/vacuum.metadata.json index 8a8e8aa..5417abb 100644 --- a/parser/testdata/parse/postgres_regress/vacuum.metadata.json +++ b/parser/testdata/parse/postgres_regress/vacuum.metadata.json @@ -4,7 +4,6 @@ "034", "037", "038", - "040", "041", "042", "043", @@ -35,18 +34,12 @@ "111", "113", "114", - "117", "119", "120", - "121", "123", - "124", "125", - "126", "127", - "130", "131", - "132", "133", "134", "135", @@ -89,7 +82,6 @@ "190", "191", "194", - "198", "200", "202", "204", @@ -131,8 +123,6 @@ "252", "253", "254", - "256", - "257", "259", "260", "261", @@ -142,7 +132,6 @@ "265", "266", "267", - "269", "271", "272", "273", @@ -152,8 +141,6 @@ "277", "278", "279", - "281", - "282", "284", "285", "286", diff --git a/parser/testdata/parse/postgres_regress/with.metadata.json b/parser/testdata/parse/postgres_regress/with.metadata.json index e2b3880..6f3d4c7 100644 --- a/parser/testdata/parse/postgres_regress/with.metadata.json +++ b/parser/testdata/parse/postgres_regress/with.metadata.json @@ -19,9 +19,7 @@ "189", "195", "197", - "206", "216", - "218", "222", "225", "228", diff --git a/parser/testdata/parse/postgres_regress/xmlmap.metadata.json b/parser/testdata/parse/postgres_regress/xmlmap.metadata.json index 37a17b8..6db3769 100644 --- a/parser/testdata/parse/postgres_regress/xmlmap.metadata.json +++ b/parser/testdata/parse/postgres_regress/xmlmap.metadata.json @@ -1,7 +1,6 @@ { "todo": [ "004", - "006", "036", "037" ] From 4993bcff5bede15f50b514a8c818ff4602b7fafd Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 16 Aug 2026 19:18:36 +0000 Subject: [PATCH 05/24] Milestone 7: DROP family, COMMENT, SECURITY LABEL, REASSIGN OWNED Generic DropStmt over all object types, RemoveFuncStmt/RemoveAggrStmt/ RemoveOperStmt, DropCast/DropTransform/DropOpClass/DropOpFamily, DropOwned/ReassignOwned, DropTableSpace/DropSubscription/Dropdb/ DropUserMapping, CommentStmt, SecLabelStmt, and the shared function/aggregate/operator_with_argtypes machinery. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01J19Kf5LpGUhi2vxFJjzQJE --- internal/parse/ddl_dispatch.go | 201 +++++- internal/parse/ddl_object.go | 621 ++++++++++++++++++ internal/parse/parser.go | 19 + .../postgres_regress/errors.metadata.json | 22 - .../postgres_regress/stats.metadata.json | 3 - .../postgres_regress/aggregates.metadata.json | 25 +- .../alter_generic.metadata.json | 24 +- .../alter_operator.metadata.json | 12 +- .../alter_table.metadata.json | 203 ------ .../postgres_regress/arrays.metadata.json | 10 +- .../parse/postgres_regress/bit.metadata.json | 9 +- .../postgres_regress/bitmapops.metadata.json | 4 +- .../postgres_regress/boolean.metadata.json | 7 +- .../parse/postgres_regress/box.metadata.json | 1 - .../parse/postgres_regress/brin.metadata.json | 7 +- .../postgres_regress/brin_multi.metadata.json | 13 +- .../btree_index.metadata.json | 5 +- .../parse/postgres_regress/case.metadata.json | 4 +- .../parse/postgres_regress/char.metadata.json | 4 +- .../postgres_regress/cluster.metadata.json | 13 +- .../collate.icu.utf8.metadata.json | 17 - .../collate.linux.utf8.metadata.json | 14 +- .../postgres_regress/collate.metadata.json | 5 +- .../collate.utf8.metadata.json | 4 +- .../collate.windows.win1252.metadata.json | 14 +- .../postgres_regress/combocid.metadata.json | 4 +- .../compression.metadata.json | 6 +- .../constraints.metadata.json | 34 +- .../postgres_regress/conversion.metadata.json | 5 - .../parse/postgres_regress/copy.metadata.json | 10 +- .../postgres_regress/copydml.metadata.json | 17 +- .../postgres_regress/copyselect.metadata.json | 4 +- .../create_aggregate.metadata.json | 11 - .../postgres_regress/create_am.metadata.json | 11 +- .../create_cast.metadata.json | 3 - .../create_function_sql.metadata.json | 14 +- .../create_index.metadata.json | 59 +- .../create_operator.metadata.json | 6 - .../create_procedure.metadata.json | 17 +- .../create_role.metadata.json | 13 +- .../create_schema.metadata.json | 5 +- .../create_table.metadata.json | 51 +- .../create_table_like.metadata.json | 31 +- .../create_type.metadata.json | 20 +- .../create_view.metadata.json | 11 +- .../postgres_regress/database.metadata.json | 4 +- .../postgres_regress/delete.metadata.json | 4 +- .../postgres_regress/dependency.metadata.json | 12 +- .../postgres_regress/domain.metadata.json | 51 +- .../drop_if_exists.metadata.json | 134 +--- .../drop_operator.metadata.json | 6 +- .../parse/postgres_regress/enum.metadata.json | 13 +- .../postgres_regress/equivclass.metadata.json | 1 - .../postgres_regress/errors.metadata.json | 33 - .../event_trigger.metadata.json | 47 +- .../event_trigger_login.metadata.json | 5 +- .../postgres_regress/explain.metadata.json | 1 - .../fast_default.metadata.json | 38 +- .../postgres_regress/float4.metadata.json | 3 +- .../postgres_regress/float8.metadata.json | 4 +- .../foreign_data.metadata.json | 84 +-- .../foreign_key.metadata.json | 99 +-- .../functional_deps.metadata.json | 7 +- .../postgres_regress/generated.metadata.json | 11 +- .../parse/postgres_regress/gin.metadata.json | 4 +- .../parse/postgres_regress/gist.metadata.json | 8 +- .../groupingsets.metadata.json | 2 - .../parse/postgres_regress/guc.metadata.json | 4 +- .../postgres_regress/hash_func.metadata.json | 5 +- .../postgres_regress/hash_index.metadata.json | 6 +- .../postgres_regress/hash_part.metadata.json | 6 +- .../postgres_regress/horology.metadata.json | 1 - .../postgres_regress/identity.metadata.json | 14 +- .../incremental_sort.metadata.json | 2 - .../index_including.metadata.json | 17 +- .../index_including_gist.metadata.json | 9 +- .../postgres_regress/indexing.metadata.json | 82 +-- .../indirect_toast.metadata.json | 4 +- .../parse/postgres_regress/inet.metadata.json | 6 +- .../postgres_regress/inherit.metadata.json | 69 +- .../postgres_regress/insert.metadata.json | 33 +- .../insert_conflict.metadata.json | 35 +- .../postgres_regress/interval.metadata.json | 2 - .../parse/postgres_regress/join.metadata.json | 22 +- .../parse/postgres_regress/json.metadata.json | 9 +- .../postgres_regress/jsonb.metadata.json | 16 +- .../largeobject.metadata.json | 5 +- .../parse/postgres_regress/lock.metadata.json | 12 - .../postgres_regress/macaddr.metadata.json | 4 +- .../postgres_regress/macaddr8.metadata.json | 4 +- .../maintain_every.metadata.json | 4 +- .../postgres_regress/matview.metadata.json | 18 +- .../postgres_regress/memoize.metadata.json | 4 - .../postgres_regress/merge.metadata.json | 31 +- .../parse/postgres_regress/misc.metadata.json | 1 - .../misc_functions.metadata.json | 3 +- .../multirangetypes.metadata.json | 17 - .../parse/postgres_regress/name.metadata.json | 1 - .../postgres_regress/namespace.metadata.json | 5 +- .../postgres_regress/numeric.metadata.json | 6 +- .../numeric_big.metadata.json | 10 - .../object_address.metadata.json | 8 +- .../parse/postgres_regress/oid.metadata.json | 4 +- .../partition_info.metadata.json | 8 +- .../partition_join.metadata.json | 34 +- .../partition_prune.metadata.json | 39 +- .../postgres_regress/pg_lsn.metadata.json | 1 - .../postgres_regress/plancache.metadata.json | 9 +- .../postgres_regress/plpgsql.metadata.json | 86 --- .../polymorphism.metadata.json | 51 +- .../postgres_regress/portals.metadata.json | 6 +- .../postgres_regress/predicate.metadata.json | 6 +- .../prepared_xacts.metadata.json | 8 +- .../postgres_regress/privileges.metadata.json | 3 - .../parse/postgres_regress/psql.metadata.json | 5 +- .../publication.metadata.json | 86 --- .../postgres_regress/rangefuncs.metadata.json | 62 -- .../postgres_regress/rangetypes.metadata.json | 18 +- .../postgres_regress/reloptions.metadata.json | 5 +- .../replica_identity.metadata.json | 8 +- .../postgres_regress/returning.metadata.json | 4 - .../rowsecurity.metadata.json | 29 - .../postgres_regress/rowtypes.metadata.json | 6 +- .../postgres_regress/rules.metadata.json | 43 +- .../security_label.metadata.json | 15 +- .../postgres_regress/select.metadata.json | 6 +- .../select_distinct.metadata.json | 4 - .../select_having.metadata.json | 4 +- .../select_implicit.metadata.json | 6 +- .../select_into.metadata.json | 13 +- .../select_parallel.metadata.json | 8 - .../postgres_regress/sequence.metadata.json | 19 +- .../postgres_regress/sqljson.metadata.json | 12 +- .../sqljson_jsontable.metadata.json | 15 +- .../sqljson_queryfuncs.metadata.json | 11 +- .../postgres_regress/stats.metadata.json | 25 +- .../postgres_regress/stats_ext.metadata.json | 61 +- .../subscription.metadata.json | 17 +- .../postgres_regress/subselect.metadata.json | 6 - .../tablesample.metadata.json | 3 +- .../postgres_regress/tablespace.metadata.json | 15 +- .../parse/postgres_regress/temp.metadata.json | 16 +- .../parse/postgres_regress/tid.metadata.json | 11 +- .../tidrangescan.metadata.json | 3 +- .../postgres_regress/tidscan.metadata.json | 3 +- .../timestamptz.metadata.json | 2 - .../transactions.metadata.json | 16 +- .../postgres_regress/triggers.metadata.json | 148 ----- .../postgres_regress/truncate.metadata.json | 14 +- .../postgres_regress/tsdicts.metadata.json | 3 +- .../postgres_regress/tsearch.metadata.json | 3 - .../parse/postgres_regress/tsrf.metadata.json | 4 +- .../typed_table.metadata.json | 3 - .../postgres_regress/union.metadata.json | 4 - .../updatable_views.metadata.json | 86 --- .../postgres_regress/update.metadata.json | 42 +- .../parse/postgres_regress/uuid.metadata.json | 4 +- .../postgres_regress/vacuum.metadata.json | 16 +- .../postgres_regress/varchar.metadata.json | 4 +- .../postgres_regress/window.metadata.json | 4 - .../parse/postgres_regress/with.metadata.json | 12 +- .../write_parallel.metadata.json | 6 +- .../parse/postgres_regress/xid.metadata.json | 1 - 163 files changed, 958 insertions(+), 2847 deletions(-) create mode 100644 internal/parse/ddl_object.go diff --git a/internal/parse/ddl_dispatch.go b/internal/parse/ddl_dispatch.go index 23611ce..515bac6 100644 --- a/internal/parse/ddl_dispatch.go +++ b/internal/parse/ddl_dispatch.go @@ -230,8 +230,9 @@ func (p *parser) parseAlterDispatch() *ast.Node { return nil } -// parseDropDispatch routes a statement beginning with DROP. The DROP token -// is not yet consumed. +// parseDropDispatch routes a statement beginning with DROP: DropStmt and +// the specialized Drop*/Remove* productions. The DROP token is not yet +// consumed. func (p *parser) parseDropDispatch() *ast.Node { p.expect(ast.Token_DROP) switch p.kind() { @@ -240,15 +241,209 @@ func (p *parser) parseDropDispatch() *ast.Node { return p.parseDropRoleStmt() case ast.Token_USER: if p.kindN(1) == ast.Token_MAPPING { - break // DropUserMappingStmt (milestone 7) + // gram.y: DropUserMappingStmt + p.next() + p.next() + n := &ast.DropUserMappingStmt{MissingOk: p.parseDropIfExists()} + p.expect(ast.Token_FOR) + n.User = p.parseAuthIdent() + p.expect(ast.Token_SERVER) + n.Servername = p.name() + return &ast.Node{Node: &ast.Node_DropUserMappingStmt{DropUserMappingStmt: n}} } p.next() return p.parseDropRoleStmt() + + case ast.Token_TYPE_P: + // gram.y: DropStmt: DROP TYPE_P type_name_list + p.next() + n := newDropStmt(ast.ObjectType_OBJECT_TYPE) + n.MissingOk = p.parseDropIfExists() + n.Objects = p.parseTypeNameList() + n.Behavior = p.parseOptDropBehavior() + return nDropStmt(n) + case ast.Token_DOMAIN_P: + p.next() + n := newDropStmt(ast.ObjectType_OBJECT_DOMAIN) + n.MissingOk = p.parseDropIfExists() + n.Objects = p.parseTypeNameList() + n.Behavior = p.parseOptDropBehavior() + return nDropStmt(n) + + case ast.Token_INDEX: + if p.kindN(1) == ast.Token_CONCURRENTLY { + p.next() + p.next() + n := newDropStmt(ast.ObjectType_OBJECT_INDEX) + n.Concurrent = true + n.MissingOk = p.parseDropIfExists() + n.Objects = p.parseAnyNameList() + n.Behavior = p.parseOptDropBehavior() + return nDropStmt(n) + } + + case ast.Token_FUNCTION, ast.Token_PROCEDURE, ast.Token_ROUTINE: + // gram.y: RemoveFuncStmt + var objtype ast.ObjectType + switch p.next().Kind { + case ast.Token_FUNCTION: + objtype = ast.ObjectType_OBJECT_FUNCTION + case ast.Token_PROCEDURE: + objtype = ast.ObjectType_OBJECT_PROCEDURE + default: + objtype = ast.ObjectType_OBJECT_ROUTINE + } + n := newDropStmt(objtype) + n.MissingOk = p.parseDropIfExists() + n.Objects = p.parseFunctionWithArgtypesList() + n.Behavior = p.parseOptDropBehavior() + return nDropStmt(n) + + case ast.Token_AGGREGATE: + // gram.y: RemoveAggrStmt + p.next() + n := newDropStmt(ast.ObjectType_OBJECT_AGGREGATE) + n.MissingOk = p.parseDropIfExists() + n.Objects = p.parseAggregateWithArgtypesList() + n.Behavior = p.parseOptDropBehavior() + return nDropStmt(n) + + case ast.Token_OPERATOR: + p.next() + switch p.kind() { + case ast.Token_CLASS, ast.Token_FAMILY: + // gram.y: DropOpClassStmt / DropOpFamilyStmt + objtype := ast.ObjectType_OBJECT_OPCLASS + if p.next().Kind == ast.Token_FAMILY { + objtype = ast.ObjectType_OBJECT_OPFAMILY + } + n := newDropStmt(objtype) + n.MissingOk = p.parseDropIfExists() + names := p.anyName() + p.expect(ast.Token_USING) + n.Objects = []*ast.Node{nList(append([]*ast.Node{nStr(p.name())}, names...))} + n.Behavior = p.parseOptDropBehavior() + return nDropStmt(n) + } + // gram.y: RemoveOperStmt + n := newDropStmt(ast.ObjectType_OBJECT_OPERATOR) + n.MissingOk = p.parseDropIfExists() + n.Objects = p.parseOperatorWithArgtypesList() + n.Behavior = p.parseOptDropBehavior() + return nDropStmt(n) + + case ast.Token_CAST: + // gram.y: DropCastStmt + p.next() + n := newDropStmt(ast.ObjectType_OBJECT_CAST) + n.MissingOk = p.parseDropIfExists() + p.expect(ast.Token('(')) + from := p.parseTypename() + p.expect(ast.Token_AS) + to := p.parseTypename() + p.expect(ast.Token(')')) + n.Objects = []*ast.Node{nList([]*ast.Node{nTypeName(from), nTypeName(to)})} + n.Behavior = p.parseOptDropBehavior() + return nDropStmt(n) + + case ast.Token_TRANSFORM: + // gram.y: DropTransformStmt + p.next() + n := newDropStmt(ast.ObjectType_OBJECT_TRANSFORM) + n.MissingOk = p.parseDropIfExists() + p.expect(ast.Token_FOR) + t := p.parseTypename() + p.expect(ast.Token_LANGUAGE) + n.Objects = []*ast.Node{nList([]*ast.Node{nTypeName(t), nStr(p.name())})} + n.Behavior = p.parseOptDropBehavior() + return nDropStmt(n) + + case ast.Token_OWNED: + // gram.y: DropOwnedStmt + p.next() + p.expect(ast.Token_BY) + n := &ast.DropOwnedStmt{Roles: p.parseRoleList()} + n.Behavior = p.parseOptDropBehavior() + return &ast.Node{Node: &ast.Node_DropOwnedStmt{DropOwnedStmt: n}} + + case ast.Token_TABLESPACE: + // gram.y: DropTableSpaceStmt + p.next() + n := &ast.DropTableSpaceStmt{MissingOk: p.parseDropIfExists()} + n.Tablespacename = p.name() + return &ast.Node{Node: &ast.Node_DropTableSpaceStmt{DropTableSpaceStmt: n}} + + case ast.Token_SUBSCRIPTION: + // gram.y: DropSubscriptionStmt + p.next() + n := &ast.DropSubscriptionStmt{MissingOk: p.parseDropIfExists()} + n.Subname = p.name() + n.Behavior = p.parseOptDropBehavior() + return &ast.Node{Node: &ast.Node_DropSubscriptionStmt{DropSubscriptionStmt: n}} + + case ast.Token_DATABASE: + // gram.y: DropdbStmt + p.next() + n := &ast.DropdbStmt{MissingOk: p.parseDropIfExists()} + n.Dbname = p.name() + if p.kind() == ast.Token_WITH || p.kind() == ast.Token_WITH_LA || p.kind() == ast.Token('(') { + p.parseOptWith() + p.expect(ast.Token('(')) + for { + ftok := p.expect(ast.Token_FORCE) + n.Options = append(n.Options, makeDefElem("force", nil, ftok.Start)) + if !p.have(ast.Token(',')) { + break + } + } + p.expect(ast.Token(')')) + } + return &ast.Node{Node: &ast.Node_DropdbStmt{DropdbStmt: n}} + } + + // gram.y: DropStmt: DROP object_type_name_on_any_name name ON any_name + if t, ok := p.tryObjectTypeNameOnAnyName(); ok { + n := newDropStmt(t) + n.MissingOk = p.parseDropIfExists() + name := p.name() + p.expect(ast.Token_ON) + names := p.anyName() + n.Objects = []*ast.Node{nList(append(names, nStr(name)))} + n.Behavior = p.parseOptDropBehavior() + return nDropStmt(n) + } + // gram.y: DropStmt: DROP object_type_any_name any_name_list + if t, ok := p.tryObjectTypeAnyName(); ok { + n := newDropStmt(t) + n.MissingOk = p.parseDropIfExists() + n.Objects = p.parseAnyNameList() + n.Behavior = p.parseOptDropBehavior() + return nDropStmt(n) + } + // gram.y: DropStmt: DROP drop_type_name name_list + if t, ok := p.tryDropTypeName(); ok { + n := newDropStmt(t) + n.MissingOk = p.parseDropIfExists() + n.Objects = p.nameList() + n.Behavior = p.parseOptDropBehavior() + return nDropStmt(n) } p.syntaxErrorAt() return nil } +// parseAuthIdent is gram.y's auth_ident: RoleSpec | USER. +func (p *parser) parseAuthIdent() *ast.RoleSpec { + if p.kind() == ast.Token_USER { + tok := p.next() + return &ast.RoleSpec{ + Roletype: ast.RoleSpecType_ROLESPEC_CURRENT_USER, + Location: tok.Start, + } + } + return p.parseRoleSpec() +} + // RangeVar.relpersistence values (pg_class.h: RELPERSISTENCE_*). const ( relPersistPermanent = "p" diff --git a/internal/parse/ddl_object.go b/internal/parse/ddl_object.go new file mode 100644 index 0000000..846dcea --- /dev/null +++ b/internal/parse/ddl_object.go @@ -0,0 +1,621 @@ +package parse + +// Object-address machinery shared by DROP/COMMENT/SECURITY LABEL and the +// function DDL: function_with_argtypes, aggregate_with_argtypes, +// operator_with_argtypes, func_arg, plus DropStmt and friends, CommentStmt, +// and SecLabelStmt. + +import ( + "github.com/sqlc-dev/oliphant/ast" +) + +func nObjectWithArgs(n *ast.ObjectWithArgs) *ast.Node { + return &ast.Node{Node: &ast.Node_ObjectWithArgs{ObjectWithArgs: n}} +} + +func nFunctionParameter(n *ast.FunctionParameter) *ast.Node { + return &ast.Node{Node: &ast.Node_FunctionParameter{FunctionParameter: n}} +} + +// parseAnyNameList is gram.y's any_name_list. +func (p *parser) parseAnyNameList() []*ast.Node { + list := []*ast.Node{nList(p.anyName())} + for p.have(ast.Token(',')) { + list = append(list, nList(p.anyName())) + } + return list +} + +// parseTypeNameList is gram.y's type_name_list. +func (p *parser) parseTypeNameList() []*ast.Node { + list := []*ast.Node{nTypeName(p.parseTypename())} + for p.have(ast.Token(',')) { + list = append(list, nTypeName(p.parseTypename())) + } + return list +} + +// parseFuncType is gram.y's func_type: +// +// Typename | type_function_name attrs '%' TYPE_P +// | SETOF type_function_name attrs '%' TYPE_P +func (p *parser) parseFuncType() *ast.TypeName { + // Look for the %TYPE form: [SETOF] name ('.' name)+ '%' TYPE_P. + i := 0 + setof := false + if p.kind() == ast.Token_SETOF { + i = 1 + setof = true + } + if isTypeFunctionNameToken(p.peekN(i)) { + j := i + for p.kindN(j+1) == ast.Token('.') && isColLabelToken(p.peekN(j+2)) { + j += 2 + } + if j > i && p.kindN(j+1) == ast.Token('%') && p.kindN(j+2) == ast.Token_TYPE_P { + if setof { + p.next() + } + tok := p.peek() + names := []*ast.Node{nStr(p.next().Str)} + for p.have(ast.Token('.')) { + names = append(names, nStr(p.colLabel())) + } + p.expect(ast.Token('%')) + p.expect(ast.Token_TYPE_P) + t := makeTypeNameFromNameList(names) + t.PctType = true + t.Setof = setof + t.Location = tok.Start + return t + } + } + return p.parseTypename() +} + +// parseFuncArg is gram.y's func_arg. +func (p *parser) parseFuncArg() *ast.FunctionParameter { + n := &ast.FunctionParameter{Mode: ast.FunctionParameterMode_FUNC_PARAM_DEFAULT} + mode, haveMode := p.parseArgClass() + if haveMode { + n.Mode = mode + } + // A type_function_name token here is a param_name unless the tokens + // that follow close the argument (making it the type itself). + if isTypeFunctionNameToken(p.peek()) && p.argNameFollowedByType() { + n.Name = p.paramName() + if !haveMode { + if mode, haveMode = p.parseArgClass(); haveMode { + n.Mode = mode + } + } + } + n.ArgType = p.parseFuncType() + return n +} + +// parseArgClass is gram.y's arg_class; reports whether one was present. +func (p *parser) parseArgClass() (ast.FunctionParameterMode, bool) { + switch p.kind() { + case ast.Token_IN_P: + p.next() + if p.have(ast.Token_OUT_P) { + return ast.FunctionParameterMode_FUNC_PARAM_INOUT, true + } + return ast.FunctionParameterMode_FUNC_PARAM_IN, true + case ast.Token_OUT_P: + p.next() + return ast.FunctionParameterMode_FUNC_PARAM_OUT, true + case ast.Token_INOUT: + p.next() + return ast.FunctionParameterMode_FUNC_PARAM_INOUT, true + case ast.Token_VARIADIC: + p.next() + return ast.FunctionParameterMode_FUNC_PARAM_VARIADIC, true + } + return 0, false +} + +// argNameFollowedByType reports whether the token after the current one +// continues a func_arg (so the current token is a param_name rather than +// the argument's type). +func (p *parser) argNameFollowedByType() bool { + switch p.kindN(1) { + case ast.Token(','), ast.Token(')'), ast.Token('.'), ast.Token('%'), + ast.Token('('), ast.Token('['), ast.Token_DEFAULT, ast.Token('='), + ast.Token_ORDER, 0: + return false + } + return true +} + +// extractArgTypes is gram.y's extractArgTypes. +func extractArgTypes(params []*ast.Node) []*ast.Node { + var result []*ast.Node + for _, pn := range params { + fp := pn.GetFunctionParameter() + if fp.Mode != ast.FunctionParameterMode_FUNC_PARAM_OUT && + fp.Mode != ast.FunctionParameterMode_FUNC_PARAM_TABLE { + result = append(result, nTypeName(fp.ArgType)) + } + } + return result +} + +// parseFunctionWithArgtypes is gram.y's function_with_argtypes. +func (p *parser) parseFunctionWithArgtypes() *ast.Node { + n := &ast.ObjectWithArgs{} + // func_name func_args, or a bare name/type_func_name_keyword/ColId + // indirection (args_unspecified). + n.Objname = p.parseFuncName(p.peek()) + if p.kind() == ast.Token('(') { + params := p.parseFuncArgsParens() + n.Objargs = extractArgTypes(params) + n.Objfuncargs = params + } else { + n.ArgsUnspecified = true + } + return nObjectWithArgs(n) +} + +// parseFuncArgsParens is gram.y's func_args: '(' [func_args_list] ')'. +func (p *parser) parseFuncArgsParens() []*ast.Node { + p.expect(ast.Token('(')) + var params []*ast.Node + if p.kind() != ast.Token(')') { + params = append(params, nFunctionParameter(p.parseFuncArg())) + for p.have(ast.Token(',')) { + params = append(params, nFunctionParameter(p.parseFuncArg())) + } + } + p.expect(ast.Token(')')) + return params +} + +// parseFunctionWithArgtypesList is gram.y's function_with_argtypes_list. +func (p *parser) parseFunctionWithArgtypesList() []*ast.Node { + list := []*ast.Node{p.parseFunctionWithArgtypes()} + for p.have(ast.Token(',')) { + list = append(list, p.parseFunctionWithArgtypes()) + } + return list +} + +// parseAggrArgs is gram.y's aggr_args; returns the FunctionParameter list +// and the ORDER BY split marker. +func (p *parser) parseAggrArgs() ([]*ast.Node, int32) { + p.expect(ast.Token('(')) + if p.have(ast.Token('*')) { + p.expect(ast.Token(')')) + return nil, -1 + } + if p.have(ast.Token_ORDER) { + p.expect(ast.Token_BY) + args := p.parseAggrArgsList() + p.expect(ast.Token(')')) + return args, 0 + } + direct := p.parseAggrArgsList() + if p.have(ast.Token_ORDER) { + p.expect(ast.Token_BY) + otok := p.peek() + ordered := p.parseAggrArgsList() + p.expect(ast.Token(')')) + return p.makeOrderedSetArgs(direct, ordered, otok.Start) + } + p.expect(ast.Token(')')) + return direct, -1 +} + +// parseAggrArgsList is gram.y's aggr_args_list. +func (p *parser) parseAggrArgsList() []*ast.Node { + list := []*ast.Node{p.parseAggrArg()} + for p.have(ast.Token(',')) { + list = append(list, p.parseAggrArg()) + } + return list +} + +// parseAggrArg is gram.y's aggr_arg. +func (p *parser) parseAggrArg() *ast.Node { + tok := p.peek() + fp := p.parseFuncArg() + switch fp.Mode { + case ast.FunctionParameterMode_FUNC_PARAM_DEFAULT, + ast.FunctionParameterMode_FUNC_PARAM_IN, + ast.FunctionParameterMode_FUNC_PARAM_VARIADIC: + default: + p.ereport("base_yyparse", "aggregates cannot have output arguments", tok.Start) + } + return nFunctionParameter(fp) +} + +// makeOrderedSetArgs is gram.y's makeOrderedSetArgs. +func (p *parser) makeOrderedSetArgs(direct, ordered []*ast.Node, orderedLoc int32) ([]*ast.Node, int32) { + lastd := direct[len(direct)-1].GetFunctionParameter() + if lastd.Mode == ast.FunctionParameterMode_FUNC_PARAM_VARIADIC { + firsto := ordered[0].GetFunctionParameter() + if len(ordered) != 1 || + firsto.Mode != ast.FunctionParameterMode_FUNC_PARAM_VARIADIC || + !typeNamesEqual(lastd.ArgType, firsto.ArgType) { + p.ereport("base_yyparse", + "an ordered-set aggregate with a VARIADIC direct argument must have one VARIADIC aggregated argument of the same data type", + firsto.ArgType.GetLocation()) + } + ordered = nil + } + ndirect := int32(len(direct)) + return append(direct, ordered...), ndirect +} + +// typeNamesEqual is equal() on two TypeNames ignoring locations, as PG's +// equalfuncs do. +func typeNamesEqual(a, b *ast.TypeName) bool { + if len(a.GetNames()) != len(b.GetNames()) { + return false + } + for i := range a.GetNames() { + if asString(a.Names[i]).GetSval() != asString(b.Names[i]).GetSval() { + return false + } + } + return a.GetSetof() == b.GetSetof() && a.GetPctType() == b.GetPctType() && + len(a.GetArrayBounds()) == len(b.GetArrayBounds()) && + a.GetTypemod() == b.GetTypemod() && + len(a.GetTypmods()) == len(b.GetTypmods()) +} + +// parseAggregateWithArgtypes is gram.y's aggregate_with_argtypes. +func (p *parser) parseAggregateWithArgtypes() *ast.Node { + n := &ast.ObjectWithArgs{} + n.Objname = p.parseFuncName(p.peek()) + params, _ := p.parseAggrArgs() + n.Objargs = extractArgTypes(params) + n.Objfuncargs = params + return nObjectWithArgs(n) +} + +// parseAggregateWithArgtypesList is gram.y's aggregate_with_argtypes_list. +func (p *parser) parseAggregateWithArgtypesList() []*ast.Node { + list := []*ast.Node{p.parseAggregateWithArgtypes()} + for p.have(ast.Token(',')) { + list = append(list, p.parseAggregateWithArgtypes()) + } + return list +} + +// parseOperArgtypes is gram.y's oper_argtypes. +func (p *parser) parseOperArgtypes() []*ast.Node { + p.expect(ast.Token('(')) + var left, right *ast.Node + if p.have(ast.Token_NONE) { + left = nil + } else { + left = nTypeName(p.parseTypename()) + } + if p.kind() == ast.Token(')') { + ctok := p.peek() + p.ereport("base_yyparse", "missing argument", ctok.Start) + } + p.expect(ast.Token(',')) + if p.have(ast.Token_NONE) { + right = nil + } else { + right = nTypeName(p.parseTypename()) + } + p.expect(ast.Token(')')) + return []*ast.Node{left, right} +} + +// parseOperatorWithArgtypes is gram.y's operator_with_argtypes. +func (p *parser) parseOperatorWithArgtypes() *ast.Node { + n := &ast.ObjectWithArgs{ + Objname: p.parseAnyOperator(), + Objargs: p.parseOperArgtypes(), + } + return nObjectWithArgs(n) +} + +// parseOperatorWithArgtypesList is gram.y's operator_with_argtypes_list. +func (p *parser) parseOperatorWithArgtypesList() []*ast.Node { + list := []*ast.Node{p.parseOperatorWithArgtypes()} + for p.have(ast.Token(',')) { + list = append(list, p.parseOperatorWithArgtypes()) + } + return list +} + +// tryObjectTypeAnyName consumes gram.y's object_type_any_name when the +// lookahead matches it. +func (p *parser) tryObjectTypeAnyName() (ast.ObjectType, bool) { + switch p.kind() { + case ast.Token_TABLE: + p.next() + return ast.ObjectType_OBJECT_TABLE, true + case ast.Token_SEQUENCE: + p.next() + return ast.ObjectType_OBJECT_SEQUENCE, true + case ast.Token_VIEW: + p.next() + return ast.ObjectType_OBJECT_VIEW, true + case ast.Token_MATERIALIZED: + if p.kindN(1) == ast.Token_VIEW { + p.next() + p.next() + return ast.ObjectType_OBJECT_MATVIEW, true + } + case ast.Token_INDEX: + p.next() + return ast.ObjectType_OBJECT_INDEX, true + case ast.Token_FOREIGN: + if p.kindN(1) == ast.Token_TABLE { + p.next() + p.next() + return ast.ObjectType_OBJECT_FOREIGN_TABLE, true + } + case ast.Token_COLLATION: + p.next() + return ast.ObjectType_OBJECT_COLLATION, true + case ast.Token_CONVERSION_P: + p.next() + return ast.ObjectType_OBJECT_CONVERSION, true + case ast.Token_STATISTICS: + p.next() + return ast.ObjectType_OBJECT_STATISTIC_EXT, true + case ast.Token_TEXT_P: + if p.kindN(1) == ast.Token_SEARCH { + switch p.kindN(2) { + case ast.Token_PARSER: + p.next() + p.next() + p.next() + return ast.ObjectType_OBJECT_TSPARSER, true + case ast.Token_DICTIONARY: + p.next() + p.next() + p.next() + return ast.ObjectType_OBJECT_TSDICTIONARY, true + case ast.Token_TEMPLATE: + p.next() + p.next() + p.next() + return ast.ObjectType_OBJECT_TSTEMPLATE, true + case ast.Token_CONFIGURATION: + p.next() + p.next() + p.next() + return ast.ObjectType_OBJECT_TSCONFIGURATION, true + } + } + } + return 0, false +} + +// tryDropTypeName consumes gram.y's drop_type_name when the lookahead +// matches it. +func (p *parser) tryDropTypeName() (ast.ObjectType, bool) { + switch p.kind() { + case ast.Token_ACCESS: + if p.kindN(1) == ast.Token_METHOD { + p.next() + p.next() + return ast.ObjectType_OBJECT_ACCESS_METHOD, true + } + case ast.Token_EVENT: + if p.kindN(1) == ast.Token_TRIGGER { + p.next() + p.next() + return ast.ObjectType_OBJECT_EVENT_TRIGGER, true + } + case ast.Token_EXTENSION: + p.next() + return ast.ObjectType_OBJECT_EXTENSION, true + case ast.Token_FOREIGN: + if p.kindN(1) == ast.Token_DATA_P && p.kindN(2) == ast.Token_WRAPPER { + p.next() + p.next() + p.next() + return ast.ObjectType_OBJECT_FDW, true + } + case ast.Token_PROCEDURAL: + if p.kindN(1) == ast.Token_LANGUAGE { + p.next() + p.next() + return ast.ObjectType_OBJECT_LANGUAGE, true + } + case ast.Token_LANGUAGE: + p.next() + return ast.ObjectType_OBJECT_LANGUAGE, true + case ast.Token_PUBLICATION: + p.next() + return ast.ObjectType_OBJECT_PUBLICATION, true + case ast.Token_SCHEMA: + p.next() + return ast.ObjectType_OBJECT_SCHEMA, true + case ast.Token_SERVER: + p.next() + return ast.ObjectType_OBJECT_FOREIGN_SERVER, true + } + return 0, false +} + +// tryObjectTypeName consumes gram.y's object_type_name when the lookahead +// matches it. +func (p *parser) tryObjectTypeName() (ast.ObjectType, bool) { + if t, ok := p.tryDropTypeName(); ok { + return t, ok + } + switch p.kind() { + case ast.Token_DATABASE: + p.next() + return ast.ObjectType_OBJECT_DATABASE, true + case ast.Token_ROLE: + p.next() + return ast.ObjectType_OBJECT_ROLE, true + case ast.Token_SUBSCRIPTION: + p.next() + return ast.ObjectType_OBJECT_SUBSCRIPTION, true + case ast.Token_TABLESPACE: + p.next() + return ast.ObjectType_OBJECT_TABLESPACE, true + } + return 0, false +} + +// tryObjectTypeNameOnAnyName consumes gram.y's +// object_type_name_on_any_name when the lookahead matches it. +func (p *parser) tryObjectTypeNameOnAnyName() (ast.ObjectType, bool) { + switch p.kind() { + case ast.Token_POLICY: + p.next() + return ast.ObjectType_OBJECT_POLICY, true + case ast.Token_RULE: + p.next() + return ast.ObjectType_OBJECT_RULE, true + case ast.Token_TRIGGER: + p.next() + return ast.ObjectType_OBJECT_TRIGGER, true + } + return 0, false +} + +// newDropStmt builds the common DropStmt shell. +func newDropStmt(removeType ast.ObjectType) *ast.DropStmt { + return &ast.DropStmt{RemoveType: removeType} +} + +func nDropStmt(n *ast.DropStmt) *ast.Node { + return &ast.Node{Node: &ast.Node_DropStmt{DropStmt: n}} +} + +// parseDropIfExists consumes IF_P EXISTS if present. +func (p *parser) parseDropIfExists() bool { + if p.have(ast.Token_IF_P) { + p.expect(ast.Token_EXISTS) + return true + } + return false +} + +// parseCommentStmt is gram.y's CommentStmt. +func (p *parser) parseCommentStmt() *ast.Node { + p.expect(ast.Token_COMMENT) + p.expect(ast.Token_ON) + n := &ast.CommentStmt{} + n.Objtype, n.Object = p.parseCommentOrLabelObject() + p.expect(ast.Token_IS) + // comment_text: Sconst | NULL_P + if !p.have(ast.Token_NULL_P) { + n.Comment = p.sconst() + } + return &ast.Node{Node: &ast.Node_CommentStmt{CommentStmt: n}} +} + +// parseSecLabelStmt is gram.y's SecLabelStmt; SECURITY LABEL consumed by +// the caller. +func (p *parser) parseSecLabelStmt() *ast.Node { + n := &ast.SecLabelStmt{} + if p.have(ast.Token_FOR) { + n.Provider = p.nonReservedWordOrSconst() + } + p.expect(ast.Token_ON) + n.Objtype, n.Object = p.parseCommentOrLabelObject() + p.expect(ast.Token_IS) + if !p.have(ast.Token_NULL_P) { + n.Label = p.sconst() + } + return &ast.Node{Node: &ast.Node_SecLabelStmt{SecLabelStmt: n}} +} + +// parseCommentOrLabelObject parses the shared object reference of +// CommentStmt and SecLabelStmt (SecLabelStmt accepts a subset; the +// difference only shows as which error a bad object type raises, and both +// report at the same token). +func (p *parser) parseCommentOrLabelObject() (ast.ObjectType, *ast.Node) { + switch p.kind() { + case ast.Token_COLUMN: + p.next() + return ast.ObjectType_OBJECT_COLUMN, nList(p.anyName()) + case ast.Token_TYPE_P: + p.next() + return ast.ObjectType_OBJECT_TYPE, nTypeName(p.parseTypename()) + case ast.Token_DOMAIN_P: + p.next() + return ast.ObjectType_OBJECT_DOMAIN, nTypeName(p.parseTypename()) + case ast.Token_AGGREGATE: + p.next() + return ast.ObjectType_OBJECT_AGGREGATE, p.parseAggregateWithArgtypes() + case ast.Token_FUNCTION: + p.next() + return ast.ObjectType_OBJECT_FUNCTION, p.parseFunctionWithArgtypes() + case ast.Token_PROCEDURE: + p.next() + return ast.ObjectType_OBJECT_PROCEDURE, p.parseFunctionWithArgtypes() + case ast.Token_ROUTINE: + p.next() + return ast.ObjectType_OBJECT_ROUTINE, p.parseFunctionWithArgtypes() + case ast.Token_OPERATOR: + p.next() + switch p.kind() { + case ast.Token_CLASS: + p.next() + names := p.anyName() + p.expect(ast.Token_USING) + return ast.ObjectType_OBJECT_OPCLASS, + nList(append([]*ast.Node{nStr(p.name())}, names...)) + case ast.Token_FAMILY: + p.next() + names := p.anyName() + p.expect(ast.Token_USING) + return ast.ObjectType_OBJECT_OPFAMILY, + nList(append([]*ast.Node{nStr(p.name())}, names...)) + } + return ast.ObjectType_OBJECT_OPERATOR, p.parseOperatorWithArgtypes() + case ast.Token_CONSTRAINT: + p.next() + name := p.name() + p.expect(ast.Token_ON) + if p.have(ast.Token_DOMAIN_P) { + t := makeTypeNameFromNameList(p.anyName()) + return ast.ObjectType_OBJECT_DOMCONSTRAINT, + nList([]*ast.Node{nTypeName(t), nStr(name)}) + } + names := p.anyName() + return ast.ObjectType_OBJECT_TABCONSTRAINT, + nList(append(names, nStr(name))) + case ast.Token_TRANSFORM: + p.next() + p.expect(ast.Token_FOR) + t := p.parseTypename() + p.expect(ast.Token_LANGUAGE) + return ast.ObjectType_OBJECT_TRANSFORM, + nList([]*ast.Node{nTypeName(t), nStr(p.name())}) + case ast.Token_LARGE_P: + p.next() + p.expect(ast.Token_OBJECT_P) + return ast.ObjectType_OBJECT_LARGEOBJECT, p.parseNumericOnly() + case ast.Token_CAST: + p.next() + p.expect(ast.Token('(')) + from := p.parseTypename() + p.expect(ast.Token_AS) + to := p.parseTypename() + p.expect(ast.Token(')')) + return ast.ObjectType_OBJECT_CAST, + nList([]*ast.Node{nTypeName(from), nTypeName(to)}) + } + if t, ok := p.tryObjectTypeNameOnAnyName(); ok { + name := p.name() + p.expect(ast.Token_ON) + names := p.anyName() + return t, nList(append(names, nStr(name))) + } + if t, ok := p.tryObjectTypeAnyName(); ok { + return t, nList(p.anyName()) + } + if t, ok := p.tryObjectTypeName(); ok { + return t, nStr(p.name()) + } + p.syntaxErrorAt() + return 0, nil +} diff --git a/internal/parse/parser.go b/internal/parse/parser.go index db14651..331e866 100644 --- a/internal/parse/parser.go +++ b/internal/parse/parser.go @@ -263,6 +263,25 @@ func (p *parser) parseToplevelStmt() *ast.Node { return p.parseDiscardStmt() case ast.Token_REFRESH: return p.parseRefreshMatViewStmt() + case ast.Token_COMMENT: + return p.parseCommentStmt() + case ast.Token_SECURITY: + if p.kindN(1) == ast.Token_LABEL { + p.next() + p.next() + return p.parseSecLabelStmt() + } + case ast.Token_REASSIGN: + // gram.y: ReassignOwnedStmt + p.next() + p.expect(ast.Token_OWNED) + p.expect(ast.Token_BY) + roles := p.parseRoleList() + p.expect(ast.Token_TO) + return &ast.Node{Node: &ast.Node_ReassignOwnedStmt{ReassignOwnedStmt: &ast.ReassignOwnedStmt{ + Roles: roles, + Newrole: p.parseRoleSpec(), + }}} } p.syntaxError(tok) return nil diff --git a/parser/testdata/deparse/postgres_regress/errors.metadata.json b/parser/testdata/deparse/postgres_regress/errors.metadata.json index d654d87..65bebe4 100644 --- a/parser/testdata/deparse/postgres_regress/errors.metadata.json +++ b/parser/testdata/deparse/postgres_regress/errors.metadata.json @@ -10,7 +10,6 @@ "009", "010", "012", - "013", "014", "016", "017", @@ -24,36 +23,15 @@ "025", "026", "027", - "028", - "029", "030", - "031", - "032", - "033", "034", "035", "036", - "037", - "038", "039", - "040", - "041", "042", - "043", - "044", - "045", - "046", - "047", - "048", - "049", "050", - "051", - "052", "053", "054", - "055", - "056", - "057", "058", "062", "063", diff --git a/parser/testdata/deparse/postgres_regress/stats.metadata.json b/parser/testdata/deparse/postgres_regress/stats.metadata.json index 99b6ab6..061c0cb 100644 --- a/parser/testdata/deparse/postgres_regress/stats.metadata.json +++ b/parser/testdata/deparse/postgres_regress/stats.metadata.json @@ -195,14 +195,11 @@ "237", "238", "239", - "240", "241", "242", "243", "244", "245", - "246", - "247", "248", "249", "251", diff --git a/parser/testdata/parse/postgres_regress/aggregates.metadata.json b/parser/testdata/parse/postgres_regress/aggregates.metadata.json index 937b03e..847b98e 100644 --- a/parser/testdata/parse/postgres_regress/aggregates.metadata.json +++ b/parser/testdata/parse/postgres_regress/aggregates.metadata.json @@ -1,7 +1,6 @@ { "todo": [ "004", - "095", "109", "111", "125", @@ -20,7 +19,6 @@ "154", "168", "170", - "172", "175", "184", "185", @@ -30,11 +28,6 @@ "190", "191", "195", - "196", - "197", - "198", - "199", - "208", "209", "210", "211", @@ -45,13 +38,8 @@ "219", "220", "221", - "262", - "283", "294", "298", - "306", - "307", - "360", "368", "369", "370", @@ -79,11 +67,8 @@ "422", "424", "425", - "428", "432", "433", - "434", - "435", "439", "440", "444", @@ -97,14 +82,6 @@ "481", "483", "486", - "495", - "507", - "508", - "509", - "510", - "511", - "512", - "513", - "514" + "495" ] } diff --git a/parser/testdata/parse/postgres_regress/alter_generic.metadata.json b/parser/testdata/parse/postgres_regress/alter_generic.metadata.json index 8e6a3ff..0809687 100644 --- a/parser/testdata/parse/postgres_regress/alter_generic.metadata.json +++ b/parser/testdata/parse/postgres_regress/alter_generic.metadata.json @@ -119,7 +119,6 @@ "152", "153", "154", - "155", "157", "158", "159", @@ -128,49 +127,37 @@ "162", "163", "164", - "165", "168", "170", - "172", "177", "178", "180", "182", "183", "184", - "185", "186", "187", - "188", "189", "190", - "191", "192", "193", - "194", "195", "196", "197", - "198", "200", "201", "202", - "203", "206", "207", "208", - "209", "212", "213", "214", - "215", "218", "219", "220", - "221", "223", "224", - "225", "226", "227", "228", @@ -178,20 +165,17 @@ "230", "231", "232", - "233", "234", "235", "236", "237", "238", - "239", "240", "241", "242", "243", "244", "245", - "246", "249", "250", "251", @@ -252,12 +236,6 @@ "319", "320", "321", - "322", - "324", - "325", - "326", - "327", - "328", - "329" + "322" ] } diff --git a/parser/testdata/parse/postgres_regress/alter_operator.metadata.json b/parser/testdata/parse/postgres_regress/alter_operator.metadata.json index 7bf089e..bf77792 100644 --- a/parser/testdata/parse/postgres_regress/alter_operator.metadata.json +++ b/parser/testdata/parse/postgres_regress/alter_operator.metadata.json @@ -36,16 +36,6 @@ "050", "051", "052", - "053", - "056", - "057", - "058", - "059", - "060", - "061", - "062", - "063", - "064", - "065" + "053" ] } diff --git a/parser/testdata/parse/postgres_regress/alter_table.metadata.json b/parser/testdata/parse/postgres_regress/alter_table.metadata.json index ff7872c..6a55ee8 100644 --- a/parser/testdata/parse/postgres_regress/alter_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/alter_table.metadata.json @@ -1,14 +1,7 @@ { "todo": [ - "006", - "007", - "008", - "034", - "067", "070", "073", - "077", - "078", "081", "082", "083", @@ -17,14 +10,7 @@ "087", "088", "089", - "091", "096", - "099", - "100", - "1025", - "1026", - "1027", - "1028", "1029", "103", "1031", @@ -39,7 +25,6 @@ "1047", "1048", "1049", - "105", "1050", "1051", "1054", @@ -60,8 +45,6 @@ "1068", "1069", "107", - "1070", - "1076", "1077", "1078", "1079", @@ -75,14 +58,10 @@ "1086", "1087", "1088", - "1089", "109", "1090", "1092", - "1093", "1096", - "1097", - "1098", "1099", "1102", "1103", @@ -93,34 +72,20 @@ "1108", "1109", "111", - "1110", - "1111", "1112", "1114", "1115", - "1116", - "1117", "1118", "1120", "1121", - "1122", "1123", "1124", "1142", - "1149", "1154", "1155", "1162", "1163", - "1164", - "1165", - "1178", "118", - "1181", - "1182", - "1183", - "1184", - "1185", "1189", "119", "1190", @@ -128,9 +93,6 @@ "1192", "1193", "1194", - "1200", - "1201", - "1202", "1203", "1204", "1213", @@ -138,209 +100,73 @@ "1215", "1216", "1217", - "1225", "123", - "1235", - "1236", - "1237", "124", - "1248", - "1249", - "1250", - "1264", "1268", - "1269", "1272", - "1273", - "1276", - "1279", "128", "1285", "1287", "129", - "1293", - "1297", - "1301", - "1311", - "1318", - "132", - "1323", - "1327", "1328", - "1331", - "1334", - "1337", "134", "1340", - "1342", - "1347", - "1354", "136", - "143", - "1435", - "1438", "144", - "1444", "145", - "1460", - "1463", "147", - "1470", - "1474", - "1478", - "1480", - "1489", - "1493", - "1497", - "1499", "150", "1504", "1505", - "1517", "1527", - "153", - "1530", - "1531", - "1532", "154", - "1544", - "1545", - "155", - "1550", "1554", "1555", - "1556", - "1569", - "1577", - "1578", "1580", "1581", - "1583", - "1584", "1585", "1586", "159", - "1590", - "1591", - "1592", "1599", "160", "1600", "1604", "1605", "1606", - "1607", "161", "1611", "1612", - "1613", "1616", "1618", "1619", - "1620", "1622", - "1623", "1629", "163", "1633", - "1635", "164", "1648", "1650", - "1651", - "1652", - "1653", "166", - "167", - "168", "169", "172", "173", - "175", - "176", "214", - "228", - "230", - "231", - "232", - "233", - "234", - "235", "242", "244", "245", "247", - "254", - "259", - "262", - "263", - "270", - "271", - "275", - "278", - "282", - "283", - "301", - "306", - "309", - "314", - "318", - "327", - "328", - "329", "339", - "352", - "353", - "361", - "362", "368", - "369", - "375", - "378", - "386", - "391", - "401", - "407", - "412", - "415", - "420", - "424", "427", - "428", "432", - "433", "437", - "438", - "450", - "455", - "474", - "475", - "497", - "516", - "517", "532", - "539", - "540", - "541", - "589", "590", "591", "592", "593", - "594", - "595", "608", "609", - "621", - "627", - "630", - "635", - "642", - "653", - "654", - "660", - "661", - "674", "686", "687", "688", @@ -348,14 +174,7 @@ "690", "691", "692", - "702", - "708", - "714", - "720", - "736", - "752", "753", - "757", "764", "765", "770", @@ -365,30 +184,16 @@ "779", "781", "785", - "787", "795", "796", "797", - "798", "804", - "806", "809", "813", - "814", "816", - "818", "821", - "822", "831", - "832", - "834", - "835", - "837", - "838", - "840", - "841", "847", - "850", "854", "859", "873", @@ -397,19 +202,11 @@ "897", "898", "903", - "905", "910", "913", - "915", - "916", - "917", "924", "929", - "939", - "940", - "941", "942", - "943", "994" ] } diff --git a/parser/testdata/parse/postgres_regress/arrays.metadata.json b/parser/testdata/parse/postgres_regress/arrays.metadata.json index 8f24aaa..870722d 100644 --- a/parser/testdata/parse/postgres_regress/arrays.metadata.json +++ b/parser/testdata/parse/postgres_regress/arrays.metadata.json @@ -5,16 +5,8 @@ "245", "312", "315", - "318", - "319", - "320", "321", "322", - "325", - "326", - "451", - "458", - "460", - "461" + "451" ] } diff --git a/parser/testdata/parse/postgres_regress/bit.metadata.json b/parser/testdata/parse/postgres_regress/bit.metadata.json index b4f7717..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/bit.metadata.json +++ b/parser/testdata/parse/postgres_regress/bit.metadata.json @@ -1,10 +1,3 @@ { - "todo": [ - "030", - "036", - "037", - "043", - "105", - "106" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/bitmapops.metadata.json b/parser/testdata/parse/postgres_regress/bitmapops.metadata.json index e9cea49..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/bitmapops.metadata.json +++ b/parser/testdata/parse/postgres_regress/bitmapops.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "010" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/boolean.metadata.json b/parser/testdata/parse/postgres_regress/boolean.metadata.json index b0dc46d..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/boolean.metadata.json +++ b/parser/testdata/parse/postgres_regress/boolean.metadata.json @@ -1,8 +1,3 @@ { - "todo": [ - "095", - "096", - "097", - "098" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/box.metadata.json b/parser/testdata/parse/postgres_regress/box.metadata.json index fa1b208..8216c44 100644 --- a/parser/testdata/parse/postgres_regress/box.metadata.json +++ b/parser/testdata/parse/postgres_regress/box.metadata.json @@ -12,7 +12,6 @@ "054", "056", "058", - "060", "089", "092" ] diff --git a/parser/testdata/parse/postgres_regress/brin.metadata.json b/parser/testdata/parse/postgres_regress/brin.metadata.json index 85cbf8b..8825117 100644 --- a/parser/testdata/parse/postgres_regress/brin.metadata.json +++ b/parser/testdata/parse/postgres_regress/brin.metadata.json @@ -3,16 +3,11 @@ "007", "012", "024", - "038", "043", "044", "045", - "051", "052", "055", - "057", - "062", - "067", - "068" + "067" ] } diff --git a/parser/testdata/parse/postgres_regress/brin_multi.metadata.json b/parser/testdata/parse/postgres_regress/brin_multi.metadata.json index d70c61d..84717f9 100644 --- a/parser/testdata/parse/postgres_regress/brin_multi.metadata.json +++ b/parser/testdata/parse/postgres_regress/brin_multi.metadata.json @@ -1,30 +1,19 @@ { "todo": [ - "007", "011", "016", - "024", - "035", "038", "049", "050", "051", - "099", - "119", - "126", "132", - "133", "140", "141", - "142", "149", "150", - "151", "159", "160", - "161", "168", - "169", - "170" + "169" ] } diff --git a/parser/testdata/parse/postgres_regress/btree_index.metadata.json b/parser/testdata/parse/postgres_regress/btree_index.metadata.json index babec6c..8d7dbac 100644 --- a/parser/testdata/parse/postgres_regress/btree_index.metadata.json +++ b/parser/testdata/parse/postgres_regress/btree_index.metadata.json @@ -20,9 +20,6 @@ "067", "069", "075", - "076", - "087", - "092", - "096" + "087" ] } diff --git a/parser/testdata/parse/postgres_regress/case.metadata.json b/parser/testdata/parse/postgres_regress/case.metadata.json index 77463e8..bab5860 100644 --- a/parser/testdata/parse/postgres_regress/case.metadata.json +++ b/parser/testdata/parse/postgres_regress/case.metadata.json @@ -12,8 +12,6 @@ "053", "054", "055", - "060", - "063", - "064" + "060" ] } diff --git a/parser/testdata/parse/postgres_regress/char.metadata.json b/parser/testdata/parse/postgres_regress/char.metadata.json index 4346845..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/char.metadata.json +++ b/parser/testdata/parse/postgres_regress/char.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "018" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/cluster.metadata.json b/parser/testdata/parse/postgres_regress/cluster.metadata.json index 1c500d1..8ac5e04 100644 --- a/parser/testdata/parse/postgres_regress/cluster.metadata.json +++ b/parser/testdata/parse/postgres_regress/cluster.metadata.json @@ -10,18 +10,13 @@ "096", "111", "117", - "119", - "121", "123", "124", "133", - "134", "137", "140", - "143", "151", "156", - "159", "165", "175", "177", @@ -30,12 +25,6 @@ "186", "189", "193", - "195", - "198", - "199", - "200", - "201", - "202", - "203" + "195" ] } diff --git a/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json b/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json index 0a5f57d..b14dda0 100644 --- a/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json @@ -18,9 +18,7 @@ "162", "163", "165", - "166", "167", - "168", "169", "170", "172", @@ -29,24 +27,13 @@ "175", "176", "177", - "178", - "180", - "181", - "182", - "184", "186", "188", "189", "191", "192", - "196", - "197", - "198", - "199", "200", "201", - "204", - "205", "209", "213", "216", @@ -56,7 +43,6 @@ "225", "226", "228", - "233", "234", "235", "236", @@ -73,11 +59,8 @@ "475", "477", "480", - "482", "486", "487", - "496", - "499", "501" ] } diff --git a/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json b/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json index d3b07af..e96b82a 100644 --- a/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json @@ -24,26 +24,14 @@ "168", "169", "170", - "171", - "173", - "174", - "175", - "177", "179", "181", "182", "184", "185", - "189", - "190", - "191", - "192", "193", "194", - "197", - "198", "200", - "201", - "203" + "201" ] } diff --git a/parser/testdata/parse/postgres_regress/collate.metadata.json b/parser/testdata/parse/postgres_regress/collate.metadata.json index 73495be..dd35b2c 100644 --- a/parser/testdata/parse/postgres_regress/collate.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.metadata.json @@ -14,8 +14,6 @@ "120", "121", "122", - "123", - "125", "126", "134", "135", @@ -26,7 +24,6 @@ "140", "141", "142", - "143", - "144" + "143" ] } diff --git a/parser/testdata/parse/postgres_regress/collate.utf8.metadata.json b/parser/testdata/parse/postgres_regress/collate.utf8.metadata.json index 5fb5fdd..e966305 100644 --- a/parser/testdata/parse/postgres_regress/collate.utf8.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.utf8.metadata.json @@ -2,8 +2,6 @@ "todo": [ "003", "004", - "005", - "006", - "010" + "006" ] } diff --git a/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json b/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json index eecf679..4bc227a 100644 --- a/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json @@ -24,26 +24,14 @@ "139", "140", "141", - "142", - "144", - "145", - "146", - "148", "150", "152", "153", "155", "156", - "160", - "161", - "162", - "163", "164", "165", - "168", - "169", "170", - "171", - "173" + "171" ] } diff --git a/parser/testdata/parse/postgres_regress/combocid.metadata.json b/parser/testdata/parse/postgres_regress/combocid.metadata.json index 257320f..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/combocid.metadata.json +++ b/parser/testdata/parse/postgres_regress/combocid.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "062" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/compression.metadata.json b/parser/testdata/parse/postgres_regress/compression.metadata.json index 053c2b8..1e62a21 100644 --- a/parser/testdata/parse/postgres_regress/compression.metadata.json +++ b/parser/testdata/parse/postgres_regress/compression.metadata.json @@ -1,13 +1,9 @@ { "todo": [ - "018", "025", - "033", "035", "036", "037", - "073", - "075", - "087" + "073" ] } diff --git a/parser/testdata/parse/postgres_regress/constraints.metadata.json b/parser/testdata/parse/postgres_regress/constraints.metadata.json index 5cb8089..bf96b8f 100644 --- a/parser/testdata/parse/postgres_regress/constraints.metadata.json +++ b/parser/testdata/parse/postgres_regress/constraints.metadata.json @@ -1,40 +1,8 @@ { "todo": [ - "018", - "063", - "071", - "076", - "083", - "096", - "115", - "124", - "137", - "148", - "157", - "210", - "215", - "225", - "231", - "237", - "257", "268", - "269", - "291", "295", - "296", - "297", - "298", - "299", - "300", - "301", - "302", - "303", - "307", - "308", - "310", - "311", "314", - "315", - "316" + "315" ] } diff --git a/parser/testdata/parse/postgres_regress/conversion.metadata.json b/parser/testdata/parse/postgres_regress/conversion.metadata.json index bd160ed..1c91e5a 100644 --- a/parser/testdata/parse/postgres_regress/conversion.metadata.json +++ b/parser/testdata/parse/postgres_regress/conversion.metadata.json @@ -6,11 +6,6 @@ "007", "008", "009", - "010", - "011", - "012", - "013", - "014", "017" ] } diff --git a/parser/testdata/parse/postgres_regress/copy.metadata.json b/parser/testdata/parse/postgres_regress/copy.metadata.json index 4d956b5..9081053 100644 --- a/parser/testdata/parse/postgres_regress/copy.metadata.json +++ b/parser/testdata/parse/postgres_regress/copy.metadata.json @@ -2,15 +2,7 @@ "todo": [ "037", "038", - "043", - "047", "049", - "050", - "054", - "055", - "056", - "076", - "081", - "087" + "050" ] } diff --git a/parser/testdata/parse/postgres_regress/copydml.metadata.json b/parser/testdata/parse/postgres_regress/copydml.metadata.json index 46b41c7..325e762 100644 --- a/parser/testdata/parse/postgres_regress/copydml.metadata.json +++ b/parser/testdata/parse/postgres_regress/copydml.metadata.json @@ -1,35 +1,20 @@ { "todo": [ "013", - "015", "016", - "018", "019", - "021", "022", - "024", "025", - "027", "028", - "030", "031", - "033", "034", - "036", "037", - "039", "040", - "042", "043", - "045", "046", - "048", "049", - "051", "052", "053", - "054", - "058", - "059" + "054" ] } diff --git a/parser/testdata/parse/postgres_regress/copyselect.metadata.json b/parser/testdata/parse/postgres_regress/copyselect.metadata.json index 949c5c7..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/copyselect.metadata.json +++ b/parser/testdata/parse/postgres_regress/copyselect.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "021" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/create_aggregate.metadata.json b/parser/testdata/parse/postgres_regress/create_aggregate.metadata.json index 4fbedec..820dc6d 100644 --- a/parser/testdata/parse/postgres_regress/create_aggregate.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_aggregate.metadata.json @@ -1,16 +1,10 @@ { "todo": [ "001", - "002", - "003", - "004", "005", "006", "007", "008", - "009", - "010", - "011", "012", "013", "014", @@ -20,11 +14,9 @@ "018", "019", "020", - "021", "022", "023", "024", - "025", "026", "027", "028", @@ -39,7 +31,6 @@ "037", "038", "039", - "041", "042", "043", "045", @@ -47,8 +38,6 @@ "048", "049", "050", - "051", - "052", "053", "054", "055", diff --git a/parser/testdata/parse/postgres_regress/create_am.metadata.json b/parser/testdata/parse/postgres_regress/create_am.metadata.json index 47a1121..89fe5f4 100644 --- a/parser/testdata/parse/postgres_regress/create_am.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_am.metadata.json @@ -4,24 +4,15 @@ "002", "003", "005", - "008", "012", "014", "016", - "019", - "022", "027", "028", "029", - "043", - "079", - "080", - "083", - "119", "132", "133", "134", - "141", - "142" + "141" ] } diff --git a/parser/testdata/parse/postgres_regress/create_cast.metadata.json b/parser/testdata/parse/postgres_regress/create_cast.metadata.json index 1d443af..ed2f6da 100644 --- a/parser/testdata/parse/postgres_regress/create_cast.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_cast.metadata.json @@ -6,13 +6,10 @@ "004", "005", "007", - "010", "011", "014", - "016", "017", "018", - "020", "021", "022" ] diff --git a/parser/testdata/parse/postgres_regress/create_function_sql.metadata.json b/parser/testdata/parse/postgres_regress/create_function_sql.metadata.json index 4c9a745..db518e6 100644 --- a/parser/testdata/parse/postgres_regress/create_function_sql.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_function_sql.metadata.json @@ -44,34 +44,23 @@ "072", "073", "074", - "089", "093", - "095", "096", "097", "098", - "100", "101", "102", "104", "105", "107", - "112", - "113", - "114", "115", - "116", - "117", - "118", "119", "120", "121", - "122", "125", "127", "128", "131", - "132", "133", "135", "137", @@ -83,7 +72,6 @@ "149", "150", "151", - "152", - "153" + "152" ] } diff --git a/parser/testdata/parse/postgres_regress/create_index.metadata.json b/parser/testdata/parse/postgres_regress/create_index.metadata.json index 714f0a7..09e1f0b 100644 --- a/parser/testdata/parse/postgres_regress/create_index.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_index.metadata.json @@ -1,8 +1,5 @@ { "todo": [ - "017", - "018", - "019", "027", "028", "065", @@ -30,47 +27,13 @@ "117", "126", "140", - "153", - "169", - "173", "176", - "178", - "190", - "198", - "206", - "223", "239", - "241", - "242", "246", "247", "249", "250", - "254", - "255", - "264", - "265", - "266", - "267", - "268", - "270", - "272", - "273", - "274", - "275", - "276", - "277", - "284", - "289", - "293", - "297", - "302", - "315", - "324", - "332", "333", - "340", - "354", "355", "357", "361", @@ -96,7 +59,6 @@ "396", "397", "399", - "400", "402", "403", "415", @@ -104,16 +66,11 @@ "420", "421", "422", - "426", "428", "430", - "432", "436", - "438", "443", - "445", "449", - "450", "468", "469", "471", @@ -126,21 +83,14 @@ "482", "483", "485", - "487", "489", - "491", "492", "493", "494", "495", "497", "500", - "502", "504", - "506", - "507", - "508", - "509", "511", "513", "514", @@ -151,17 +101,12 @@ "519", "520", "521", - "522", - "523", "527", - "528", "530", "531", - "532", "539", "544", "548", - "554", "558", "559", "561", @@ -169,7 +114,6 @@ "566", "571", "575", - "577", "578", "592", "595", @@ -179,7 +123,6 @@ "604", "606", "607", - "609", - "611" + "609" ] } diff --git a/parser/testdata/parse/postgres_regress/create_operator.metadata.json b/parser/testdata/parse/postgres_regress/create_operator.metadata.json index 2dc979b..21d218d 100644 --- a/parser/testdata/parse/postgres_regress/create_operator.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_operator.metadata.json @@ -3,12 +3,6 @@ "001", "002", "003", - "005", - "006", - "007", - "008", - "009", - "010", "011", "012", "017", diff --git a/parser/testdata/parse/postgres_regress/create_procedure.metadata.json b/parser/testdata/parse/postgres_regress/create_procedure.metadata.json index 54d49ff..5780ef5 100644 --- a/parser/testdata/parse/postgres_regress/create_procedure.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_procedure.metadata.json @@ -9,7 +9,6 @@ "025", "027", "028", - "030", "031", "038", "040", @@ -21,12 +20,6 @@ "058", "064", "066", - "067", - "068", - "070", - "071", - "074", - "075", "079", "080", "081", @@ -35,20 +28,12 @@ "084", "085", "086", - "087", - "088", - "089", "091", "092", "096", "100", "101", "102", - "103", - "104", - "105", - "106", - "107", - "108" + "103" ] } diff --git a/parser/testdata/parse/postgres_regress/create_role.metadata.json b/parser/testdata/parse/postgres_regress/create_role.metadata.json index 4c9193c..a081fde 100644 --- a/parser/testdata/parse/postgres_regress/create_role.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_role.metadata.json @@ -3,27 +3,16 @@ "003", "032", "046", - "050", "051", - "053", "054", "060", - "062", - "064", - "066", - "068", "071", "074", "077", "080", "081", "083", - "086", "108", - "126", - "127", - "128", - "129", - "130" + "126" ] } diff --git a/parser/testdata/parse/postgres_regress/create_schema.metadata.json b/parser/testdata/parse/postgres_regress/create_schema.metadata.json index 7e2bdfe..0b305ec 100644 --- a/parser/testdata/parse/postgres_regress/create_schema.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_schema.metadata.json @@ -16,10 +16,7 @@ "016", "017", "019", - "020", "022", - "023", - "024", - "025" + "024" ] } diff --git a/parser/testdata/parse/postgres_regress/create_table.metadata.json b/parser/testdata/parse/postgres_regress/create_table.metadata.json index fc84bf9..3214b23 100644 --- a/parser/testdata/parse/postgres_regress/create_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_table.metadata.json @@ -3,69 +3,20 @@ "002", "007", "008", - "010", - "018", - "022", - "028", "032", - "036", - "038", - "041", - "052", - "055", "058", - "060", - "063", "066", - "068", "073", - "075", "076", "081", - "083", "089", - "092", - "097", "101", - "102", "106", - "107", "108", - "111", - "112", "114", - "117", - "118", - "141", - "146", - "150", - "180", - "183", - "244", - "248", - "252", - "258", - "261", - "265", "266", "267", - "272", - "273", - "274", - "275", - "277", - "278", - "280", - "284", - "288", - "294", - "295", "297", - "298", - "300", - "301", - "307", - "316", - "326" + "298" ] } diff --git a/parser/testdata/parse/postgres_regress/create_table_like.metadata.json b/parser/testdata/parse/postgres_regress/create_table_like.metadata.json index 79d66de..672522e 100644 --- a/parser/testdata/parse/postgres_regress/create_table_like.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_table_like.metadata.json @@ -1,37 +1,8 @@ { "todo": [ - "019", - "025", - "035", - "045", "063", - "066", - "067", - "068", - "072", - "080", - "081", - "083", "087", "088", - "089", - "090", - "091", - "092", - "093", - "094", - "095", - "099", - "104", - "105", - "106", - "122", - "128", - "132", - "139", - "141", - "142", - "143", - "144" + "139" ] } diff --git a/parser/testdata/parse/postgres_regress/create_type.metadata.json b/parser/testdata/parse/postgres_regress/create_type.metadata.json index 8c35676..f500966 100644 --- a/parser/testdata/parse/postgres_regress/create_type.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_type.metadata.json @@ -8,8 +8,6 @@ "006", "007", "008", - "009", - "010", "011", "012", "013", @@ -22,27 +20,14 @@ "023", "024", "025", - "026", "027", "028", "029", - "031", - "032", - "033", - "034", - "035", - "036", "037", - "038", - "039", "040", "041", "042", "043", - "044", - "045", - "046", - "047", "062", "063", "068", @@ -55,9 +40,6 @@ "075", "076", "077", - "078", - "083", - "084", - "085" + "078" ] } diff --git a/parser/testdata/parse/postgres_regress/create_view.metadata.json b/parser/testdata/parse/postgres_regress/create_view.metadata.json index 7eb2567..9fc20b1 100644 --- a/parser/testdata/parse/postgres_regress/create_view.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_view.metadata.json @@ -2,14 +2,8 @@ "todo": [ "001", "004", - "009", - "010", - "011", - "029", - "030", "031", "039", - "109", "117", "118", "119", @@ -26,7 +20,6 @@ "237", "241", "244", - "249", "255", "257", "271", @@ -34,8 +27,6 @@ "280", "282", "295", - "296", - "306", - "307" + "296" ] } diff --git a/parser/testdata/parse/postgres_regress/database.metadata.json b/parser/testdata/parse/postgres_regress/database.metadata.json index 224ee3d..0da1d06 100644 --- a/parser/testdata/parse/postgres_regress/database.metadata.json +++ b/parser/testdata/parse/postgres_regress/database.metadata.json @@ -6,8 +6,6 @@ "004", "005", "008", - "012", - "013", - "014" + "012" ] } diff --git a/parser/testdata/parse/postgres_regress/delete.metadata.json b/parser/testdata/parse/postgres_regress/delete.metadata.json index e9cea49..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/delete.metadata.json +++ b/parser/testdata/parse/postgres_regress/delete.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "010" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/dependency.metadata.json b/parser/testdata/parse/postgres_regress/dependency.metadata.json index 9decfc4..733b0ba 100644 --- a/parser/testdata/parse/postgres_regress/dependency.metadata.json +++ b/parser/testdata/parse/postgres_regress/dependency.metadata.json @@ -6,24 +6,14 @@ "012", "014", "016", - "020", - "026", - "027", - "028", - "029", - "030", "032", "035", - "037", "038", "039", "043", "044", "045", "046", - "051", - "054", - "057", - "060" + "051" ] } diff --git a/parser/testdata/parse/postgres_regress/domain.metadata.json b/parser/testdata/parse/postgres_regress/domain.metadata.json index 4fa0313..981c69c 100644 --- a/parser/testdata/parse/postgres_regress/domain.metadata.json +++ b/parser/testdata/parse/postgres_regress/domain.metadata.json @@ -1,36 +1,20 @@ { "todo": [ "001", - "002", "003", - "004", - "005", - "006", "007", "008", "009", "010", - "023", - "024", - "025", - "026", - "027", "028", "029", - "038", - "039", "040", "041", - "063", - "064", - "065", - "066", "067", "068", "069", "071", "072", - "084", "085", "088", "090", @@ -38,10 +22,8 @@ "094", "097", "100", - "102", "106", "109", - "112", "113", "117", "118", @@ -55,8 +37,6 @@ "135", "137", "140", - "142", - "143", "144", "147", "148", @@ -67,17 +47,9 @@ "160", "162", "164", - "166", - "167", - "168", - "169", - "170", - "171", "172", "173", "174", - "188", - "189", "190", "195", "197", @@ -87,37 +59,24 @@ "212", "213", "216", - "217", "220", - "221", "222", "225", - "226", - "227", "228", "231", - "232", - "233", "234", "237", - "238", - "239", "240", "241", "246", "247", - "248", - "249", - "250", "251", "254", "255", "258", "259", - "262", "263", "272", - "275", "276", "277", "279", @@ -125,23 +84,15 @@ "283", "285", "287", - "289", - "290", "291", "292", - "299", - "300", - "301", "302", "303", "304", - "305", "306", "307", "308", - "309", "310", - "311", - "315" + "311" ] } diff --git a/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json b/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json index 61c2f6f..dd3b31f 100644 --- a/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json +++ b/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json @@ -1,148 +1,16 @@ { "todo": [ - "001", - "002", - "004", - "005", - "007", - "008", - "009", - "010", - "012", - "013", - "014", - "015", - "017", - "018", - "019", - "020", - "022", - "023", - "024", - "025", "026", - "027", - "028", - "029", - "030", "031", - "032", - "033", - "046", - "047", - "048", "049", - "050", - "051", - "052", - "053", - "054", "055", - "056", - "057", - "058", - "059", - "060", "061", - "062", - "063", - "064", - "065", - "066", - "067", - "068", - "069", - "070", - "071", - "072", - "073", - "074", "075", - "076", - "077", - "078", - "079", - "080", - "081", - "082", - "083", - "084", - "085", - "086", "087", - "088", - "089", - "090", - "091", - "092", - "093", - "094", "095", - "096", - "097", - "098", - "099", - "100", - "101", - "102", - "103", - "104", - "105", - "106", - "107", - "108", - "109", - "110", - "111", - "112", - "113", - "114", - "115", - "116", - "117", - "118", - "119", - "120", - "121", - "122", - "123", - "124", - "125", - "126", - "127", - "128", - "129", - "130", - "131", - "132", - "133", - "134", - "135", - "136", - "137", - "138", - "139", - "140", - "141", - "142", - "143", - "144", "145", "146", - "147", - "148", - "149", - "150", "151", - "152", - "153", - "154", - "155", - "156", - "157", - "158", - "159", - "160", - "161" + "152" ] } diff --git a/parser/testdata/parse/postgres_regress/drop_operator.metadata.json b/parser/testdata/parse/postgres_regress/drop_operator.metadata.json index b932793..e6e214a 100644 --- a/parser/testdata/parse/postgres_regress/drop_operator.metadata.json +++ b/parser/testdata/parse/postgres_regress/drop_operator.metadata.json @@ -2,11 +2,7 @@ "todo": [ "001", "002", - "003", - "006", "007", - "008", - "009", - "012" + "008" ] } diff --git a/parser/testdata/parse/postgres_regress/enum.metadata.json b/parser/testdata/parse/postgres_regress/enum.metadata.json index 0dfdd82..09ceb3b 100644 --- a/parser/testdata/parse/postgres_regress/enum.metadata.json +++ b/parser/testdata/parse/postgres_regress/enum.metadata.json @@ -43,16 +43,10 @@ "054", "055", "056", - "085", - "088", "091", - "095", "109", "111", - "113", - "115", "122", - "124", "125", "127", "128", @@ -61,16 +55,11 @@ "144", "145", "149", - "152", "154", "155", "159", "160", "161", - "162", - "165", - "166", - "167", - "168" + "162" ] } diff --git a/parser/testdata/parse/postgres_regress/equivclass.metadata.json b/parser/testdata/parse/postgres_regress/equivclass.metadata.json index 50c8160..46d84cb 100644 --- a/parser/testdata/parse/postgres_regress/equivclass.metadata.json +++ b/parser/testdata/parse/postgres_regress/equivclass.metadata.json @@ -42,7 +42,6 @@ "049", "050", "053", - "056", "057", "060", "064", diff --git a/parser/testdata/parse/postgres_regress/errors.metadata.json b/parser/testdata/parse/postgres_regress/errors.metadata.json index e3a13d4..c0c5863 100644 --- a/parser/testdata/parse/postgres_regress/errors.metadata.json +++ b/parser/testdata/parse/postgres_regress/errors.metadata.json @@ -1,7 +1,5 @@ { "todo": [ - "013", - "014", "016", "017", "018", @@ -12,37 +10,6 @@ "023", "026", "027", - "028", - "029", - "030", - "031", - "032", - "033", - "034", - "035", - "036", - "037", - "038", - "039", - "040", - "041", - "042", - "043", - "044", - "045", - "046", - "047", - "048", - "049", - "050", - "051", - "052", - "053", - "054", - "055", - "056", - "057", - "058", "078", "079", "080", diff --git a/parser/testdata/parse/postgres_regress/event_trigger.metadata.json b/parser/testdata/parse/postgres_regress/event_trigger.metadata.json index 753fb08..03e28af 100644 --- a/parser/testdata/parse/postgres_regress/event_trigger.metadata.json +++ b/parser/testdata/parse/postgres_regress/event_trigger.metadata.json @@ -17,7 +17,6 @@ "016", "017", "018", - "019", "022", "024", "026", @@ -26,12 +25,8 @@ "035", "037", "039", - "040", - "041", "042", - "043", "044", - "045", "046", "047", "048", @@ -40,23 +35,12 @@ "052", "053", "054", - "055", - "057", - "058", - "059", - "060", "073", "074", "079", "080", "081", "082", - "084", - "086", - "088", - "090", - "093", - "094", "095", "096", "097", @@ -64,27 +48,18 @@ "099", "109", "110", - "111", - "112", - "113", "114", "115", "117", "118", - "119", "121", "122", - "123", - "124", "125", - "126", - "127", "129", "130", "133", "135", "136", - "139", "140", "143", "145", @@ -93,9 +68,6 @@ "150", "153", "155", - "156", - "157", - "158", "159", "160", "161", @@ -109,17 +81,14 @@ "171", "172", "173", - "174", "175", "176", "178", "179", "182", "183", - "184", "185", "186", - "187", "189", "190", "192", @@ -128,14 +97,6 @@ "196", "197", "198", - "199", - "200", - "201", - "202", - "203", - "204", - "205", - "206", "209", "210", "211", @@ -145,15 +106,9 @@ "215", "216", "217", - "218", - "220", - "221", - "222", "223", "224", "226", - "227", - "228", - "230" + "228" ] } diff --git a/parser/testdata/parse/postgres_regress/event_trigger_login.metadata.json b/parser/testdata/parse/postgres_regress/event_trigger_login.metadata.json index c2a2541..8c9f449 100644 --- a/parser/testdata/parse/postgres_regress/event_trigger_login.metadata.json +++ b/parser/testdata/parse/postgres_regress/event_trigger_login.metadata.json @@ -3,9 +3,6 @@ "002", "003", "004", - "005", - "009", - "010", - "011" + "005" ] } diff --git a/parser/testdata/parse/postgres_regress/explain.metadata.json b/parser/testdata/parse/postgres_regress/explain.metadata.json index e942496..1b18fd1 100644 --- a/parser/testdata/parse/postgres_regress/explain.metadata.json +++ b/parser/testdata/parse/postgres_regress/explain.metadata.json @@ -2,7 +2,6 @@ "todo": [ "001", "002", - "035", "044" ] } diff --git a/parser/testdata/parse/postgres_regress/fast_default.metadata.json b/parser/testdata/parse/postgres_regress/fast_default.metadata.json index cd0f34d..577473b 100644 --- a/parser/testdata/parse/postgres_regress/fast_default.metadata.json +++ b/parser/testdata/parse/postgres_regress/fast_default.metadata.json @@ -4,67 +4,31 @@ "006", "007", "009", - "045", "046", - "066", "067", "068", "069", "070", - "081", - "082", - "083", - "084", - "085", - "086", "094", - "097", - "098", "107", "109", "113", "115", "117", - "121", - "138", "139", "144", - "148", "153", - "157", "162", - "166", "171", - "175", "180", - "184", "189", - "193", "198", - "202", "207", - "211", "223", "230", "243", "244", "245", - "247", - "249", - "250", - "251", - "252", - "253", - "254", - "255", - "256", - "257", - "258", - "259", - "260", - "261", - "262", - "263", - "264" + "247" ] } diff --git a/parser/testdata/parse/postgres_regress/float4.metadata.json b/parser/testdata/parse/postgres_regress/float4.metadata.json index ae4e66b..9b7c4a0 100644 --- a/parser/testdata/parse/postgres_regress/float4.metadata.json +++ b/parser/testdata/parse/postgres_regress/float4.metadata.json @@ -7,7 +7,6 @@ "094", "095", "096", - "097", - "100" + "097" ] } diff --git a/parser/testdata/parse/postgres_regress/float8.metadata.json b/parser/testdata/parse/postgres_regress/float8.metadata.json index 93682db..dc25d2c 100644 --- a/parser/testdata/parse/postgres_regress/float8.metadata.json +++ b/parser/testdata/parse/postgres_regress/float8.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "139", "159", "160", "161", @@ -8,7 +7,6 @@ "163", "164", "165", - "166", - "169" + "166" ] } diff --git a/parser/testdata/parse/postgres_regress/foreign_data.metadata.json b/parser/testdata/parse/postgres_regress/foreign_data.metadata.json index e769c4f..712cad4 100644 --- a/parser/testdata/parse/postgres_regress/foreign_data.metadata.json +++ b/parser/testdata/parse/postgres_regress/foreign_data.metadata.json @@ -2,24 +2,19 @@ "todo": [ "001", "012", - "013", "014", "018", "019", "020", - "021", "022", - "023", "024", "025", - "026", "028", "030", "031", "032", "033", "034", - "035", "036", "037", "038", @@ -41,19 +36,11 @@ "059", "060", "061", - "062", - "063", - "064", - "067", "070", "071", - "072", "073", "074", "075", - "076", - "078", - "080", "081", "082", "083", @@ -98,15 +85,8 @@ "139", "142", "143", - "144", - "145", - "147", - "148", "150", - "152", "154", - "155", - "156", "157", "158", "159", @@ -131,51 +111,28 @@ "183", "184", "185", - "187", - "188", - "189", - "190", - "191", - "192", "193", - "195", - "197", "199", "200", "201", "202", "204", - "205", "206", "207", - "208", - "209", "212", "214", - "218", "221", "222", - "224", "227", "228", - "230", - "231", "235", "236", - "240", "243", "244", - "246", - "247", - "248", - "249", - "250", - "251", "263", "264", "265", "274", - "275", "288", "290", "291", @@ -185,44 +142,36 @@ "311", "312", "313", - "328", "338", "346", "348", "349", - "350", "351", "352", "353", "355", "356", "357", - "358", "359", "360", "361", "362", - "363", "364", "365", "366", - "367", "369", "370", "372", "373", - "374", "375", "376", "377", "378", - "379", "380", "381", "382", "383", "384", - "385", "387", "388", "390", @@ -230,17 +179,14 @@ "392", "393", "394", - "395", "397", "398", "400", "401", "402", - "403", "405", "406", "407", - "411", "412", "413", "414", @@ -248,54 +194,26 @@ "416", "417", "418", - "421", - "422", - "423", - "424", - "425", "427", - "428", "429", "432", "442", "443", "444", - "457", - "458", "459", "468", "469", "470", "471", - "472", "473", "474", "475", "476", - "477", - "478", - "479", - "480", - "481", - "482", "484", - "485", "486", - "488", "489", - "505", - "506", "508", "509", - "511", - "512", - "513", - "515", - "516", - "517", - "518", - "522", - "525", - "526" + "522" ] } diff --git a/parser/testdata/parse/postgres_regress/foreign_key.metadata.json b/parser/testdata/parse/postgres_regress/foreign_key.metadata.json index ef8660d..adef036 100644 --- a/parser/testdata/parse/postgres_regress/foreign_key.metadata.json +++ b/parser/testdata/parse/postgres_regress/foreign_key.metadata.json @@ -1,127 +1,30 @@ { "todo": [ - "018", - "019", - "022", - "023", - "024", "049", "050", - "053", - "054", - "080", - "081", - "082", - "1005", - "1018", "1019", - "1023", "1024", - "103", - "1030", "1031", - "1037", "1038", - "104", - "1075", "1076", - "110", - "1103", "1104", "1105", "1106", "1107", "1108", "1109", - "111", "1110", - "1113", "1114", - "1135", - "1153", - "131", - "132", - "142", - "143", - "167", - "168", - "193", - "194", - "223", - "224", - "235", - "236", - "242", - "245", - "246", - "256", - "258", - "266", - "267", - "275", - "277", - "278", - "280", - "282", - "298", - "310", - "311", - "312", - "324", - "325", - "333", - "334", - "340", - "341", - "350", - "361", - "370", - "376", - "391", "426", "427", - "476", - "485", "488", "489", - "497", - "502", - "526", - "536", - "575", "581", - "583", - "605", - "644", - "648", - "651", - "655", - "681", - "686", "688", - "698", "700", "729", "740", "750", - "757", - "768", - "829", - "846", - "847", - "848", - "849", - "850", - "852", - "853", - "854", - "856", - "915", - "931", - "944", - "959", - "960", - "979", - "992" + "757" ] } diff --git a/parser/testdata/parse/postgres_regress/functional_deps.metadata.json b/parser/testdata/parse/postgres_regress/functional_deps.metadata.json index 94506f6..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/functional_deps.metadata.json +++ b/parser/testdata/parse/postgres_regress/functional_deps.metadata.json @@ -1,8 +1,3 @@ { - "todo": [ - "026", - "030", - "033", - "036" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/generated.metadata.json b/parser/testdata/parse/postgres_regress/generated.metadata.json index a3d4062..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/generated.metadata.json +++ b/parser/testdata/parse/postgres_regress/generated.metadata.json @@ -1,12 +1,3 @@ { - "todo": [ - "013", - "042", - "052", - "066", - "077", - "089", - "092", - "102" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/gin.metadata.json b/parser/testdata/parse/postgres_regress/gin.metadata.json index 8a35f5e..aee94eb 100644 --- a/parser/testdata/parse/postgres_regress/gin.metadata.json +++ b/parser/testdata/parse/postgres_regress/gin.metadata.json @@ -14,8 +14,6 @@ "042", "044", "046", - "049", - "055", - "059" + "049" ] } diff --git a/parser/testdata/parse/postgres_regress/gist.metadata.json b/parser/testdata/parse/postgres_regress/gist.metadata.json index 8904440..58aa003 100644 --- a/parser/testdata/parse/postgres_regress/gist.metadata.json +++ b/parser/testdata/parse/postgres_regress/gist.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "006", "014", "016", "019", @@ -8,18 +7,13 @@ "026", "028", "030", - "032", "034", "036", "038", - "040", "042", - "044", "046", "048", "050", - "052", - "058", - "062" + "052" ] } diff --git a/parser/testdata/parse/postgres_regress/groupingsets.metadata.json b/parser/testdata/parse/postgres_regress/groupingsets.metadata.json index 6d29d5d..c3b51b7 100644 --- a/parser/testdata/parse/postgres_regress/groupingsets.metadata.json +++ b/parser/testdata/parse/postgres_regress/groupingsets.metadata.json @@ -32,8 +32,6 @@ "146", "153", "157", - "163", - "164", "169", "171" ] diff --git a/parser/testdata/parse/postgres_regress/guc.metadata.json b/parser/testdata/parse/postgres_regress/guc.metadata.json index 2946f44..bf7620e 100644 --- a/parser/testdata/parse/postgres_regress/guc.metadata.json +++ b/parser/testdata/parse/postgres_regress/guc.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "170", "174", "176", "178", @@ -9,7 +8,6 @@ "185", "188", "199", - "201", - "214" + "201" ] } diff --git a/parser/testdata/parse/postgres_regress/hash_func.metadata.json b/parser/testdata/parse/postgres_regress/hash_func.metadata.json index c1cac8f..0e3b015 100644 --- a/parser/testdata/parse/postgres_regress/hash_func.metadata.json +++ b/parser/testdata/parse/postgres_regress/hash_func.metadata.json @@ -1,10 +1,7 @@ { "todo": [ "026", - "028", "032", - "034", - "035", - "038" + "035" ] } diff --git a/parser/testdata/parse/postgres_regress/hash_index.metadata.json b/parser/testdata/parse/postgres_regress/hash_index.metadata.json index 17805cc..c415838 100644 --- a/parser/testdata/parse/postgres_regress/hash_index.metadata.json +++ b/parser/testdata/parse/postgres_regress/hash_index.metadata.json @@ -6,12 +6,8 @@ "012", "059", "061", - "062", "070", "078", - "086", - "087", - "091", - "095" + "086" ] } diff --git a/parser/testdata/parse/postgres_regress/hash_part.metadata.json b/parser/testdata/parse/postgres_regress/hash_part.metadata.json index 718acae..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/hash_part.metadata.json +++ b/parser/testdata/parse/postgres_regress/hash_part.metadata.json @@ -1,7 +1,3 @@ { - "todo": [ - "026", - "027", - "028" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/horology.metadata.json b/parser/testdata/parse/postgres_regress/horology.metadata.json index ed0043a..ac1f11d 100644 --- a/parser/testdata/parse/postgres_regress/horology.metadata.json +++ b/parser/testdata/parse/postgres_regress/horology.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "201", "216", "218", "220", diff --git a/parser/testdata/parse/postgres_regress/identity.metadata.json b/parser/testdata/parse/postgres_regress/identity.metadata.json index bf0e9d2..479a298 100644 --- a/parser/testdata/parse/postgres_regress/identity.metadata.json +++ b/parser/testdata/parse/postgres_regress/identity.metadata.json @@ -1,23 +1,11 @@ { "todo": [ - "051", - "097", "106", "108", "144", - "149", "155", "157", - "161", "162", - "164", - "180", - "209", - "242", - "243", - "251", - "253", - "264", - "265" + "180" ] } diff --git a/parser/testdata/parse/postgres_regress/incremental_sort.metadata.json b/parser/testdata/parse/postgres_regress/incremental_sort.metadata.json index ef0aeb6..d950629 100644 --- a/parser/testdata/parse/postgres_regress/incremental_sort.metadata.json +++ b/parser/testdata/parse/postgres_regress/incremental_sort.metadata.json @@ -30,13 +30,11 @@ "068", "070", "072", - "075", "084", "086", "088", "090", "091", - "092", "100", "101", "102", diff --git a/parser/testdata/parse/postgres_regress/index_including.metadata.json b/parser/testdata/parse/postgres_regress/index_including.metadata.json index 8ed0541..b4a1c3e 100644 --- a/parser/testdata/parse/postgres_regress/index_including.metadata.json +++ b/parser/testdata/parse/postgres_regress/index_including.metadata.json @@ -1,26 +1,11 @@ { "todo": [ - "032", "039", "042", - "044", - "050", - "057", - "063", - "069", - "075", - "082", - "089", - "094", "099", - "103", - "112", - "121", "124", "125", - "126", "130", - "132", - "135" + "132" ] } diff --git a/parser/testdata/parse/postgres_regress/index_including_gist.metadata.json b/parser/testdata/parse/postgres_regress/index_including_gist.metadata.json index 55ce952..fcbbabc 100644 --- a/parser/testdata/parse/postgres_regress/index_including_gist.metadata.json +++ b/parser/testdata/parse/postgres_regress/index_including_gist.metadata.json @@ -1,17 +1,10 @@ { "todo": [ "007", - "009", "016", - "018", - "023", "028", - "032", - "039", "043", "044", - "045", - "049", - "050" + "049" ] } diff --git a/parser/testdata/parse/postgres_regress/indexing.metadata.json b/parser/testdata/parse/postgres_regress/indexing.metadata.json index 13f8404..a15cc17 100644 --- a/parser/testdata/parse/postgres_regress/indexing.metadata.json +++ b/parser/testdata/parse/postgres_regress/indexing.metadata.json @@ -1,88 +1,8 @@ { "todo": [ - "005", - "011", - "014", - "018", - "023", "028", - "029", - "041", - "047", - "051", - "052", - "053", - "056", - "058", - "062", - "063", - "065", - "084", - "094", - "109", - "121", - "133", - "146", - "147", - "148", - "150", - "164", - "166", - "174", - "184", - "197", - "208", - "211", - "230", - "241", - "254", - "266", - "276", - "286", - "289", - "292", - "298", - "300", - "302", - "304", - "308", - "311", - "318", - "322", - "325", - "328", - "331", - "334", - "337", - "340", - "343", - "346", - "355", - "358", - "362", - "367", - "374", - "375", - "380", - "385", - "391", - "400", - "410", - "417", - "424", - "440", "445", - "446", "448", - "449", - "451", - "452", - "454", - "510", - "516", - "525", - "534", - "544", - "560" + "451" ] } diff --git a/parser/testdata/parse/postgres_regress/indirect_toast.metadata.json b/parser/testdata/parse/postgres_regress/indirect_toast.metadata.json index a2ec601..8a4a039 100644 --- a/parser/testdata/parse/postgres_regress/indirect_toast.metadata.json +++ b/parser/testdata/parse/postgres_regress/indirect_toast.metadata.json @@ -4,8 +4,6 @@ "014", "016", "017", - "024", - "026", - "027" + "024" ] } diff --git a/parser/testdata/parse/postgres_regress/inet.metadata.json b/parser/testdata/parse/postgres_regress/inet.metadata.json index dbea2be..1a30c44 100644 --- a/parser/testdata/parse/postgres_regress/inet.metadata.json +++ b/parser/testdata/parse/postgres_regress/inet.metadata.json @@ -1,14 +1,10 @@ { "todo": [ - "001", "038", "040", "042", "044", - "047", "061", - "064", - "078", - "081" + "078" ] } diff --git a/parser/testdata/parse/postgres_regress/inherit.metadata.json b/parser/testdata/parse/postgres_regress/inherit.metadata.json index ccf2607..aa0b911 100644 --- a/parser/testdata/parse/postgres_regress/inherit.metadata.json +++ b/parser/testdata/parse/postgres_regress/inherit.metadata.json @@ -3,82 +3,36 @@ "084", "085", "086", - "088", - "089", "093", "095", - "098", "134", - "135", - "145", - "146", - "153", "155", "160", "161", - "168", "175", "176", - "177", - "178", - "179", "182", - "186", - "187", - "188", - "189", - "213", - "214", - "218", - "219", - "226", - "227", - "228", - "241", - "242", - "248", "252", "253", "254", "255", - "256", - "262", "266", "268", "269", - "271", - "275", - "276", - "280", - "281", - "286", - "287", - "288", - "298", - "306", - "311", - "318", - "324", - "333", "353", "354", "355", "356", - "358", "359", - "361", "376", "378", "383", "385", "389", - "391", "397", - "399", "404", "405", "406", - "407", "411", "412", "413", @@ -87,16 +41,10 @@ "416", "417", "427", - "430", "437", - "442", - "450", "453", "454", - "464", "465", - "478", - "479", "484", "485", "486", @@ -111,8 +59,6 @@ "509", "510", "511", - "512", - "513", "522", "523", "524", @@ -121,14 +67,10 @@ "527", "528", "533", - "535", "537", - "538", "539", "540", - "541", "545", - "546", "547", "548", "555", @@ -136,26 +78,19 @@ "559", "562", "563", - "564", "566", "567", "568", "569", - "570", - "573", "578", "580", - "582", "587", - "588", "595", "596", "597", "598", - "599", "604", "605", - "606", "614", "616", "617", @@ -165,8 +100,6 @@ "623", "625", "626", - "628", - "630", - "677" + "628" ] } diff --git a/parser/testdata/parse/postgres_regress/insert.metadata.json b/parser/testdata/parse/postgres_regress/insert.metadata.json index 35173f4..eeeaa12 100644 --- a/parser/testdata/parse/postgres_regress/insert.metadata.json +++ b/parser/testdata/parse/postgres_regress/insert.metadata.json @@ -1,49 +1,25 @@ { "todo": [ - "017", - "025", "026", "044", "045", "046", - "047", - "048", "049", "050", "076", "077", "078", - "079", - "080", - "081", - "082", - "083", "084", "085", - "092", - "093", - "094", - "095", - "126", - "191", - "192", - "199", "215", "216", - "218", - "219", - "224", "242", "243", - "245", - "285", "289", "290", "294", "299", "300", - "302", - "332", "335", "336", "341", @@ -51,15 +27,8 @@ "343", "347", "348", - "350", - "351", - "352", "357", "358", - "359", - "365", - "366", - "378", - "387" + "359" ] } diff --git a/parser/testdata/parse/postgres_regress/insert_conflict.metadata.json b/parser/testdata/parse/postgres_regress/insert_conflict.metadata.json index bb39d25..d4e8f23 100644 --- a/parser/testdata/parse/postgres_regress/insert_conflict.metadata.json +++ b/parser/testdata/parse/postgres_regress/insert_conflict.metadata.json @@ -13,49 +13,16 @@ "017", "018", "019", - "020", - "021", - "022", - "023", "025", "026", - "027", "029", "030", "031", "032", - "048", - "056", - "065", - "066", - "072", "077", - "081", - "082", - "088", - "089", - "097", "103", "104", - "105", - "106", - "107", - "111", - "118", - "125", - "126", - "148", - "149", - "156", - "164", - "172", - "193", - "226", - "232", - "241", "251", - "252", - "256", - "257" + "252" ] } diff --git a/parser/testdata/parse/postgres_regress/interval.metadata.json b/parser/testdata/parse/postgres_regress/interval.metadata.json index 88d3854..c586958 100644 --- a/parser/testdata/parse/postgres_regress/interval.metadata.json +++ b/parser/testdata/parse/postgres_regress/interval.metadata.json @@ -1,8 +1,6 @@ { "todo": [ "059", - "063", - "070", "379" ] } diff --git a/parser/testdata/parse/postgres_regress/join.metadata.json b/parser/testdata/parse/postgres_regress/join.metadata.json index 596eade..4621e65 100644 --- a/parser/testdata/parse/postgres_regress/join.metadata.json +++ b/parser/testdata/parse/postgres_regress/join.metadata.json @@ -23,11 +23,6 @@ "142", "144", "149", - "153", - "154", - "155", - "156", - "157", "200", "203", "210", @@ -71,16 +66,12 @@ "348", "349", "350", - "351", "352", "353", "354", "356", - "358", - "359", "360", "361", - "362", "363", "364", "365", @@ -183,8 +174,6 @@ "587", "589", "614", - "616", - "617", "622", "623", "625", @@ -204,9 +193,6 @@ "653", "654", "655", - "656", - "657", - "658", "665", "666", "667", @@ -215,23 +201,17 @@ "670", "671", "673", - "674", "681", "682", "684", "686", - "691", - "692", - "693", "694", "696", "698", - "699", "703", "706", "712", "713", - "714", - "715" + "714" ] } diff --git a/parser/testdata/parse/postgres_regress/json.metadata.json b/parser/testdata/parse/postgres_regress/json.metadata.json index 1fd747e..c0349d2 100644 --- a/parser/testdata/parse/postgres_regress/json.metadata.json +++ b/parser/testdata/parse/postgres_regress/json.metadata.json @@ -9,13 +9,6 @@ "217", "218", "219", - "312", - "335", - "336", - "337", - "338", - "339", - "340", - "341" + "312" ] } diff --git a/parser/testdata/parse/postgres_regress/jsonb.metadata.json b/parser/testdata/parse/postgres_regress/jsonb.metadata.json index 1365521..8fe7205 100644 --- a/parser/testdata/parse/postgres_regress/jsonb.metadata.json +++ b/parser/testdata/parse/postgres_regress/jsonb.metadata.json @@ -16,22 +16,8 @@ "457", "458", "459", - "468", - "469", - "522", - "523", - "524", - "525", - "526", - "527", - "528", "570", "588", - "617", - "618", - "623", - "645", - "658", - "996" + "645" ] } diff --git a/parser/testdata/parse/postgres_regress/largeobject.metadata.json b/parser/testdata/parse/postgres_regress/largeobject.metadata.json index 23ab776..849f509 100644 --- a/parser/testdata/parse/postgres_regress/largeobject.metadata.json +++ b/parser/testdata/parse/postgres_regress/largeobject.metadata.json @@ -2,9 +2,6 @@ "todo": [ "004", "006", - "007", - "031", - "091", - "123" + "031" ] } diff --git a/parser/testdata/parse/postgres_regress/lock.metadata.json b/parser/testdata/parse/postgres_regress/lock.metadata.json index 617e618..2940f00 100644 --- a/parser/testdata/parse/postgres_regress/lock.metadata.json +++ b/parser/testdata/parse/postgres_regress/lock.metadata.json @@ -8,18 +8,6 @@ "103", "109", "115", - "116", - "117", - "118", - "119", - "120", - "121", - "122", - "123", - "124", - "125", - "126", - "127", "130" ] } diff --git a/parser/testdata/parse/postgres_regress/macaddr.metadata.json b/parser/testdata/parse/postgres_regress/macaddr.metadata.json index 1b1a6fa..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/macaddr.metadata.json +++ b/parser/testdata/parse/postgres_regress/macaddr.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "031" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/macaddr8.metadata.json b/parser/testdata/parse/postgres_regress/macaddr8.metadata.json index 900dcff..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/macaddr8.metadata.json +++ b/parser/testdata/parse/postgres_regress/macaddr8.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "067" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/maintain_every.metadata.json b/parser/testdata/parse/postgres_regress/maintain_every.metadata.json index 9a67e8d..1c0618d 100644 --- a/parser/testdata/parse/postgres_regress/maintain_every.metadata.json +++ b/parser/testdata/parse/postgres_regress/maintain_every.metadata.json @@ -1,8 +1,6 @@ { "todo": [ "007", - "009", - "011", - "014" + "011" ] } diff --git a/parser/testdata/parse/postgres_regress/matview.metadata.json b/parser/testdata/parse/postgres_regress/matview.metadata.json index c8368bb..3f23ee2 100644 --- a/parser/testdata/parse/postgres_regress/matview.metadata.json +++ b/parser/testdata/parse/postgres_regress/matview.metadata.json @@ -10,33 +10,17 @@ "047", "048", "049", - "053", - "057", - "059", - "066", - "073", - "083", - "086", - "094", "102", - "116", - "119", - "123", - "129", - "140", "143", - "147", "150", "157", "158", "161", "164", "167", - "168", "175", "176", "177", - "178", - "179" + "178" ] } diff --git a/parser/testdata/parse/postgres_regress/memoize.metadata.json b/parser/testdata/parse/postgres_regress/memoize.metadata.json index d1919d6..92965cd 100644 --- a/parser/testdata/parse/postgres_regress/memoize.metadata.json +++ b/parser/testdata/parse/postgres_regress/memoize.metadata.json @@ -2,13 +2,9 @@ "todo": [ "001", "015", - "017", "024", - "028", "034", - "037", "046", - "050", "052", "064" ] diff --git a/parser/testdata/parse/postgres_regress/merge.metadata.json b/parser/testdata/parse/postgres_regress/merge.metadata.json index 904f22e..818da23 100644 --- a/parser/testdata/parse/postgres_regress/merge.metadata.json +++ b/parser/testdata/parse/postgres_regress/merge.metadata.json @@ -1,10 +1,7 @@ { "todo": [ - "004", - "005", "018", "020", - "035", "040", "043", "070", @@ -12,7 +9,6 @@ "072", "073", "075", - "203", "204", "205", "206", @@ -29,21 +25,14 @@ "227", "229", "230", - "232", - "233", "235", "262", "320", "324", "328", "335", - "344", - "345", "349", - "350", - "363", "381", - "394", "407", "415", "419", @@ -53,31 +42,13 @@ "426", "427", "433", - "436", - "437", - "453", - "454", "459", - "462", "463", - "465", - "466", "484", "485", - "488", - "493", "501", "502", - "531", "533", - "540", - "545", - "546", - "553", - "561", - "562", - "567", - "568", - "569" + "540" ] } diff --git a/parser/testdata/parse/postgres_regress/misc.metadata.json b/parser/testdata/parse/postgres_regress/misc.metadata.json index 8c01943..0bc9b95 100644 --- a/parser/testdata/parse/postgres_regress/misc.metadata.json +++ b/parser/testdata/parse/postgres_regress/misc.metadata.json @@ -2,7 +2,6 @@ "todo": [ "001", "002", - "008", "027", "028", "029", diff --git a/parser/testdata/parse/postgres_regress/misc_functions.metadata.json b/parser/testdata/parse/postgres_regress/misc_functions.metadata.json index a3cd13c..1b97809 100644 --- a/parser/testdata/parse/postgres_regress/misc_functions.metadata.json +++ b/parser/testdata/parse/postgres_regress/misc_functions.metadata.json @@ -12,7 +12,6 @@ "097", "098", "099", - "113", - "119" + "113" ] } diff --git a/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json b/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json index e6f7d4d..2e7f395 100644 --- a/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json +++ b/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json @@ -2,50 +2,33 @@ "todo": [ "104", "373", - "455", - "505", - "510", "511", "512", - "514", "515", - "518", "519", - "521", "522", "523", - "524", "525", "526", - "527", "528", "529", "530", - "535", - "536", "537", "539", "540", "542", "543", "545", - "547", - "548", "551", - "554", "555", "556", "557", "560", "563", - "567", "568", - "571", "572", - "577", "582", "583", - "585", "589", "591", "593", diff --git a/parser/testdata/parse/postgres_regress/name.metadata.json b/parser/testdata/parse/postgres_regress/name.metadata.json index 70110f3..3b2ed2e 100644 --- a/parser/testdata/parse/postgres_regress/name.metadata.json +++ b/parser/testdata/parse/postgres_regress/name.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "022", "023" ] } diff --git a/parser/testdata/parse/postgres_regress/namespace.metadata.json b/parser/testdata/parse/postgres_regress/namespace.metadata.json index bc6b9b5..98ce15e 100644 --- a/parser/testdata/parse/postgres_regress/namespace.metadata.json +++ b/parser/testdata/parse/postgres_regress/namespace.metadata.json @@ -3,15 +3,12 @@ "002", "006", "011", - "015", "022", "026", - "027", "031", "036", "037", "038", - "039", - "042" + "039" ] } diff --git a/parser/testdata/parse/postgres_regress/numeric.metadata.json b/parser/testdata/parse/postgres_regress/numeric.metadata.json index 946106b..0b355d0 100644 --- a/parser/testdata/parse/postgres_regress/numeric.metadata.json +++ b/parser/testdata/parse/postgres_regress/numeric.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "1004", "481", "482", "483", @@ -8,9 +7,6 @@ "485", "486", "487", - "488", - "595", - "639", - "678" + "488" ] } diff --git a/parser/testdata/parse/postgres_regress/numeric_big.metadata.json b/parser/testdata/parse/postgres_regress/numeric_big.metadata.json index 1d448a9..c2bc4e6 100644 --- a/parser/testdata/parse/postgres_regress/numeric_big.metadata.json +++ b/parser/testdata/parse/postgres_regress/numeric_big.metadata.json @@ -1,15 +1,5 @@ { "todo": [ - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", "491", "492", "493", diff --git a/parser/testdata/parse/postgres_regress/object_address.metadata.json b/parser/testdata/parse/postgres_regress/object_address.metadata.json index 8c0fd1d..06c5a9e 100644 --- a/parser/testdata/parse/postgres_regress/object_address.metadata.json +++ b/parser/testdata/parse/postgres_regress/object_address.metadata.json @@ -25,12 +25,6 @@ "035", "036", "040", - "045", - "074", - "075", - "076", - "077", - "078", - "079" + "045" ] } diff --git a/parser/testdata/parse/postgres_regress/oid.metadata.json b/parser/testdata/parse/postgres_regress/oid.metadata.json index 8d0b128..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/oid.metadata.json +++ b/parser/testdata/parse/postgres_regress/oid.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "037" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/partition_info.metadata.json b/parser/testdata/parse/postgres_regress/partition_info.metadata.json index 415497b..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/partition_info.metadata.json +++ b/parser/testdata/parse/postgres_regress/partition_info.metadata.json @@ -1,9 +1,3 @@ { - "todo": [ - "049", - "054", - "071", - "072", - "073" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/partition_join.metadata.json b/parser/testdata/parse/postgres_regress/partition_join.metadata.json index ff3b45f..b2f78d8 100644 --- a/parser/testdata/parse/postgres_regress/partition_join.metadata.json +++ b/parser/testdata/parse/postgres_regress/partition_join.metadata.json @@ -99,15 +99,12 @@ "295", "296", "297", - "299", "304", "305", "306", "307", "308", "309", - "310", - "311", "312", "316", "317", @@ -116,24 +113,16 @@ "323", "326", "327", - "328", "329", - "330", "331", "337", "338", - "340", - "341", - "342", "349", "355", "356", - "358", "360", "362", "363", - "365", - "366", "372", "378", "379", @@ -149,15 +138,12 @@ "399", "401", "402", - "403", "408", "409", "410", "411", "412", "413", - "414", - "415", "421", "426", "427", @@ -165,9 +151,7 @@ "431", "433", "435", - "437", "441", - "442", "444", "445", "447", @@ -177,30 +161,20 @@ "454", "456", "458", - "460", - "461", - "464", "465", - "466", "467", "468", "473", "474", "477", "478", - "479", "481", "486", "487", - "489", "493", "494", - "496", "499", "500", - "502", - "503", - "504", "512", "520", "521", @@ -209,15 +183,10 @@ "528", "529", "531", - "533", - "534", "539", "544", "549", "550", - "552", - "553", - "554", "566", "582", "583", @@ -225,7 +194,6 @@ "587", "593", "596", - "597", - "598" + "597" ] } diff --git a/parser/testdata/parse/postgres_regress/partition_prune.metadata.json b/parser/testdata/parse/postgres_regress/partition_prune.metadata.json index ad8a72d..0391cd5 100644 --- a/parser/testdata/parse/postgres_regress/partition_prune.metadata.json +++ b/parser/testdata/parse/postgres_regress/partition_prune.metadata.json @@ -114,7 +114,6 @@ "212", "213", "214", - "215", "225", "226", "227", @@ -133,9 +132,7 @@ "254", "258", "260", - "261", "265", - "266", "279", "280", "281", @@ -150,11 +147,8 @@ "290", "291", "292", - "293", - "294", "295", "296", - "297", "298", "314", "315", @@ -163,12 +157,10 @@ "321", "323", "328", - "330", "343", "344", "345", "346", - "348", "349", "364", "391", @@ -177,23 +169,19 @@ "399", "410", "414", - "416", "435", "436", "440", "441", "446", "450", - "452", "461", - "463", "471", "472", "473", "476", "477", "478", - "479", "484", "485", "486", @@ -202,44 +190,33 @@ "489", "490", "491", - "492", "498", "500", "503", - "505", "511", "512", - "513", "522", "524", "526", "528", "532", "534", - "537", "542", "543", "544", "545", "546", - "547", "553", "554", "555", - "556", "557", "561", "562", - "563", - "564", "565", "569", "570", - "571", - "572", "576", "577", - "578", "582", "583", "584", @@ -249,41 +226,27 @@ "591", "592", "593", - "594", "599", "600", "601", "602", - "603", "609", "610", - "611", "623", "626", - "628", "633", "636", "637", "639", "640", - "643", - "653", "664", - "666", "670", "674", "678", "679", - "680", - "681", - "682", - "688", "689", "690", "694", - "695", - "696", - "697", - "698" + "695" ] } diff --git a/parser/testdata/parse/postgres_regress/pg_lsn.metadata.json b/parser/testdata/parse/postgres_regress/pg_lsn.metadata.json index 2a28184..72648bb 100644 --- a/parser/testdata/parse/postgres_regress/pg_lsn.metadata.json +++ b/parser/testdata/parse/postgres_regress/pg_lsn.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "012", "030" ] } diff --git a/parser/testdata/parse/postgres_regress/plancache.metadata.json b/parser/testdata/parse/postgres_regress/plancache.metadata.json index 6903c5e..3ab32e6 100644 --- a/parser/testdata/parse/postgres_regress/plancache.metadata.json +++ b/parser/testdata/parse/postgres_regress/plancache.metadata.json @@ -1,21 +1,14 @@ { "todo": [ - "006", "023", "028", "034", "035", - "046", - "047", - "052", "055", - "069", - "071", "076", "080", "083", "093", - "095", - "097" + "095" ] } diff --git a/parser/testdata/parse/postgres_regress/plpgsql.metadata.json b/parser/testdata/parse/postgres_regress/plpgsql.metadata.json index 5e6ff35..4caa60c 100644 --- a/parser/testdata/parse/postgres_regress/plpgsql.metadata.json +++ b/parser/testdata/parse/postgres_regress/plpgsql.metadata.json @@ -19,9 +19,6 @@ "038", "039", "040", - "041", - "042", - "043", "044", "045", "046", @@ -79,46 +76,28 @@ "295", "298", "301", - "304", "305", - "307", "308", - "311", "312", - "315", "316", "317", - "319", "320", - "322", "323", - "326", "327", "328", - "330", "331", - "336", "337", "338", "341", - "344", "345", - "347", "348", - "351", "352", - "354", "355", - "358", "359", - "362", "364", "365", - "368", "370", "374", - "380", - "381", "384", "385", "387", @@ -145,22 +124,13 @@ "425", "426", "428", - "430", - "431", "433", "434", - "436", - "437", "438", "440", "442", "444", - "446", - "447", - "448", - "449", "450", - "452", "453", "457", "459", @@ -172,7 +142,6 @@ "472", "474", "476", - "478", "480", "482", "484", @@ -184,13 +153,9 @@ "497", "504", "508", - "510", "511", - "512", "513", - "514", "515", - "516", "518", "522", "525", @@ -200,7 +165,6 @@ "537", "538", "539", - "540", "543", "545", "547", @@ -208,46 +172,32 @@ "551", "553", "555", - "557", "558", - "560", "561", "563", "564", "566", - "568", "569", - "571", "572", "575", "578", - "581", "582", "583", "584", - "586", "589", - "597", - "598", "599", "600", "602", "604", "606", "608", - "610", "611", "613", - "615", "616", - "618", "619", "621", - "623", "624", "626", - "628", - "629", "630", "632", "634", @@ -265,56 +215,36 @@ "656", "658", "660", - "662", "663", "665", - "668", - "669", "670", - "672", "673", - "675", "676", - "680", "681", "686", - "688", - "689", "690", "692", - "694", "695", "697", "699", - "702", "703", "704", - "707", - "708", "709", - "711", "712", - "714", "715", "716", "718", "719", - "727", - "728", "729", "730", "731", - "744", - "745", "747", "748", "750", - "753", "755", "757", "760", "762", - "764", "765", "766", "767", @@ -326,11 +256,9 @@ "774", "776", "778", - "780", "781", "783", "785", - "788", "789", "792", "795", @@ -339,13 +267,9 @@ "803", "806", "809", - "812", - "813", "815", "818", "821", - "826", - "827", "828", "829", "831", @@ -355,17 +279,10 @@ "838", "839", "840", - "843", - "844", - "845", "846", "847", "848", - "851", - "852", - "853", "854", - "856", "857", "858", "859", @@ -399,15 +316,12 @@ "901", "902", "903", - "905", "916", "917", "918", "921", "927", "928", - "930", - "931", "937", "939", "941" diff --git a/parser/testdata/parse/postgres_regress/polymorphism.metadata.json b/parser/testdata/parse/postgres_regress/polymorphism.metadata.json index 1e2c748..1fd9084 100644 --- a/parser/testdata/parse/postgres_regress/polymorphism.metadata.json +++ b/parser/testdata/parse/postgres_regress/polymorphism.metadata.json @@ -1,42 +1,25 @@ { "todo": [ "001", - "004", "005", - "007", "008", - "011", "012", - "015", "016", "017", - "019", "020", - "022", "023", - "026", "027", - "030", "031", "032", - "034", "035", "036", - "038", "039", - "044", "045", - "048", "049", - "052", "053", - "056", "057", - "060", "061", - "064", "065", - "068", "069", "070", "071", @@ -120,78 +103,46 @@ "187", "197", "205", - "210", "211", - "217", "227", - "232", - "233", - "234", "235", "236", - "238", "239", "241", - "247", - "248", "249", "250", - "256", - "257", "258", "259", - "264", "265", "269", "273", - "274", "275", "276", "277", - "280", - "281", - "282", "283", - "297", "298", - "305", "306", "315", "316", - "317", "318", "319", "320", "321", "322", - "324", "325", - "327", "328", "357", - "360", - "361", "362", - "367", "368", - "372", "373", - "380", "381", - "387", "388", - "391", "392", "393", - "399", "400", - "403", "404", "405", - "409", "410", - "415", - "416", - "423" + "416" ] } diff --git a/parser/testdata/parse/postgres_regress/portals.metadata.json b/parser/testdata/parse/postgres_regress/portals.metadata.json index dc5c5f6..4fa83e3 100644 --- a/parser/testdata/parse/postgres_regress/portals.metadata.json +++ b/parser/testdata/parse/postgres_regress/portals.metadata.json @@ -3,16 +3,12 @@ "123", "128", "129", - "143", - "144", "281", "288", - "317", "319", "326", "327", "333", - "334", - "347" + "334" ] } diff --git a/parser/testdata/parse/postgres_regress/predicate.metadata.json b/parser/testdata/parse/postgres_regress/predicate.metadata.json index f2d5a84..33c17c8 100644 --- a/parser/testdata/parse/postgres_regress/predicate.metadata.json +++ b/parser/testdata/parse/postgres_regress/predicate.metadata.json @@ -16,17 +16,13 @@ "015", "016", "017", - "018", "022", "023", "026", "027", - "028", "035", "036", "037", - "039", - "041", - "042" + "039" ] } diff --git a/parser/testdata/parse/postgres_regress/prepared_xacts.metadata.json b/parser/testdata/parse/postgres_regress/prepared_xacts.metadata.json index 62308f9..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/prepared_xacts.metadata.json +++ b/parser/testdata/parse/postgres_regress/prepared_xacts.metadata.json @@ -1,9 +1,3 @@ { - "todo": [ - "042", - "058", - "081", - "082", - "083" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/privileges.metadata.json b/parser/testdata/parse/postgres_regress/privileges.metadata.json index bd9a8ca..f12faea 100644 --- a/parser/testdata/parse/postgres_regress/privileges.metadata.json +++ b/parser/testdata/parse/postgres_regress/privileges.metadata.json @@ -14,8 +14,6 @@ "044", "045", "046", - "048", - "050", "052", "053", "057", @@ -81,7 +79,6 @@ "216", "218", "219", - "220", "223", "235", "240", diff --git a/parser/testdata/parse/postgres_regress/psql.metadata.json b/parser/testdata/parse/postgres_regress/psql.metadata.json index 51c2ceb..0d909f1 100644 --- a/parser/testdata/parse/postgres_regress/psql.metadata.json +++ b/parser/testdata/parse/postgres_regress/psql.metadata.json @@ -2,9 +2,6 @@ "todo": [ "026", "125", - "127", - "135", - "136", - "193" + "127" ] } diff --git a/parser/testdata/parse/postgres_regress/publication.metadata.json b/parser/testdata/parse/postgres_regress/publication.metadata.json index defd474..4ab9508 100644 --- a/parser/testdata/parse/postgres_regress/publication.metadata.json +++ b/parser/testdata/parse/postgres_regress/publication.metadata.json @@ -1,7 +1,6 @@ { "todo": [ "006", - "008", "011", "013", "014", @@ -28,31 +27,22 @@ "047", "048", "049", - "051", - "052", "056", "057", - "059", - "060", "062", "063", "067", "071", "076", "078", - "080", - "081", "092", "094", "095", "096", "098", "099", - "101", "103", - "105", "107", - "109", "111", "112", "115", @@ -76,8 +66,6 @@ "134", "135", "137", - "138", - "139", "140", "141", "142", @@ -92,21 +80,6 @@ "151", "153", "154", - "156", - "157", - "158", - "159", - "160", - "161", - "162", - "163", - "164", - "165", - "166", - "167", - "168", - "169", - "170", "177", "180", "182", @@ -133,10 +106,6 @@ "227", "229", "230", - "232", - "233", - "234", - "235", "237", "238", "241", @@ -153,7 +122,6 @@ "263", "265", "267", - "271", "274", "276", "277", @@ -169,7 +137,6 @@ "301", "303", "305", - "312", "314", "327", "328", @@ -179,12 +146,8 @@ "332", "333", "334", - "336", - "337", "339", "343", - "344", - "345", "352", "355", "357", @@ -211,18 +174,10 @@ "402", "404", "405", - "407", - "408", - "409", - "410", "415", - "418", - "420", "421", "423", - "424", "426", - "427", "428", "430", "432", @@ -235,7 +190,6 @@ "439", "440", "442", - "448", "450", "452", "455", @@ -245,17 +199,12 @@ "460", "462", "464", - "465", - "466", "469", "471", "473", "475", "476", - "478", "480", - "481", - "482", "484", "486", "487", @@ -273,7 +222,6 @@ "511", "512", "513", - "514", "515", "516", "517", @@ -289,58 +237,24 @@ "527", "528", "529", - "530", - "531", "534", "536", "545", - "549", "555", "561", "563", "565", "566", "568", - "569", - "570", - "571", - "572", - "573", - "574", - "575", - "576", - "577", - "578", - "579", - "580", - "581", - "582", - "583", "589", - "591", "592", "594", - "596", "597", - "599", "600", "602", - "604", - "605", - "606", "612", - "615", - "616", - "617", - "618", "623", - "629", - "630", - "631", "635", - "641", - "642", - "643", "647", "648", "650", diff --git a/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json b/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json index 51e3427..aa2de5b 100644 --- a/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json +++ b/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json @@ -1,58 +1,18 @@ { "todo": [ "005", - "017", - "022", - "030", - "034", - "038", "065", - "070", - "073", "074", - "079", - "082", "083", - "088", - "091", "092", - "097", - "100", "101", - "106", - "109", "110", - "115", - "118", "119", - "124", - "127", "128", - "133", - "136", "137", - "142", - "145", - "151", - "152", - "153", - "154", - "155", - "156", - "157", - "158", - "159", - "160", - "161", - "162", - "163", "166", "167", "168", - "224", - "225", - "226", - "227", "228", "232", "233", @@ -60,26 +20,16 @@ "235", "236", "240", - "244", - "245", - "246", "247", "252", - "253", "254", - "256", "257", "258", - "263", "264", - "268", "269", "270", - "272", "273", - "275", "276", - "278", "280", "284", "287", @@ -87,15 +37,12 @@ "294", "298", "302", - "307", "308", "314", "315", "320", "322", - "326", "327", - "331", "332", "333", "334", @@ -103,7 +50,6 @@ "338", "339", "341", - "343", "344", "345", "347", @@ -113,22 +59,15 @@ "354", "355", "357", - "362", "367", "370", "386", "389", - "392", - "393", - "394", - "395", "396", "399", - "400", "401", "403", "405", - "407", "408", "409", "411", @@ -136,7 +75,6 @@ "414", "415", "417", - "422", "423" ] } diff --git a/parser/testdata/parse/postgres_regress/rangetypes.metadata.json b/parser/testdata/parse/postgres_regress/rangetypes.metadata.json index 7f442a3..36a71ea 100644 --- a/parser/testdata/parse/postgres_regress/rangetypes.metadata.json +++ b/parser/testdata/parse/postgres_regress/rangetypes.metadata.json @@ -1,40 +1,26 @@ { "todo": [ "103", - "129", "172", - "219", - "278", "291", "302", - "305", "317", - "322", "323", "324", - "326", - "327", "328", - "331", "332", "333", - "336", - "337", "338", - "341", "342", "343", "344", "347", "350", - "354", "355", - "360", "361", "366", "367", "369", - "370", "371", "375", "377", @@ -58,8 +44,6 @@ "399", "400", "401", - "404", - "406", - "407" + "404" ] } diff --git a/parser/testdata/parse/postgres_regress/reloptions.metadata.json b/parser/testdata/parse/postgres_regress/reloptions.metadata.json index df0a9c2..f33e6d1 100644 --- a/parser/testdata/parse/postgres_regress/reloptions.metadata.json +++ b/parser/testdata/parse/postgres_regress/reloptions.metadata.json @@ -1,9 +1,6 @@ { "todo": [ - "031", "035", - "041", - "043", - "052" + "041" ] } diff --git a/parser/testdata/parse/postgres_regress/replica_identity.metadata.json b/parser/testdata/parse/postgres_regress/replica_identity.metadata.json index f2e07a4..a99061f 100644 --- a/parser/testdata/parse/postgres_regress/replica_identity.metadata.json +++ b/parser/testdata/parse/postgres_regress/replica_identity.metadata.json @@ -1,12 +1,6 @@ { "todo": [ "038", - "042", - "051", - "052", - "053", - "054", - "055", - "056" + "042" ] } diff --git a/parser/testdata/parse/postgres_regress/returning.metadata.json b/parser/testdata/parse/postgres_regress/returning.metadata.json index 64589b8..c9cb856 100644 --- a/parser/testdata/parse/postgres_regress/returning.metadata.json +++ b/parser/testdata/parse/postgres_regress/returning.metadata.json @@ -1,17 +1,13 @@ { "todo": [ - "029", "031", "034", "035", "040", "045", "053", - "056", "057", "058", - "061", - "062", "069" ] } diff --git a/parser/testdata/parse/postgres_regress/rowsecurity.metadata.json b/parser/testdata/parse/postgres_regress/rowsecurity.metadata.json index 786785d..1e73b25 100644 --- a/parser/testdata/parse/postgres_regress/rowsecurity.metadata.json +++ b/parser/testdata/parse/postgres_regress/rowsecurity.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "009", "018", "019", "021", @@ -18,7 +17,6 @@ "055", "056", "059", - "060", "062", "069", "070", @@ -50,27 +48,22 @@ "182", "185", "186", - "187", "189", "194", "213", "220", - "221", - "222", "223", "226", "232", "233", "241", "242", - "246", "250", "251", "259", "260", "261", "262", - "270", "271", "274", "276", @@ -97,25 +90,16 @@ "339", "344", "346", - "351", - "352", "353", "354", "355", - "368", - "369", - "370", "371", - "376", "377", - "383", "385", "386", "387", "388", - "409", "410", - "420", "425", "427", "428", @@ -138,7 +122,6 @@ "459", "462", "465", - "466", "469", "472", "475", @@ -152,14 +135,11 @@ "498", "501", "503", - "504", - "506", "509", "510", "512", "515", "518", - "520", "523", "524", "527", @@ -173,7 +153,6 @@ "549", "551", "554", - "556", "559", "561", "562", @@ -186,24 +165,19 @@ "580", "581", "586", - "587", "590", - "591", "594", "595", "598", "600", "604", "606", - "607", - "609", "611", "612", "613", "617", "619", "621", - "623", "625", "627", "631", @@ -214,13 +188,10 @@ "654", "655", "663", - "669", - "671", "675", "678", "682", "685", - "687", "689", "691", "716", diff --git a/parser/testdata/parse/postgres_regress/rowtypes.metadata.json b/parser/testdata/parse/postgres_regress/rowtypes.metadata.json index 5de6298..7b7b969 100644 --- a/parser/testdata/parse/postgres_regress/rowtypes.metadata.json +++ b/parser/testdata/parse/postgres_regress/rowtypes.metadata.json @@ -13,14 +13,12 @@ "113", "116", "119", - "122", "123", "137", "142", "147", "152", "155", - "160", "163", "164", "165", @@ -34,11 +32,9 @@ "216", "218", "220", - "224", "225", "226", "227", - "228", - "237" + "228" ] } diff --git a/parser/testdata/parse/postgres_regress/rules.metadata.json b/parser/testdata/parse/postgres_regress/rules.metadata.json index a20b1fc..cfe64af 100644 --- a/parser/testdata/parse/postgres_regress/rules.metadata.json +++ b/parser/testdata/parse/postgres_regress/rules.metadata.json @@ -3,9 +3,6 @@ "005", "006", "007", - "008", - "009", - "010", "015", "016", "017", @@ -32,29 +29,16 @@ "318", "321", "342", - "346", "347", "348", - "353", - "354", - "355", "362", - "371", - "372", - "373", - "374", "379", "381", "404", - "408", - "409", "411", - "412", "414", "416", - "417", "429", - "435", "439", "440", "441", @@ -62,7 +46,6 @@ "452", "454", "456", - "457", "464", "469", "471", @@ -71,56 +54,32 @@ "477", "478", "481", - "482", "485", "486", - "490", "493", "494", "497", "498", "499", - "500", - "501", "503", - "504", - "506", - "508", - "510", "514", - "519", "520", - "522", "524", "533", "535", - "537", - "538", - "539", "540", "557", "558", - "559", "562", "563", "564", "572", "574", - "576", - "577", - "578", "581", - "594", - "595", "600", "601", "606", "607", - "608", - "615", - "616", - "617", - "618", - "619" + "608" ] } diff --git a/parser/testdata/parse/postgres_regress/security_label.metadata.json b/parser/testdata/parse/postgres_regress/security_label.metadata.json index a20be60..4e4d016 100644 --- a/parser/testdata/parse/postgres_regress/security_label.metadata.json +++ b/parser/testdata/parse/postgres_regress/security_label.metadata.json @@ -1,19 +1,6 @@ { "todo": [ "010", - "011", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "021", - "022", - "023", - "024", - "025", - "026" + "011" ] } diff --git a/parser/testdata/parse/postgres_regress/select.metadata.json b/parser/testdata/parse/postgres_regress/select.metadata.json index f4e049f..6d7de5e 100644 --- a/parser/testdata/parse/postgres_regress/select.metadata.json +++ b/parser/testdata/parse/postgres_regress/select.metadata.json @@ -1,8 +1,6 @@ { "todo": [ "008", - "044", - "050", "056", "058", "059", @@ -14,8 +12,6 @@ "073", "075", "078", - "081", - "086", - "087" + "086" ] } diff --git a/parser/testdata/parse/postgres_regress/select_distinct.metadata.json b/parser/testdata/parse/postgres_regress/select_distinct.metadata.json index 9983a50..94461c9 100644 --- a/parser/testdata/parse/postgres_regress/select_distinct.metadata.json +++ b/parser/testdata/parse/postgres_regress/select_distinct.metadata.json @@ -4,10 +4,6 @@ "011", "016", "021", - "029", - "030", - "031", - "032", "037", "039", "040", diff --git a/parser/testdata/parse/postgres_regress/select_having.metadata.json b/parser/testdata/parse/postgres_regress/select_having.metadata.json index 3b2ed2e..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/select_having.metadata.json +++ b/parser/testdata/parse/postgres_regress/select_having.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "023" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/select_implicit.metadata.json b/parser/testdata/parse/postgres_regress/select_implicit.metadata.json index 79e7a27..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/select_implicit.metadata.json +++ b/parser/testdata/parse/postgres_regress/select_implicit.metadata.json @@ -1,7 +1,3 @@ { - "todo": [ - "042", - "043", - "044" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/select_into.metadata.json b/parser/testdata/parse/postgres_regress/select_into.metadata.json index d9f6f9e..a83b4b8 100644 --- a/parser/testdata/parse/postgres_regress/select_into.metadata.json +++ b/parser/testdata/parse/postgres_regress/select_into.metadata.json @@ -1,7 +1,5 @@ { "todo": [ - "002", - "004", "007", "008", "012", @@ -9,22 +7,13 @@ "017", "019", "021", - "025", - "039", - "040", - "041", - "042", - "043", "044", "047", - "048", - "049", "060", "061", "062", "063", "065", - "066", - "067" + "066" ] } diff --git a/parser/testdata/parse/postgres_regress/select_parallel.metadata.json b/parser/testdata/parse/postgres_regress/select_parallel.metadata.json index 9fa565d..96200b6 100644 --- a/parser/testdata/parse/postgres_regress/select_parallel.metadata.json +++ b/parser/testdata/parse/postgres_regress/select_parallel.metadata.json @@ -7,7 +7,6 @@ "026", "029", "034", - "035", "037", "040", "045", @@ -28,13 +27,10 @@ "103", "111", "114", - "121", - "122", "125", "130", "132", "133", - "134", "135", "138", "142", @@ -46,10 +42,8 @@ "159", "162", "165", - "166", "169", "171", - "176", "186", "187", "190", @@ -62,8 +56,6 @@ "212", "215", "216", - "224", - "225", "228", "231" ] diff --git a/parser/testdata/parse/postgres_regress/sequence.metadata.json b/parser/testdata/parse/postgres_regress/sequence.metadata.json index 0a7a883..06d0c57 100644 --- a/parser/testdata/parse/postgres_regress/sequence.metadata.json +++ b/parser/testdata/parse/postgres_regress/sequence.metadata.json @@ -1,21 +1,7 @@ { "todo": [ - "012", - "077", "079", - "084", "085", - "091", - "092", - "093", - "094", - "095", - "096", - "139", - "140", - "141", - "152", - "157", "171", "172", "178", @@ -35,9 +21,6 @@ "233", "234", "240", - "244", - "252", - "255", - "260" + "244" ] } diff --git a/parser/testdata/parse/postgres_regress/sqljson.metadata.json b/parser/testdata/parse/postgres_regress/sqljson.metadata.json index c59aa53..7f30253 100644 --- a/parser/testdata/parse/postgres_regress/sqljson.metadata.json +++ b/parser/testdata/parse/postgres_regress/sqljson.metadata.json @@ -14,29 +14,19 @@ "103", "104", "105", - "107", - "108", - "109", "163", - "165", "171", - "173", "174", "175", - "177", "178", "179", - "181", "182", - "184", "200", - "202", "208", "211", "212", "213", "215", - "217", - "219" + "217" ] } diff --git a/parser/testdata/parse/postgres_regress/sqljson_jsontable.metadata.json b/parser/testdata/parse/postgres_regress/sqljson_jsontable.metadata.json index 0591af4..fd72183 100644 --- a/parser/testdata/parse/postgres_regress/sqljson_jsontable.metadata.json +++ b/parser/testdata/parse/postgres_regress/sqljson_jsontable.metadata.json @@ -1,7 +1,6 @@ { "todo": [ "010", - "012", "016", "032", "033", @@ -10,19 +9,7 @@ "036", "037", "038", - "039", - "040", - "041", - "042", - "043", - "044", "066", - "067", - "073", - "096", - "105", - "106", - "114", - "117" + "067" ] } diff --git a/parser/testdata/parse/postgres_regress/sqljson_queryfuncs.metadata.json b/parser/testdata/parse/postgres_regress/sqljson_queryfuncs.metadata.json index 67dc999..7112c74 100644 --- a/parser/testdata/parse/postgres_regress/sqljson_queryfuncs.metadata.json +++ b/parser/testdata/parse/postgres_regress/sqljson_queryfuncs.metadata.json @@ -5,22 +5,13 @@ "062", "131", "132", - "135", "176", - "180", "181", "182", - "209", "250", - "255", - "256", "257", - "270", - "271", "291", "292", - "301", - "302", - "310" + "302" ] } diff --git a/parser/testdata/parse/postgres_regress/stats.metadata.json b/parser/testdata/parse/postgres_regress/stats.metadata.json index 4724244..47c3a9f 100644 --- a/parser/testdata/parse/postgres_regress/stats.metadata.json +++ b/parser/testdata/parse/postgres_regress/stats.metadata.json @@ -2,41 +2,18 @@ "todo": [ "067", "069", - "097", - "104", - "113", - "128", - "137", - "148", - "161", - "170", - "178", - "183", - "184", "197", "200", "210", "221", "232", - "240", - "246", - "247", - "254", - "323", "336", - "342", "374", - "380", "400", "401", "420", - "424", - "425", "430", "433", - "435", - "440", - "442", - "447" + "440" ] } diff --git a/parser/testdata/parse/postgres_regress/stats_ext.metadata.json b/parser/testdata/parse/postgres_regress/stats_ext.metadata.json index 97e3bfb..1b26fad 100644 --- a/parser/testdata/parse/postgres_regress/stats_ext.metadata.json +++ b/parser/testdata/parse/postgres_regress/stats_ext.metadata.json @@ -20,27 +20,17 @@ "019", "020", "021", - "022", "023", "024", "025", - "026", "028", - "029", - "032", - "033", "034", "037", - "039", - "040", "041", - "042", "044", - "046", "047", "048", "049", - "052", "057", "058", "060", @@ -48,19 +38,15 @@ "063", "064", "065", - "066", "067", "068", "072", "073", - "074", "081", "084", "085", - "090", "094", "095", - "099", "101", "102", "104", @@ -68,7 +54,6 @@ "107", "108", "110", - "112", "119", "120", "121", @@ -83,98 +68,73 @@ "132", "133", "134", - "135", - "136", "139", "149", "150", "164", - "175", "189", "190", - "195", "199", "200", - "205", "208", "216", "217", "218", - "226", "227", "228", - "236", "237", "238", - "246", "247", "248", - "256", - "257", "258", "259", "260", - "268", - "269", "274", "277", "278", - "282", "284", "287", "288", - "292", "294", "320", "321", "348", "350", - "352", "378", "379", "408", "414", "415", "416", - "422", "425", "428", "429", - "433", "435", "438", "439", - "443", "445", "470", "471", "497", "499", "501", - "504", "506", "517", "518", "519", "520", - "531", - "532", - "533", "534", "535", - "548", "550", "556", "557", "565", - "568", "570", "574", "575", "582", "585", "586", - "589", "592", "593", "596", @@ -183,28 +143,21 @@ "611", "620", "621", - "630", "633", "641", "642", "643", - "651", "654", "657", "658", - "661", - "662", "665", "669", "670", - "674", "677", "679", "680", - "682", "684", "686", - "688", "692", "693", "695", @@ -218,11 +171,6 @@ "709", "710", "711", - "712", - "713", - "714", - "719", - "720", "724", "728", "729", @@ -251,13 +199,6 @@ "801", "802", "804", - "806", - "808", - "809", - "810", - "811", - "813", - "814", - "815" + "806" ] } diff --git a/parser/testdata/parse/postgres_regress/subscription.metadata.json b/parser/testdata/parse/postgres_regress/subscription.metadata.json index 84cd507..d1e147c 100644 --- a/parser/testdata/parse/postgres_regress/subscription.metadata.json +++ b/parser/testdata/parse/postgres_regress/subscription.metadata.json @@ -6,7 +6,6 @@ "011", "012", "013", - "014", "022", "024", "026", @@ -23,8 +22,6 @@ "037", "038", "039", - "040", - "041", "042", "043", "044", @@ -49,16 +46,11 @@ "067", "068", "069", - "071", "073", - "075", - "077", - "078", "079", "080", "081", "082", - "083", "084", "085", "086", @@ -72,7 +64,6 @@ "094", "095", "096", - "097", "098", "099", "101", @@ -80,22 +71,17 @@ "106", "108", "109", - "110", - "111", "112", "113", "114", "115", "116", - "117", "118", "119", - "120", "121", "122", "123", "124", - "125", "127", "129", "131", @@ -110,7 +96,6 @@ "147", "149", "151", - "153", - "154" + "153" ] } diff --git a/parser/testdata/parse/postgres_regress/subselect.metadata.json b/parser/testdata/parse/postgres_regress/subselect.metadata.json index 18a3e67..bec51ee 100644 --- a/parser/testdata/parse/postgres_regress/subselect.metadata.json +++ b/parser/testdata/parse/postgres_regress/subselect.metadata.json @@ -2,15 +2,12 @@ "todo": [ "032", "034", - "042", - "044", "048", "049", "050", "052", "053", "054", - "085", "089", "093", "126", @@ -43,10 +40,7 @@ "218", "219", "221", - "223", "226", - "229", - "230", "239", "242", "244", diff --git a/parser/testdata/parse/postgres_regress/tablesample.metadata.json b/parser/testdata/parse/postgres_regress/tablesample.metadata.json index f82a533..c242be2 100644 --- a/parser/testdata/parse/postgres_regress/tablesample.metadata.json +++ b/parser/testdata/parse/postgres_regress/tablesample.metadata.json @@ -4,7 +4,6 @@ "031", "032", "038", - "055", - "056" + "055" ] } diff --git a/parser/testdata/parse/postgres_regress/tablespace.metadata.json b/parser/testdata/parse/postgres_regress/tablespace.metadata.json index f86412d..d1afbf0 100644 --- a/parser/testdata/parse/postgres_regress/tablespace.metadata.json +++ b/parser/testdata/parse/postgres_regress/tablespace.metadata.json @@ -4,7 +4,6 @@ "002", "004", "005", - "007", "009", "010", "011", @@ -25,35 +24,23 @@ "030", "035", "042", - "046", "063", - "065", - "098", - "112", "120", "122", "125", "126", - "127", "136", "138", "141", "142", - "143", - "151", "158", - "159", "174", - "176", - "178", "180", "184", "185", "191", "192", "193", - "195", - "201", - "202" + "195" ] } diff --git a/parser/testdata/parse/postgres_regress/temp.metadata.json b/parser/testdata/parse/postgres_regress/temp.metadata.json index 1b597a2..34edf11 100644 --- a/parser/testdata/parse/postgres_regress/temp.metadata.json +++ b/parser/testdata/parse/postgres_regress/temp.metadata.json @@ -1,26 +1,12 @@ { "todo": [ - "006", - "007", - "009", - "010", - "016", - "018", - "029", - "035", "049", "071", "072", - "082", "084", - "095", - "111", - "126", "128", "130", - "132", "135", - "138", - "157" + "138" ] } diff --git a/parser/testdata/parse/postgres_regress/tid.metadata.json b/parser/testdata/parse/postgres_regress/tid.metadata.json index a821061..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/tid.metadata.json +++ b/parser/testdata/parse/postgres_regress/tid.metadata.json @@ -1,12 +1,3 @@ { - "todo": [ - "018", - "022", - "025", - "028", - "031", - "036", - "040", - "041" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/tidrangescan.metadata.json b/parser/testdata/parse/postgres_regress/tidrangescan.metadata.json index 81a336b..cc0932c 100644 --- a/parser/testdata/parse/postgres_regress/tidrangescan.metadata.json +++ b/parser/testdata/parse/postgres_regress/tidrangescan.metadata.json @@ -13,7 +13,6 @@ "024", "026", "033", - "035", - "044" + "035" ] } diff --git a/parser/testdata/parse/postgres_regress/tidscan.metadata.json b/parser/testdata/parse/postgres_regress/tidscan.metadata.json index a552786..3f28e04 100644 --- a/parser/testdata/parse/postgres_regress/tidscan.metadata.json +++ b/parser/testdata/parse/postgres_regress/tidscan.metadata.json @@ -12,7 +12,6 @@ "034", "037", "039", - "042", - "049" + "042" ] } diff --git a/parser/testdata/parse/postgres_regress/timestamptz.metadata.json b/parser/testdata/parse/postgres_regress/timestamptz.metadata.json index ee79512..5f36aaf 100644 --- a/parser/testdata/parse/postgres_regress/timestamptz.metadata.json +++ b/parser/testdata/parse/postgres_regress/timestamptz.metadata.json @@ -1,7 +1,5 @@ { "todo": [ - "217", - "365", "369" ] } diff --git a/parser/testdata/parse/postgres_regress/transactions.metadata.json b/parser/testdata/parse/postgres_regress/transactions.metadata.json index e2135ff..119c5ac 100644 --- a/parser/testdata/parse/postgres_regress/transactions.metadata.json +++ b/parser/testdata/parse/postgres_regress/transactions.metadata.json @@ -1,28 +1,14 @@ { "todo": [ "026", - "068", - "078", - "085", - "092", - "197", "229", "234", "239", "244", - "259", - "260", - "261", "262", - "266", - "267", "290", "291", - "303", - "304", - "376", "414", - "417", - "481" + "417" ] } diff --git a/parser/testdata/parse/postgres_regress/triggers.metadata.json b/parser/testdata/parse/postgres_regress/triggers.metadata.json index 71d4696..0e492bf 100644 --- a/parser/testdata/parse/postgres_regress/triggers.metadata.json +++ b/parser/testdata/parse/postgres_regress/triggers.metadata.json @@ -8,22 +8,13 @@ "019", "020", "021", - "022", - "023", - "024", "025", "026", - "043", - "044", - "045", "047", "054", "055", "062", - "069", - "076", "078", - "089", "092", "093", "1007", @@ -32,14 +23,8 @@ "1011", "1012", "1014", - "1016", - "1017", - "1018", - "1019", "1023", "1024", - "1031", - "1032", "1037", "1038", "1039", @@ -50,14 +35,9 @@ "1045", "1046", "1047", - "1049", "1052", "1053", "1054", - "1055", - "1056", - "117", - "118", "122", "123", "124", @@ -70,15 +50,7 @@ "138", "139", "149", - "152", - "153", - "154", - "155", - "156", - "157", "160", - "162", - "163", "164", "165", "166", @@ -88,7 +60,6 @@ "174", "175", "176", - "181", "182", "183", "184", @@ -96,31 +67,19 @@ "186", "187", "188", - "191", - "192", - "193", "198", "199", "200", "201", "202", - "224", - "225", "227", "228", - "232", - "233", - "234", "236", "237", "243", - "247", - "248", "249", "251", - "258", "261", - "266", "268", "269", "270", @@ -145,10 +104,6 @@ "289", "290", "291", - "296", - "302", - "303", - "304", "309", "310", "311", @@ -160,18 +115,12 @@ "336", "337", "338", - "347", - "348", "352", "353", "354", "355", "356", "357", - "363", - "364", - "365", - "366", "369", "370", "371", @@ -181,61 +130,30 @@ "375", "376", "389", - "393", - "394", - "395", - "396", - "397", "399", "400", "401", "402", - "412", - "413", - "414", "417", "418", "419", - "422", - "423", "425", "426", "428", - "430", - "431", "433", "434", "435", "436", - "446", - "447", - "448", "451", "452", - "453", - "454", - "455", "457", "458", "459", - "460", "463", - "472", - "473", - "474", - "475", - "477", "479", - "481", - "483", - "484", - "488", "491", - "493", "494", "495", - "496", - "497", "504", "505", "506", @@ -258,63 +176,43 @@ "523", "524", "525", - "535", "540", "541", "542", "543", "544", - "546", "551", "552", "553", "554", "555", - "558", "561", "562", - "567", "568", "569", "578", "579", - "583", "587", "589", "592", "595", "604", "605", - "613", "615", "618", - "623", - "624", "630", "631", - "642", - "643", "649", - "656", "664", "665", - "671", "677", - "685", - "686", - "694", "697", "698", "699", - "704", "707", "708", - "717", - "723", "726", "727", - "750", - "751", "752", "753", "754", @@ -330,32 +228,16 @@ "771", "772", "773", - "789", - "790", - "791", - "792", - "793", - "794", - "795", - "796", - "797", "800", "801", - "804", - "805", "808", "810", - "812", - "814", "815", "816", "820", "821", "822", - "825", "826", - "829", - "830", "836", "837", "838", @@ -368,68 +250,38 @@ "845", "846", "847", - "864", - "865", - "866", - "867", - "868", - "869", - "870", - "871", - "872", - "874", "877", "879", - "881", - "883", "886", "887", - "892", - "893", "895", "896", "905", "906", - "910", "911", "912", - "913", "916", "917", "918", "919", - "926", - "931", - "933", "935", "936", "937", - "940", - "943", "945", "946", "947", - "953", - "954", - "955", - "956", "958", "959", "960", "961", "963", - "966", "972", "974", "976", "978", - "980", "982", "984", "986", - "988", - "989", - "990", "992", "993" ] diff --git a/parser/testdata/parse/postgres_regress/truncate.metadata.json b/parser/testdata/parse/postgres_regress/truncate.metadata.json index 3893522..2a21b39 100644 --- a/parser/testdata/parse/postgres_regress/truncate.metadata.json +++ b/parser/testdata/parse/postgres_regress/truncate.metadata.json @@ -1,21 +1,9 @@ { "todo": [ - "049", - "087", "090", "092", - "098", "101", - "107", - "108", - "109", - "144", - "152", "153", - "154", - "171", - "172", - "185", - "193" + "154" ] } diff --git a/parser/testdata/parse/postgres_regress/tsdicts.metadata.json b/parser/testdata/parse/postgres_regress/tsdicts.metadata.json index 0a1d992..ee0ac9c 100644 --- a/parser/testdata/parse/postgres_regress/tsdicts.metadata.json +++ b/parser/testdata/parse/postgres_regress/tsdicts.metadata.json @@ -34,7 +34,6 @@ "127", "128", "129", - "130", - "131" + "130" ] } diff --git a/parser/testdata/parse/postgres_regress/tsearch.metadata.json b/parser/testdata/parse/postgres_regress/tsearch.metadata.json index c22dbe1..2db6261 100644 --- a/parser/testdata/parse/postgres_regress/tsearch.metadata.json +++ b/parser/testdata/parse/postgres_regress/tsearch.metadata.json @@ -3,11 +3,8 @@ "009", "038", "065", - "096", "097", - "122", "124", - "152", "155", "180", "182", diff --git a/parser/testdata/parse/postgres_regress/tsrf.metadata.json b/parser/testdata/parse/postgres_regress/tsrf.metadata.json index 2b43c3e..9ac6a4e 100644 --- a/parser/testdata/parse/postgres_regress/tsrf.metadata.json +++ b/parser/testdata/parse/postgres_regress/tsrf.metadata.json @@ -7,8 +7,6 @@ "065", "067", "069", - "071", - "073", - "074" + "071" ] } diff --git a/parser/testdata/parse/postgres_regress/typed_table.metadata.json b/parser/testdata/parse/postgres_regress/typed_table.metadata.json index c5cd6a2..2d8f1ab 100644 --- a/parser/testdata/parse/postgres_regress/typed_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/typed_table.metadata.json @@ -4,9 +4,6 @@ "006", "010", "011", - "018", - "019", - "021", "022", "025" ] diff --git a/parser/testdata/parse/postgres_regress/union.metadata.json b/parser/testdata/parse/postgres_regress/union.metadata.json index 04ab2e0..7f46d12 100644 --- a/parser/testdata/parse/postgres_regress/union.metadata.json +++ b/parser/testdata/parse/postgres_regress/union.metadata.json @@ -21,7 +21,6 @@ "084", "086", "087", - "089", "091", "093", "095", @@ -33,7 +32,6 @@ "148", "157", "166", - "167", "169", "170", "172", @@ -43,8 +41,6 @@ "180", "183", "184", - "186", - "187", "188", "190", "191" diff --git a/parser/testdata/parse/postgres_regress/updatable_views.metadata.json b/parser/testdata/parse/postgres_regress/updatable_views.metadata.json index 818e25b..b52212c 100644 --- a/parser/testdata/parse/postgres_regress/updatable_views.metadata.json +++ b/parser/testdata/parse/postgres_regress/updatable_views.metadata.json @@ -3,31 +3,14 @@ "086", "087", "088", - "093", - "094", - "095", "1007", "1008", "1009", - "1024", - "1025", - "1026", - "1027", - "1028", - "1029", "1046", "1047", - "1059", - "1060", "1061", - "1073", "1074", - "1086", "1087", - "1092", - "1093", - "1099", - "1100", "111", "112", "113", @@ -35,17 +18,13 @@ "115", "116", "118", - "122", - "123", "141", "142", - "143", "151", "155", "159", "169", "170", - "171", "179", "180", "184", @@ -53,14 +32,9 @@ "201", "202", "203", - "204", - "207", "210", - "214", - "215", "219", "222", - "223", "232", "233", "234", @@ -68,13 +42,11 @@ "262", "276", "277", - "290", "306", "318", "325", "337", "344", - "356", "363", "364", "377", @@ -83,7 +55,6 @@ "399", "400", "406", - "413", "424", "429", "430", @@ -95,42 +66,19 @@ "477", "487", "509", - "527", - "541", "545", "546", - "550", - "551", - "552", - "553", "560", - "563", - "569", - "598", - "611", "643", - "647", - "648", - "666", - "690", - "702", - "713", "722", "723", - "724", "726", "727", - "732", - "733", "736", "737", - "752", "753", "754", - "762", - "763", "766", - "769", "773", "774", "786", @@ -141,54 +89,20 @@ "799", "800", "801", - "802", "805", "806", "809", "811", - "814", "818", "822", "826", "830", "834", "838", - "843", - "844", - "845", - "853", - "854", - "855", - "856", - "865", - "866", - "867", - "868", - "880", - "881", - "882", - "883", - "898", - "899", - "900", - "901", "904", "906", - "907", - "908", - "909", - "915", - "916", - "940", - "941", - "954", - "955", "965", - "968", - "969", "973", - "987", - "988", "995", "996", "997" diff --git a/parser/testdata/parse/postgres_regress/update.metadata.json b/parser/testdata/parse/postgres_regress/update.metadata.json index bf20048..d5abc58 100644 --- a/parser/testdata/parse/postgres_regress/update.metadata.json +++ b/parser/testdata/parse/postgres_regress/update.metadata.json @@ -1,40 +1,23 @@ { "todo": [ "035", - "044", - "045", - "053", "073", - "089", "091", "092", "094", "095", - "097", - "098", "099", "100", "101", "102", - "106", - "107", - "108", - "109", - "110", "113", "114", "115", "119", "120", - "127", - "128", "130", "135", - "142", - "143", - "144", "145", - "147", "148", "149", "150", @@ -48,34 +31,11 @@ "158", "159", "160", - "162", - "163", - "164", - "165", - "166", - "167", - "168", - "169", - "170", - "171", - "172", - "173", - "183", - "191", - "205", "222", "223", - "227", "228", "229", - "232", - "235", - "240", - "241", "242", - "243", - "255", - "256", - "257" + "243" ] } diff --git a/parser/testdata/parse/postgres_regress/uuid.metadata.json b/parser/testdata/parse/postgres_regress/uuid.metadata.json index 5b4808a..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/uuid.metadata.json +++ b/parser/testdata/parse/postgres_regress/uuid.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "044" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/vacuum.metadata.json b/parser/testdata/parse/postgres_regress/vacuum.metadata.json index 5417abb..b00f2d7 100644 --- a/parser/testdata/parse/postgres_regress/vacuum.metadata.json +++ b/parser/testdata/parse/postgres_regress/vacuum.metadata.json @@ -10,10 +10,8 @@ "046", "052", "059", - "061", "062", "069", - "070", "072", "075", "076", @@ -32,8 +30,6 @@ "106", "110", "111", - "113", - "114", "119", "120", "123", @@ -47,7 +43,6 @@ "139", "141", "143", - "144", "149", "150", "151", @@ -56,7 +51,6 @@ "158", "159", "160", - "162", "163", "164", "165", @@ -99,12 +93,6 @@ "222", "223", "224", - "225", - "226", - "227", - "228", - "229", - "230", "237", "238", "239", @@ -149,8 +137,6 @@ "289", "290", "291", - "292", - "294", - "295" + "292" ] } diff --git a/parser/testdata/parse/postgres_regress/varchar.metadata.json b/parser/testdata/parse/postgres_regress/varchar.metadata.json index 72bfdf3..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/varchar.metadata.json +++ b/parser/testdata/parse/postgres_regress/varchar.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "017" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/window.metadata.json b/parser/testdata/parse/postgres_regress/window.metadata.json index 0f0bace..490716d 100644 --- a/parser/testdata/parse/postgres_regress/window.metadata.json +++ b/parser/testdata/parse/postgres_regress/window.metadata.json @@ -1,16 +1,13 @@ { "todo": [ "045", - "092", "123", "125", "128", "130", - "133", "134", "136", "137", - "138", "241", "246", "265", @@ -43,7 +40,6 @@ "305", "307", "308", - "310", "311", "314", "315", diff --git a/parser/testdata/parse/postgres_regress/with.metadata.json b/parser/testdata/parse/postgres_regress/with.metadata.json index 6f3d4c7..5476510 100644 --- a/parser/testdata/parse/postgres_regress/with.metadata.json +++ b/parser/testdata/parse/postgres_regress/with.metadata.json @@ -9,37 +9,27 @@ "062", "078", "081", - "117", "150", "155", "173", - "176", "182", "186", "189", "195", "197", - "216", "222", "225", "228", - "229", "241", "242", - "245", "246", - "249", "250", "251", - "254", - "255", "270", "275", "277", "279", "281", - "283", - "285", - "293" + "283" ] } diff --git a/parser/testdata/parse/postgres_regress/write_parallel.metadata.json b/parser/testdata/parse/postgres_regress/write_parallel.metadata.json index 4e66c6f..73ed242 100644 --- a/parser/testdata/parse/postgres_regress/write_parallel.metadata.json +++ b/parser/testdata/parse/postgres_regress/write_parallel.metadata.json @@ -1,12 +1,8 @@ { "todo": [ "006", - "008", "009", - "011", "012", - "017", - "019", - "021" + "019" ] } diff --git a/parser/testdata/parse/postgres_regress/xid.metadata.json b/parser/testdata/parse/postgres_regress/xid.metadata.json index 638b099..f16f8ae 100644 --- a/parser/testdata/parse/postgres_regress/xid.metadata.json +++ b/parser/testdata/parse/postgres_regress/xid.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "032", "082" ] } From e3ebe5bad1126270802072d6c1668e7b70b1816f Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 16 Aug 2026 19:20:21 +0000 Subject: [PATCH 06/24] Milestone 7: EXPLAIN, VACUUM/ANALYZE, CLUSTER, REINDEX, DO, CREATE CAST Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01J19Kf5LpGUhi2vxFJjzQJE --- internal/parse/ddl_dispatch.go | 3 + internal/parse/parser.go | 12 + internal/parse/utility_maint.go | 322 ++++++++++++++++++ .../create_index.metadata.json | 1 - .../largeobject.metadata.json | 1 - .../postgres_regress/tuplesort.metadata.json | 2 - .../postgres_regress/vacuum.metadata.json | 1 - .../12-explains_01-base.metadata.json | 4 +- .../12-explains_02-analyze.metadata.json | 4 +- .../12-explains_03-verbose.metadata.json | 4 +- ...-explains_04-analyze-verbose.metadata.json | 4 +- .../12-explains_05-other.metadata.json | 4 +- .../postgres_regress/aggregates.metadata.json | 64 +--- .../alter_table.metadata.json | 13 - .../postgres_regress/arrays.metadata.json | 3 - .../parse/postgres_regress/box.metadata.json | 17 +- .../parse/postgres_regress/brin.metadata.json | 12 +- .../postgres_regress/brin_bloom.metadata.json | 9 +- .../postgres_regress/brin_multi.metadata.json | 18 +- .../btree_index.metadata.json | 24 +- .../parse/postgres_regress/case.metadata.json | 3 - .../postgres_regress/cluster.metadata.json | 27 +- .../collate.icu.utf8.metadata.json | 12 - .../collate.linux.utf8.metadata.json | 2 - .../postgres_regress/collate.metadata.json | 2 - .../collate.windows.win1252.metadata.json | 3 - .../compression.metadata.json | 3 +- .../constraints.metadata.json | 1 - .../postgres_regress/create_am.metadata.json | 3 - .../create_cast.metadata.json | 7 +- .../create_function_sql.metadata.json | 3 - .../create_index.metadata.json | 117 ------- .../create_index_spgist.metadata.json | 74 +--- .../create_misc.metadata.json | 6 - .../create_operator.metadata.json | 1 - .../create_table.metadata.json | 4 - .../create_view.metadata.json | 8 +- .../postgres_regress/equivclass.metadata.json | 26 +- .../event_trigger.metadata.json | 22 -- .../expressions.metadata.json | 6 - .../fast_default.metadata.json | 5 - .../postgres_regress/float4.metadata.json | 6 +- .../postgres_regress/float8.metadata.json | 6 +- .../foreign_data.metadata.json | 1 - .../foreign_key.metadata.json | 1 - .../postgres_regress/geometry.metadata.json | 5 +- .../parse/postgres_regress/gin.metadata.json | 14 +- .../parse/postgres_regress/gist.metadata.json | 18 +- .../groupingsets.metadata.json | 35 +- .../postgres_regress/hash_index.metadata.json | 12 +- .../postgres_regress/horology.metadata.json | 7 +- .../incremental_sort.metadata.json | 44 +-- .../index_including.metadata.json | 7 +- .../index_including_gist.metadata.json | 6 +- .../postgres_regress/indexing.metadata.json | 5 +- .../indirect_toast.metadata.json | 4 +- .../parse/postgres_regress/inet.metadata.json | 9 +- .../postgres_regress/inherit.metadata.json | 80 ----- .../insert_conflict.metadata.json | 22 -- .../postgres_regress/interval.metadata.json | 1 - .../parse/postgres_regress/join.metadata.json | 209 +----------- .../postgres_regress/join_hash.metadata.json | 31 +- .../parse/postgres_regress/json.metadata.json | 1 - .../postgres_regress/jsonb.metadata.json | 6 +- .../largeobject.metadata.json | 3 +- .../postgres_regress/limit.metadata.json | 10 +- .../maintain_every.metadata.json | 5 +- .../postgres_regress/matview.metadata.json | 17 +- .../postgres_regress/memoize.metadata.json | 8 +- .../postgres_regress/merge.metadata.json | 16 - .../misc_functions.metadata.json | 4 - .../multirangetypes.metadata.json | 2 - .../parse/postgres_regress/mvcc.metadata.json | 4 +- .../parse/postgres_regress/name.metadata.json | 4 +- .../postgres_regress/namespace.metadata.json | 6 +- .../postgres_regress/numeric.metadata.json | 11 +- .../numeric_big.metadata.json | 11 +- .../object_address.metadata.json | 4 +- .../postgres_regress/oidjoins.metadata.json | 4 +- .../partition_aggregate.metadata.json | 51 +-- .../partition_join.metadata.json | 198 +---------- .../partition_prune.metadata.json | 244 +------------ .../postgres_regress/pg_lsn.metadata.json | 4 +- .../postgres_regress/plancache.metadata.json | 7 +- .../postgres_regress/plpgsql.metadata.json | 39 --- .../postgres_regress/polygon.metadata.json | 16 +- .../polymorphism.metadata.json | 1 - .../postgres_regress/portals.metadata.json | 7 +- .../postgres_regress/predicate.metadata.json | 27 +- .../postgres_regress/privileges.metadata.json | 13 - .../parse/postgres_regress/psql.metadata.json | 1 - .../psql_crosstab.metadata.json | 4 +- .../postgres_regress/rangefuncs.metadata.json | 19 +- .../postgres_regress/rangetypes.metadata.json | 20 +- .../postgres_regress/regex.metadata.json | 12 +- .../reindex_catalog.metadata.json | 20 +- .../postgres_regress/reloptions.metadata.json | 5 +- .../rowsecurity.metadata.json | 95 ------ .../postgres_regress/rowtypes.metadata.json | 16 +- .../postgres_regress/rules.metadata.json | 2 - .../sanity_check.metadata.json | 4 +- .../postgres_regress/select.metadata.json | 14 +- .../select_distinct.metadata.json | 13 +- .../select_distinct_on.metadata.json | 6 +- .../select_into.metadata.json | 13 +- .../select_parallel.metadata.json | 47 --- .../select_views.metadata.json | 10 +- .../postgres_regress/spgist.metadata.json | 6 +- .../postgres_regress/sqljson.metadata.json | 25 +- .../sqljson_jsontable.metadata.json | 7 - .../postgres_regress/stats.metadata.json | 14 +- .../postgres_regress/stats_ext.metadata.json | 65 ---- .../postgres_regress/subselect.metadata.json | 58 +--- .../tablesample.metadata.json | 8 +- .../postgres_regress/tablespace.metadata.json | 19 -- .../parse/postgres_regress/temp.metadata.json | 1 - .../postgres_regress/test_setup.metadata.json | 18 - .../tidrangescan.metadata.json | 17 +- .../postgres_regress/tidscan.metadata.json | 16 +- .../timestamptz.metadata.json | 4 +- .../transactions.metadata.json | 4 +- .../postgres_regress/tsearch.metadata.json | 12 +- .../parse/postgres_regress/tsrf.metadata.json | 9 +- .../postgres_regress/tuplesort.metadata.json | 15 +- .../postgres_regress/union.metadata.json | 44 +-- .../updatable_views.metadata.json | 37 -- .../postgres_regress/update.metadata.json | 2 - .../postgres_regress/vacuum.metadata.json | 138 +------- .../vacuum_parallel.metadata.json | 4 +- .../postgres_regress/window.metadata.json | 40 +-- .../parse/postgres_regress/with.metadata.json | 16 - .../write_parallel.metadata.json | 7 +- .../parse/postgres_regress/xml.metadata.json | 10 +- 133 files changed, 422 insertions(+), 2578 deletions(-) create mode 100644 internal/parse/utility_maint.go diff --git a/internal/parse/ddl_dispatch.go b/internal/parse/ddl_dispatch.go index 515bac6..cddcbcb 100644 --- a/internal/parse/ddl_dispatch.go +++ b/internal/parse/ddl_dispatch.go @@ -25,6 +25,9 @@ func (p *parser) parseCreateDispatch() *ast.Node { case ast.Token_SCHEMA: p.next() return p.parseCreateSchemaStmt() + case ast.Token_CAST: + p.next() + return p.parseCreateCastStmt() } if stmt := p.parseCreateStmtFamily(false); stmt != nil { return stmt diff --git a/internal/parse/parser.go b/internal/parse/parser.go index 331e866..30fe4ef 100644 --- a/internal/parse/parser.go +++ b/internal/parse/parser.go @@ -265,6 +265,18 @@ func (p *parser) parseToplevelStmt() *ast.Node { return p.parseRefreshMatViewStmt() case ast.Token_COMMENT: return p.parseCommentStmt() + case ast.Token_CLUSTER: + return p.parseClusterStmt() + case ast.Token_VACUUM: + return p.parseVacuumStmt() + case ast.Token_ANALYZE, ast.Token_ANALYSE: + return p.parseAnalyzeStmt() + case ast.Token_EXPLAIN: + return p.parseExplainStmt() + case ast.Token_REINDEX: + return p.parseReindexStmt() + case ast.Token_DO: + return p.parseDoStmt() case ast.Token_SECURITY: if p.kindN(1) == ast.Token_LABEL { p.next() diff --git a/internal/parse/utility_maint.go b/internal/parse/utility_maint.go new file mode 100644 index 0000000..8d13953 --- /dev/null +++ b/internal/parse/utility_maint.go @@ -0,0 +1,322 @@ +package parse + +// Maintenance and inspection utilities: ClusterStmt, VacuumStmt, +// AnalyzeStmt, ExplainStmt, ReindexStmt, DoStmt, CreateCastStmt. + +import ( + "github.com/sqlc-dev/oliphant/ast" +) + +// parseUtilityOptionList is gram.y's utility_option_list (the caller has +// consumed the opening paren). +func (p *parser) parseUtilityOptionList() []*ast.Node { + list := []*ast.Node{p.parseUtilityOptionElem()} + for p.have(ast.Token(',')) { + list = append(list, p.parseUtilityOptionElem()) + } + p.expect(ast.Token(')')) + return list +} + +// parseUtilityOptionElem is gram.y's utility_option_elem. +func (p *parser) parseUtilityOptionElem() *ast.Node { + tok := p.peek() + var name string + switch tok.Kind { + case ast.Token_ANALYZE, ast.Token_ANALYSE: + p.next() + name = "analyze" + case ast.Token_FORMAT_LA: + p.next() + name = "format" + default: + name = p.nonReservedWord() + } + // utility_option_arg + var arg *ast.Node + vtok := p.peek() + switch vtok.Kind { + case ast.Token(','), ast.Token(')'): + case ast.Token_ICONST, ast.Token_FCONST, ast.Token('+'), ast.Token('-'): + arg = p.parseNumericOnly() + default: + arg = nStr(p.parseOptBooleanOrString()) + } + return makeDefElem(name, arg, tok.Start) +} + +// parseClusterStmt is gram.y's ClusterStmt. +func (p *parser) parseClusterStmt() *ast.Node { + p.expect(ast.Token_CLUSTER) + n := &ast.ClusterStmt{} + if p.have(ast.Token('(')) { + n.Params = p.parseUtilityOptionList() + if isColIdToken(p.peek()) { + n.Relation = p.parseQualifiedName() + if p.have(ast.Token_USING) { + n.Indexname = p.name() + } + } + return &ast.Node{Node: &ast.Node_ClusterStmt{ClusterStmt: n}} + } + if vtok := p.peek(); vtok.Kind == ast.Token_VERBOSE { + p.next() + n.Params = []*ast.Node{makeDefElem("verbose", nil, vtok.Start)} + } + if isColIdToken(p.peek()) { + rel := p.parseQualifiedName() + switch { + case p.have(ast.Token_ON): + // pre-8.3: CLUSTER indexname ON relation + n.Indexname = rel.Relname + n.Relation = p.parseQualifiedName() + case p.have(ast.Token_USING): + n.Relation = rel + n.Indexname = p.name() + default: + n.Relation = rel + } + } + return &ast.Node{Node: &ast.Node_ClusterStmt{ClusterStmt: n}} +} + +// parseVacuumRelationList is gram.y's opt_vacuum_relation_list. +func (p *parser) parseOptVacuumRelationList() []*ast.Node { + if !isColIdToken(p.peek()) { + return nil + } + var list []*ast.Node + for { + v := &ast.VacuumRelation{Relation: p.parseQualifiedName()} + if p.have(ast.Token('(')) { + v.VaCols = p.nameList() + p.expect(ast.Token(')')) + } + list = append(list, &ast.Node{Node: &ast.Node_VacuumRelation{VacuumRelation: v}}) + if !p.have(ast.Token(',')) { + return list + } + } +} + +// parseVacuumStmt is gram.y's VacuumStmt. +func (p *parser) parseVacuumStmt() *ast.Node { + p.expect(ast.Token_VACUUM) + n := &ast.VacuumStmt{IsVacuumcmd: true} + if p.have(ast.Token('(')) { + n.Options = p.parseUtilityOptionList() + } else { + if tok := p.peek(); tok.Kind == ast.Token_FULL { + p.next() + n.Options = append(n.Options, makeDefElem("full", nil, tok.Start)) + } + if tok := p.peek(); tok.Kind == ast.Token_FREEZE { + p.next() + n.Options = append(n.Options, makeDefElem("freeze", nil, tok.Start)) + } + if tok := p.peek(); tok.Kind == ast.Token_VERBOSE { + p.next() + n.Options = append(n.Options, makeDefElem("verbose", nil, tok.Start)) + } + if tok := p.peek(); tok.Kind == ast.Token_ANALYZE || tok.Kind == ast.Token_ANALYSE { + p.next() + n.Options = append(n.Options, makeDefElem("analyze", nil, tok.Start)) + } + } + n.Rels = p.parseOptVacuumRelationList() + return &ast.Node{Node: &ast.Node_VacuumStmt{VacuumStmt: n}} +} + +// parseAnalyzeStmt is gram.y's AnalyzeStmt. +func (p *parser) parseAnalyzeStmt() *ast.Node { + p.next() // ANALYZE or ANALYSE + n := &ast.VacuumStmt{} + if p.have(ast.Token('(')) { + n.Options = p.parseUtilityOptionList() + } else if tok := p.peek(); tok.Kind == ast.Token_VERBOSE { + p.next() + n.Options = []*ast.Node{makeDefElem("verbose", nil, tok.Start)} + } + n.Rels = p.parseOptVacuumRelationList() + return &ast.Node{Node: &ast.Node_VacuumStmt{VacuumStmt: n}} +} + +// parseExplainStmt is gram.y's ExplainStmt. +func (p *parser) parseExplainStmt() *ast.Node { + p.expect(ast.Token_EXPLAIN) + n := &ast.ExplainStmt{} + switch tok := p.peek(); tok.Kind { + case ast.Token_ANALYZE, ast.Token_ANALYSE: + p.next() + n.Options = []*ast.Node{makeDefElem("analyze", nil, tok.Start)} + if vtok := p.peek(); vtok.Kind == ast.Token_VERBOSE { + p.next() + n.Options = append(n.Options, makeDefElem("verbose", nil, vtok.Start)) + } + case ast.Token_VERBOSE: + p.next() + n.Options = []*ast.Node{makeDefElem("verbose", nil, tok.Start)} + case ast.Token('('): + // EXPLAIN '(' could also start a parenthesized SelectStmt. + if !p.looksLikeSelectAhead() { + p.next() + n.Options = p.parseUtilityOptionList() + } + } + n.Query = p.parseExplainableStmt() + return &ast.Node{Node: &ast.Node_ExplainStmt{ExplainStmt: n}} +} + +// parseExplainableStmt is gram.y's ExplainableStmt. +func (p *parser) parseExplainableStmt() *ast.Node { + switch p.kind() { + case ast.Token_SELECT, ast.Token_TABLE, ast.Token_VALUES, ast.Token('('): + return p.parseSelectStmt() + case ast.Token_WITH, ast.Token_WITH_LA: + return p.parseWithPrefixedStmt() + case ast.Token_INSERT: + return p.parseInsertStmt(nil) + case ast.Token_UPDATE: + return p.parseUpdateStmt(nil) + case ast.Token_DELETE_P: + return p.parseDeleteStmt(nil) + case ast.Token_MERGE: + return p.parseMergeStmt(nil) + case ast.Token_DECLARE: + return p.parseDeclareCursorStmt() + case ast.Token_EXECUTE: + return p.parseExecuteStmt() + case ast.Token_REFRESH: + return p.parseRefreshMatViewStmt() + case ast.Token_CREATE: + // Only CreateAsStmt / CreateMatViewStmt (and the AS EXECUTE form) + // are explainable. + p.next() + persistence := p.parseOptTempAfterCreate() + if p.kind() == ast.Token_MATERIALIZED && persistence != relPersistTemp { + return p.parseCreateMatViewStmt(persistence) + } + p.expect(ast.Token_TABLE) + ifNotExists := false + if p.have(ast.Token_IF_P) { + p.expect(ast.Token_NOT) + p.expect(ast.Token_EXISTS) + ifNotExists = true + } + rel := p.parseQualifiedName() + rel.Relpersistence = persistence + into := p.parseCreateAsTarget(rel) + p.expect(ast.Token_AS) + return p.finishCreateTableAs(into, ifNotExists) + } + p.syntaxErrorAt() + return nil +} + +// parseReindexStmt is gram.y's ReindexStmt. +func (p *parser) parseReindexStmt() *ast.Node { + p.expect(ast.Token_REINDEX) + n := &ast.ReindexStmt{} + if p.have(ast.Token('(')) { + n.Params = p.parseUtilityOptionList() + } + switch p.kind() { + case ast.Token_INDEX, ast.Token_TABLE: + if p.next().Kind == ast.Token_INDEX { + n.Kind = ast.ReindexObjectType_REINDEX_OBJECT_INDEX + } else { + n.Kind = ast.ReindexObjectType_REINDEX_OBJECT_TABLE + } + if tok := p.peek(); tok.Kind == ast.Token_CONCURRENTLY { + p.next() + n.Params = append(n.Params, makeDefElem("concurrently", nil, tok.Start)) + } + n.Relation = p.parseQualifiedName() + case ast.Token_SCHEMA: + p.next() + n.Kind = ast.ReindexObjectType_REINDEX_OBJECT_SCHEMA + if tok := p.peek(); tok.Kind == ast.Token_CONCURRENTLY { + p.next() + n.Params = append(n.Params, makeDefElem("concurrently", nil, tok.Start)) + } + n.Name = p.name() + case ast.Token_SYSTEM_P, ast.Token_DATABASE: + if p.next().Kind == ast.Token_SYSTEM_P { + n.Kind = ast.ReindexObjectType_REINDEX_OBJECT_SYSTEM + } else { + n.Kind = ast.ReindexObjectType_REINDEX_OBJECT_DATABASE + } + if tok := p.peek(); tok.Kind == ast.Token_CONCURRENTLY { + p.next() + n.Params = append(n.Params, makeDefElem("concurrently", nil, tok.Start)) + } + if isColIdToken(p.peek()) { + n.Name = p.name() + } + default: + p.syntaxErrorAt() + } + return &ast.Node{Node: &ast.Node_ReindexStmt{ReindexStmt: n}} +} + +// parseDoStmt is gram.y's DoStmt: DO dostmt_opt_list. +func (p *parser) parseDoStmt() *ast.Node { + p.expect(ast.Token_DO) + n := &ast.DoStmt{} + for { + tok := p.peek() + switch tok.Kind { + case ast.Token_SCONST: + p.next() + n.Args = append(n.Args, makeDefElem("as", nStr(tok.Str), tok.Start)) + continue + case ast.Token_LANGUAGE: + p.next() + n.Args = append(n.Args, makeDefElem("language", nStr(p.nonReservedWordOrSconst()), tok.Start)) + continue + } + if n.Args == nil { + p.syntaxErrorAt() + } + return &ast.Node{Node: &ast.Node_DoStmt{DoStmt: n}} + } +} + +// parseCreateCastStmt is gram.y's CreateCastStmt; CREATE CAST consumed by +// the dispatcher. +func (p *parser) parseCreateCastStmt() *ast.Node { + n := &ast.CreateCastStmt{} + p.expect(ast.Token('(')) + n.Sourcetype = p.parseTypename() + p.expect(ast.Token_AS) + n.Targettype = p.parseTypename() + p.expect(ast.Token(')')) + switch { + case p.have(ast.Token_WITHOUT): + p.expect(ast.Token_FUNCTION) + case p.have(ast.Token_WITH), p.have(ast.Token_WITH_LA): + switch { + case p.have(ast.Token_FUNCTION): + n.Func = p.parseFunctionWithArgtypes().GetObjectWithArgs() + case p.have(ast.Token_INOUT): + n.Inout = true + default: + p.syntaxErrorAt() + } + default: + p.syntaxErrorAt() + } + // cast_context + n.Context = ast.CoercionContext_COERCION_EXPLICIT + if p.have(ast.Token_AS) { + switch { + case p.have(ast.Token_IMPLICIT_P): + n.Context = ast.CoercionContext_COERCION_IMPLICIT + case p.have(ast.Token_ASSIGNMENT): + n.Context = ast.CoercionContext_COERCION_ASSIGNMENT + default: + p.syntaxErrorAt() + } + } + return &ast.Node{Node: &ast.Node_CreateCastStmt{CreateCastStmt: n}} +} diff --git a/parser/testdata/deparse/postgres_regress/create_index.metadata.json b/parser/testdata/deparse/postgres_regress/create_index.metadata.json index fdcb254..fb2d23e 100644 --- a/parser/testdata/deparse/postgres_regress/create_index.metadata.json +++ b/parser/testdata/deparse/postgres_regress/create_index.metadata.json @@ -571,7 +571,6 @@ "572", "573", "574", - "575", "576", "577", "578", diff --git a/parser/testdata/deparse/postgres_regress/largeobject.metadata.json b/parser/testdata/deparse/postgres_regress/largeobject.metadata.json index 268ea7b..8ebfb3c 100644 --- a/parser/testdata/deparse/postgres_regress/largeobject.metadata.json +++ b/parser/testdata/deparse/postgres_regress/largeobject.metadata.json @@ -29,7 +29,6 @@ "028", "029", "030", - "031", "032", "033", "034", diff --git a/parser/testdata/deparse/postgres_regress/tuplesort.metadata.json b/parser/testdata/deparse/postgres_regress/tuplesort.metadata.json index c2deed3..3f30b56 100644 --- a/parser/testdata/deparse/postgres_regress/tuplesort.metadata.json +++ b/parser/testdata/deparse/postgres_regress/tuplesort.metadata.json @@ -102,9 +102,7 @@ "100", "101", "102", - "103", "104", - "105", "106" ] } diff --git a/parser/testdata/deparse/postgres_regress/vacuum.metadata.json b/parser/testdata/deparse/postgres_regress/vacuum.metadata.json index f4b786f..9b0a401 100644 --- a/parser/testdata/deparse/postgres_regress/vacuum.metadata.json +++ b/parser/testdata/deparse/postgres_regress/vacuum.metadata.json @@ -179,7 +179,6 @@ "177", "178", "179", - "180", "181", "182", "183", diff --git a/parser/testdata/parse/deparse_depesz/12-explains_01-base.metadata.json b/parser/testdata/parse/deparse_depesz/12-explains_01-base.metadata.json index f23fe5c..737fd31 100644 --- a/parser/testdata/parse/deparse_depesz/12-explains_01-base.metadata.json +++ b/parser/testdata/parse/deparse_depesz/12-explains_01-base.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "001" - ] + "todo": [] } diff --git a/parser/testdata/parse/deparse_depesz/12-explains_02-analyze.metadata.json b/parser/testdata/parse/deparse_depesz/12-explains_02-analyze.metadata.json index f23fe5c..737fd31 100644 --- a/parser/testdata/parse/deparse_depesz/12-explains_02-analyze.metadata.json +++ b/parser/testdata/parse/deparse_depesz/12-explains_02-analyze.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "001" - ] + "todo": [] } diff --git a/parser/testdata/parse/deparse_depesz/12-explains_03-verbose.metadata.json b/parser/testdata/parse/deparse_depesz/12-explains_03-verbose.metadata.json index f23fe5c..737fd31 100644 --- a/parser/testdata/parse/deparse_depesz/12-explains_03-verbose.metadata.json +++ b/parser/testdata/parse/deparse_depesz/12-explains_03-verbose.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "001" - ] + "todo": [] } diff --git a/parser/testdata/parse/deparse_depesz/12-explains_04-analyze-verbose.metadata.json b/parser/testdata/parse/deparse_depesz/12-explains_04-analyze-verbose.metadata.json index f23fe5c..737fd31 100644 --- a/parser/testdata/parse/deparse_depesz/12-explains_04-analyze-verbose.metadata.json +++ b/parser/testdata/parse/deparse_depesz/12-explains_04-analyze-verbose.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "001" - ] + "todo": [] } diff --git a/parser/testdata/parse/deparse_depesz/12-explains_05-other.metadata.json b/parser/testdata/parse/deparse_depesz/12-explains_05-other.metadata.json index f23fe5c..737fd31 100644 --- a/parser/testdata/parse/deparse_depesz/12-explains_05-other.metadata.json +++ b/parser/testdata/parse/deparse_depesz/12-explains_05-other.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "001" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/aggregates.metadata.json b/parser/testdata/parse/postgres_regress/aggregates.metadata.json index 847b98e..d6612c6 100644 --- a/parser/testdata/parse/postgres_regress/aggregates.metadata.json +++ b/parser/testdata/parse/postgres_regress/aggregates.metadata.json @@ -1,45 +1,5 @@ { "todo": [ - "004", - "109", - "111", - "125", - "127", - "129", - "131", - "135", - "138", - "140", - "142", - "144", - "146", - "148", - "150", - "152", - "154", - "168", - "170", - "175", - "184", - "185", - "186", - "187", - "188", - "190", - "191", - "195", - "209", - "210", - "211", - "212", - "213", - "214", - "217", - "219", - "220", - "221", - "294", - "298", "368", "369", "370", @@ -55,33 +15,11 @@ "393", "397", "398", - "403", - "406", - "407", - "408", - "411", - "414", - "415", - "417", - "419", - "422", - "424", - "425", - "432", - "433", "439", "440", - "444", "448", "449", "450", - "451", - "461", - "463", - "472", - "481", - "483", - "486", - "495" + "451" ] } diff --git a/parser/testdata/parse/postgres_regress/alter_table.metadata.json b/parser/testdata/parse/postgres_regress/alter_table.metadata.json index 6a55ee8..3f62d43 100644 --- a/parser/testdata/parse/postgres_regress/alter_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/alter_table.metadata.json @@ -121,7 +121,6 @@ "1527", "154", "1554", - "1555", "1580", "1581", "1585", @@ -130,7 +129,6 @@ "1599", "160", "1600", - "1604", "1605", "1606", "161", @@ -151,20 +149,12 @@ "172", "173", "214", - "242", - "244", - "245", - "247", "339", "368", "427", "432", "437", "532", - "590", - "591", - "592", - "593", "608", "609", "686", @@ -201,9 +191,6 @@ "886", "897", "898", - "903", - "910", - "913", "924", "929", "942", diff --git a/parser/testdata/parse/postgres_regress/arrays.metadata.json b/parser/testdata/parse/postgres_regress/arrays.metadata.json index 870722d..e080f32 100644 --- a/parser/testdata/parse/postgres_regress/arrays.metadata.json +++ b/parser/testdata/parse/postgres_regress/arrays.metadata.json @@ -1,8 +1,5 @@ { "todo": [ - "004", - "155", - "245", "312", "315", "321", diff --git a/parser/testdata/parse/postgres_regress/box.metadata.json b/parser/testdata/parse/postgres_regress/box.metadata.json index 8216c44..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/box.metadata.json +++ b/parser/testdata/parse/postgres_regress/box.metadata.json @@ -1,18 +1,3 @@ { - "todo": [ - "036", - "038", - "040", - "042", - "044", - "046", - "048", - "050", - "052", - "054", - "056", - "058", - "089", - "092" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/brin.metadata.json b/parser/testdata/parse/postgres_regress/brin.metadata.json index 8825117..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/brin.metadata.json +++ b/parser/testdata/parse/postgres_regress/brin.metadata.json @@ -1,13 +1,3 @@ { - "todo": [ - "007", - "012", - "024", - "043", - "044", - "045", - "052", - "055", - "067" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/brin_bloom.metadata.json b/parser/testdata/parse/postgres_regress/brin_bloom.metadata.json index 4630539..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/brin_bloom.metadata.json +++ b/parser/testdata/parse/postgres_regress/brin_bloom.metadata.json @@ -1,10 +1,3 @@ { - "todo": [ - "010", - "015", - "027", - "038", - "039", - "040" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/brin_multi.metadata.json b/parser/testdata/parse/postgres_regress/brin_multi.metadata.json index 84717f9..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/brin_multi.metadata.json +++ b/parser/testdata/parse/postgres_regress/brin_multi.metadata.json @@ -1,19 +1,3 @@ { - "todo": [ - "011", - "016", - "038", - "049", - "050", - "051", - "132", - "140", - "141", - "149", - "150", - "159", - "160", - "168", - "169" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/btree_index.metadata.json b/parser/testdata/parse/postgres_regress/btree_index.metadata.json index 8d7dbac..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/btree_index.metadata.json +++ b/parser/testdata/parse/postgres_regress/btree_index.metadata.json @@ -1,25 +1,3 @@ { - "todo": [ - "009", - "010", - "011", - "012", - "032", - "034", - "036", - "038", - "040", - "045", - "047", - "049", - "052", - "054", - "056", - "063", - "065", - "067", - "069", - "075", - "087" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/case.metadata.json b/parser/testdata/parse/postgres_regress/case.metadata.json index bab5860..7ef6689 100644 --- a/parser/testdata/parse/postgres_regress/case.metadata.json +++ b/parser/testdata/parse/postgres_regress/case.metadata.json @@ -1,8 +1,5 @@ { "todo": [ - "033", - "034", - "035", "043", "045", "046", diff --git a/parser/testdata/parse/postgres_regress/cluster.metadata.json b/parser/testdata/parse/postgres_regress/cluster.metadata.json index 8ac5e04..116d5e3 100644 --- a/parser/testdata/parse/postgres_regress/cluster.metadata.json +++ b/parser/testdata/parse/postgres_regress/cluster.metadata.json @@ -1,30 +1,5 @@ { "todo": [ - "046", - "061", - "068", - "075", - "076", - "077", - "090", - "096", - "111", - "117", - "123", - "124", - "133", - "137", - "140", - "151", - "156", - "165", - "175", - "177", - "180", - "184", - "186", - "189", - "193", - "195" + "068" ] } diff --git a/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json b/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json index b14dda0..fe16ccc 100644 --- a/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json @@ -9,11 +9,7 @@ "125", "127", "134", - "146", - "148", - "155", "156", - "157", "160", "162", "163", @@ -51,14 +47,6 @@ "253", "255", "366", - "462", - "464", - "467", - "469", - "472", - "475", - "477", - "480", "486", "487", "501" diff --git a/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json b/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json index e96b82a..74eb40a 100644 --- a/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json @@ -9,11 +9,9 @@ "133", "135", "142", - "155", "156", "157", "158", - "159", "160", "161", "162", diff --git a/parser/testdata/parse/postgres_regress/collate.metadata.json b/parser/testdata/parse/postgres_regress/collate.metadata.json index dd35b2c..e72fce2 100644 --- a/parser/testdata/parse/postgres_regress/collate.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.metadata.json @@ -5,8 +5,6 @@ "048", "083", "087", - "113", - "114", "115", "117", "118", diff --git a/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json b/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json index 4bc227a..c4f53aa 100644 --- a/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json @@ -9,11 +9,9 @@ "104", "106", "113", - "126", "127", "128", "129", - "130", "131", "132", "133", @@ -31,7 +29,6 @@ "156", "164", "165", - "170", "171" ] } diff --git a/parser/testdata/parse/postgres_regress/compression.metadata.json b/parser/testdata/parse/postgres_regress/compression.metadata.json index 1e62a21..bc39747 100644 --- a/parser/testdata/parse/postgres_regress/compression.metadata.json +++ b/parser/testdata/parse/postgres_regress/compression.metadata.json @@ -3,7 +3,6 @@ "025", "035", "036", - "037", - "073" + "037" ] } diff --git a/parser/testdata/parse/postgres_regress/constraints.metadata.json b/parser/testdata/parse/postgres_regress/constraints.metadata.json index bf96b8f..62369fd 100644 --- a/parser/testdata/parse/postgres_regress/constraints.metadata.json +++ b/parser/testdata/parse/postgres_regress/constraints.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "268", "295", "314", "315" diff --git a/parser/testdata/parse/postgres_regress/create_am.metadata.json b/parser/testdata/parse/postgres_regress/create_am.metadata.json index 89fe5f4..4995994 100644 --- a/parser/testdata/parse/postgres_regress/create_am.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_am.metadata.json @@ -4,9 +4,6 @@ "002", "003", "005", - "012", - "014", - "016", "027", "028", "029", diff --git a/parser/testdata/parse/postgres_regress/create_cast.metadata.json b/parser/testdata/parse/postgres_regress/create_cast.metadata.json index ed2f6da..8bcf78f 100644 --- a/parser/testdata/parse/postgres_regress/create_cast.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_cast.metadata.json @@ -5,12 +5,7 @@ "003", "004", "005", - "007", - "011", - "014", "017", - "018", - "021", - "022" + "021" ] } diff --git a/parser/testdata/parse/postgres_regress/create_function_sql.metadata.json b/parser/testdata/parse/postgres_regress/create_function_sql.metadata.json index db518e6..e318344 100644 --- a/parser/testdata/parse/postgres_regress/create_function_sql.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_function_sql.metadata.json @@ -58,12 +58,9 @@ "120", "121", "125", - "127", "128", - "131", "133", "135", - "137", "139", "141", "144", diff --git a/parser/testdata/parse/postgres_regress/create_index.metadata.json b/parser/testdata/parse/postgres_regress/create_index.metadata.json index 09e1f0b..311e782 100644 --- a/parser/testdata/parse/postgres_regress/create_index.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_index.metadata.json @@ -1,128 +1,11 @@ { "todo": [ - "027", - "028", - "065", - "067", - "069", - "071", - "073", - "075", - "077", - "079", - "081", - "083", - "085", - "087", - "089", - "091", - "093", - "095", - "097", - "099", - "101", - "103", - "105", - "110", - "117", - "126", - "140", - "176", "239", - "246", - "247", - "249", - "250", "333", - "355", - "357", - "361", - "362", - "364", - "366", - "368", - "370", - "372", - "374", - "376", - "378", - "380", - "382", - "384", - "386", - "388", - "390", - "392", - "393", - "394", - "395", - "396", - "397", - "399", - "402", - "403", - "415", - "416", - "420", - "421", - "422", - "428", - "430", - "436", - "443", - "449", - "468", - "469", - "471", - "472", - "475", - "476", - "477", - "478", - "480", "482", "483", - "485", - "489", - "492", - "493", - "494", - "495", - "497", - "500", - "504", - "511", - "513", - "514", - "515", - "516", - "517", - "518", - "519", - "520", - "521", - "527", - "530", - "531", - "539", - "544", "548", - "558", - "559", - "561", - "565", - "566", - "571", - "575", - "578", - "592", - "595", - "597", - "599", - "602", "604", - "606", - "607", "609" ] } diff --git a/parser/testdata/parse/postgres_regress/create_index_spgist.metadata.json b/parser/testdata/parse/postgres_regress/create_index_spgist.metadata.json index 9ab1f9c..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/create_index_spgist.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_index_spgist.metadata.json @@ -1,75 +1,3 @@ { - "todo": [ - "045", - "047", - "049", - "051", - "053", - "055", - "057", - "059", - "061", - "063", - "065", - "068", - "071", - "074", - "076", - "078", - "080", - "082", - "084", - "086", - "088", - "091", - "094", - "099", - "103", - "105", - "107", - "109", - "111", - "113", - "115", - "117", - "119", - "121", - "123", - "125", - "127", - "129", - "131", - "136", - "138", - "140", - "142", - "144", - "146", - "148", - "150", - "152", - "154", - "156", - "158", - "160", - "162", - "164", - "166", - "168", - "170", - "172", - "174", - "176", - "178", - "180", - "182", - "184", - "186", - "188", - "190", - "192", - "194", - "196", - "198" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/create_misc.metadata.json b/parser/testdata/parse/postgres_regress/create_misc.metadata.json index d23604e..acc318e 100644 --- a/parser/testdata/parse/postgres_regress/create_misc.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_misc.metadata.json @@ -1,11 +1,5 @@ { "todo": [ - "057", - "058", - "059", - "060", - "061", - "062", "071", "072", "073", diff --git a/parser/testdata/parse/postgres_regress/create_operator.metadata.json b/parser/testdata/parse/postgres_regress/create_operator.metadata.json index 21d218d..0805cb4 100644 --- a/parser/testdata/parse/postgres_regress/create_operator.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_operator.metadata.json @@ -5,7 +5,6 @@ "003", "011", "012", - "017", "027", "028", "030", diff --git a/parser/testdata/parse/postgres_regress/create_table.metadata.json b/parser/testdata/parse/postgres_regress/create_table.metadata.json index 3214b23..dddc00f 100644 --- a/parser/testdata/parse/postgres_regress/create_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_table.metadata.json @@ -1,8 +1,6 @@ { "todo": [ "002", - "007", - "008", "032", "058", "066", @@ -10,8 +8,6 @@ "076", "081", "089", - "101", - "106", "108", "114", "266", diff --git a/parser/testdata/parse/postgres_regress/create_view.metadata.json b/parser/testdata/parse/postgres_regress/create_view.metadata.json index 9fc20b1..57ec6e1 100644 --- a/parser/testdata/parse/postgres_regress/create_view.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_view.metadata.json @@ -1,7 +1,6 @@ { "todo": [ "001", - "004", "031", "039", "117", @@ -17,16 +16,11 @@ "158", "188", "228", - "237", "241", "244", - "255", "257", "271", - "274", "280", - "282", - "295", - "296" + "282" ] } diff --git a/parser/testdata/parse/postgres_regress/equivclass.metadata.json b/parser/testdata/parse/postgres_regress/equivclass.metadata.json index 46d84cb..a085c85 100644 --- a/parser/testdata/parse/postgres_regress/equivclass.metadata.json +++ b/parser/testdata/parse/postgres_regress/equivclass.metadata.json @@ -8,10 +8,6 @@ "006", "007", "008", - "009", - "010", - "011", - "012", "013", "014", "015", @@ -29,30 +25,10 @@ "027", "028", "029", - "035", - "036", - "037", - "038", - "039", - "040", - "041", - "042", - "043", - "048", - "049", - "050", - "053", - "057", - "060", "064", "066", "067", - "068", - "070", "072", - "073", - "075", - "076", - "079" + "073" ] } diff --git a/parser/testdata/parse/postgres_regress/event_trigger.metadata.json b/parser/testdata/parse/postgres_regress/event_trigger.metadata.json index 03e28af..8db0e57 100644 --- a/parser/testdata/parse/postgres_regress/event_trigger.metadata.json +++ b/parser/testdata/parse/postgres_regress/event_trigger.metadata.json @@ -74,29 +74,7 @@ "162", "163", "164", - "167", - "168", - "169", - "170", "171", - "172", - "173", - "175", - "176", - "178", - "179", - "182", - "183", - "185", - "186", - "189", - "190", - "192", - "193", - "195", - "196", - "197", - "198", "209", "210", "211", diff --git a/parser/testdata/parse/postgres_regress/expressions.metadata.json b/parser/testdata/parse/postgres_regress/expressions.metadata.json index 4ece716..93aedf9 100644 --- a/parser/testdata/parse/postgres_regress/expressions.metadata.json +++ b/parser/testdata/parse/postgres_regress/expressions.metadata.json @@ -1,9 +1,5 @@ { "todo": [ - "023", - "026", - "028", - "029", "032", "033", "051", @@ -11,8 +7,6 @@ "053", "054", "055", - "056", - "057", "058", "059", "060", diff --git a/parser/testdata/parse/postgres_regress/fast_default.metadata.json b/parser/testdata/parse/postgres_regress/fast_default.metadata.json index 577473b..59631cb 100644 --- a/parser/testdata/parse/postgres_regress/fast_default.metadata.json +++ b/parser/testdata/parse/postgres_regress/fast_default.metadata.json @@ -10,11 +10,6 @@ "069", "070", "094", - "107", - "109", - "113", - "115", - "117", "139", "144", "153", diff --git a/parser/testdata/parse/postgres_regress/float4.metadata.json b/parser/testdata/parse/postgres_regress/float4.metadata.json index 9b7c4a0..18d1452 100644 --- a/parser/testdata/parse/postgres_regress/float4.metadata.json +++ b/parser/testdata/parse/postgres_regress/float4.metadata.json @@ -3,10 +3,6 @@ "090", "091", "092", - "093", - "094", - "095", - "096", - "097" + "093" ] } diff --git a/parser/testdata/parse/postgres_regress/float8.metadata.json b/parser/testdata/parse/postgres_regress/float8.metadata.json index dc25d2c..f8773c4 100644 --- a/parser/testdata/parse/postgres_regress/float8.metadata.json +++ b/parser/testdata/parse/postgres_regress/float8.metadata.json @@ -3,10 +3,6 @@ "159", "160", "161", - "162", - "163", - "164", - "165", - "166" + "162" ] } diff --git a/parser/testdata/parse/postgres_regress/foreign_data.metadata.json b/parser/testdata/parse/postgres_regress/foreign_data.metadata.json index 712cad4..3298653 100644 --- a/parser/testdata/parse/postgres_regress/foreign_data.metadata.json +++ b/parser/testdata/parse/postgres_regress/foreign_data.metadata.json @@ -119,7 +119,6 @@ "204", "206", "207", - "212", "214", "221", "222", diff --git a/parser/testdata/parse/postgres_regress/foreign_key.metadata.json b/parser/testdata/parse/postgres_regress/foreign_key.metadata.json index adef036..dc05f10 100644 --- a/parser/testdata/parse/postgres_regress/foreign_key.metadata.json +++ b/parser/testdata/parse/postgres_regress/foreign_key.metadata.json @@ -18,7 +18,6 @@ "426", "427", "488", - "489", "581", "688", "700", diff --git a/parser/testdata/parse/postgres_regress/geometry.metadata.json b/parser/testdata/parse/postgres_regress/geometry.metadata.json index 718c792..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/geometry.metadata.json +++ b/parser/testdata/parse/postgres_regress/geometry.metadata.json @@ -1,6 +1,3 @@ { - "todo": [ - "153", - "157" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/gin.metadata.json b/parser/testdata/parse/postgres_regress/gin.metadata.json index aee94eb..8ea03b0 100644 --- a/parser/testdata/parse/postgres_regress/gin.metadata.json +++ b/parser/testdata/parse/postgres_regress/gin.metadata.json @@ -1,19 +1,7 @@ { "todo": [ - "007", - "010", - "015", - "016", - "019", - "026", - "029", "031", "032", - "033", - "039", - "042", - "044", - "046", - "049" + "033" ] } diff --git a/parser/testdata/parse/postgres_regress/gist.metadata.json b/parser/testdata/parse/postgres_regress/gist.metadata.json index 58aa003..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/gist.metadata.json +++ b/parser/testdata/parse/postgres_regress/gist.metadata.json @@ -1,19 +1,3 @@ { - "todo": [ - "014", - "016", - "019", - "024", - "026", - "028", - "030", - "034", - "036", - "038", - "042", - "046", - "048", - "050", - "052" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/groupingsets.metadata.json b/parser/testdata/parse/postgres_regress/groupingsets.metadata.json index c3b51b7..e9cea49 100644 --- a/parser/testdata/parse/postgres_regress/groupingsets.metadata.json +++ b/parser/testdata/parse/postgres_regress/groupingsets.metadata.json @@ -1,38 +1,5 @@ { "todo": [ - "010", - "037", - "043", - "045", - "047", - "051", - "065", - "071", - "073", - "088", - "090", - "091", - "094", - "096", - "098", - "101", - "103", - "105", - "107", - "109", - "111", - "113", - "115", - "118", - "121", - "131", - "132", - "134", - "138", - "146", - "153", - "157", - "169", - "171" + "010" ] } diff --git a/parser/testdata/parse/postgres_regress/hash_index.metadata.json b/parser/testdata/parse/postgres_regress/hash_index.metadata.json index c415838..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/hash_index.metadata.json +++ b/parser/testdata/parse/postgres_regress/hash_index.metadata.json @@ -1,13 +1,3 @@ { - "todo": [ - "009", - "010", - "011", - "012", - "059", - "061", - "070", - "078", - "086" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/horology.metadata.json b/parser/testdata/parse/postgres_regress/horology.metadata.json index ac1f11d..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/horology.metadata.json +++ b/parser/testdata/parse/postgres_regress/horology.metadata.json @@ -1,8 +1,3 @@ { - "todo": [ - "216", - "218", - "220", - "222" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/incremental_sort.metadata.json b/parser/testdata/parse/postgres_regress/incremental_sort.metadata.json index d950629..4ba2a8a 100644 --- a/parser/testdata/parse/postgres_regress/incremental_sort.metadata.json +++ b/parser/testdata/parse/postgres_regress/incremental_sort.metadata.json @@ -1,50 +1,8 @@ { "todo": [ - "001", - "003", "006", "007", "008", - "009", - "011", - "012", - "014", - "016", - "018", - "020", - "024", - "025", - "032", - "033", - "035", - "042", - "050", - "051", - "053", - "055", - "057", - "059", - "063", - "064", - "066", - "068", - "070", - "072", - "084", - "086", - "088", - "090", - "091", - "100", - "101", - "102", - "103", - "104", - "105", - "106", - "107", - "108", - "118", - "119" + "009" ] } diff --git a/parser/testdata/parse/postgres_regress/index_including.metadata.json b/parser/testdata/parse/postgres_regress/index_including.metadata.json index b4a1c3e..d5927ed 100644 --- a/parser/testdata/parse/postgres_regress/index_including.metadata.json +++ b/parser/testdata/parse/postgres_regress/index_including.metadata.json @@ -1,11 +1,6 @@ { "todo": [ - "039", - "042", - "099", "124", - "125", - "130", - "132" + "125" ] } diff --git a/parser/testdata/parse/postgres_regress/index_including_gist.metadata.json b/parser/testdata/parse/postgres_regress/index_including_gist.metadata.json index fcbbabc..1870c99 100644 --- a/parser/testdata/parse/postgres_regress/index_including_gist.metadata.json +++ b/parser/testdata/parse/postgres_regress/index_including_gist.metadata.json @@ -1,10 +1,6 @@ { "todo": [ - "007", - "016", - "028", "043", - "044", - "049" + "044" ] } diff --git a/parser/testdata/parse/postgres_regress/indexing.metadata.json b/parser/testdata/parse/postgres_regress/indexing.metadata.json index a15cc17..2cf6d67 100644 --- a/parser/testdata/parse/postgres_regress/indexing.metadata.json +++ b/parser/testdata/parse/postgres_regress/indexing.metadata.json @@ -1,8 +1,5 @@ { "todo": [ - "028", - "445", - "448", - "451" + "028" ] } diff --git a/parser/testdata/parse/postgres_regress/indirect_toast.metadata.json b/parser/testdata/parse/postgres_regress/indirect_toast.metadata.json index 8a4a039..469a63a 100644 --- a/parser/testdata/parse/postgres_regress/indirect_toast.metadata.json +++ b/parser/testdata/parse/postgres_regress/indirect_toast.metadata.json @@ -1,9 +1,7 @@ { "todo": [ "001", - "014", "016", - "017", - "024" + "017" ] } diff --git a/parser/testdata/parse/postgres_regress/inet.metadata.json b/parser/testdata/parse/postgres_regress/inet.metadata.json index 1a30c44..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/inet.metadata.json +++ b/parser/testdata/parse/postgres_regress/inet.metadata.json @@ -1,10 +1,3 @@ { - "todo": [ - "038", - "040", - "042", - "044", - "061", - "078" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/inherit.metadata.json b/parser/testdata/parse/postgres_regress/inherit.metadata.json index aa0b911..d6cc131 100644 --- a/parser/testdata/parse/postgres_regress/inherit.metadata.json +++ b/parser/testdata/parse/postgres_regress/inherit.metadata.json @@ -2,15 +2,9 @@ "todo": [ "084", "085", - "086", - "093", - "095", - "134", "155", "160", "161", - "175", - "176", "182", "252", "253", @@ -19,87 +13,13 @@ "266", "268", "269", - "353", - "354", - "355", - "356", - "359", - "376", - "378", - "383", - "385", - "389", - "397", - "404", - "405", - "406", - "411", - "412", - "413", - "414", - "415", - "416", - "417", - "427", - "437", "453", "454", "465", - "484", - "485", - "486", - "487", - "488", - "489", - "504", - "505", - "506", - "507", - "508", - "509", - "510", - "511", - "522", - "523", - "524", - "525", - "526", - "527", - "528", - "533", - "537", - "539", - "540", - "545", - "547", - "548", - "555", - "558", - "559", - "562", - "563", - "566", - "567", - "568", - "569", - "578", - "580", - "587", - "595", - "596", - "597", - "598", - "604", - "605", - "614", "616", "617", - "619", - "620", "622", "623", - "625", - "626", "628" ] } diff --git a/parser/testdata/parse/postgres_regress/insert_conflict.metadata.json b/parser/testdata/parse/postgres_regress/insert_conflict.metadata.json index d4e8f23..2876a05 100644 --- a/parser/testdata/parse/postgres_regress/insert_conflict.metadata.json +++ b/parser/testdata/parse/postgres_regress/insert_conflict.metadata.json @@ -1,27 +1,5 @@ { "todo": [ - "007", - "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "025", - "026", - "029", - "030", - "031", - "032", - "077", - "103", - "104", "251", "252" ] diff --git a/parser/testdata/parse/postgres_regress/interval.metadata.json b/parser/testdata/parse/postgres_regress/interval.metadata.json index c586958..853e867 100644 --- a/parser/testdata/parse/postgres_regress/interval.metadata.json +++ b/parser/testdata/parse/postgres_regress/interval.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "059", "379" ] } diff --git a/parser/testdata/parse/postgres_regress/join.metadata.json b/parser/testdata/parse/postgres_regress/join.metadata.json index 4621e65..0eca778 100644 --- a/parser/testdata/parse/postgres_regress/join.metadata.json +++ b/parser/testdata/parse/postgres_regress/join.metadata.json @@ -1,217 +1,10 @@ { "todo": [ - "025", - "067", - "119", - "121", - "124", - "126", - "128", - "129", - "130", - "131", - "132", - "133", - "134", - "135", - "136", - "137", - "138", - "139", - "140", - "141", - "142", - "144", - "149", - "200", - "203", - "210", - "217", - "220", - "222", - "225", - "226", - "227", - "228", - "229", - "231", "270", - "273", - "276", - "297", - "311", - "313", - "315", - "321", - "322", - "323", - "324", - "325", - "326", - "329", - "331", - "333", - "335", - "337", - "338", "339", - "340", - "341", - "342", - "343", - "344", - "345", - "346", - "347", - "348", - "349", - "350", "352", "353", - "354", - "356", "360", - "361", - "363", - "364", - "365", - "366", - "367", - "368", - "370", - "372", - "374", - "376", - "378", - "380", - "382", - "384", - "386", - "388", - "390", - "392", - "394", - "396", - "397", - "398", - "400", - "402", - "404", - "408", - "410", - "412", - "414", - "415", - "418", - "422", - "424", - "426", - "428", - "430", - "441", - "442", - "443", - "444", - "445", - "446", - "447", - "448", - "449", - "450", - "451", - "452", - "453", - "454", - "455", - "456", - "457", - "458", - "459", - "460", - "461", - "462", - "463", - "466", - "473", - "475", - "477", - "479", - "492", - "493", - "494", - "498", - "499", - "505", - "511", - "512", - "515", - "520", - "530", - "532", - "534", - "535", - "537", - "541", - "542", - "543", - "544", - "546", - "548", - "550", - "565", - "567", - "569", - "571", - "573", - "575", - "577", - "578", - "580", - "581", - "582", - "583", - "584", - "587", - "589", - "614", - "622", - "623", - "625", - "633", - "634", - "635", - "643", - "644", - "645", - "646", - "647", - "648", - "649", - "650", - "651", - "652", - "653", - "654", - "655", - "665", - "666", - "667", - "668", - "669", - "670", - "671", - "673", - "681", - "682", - "684", - "686", - "694", - "696", - "698", - "703", - "706", - "712", - "713", - "714" + "712" ] } diff --git a/parser/testdata/parse/postgres_regress/join_hash.metadata.json b/parser/testdata/parse/postgres_regress/join_hash.metadata.json index 9e9480a..644c2fc 100644 --- a/parser/testdata/parse/postgres_regress/join_hash.metadata.json +++ b/parser/testdata/parse/postgres_regress/join_hash.metadata.json @@ -1,35 +1,6 @@ { "todo": [ "005", - "006", - "009", - "013", - "018", - "027", - "036", - "045", - "053", - "062", - "071", - "080", - "089", - "098", - "106", - "115", - "124", - "150", - "165", - "180", - "195", - "201", - "207", - "212", - "217", - "223", - "228", - "236", - "270", - "272", - "277" + "006" ] } diff --git a/parser/testdata/parse/postgres_regress/json.metadata.json b/parser/testdata/parse/postgres_regress/json.metadata.json index c0349d2..f17800b 100644 --- a/parser/testdata/parse/postgres_regress/json.metadata.json +++ b/parser/testdata/parse/postgres_regress/json.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "068", "212", "213", "214", diff --git a/parser/testdata/parse/postgres_regress/jsonb.metadata.json b/parser/testdata/parse/postgres_regress/jsonb.metadata.json index 8fe7205..d329f80 100644 --- a/parser/testdata/parse/postgres_regress/jsonb.metadata.json +++ b/parser/testdata/parse/postgres_regress/jsonb.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "059", "353", "354", "355", @@ -15,9 +14,6 @@ "456", "457", "458", - "459", - "570", - "588", - "645" + "459" ] } diff --git a/parser/testdata/parse/postgres_regress/largeobject.metadata.json b/parser/testdata/parse/postgres_regress/largeobject.metadata.json index 849f509..f7bda51 100644 --- a/parser/testdata/parse/postgres_regress/largeobject.metadata.json +++ b/parser/testdata/parse/postgres_regress/largeobject.metadata.json @@ -1,7 +1,6 @@ { "todo": [ "004", - "006", - "031" + "006" ] } diff --git a/parser/testdata/parse/postgres_regress/limit.metadata.json b/parser/testdata/parse/postgres_regress/limit.metadata.json index 011e75c..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/limit.metadata.json +++ b/parser/testdata/parse/postgres_regress/limit.metadata.json @@ -1,11 +1,3 @@ { - "todo": [ - "053", - "056", - "059", - "061", - "063", - "065", - "067" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/maintain_every.metadata.json b/parser/testdata/parse/postgres_regress/maintain_every.metadata.json index 1c0618d..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/maintain_every.metadata.json +++ b/parser/testdata/parse/postgres_regress/maintain_every.metadata.json @@ -1,6 +1,3 @@ { - "todo": [ - "007", - "011" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/matview.metadata.json b/parser/testdata/parse/postgres_regress/matview.metadata.json index 3f23ee2..87d0923 100644 --- a/parser/testdata/parse/postgres_regress/matview.metadata.json +++ b/parser/testdata/parse/postgres_regress/matview.metadata.json @@ -1,26 +1,11 @@ { "todo": [ - "005", - "013", - "021", "027", - "037", - "038", - "039", - "047", - "048", - "049", "102", "143", "150", "157", "158", - "161", - "164", - "167", - "175", - "176", - "177", - "178" + "167" ] } diff --git a/parser/testdata/parse/postgres_regress/memoize.metadata.json b/parser/testdata/parse/postgres_regress/memoize.metadata.json index 92965cd..f23fe5c 100644 --- a/parser/testdata/parse/postgres_regress/memoize.metadata.json +++ b/parser/testdata/parse/postgres_regress/memoize.metadata.json @@ -1,11 +1,5 @@ { "todo": [ - "001", - "015", - "024", - "034", - "046", - "052", - "064" + "001" ] } diff --git a/parser/testdata/parse/postgres_regress/merge.metadata.json b/parser/testdata/parse/postgres_regress/merge.metadata.json index 818da23..3258c32 100644 --- a/parser/testdata/parse/postgres_regress/merge.metadata.json +++ b/parser/testdata/parse/postgres_regress/merge.metadata.json @@ -1,14 +1,8 @@ { "todo": [ "018", - "020", "040", "043", - "070", - "071", - "072", - "073", - "075", "204", "205", "206", @@ -24,31 +18,21 @@ "216", "227", "229", - "230", - "235", "262", "320", "324", "328", "335", - "349", "381", - "407", - "415", "419", "420", - "421", "425", "426", - "427", "433", - "459", - "463", "484", "485", "501", "502", - "533", "540" ] } diff --git a/parser/testdata/parse/postgres_regress/misc_functions.metadata.json b/parser/testdata/parse/postgres_regress/misc_functions.metadata.json index 1b97809..25504a4 100644 --- a/parser/testdata/parse/postgres_regress/misc_functions.metadata.json +++ b/parser/testdata/parse/postgres_regress/misc_functions.metadata.json @@ -5,13 +5,9 @@ "055", "087", "092", - "093", "094", "095", - "096", "097", - "098", - "099", "113" ] } diff --git a/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json b/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json index 2e7f395..d35ef2e 100644 --- a/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json +++ b/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json @@ -1,7 +1,5 @@ { "todo": [ - "104", - "373", "511", "512", "515", diff --git a/parser/testdata/parse/postgres_regress/mvcc.metadata.json b/parser/testdata/parse/postgres_regress/mvcc.metadata.json index e25e31e..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/mvcc.metadata.json +++ b/parser/testdata/parse/postgres_regress/mvcc.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "009" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/name.metadata.json b/parser/testdata/parse/postgres_regress/name.metadata.json index 3b2ed2e..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/name.metadata.json +++ b/parser/testdata/parse/postgres_regress/name.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "023" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/namespace.metadata.json b/parser/testdata/parse/postgres_regress/namespace.metadata.json index 98ce15e..8a3aa56 100644 --- a/parser/testdata/parse/postgres_regress/namespace.metadata.json +++ b/parser/testdata/parse/postgres_regress/namespace.metadata.json @@ -5,10 +5,6 @@ "011", "022", "026", - "031", - "036", - "037", - "038", - "039" + "031" ] } diff --git a/parser/testdata/parse/postgres_regress/numeric.metadata.json b/parser/testdata/parse/postgres_regress/numeric.metadata.json index 0b355d0..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/numeric.metadata.json +++ b/parser/testdata/parse/postgres_regress/numeric.metadata.json @@ -1,12 +1,3 @@ { - "todo": [ - "481", - "482", - "483", - "484", - "485", - "486", - "487", - "488" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/numeric_big.metadata.json b/parser/testdata/parse/postgres_regress/numeric_big.metadata.json index c2bc4e6..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/numeric_big.metadata.json +++ b/parser/testdata/parse/postgres_regress/numeric_big.metadata.json @@ -1,12 +1,3 @@ { - "todo": [ - "491", - "492", - "493", - "494", - "495", - "496", - "497", - "498" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/object_address.metadata.json b/parser/testdata/parse/postgres_regress/object_address.metadata.json index 06c5a9e..0e2d8b8 100644 --- a/parser/testdata/parse/postgres_regress/object_address.metadata.json +++ b/parser/testdata/parse/postgres_regress/object_address.metadata.json @@ -23,8 +23,6 @@ "032", "033", "035", - "036", - "040", - "045" + "036" ] } diff --git a/parser/testdata/parse/postgres_regress/oidjoins.metadata.json b/parser/testdata/parse/postgres_regress/oidjoins.metadata.json index f23fe5c..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/oidjoins.metadata.json +++ b/parser/testdata/parse/postgres_regress/oidjoins.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "001" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/partition_aggregate.metadata.json b/parser/testdata/parse/postgres_regress/partition_aggregate.metadata.json index 159c333..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/partition_aggregate.metadata.json +++ b/parser/testdata/parse/postgres_regress/partition_aggregate.metadata.json @@ -1,52 +1,3 @@ { - "todo": [ - "010", - "011", - "013", - "015", - "016", - "017", - "018", - "020", - "023", - "025", - "027", - "029", - "032", - "033", - "034", - "045", - "046", - "047", - "049", - "051", - "053", - "056", - "058", - "060", - "062", - "064", - "066", - "073", - "074", - "076", - "078", - "091", - "094", - "096", - "098", - "100", - "102", - "106", - "108", - "110", - "118", - "119", - "121", - "125", - "126", - "129", - "130", - "134" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/partition_join.metadata.json b/parser/testdata/parse/postgres_regress/partition_join.metadata.json index b2f78d8..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/partition_join.metadata.json +++ b/parser/testdata/parse/postgres_regress/partition_join.metadata.json @@ -1,199 +1,3 @@ { - "todo": [ - "010", - "019", - "020", - "022", - "024", - "026", - "028", - "030", - "032", - "034", - "036", - "038", - "040", - "042", - "044", - "045", - "047", - "051", - "055", - "064", - "070", - "071", - "073", - "075", - "077", - "079", - "081", - "083", - "085", - "087", - "091", - "093", - "095", - "097", - "106", - "112", - "113", - "120", - "126", - "132", - "133", - "135", - "136", - "137", - "138", - "144", - "150", - "156", - "157", - "161", - "164", - "165", - "168", - "171", - "172", - "182", - "192", - "193", - "195", - "197", - "199", - "201", - "203", - "204", - "206", - "207", - "212", - "217", - "223", - "229", - "230", - "231", - "232", - "233", - "234", - "235", - "236", - "237", - "238", - "251", - "252", - "253", - "255", - "263", - "272", - "273", - "275", - "277", - "279", - "281", - "285", - "286", - "288", - "290", - "292", - "293", - "295", - "296", - "297", - "304", - "305", - "306", - "307", - "308", - "309", - "312", - "316", - "317", - "320", - "322", - "323", - "326", - "327", - "329", - "331", - "337", - "338", - "349", - "355", - "356", - "360", - "362", - "363", - "372", - "378", - "379", - "381", - "383", - "385", - "387", - "391", - "392", - "394", - "396", - "398", - "399", - "401", - "402", - "408", - "409", - "410", - "411", - "412", - "413", - "421", - "426", - "427", - "429", - "431", - "433", - "435", - "441", - "444", - "445", - "447", - "448", - "451", - "452", - "454", - "456", - "458", - "465", - "467", - "468", - "473", - "474", - "477", - "478", - "481", - "486", - "487", - "493", - "494", - "499", - "500", - "512", - "520", - "521", - "523", - "526", - "528", - "529", - "531", - "539", - "544", - "549", - "550", - "566", - "582", - "583", - "585", - "587", - "593", - "596", - "597" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/partition_prune.metadata.json b/parser/testdata/parse/postgres_regress/partition_prune.metadata.json index 0391cd5..f5e05f2 100644 --- a/parser/testdata/parse/postgres_regress/partition_prune.metadata.json +++ b/parser/testdata/parse/postgres_regress/partition_prune.metadata.json @@ -1,252 +1,10 @@ { "todo": [ - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "025", - "026", - "048", - "049", - "050", - "051", - "052", - "053", - "054", - "055", - "056", - "057", - "058", - "059", - "060", - "061", - "062", - "063", - "064", - "065", - "066", - "067", - "068", - "069", - "070", - "071", - "072", - "073", - "074", - "075", - "076", - "077", - "078", - "079", - "080", - "081", - "092", - "093", - "094", - "095", - "096", - "097", - "098", - "099", - "100", - "101", - "102", - "103", - "104", - "105", - "106", - "107", - "108", - "109", - "110", - "119", - "120", - "121", - "122", - "123", - "124", - "125", - "126", - "127", - "133", - "134", - "135", - "136", - "137", - "138", - "139", - "140", - "152", - "153", - "154", - "155", - "160", - "161", - "162", - "168", - "169", - "170", - "171", - "172", - "173", - "174", - "175", - "196", - "197", - "198", - "203", - "204", - "205", - "206", - "207", - "208", - "209", - "210", - "211", - "212", - "213", - "214", - "225", - "226", - "227", - "228", - "229", - "234", - "235", - "236", - "237", - "238", - "239", - "244", - "245", - "246", - "250", - "254", - "258", - "260", - "265", - "279", - "280", - "281", - "282", - "283", - "284", - "285", - "286", - "287", - "288", - "289", - "290", - "291", - "292", - "295", - "296", - "298", - "314", - "315", - "318", - "319", - "321", - "323", - "328", "343", - "344", - "345", - "346", "349", - "364", - "391", - "392", - "393", - "399", - "410", - "414", - "435", - "436", - "440", - "441", - "446", - "450", - "461", - "471", - "472", - "473", - "476", - "477", - "478", - "484", - "485", - "486", - "487", - "488", - "489", - "490", - "491", - "498", - "500", - "503", - "511", - "512", - "522", - "524", - "526", - "528", - "532", - "534", - "542", - "543", - "544", - "545", - "546", - "553", - "554", - "555", "557", - "561", - "562", "565", - "569", - "570", - "576", - "577", - "582", - "583", - "584", - "587", - "588", - "589", - "591", - "592", - "593", - "599", - "600", - "601", - "602", - "609", - "610", - "623", - "626", - "633", - "636", - "637", - "639", - "640", - "664", - "670", - "674", - "678", - "679", "689", - "690", - "694", - "695" + "690" ] } diff --git a/parser/testdata/parse/postgres_regress/pg_lsn.metadata.json b/parser/testdata/parse/postgres_regress/pg_lsn.metadata.json index 72648bb..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/pg_lsn.metadata.json +++ b/parser/testdata/parse/postgres_regress/pg_lsn.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "030" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/plancache.metadata.json b/parser/testdata/parse/postgres_regress/plancache.metadata.json index 3ab32e6..a1f6b6f 100644 --- a/parser/testdata/parse/postgres_regress/plancache.metadata.json +++ b/parser/testdata/parse/postgres_regress/plancache.metadata.json @@ -4,11 +4,6 @@ "028", "034", "035", - "055", - "076", - "080", - "083", - "093", - "095" + "055" ] } diff --git a/parser/testdata/parse/postgres_regress/plpgsql.metadata.json b/parser/testdata/parse/postgres_regress/plpgsql.metadata.json index 4caa60c..24c755f 100644 --- a/parser/testdata/parse/postgres_regress/plpgsql.metadata.json +++ b/parser/testdata/parse/postgres_regress/plpgsql.metadata.json @@ -158,13 +158,6 @@ "515", "518", "522", - "525", - "527", - "531", - "533", - "537", - "538", - "539", "543", "545", "547", @@ -181,7 +174,6 @@ "572", "575", "578", - "582", "583", "584", "589", @@ -216,7 +208,6 @@ "658", "660", "663", - "665", "670", "673", "676", @@ -236,23 +227,12 @@ "718", "719", "729", - "730", "731", - "747", - "748", "750", "755", "757", "760", "762", - "765", - "766", - "767", - "768", - "769", - "770", - "771", - "772", "774", "776", "778", @@ -272,10 +252,6 @@ "821", "828", "829", - "831", - "833", - "835", - "837", "838", "839", "840", @@ -283,21 +259,10 @@ "847", "848", "854", - "857", - "858", - "859", - "860", - "862", - "864", - "865", "866", "867", - "868", - "869", "870", "871", - "872", - "873", "875", "876", "877", @@ -310,10 +275,6 @@ "890", "891", "892", - "894", - "896", - "899", - "901", "902", "903", "916", diff --git a/parser/testdata/parse/postgres_regress/polygon.metadata.json b/parser/testdata/parse/postgres_regress/polygon.metadata.json index 57325af..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/polygon.metadata.json +++ b/parser/testdata/parse/postgres_regress/polygon.metadata.json @@ -1,17 +1,3 @@ { - "todo": [ - "027", - "029", - "031", - "033", - "035", - "037", - "039", - "041", - "043", - "045", - "047", - "049", - "053" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/polymorphism.metadata.json b/parser/testdata/parse/postgres_regress/polymorphism.metadata.json index 1fd9084..d741045 100644 --- a/parser/testdata/parse/postgres_regress/polymorphism.metadata.json +++ b/parser/testdata/parse/postgres_regress/polymorphism.metadata.json @@ -131,7 +131,6 @@ "322", "325", "328", - "357", "362", "368", "373", diff --git a/parser/testdata/parse/postgres_regress/portals.metadata.json b/parser/testdata/parse/postgres_regress/portals.metadata.json index 4fa83e3..8d2113b 100644 --- a/parser/testdata/parse/postgres_regress/portals.metadata.json +++ b/parser/testdata/parse/postgres_regress/portals.metadata.json @@ -4,11 +4,6 @@ "128", "129", "281", - "288", - "319", - "326", - "327", - "333", - "334" + "319" ] } diff --git a/parser/testdata/parse/postgres_regress/predicate.metadata.json b/parser/testdata/parse/postgres_regress/predicate.metadata.json index 33c17c8..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/predicate.metadata.json +++ b/parser/testdata/parse/postgres_regress/predicate.metadata.json @@ -1,28 +1,3 @@ { - "todo": [ - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "022", - "023", - "026", - "027", - "035", - "036", - "037", - "039" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/privileges.metadata.json b/parser/testdata/parse/postgres_regress/privileges.metadata.json index f12faea..929e21e 100644 --- a/parser/testdata/parse/postgres_regress/privileges.metadata.json +++ b/parser/testdata/parse/postgres_regress/privileges.metadata.json @@ -60,25 +60,12 @@ "165", "166", "184", - "193", "195", - "198", - "199", - "200", "202", "203", - "204", - "205", - "206", "208", "209", - "211", - "212", - "213", - "214", "216", - "218", - "219", "223", "235", "240", diff --git a/parser/testdata/parse/postgres_regress/psql.metadata.json b/parser/testdata/parse/postgres_regress/psql.metadata.json index 0d909f1..c3a652d 100644 --- a/parser/testdata/parse/postgres_regress/psql.metadata.json +++ b/parser/testdata/parse/postgres_regress/psql.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "026", "125", "127" ] diff --git a/parser/testdata/parse/postgres_regress/psql_crosstab.metadata.json b/parser/testdata/parse/postgres_regress/psql_crosstab.metadata.json index 4ba0f2e..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/psql_crosstab.metadata.json +++ b/parser/testdata/parse/postgres_regress/psql_crosstab.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "002" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json b/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json index aa2de5b..ae78286 100644 --- a/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json +++ b/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json @@ -38,43 +38,26 @@ "298", "302", "308", - "314", "315", - "320", "322", "327", "332", "333", - "334", - "336", "338", - "339", - "341", "344", - "345", - "347", "349", - "350", - "352", "354", - "355", - "357", "367", "370", "386", "389", "396", - "399", "401", "403", "405", "408", - "409", "411", - "412", "414", - "415", - "417", - "423" + "417" ] } diff --git a/parser/testdata/parse/postgres_regress/rangetypes.metadata.json b/parser/testdata/parse/postgres_regress/rangetypes.metadata.json index 36a71ea..b466e90 100644 --- a/parser/testdata/parse/postgres_regress/rangetypes.metadata.json +++ b/parser/testdata/parse/postgres_regress/rangetypes.metadata.json @@ -1,9 +1,5 @@ { "todo": [ - "103", - "172", - "291", - "302", "317", "323", "324", @@ -30,20 +26,6 @@ "385", "386", "387", - "388", - "389", - "390", - "391", - "392", - "393", - "394", - "395", - "396", - "397", - "398", - "399", - "400", - "401", - "404" + "401" ] } diff --git a/parser/testdata/parse/postgres_regress/regex.metadata.json b/parser/testdata/parse/postgres_regress/regex.metadata.json index ea0a9d9..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/regex.metadata.json +++ b/parser/testdata/parse/postgres_regress/regex.metadata.json @@ -1,13 +1,3 @@ { - "todo": [ - "050", - "051", - "052", - "053", - "054", - "055", - "056", - "057", - "058" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/reindex_catalog.metadata.json b/parser/testdata/parse/postgres_regress/reindex_catalog.metadata.json index 60bcbc5..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/reindex_catalog.metadata.json +++ b/parser/testdata/parse/postgres_regress/reindex_catalog.metadata.json @@ -1,21 +1,3 @@ { - "todo": [ - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", - "014", - "015", - "016", - "017", - "018", - "019" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/reloptions.metadata.json b/parser/testdata/parse/postgres_regress/reloptions.metadata.json index f33e6d1..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/reloptions.metadata.json +++ b/parser/testdata/parse/postgres_regress/reloptions.metadata.json @@ -1,6 +1,3 @@ { - "todo": [ - "035", - "041" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/rowsecurity.metadata.json b/parser/testdata/parse/postgres_regress/rowsecurity.metadata.json index 1e73b25..4654cce 100644 --- a/parser/testdata/parse/postgres_regress/rowsecurity.metadata.json +++ b/parser/testdata/parse/postgres_regress/rowsecurity.metadata.json @@ -12,47 +12,25 @@ "037", "038", "039", - "050", - "051", - "055", - "056", "059", "062", - "069", - "070", "072", "109", "112", "116", "118", "119", - "124", - "126", - "128", - "130", - "132", - "134", - "136", - "140", - "144", "147", "151", "152", "153", "156", "157", - "162", - "165", - "168", "177", - "182", - "185", "186", "189", - "194", "213", "220", - "223", "226", "232", "233", @@ -65,31 +43,11 @@ "261", "262", "271", - "274", "276", - "279", - "281", "283", - "288", - "292", - "294", - "297", - "301", - "303", - "305", - "310", - "312", - "314", - "316", - "318", - "325", - "326", "332", "334", "337", - "339", - "344", - "346", "353", "354", "355", @@ -103,56 +61,19 @@ "425", "427", "428", - "432", - "434", - "436", - "438", - "441", - "442", - "443", - "444", - "447", - "448", - "449", - "450", - "453", - "454", - "455", - "456", "459", - "462", - "465", "469", - "472", - "475", - "478", "480", - "483", "487", - "490", - "493", "495", - "498", - "501", "503", "509", "510", - "512", - "515", - "518", "523", "524", - "527", - "530", - "533", "535", - "538", - "541", "543", - "546", - "549", "551", - "554", "559", "561", "562", @@ -164,34 +85,18 @@ "579", "580", "581", - "586", - "590", "594", "595", - "598", - "600", - "604", - "606", "611", "612", "613", - "617", - "619", - "621", "625", "627", - "631", "637", "639", - "644", - "646", "654", "655", "663", - "675", - "678", - "682", - "685", "689", "691", "716", diff --git a/parser/testdata/parse/postgres_regress/rowtypes.metadata.json b/parser/testdata/parse/postgres_regress/rowtypes.metadata.json index 7b7b969..e059411 100644 --- a/parser/testdata/parse/postgres_regress/rowtypes.metadata.json +++ b/parser/testdata/parse/postgres_regress/rowtypes.metadata.json @@ -2,12 +2,6 @@ "todo": [ "001", "003", - "061", - "063", - "065", - "067", - "075", - "079", "094", "099", "113", @@ -27,14 +21,6 @@ "173", "174", "175", - "191", - "205", - "216", - "218", - "220", - "225", - "226", - "227", - "228" + "191" ] } diff --git a/parser/testdata/parse/postgres_regress/rules.metadata.json b/parser/testdata/parse/postgres_regress/rules.metadata.json index cfe64af..878beb2 100644 --- a/parser/testdata/parse/postgres_regress/rules.metadata.json +++ b/parser/testdata/parse/postgres_regress/rules.metadata.json @@ -65,8 +65,6 @@ "514", "520", "524", - "533", - "535", "540", "557", "558", diff --git a/parser/testdata/parse/postgres_regress/sanity_check.metadata.json b/parser/testdata/parse/postgres_regress/sanity_check.metadata.json index f23fe5c..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/sanity_check.metadata.json +++ b/parser/testdata/parse/postgres_regress/sanity_check.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "001" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/select.metadata.json b/parser/testdata/parse/postgres_regress/select.metadata.json index 6d7de5e..1e1fdc1 100644 --- a/parser/testdata/parse/postgres_regress/select.metadata.json +++ b/parser/testdata/parse/postgres_regress/select.metadata.json @@ -1,17 +1,5 @@ { "todo": [ - "008", - "056", - "058", - "059", - "061", - "063", - "065", - "067", - "070", - "073", - "075", - "078", - "086" + "078" ] } diff --git a/parser/testdata/parse/postgres_regress/select_distinct.metadata.json b/parser/testdata/parse/postgres_regress/select_distinct.metadata.json index 94461c9..a9164b8 100644 --- a/parser/testdata/parse/postgres_regress/select_distinct.metadata.json +++ b/parser/testdata/parse/postgres_regress/select_distinct.metadata.json @@ -1,17 +1,6 @@ { "todo": [ - "006", - "011", - "016", - "021", - "037", "039", - "040", - "041", - "042", - "047", - "049", - "051", - "056" + "041" ] } diff --git a/parser/testdata/parse/postgres_regress/select_distinct_on.metadata.json b/parser/testdata/parse/postgres_regress/select_distinct_on.metadata.json index da6f0cc..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/select_distinct_on.metadata.json +++ b/parser/testdata/parse/postgres_regress/select_distinct_on.metadata.json @@ -1,7 +1,3 @@ { - "todo": [ - "005", - "007", - "008" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/select_into.metadata.json b/parser/testdata/parse/postgres_regress/select_into.metadata.json index a83b4b8..1d5737f 100644 --- a/parser/testdata/parse/postgres_regress/select_into.metadata.json +++ b/parser/testdata/parse/postgres_regress/select_into.metadata.json @@ -2,18 +2,7 @@ "todo": [ "007", "008", - "012", - "014", - "017", - "019", "021", - "044", - "047", - "060", - "061", - "062", - "063", - "065", - "066" + "044" ] } diff --git a/parser/testdata/parse/postgres_regress/select_parallel.metadata.json b/parser/testdata/parse/postgres_regress/select_parallel.metadata.json index 96200b6..f8195be 100644 --- a/parser/testdata/parse/postgres_regress/select_parallel.metadata.json +++ b/parser/testdata/parse/postgres_regress/select_parallel.metadata.json @@ -1,59 +1,12 @@ { "todo": [ "001", - "007", - "011", - "017", - "026", "029", - "034", - "037", - "040", - "045", - "046", - "048", - "049", - "051", - "055", - "057", - "063", - "072", - "074", - "076", - "079", - "081", - "088", - "101", - "103", - "111", "114", - "125", - "130", "132", - "133", - "135", - "138", - "142", - "146", - "148", - "151", - "154", "158", - "159", - "162", - "165", - "169", "171", - "186", - "187", - "190", - "198", - "200", - "202", - "203", "204", - "208", - "212", "215", "216", "228", diff --git a/parser/testdata/parse/postgres_regress/select_views.metadata.json b/parser/testdata/parse/postgres_regress/select_views.metadata.json index cf39889..01c5d57 100644 --- a/parser/testdata/parse/postgres_regress/select_views.metadata.json +++ b/parser/testdata/parse/postgres_regress/select_views.metadata.json @@ -6,14 +6,6 @@ "020", "021", "022", - "023", - "026", - "028", - "030", - "032", - "034", - "036", - "038", - "040" + "023" ] } diff --git a/parser/testdata/parse/postgres_regress/spgist.metadata.json b/parser/testdata/parse/postgres_regress/spgist.metadata.json index 18b8b59..3b2ed2e 100644 --- a/parser/testdata/parse/postgres_regress/spgist.metadata.json +++ b/parser/testdata/parse/postgres_regress/spgist.metadata.json @@ -1,9 +1,5 @@ { "todo": [ - "005", - "010", - "022", - "023", - "027" + "023" ] } diff --git a/parser/testdata/parse/postgres_regress/sqljson.metadata.json b/parser/testdata/parse/postgres_regress/sqljson.metadata.json index 7f30253..39ce13a 100644 --- a/parser/testdata/parse/postgres_regress/sqljson.metadata.json +++ b/parser/testdata/parse/postgres_regress/sqljson.metadata.json @@ -1,32 +1,9 @@ { "todo": [ - "015", - "016", - "017", - "018", - "019", - "020", - "021", - "036", - "037", - "048", - "049", "103", "104", - "105", - "163", - "171", - "174", - "175", - "178", - "179", - "182", - "200", "208", "211", - "212", - "213", - "215", - "217" + "212" ] } diff --git a/parser/testdata/parse/postgres_regress/sqljson_jsontable.metadata.json b/parser/testdata/parse/postgres_regress/sqljson_jsontable.metadata.json index fd72183..e38eb1f 100644 --- a/parser/testdata/parse/postgres_regress/sqljson_jsontable.metadata.json +++ b/parser/testdata/parse/postgres_regress/sqljson_jsontable.metadata.json @@ -2,13 +2,6 @@ "todo": [ "010", "016", - "032", - "033", - "034", - "035", - "036", - "037", - "038", "066", "067" ] diff --git a/parser/testdata/parse/postgres_regress/stats.metadata.json b/parser/testdata/parse/postgres_regress/stats.metadata.json index 47c3a9f..33b3fad 100644 --- a/parser/testdata/parse/postgres_regress/stats.metadata.json +++ b/parser/testdata/parse/postgres_regress/stats.metadata.json @@ -2,18 +2,6 @@ "todo": [ "067", "069", - "197", - "200", - "210", - "221", - "232", - "336", - "374", - "400", - "401", - "420", - "430", - "433", - "440" + "420" ] } diff --git a/parser/testdata/parse/postgres_regress/stats_ext.metadata.json b/parser/testdata/parse/postgres_regress/stats_ext.metadata.json index 1b26fad..5752770 100644 --- a/parser/testdata/parse/postgres_regress/stats_ext.metadata.json +++ b/parser/testdata/parse/postgres_regress/stats_ext.metadata.json @@ -32,28 +32,19 @@ "048", "049", "057", - "058", "060", - "061", "063", - "064", - "065", "067", "068", "072", - "073", - "081", "084", - "085", "094", - "095", "101", "102", "104", "106", "107", "108", - "110", "119", "120", "121", @@ -67,99 +58,45 @@ "131", "132", "133", - "134", - "139", "149", - "150", - "164", "189", - "190", "199", - "200", - "208", "216", "217", - "218", "227", - "228", "237", - "238", "247", - "248", "258", "259", - "260", - "274", "277", - "278", - "284", "287", - "288", - "294", "320", - "321", "348", - "350", "378", - "379", - "408", "414", "415", - "416", - "425", "428", - "429", - "435", "438", - "439", - "445", "470", - "471", "497", "499", - "501", - "506", "517", "518", "519", - "520", "534", - "535", - "550", "556", - "557", - "565", - "570", "574", - "575", - "582", "585", - "586", "592", - "593", - "596", "601", - "602", - "611", "620", - "621", - "633", "641", "642", - "643", - "654", "657", - "658", - "665", "669", - "670", - "677", "679", - "680", "684", - "686", "692", - "693", "695", "696", "697", @@ -167,7 +104,6 @@ "701", "704", "705", - "707", "709", "710", "711", @@ -183,7 +119,6 @@ "760", "768", "769", - "770", "780", "782", "785", diff --git a/parser/testdata/parse/postgres_regress/subselect.metadata.json b/parser/testdata/parse/postgres_regress/subselect.metadata.json index bec51ee..5bf656e 100644 --- a/parser/testdata/parse/postgres_regress/subselect.metadata.json +++ b/parser/testdata/parse/postgres_regress/subselect.metadata.json @@ -1,69 +1,13 @@ { "todo": [ - "032", - "034", - "048", - "049", - "050", - "052", - "053", - "054", "089", "093", - "126", - "156", - "158", "163", "164", - "165", "167", - "168", "170", - "171", - "174", - "176", - "182", - "183", - "186", - "187", - "188", - "189", - "190", - "192", - "194", - "203", - "205", - "207", - "210", "215", - "216", "218", - "219", - "221", - "226", - "239", - "242", - "244", - "246", - "248", - "249", - "250", - "251", - "252", - "253", - "254", - "255", - "257", - "259", - "260", - "261", - "262", - "263", - "264", - "265", - "266", - "267", - "268", - "269" + "226" ] } diff --git a/parser/testdata/parse/postgres_regress/tablesample.metadata.json b/parser/testdata/parse/postgres_regress/tablesample.metadata.json index c242be2..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/tablesample.metadata.json +++ b/parser/testdata/parse/postgres_regress/tablesample.metadata.json @@ -1,9 +1,3 @@ { - "todo": [ - "030", - "031", - "032", - "038", - "055" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/tablespace.metadata.json b/parser/testdata/parse/postgres_regress/tablespace.metadata.json index d1afbf0..c2ef5b0 100644 --- a/parser/testdata/parse/postgres_regress/tablespace.metadata.json +++ b/parser/testdata/parse/postgres_regress/tablespace.metadata.json @@ -8,23 +8,6 @@ "010", "011", "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "021", - "022", - "026", - "027", - "029", - "030", - "035", - "042", - "063", "120", "122", "125", @@ -39,8 +22,6 @@ "184", "185", "191", - "192", - "193", "195" ] } diff --git a/parser/testdata/parse/postgres_regress/temp.metadata.json b/parser/testdata/parse/postgres_regress/temp.metadata.json index 34edf11..02d2247 100644 --- a/parser/testdata/parse/postgres_regress/temp.metadata.json +++ b/parser/testdata/parse/postgres_regress/temp.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "049", "071", "072", "084", diff --git a/parser/testdata/parse/postgres_regress/test_setup.metadata.json b/parser/testdata/parse/postgres_regress/test_setup.metadata.json index 88c27e4..bf95514 100644 --- a/parser/testdata/parse/postgres_regress/test_setup.metadata.json +++ b/parser/testdata/parse/postgres_regress/test_setup.metadata.json @@ -2,24 +2,6 @@ "todo": [ "002", "004", - "007", - "010", - "013", - "016", - "019", - "024", - "027", - "030", - "032", - "035", - "037", - "040", - "043", - "046", - "049", - "052", - "055", - "058", "059", "060", "061", diff --git a/parser/testdata/parse/postgres_regress/tidrangescan.metadata.json b/parser/testdata/parse/postgres_regress/tidrangescan.metadata.json index cc0932c..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/tidrangescan.metadata.json +++ b/parser/testdata/parse/postgres_regress/tidrangescan.metadata.json @@ -1,18 +1,3 @@ { - "todo": [ - "003", - "005", - "009", - "010", - "012", - "014", - "016", - "018", - "020", - "022", - "024", - "026", - "033", - "035" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/tidscan.metadata.json b/parser/testdata/parse/postgres_regress/tidscan.metadata.json index 3f28e04..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/tidscan.metadata.json +++ b/parser/testdata/parse/postgres_regress/tidscan.metadata.json @@ -1,17 +1,3 @@ { - "todo": [ - "004", - "006", - "008", - "010", - "012", - "014", - "017", - "019", - "032", - "034", - "037", - "039", - "042" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/timestamptz.metadata.json b/parser/testdata/parse/postgres_regress/timestamptz.metadata.json index 5f36aaf..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/timestamptz.metadata.json +++ b/parser/testdata/parse/postgres_regress/timestamptz.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "369" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/transactions.metadata.json b/parser/testdata/parse/postgres_regress/transactions.metadata.json index 119c5ac..7a74f63 100644 --- a/parser/testdata/parse/postgres_regress/transactions.metadata.json +++ b/parser/testdata/parse/postgres_regress/transactions.metadata.json @@ -7,8 +7,6 @@ "244", "262", "290", - "291", - "414", - "417" + "291" ] } diff --git a/parser/testdata/parse/postgres_regress/tsearch.metadata.json b/parser/testdata/parse/postgres_regress/tsearch.metadata.json index 2db6261..47c2110 100644 --- a/parser/testdata/parse/postgres_regress/tsearch.metadata.json +++ b/parser/testdata/parse/postgres_regress/tsearch.metadata.json @@ -1,15 +1,5 @@ { "todo": [ - "009", - "038", - "065", - "097", - "124", - "155", - "180", - "182", - "348", - "356", - "357" + "348" ] } diff --git a/parser/testdata/parse/postgres_regress/tsrf.metadata.json b/parser/testdata/parse/postgres_regress/tsrf.metadata.json index 9ac6a4e..7f28e1c 100644 --- a/parser/testdata/parse/postgres_regress/tsrf.metadata.json +++ b/parser/testdata/parse/postgres_regress/tsrf.metadata.json @@ -1,12 +1,5 @@ { "todo": [ - "007", - "011", - "013", - "045", - "065", - "067", - "069", - "071" + "065" ] } diff --git a/parser/testdata/parse/postgres_regress/tuplesort.metadata.json b/parser/testdata/parse/postgres_regress/tuplesort.metadata.json index 4a4877a..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/tuplesort.metadata.json +++ b/parser/testdata/parse/postgres_regress/tuplesort.metadata.json @@ -1,16 +1,3 @@ { - "todo": [ - "017", - "019", - "023", - "025", - "029", - "035", - "041", - "047", - "054", - "074", - "103", - "105" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/union.metadata.json b/parser/testdata/parse/postgres_regress/union.metadata.json index 7f46d12..7d7fd22 100644 --- a/parser/testdata/parse/postgres_regress/union.metadata.json +++ b/parser/testdata/parse/postgres_regress/union.metadata.json @@ -1,48 +1,6 @@ { "todo": [ - "041", - "043", - "045", - "048", - "050", - "052", - "056", - "058", - "061", - "063", - "065", - "067", - "070", - "072", - "074", - "078", - "080", - "082", - "084", "086", - "087", - "091", - "093", - "095", - "097", - "116", - "124", - "125", - "147", - "148", - "157", - "166", - "169", - "170", - "172", - "174", - "176", - "178", - "180", - "183", - "184", - "188", - "190", - "191" + "180" ] } diff --git a/parser/testdata/parse/postgres_regress/updatable_views.metadata.json b/parser/testdata/parse/postgres_regress/updatable_views.metadata.json index b52212c..2542362 100644 --- a/parser/testdata/parse/postgres_regress/updatable_views.metadata.json +++ b/parser/testdata/parse/postgres_regress/updatable_views.metadata.json @@ -11,30 +11,16 @@ "1061", "1074", "1087", - "111", - "112", - "113", - "114", - "115", - "116", "118", - "141", - "142", "151", "155", "159", - "169", - "170", "179", "180", "184", "188", - "201", - "202", - "203", "210", "219", - "222", "232", "233", "234", @@ -68,10 +54,6 @@ "509", "545", "546", - "560", - "643", - "722", - "723", "726", "727", "736", @@ -81,28 +63,9 @@ "766", "773", "774", - "786", - "787", - "788", - "789", - "798", - "799", - "800", - "801", "805", "806", - "809", - "811", - "818", - "822", - "826", - "830", - "834", - "838", "904", - "906", - "965", - "973", "995", "996", "997" diff --git a/parser/testdata/parse/postgres_regress/update.metadata.json b/parser/testdata/parse/postgres_regress/update.metadata.json index d5abc58..d3f2345 100644 --- a/parser/testdata/parse/postgres_regress/update.metadata.json +++ b/parser/testdata/parse/postgres_regress/update.metadata.json @@ -1,7 +1,5 @@ { "todo": [ - "035", - "073", "091", "092", "094", diff --git a/parser/testdata/parse/postgres_regress/vacuum.metadata.json b/parser/testdata/parse/postgres_regress/vacuum.metadata.json index b00f2d7..648fea0 100644 --- a/parser/testdata/parse/postgres_regress/vacuum.metadata.json +++ b/parser/testdata/parse/postgres_regress/vacuum.metadata.json @@ -1,142 +1,6 @@ { "todo": [ - "018", - "034", - "037", - "038", - "041", "042", - "043", - "046", - "052", - "059", - "062", - "069", - "072", - "075", - "076", - "077", - "078", - "079", - "080", - "094", - "096", - "098", - "099", - "100", - "101", - "102", - "104", - "106", - "110", - "111", - "119", - "120", - "123", - "125", - "127", - "131", - "133", - "134", - "135", - "136", - "139", - "141", - "143", - "149", - "150", - "151", - "152", - "153", - "158", - "159", - "160", - "163", - "164", - "165", - "166", - "167", - "168", - "169", - "170", - "171", - "172", - "173", - "174", - "175", - "177", - "179", - "180", - "181", - "183", - "184", - "185", - "186", - "187", - "190", - "191", - "194", - "200", - "202", - "204", - "205", - "207", - "211", - "214", - "215", - "216", - "217", - "218", - "219", - "220", - "221", - "222", - "223", - "224", - "237", - "238", - "239", - "240", - "241", - "242", - "243", - "244", - "245", - "246", - "247", - "248", - "249", - "250", - "251", - "252", - "253", - "254", - "259", - "260", - "261", - "262", - "263", - "264", - "265", - "266", - "267", - "271", - "272", - "273", - "274", - "275", - "276", - "277", - "278", - "279", - "284", - "285", - "286", - "287", - "288", - "289", - "290", - "291", - "292" + "043" ] } diff --git a/parser/testdata/parse/postgres_regress/vacuum_parallel.metadata.json b/parser/testdata/parse/postgres_regress/vacuum_parallel.metadata.json index 4d49589..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/vacuum_parallel.metadata.json +++ b/parser/testdata/parse/postgres_regress/vacuum_parallel.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "011" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/window.metadata.json b/parser/testdata/parse/postgres_regress/window.metadata.json index 490716d..adb5c95 100644 --- a/parser/testdata/parse/postgres_regress/window.metadata.json +++ b/parser/testdata/parse/postgres_regress/window.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "045", "123", "125", "128", @@ -8,38 +7,6 @@ "134", "136", "137", - "241", - "246", - "265", - "266", - "268", - "269", - "270", - "274", - "276", - "278", - "280", - "282", - "283", - "284", - "285", - "287", - "288", - "290", - "292", - "294", - "295", - "296", - "297", - "298", - "299", - "300", - "301", - "302", - "304", - "305", - "307", - "308", "311", "314", "315", @@ -53,11 +20,6 @@ "323", "329", "330", - "379", - "380", - "381", - "382", - "384", - "385" + "384" ] } diff --git a/parser/testdata/parse/postgres_regress/with.metadata.json b/parser/testdata/parse/postgres_regress/with.metadata.json index 5476510..bc3b7bb 100644 --- a/parser/testdata/parse/postgres_regress/with.metadata.json +++ b/parser/testdata/parse/postgres_regress/with.metadata.json @@ -1,31 +1,15 @@ { "todo": [ - "049", - "050", - "051", - "054", - "057", - "060", - "062", - "078", - "081", "150", - "155", "173", "182", "186", "189", - "195", - "197", - "222", - "225", - "228", "241", "242", "246", "250", "251", - "270", "275", "277", "279", diff --git a/parser/testdata/parse/postgres_regress/write_parallel.metadata.json b/parser/testdata/parse/postgres_regress/write_parallel.metadata.json index 73ed242..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/write_parallel.metadata.json +++ b/parser/testdata/parse/postgres_regress/write_parallel.metadata.json @@ -1,8 +1,3 @@ { - "todo": [ - "006", - "009", - "012", - "019" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/xml.metadata.json b/parser/testdata/parse/postgres_regress/xml.metadata.json index 2a75c93..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/xml.metadata.json +++ b/parser/testdata/parse/postgres_regress/xml.metadata.json @@ -1,11 +1,3 @@ { - "todo": [ - "163", - "219", - "220", - "242", - "244", - "245", - "250" - ] + "todo": [] } From 80b75cdc8a78b3186bb8aa077b98ab258401367a Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 16 Aug 2026 19:22:26 +0000 Subject: [PATCH 07/24] Milestone 7: CREATE FUNCTION/PROCEDURE, ALTER FUNCTION, routine bodies Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01J19Kf5LpGUhi2vxFJjzQJE --- internal/parse/ddl_dispatch.go | 16 + internal/parse/ddl_function.go | 276 ++++++++++++++++++ .../alter_generic.metadata.json | 1 - .../postgres_regress/conversion.metadata.json | 2 - .../create_function_c.metadata.json | 1 - .../create_function_sql.metadata.json | 6 - .../create_procedure.metadata.json | 2 - .../create_type.metadata.json | 5 - .../create_view.metadata.json | 1 - .../foreign_data.metadata.json | 1 - .../indirect_toast.metadata.json | 1 - .../postgres_regress/lock.metadata.json | 1 - .../postgres_regress/misc.metadata.json | 2 - .../misc_functions.metadata.json | 2 - .../postgres_regress/rules.metadata.json | 2 - .../postgres_regress/test_setup.metadata.json | 2 - .../postgres_regress/triggers.metadata.json | 5 - .../postgres_regress/window.metadata.json | 2 - .../postgres_regress/aggregates.metadata.json | 12 +- .../alter_generic.metadata.json | 9 - .../alter_operator.metadata.json | 4 - .../alter_table.metadata.json | 11 - .../postgres_regress/arrays.metadata.json | 2 - .../parse/postgres_regress/case.metadata.json | 5 - .../collate.icu.utf8.metadata.json | 6 - .../collate.linux.utf8.metadata.json | 6 - .../postgres_regress/collate.metadata.json | 2 - .../collate.windows.win1252.metadata.json | 6 - .../compression.metadata.json | 1 - .../postgres_regress/conversion.metadata.json | 5 +- .../parse/postgres_regress/copy.metadata.json | 2 - .../postgres_regress/copydml.metadata.json | 1 - .../create_aggregate.metadata.json | 10 - .../create_cast.metadata.json | 7 +- .../create_function_c.metadata.json | 6 +- .../create_function_sql.metadata.json | 69 +---- .../create_index.metadata.json | 3 - .../create_operator.metadata.json | 5 - .../create_procedure.metadata.json | 27 -- .../create_table.metadata.json | 6 - .../create_type.metadata.json | 16 - .../create_view.metadata.json | 2 - .../postgres_regress/dependency.metadata.json | 1 - .../postgres_regress/domain.metadata.json | 10 - .../drop_if_exists.metadata.json | 6 +- .../parse/postgres_regress/enum.metadata.json | 2 - .../postgres_regress/equivclass.metadata.json | 10 - .../event_trigger.metadata.json | 22 -- .../event_trigger_login.metadata.json | 1 - .../postgres_regress/explain.metadata.json | 6 +- .../expressions.metadata.json | 7 - .../fast_default.metadata.json | 6 - .../postgres_regress/float4.metadata.json | 2 - .../postgres_regress/float8.metadata.json | 2 - .../foreign_data.metadata.json | 3 - .../foreign_key.metadata.json | 1 - .../parse/postgres_regress/gin.metadata.json | 6 +- .../groupingsets.metadata.json | 4 +- .../parse/postgres_regress/guc.metadata.json | 12 +- .../incremental_sort.metadata.json | 7 +- .../indirect_toast.metadata.json | 2 - .../infinite_recurse.metadata.json | 4 +- .../postgres_regress/inherit.metadata.json | 2 - .../postgres_regress/insert.metadata.json | 4 - .../insert_conflict.metadata.json | 1 - .../postgres_regress/interval.metadata.json | 4 +- .../parse/postgres_regress/join.metadata.json | 4 - .../postgres_regress/join_hash.metadata.json | 5 +- .../parse/postgres_regress/lock.metadata.json | 3 +- .../postgres_regress/matview.metadata.json | 2 - .../postgres_regress/memoize.metadata.json | 4 +- .../postgres_regress/merge.metadata.json | 11 - .../parse/postgres_regress/misc.metadata.json | 16 +- .../misc_functions.metadata.json | 5 - .../multirangetypes.metadata.json | 20 +- .../postgres_regress/namespace.metadata.json | 3 +- .../object_address.metadata.json | 2 - .../partition_prune.metadata.json | 2 - .../postgres_regress/plancache.metadata.json | 5 +- .../postgres_regress/plpgsql.metadata.json | 231 +-------------- .../polymorphism.metadata.json | 78 +---- .../postgres_regress/portals.metadata.json | 6 +- .../postgres_regress/privileges.metadata.json | 2 - .../publication.metadata.json | 2 - .../postgres_regress/random.metadata.json | 8 +- .../postgres_regress/rangefuncs.metadata.json | 52 ---- .../postgres_regress/rangetypes.metadata.json | 15 - .../postgres_regress/returning.metadata.json | 2 - .../rowsecurity.metadata.json | 1 - .../postgres_regress/rowtypes.metadata.json | 9 +- .../postgres_regress/rules.metadata.json | 4 - .../security_label.metadata.json | 1 - .../postgres_regress/select.metadata.json | 4 +- .../select_distinct.metadata.json | 5 +- .../select_into.metadata.json | 3 +- .../select_parallel.metadata.json | 10 - .../select_views.metadata.json | 1 - .../postgres_regress/sqljson.metadata.json | 5 +- .../sqljson_queryfuncs.metadata.json | 1 - .../postgres_regress/stats.metadata.json | 6 +- .../postgres_regress/stats_ext.metadata.json | 4 - .../subscription.metadata.json | 1 - .../postgres_regress/subselect.metadata.json | 8 +- .../parse/postgres_regress/temp.metadata.json | 4 - .../postgres_regress/test_setup.metadata.json | 8 +- .../transactions.metadata.json | 11 +- .../postgres_regress/triggers.metadata.json | 61 ---- .../postgres_regress/truncate.metadata.json | 5 +- .../parse/postgres_regress/txid.metadata.json | 4 +- .../typed_table.metadata.json | 4 +- .../postgres_regress/union.metadata.json | 3 +- .../updatable_views.metadata.json | 8 - .../postgres_regress/update.metadata.json | 7 - .../postgres_regress/vacuum.metadata.json | 5 +- .../postgres_regress/window.metadata.json | 16 +- .../parse/postgres_regress/with.metadata.json | 2 - .../parse/postgres_regress/xid.metadata.json | 4 +- 117 files changed, 332 insertions(+), 1027 deletions(-) create mode 100644 internal/parse/ddl_function.go diff --git a/internal/parse/ddl_dispatch.go b/internal/parse/ddl_dispatch.go index cddcbcb..b8403c3 100644 --- a/internal/parse/ddl_dispatch.go +++ b/internal/parse/ddl_dispatch.go @@ -28,6 +28,8 @@ func (p *parser) parseCreateDispatch() *ast.Node { case ast.Token_CAST: p.next() return p.parseCreateCastStmt() + case ast.Token_FUNCTION, ast.Token_PROCEDURE: + return p.parseCreateFunctionStmt(false) } if stmt := p.parseCreateStmtFamily(false); stmt != nil { return stmt @@ -105,6 +107,8 @@ func (p *parser) parseCreateOrReplace(schemaElt bool) *ast.Node { p.next() return p.parseCreateTrigStmt(true, true) } + case ast.Token_FUNCTION, ast.Token_PROCEDURE: + return p.parseCreateFunctionStmt(true) } p.syntaxErrorAt() return nil @@ -228,6 +232,18 @@ func (p *parser) parseAlterDispatch() *ast.Node { case ast.Token_TYPE_P: p.next() return p.parseAlterTypeDispatch() + case ast.Token_FUNCTION, ast.Token_PROCEDURE, ast.Token_ROUTINE: + var objtype ast.ObjectType + switch p.next().Kind { + case ast.Token_FUNCTION: + objtype = ast.ObjectType_OBJECT_FUNCTION + case ast.Token_PROCEDURE: + objtype = ast.ObjectType_OBJECT_PROCEDURE + default: + objtype = ast.ObjectType_OBJECT_ROUTINE + } + fn := p.parseFunctionWithArgtypes().GetObjectWithArgs() + return p.parseAlterFunctionStmt(objtype, fn) } p.syntaxErrorAt() return nil diff --git a/internal/parse/ddl_function.go b/internal/parse/ddl_function.go new file mode 100644 index 0000000..c09e33b --- /dev/null +++ b/internal/parse/ddl_function.go @@ -0,0 +1,276 @@ +package parse + +// CreateFunctionStmt (CREATE FUNCTION/PROCEDURE), AlterFunctionStmt, and +// the routine-body machinery. + +import ( + "github.com/sqlc-dev/oliphant/ast" +) + +// parseFuncArgsWithDefaults is gram.y's func_args_with_defaults. +func (p *parser) parseFuncArgsWithDefaults() []*ast.Node { + p.expect(ast.Token('(')) + var params []*ast.Node + if p.kind() != ast.Token(')') { + params = append(params, p.parseFuncArgWithDefault()) + for p.have(ast.Token(',')) { + params = append(params, p.parseFuncArgWithDefault()) + } + } + p.expect(ast.Token(')')) + return params +} + +// parseFuncArgWithDefault is gram.y's func_arg_with_default. +func (p *parser) parseFuncArgWithDefault() *ast.Node { + fp := p.parseFuncArg() + if p.have(ast.Token_DEFAULT) || p.have(ast.Token('=')) { + fp.Defexpr = p.parseAExpr(0) + } + return nFunctionParameter(fp) +} + +// parseCreateFunctionStmt is gram.y's CreateFunctionStmt. CREATE +// [OR REPLACE] is consumed; FUNCTION or PROCEDURE is the lookahead. +func (p *parser) parseCreateFunctionStmt(replace bool) *ast.Node { + n := &ast.CreateFunctionStmt{Replace: replace} + n.IsProcedure = p.next().Kind == ast.Token_PROCEDURE + n.Funcname = p.parseFuncName(p.peek()) + n.Parameters = p.parseFuncArgsWithDefaults() + if !n.IsProcedure && p.kind() == ast.Token_RETURNS && p.kindN(1) != ast.Token_NULL_P { + p.next() + if p.kind() == ast.Token_TABLE && p.kindN(1) == ast.Token('(') { + ttok := p.next() + p.next() + // table_func_column_list + var cols []*ast.Node + cols = append(cols, p.parseTableFuncColumn()) + for p.have(ast.Token(',')) { + cols = append(cols, p.parseTableFuncColumn()) + } + p.expect(ast.Token(')')) + // gram.y: mergeTableFuncParameters + for _, arg := range n.Parameters { + switch arg.GetFunctionParameter().GetMode() { + case ast.FunctionParameterMode_FUNC_PARAM_DEFAULT, + ast.FunctionParameterMode_FUNC_PARAM_IN, + ast.FunctionParameterMode_FUNC_PARAM_VARIADIC: + default: + p.ereport("base_yyparse", "OUT and INOUT arguments aren't allowed in TABLE functions", -1) + } + } + n.Parameters = append(n.Parameters, cols...) + // gram.y: TableFuncTypeName + if len(cols) == 1 { + src := cols[0].GetFunctionParameter().GetArgType() + n.ReturnType = &ast.TypeName{ + Names: src.Names, + TypeOid: src.TypeOid, + Setof: true, + PctType: src.PctType, + Typmods: src.Typmods, + Typemod: src.Typemod, + ArrayBounds: src.ArrayBounds, + } + } else { + n.ReturnType = SystemTypeName("record") + n.ReturnType.Setof = true + } + n.ReturnType.Location = ttok.Start + } else { + n.ReturnType = p.parseFuncType() + } + } + n.Options = p.parseCreateFuncOptList() + n.SqlBody = p.parseOptRoutineBody() + return &ast.Node{Node: &ast.Node_CreateFunctionStmt{CreateFunctionStmt: n}} +} + +// parseTableFuncColumn is gram.y's table_func_column. +func (p *parser) parseTableFuncColumn() *ast.Node { + return nFunctionParameter(&ast.FunctionParameter{ + Name: p.paramName(), + ArgType: p.parseFuncType(), + Mode: ast.FunctionParameterMode_FUNC_PARAM_TABLE, + }) +} + +// parseCommonFuncOptItem is gram.y's common_func_opt_item; returns nil when +// the lookahead is not one. +func (p *parser) parseCommonFuncOptItem() *ast.Node { + tok := p.peek() + switch tok.Kind { + case ast.Token_CALLED: + p.next() + p.expect(ast.Token_ON) + p.expect(ast.Token_NULL_P) + p.expect(ast.Token_INPUT_P) + return makeDefElem("strict", nBoolean(false), tok.Start) + case ast.Token_RETURNS: + if p.kindN(1) != ast.Token_NULL_P { + return nil + } + p.next() + p.next() + p.expect(ast.Token_ON) + p.expect(ast.Token_NULL_P) + p.expect(ast.Token_INPUT_P) + return makeDefElem("strict", nBoolean(true), tok.Start) + case ast.Token_STRICT_P: + p.next() + return makeDefElem("strict", nBoolean(true), tok.Start) + case ast.Token_IMMUTABLE: + p.next() + return makeDefElem("volatility", nStr("immutable"), tok.Start) + case ast.Token_STABLE: + p.next() + return makeDefElem("volatility", nStr("stable"), tok.Start) + case ast.Token_VOLATILE: + p.next() + return makeDefElem("volatility", nStr("volatile"), tok.Start) + case ast.Token_EXTERNAL: + p.next() + p.expect(ast.Token_SECURITY) + switch { + case p.have(ast.Token_DEFINER): + return makeDefElem("security", nBoolean(true), tok.Start) + case p.have(ast.Token_INVOKER): + return makeDefElem("security", nBoolean(false), tok.Start) + } + p.syntaxErrorAt() + case ast.Token_SECURITY: + p.next() + switch { + case p.have(ast.Token_DEFINER): + return makeDefElem("security", nBoolean(true), tok.Start) + case p.have(ast.Token_INVOKER): + return makeDefElem("security", nBoolean(false), tok.Start) + } + p.syntaxErrorAt() + case ast.Token_LEAKPROOF: + p.next() + return makeDefElem("leakproof", nBoolean(true), tok.Start) + case ast.Token_NOT: + if p.kindN(1) != ast.Token_LEAKPROOF { + return nil + } + p.next() + p.next() + return makeDefElem("leakproof", nBoolean(false), tok.Start) + case ast.Token_COST: + p.next() + return makeDefElem("cost", p.parseNumericOnly(), tok.Start) + case ast.Token_ROWS: + p.next() + return makeDefElem("rows", p.parseNumericOnly(), tok.Start) + case ast.Token_SUPPORT: + p.next() + return makeDefElem("support", nList(p.anyName()), tok.Start) + case ast.Token_SET, ast.Token_RESET: + set := p.parseFunctionSetResetClause() + return makeDefElem("set", &ast.Node{Node: &ast.Node_VariableSetStmt{VariableSetStmt: set}}, tok.Start) + case ast.Token_PARALLEL: + p.next() + return makeDefElem("parallel", nStr(p.colId()), tok.Start) + } + return nil +} + +// parseCreateFuncOptList is gram.y's opt_createfunc_opt_list. +func (p *parser) parseCreateFuncOptList() []*ast.Node { + var list []*ast.Node + for { + tok := p.peek() + switch tok.Kind { + case ast.Token_AS: + p.next() + args := []*ast.Node{nStr(p.sconst())} + if p.have(ast.Token(',')) { + args = append(args, nStr(p.sconst())) + } + list = append(list, makeDefElem("as", nList(args), tok.Start)) + continue + case ast.Token_LANGUAGE: + p.next() + list = append(list, makeDefElem("language", nStr(p.nonReservedWordOrSconst()), tok.Start)) + continue + case ast.Token_TRANSFORM: + p.next() + var types []*ast.Node + p.expect(ast.Token_FOR) + p.expect(ast.Token_TYPE_P) + types = append(types, nTypeName(p.parseTypename())) + for p.have(ast.Token(',')) { + p.expect(ast.Token_FOR) + p.expect(ast.Token_TYPE_P) + types = append(types, nTypeName(p.parseTypename())) + } + list = append(list, makeDefElem("transform", nList(types), tok.Start)) + continue + case ast.Token_WINDOW: + p.next() + list = append(list, makeDefElem("window", nBoolean(true), tok.Start)) + continue + } + if item := p.parseCommonFuncOptItem(); item != nil { + list = append(list, item) + continue + } + return list + } +} + +// parseOptRoutineBody is gram.y's opt_routine_body. +func (p *parser) parseOptRoutineBody() *ast.Node { + switch p.kind() { + case ast.Token_RETURN: + p.next() + return &ast.Node{Node: &ast.Node_ReturnStmt{ReturnStmt: &ast.ReturnStmt{ + Returnval: p.parseAExpr(0), + }}} + case ast.Token_BEGIN_P: + if p.kindN(1) != ast.Token_ATOMIC { + return nil + } + p.next() + p.next() + var stmts []*ast.Node + for p.kind() != ast.Token_END_P { + var stmt *ast.Node + if p.kind() == ast.Token_RETURN { + p.next() + stmt = &ast.Node{Node: &ast.Node_ReturnStmt{ReturnStmt: &ast.ReturnStmt{ + Returnval: p.parseAExpr(0), + }}} + } else { + stmt = p.parseToplevelStmt() + } + // Every routine_body_stmt carries a trailing semicolon; empty + // statements are discarded as in stmtmulti. + p.expect(ast.Token(';')) + if stmt != nil { + stmts = append(stmts, stmt) + } + } + p.next() + return nList([]*ast.Node{nList(stmts)}) + } + return nil +} + +// parseAlterFunctionStmt is gram.y's AlterFunctionStmt; ALTER FUNCTION/ +// PROCEDURE/ROUTINE and the function_with_argtypes have been consumed by +// the dispatcher. +func (p *parser) parseAlterFunctionStmt(objtype ast.ObjectType, fn *ast.ObjectWithArgs) *ast.Node { + n := &ast.AlterFunctionStmt{Objtype: objtype, Func: fn} + item := p.parseCommonFuncOptItem() + if item == nil { + p.syntaxErrorAt() + } + for item != nil { + n.Actions = append(n.Actions, item) + item = p.parseCommonFuncOptItem() + } + p.have(ast.Token_RESTRICT) + return &ast.Node{Node: &ast.Node_AlterFunctionStmt{AlterFunctionStmt: n}} +} diff --git a/parser/testdata/deparse/postgres_regress/alter_generic.metadata.json b/parser/testdata/deparse/postgres_regress/alter_generic.metadata.json index d5998bc..958ba62 100644 --- a/parser/testdata/deparse/postgres_regress/alter_generic.metadata.json +++ b/parser/testdata/deparse/postgres_regress/alter_generic.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "001", "002", "003", "004", diff --git a/parser/testdata/deparse/postgres_regress/conversion.metadata.json b/parser/testdata/deparse/postgres_regress/conversion.metadata.json index 8836c0c..6371c10 100644 --- a/parser/testdata/deparse/postgres_regress/conversion.metadata.json +++ b/parser/testdata/deparse/postgres_regress/conversion.metadata.json @@ -1,8 +1,6 @@ { "todo": [ - "001", "002", - "003", "004", "005", "006", diff --git a/parser/testdata/deparse/postgres_regress/create_function_c.metadata.json b/parser/testdata/deparse/postgres_regress/create_function_c.metadata.json index cad4c76..44489c3 100644 --- a/parser/testdata/deparse/postgres_regress/create_function_c.metadata.json +++ b/parser/testdata/deparse/postgres_regress/create_function_c.metadata.json @@ -1,7 +1,6 @@ { "todo": [ "002", - "003", "005" ] } diff --git a/parser/testdata/deparse/postgres_regress/create_function_sql.metadata.json b/parser/testdata/deparse/postgres_regress/create_function_sql.metadata.json index 86305c3..bbad950 100644 --- a/parser/testdata/deparse/postgres_regress/create_function_sql.metadata.json +++ b/parser/testdata/deparse/postgres_regress/create_function_sql.metadata.json @@ -59,20 +59,15 @@ "057", "058", "059", - "060", "062", - "063", "064", - "065", "066", "067", "068", - "069", "070", "071", "072", "073", - "074", "075", "076", "077", @@ -126,7 +121,6 @@ "125", "126", "127", - "128", "129", "130", "131", diff --git a/parser/testdata/deparse/postgres_regress/create_procedure.metadata.json b/parser/testdata/deparse/postgres_regress/create_procedure.metadata.json index c169184..2124d37 100644 --- a/parser/testdata/deparse/postgres_regress/create_procedure.metadata.json +++ b/parser/testdata/deparse/postgres_regress/create_procedure.metadata.json @@ -11,12 +11,10 @@ "009", "010", "011", - "012", "013", "014", "015", "016", - "017", "018", "019", "020", diff --git a/parser/testdata/deparse/postgres_regress/create_type.metadata.json b/parser/testdata/deparse/postgres_regress/create_type.metadata.json index b064cb7..0a546c6 100644 --- a/parser/testdata/deparse/postgres_regress/create_type.metadata.json +++ b/parser/testdata/deparse/postgres_regress/create_type.metadata.json @@ -1,9 +1,5 @@ { "todo": [ - "001", - "002", - "003", - "004", "005", "006", "007", @@ -61,7 +57,6 @@ "059", "060", "061", - "062", "063", "064", "065", diff --git a/parser/testdata/deparse/postgres_regress/create_view.metadata.json b/parser/testdata/deparse/postgres_regress/create_view.metadata.json index 0aae9dc..f3d65ad 100644 --- a/parser/testdata/deparse/postgres_regress/create_view.metadata.json +++ b/parser/testdata/deparse/postgres_regress/create_view.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "001", "002", "004", "005", diff --git a/parser/testdata/deparse/postgres_regress/foreign_data.metadata.json b/parser/testdata/deparse/postgres_regress/foreign_data.metadata.json index efde331..dc2db61 100644 --- a/parser/testdata/deparse/postgres_regress/foreign_data.metadata.json +++ b/parser/testdata/deparse/postgres_regress/foreign_data.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "001", "002", "003", "004", diff --git a/parser/testdata/deparse/postgres_regress/indirect_toast.metadata.json b/parser/testdata/deparse/postgres_regress/indirect_toast.metadata.json index d49a93c..122ff18 100644 --- a/parser/testdata/deparse/postgres_regress/indirect_toast.metadata.json +++ b/parser/testdata/deparse/postgres_regress/indirect_toast.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "001", "002", "003", "004", diff --git a/parser/testdata/deparse/postgres_regress/lock.metadata.json b/parser/testdata/deparse/postgres_regress/lock.metadata.json index 507be8d..9b2d87e 100644 --- a/parser/testdata/deparse/postgres_regress/lock.metadata.json +++ b/parser/testdata/deparse/postgres_regress/lock.metadata.json @@ -129,7 +129,6 @@ "127", "128", "129", - "130", "131" ] } diff --git a/parser/testdata/deparse/postgres_regress/misc.metadata.json b/parser/testdata/deparse/postgres_regress/misc.metadata.json index a5cd28a..069aef8 100644 --- a/parser/testdata/deparse/postgres_regress/misc.metadata.json +++ b/parser/testdata/deparse/postgres_regress/misc.metadata.json @@ -1,7 +1,5 @@ { "todo": [ - "001", - "002", "003", "004", "005", diff --git a/parser/testdata/deparse/postgres_regress/misc_functions.metadata.json b/parser/testdata/deparse/postgres_regress/misc_functions.metadata.json index dd486fa..f1db180 100644 --- a/parser/testdata/deparse/postgres_regress/misc_functions.metadata.json +++ b/parser/testdata/deparse/postgres_regress/misc_functions.metadata.json @@ -22,7 +22,6 @@ "020", "021", "022", - "023", "024", "025", "026", @@ -91,7 +90,6 @@ "091", "092", "093", - "094", "095", "096", "097", diff --git a/parser/testdata/deparse/postgres_regress/rules.metadata.json b/parser/testdata/deparse/postgres_regress/rules.metadata.json index 6964785..ac76969 100644 --- a/parser/testdata/deparse/postgres_regress/rules.metadata.json +++ b/parser/testdata/deparse/postgres_regress/rules.metadata.json @@ -570,9 +570,7 @@ "569", "570", "571", - "572", "573", - "574", "575", "576", "577", diff --git a/parser/testdata/deparse/postgres_regress/test_setup.metadata.json b/parser/testdata/deparse/postgres_regress/test_setup.metadata.json index f11579c..c047e8e 100644 --- a/parser/testdata/deparse/postgres_regress/test_setup.metadata.json +++ b/parser/testdata/deparse/postgres_regress/test_setup.metadata.json @@ -54,8 +54,6 @@ "059", "060", "061", - "062", - "063", "064", "065", "066", diff --git a/parser/testdata/deparse/postgres_regress/triggers.metadata.json b/parser/testdata/deparse/postgres_regress/triggers.metadata.json index a56f329..35abd9b 100644 --- a/parser/testdata/deparse/postgres_regress/triggers.metadata.json +++ b/parser/testdata/deparse/postgres_regress/triggers.metadata.json @@ -1,10 +1,5 @@ { "todo": [ - "001", - "002", - "003", - "004", - "005", "006", "007", "008", diff --git a/parser/testdata/deparse/postgres_regress/window.metadata.json b/parser/testdata/deparse/postgres_regress/window.metadata.json index 7124123..324ef54 100644 --- a/parser/testdata/deparse/postgres_regress/window.metadata.json +++ b/parser/testdata/deparse/postgres_regress/window.metadata.json @@ -122,12 +122,10 @@ "120", "121", "122", - "123", "124", "125", "126", "127", - "128", "129", "130", "131", diff --git a/parser/testdata/parse/postgres_regress/aggregates.metadata.json b/parser/testdata/parse/postgres_regress/aggregates.metadata.json index d6612c6..7b2cb6c 100644 --- a/parser/testdata/parse/postgres_regress/aggregates.metadata.json +++ b/parser/testdata/parse/postgres_regress/aggregates.metadata.json @@ -1,25 +1,15 @@ { "todo": [ "368", - "369", - "370", - "371", "372", "373", "383", "384", "385", - "390", - "391", "392", "393", - "397", "398", - "439", "440", - "448", - "449", - "450", - "451" + "450" ] } diff --git a/parser/testdata/parse/postgres_regress/alter_generic.metadata.json b/parser/testdata/parse/postgres_regress/alter_generic.metadata.json index 0809687..07e4f73 100644 --- a/parser/testdata/parse/postgres_regress/alter_generic.metadata.json +++ b/parser/testdata/parse/postgres_regress/alter_generic.metadata.json @@ -1,9 +1,6 @@ { "todo": [ - "001", "012", - "015", - "016", "017", "018", "019", @@ -20,8 +17,6 @@ "030", "031", "032", - "034", - "035", "036", "037", "038", @@ -145,16 +140,12 @@ "196", "197", "200", - "201", "202", "206", - "207", "208", "212", - "213", "214", "218", - "219", "220", "223", "224", diff --git a/parser/testdata/parse/postgres_regress/alter_operator.metadata.json b/parser/testdata/parse/postgres_regress/alter_operator.metadata.json index bf77792..7eca36c 100644 --- a/parser/testdata/parse/postgres_regress/alter_operator.metadata.json +++ b/parser/testdata/parse/postgres_regress/alter_operator.metadata.json @@ -1,7 +1,5 @@ { "todo": [ - "001", - "002", "003", "005", "006", @@ -13,8 +11,6 @@ "020", "021", "024", - "026", - "027", "028", "029", "030", diff --git a/parser/testdata/parse/postgres_regress/alter_table.metadata.json b/parser/testdata/parse/postgres_regress/alter_table.metadata.json index 3f62d43..11ccac4 100644 --- a/parser/testdata/parse/postgres_regress/alter_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/alter_table.metadata.json @@ -11,15 +11,9 @@ "088", "089", "096", - "1029", "103", - "1031", - "1033", - "1035", - "1041", "1042", "1043", - "1044", "1045", "1046", "1047", @@ -121,12 +115,9 @@ "1527", "154", "1554", - "1580", "1581", - "1585", "1586", "159", - "1599", "160", "1600", "1605", @@ -148,7 +139,6 @@ "169", "172", "173", - "214", "339", "368", "427", @@ -192,7 +182,6 @@ "897", "898", "924", - "929", "942", "994" ] diff --git a/parser/testdata/parse/postgres_regress/arrays.metadata.json b/parser/testdata/parse/postgres_regress/arrays.metadata.json index e080f32..a9a4828 100644 --- a/parser/testdata/parse/postgres_regress/arrays.metadata.json +++ b/parser/testdata/parse/postgres_regress/arrays.metadata.json @@ -2,8 +2,6 @@ "todo": [ "312", "315", - "321", - "322", "451" ] } diff --git a/parser/testdata/parse/postgres_regress/case.metadata.json b/parser/testdata/parse/postgres_regress/case.metadata.json index 7ef6689..a8dfb08 100644 --- a/parser/testdata/parse/postgres_regress/case.metadata.json +++ b/parser/testdata/parse/postgres_regress/case.metadata.json @@ -1,13 +1,8 @@ { "todo": [ - "043", "045", - "046", - "047", "048", "052", - "053", - "054", "055", "060" ] diff --git a/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json b/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json index fe16ccc..3ead977 100644 --- a/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json @@ -3,12 +3,6 @@ "023", "024", "089", - "120", - "121", - "122", - "125", - "127", - "134", "156", "160", "162", diff --git a/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json b/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json index 74eb40a..57b5143 100644 --- a/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json @@ -3,12 +3,6 @@ "023", "024", "097", - "128", - "129", - "130", - "133", - "135", - "142", "156", "157", "158", diff --git a/parser/testdata/parse/postgres_regress/collate.metadata.json b/parser/testdata/parse/postgres_regress/collate.metadata.json index e72fce2..a908d95 100644 --- a/parser/testdata/parse/postgres_regress/collate.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.metadata.json @@ -3,8 +3,6 @@ "013", "014", "048", - "083", - "087", "115", "117", "118", diff --git a/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json b/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json index c4f53aa..0057118 100644 --- a/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json @@ -3,12 +3,6 @@ "023", "024", "072", - "099", - "100", - "101", - "104", - "106", - "113", "127", "128", "129", diff --git a/parser/testdata/parse/postgres_regress/compression.metadata.json b/parser/testdata/parse/postgres_regress/compression.metadata.json index bc39747..0890b16 100644 --- a/parser/testdata/parse/postgres_regress/compression.metadata.json +++ b/parser/testdata/parse/postgres_regress/compression.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "025", "035", "036", "037" diff --git a/parser/testdata/parse/postgres_regress/conversion.metadata.json b/parser/testdata/parse/postgres_regress/conversion.metadata.json index 1c91e5a..4ba2a8a 100644 --- a/parser/testdata/parse/postgres_regress/conversion.metadata.json +++ b/parser/testdata/parse/postgres_regress/conversion.metadata.json @@ -1,11 +1,8 @@ { "todo": [ - "001", - "003", "006", "007", "008", - "009", - "017" + "009" ] } diff --git a/parser/testdata/parse/postgres_regress/copy.metadata.json b/parser/testdata/parse/postgres_regress/copy.metadata.json index 9081053..8ac8784 100644 --- a/parser/testdata/parse/postgres_regress/copy.metadata.json +++ b/parser/testdata/parse/postgres_regress/copy.metadata.json @@ -1,8 +1,6 @@ { "todo": [ - "037", "038", - "049", "050" ] } diff --git a/parser/testdata/parse/postgres_regress/copydml.metadata.json b/parser/testdata/parse/postgres_regress/copydml.metadata.json index 325e762..c2889ed 100644 --- a/parser/testdata/parse/postgres_regress/copydml.metadata.json +++ b/parser/testdata/parse/postgres_regress/copydml.metadata.json @@ -13,7 +13,6 @@ "043", "046", "049", - "052", "053", "054" ] diff --git a/parser/testdata/parse/postgres_regress/create_aggregate.metadata.json b/parser/testdata/parse/postgres_regress/create_aggregate.metadata.json index 820dc6d..8c87b63 100644 --- a/parser/testdata/parse/postgres_regress/create_aggregate.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_aggregate.metadata.json @@ -5,21 +5,14 @@ "006", "007", "008", - "012", "013", "014", - "015", - "016", "017", "018", - "019", "020", - "022", "023", "024", - "026", "027", - "028", "029", "030", "031", @@ -36,12 +29,9 @@ "045", "047", "048", - "049", "050", "053", - "054", "055", - "056", "057", "058", "059" diff --git a/parser/testdata/parse/postgres_regress/create_cast.metadata.json b/parser/testdata/parse/postgres_regress/create_cast.metadata.json index 8bcf78f..5589cf5 100644 --- a/parser/testdata/parse/postgres_regress/create_cast.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_cast.metadata.json @@ -1,11 +1,6 @@ { "todo": [ "001", - "002", - "003", - "004", - "005", - "017", - "021" + "004" ] } diff --git a/parser/testdata/parse/postgres_regress/create_function_c.metadata.json b/parser/testdata/parse/postgres_regress/create_function_c.metadata.json index cad4c76..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/create_function_c.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_function_c.metadata.json @@ -1,7 +1,3 @@ { - "todo": [ - "002", - "003", - "005" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/create_function_sql.metadata.json b/parser/testdata/parse/postgres_regress/create_function_sql.metadata.json index e318344..de71512 100644 --- a/parser/testdata/parse/postgres_regress/create_function_sql.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_function_sql.metadata.json @@ -1,74 +1,7 @@ { "todo": [ "003", - "005", - "006", - "007", - "012", - "013", - "014", - "015", - "017", - "018", - "020", - "021", - "022", - "024", - "025", - "026", - "028", - "029", - "031", - "032", - "034", "036", - "037", - "040", - "041", - "042", - "044", - "045", - "046", - "047", - "049", - "050", - "051", - "057", - "058", - "059", - "060", - "063", - "065", - "069", - "071", - "072", - "073", - "074", - "093", - "096", - "097", - "098", - "101", - "102", - "104", - "105", - "107", - "115", - "119", - "120", - "121", - "125", - "128", - "133", - "135", - "139", - "141", - "144", - "146", - "148", - "149", - "150", - "151", - "152" + "037" ] } diff --git a/parser/testdata/parse/postgres_regress/create_index.metadata.json b/parser/testdata/parse/postgres_regress/create_index.metadata.json index 311e782..dd47471 100644 --- a/parser/testdata/parse/postgres_regress/create_index.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_index.metadata.json @@ -1,9 +1,6 @@ { "todo": [ - "239", "333", - "482", - "483", "548", "604", "609" diff --git a/parser/testdata/parse/postgres_regress/create_operator.metadata.json b/parser/testdata/parse/postgres_regress/create_operator.metadata.json index 0805cb4..60d91df 100644 --- a/parser/testdata/parse/postgres_regress/create_operator.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_operator.metadata.json @@ -10,28 +10,23 @@ "030", "033", "036", - "039", "040", "042", "043", "044", "047", - "048", "049", "050", "052", "056", - "057", "058", "059", "061", "065", - "066", "067", "068", "070", "074", - "075", "076", "077", "079", diff --git a/parser/testdata/parse/postgres_regress/create_procedure.metadata.json b/parser/testdata/parse/postgres_regress/create_procedure.metadata.json index 5780ef5..6eebd63 100644 --- a/parser/testdata/parse/postgres_regress/create_procedure.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_procedure.metadata.json @@ -1,33 +1,6 @@ { "todo": [ - "003", - "005", - "012", - "017", - "019", - "022", - "025", - "027", - "028", - "031", - "038", - "040", - "043", - "046", - "049", "051", - "054", - "058", - "064", - "066", - "079", - "080", - "081", - "082", - "083", - "084", - "085", - "086", "091", "092", "096", diff --git a/parser/testdata/parse/postgres_regress/create_table.metadata.json b/parser/testdata/parse/postgres_regress/create_table.metadata.json index dddc00f..5194e5d 100644 --- a/parser/testdata/parse/postgres_regress/create_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_table.metadata.json @@ -3,16 +3,10 @@ "002", "032", "058", - "066", - "073", "076", - "081", - "089", "108", "114", - "266", "267", - "297", "298" ] } diff --git a/parser/testdata/parse/postgres_regress/create_type.metadata.json b/parser/testdata/parse/postgres_regress/create_type.metadata.json index f500966..f818b1b 100644 --- a/parser/testdata/parse/postgres_regress/create_type.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_type.metadata.json @@ -1,9 +1,5 @@ { "todo": [ - "001", - "002", - "003", - "004", "005", "006", "007", @@ -11,10 +7,6 @@ "011", "012", "013", - "014", - "015", - "016", - "017", "018", "019", "023", @@ -22,19 +14,11 @@ "025", "027", "028", - "029", "037", "040", - "041", - "042", "043", - "062", "063", "068", - "069", - "070", - "071", - "072", "073", "074", "075", diff --git a/parser/testdata/parse/postgres_regress/create_view.metadata.json b/parser/testdata/parse/postgres_regress/create_view.metadata.json index 57ec6e1..6a7f889 100644 --- a/parser/testdata/parse/postgres_regress/create_view.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_view.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "001", "031", "039", "117", @@ -15,7 +14,6 @@ "127", "158", "188", - "228", "241", "244", "257", diff --git a/parser/testdata/parse/postgres_regress/dependency.metadata.json b/parser/testdata/parse/postgres_regress/dependency.metadata.json index 733b0ba..3f580c1 100644 --- a/parser/testdata/parse/postgres_regress/dependency.metadata.json +++ b/parser/testdata/parse/postgres_regress/dependency.metadata.json @@ -11,7 +11,6 @@ "038", "039", "043", - "044", "045", "046", "051" diff --git a/parser/testdata/parse/postgres_regress/domain.metadata.json b/parser/testdata/parse/postgres_regress/domain.metadata.json index 981c69c..f66a687 100644 --- a/parser/testdata/parse/postgres_regress/domain.metadata.json +++ b/parser/testdata/parse/postgres_regress/domain.metadata.json @@ -53,9 +53,6 @@ "190", "195", "197", - "202", - "204", - "206", "212", "213", "216", @@ -70,21 +67,14 @@ "241", "246", "247", - "251", "254", - "255", "258", - "259", "263", - "272", "276", - "277", "279", "281", - "283", "285", "287", - "291", "292", "302", "303", diff --git a/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json b/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json index dd3b31f..dc1c7a2 100644 --- a/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json +++ b/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json @@ -7,10 +7,6 @@ "061", "075", "087", - "095", - "145", - "146", - "151", - "152" + "095" ] } diff --git a/parser/testdata/parse/postgres_regress/enum.metadata.json b/parser/testdata/parse/postgres_regress/enum.metadata.json index 09ceb3b..872aac6 100644 --- a/parser/testdata/parse/postgres_regress/enum.metadata.json +++ b/parser/testdata/parse/postgres_regress/enum.metadata.json @@ -44,8 +44,6 @@ "055", "056", "091", - "109", - "111", "122", "125", "127", diff --git a/parser/testdata/parse/postgres_regress/equivclass.metadata.json b/parser/testdata/parse/postgres_regress/equivclass.metadata.json index a085c85..84fb537 100644 --- a/parser/testdata/parse/postgres_regress/equivclass.metadata.json +++ b/parser/testdata/parse/postgres_regress/equivclass.metadata.json @@ -1,29 +1,19 @@ { "todo": [ "001", - "002", - "003", "004", "005", - "006", - "007", "008", - "013", "014", "015", - "016", "017", "018", - "019", "020", "021", - "022", "023", "024", - "025", "026", "027", - "028", "029", "064", "066", diff --git a/parser/testdata/parse/postgres_regress/event_trigger.metadata.json b/parser/testdata/parse/postgres_regress/event_trigger.metadata.json index 8db0e57..d9a6b7e 100644 --- a/parser/testdata/parse/postgres_regress/event_trigger.metadata.json +++ b/parser/testdata/parse/postgres_regress/event_trigger.metadata.json @@ -1,9 +1,6 @@ { "todo": [ "001", - "002", - "004", - "005", "006", "007", "008", @@ -22,8 +19,6 @@ "026", "029", "031", - "035", - "037", "039", "042", "044", @@ -35,56 +30,39 @@ "052", "053", "054", - "073", "074", - "079", "080", - "081", "082", - "095", "096", - "097", "098", "099", "109", "110", - "114", - "115", "117", "118", "121", "122", "125", - "129", "130", "133", - "135", "136", "140", "143", "145", "147", - "149", "150", "153", "155", - "159", "160", - "161", "162", - "163", "164", "171", - "209", - "210", - "211", "212", "213", "214", "215", "216", "217", - "223", "224", "226", "228" diff --git a/parser/testdata/parse/postgres_regress/event_trigger_login.metadata.json b/parser/testdata/parse/postgres_regress/event_trigger_login.metadata.json index 8c9f449..e774fcd 100644 --- a/parser/testdata/parse/postgres_regress/event_trigger_login.metadata.json +++ b/parser/testdata/parse/postgres_regress/event_trigger_login.metadata.json @@ -1,7 +1,6 @@ { "todo": [ "002", - "003", "004", "005" ] diff --git a/parser/testdata/parse/postgres_regress/explain.metadata.json b/parser/testdata/parse/postgres_regress/explain.metadata.json index 1b18fd1..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/explain.metadata.json +++ b/parser/testdata/parse/postgres_regress/explain.metadata.json @@ -1,7 +1,3 @@ { - "todo": [ - "001", - "002", - "044" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/expressions.metadata.json b/parser/testdata/parse/postgres_regress/expressions.metadata.json index 93aedf9..f242142 100644 --- a/parser/testdata/parse/postgres_regress/expressions.metadata.json +++ b/parser/testdata/parse/postgres_regress/expressions.metadata.json @@ -1,14 +1,7 @@ { "todo": [ - "032", - "033", "051", - "052", - "053", - "054", "055", - "058", - "059", "060", "061", "062" diff --git a/parser/testdata/parse/postgres_regress/fast_default.metadata.json b/parser/testdata/parse/postgres_regress/fast_default.metadata.json index 59631cb..e9322ba 100644 --- a/parser/testdata/parse/postgres_regress/fast_default.metadata.json +++ b/parser/testdata/parse/postgres_regress/fast_default.metadata.json @@ -1,16 +1,10 @@ { "todo": [ - "005", - "006", - "007", "009", - "046", "067", "068", "069", "070", - "094", - "139", "144", "153", "162", diff --git a/parser/testdata/parse/postgres_regress/float4.metadata.json b/parser/testdata/parse/postgres_regress/float4.metadata.json index 18d1452..05fc447 100644 --- a/parser/testdata/parse/postgres_regress/float4.metadata.json +++ b/parser/testdata/parse/postgres_regress/float4.metadata.json @@ -1,8 +1,6 @@ { "todo": [ "090", - "091", - "092", "093" ] } diff --git a/parser/testdata/parse/postgres_regress/float8.metadata.json b/parser/testdata/parse/postgres_regress/float8.metadata.json index f8773c4..a6161ec 100644 --- a/parser/testdata/parse/postgres_regress/float8.metadata.json +++ b/parser/testdata/parse/postgres_regress/float8.metadata.json @@ -1,8 +1,6 @@ { "todo": [ "159", - "160", - "161", "162" ] } diff --git a/parser/testdata/parse/postgres_regress/foreign_data.metadata.json b/parser/testdata/parse/postgres_regress/foreign_data.metadata.json index 3298653..411b18e 100644 --- a/parser/testdata/parse/postgres_regress/foreign_data.metadata.json +++ b/parser/testdata/parse/postgres_regress/foreign_data.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "001", "012", "014", "018", @@ -11,7 +10,6 @@ "025", "028", "030", - "031", "032", "033", "034", @@ -186,7 +184,6 @@ "405", "406", "407", - "412", "413", "414", "415", diff --git a/parser/testdata/parse/postgres_regress/foreign_key.metadata.json b/parser/testdata/parse/postgres_regress/foreign_key.metadata.json index dc05f10..aa9a1d1 100644 --- a/parser/testdata/parse/postgres_regress/foreign_key.metadata.json +++ b/parser/testdata/parse/postgres_regress/foreign_key.metadata.json @@ -7,7 +7,6 @@ "1031", "1038", "1076", - "1104", "1105", "1106", "1107", diff --git a/parser/testdata/parse/postgres_regress/gin.metadata.json b/parser/testdata/parse/postgres_regress/gin.metadata.json index 8ea03b0..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/gin.metadata.json +++ b/parser/testdata/parse/postgres_regress/gin.metadata.json @@ -1,7 +1,3 @@ { - "todo": [ - "031", - "032", - "033" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/groupingsets.metadata.json b/parser/testdata/parse/postgres_regress/groupingsets.metadata.json index e9cea49..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/groupingsets.metadata.json +++ b/parser/testdata/parse/postgres_regress/groupingsets.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "010" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/guc.metadata.json b/parser/testdata/parse/postgres_regress/guc.metadata.json index bf7620e..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/guc.metadata.json +++ b/parser/testdata/parse/postgres_regress/guc.metadata.json @@ -1,13 +1,3 @@ { - "todo": [ - "174", - "176", - "178", - "180", - "182", - "185", - "188", - "199", - "201" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/incremental_sort.metadata.json b/parser/testdata/parse/postgres_regress/incremental_sort.metadata.json index 4ba2a8a..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/incremental_sort.metadata.json +++ b/parser/testdata/parse/postgres_regress/incremental_sort.metadata.json @@ -1,8 +1,3 @@ { - "todo": [ - "006", - "007", - "008", - "009" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/indirect_toast.metadata.json b/parser/testdata/parse/postgres_regress/indirect_toast.metadata.json index 469a63a..72bfdf3 100644 --- a/parser/testdata/parse/postgres_regress/indirect_toast.metadata.json +++ b/parser/testdata/parse/postgres_regress/indirect_toast.metadata.json @@ -1,7 +1,5 @@ { "todo": [ - "001", - "016", "017" ] } diff --git a/parser/testdata/parse/postgres_regress/infinite_recurse.metadata.json b/parser/testdata/parse/postgres_regress/infinite_recurse.metadata.json index f23fe5c..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/infinite_recurse.metadata.json +++ b/parser/testdata/parse/postgres_regress/infinite_recurse.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "001" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/inherit.metadata.json b/parser/testdata/parse/postgres_regress/inherit.metadata.json index d6cc131..d0a1ad6 100644 --- a/parser/testdata/parse/postgres_regress/inherit.metadata.json +++ b/parser/testdata/parse/postgres_regress/inherit.metadata.json @@ -1,11 +1,9 @@ { "todo": [ - "084", "085", "155", "160", "161", - "182", "252", "253", "254", diff --git a/parser/testdata/parse/postgres_regress/insert.metadata.json b/parser/testdata/parse/postgres_regress/insert.metadata.json index eeeaa12..68b08b5 100644 --- a/parser/testdata/parse/postgres_regress/insert.metadata.json +++ b/parser/testdata/parse/postgres_regress/insert.metadata.json @@ -11,23 +11,19 @@ "078", "084", "085", - "215", "216", - "242", "243", "289", "290", "294", "299", "300", - "335", "336", "341", "342", "343", "347", "348", - "357", "358", "359" ] diff --git a/parser/testdata/parse/postgres_regress/insert_conflict.metadata.json b/parser/testdata/parse/postgres_regress/insert_conflict.metadata.json index 2876a05..d6b48ed 100644 --- a/parser/testdata/parse/postgres_regress/insert_conflict.metadata.json +++ b/parser/testdata/parse/postgres_regress/insert_conflict.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "251", "252" ] } diff --git a/parser/testdata/parse/postgres_regress/interval.metadata.json b/parser/testdata/parse/postgres_regress/interval.metadata.json index 853e867..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/interval.metadata.json +++ b/parser/testdata/parse/postgres_regress/interval.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "379" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/join.metadata.json b/parser/testdata/parse/postgres_regress/join.metadata.json index 0eca778..2cbaac1 100644 --- a/parser/testdata/parse/postgres_regress/join.metadata.json +++ b/parser/testdata/parse/postgres_regress/join.metadata.json @@ -1,10 +1,6 @@ { "todo": [ "270", - "339", - "352", - "353", - "360", "712" ] } diff --git a/parser/testdata/parse/postgres_regress/join_hash.metadata.json b/parser/testdata/parse/postgres_regress/join_hash.metadata.json index 644c2fc..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/join_hash.metadata.json +++ b/parser/testdata/parse/postgres_regress/join_hash.metadata.json @@ -1,6 +1,3 @@ { - "todo": [ - "005", - "006" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/lock.metadata.json b/parser/testdata/parse/postgres_regress/lock.metadata.json index 2940f00..b3e2db9 100644 --- a/parser/testdata/parse/postgres_regress/lock.metadata.json +++ b/parser/testdata/parse/postgres_regress/lock.metadata.json @@ -7,7 +7,6 @@ "096", "103", "109", - "115", - "130" + "115" ] } diff --git a/parser/testdata/parse/postgres_regress/matview.metadata.json b/parser/testdata/parse/postgres_regress/matview.metadata.json index 87d0923..1b69eca 100644 --- a/parser/testdata/parse/postgres_regress/matview.metadata.json +++ b/parser/testdata/parse/postgres_regress/matview.metadata.json @@ -2,8 +2,6 @@ "todo": [ "027", "102", - "143", - "150", "157", "158", "167" diff --git a/parser/testdata/parse/postgres_regress/memoize.metadata.json b/parser/testdata/parse/postgres_regress/memoize.metadata.json index f23fe5c..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/memoize.metadata.json +++ b/parser/testdata/parse/postgres_regress/memoize.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "001" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/merge.metadata.json b/parser/testdata/parse/postgres_regress/merge.metadata.json index 3258c32..6840a49 100644 --- a/parser/testdata/parse/postgres_regress/merge.metadata.json +++ b/parser/testdata/parse/postgres_regress/merge.metadata.json @@ -3,7 +3,6 @@ "018", "040", "043", - "204", "205", "206", "207", @@ -16,22 +15,12 @@ "214", "215", "216", - "227", "229", - "262", - "320", - "324", - "328", - "335", - "381", - "419", "420", - "425", "426", "433", "484", "485", - "501", "502", "540" ] diff --git a/parser/testdata/parse/postgres_regress/misc.metadata.json b/parser/testdata/parse/postgres_regress/misc.metadata.json index 0bc9b95..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/misc.metadata.json +++ b/parser/testdata/parse/postgres_regress/misc.metadata.json @@ -1,17 +1,3 @@ { - "todo": [ - "001", - "002", - "027", - "028", - "029", - "030", - "031", - "032", - "033", - "034", - "035", - "036", - "037" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/misc_functions.metadata.json b/parser/testdata/parse/postgres_regress/misc_functions.metadata.json index 25504a4..7851a72 100644 --- a/parser/testdata/parse/postgres_regress/misc_functions.metadata.json +++ b/parser/testdata/parse/postgres_regress/misc_functions.metadata.json @@ -1,13 +1,8 @@ { "todo": [ - "023", "050", "055", "087", - "092", - "094", - "095", - "097", "113" ] } diff --git a/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json b/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json index d35ef2e..ee582d2 100644 --- a/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json +++ b/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json @@ -17,25 +17,7 @@ "542", "543", "545", - "551", - "555", - "556", - "557", - "560", - "563", - "568", - "572", "582", - "583", - "589", - "591", - "593", - "595", - "597", - "599", - "601", - "603", - "604", - "605" + "583" ] } diff --git a/parser/testdata/parse/postgres_regress/namespace.metadata.json b/parser/testdata/parse/postgres_regress/namespace.metadata.json index 8a3aa56..b4696b2 100644 --- a/parser/testdata/parse/postgres_regress/namespace.metadata.json +++ b/parser/testdata/parse/postgres_regress/namespace.metadata.json @@ -4,7 +4,6 @@ "006", "011", "022", - "026", - "031" + "026" ] } diff --git a/parser/testdata/parse/postgres_regress/object_address.metadata.json b/parser/testdata/parse/postgres_regress/object_address.metadata.json index 0e2d8b8..2d55967 100644 --- a/parser/testdata/parse/postgres_regress/object_address.metadata.json +++ b/parser/testdata/parse/postgres_regress/object_address.metadata.json @@ -11,10 +11,8 @@ "019", "020", "021", - "022", "023", "024", - "025", "026", "027", "028", diff --git a/parser/testdata/parse/postgres_regress/partition_prune.metadata.json b/parser/testdata/parse/postgres_regress/partition_prune.metadata.json index f5e05f2..3c0ae53 100644 --- a/parser/testdata/parse/postgres_regress/partition_prune.metadata.json +++ b/parser/testdata/parse/postgres_regress/partition_prune.metadata.json @@ -1,7 +1,5 @@ { "todo": [ - "343", - "349", "557", "565", "689", diff --git a/parser/testdata/parse/postgres_regress/plancache.metadata.json b/parser/testdata/parse/postgres_regress/plancache.metadata.json index a1f6b6f..eab3d97 100644 --- a/parser/testdata/parse/postgres_regress/plancache.metadata.json +++ b/parser/testdata/parse/postgres_regress/plancache.metadata.json @@ -1,9 +1,6 @@ { "todo": [ - "023", - "028", "034", - "035", - "055" + "035" ] } diff --git a/parser/testdata/parse/postgres_regress/plpgsql.metadata.json b/parser/testdata/parse/postgres_regress/plpgsql.metadata.json index 24c755f..7bd3f7a 100644 --- a/parser/testdata/parse/postgres_regress/plpgsql.metadata.json +++ b/parser/testdata/parse/postgres_regress/plpgsql.metadata.json @@ -1,290 +1,61 @@ { "todo": [ - "022", "023", - "024", "025", - "026", "027", - "028", "029", - "030", "031", - "032", "033", - "034", "035", - "036", "037", - "038", "039", - "040", - "044", "045", - "046", "047", - "048", "049", "050", "051", "052", "053", - "054", "055", "056", "057", "058", "059", - "060", "061", "062", "063", - "064", "065", - "066", "067", - "068", "069", - "070", "071", - "072", "073", - "074", "075", - "076", "077", "078", "079", - "080", - "081", - "082", "083", "084", "085", "086", "087", - "088", - "089", - "090", - "091", - "092", - "283", - "286", - "289", - "291", - "293", - "295", - "298", - "301", - "305", - "308", - "312", - "316", - "317", - "320", - "323", - "327", - "328", - "331", - "337", - "338", - "341", - "345", - "348", - "352", - "355", - "359", - "364", - "365", - "370", - "374", - "384", - "385", - "387", - "388", - "396", - "398", - "400", - "402", - "404", - "406", - "407", - "408", - "409", - "410", - "412", - "414", - "416", - "417", - "418", - "420", - "422", - "423", - "424", - "425", - "426", - "428", "433", - "434", - "438", - "440", - "442", - "444", - "450", - "453", - "457", - "459", - "461", - "463", - "466", - "468", - "470", - "472", - "474", - "476", - "480", - "482", - "484", - "486", - "488", - "490", - "492", - "494", - "497", - "504", - "508", - "511", - "513", - "515", - "518", - "522", - "543", - "545", - "547", - "549", - "551", - "553", - "555", - "558", - "561", "563", - "564", - "566", - "569", - "572", - "575", - "578", - "583", - "584", - "589", "599", - "600", - "602", - "604", - "606", - "608", - "611", - "613", - "616", - "619", - "621", - "624", - "626", - "630", - "632", - "634", - "636", - "638", - "640", - "642", - "644", - "646", - "648", - "650", - "652", - "654", - "655", - "656", - "658", - "660", - "663", - "670", - "673", - "676", - "681", - "686", - "690", - "692", - "695", - "697", - "699", - "703", - "704", - "709", - "712", - "715", - "716", - "718", - "719", - "729", - "731", - "750", - "755", - "757", - "760", - "762", - "774", - "776", - "778", - "781", - "783", - "785", - "789", - "792", - "795", - "798", "802", - "803", - "806", - "809", - "815", "818", - "821", - "828", - "829", - "838", - "839", - "840", - "846", - "847", - "848", - "854", - "866", "867", - "870", "871", - "875", "876", "877", - "880", "881", - "886", "887", - "888", "889", - "890", "891", "892", - "902", "903", - "916", "917", "918", "921", - "927", - "928", - "937", - "939", - "941" + "928" ] } diff --git a/parser/testdata/parse/postgres_regress/polymorphism.metadata.json b/parser/testdata/parse/postgres_regress/polymorphism.metadata.json index d741045..c32c207 100644 --- a/parser/testdata/parse/postgres_regress/polymorphism.metadata.json +++ b/parser/testdata/parse/postgres_regress/polymorphism.metadata.json @@ -1,34 +1,5 @@ { "todo": [ - "001", - "005", - "008", - "012", - "016", - "017", - "020", - "023", - "027", - "031", - "032", - "035", - "036", - "039", - "045", - "049", - "053", - "057", - "061", - "065", - "069", - "070", - "071", - "072", - "073", - "074", - "075", - "076", - "077", "078", "079", "080", @@ -90,58 +61,11 @@ "136", "137", "138", - "172", - "173", "176", - "179", "180", "182", "183", - "184", - "185", "186", - "187", - "197", - "205", - "211", - "227", - "235", - "236", - "239", - "241", - "249", - "250", - "258", - "259", - "265", - "269", - "273", - "275", - "276", - "277", - "283", - "298", - "306", - "315", - "316", - "318", - "319", - "320", - "321", - "322", - "325", - "328", - "362", - "368", - "373", - "381", - "388", - "392", - "393", - "400", - "404", - "405", - "410", - "416" + "187" ] } diff --git a/parser/testdata/parse/postgres_regress/portals.metadata.json b/parser/testdata/parse/postgres_regress/portals.metadata.json index 8d2113b..a1fef79 100644 --- a/parser/testdata/parse/postgres_regress/portals.metadata.json +++ b/parser/testdata/parse/postgres_regress/portals.metadata.json @@ -1,9 +1,5 @@ { "todo": [ - "123", - "128", - "129", - "281", - "319" + "281" ] } diff --git a/parser/testdata/parse/postgres_regress/privileges.metadata.json b/parser/testdata/parse/postgres_regress/privileges.metadata.json index 929e21e..e84468a 100644 --- a/parser/testdata/parse/postgres_regress/privileges.metadata.json +++ b/parser/testdata/parse/postgres_regress/privileges.metadata.json @@ -43,7 +43,6 @@ "133", "134", "135", - "136", "137", "138", "139", @@ -61,7 +60,6 @@ "166", "184", "195", - "202", "203", "208", "209", diff --git a/parser/testdata/parse/postgres_regress/publication.metadata.json b/parser/testdata/parse/postgres_regress/publication.metadata.json index 4ab9508..7cd667a 100644 --- a/parser/testdata/parse/postgres_regress/publication.metadata.json +++ b/parser/testdata/parse/postgres_regress/publication.metadata.json @@ -49,10 +49,8 @@ "116", "118", "119", - "120", "121", "122", - "123", "124", "125", "126", diff --git a/parser/testdata/parse/postgres_regress/random.metadata.json b/parser/testdata/parse/postgres_regress/random.metadata.json index 5ff761a..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/random.metadata.json +++ b/parser/testdata/parse/postgres_regress/random.metadata.json @@ -1,9 +1,3 @@ { - "todo": [ - "003", - "008", - "031", - "033", - "035" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json b/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json index ae78286..2e7c207 100644 --- a/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json +++ b/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json @@ -1,63 +1,11 @@ { "todo": [ - "005", - "065", - "074", - "083", - "092", - "101", - "110", - "119", - "128", - "137", "166", - "167", - "168", - "228", - "232", - "233", - "234", - "235", - "236", - "240", - "247", - "252", - "254", - "257", - "258", - "264", - "269", - "270", - "273", - "276", - "280", - "284", - "287", - "293", "294", "298", - "302", - "308", - "315", - "322", - "327", "332", - "333", - "338", - "344", - "349", - "354", - "367", - "370", "386", "389", - "396", - "401", - "403", - "405", - "408", - "411", - "414", "417" ] } diff --git a/parser/testdata/parse/postgres_regress/rangetypes.metadata.json b/parser/testdata/parse/postgres_regress/rangetypes.metadata.json index b466e90..f9cfda3 100644 --- a/parser/testdata/parse/postgres_regress/rangetypes.metadata.json +++ b/parser/testdata/parse/postgres_regress/rangetypes.metadata.json @@ -6,26 +6,11 @@ "328", "332", "333", - "338", - "342", - "343", - "344", - "347", - "350", - "355", "361", "366", "367", "369", "371", - "375", - "377", - "379", - "381", - "383", - "385", - "386", - "387", "401" ] } diff --git a/parser/testdata/parse/postgres_regress/returning.metadata.json b/parser/testdata/parse/postgres_regress/returning.metadata.json index c9cb856..e523061 100644 --- a/parser/testdata/parse/postgres_regress/returning.metadata.json +++ b/parser/testdata/parse/postgres_regress/returning.metadata.json @@ -5,9 +5,7 @@ "035", "040", "045", - "053", "057", - "058", "069" ] } diff --git a/parser/testdata/parse/postgres_regress/rowsecurity.metadata.json b/parser/testdata/parse/postgres_regress/rowsecurity.metadata.json index 4654cce..8e22a19 100644 --- a/parser/testdata/parse/postgres_regress/rowsecurity.metadata.json +++ b/parser/testdata/parse/postgres_regress/rowsecurity.metadata.json @@ -3,7 +3,6 @@ "018", "019", "021", - "023", "024", "027", "030", diff --git a/parser/testdata/parse/postgres_regress/rowtypes.metadata.json b/parser/testdata/parse/postgres_regress/rowtypes.metadata.json index e059411..5f29e0e 100644 --- a/parser/testdata/parse/postgres_regress/rowtypes.metadata.json +++ b/parser/testdata/parse/postgres_regress/rowtypes.metadata.json @@ -14,13 +14,6 @@ "152", "155", "163", - "164", - "165", - "166", - "172", - "173", - "174", - "175", - "191" + "164" ] } diff --git a/parser/testdata/parse/postgres_regress/rules.metadata.json b/parser/testdata/parse/postgres_regress/rules.metadata.json index 878beb2..a35652d 100644 --- a/parser/testdata/parse/postgres_regress/rules.metadata.json +++ b/parser/testdata/parse/postgres_regress/rules.metadata.json @@ -22,7 +22,6 @@ "047", "048", "049", - "237", "313", "316", "317", @@ -65,14 +64,11 @@ "514", "520", "524", - "540", "557", "558", "562", "563", "564", - "572", - "574", "581", "600", "601", diff --git a/parser/testdata/parse/postgres_regress/security_label.metadata.json b/parser/testdata/parse/postgres_regress/security_label.metadata.json index 4e4d016..4d49589 100644 --- a/parser/testdata/parse/postgres_regress/security_label.metadata.json +++ b/parser/testdata/parse/postgres_regress/security_label.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "010", "011" ] } diff --git a/parser/testdata/parse/postgres_regress/select.metadata.json b/parser/testdata/parse/postgres_regress/select.metadata.json index 1e1fdc1..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/select.metadata.json +++ b/parser/testdata/parse/postgres_regress/select.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "078" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/select_distinct.metadata.json b/parser/testdata/parse/postgres_regress/select_distinct.metadata.json index a9164b8..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/select_distinct.metadata.json +++ b/parser/testdata/parse/postgres_regress/select_distinct.metadata.json @@ -1,6 +1,3 @@ { - "todo": [ - "039", - "041" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/select_into.metadata.json b/parser/testdata/parse/postgres_regress/select_into.metadata.json index 1d5737f..2d9cf5a 100644 --- a/parser/testdata/parse/postgres_regress/select_into.metadata.json +++ b/parser/testdata/parse/postgres_regress/select_into.metadata.json @@ -2,7 +2,6 @@ "todo": [ "007", "008", - "021", - "044" + "021" ] } diff --git a/parser/testdata/parse/postgres_regress/select_parallel.metadata.json b/parser/testdata/parse/postgres_regress/select_parallel.metadata.json index f8195be..e373677 100644 --- a/parser/testdata/parse/postgres_regress/select_parallel.metadata.json +++ b/parser/testdata/parse/postgres_regress/select_parallel.metadata.json @@ -1,15 +1,5 @@ { "todo": [ - "001", - "029", - "114", - "132", - "158", - "171", - "204", - "215", - "216", - "228", "231" ] } diff --git a/parser/testdata/parse/postgres_regress/select_views.metadata.json b/parser/testdata/parse/postgres_regress/select_views.metadata.json index 01c5d57..977286c 100644 --- a/parser/testdata/parse/postgres_regress/select_views.metadata.json +++ b/parser/testdata/parse/postgres_regress/select_views.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "005", "018", "019", "020", diff --git a/parser/testdata/parse/postgres_regress/sqljson.metadata.json b/parser/testdata/parse/postgres_regress/sqljson.metadata.json index 39ce13a..e9a9b45 100644 --- a/parser/testdata/parse/postgres_regress/sqljson.metadata.json +++ b/parser/testdata/parse/postgres_regress/sqljson.metadata.json @@ -1,9 +1,6 @@ { "todo": [ "103", - "104", - "208", - "211", - "212" + "208" ] } diff --git a/parser/testdata/parse/postgres_regress/sqljson_queryfuncs.metadata.json b/parser/testdata/parse/postgres_regress/sqljson_queryfuncs.metadata.json index 7112c74..4f7d756 100644 --- a/parser/testdata/parse/postgres_regress/sqljson_queryfuncs.metadata.json +++ b/parser/testdata/parse/postgres_regress/sqljson_queryfuncs.metadata.json @@ -8,7 +8,6 @@ "176", "181", "182", - "250", "257", "291", "292", diff --git a/parser/testdata/parse/postgres_regress/stats.metadata.json b/parser/testdata/parse/postgres_regress/stats.metadata.json index 33b3fad..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/stats.metadata.json +++ b/parser/testdata/parse/postgres_regress/stats.metadata.json @@ -1,7 +1,3 @@ { - "todo": [ - "067", - "069", - "420" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/stats_ext.metadata.json b/parser/testdata/parse/postgres_regress/stats_ext.metadata.json index 5752770..2cd238b 100644 --- a/parser/testdata/parse/postgres_regress/stats_ext.metadata.json +++ b/parser/testdata/parse/postgres_regress/stats_ext.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "001", "003", "004", "005", @@ -18,7 +17,6 @@ "017", "018", "019", - "020", "021", "023", "024", @@ -108,9 +106,7 @@ "710", "711", "724", - "728", "729", - "730", "731", "737", "744", diff --git a/parser/testdata/parse/postgres_regress/subscription.metadata.json b/parser/testdata/parse/postgres_regress/subscription.metadata.json index d1e147c..7c4b7aa 100644 --- a/parser/testdata/parse/postgres_regress/subscription.metadata.json +++ b/parser/testdata/parse/postgres_regress/subscription.metadata.json @@ -68,7 +68,6 @@ "099", "101", "104", - "106", "108", "109", "112", diff --git a/parser/testdata/parse/postgres_regress/subselect.metadata.json b/parser/testdata/parse/postgres_regress/subselect.metadata.json index 5bf656e..fad8d38 100644 --- a/parser/testdata/parse/postgres_regress/subselect.metadata.json +++ b/parser/testdata/parse/postgres_regress/subselect.metadata.json @@ -2,12 +2,6 @@ "todo": [ "089", "093", - "163", - "164", - "167", - "170", - "215", - "218", - "226" + "164" ] } diff --git a/parser/testdata/parse/postgres_regress/temp.metadata.json b/parser/testdata/parse/postgres_regress/temp.metadata.json index 02d2247..8246015 100644 --- a/parser/testdata/parse/postgres_regress/temp.metadata.json +++ b/parser/testdata/parse/postgres_regress/temp.metadata.json @@ -1,10 +1,6 @@ { "todo": [ - "071", - "072", "084", - "128", - "130", "135", "138" ] diff --git a/parser/testdata/parse/postgres_regress/test_setup.metadata.json b/parser/testdata/parse/postgres_regress/test_setup.metadata.json index bf95514..d8fb05d 100644 --- a/parser/testdata/parse/postgres_regress/test_setup.metadata.json +++ b/parser/testdata/parse/postgres_regress/test_setup.metadata.json @@ -5,13 +5,7 @@ "059", "060", "061", - "062", - "063", - "064", "065", - "066", - "067", - "068", - "069" + "067" ] } diff --git a/parser/testdata/parse/postgres_regress/transactions.metadata.json b/parser/testdata/parse/postgres_regress/transactions.metadata.json index 7a74f63..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/transactions.metadata.json +++ b/parser/testdata/parse/postgres_regress/transactions.metadata.json @@ -1,12 +1,3 @@ { - "todo": [ - "026", - "229", - "234", - "239", - "244", - "262", - "290", - "291" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/triggers.metadata.json b/parser/testdata/parse/postgres_regress/triggers.metadata.json index 0e492bf..8d5c0aa 100644 --- a/parser/testdata/parse/postgres_regress/triggers.metadata.json +++ b/parser/testdata/parse/postgres_regress/triggers.metadata.json @@ -1,31 +1,20 @@ { "todo": [ - "001", - "002", - "003", - "004", - "005", "019", "020", "021", "025", "026", "047", - "054", "055", "062", "078", "092", "093", - "1007", - "1008", "1009", - "1011", "1012", "1014", - "1023", "1024", - "1037", "1038", "1039", "1041", @@ -38,7 +27,6 @@ "1052", "1053", "1054", - "122", "123", "124", "125", @@ -56,7 +44,6 @@ "166", "167", "168", - "173", "174", "175", "176", @@ -67,20 +54,14 @@ "186", "187", "188", - "198", "199", "200", "201", "202", - "227", "228", - "236", "237", - "243", - "249", "251", "261", - "268", "269", "270", "271", @@ -104,49 +85,28 @@ "289", "290", "291", - "309", "310", - "311", "312", - "313", "314", - "331", "332", "336", "337", "338", - "352", "353", - "354", "355", - "356", "357", - "369", "370", - "371", "372", - "373", "374", - "375", "376", - "389", - "399", "400", - "401", "402", - "417", "418", "419", - "425", "426", - "428", - "433", "434", - "435", "436", - "451", "452", - "457", "458", "459", "463", @@ -154,7 +114,6 @@ "491", "494", "495", - "504", "505", "506", "507", @@ -181,24 +140,15 @@ "542", "543", "544", - "551", "552", "553", "554", "555", - "561", "562", - "568", - "569", "578", "579", - "587", "589", - "592", - "595", - "604", "605", - "615", "618", "630", "631", @@ -206,16 +156,11 @@ "664", "665", "677", - "697", "698", "699", "707", "708", - "726", "727", - "752", - "753", - "754", "762", "763", "764", @@ -228,12 +173,9 @@ "771", "772", "773", - "800", "801", "808", "810", - "815", - "816", "820", "821", "822", @@ -270,8 +212,6 @@ "945", "946", "947", - "958", - "959", "960", "961", "963", @@ -282,7 +222,6 @@ "982", "984", "986", - "992", "993" ] } diff --git a/parser/testdata/parse/postgres_regress/truncate.metadata.json b/parser/testdata/parse/postgres_regress/truncate.metadata.json index 2a21b39..82d05cd 100644 --- a/parser/testdata/parse/postgres_regress/truncate.metadata.json +++ b/parser/testdata/parse/postgres_regress/truncate.metadata.json @@ -1,9 +1,6 @@ { "todo": [ - "090", "092", - "101", - "153", - "154" + "101" ] } diff --git a/parser/testdata/parse/postgres_regress/txid.metadata.json b/parser/testdata/parse/postgres_regress/txid.metadata.json index d87384c..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/txid.metadata.json +++ b/parser/testdata/parse/postgres_regress/txid.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "045" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/typed_table.metadata.json b/parser/testdata/parse/postgres_regress/typed_table.metadata.json index 2d8f1ab..5bfc0c8 100644 --- a/parser/testdata/parse/postgres_regress/typed_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/typed_table.metadata.json @@ -1,10 +1,8 @@ { "todo": [ "002", - "006", "010", "011", - "022", - "025" + "022" ] } diff --git a/parser/testdata/parse/postgres_regress/union.metadata.json b/parser/testdata/parse/postgres_regress/union.metadata.json index 7d7fd22..619125a 100644 --- a/parser/testdata/parse/postgres_regress/union.metadata.json +++ b/parser/testdata/parse/postgres_regress/union.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "086", - "180" + "086" ] } diff --git a/parser/testdata/parse/postgres_regress/updatable_views.metadata.json b/parser/testdata/parse/postgres_regress/updatable_views.metadata.json index 2542362..2a6596b 100644 --- a/parser/testdata/parse/postgres_regress/updatable_views.metadata.json +++ b/parser/testdata/parse/postgres_regress/updatable_views.metadata.json @@ -6,7 +6,6 @@ "1007", "1008", "1009", - "1046", "1047", "1061", "1074", @@ -15,12 +14,10 @@ "151", "155", "159", - "179", "180", "184", "188", "210", - "219", "232", "233", "234", @@ -52,17 +49,12 @@ "477", "487", "509", - "545", "546", - "726", "727", - "736", "737", "753", "754", "766", - "773", - "774", "805", "806", "904", diff --git a/parser/testdata/parse/postgres_regress/update.metadata.json b/parser/testdata/parse/postgres_regress/update.metadata.json index d3f2345..737798b 100644 --- a/parser/testdata/parse/postgres_regress/update.metadata.json +++ b/parser/testdata/parse/postgres_regress/update.metadata.json @@ -1,22 +1,18 @@ { "todo": [ - "091", "092", "094", "095", - "099", "100", "101", "102", "113", "114", "115", - "119", "120", "130", "135", "145", - "148", "149", "150", "151", @@ -29,11 +25,8 @@ "158", "159", "160", - "222", "223", - "228", "229", - "242", "243" ] } diff --git a/parser/testdata/parse/postgres_regress/vacuum.metadata.json b/parser/testdata/parse/postgres_regress/vacuum.metadata.json index 648fea0..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/vacuum.metadata.json +++ b/parser/testdata/parse/postgres_regress/vacuum.metadata.json @@ -1,6 +1,3 @@ { - "todo": [ - "042", - "043" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/window.metadata.json b/parser/testdata/parse/postgres_regress/window.metadata.json index adb5c95..ed33ae5 100644 --- a/parser/testdata/parse/postgres_regress/window.metadata.json +++ b/parser/testdata/parse/postgres_regress/window.metadata.json @@ -1,25 +1,11 @@ { "todo": [ - "123", - "125", - "128", - "130", - "134", "136", "137", - "311", - "314", - "315", - "316", "317", "318", - "319", - "320", - "321", "322", "323", - "329", - "330", - "384" + "330" ] } diff --git a/parser/testdata/parse/postgres_regress/with.metadata.json b/parser/testdata/parse/postgres_regress/with.metadata.json index bc3b7bb..e02297c 100644 --- a/parser/testdata/parse/postgres_regress/with.metadata.json +++ b/parser/testdata/parse/postgres_regress/with.metadata.json @@ -5,10 +5,8 @@ "182", "186", "189", - "241", "242", "246", - "250", "251", "275", "277", diff --git a/parser/testdata/parse/postgres_regress/xid.metadata.json b/parser/testdata/parse/postgres_regress/xid.metadata.json index f16f8ae..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/xid.metadata.json +++ b/parser/testdata/parse/postgres_regress/xid.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "082" - ] + "todo": [] } From 1a094486408b77859de5bd48dd0415f7ccea1dce Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 16 Aug 2026 19:28:34 +0000 Subject: [PATCH 08/24] =?UTF-8?q?Milestone=207:=20generic=20ALTER=20family?= =?UTF-8?q?=20=E2=80=94=20RENAME,=20SET=20SCHEMA,=20OWNER=20TO,=20DEPENDS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Unified ALTER dispatcher; RenameStmt, AlterObjectSchemaStmt, AlterOwnerStmt, AlterObjectDependsStmt, AlterOperatorStmt, AlterTypeStmt, AlterEnumStmt, AlterCollationStmt, AlterSystemStmt, AlterTblSpcStmt, AlterStatsStmt, AlterDomainStmt, CreateDomain wiring pieces, AlterDatabase[Set|RefreshColl]Stmt, AlterEventTrigStmt, AlterTSDictionary. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01J19Kf5LpGUhi2vxFJjzQJE --- internal/parse/ddl_alter_generic.go | 832 ++++++++++++++++++ internal/parse/ddl_altertable.go | 122 +++ internal/parse/ddl_dispatch.go | 78 -- internal/parse/ddl_role.go | 29 +- .../collate.icu.utf8.metadata.json | 1 - .../collate.linux.utf8.metadata.json | 1 - .../collate.windows.win1252.metadata.json | 1 - .../postgres_regress/triggers.metadata.json | 1 - .../alter_generic.metadata.json | 122 --- .../alter_operator.metadata.json | 29 +- .../alter_table.metadata.json | 76 -- .../collate.icu.utf8.metadata.json | 8 - .../collate.linux.utf8.metadata.json | 8 - .../collate.windows.win1252.metadata.json | 8 - .../constraints.metadata.json | 3 +- .../create_aggregate.metadata.json | 2 - .../create_function_sql.metadata.json | 4 +- .../create_misc.metadata.json | 11 +- .../create_procedure.metadata.json | 6 +- .../create_role.metadata.json | 4 - .../create_type.metadata.json | 6 +- .../create_view.metadata.json | 12 - .../postgres_regress/database.metadata.json | 8 +- .../postgres_regress/domain.metadata.json | 43 - .../parse/postgres_regress/enum.metadata.json | 53 +- .../postgres_regress/errors.metadata.json | 8 - .../event_trigger.metadata.json | 10 - .../event_trigger_login.metadata.json | 3 +- .../foreign_data.metadata.json | 11 - .../postgres_regress/inherit.metadata.json | 7 - .../largeobject.metadata.json | 1 - .../postgres_regress/matview.metadata.json | 2 - .../postgres_regress/merge.metadata.json | 2 - .../multirangetypes.metadata.json | 2 - .../postgres_regress/namespace.metadata.json | 1 - .../postgres_regress/password.metadata.json | 5 +- .../postgres_regress/privileges.metadata.json | 1 - .../parse/postgres_regress/psql.metadata.json | 1 - .../publication.metadata.json | 2 - .../postgres_regress/rules.metadata.json | 6 - .../postgres_regress/sequence.metadata.json | 2 - .../postgres_regress/stats_ext.metadata.json | 5 - .../postgres_regress/tablespace.metadata.json | 8 +- .../postgres_regress/triggers.metadata.json | 7 - .../postgres_regress/tsdicts.metadata.json | 3 - .../typed_table.metadata.json | 1 - 46 files changed, 971 insertions(+), 585 deletions(-) create mode 100644 internal/parse/ddl_alter_generic.go diff --git a/internal/parse/ddl_alter_generic.go b/internal/parse/ddl_alter_generic.go new file mode 100644 index 0000000..3f335b0 --- /dev/null +++ b/internal/parse/ddl_alter_generic.go @@ -0,0 +1,832 @@ +package parse + +// The unified ALTER dispatcher: RenameStmt, AlterObjectSchemaStmt, +// AlterOwnerStmt, AlterObjectDependsStmt, and the object-specific ALTER +// statements that share their prefixes (AlterOperatorStmt, AlterTypeStmt, +// AlterCollationStmt, AlterSystemStmt, AlterTblSpcStmt, AlterStatsStmt, +// AlterDomainStmt, AlterDatabase*Stmt, AlterEventTrigStmt). Each ALTER +// arm parses the object reference once and picks the statement +// from the following token, exactly as the LALR tables do. + +import ( + "github.com/sqlc-dev/oliphant/ast" +) + +// newRenameStmt builds a RenameStmt with C's zero-valued defaults +// (relationType OBJECT_ACCESS_METHOD and behavior DROP_RESTRICT are the +// proto spellings of C zero). +func newRenameStmt(t ast.ObjectType) *ast.RenameStmt { + return &ast.RenameStmt{ + RenameType: t, + RelationType: ast.ObjectType_OBJECT_ACCESS_METHOD, + Behavior: ast.DropBehavior_DROP_RESTRICT, + } +} + +func nRenameStmt(n *ast.RenameStmt) *ast.Node { + return &ast.Node{Node: &ast.Node_RenameStmt{RenameStmt: n}} +} + +func nAlterObjectSchemaStmt(n *ast.AlterObjectSchemaStmt) *ast.Node { + return &ast.Node{Node: &ast.Node_AlterObjectSchemaStmt{AlterObjectSchemaStmt: n}} +} + +func nAlterOwnerStmt(n *ast.AlterOwnerStmt) *ast.Node { + return &ast.Node{Node: &ast.Node_AlterOwnerStmt{AlterOwnerStmt: n}} +} + +// alterTail flags which generic ALTER tails an object kind supports. +type alterTail int + +const ( + tailRename alterTail = 1 << iota + tailSchema + tailOwner + tailDepends +) + +// parseAlterGenericTail parses RENAME TO / SET SCHEMA / OWNER TO / +// [NO] DEPENDS ON EXTENSION for an object addressed by a Node (object) or +// relation, returning nil if the lookahead is none of the supported tails. +func (p *parser) parseAlterGenericTail(t ast.ObjectType, object *ast.Node, rel *ast.RangeVar, missingOk bool, tails alterTail) *ast.Node { + switch p.kind() { + case ast.Token_RENAME: + if tails&tailRename == 0 { + return nil + } + p.next() + p.expect(ast.Token_TO) + n := newRenameStmt(t) + n.Object = object + n.Relation = rel + n.MissingOk = missingOk + n.Newname = p.name() + return nRenameStmt(n) + case ast.Token_SET: + if tails&tailSchema == 0 || p.kindN(1) != ast.Token_SCHEMA { + return nil + } + p.next() + p.next() + n := &ast.AlterObjectSchemaStmt{ + ObjectType: t, + Object: object, + Relation: rel, + MissingOk: missingOk, + Newschema: p.name(), + } + return nAlterObjectSchemaStmt(n) + case ast.Token_OWNER: + if tails&tailOwner == 0 { + return nil + } + p.next() + p.expect(ast.Token_TO) + n := &ast.AlterOwnerStmt{ + ObjectType: t, + Object: object, + Relation: rel, + Newowner: p.parseRoleSpec(), + } + return nAlterOwnerStmt(n) + case ast.Token_DEPENDS, ast.Token_NO: + if tails&tailDepends == 0 { + return nil + } + if p.kind() == ast.Token_NO && p.kindN(1) != ast.Token_DEPENDS { + return nil + } + n := &ast.AlterObjectDependsStmt{ + ObjectType: t, + Object: object, + Relation: rel, + Remove: p.have(ast.Token_NO), + } + p.expect(ast.Token_DEPENDS) + p.expect(ast.Token_ON) + p.expect(ast.Token_EXTENSION) + n.Extname = &ast.String{Sval: p.name()} + return &ast.Node{Node: &ast.Node_AlterObjectDependsStmt{AlterObjectDependsStmt: n}} + } + return nil +} + +// roleSpecToRoleId applies gram.y's RoleId restrictions to a parsed +// RoleSpec. +func (p *parser) roleSpecToRoleId(spec *ast.RoleSpec, loc int32) string { + switch spec.Roletype { + case ast.RoleSpecType_ROLESPEC_CSTRING: + return spec.Rolename + case ast.RoleSpecType_ROLESPEC_PUBLIC: + p.ereport("base_yyparse", `role name "public" is reserved`, loc) + case ast.RoleSpecType_ROLESPEC_SESSION_USER: + p.ereport("base_yyparse", "SESSION_USER cannot be used as a role name here", loc) + case ast.RoleSpecType_ROLESPEC_CURRENT_USER: + p.ereport("base_yyparse", "CURRENT_USER cannot be used as a role name here", loc) + case ast.RoleSpecType_ROLESPEC_CURRENT_ROLE: + p.ereport("base_yyparse", "CURRENT_ROLE cannot be used as a role name here", loc) + } + return "" +} + +// parseAlterDispatch routes a statement beginning with ALTER. The ALTER +// token is not yet consumed. +func (p *parser) parseAlterDispatch() *ast.Node { + p.expect(ast.Token_ALTER) + switch p.kind() { + case ast.Token_AGGREGATE: + p.next() + obj := p.parseAggregateWithArgtypes() + if n := p.parseAlterGenericTail(ast.ObjectType_OBJECT_AGGREGATE, obj, nil, false, + tailRename|tailSchema|tailOwner); n != nil { + return n + } + p.syntaxErrorAt() + + case ast.Token_COLLATION: + p.next() + names := p.anyName() + if p.kind() == ast.Token_REFRESH { + // gram.y: AlterCollationStmt + p.next() + p.expect(ast.Token_VERSION_P) + return &ast.Node{Node: &ast.Node_AlterCollationStmt{AlterCollationStmt: &ast.AlterCollationStmt{ + Collname: names, + }}} + } + if n := p.parseAlterGenericTail(ast.ObjectType_OBJECT_COLLATION, nList(names), nil, false, + tailRename|tailSchema|tailOwner); n != nil { + return n + } + p.syntaxErrorAt() + + case ast.Token_CONVERSION_P: + p.next() + obj := nList(p.anyName()) + if n := p.parseAlterGenericTail(ast.ObjectType_OBJECT_CONVERSION, obj, nil, false, + tailRename|tailSchema|tailOwner); n != nil { + return n + } + p.syntaxErrorAt() + + case ast.Token_DATABASE: + p.next() + dbname := p.name() + switch p.kind() { + case ast.Token_RENAME: + p.next() + p.expect(ast.Token_TO) + n := newRenameStmt(ast.ObjectType_OBJECT_DATABASE) + n.Subname = dbname + n.Newname = p.name() + return nRenameStmt(n) + case ast.Token_OWNER: + p.next() + p.expect(ast.Token_TO) + return nAlterOwnerStmt(&ast.AlterOwnerStmt{ + ObjectType: ast.ObjectType_OBJECT_DATABASE, + Object: nStr(dbname), + Newowner: p.parseRoleSpec(), + }) + case ast.Token_REFRESH: + p.next() + p.expect(ast.Token_COLLATION) + p.expect(ast.Token_VERSION_P) + return &ast.Node{Node: &ast.Node_AlterDatabaseRefreshCollStmt{ + AlterDatabaseRefreshCollStmt: &ast.AlterDatabaseRefreshCollStmt{Dbname: dbname}, + }} + case ast.Token_SET: + if p.kindN(1) == ast.Token_TABLESPACE { + p.next() + p.next() + ntok := p.peek() + return &ast.Node{Node: &ast.Node_AlterDatabaseStmt{AlterDatabaseStmt: &ast.AlterDatabaseStmt{ + Dbname: dbname, + Options: []*ast.Node{makeDefElem("tablespace", nStr(p.name()), ntok.Start)}, + }}} + } + fallthrough + case ast.Token_RESET: + // gram.y: AlterDatabaseSetStmt + return &ast.Node{Node: &ast.Node_AlterDatabaseSetStmt{AlterDatabaseSetStmt: &ast.AlterDatabaseSetStmt{ + Dbname: dbname, + Setstmt: p.parseSetResetClause(), + }}} + default: + // gram.y: AlterDatabaseStmt: [WITH] createdb_opt_list + n := &ast.AlterDatabaseStmt{Dbname: dbname} + p.parseOptWith() + n.Options = p.parseCreatedbOptItems() + return &ast.Node{Node: &ast.Node_AlterDatabaseStmt{AlterDatabaseStmt: n}} + } + + case ast.Token_DOMAIN_P: + p.next() + names := p.anyName() + switch p.kind() { + case ast.Token_RENAME: + if p.kindN(1) == ast.Token_CONSTRAINT { + p.next() + p.next() + n := newRenameStmt(ast.ObjectType_OBJECT_DOMCONSTRAINT) + n.Object = nList(names) + n.Subname = p.name() + p.expect(ast.Token_TO) + n.Newname = p.name() + return nRenameStmt(n) + } + case ast.Token_SET: + // SET SCHEMA is generic; SET DEFAULT / SET NOT NULL are + // AlterDomainStmt. + if p.kindN(1) != ast.Token_SCHEMA { + return p.parseAlterDomainStmt(names) + } + case ast.Token_DROP, ast.Token_ADD_P, ast.Token_VALIDATE: + return p.parseAlterDomainStmt(names) + } + if n := p.parseAlterGenericTail(ast.ObjectType_OBJECT_DOMAIN, nList(names), nil, false, + tailRename|tailSchema|tailOwner); n != nil { + return n + } + p.syntaxErrorAt() + + case ast.Token_FUNCTION, ast.Token_PROCEDURE, ast.Token_ROUTINE: + var objtype ast.ObjectType + switch p.next().Kind { + case ast.Token_FUNCTION: + objtype = ast.ObjectType_OBJECT_FUNCTION + case ast.Token_PROCEDURE: + objtype = ast.ObjectType_OBJECT_PROCEDURE + default: + objtype = ast.ObjectType_OBJECT_ROUTINE + } + obj := p.parseFunctionWithArgtypes() + if n := p.parseAlterGenericTail(objtype, obj, nil, false, + tailRename|tailSchema|tailOwner|tailDepends); n != nil { + return n + } + return p.parseAlterFunctionStmt(objtype, obj.GetObjectWithArgs()) + + case ast.Token_GROUP_P: + p.next() + stok := p.peek() + spec := p.parseRoleSpec() + if p.kind() == ast.Token_RENAME { + p.next() + p.expect(ast.Token_TO) + n := newRenameStmt(ast.ObjectType_OBJECT_ROLE) + n.Subname = p.roleSpecToRoleId(spec, stok.Start) + rtok := p.peek() + n.Newname = p.roleSpecToRoleId(p.parseRoleSpec(), rtok.Start) + return nRenameStmt(n) + } + return p.parseAlterGroupStmtRest(spec) + + case ast.Token_PROCEDURAL: + if p.kindN(1) != ast.Token_LANGUAGE { + break + } + p.next() + fallthrough + case ast.Token_LANGUAGE: + p.next() + obj := nStr(p.name()) + if n := p.parseAlterGenericTail(ast.ObjectType_OBJECT_LANGUAGE, obj, nil, false, + tailRename|tailOwner); n != nil { + return n + } + p.syntaxErrorAt() + + case ast.Token_LARGE_P: + p.next() + p.expect(ast.Token_OBJECT_P) + obj := p.parseNumericOnly() + if n := p.parseAlterGenericTail(ast.ObjectType_OBJECT_LARGEOBJECT, obj, nil, false, + tailOwner); n != nil { + return n + } + p.syntaxErrorAt() + + case ast.Token_OPERATOR: + p.next() + switch p.kind() { + case ast.Token_CLASS, ast.Token_FAMILY: + isFamily := p.next().Kind == ast.Token_FAMILY + objtype := ast.ObjectType_OBJECT_OPCLASS + if isFamily { + objtype = ast.ObjectType_OBJECT_OPFAMILY + } + names := p.anyName() + p.expect(ast.Token_USING) + obj := nList(append([]*ast.Node{nStr(p.name())}, names...)) + if isFamily { + switch p.kind() { + case ast.Token_ADD_P, ast.Token_DROP: + return p.parseAlterOpFamilyStmt(obj) + } + } + if n := p.parseAlterGenericTail(objtype, obj, nil, false, + tailRename|tailSchema|tailOwner); n != nil { + return n + } + p.syntaxErrorAt() + } + obj := p.parseOperatorWithArgtypes() + if p.kind() == ast.Token_SET && p.kindN(1) == ast.Token('(') { + // gram.y: AlterOperatorStmt + p.next() + p.next() + n := &ast.AlterOperatorStmt{Opername: obj.GetObjectWithArgs()} + n.Options = p.parseOperatorDefList() + p.expect(ast.Token(')')) + return &ast.Node{Node: &ast.Node_AlterOperatorStmt{AlterOperatorStmt: n}} + } + if n := p.parseAlterGenericTail(ast.ObjectType_OBJECT_OPERATOR, obj, nil, false, + tailSchema|tailOwner); n != nil { + return n + } + p.syntaxErrorAt() + + case ast.Token_ROLE, ast.Token_USER: + if p.kindN(1) == ast.Token_MAPPING { + break // AlterUserMappingStmt (FDW batch) + } + p.next() + if p.kind() == ast.Token_ALL { + p.next() + n := &ast.AlterRoleSetStmt{} + if p.have(ast.Token_IN_P) { + p.expect(ast.Token_DATABASE) + n.Database = p.name() + } + n.Setstmt = p.parseSetResetClause() + return &ast.Node{Node: &ast.Node_AlterRoleSetStmt{AlterRoleSetStmt: n}} + } + stok := p.peek() + spec := p.parseRoleSpec() + if p.kind() == ast.Token_RENAME { + p.next() + p.expect(ast.Token_TO) + n := newRenameStmt(ast.ObjectType_OBJECT_ROLE) + n.Subname = p.roleSpecToRoleId(spec, stok.Start) + rtok := p.peek() + n.Newname = p.roleSpecToRoleId(p.parseRoleSpec(), rtok.Start) + return nRenameStmt(n) + } + return p.parseAlterRoleStmtRest(spec) + + case ast.Token_RULE: + p.next() + subname := p.name() + p.expect(ast.Token_ON) + rel := p.parseQualifiedName() + if n := p.parseAlterGenericTail(ast.ObjectType_OBJECT_RULE, nil, rel, false, + tailRename); n != nil { + n.GetRenameStmt().Subname = subname + return n + } + p.syntaxErrorAt() + + case ast.Token_TRIGGER: + p.next() + subname := p.name() + p.expect(ast.Token_ON) + rel := p.parseQualifiedName() + if n := p.parseAlterGenericTail(ast.ObjectType_OBJECT_TRIGGER, nil, rel, false, + tailRename|tailDepends); n != nil { + if r := n.GetRenameStmt(); r != nil { + r.Subname = subname + } else { + n.GetAlterObjectDependsStmt().Object = nList([]*ast.Node{nStr(subname)}) + } + return n + } + p.syntaxErrorAt() + + case ast.Token_EVENT: + if p.kindN(1) != ast.Token_TRIGGER { + break + } + p.next() + p.next() + name := p.name() + switch p.kind() { + case ast.Token_ENABLE_P: + // gram.y: AlterEventTrigStmt / enable_trigger + p.next() + n := &ast.AlterEventTrigStmt{Trigname: name, Tgenabled: "O"} + switch p.kind() { + case ast.Token_REPLICA: + p.next() + n.Tgenabled = "R" + case ast.Token_ALWAYS: + p.next() + n.Tgenabled = "A" + } + return &ast.Node{Node: &ast.Node_AlterEventTrigStmt{AlterEventTrigStmt: n}} + case ast.Token_DISABLE_P: + p.next() + return &ast.Node{Node: &ast.Node_AlterEventTrigStmt{AlterEventTrigStmt: &ast.AlterEventTrigStmt{ + Trigname: name, Tgenabled: "D", + }}} + } + if n := p.parseAlterGenericTail(ast.ObjectType_OBJECT_EVENT_TRIGGER, nStr(name), nil, false, + tailRename|tailOwner); n != nil { + return n + } + p.syntaxErrorAt() + + case ast.Token_SCHEMA: + p.next() + obj := nStr(p.name()) + if n := p.parseAlterGenericTail(ast.ObjectType_OBJECT_SCHEMA, nil, nil, false, + tailRename|tailOwner); n != nil { + // object_type_name statements carry the name as subname for + // RENAME and as object for OWNER. + if r := n.GetRenameStmt(); r != nil { + r.Subname = asString(obj).Sval + } else { + n.GetAlterOwnerStmt().Object = obj + } + return n + } + p.syntaxErrorAt() + + case ast.Token_STATISTICS: + p.next() + missingOk := false + if p.have(ast.Token_IF_P) { + p.expect(ast.Token_EXISTS) + missingOk = true + } + names := p.anyName() + if p.kind() == ast.Token_SET && p.kindN(1) == ast.Token_STATISTICS { + // gram.y: AlterStatsStmt + p.next() + p.next() + return &ast.Node{Node: &ast.Node_AlterStatsStmt{AlterStatsStmt: &ast.AlterStatsStmt{ + Defnames: names, + MissingOk: missingOk, + Stxstattarget: p.parseSetStatisticsValue(), + }}} + } + if !missingOk { + if n := p.parseAlterGenericTail(ast.ObjectType_OBJECT_STATISTIC_EXT, nList(names), nil, false, + tailRename|tailSchema|tailOwner); n != nil { + return n + } + } + p.syntaxErrorAt() + + case ast.Token_SYSTEM_P: + // gram.y: AlterSystemStmt + p.next() + n := &ast.AlterSystemStmt{} + switch { + case p.have(ast.Token_SET): + n.Setstmt = p.parseGenericSet() + case p.have(ast.Token_RESET): + n.Setstmt = &ast.VariableSetStmt{Kind: ast.VariableSetKind_VAR_RESET} + if p.have(ast.Token_ALL) { + n.Setstmt.Kind = ast.VariableSetKind_VAR_RESET_ALL + } else { + n.Setstmt.Name = p.parseVarName() + } + default: + p.syntaxErrorAt() + } + return &ast.Node{Node: &ast.Node_AlterSystemStmt{AlterSystemStmt: n}} + + case ast.Token_TABLESPACE: + p.next() + name := p.name() + switch p.kind() { + case ast.Token_SET, ast.Token_RESET: + // gram.y: AlterTblSpcStmt + isReset := p.next().Kind == ast.Token_RESET + n := &ast.AlterTableSpaceOptionsStmt{ + Tablespacename: name, + IsReset: isReset, + } + n.Options = p.parseReloptions() + return &ast.Node{Node: &ast.Node_AlterTableSpaceOptionsStmt{AlterTableSpaceOptionsStmt: n}} + case ast.Token_RENAME: + p.next() + p.expect(ast.Token_TO) + n := newRenameStmt(ast.ObjectType_OBJECT_TABLESPACE) + n.Subname = name + n.Newname = p.name() + return nRenameStmt(n) + case ast.Token_OWNER: + p.next() + p.expect(ast.Token_TO) + return nAlterOwnerStmt(&ast.AlterOwnerStmt{ + ObjectType: ast.ObjectType_OBJECT_TABLESPACE, + Object: nStr(name), + Newowner: p.parseRoleSpec(), + }) + } + p.syntaxErrorAt() + + case ast.Token_TEXT_P: + if p.kindN(1) != ast.Token_SEARCH { + break + } + p.next() + p.next() + var objtype ast.ObjectType + var tails alterTail + kindTok := p.next() + switch kindTok.Kind { + case ast.Token_PARSER: + objtype, tails = ast.ObjectType_OBJECT_TSPARSER, tailRename|tailSchema + case ast.Token_DICTIONARY: + objtype, tails = ast.ObjectType_OBJECT_TSDICTIONARY, tailRename|tailSchema|tailOwner + case ast.Token_TEMPLATE: + objtype, tails = ast.ObjectType_OBJECT_TSTEMPLATE, tailRename|tailSchema + case ast.Token_CONFIGURATION: + objtype, tails = ast.ObjectType_OBJECT_TSCONFIGURATION, tailRename|tailSchema|tailOwner + default: + p.syntaxError(kindTok) + } + names := p.anyName() + if objtype == ast.ObjectType_OBJECT_TSDICTIONARY && p.kind() == ast.Token('(') { + // gram.y: AlterTSDictionaryStmt + return &ast.Node{Node: &ast.Node_AlterTsdictionaryStmt{AlterTsdictionaryStmt: &ast.AlterTSDictionaryStmt{ + Dictname: names, + Options: p.parseDefinition(), + }}} + } + if objtype == ast.ObjectType_OBJECT_TSCONFIGURATION { + switch p.kind() { + case ast.Token_ADD_P, ast.Token_ALTER, ast.Token_DROP: + return p.parseAlterTSConfigurationStmt(names) + } + } + if n := p.parseAlterGenericTail(objtype, nList(names), nil, false, tails); n != nil { + return n + } + p.syntaxErrorAt() + + case ast.Token_TYPE_P: + p.next() + return p.parseAlterTypeDispatch() + + case ast.Token_TABLE: + p.next() + return p.parseAlterTableStmt(ast.ObjectType_OBJECT_TABLE, true, true) + case ast.Token_INDEX: + p.next() + return p.parseAlterTableStmt(ast.ObjectType_OBJECT_INDEX, false, true) + case ast.Token_VIEW: + p.next() + return p.parseAlterTableStmt(ast.ObjectType_OBJECT_VIEW, false, false) + case ast.Token_MATERIALIZED: + if p.kindN(1) == ast.Token_VIEW { + p.next() + p.next() + return p.parseAlterTableStmt(ast.ObjectType_OBJECT_MATVIEW, false, true) + } + case ast.Token_FOREIGN: + if p.kindN(1) == ast.Token_TABLE { + p.next() + p.next() + return p.parseAlterTableStmt(ast.ObjectType_OBJECT_FOREIGN_TABLE, true, false) + } + break // ALTER FOREIGN DATA WRAPPER (FDW batch) + + case ast.Token_SEQUENCE: + p.next() + missingOk := false + if p.have(ast.Token_IF_P) { + p.expect(ast.Token_EXISTS) + missingOk = true + } + rel := p.parseQualifiedName() + if n := p.parseAlterGenericTail(ast.ObjectType_OBJECT_SEQUENCE, nil, rel, missingOk, + tailRename|tailSchema); n != nil { + return n + } + if p.seqOptElemStarts() { + n := &ast.AlterSeqStmt{Sequence: rel, MissingOk: missingOk} + n.Options = p.parseSeqOptList() + return &ast.Node{Node: &ast.Node_AlterSeqStmt{AlterSeqStmt: n}} + } + n := &ast.AlterTableStmt{ + Objtype: ast.ObjectType_OBJECT_SEQUENCE, + Relation: rel, + MissingOk: missingOk, + } + n.Cmds = p.parseAlterTableCmds() + return &ast.Node{Node: &ast.Node_AlterTableStmt{AlterTableStmt: n}} + } + p.syntaxErrorAt() + return nil +} + +// parseAlterDomainStmt is gram.y's AlterDomainStmt; ALTER DOMAIN any_name +// consumed. +func (p *parser) parseAlterDomainStmt(names []*ast.Node) *ast.Node { + n := &ast.AlterDomainStmt{ + TypeName: names, + Behavior: ast.DropBehavior_DROP_RESTRICT, + } + switch { + case p.have(ast.Token_SET): + switch { + case p.have(ast.Token_DEFAULT): + n.Subtype = "T" + n.Def = p.parseAExpr(0) + case p.have(ast.Token_NOT): + p.expect(ast.Token_NULL_P) + n.Subtype = "O" + default: + p.syntaxErrorAt() + } + case p.have(ast.Token_DROP): + switch { + case p.have(ast.Token_DEFAULT): + n.Subtype = "T" + case p.have(ast.Token_NOT): + p.expect(ast.Token_NULL_P) + n.Subtype = "N" + case p.have(ast.Token_CONSTRAINT): + n.Subtype = "X" + if p.have(ast.Token_IF_P) { + p.expect(ast.Token_EXISTS) + n.MissingOk = true + } + n.Name = p.name() + n.Behavior = p.parseOptDropBehavior() + default: + p.syntaxErrorAt() + } + case p.have(ast.Token_ADD_P): + n.Subtype = "C" + n.Def = p.parseDomainConstraint() + case p.have(ast.Token_VALIDATE): + p.expect(ast.Token_CONSTRAINT) + n.Subtype = "V" + n.Name = p.name() + default: + p.syntaxErrorAt() + } + return &ast.Node{Node: &ast.Node_AlterDomainStmt{AlterDomainStmt: n}} +} + +// parseDomainConstraint is gram.y's DomainConstraint. +func (p *parser) parseDomainConstraint() *ast.Node { + tok := p.peek() + if tok.Kind == ast.Token_CONSTRAINT { + p.next() + name := p.name() + c := p.parseDomainConstraintElem() + c.Conname = name + c.Location = tok.Start + return nConstraint(c) + } + return nConstraint(p.parseDomainConstraintElem()) +} + +// parseDomainConstraintElem is gram.y's DomainConstraintElem. +func (p *parser) parseDomainConstraintElem() *ast.Constraint { + tok := p.peek() + n := &ast.Constraint{Location: tok.Start} + switch tok.Kind { + case ast.Token_CHECK: + p.next() + n.Contype = ast.ConstrType_CONSTR_CHECK + p.expect(ast.Token('(')) + n.RawExpr = p.parseAExpr(0) + p.expect(ast.Token(')')) + cas, casLoc := p.parseConstraintAttributeSpec() + p.processCASbits(cas, casLoc, "CHECK", nil, nil, &n.SkipValidation, &n.IsNoInherit) + n.InitiallyValid = !n.SkipValidation + case ast.Token_NOT: + p.next() + p.expect(ast.Token_NULL_P) + n.Contype = ast.ConstrType_CONSTR_NOTNULL + n.Keys = []*ast.Node{nStr("value")} + cas, casLoc := p.parseConstraintAttributeSpec() + p.processCASbits(cas, casLoc, "NOT NULL", nil, nil, nil, &n.IsNoInherit) + n.InitiallyValid = true + default: + p.syntaxErrorAt() + } + return n +} + +// parseCreatedbOptItems is gram.y's createdb_opt_items. +func (p *parser) parseCreatedbOptItems() []*ast.Node { + var list []*ast.Node + for { + tok := p.peek() + var name string + switch tok.Kind { + case ast.Token_IDENT: + p.next() + name = tok.Str + case ast.Token_CONNECTION: + p.next() + p.expect(ast.Token_LIMIT) + name = "connection_limit" + case ast.Token_ENCODING, ast.Token_LOCATION, ast.Token_OWNER, + ast.Token_TABLESPACE, ast.Token_TEMPLATE: + p.next() + name = tok.Str + default: + return list + } + p.have(ast.Token('=')) + var arg *ast.Node + switch p.kind() { + case ast.Token_ICONST, ast.Token_FCONST, ast.Token('+'), ast.Token('-'): + arg = p.parseNumericOnly() + case ast.Token_DEFAULT: + p.next() + default: + arg = nStr(p.parseOptBooleanOrString()) + } + list = append(list, makeDefElem(name, arg, tok.Start)) + } +} + +// parseGenericSet is gram.y's generic_set (used by ALTER SYSTEM SET). +func (p *parser) parseGenericSet() *ast.VariableSetStmt { + name := p.parseVarName() + if !p.have(ast.Token_TO) && !p.have(ast.Token('=')) { + p.syntaxErrorAt() + } + if p.kind() == ast.Token_DEFAULT { + p.next() + return &ast.VariableSetStmt{ + Kind: ast.VariableSetKind_VAR_SET_DEFAULT, + Name: name, + } + } + return &ast.VariableSetStmt{ + Kind: ast.VariableSetKind_VAR_SET_VALUE, + Name: name, + Args: p.parseVarList(), + } +} + +// parseOperatorDefList is gram.y's operator_def_list. +func (p *parser) parseOperatorDefList() []*ast.Node { + list := []*ast.Node{p.parseOperatorDefElem()} + for p.have(ast.Token(',')) { + list = append(list, p.parseOperatorDefElem()) + } + return list +} + +// parseOperatorDefElem is gram.y's operator_def_elem. +func (p *parser) parseOperatorDefElem() *ast.Node { + tok := p.peek() + name := p.colLabel() + if !p.have(ast.Token('=')) { + return makeDefElem(name, nil, tok.Start) + } + if p.have(ast.Token_NONE) { + return makeDefElem(name, nil, tok.Start) + } + return makeDefElem(name, p.parseOperatorDefArg(), tok.Start) +} + +// parseOperatorDefArg is gram.y's operator_def_arg. +func (p *parser) parseOperatorDefArg() *ast.Node { + tok := p.peek() + switch tok.Kind { + case ast.Token_SCONST: + p.next() + return nStr(tok.Str) + case ast.Token_ICONST, ast.Token_FCONST: + return p.parseNumericOnly() + case ast.Token('+'), ast.Token('-'): + if p.kindN(1) == ast.Token_ICONST || p.kindN(1) == ast.Token_FCONST { + return p.parseNumericOnly() + } + return nList(p.parseQualAllOp()) + case ast.Token_Op, ast.Token('*'), ast.Token('/'), ast.Token('%'), + ast.Token('^'), ast.Token('<'), ast.Token('>'), ast.Token('='), + ast.Token_LESS_EQUALS, ast.Token_GREATER_EQUALS, ast.Token_NOT_EQUALS, + ast.Token_OPERATOR: + return nList(p.parseQualAllOp()) + } + if tok.KeywordKind == ast.KeywordKind_RESERVED_KEYWORD { + p.next() + return nStr(tok.Str) + } + return nTypeName(p.parseFuncType()) +} + +// Stubs for statements arriving in later milestone-7 batches. +func (p *parser) parseAlterOpFamilyStmt(obj *ast.Node) *ast.Node { + p.syntaxErrorAt() + return nil +} + +func (p *parser) parseAlterTSConfigurationStmt(names []*ast.Node) *ast.Node { + p.syntaxErrorAt() + return nil +} diff --git a/internal/parse/ddl_altertable.go b/internal/parse/ddl_altertable.go index 6b27385..1885569 100644 --- a/internal/parse/ddl_altertable.go +++ b/internal/parse/ddl_altertable.go @@ -53,6 +53,57 @@ func (p *parser) parseAlterTableStmt(objtype ast.ObjectType, relExpr, allowMoveA } else { n.Relation = p.parseQualifiedName() } + + // The RENAME / SET SCHEMA / DEPENDS ON EXTENSION productions share this + // prefix (RenameStmt, AlterObjectSchemaStmt, AlterObjectDependsStmt). + switch p.kind() { + case ast.Token_RENAME: + p.next() + r := newRenameStmt(objtype) + r.Relation = n.Relation + r.MissingOk = n.MissingOk + switch { + case p.have(ast.Token_TO): + r.Newname = p.name() + case objtype == ast.ObjectType_OBJECT_TABLE && p.kind() == ast.Token_CONSTRAINT: + p.next() + r.RenameType = ast.ObjectType_OBJECT_TABCONSTRAINT + r.Subname = p.name() + p.expect(ast.Token_TO) + r.Newname = p.name() + default: + // RENAME [COLUMN] name TO name (not available for INDEX or + // SEQUENCE). + if objtype == ast.ObjectType_OBJECT_INDEX || + objtype == ast.ObjectType_OBJECT_SEQUENCE { + p.syntaxErrorAt() + } + p.have(ast.Token_COLUMN) + r.RenameType = ast.ObjectType_OBJECT_COLUMN + r.RelationType = objtype + r.Subname = p.name() + p.expect(ast.Token_TO) + r.Newname = p.name() + } + return nRenameStmt(r) + case ast.Token_SET: + if p.kindN(1) == ast.Token_SCHEMA && objtype != ast.ObjectType_OBJECT_INDEX { + p.next() + p.next() + return nAlterObjectSchemaStmt(&ast.AlterObjectSchemaStmt{ + ObjectType: objtype, + Relation: n.Relation, + MissingOk: n.MissingOk, + Newschema: p.name(), + }) + } + case ast.Token_DEPENDS, ast.Token_NO: + if objtype == ast.ObjectType_OBJECT_INDEX || objtype == ast.ObjectType_OBJECT_MATVIEW { + if d := p.parseAlterGenericTail(objtype, nil, n.Relation, false, tailDepends); d != nil { + return d + } + } + } n.Cmds = p.parseAlterTableCmds() return &ast.Node{Node: &ast.Node_AlterTableStmt{AlterTableStmt: n}} } @@ -666,11 +717,82 @@ func (p *parser) parseAlterTypeDispatch() *ast.Node { } return &ast.Node{Node: &ast.Node_AlterTableStmt{AlterTableStmt: n}} } + if p.kind() == ast.Token_ADD_P && p.kindN(1) == ast.Token_VALUE_P { + return p.parseAlterEnumStmt(names) + } + if p.kind() == ast.Token_DROP && p.kindN(1) == ast.Token_VALUE_P { + // gram.y: AlterEnumStmt's DROP VALUE arm always errors. + dtok := p.next() + p.next() + p.sconst() + p.ereport("base_yyparse", "dropping an enum value is not implemented", dtok.Start) + } + case ast.Token_RENAME: + switch p.kindN(1) { + case ast.Token_ATTRIBUTE: + // RenameStmt: ALTER TYPE_P any_name RENAME ATTRIBUTE ... + p.next() + p.next() + r := newRenameStmt(ast.ObjectType_OBJECT_ATTRIBUTE) + r.RelationType = ast.ObjectType_OBJECT_TYPE + r.Relation = p.makeRangeVarFromAnyName(names, ntok.Start) + r.Subname = p.name() + p.expect(ast.Token_TO) + r.Newname = p.name() + r.Behavior = p.parseOptDropBehavior() + return nRenameStmt(r) + case ast.Token_VALUE_P: + return p.parseAlterEnumStmt(names) + } + case ast.Token_SET: + if p.kindN(1) == ast.Token('(') { + // gram.y: AlterTypeStmt: ALTER TYPE_P any_name SET '(' ... ')' + p.next() + p.next() + n := &ast.AlterTypeStmt{TypeName: names} + n.Options = p.parseOperatorDefList() + p.expect(ast.Token(')')) + return &ast.Node{Node: &ast.Node_AlterTypeStmt{AlterTypeStmt: n}} + } + } + if n := p.parseAlterGenericTail(ast.ObjectType_OBJECT_TYPE, nList(names), nil, false, + tailRename|tailSchema|tailOwner); n != nil { + return n } p.syntaxErrorAt() return nil } +// parseAlterEnumStmt is gram.y's AlterEnumStmt; ALTER TYPE_P any_name +// consumed, lookahead at ADD VALUE or RENAME VALUE. +func (p *parser) parseAlterEnumStmt(names []*ast.Node) *ast.Node { + n := &ast.AlterEnumStmt{TypeName: names} + if p.have(ast.Token_ADD_P) { + p.expect(ast.Token_VALUE_P) + if p.have(ast.Token_IF_P) { + p.expect(ast.Token_NOT) + p.expect(ast.Token_EXISTS) + n.SkipIfNewValExists = true + } + n.NewVal = p.sconst() + n.NewValIsAfter = true + switch { + case p.have(ast.Token_BEFORE): + n.NewValNeighbor = p.sconst() + n.NewValIsAfter = false + case p.have(ast.Token_AFTER): + n.NewValNeighbor = p.sconst() + } + return &ast.Node{Node: &ast.Node_AlterEnumStmt{AlterEnumStmt: n}} + } + p.expect(ast.Token_RENAME) + p.expect(ast.Token_VALUE_P) + n.OldVal = p.sconst() + p.expect(ast.Token_TO) + n.NewVal = p.sconst() + return &ast.Node{Node: &ast.Node_AlterEnumStmt{AlterEnumStmt: n}} +} + // parseAlterTypeCmd is gram.y's alter_type_cmd. func (p *parser) parseAlterTypeCmd() *ast.Node { switch p.kind() { diff --git a/internal/parse/ddl_dispatch.go b/internal/parse/ddl_dispatch.go index b8403c3..70af5b7 100644 --- a/internal/parse/ddl_dispatch.go +++ b/internal/parse/ddl_dispatch.go @@ -171,84 +171,6 @@ func (p *parser) parseOptTempAfterCreate() string { return relPersistPermanent } -// parseAlterDispatch routes a statement beginning with ALTER. The ALTER -// token is not yet consumed. -func (p *parser) parseAlterDispatch() *ast.Node { - p.expect(ast.Token_ALTER) - switch p.kind() { - case ast.Token_ROLE, ast.Token_USER: - if p.kindN(1) == ast.Token_MAPPING { - break // AlterUserMappingStmt (milestone 7) - } - p.next() - return p.parseAlterRoleStmt() - case ast.Token_GROUP_P: - p.next() - return p.parseAlterGroupStmt() - case ast.Token_TABLE: - p.next() - return p.parseAlterTableStmt(ast.ObjectType_OBJECT_TABLE, true, true) - case ast.Token_INDEX: - p.next() - return p.parseAlterTableStmt(ast.ObjectType_OBJECT_INDEX, false, true) - case ast.Token_VIEW: - p.next() - return p.parseAlterTableStmt(ast.ObjectType_OBJECT_VIEW, false, false) - case ast.Token_MATERIALIZED: - if p.kindN(1) == ast.Token_VIEW { - p.next() - p.next() - return p.parseAlterTableStmt(ast.ObjectType_OBJECT_MATVIEW, false, true) - } - case ast.Token_FOREIGN: - if p.kindN(1) == ast.Token_TABLE { - p.next() - p.next() - return p.parseAlterTableStmt(ast.ObjectType_OBJECT_FOREIGN_TABLE, true, false) - } - case ast.Token_SEQUENCE: - // AlterSeqStmt (SeqOptList) and AlterTableStmt (alter_table_cmds) - // share the prefix through the sequence name; the next token picks - // the production, exactly as the LALR tables do. - p.next() - missingOk := false - if p.have(ast.Token_IF_P) { - p.expect(ast.Token_EXISTS) - missingOk = true - } - rel := p.parseQualifiedName() - if p.seqOptElemStarts() { - n := &ast.AlterSeqStmt{Sequence: rel, MissingOk: missingOk} - n.Options = p.parseSeqOptList() - return &ast.Node{Node: &ast.Node_AlterSeqStmt{AlterSeqStmt: n}} - } - n := &ast.AlterTableStmt{ - Objtype: ast.ObjectType_OBJECT_SEQUENCE, - Relation: rel, - MissingOk: missingOk, - } - n.Cmds = p.parseAlterTableCmds() - return &ast.Node{Node: &ast.Node_AlterTableStmt{AlterTableStmt: n}} - case ast.Token_TYPE_P: - p.next() - return p.parseAlterTypeDispatch() - case ast.Token_FUNCTION, ast.Token_PROCEDURE, ast.Token_ROUTINE: - var objtype ast.ObjectType - switch p.next().Kind { - case ast.Token_FUNCTION: - objtype = ast.ObjectType_OBJECT_FUNCTION - case ast.Token_PROCEDURE: - objtype = ast.ObjectType_OBJECT_PROCEDURE - default: - objtype = ast.ObjectType_OBJECT_ROUTINE - } - fn := p.parseFunctionWithArgtypes().GetObjectWithArgs() - return p.parseAlterFunctionStmt(objtype, fn) - } - p.syntaxErrorAt() - return nil -} - // parseDropDispatch routes a statement beginning with DROP: DropStmt and // the specialized Drop*/Remove* productions. The DROP token is not yet // consumed. diff --git a/internal/parse/ddl_role.go b/internal/parse/ddl_role.go index e81bb74..136c1c5 100644 --- a/internal/parse/ddl_role.go +++ b/internal/parse/ddl_role.go @@ -224,24 +224,9 @@ func (p *parser) parseRoleElem(create bool) *ast.Node { return nil } -// parseAlterRoleStmt is gram.y's AlterRoleStmt and AlterRoleSetStmt; ALTER -// and ROLE/USER have been consumed. -func (p *parser) parseAlterRoleStmt() *ast.Node { - // AlterRoleSetStmt admits ALL where AlterRoleStmt needs a RoleSpec. - var role *ast.RoleSpec - if !p.have(ast.Token_ALL) { - role = p.parseRoleSpec() - } else { - // ALTER ROLE ALL only exists in the Set variant. - n := &ast.AlterRoleSetStmt{} - if p.have(ast.Token_IN_P) { - p.expect(ast.Token_DATABASE) - n.Database = p.name() - } - n.Setstmt = p.parseSetResetClause() - return &ast.Node{Node: &ast.Node_AlterRoleSetStmt{AlterRoleSetStmt: n}} - } - +// parseAlterRoleStmtRest is gram.y's AlterRoleStmt and AlterRoleSetStmt +// with ALTER ROLE/USER RoleSpec already consumed. +func (p *parser) parseAlterRoleStmtRest(role *ast.RoleSpec) *ast.Node { // IN DATABASE / SET / RESET pick AlterRoleSetStmt. switch p.kind() { case ast.Token_IN_P: @@ -262,11 +247,9 @@ func (p *parser) parseAlterRoleStmt() *ast.Node { return &ast.Node{Node: &ast.Node_AlterRoleStmt{AlterRoleStmt: n}} } -// parseAlterGroupStmt is gram.y's AlterGroupStmt; ALTER GROUP_P consumed. -func (p *parser) parseAlterGroupStmt() *ast.Node { - role := p.parseRoleSpec() - // ALTER GROUP RoleSpec RENAME TO ... is a RenameStmt; handled by the - // caller before dispatching here. +// parseAlterGroupStmtRest is gram.y's AlterGroupStmt with ALTER GROUP_P +// RoleSpec already consumed. +func (p *parser) parseAlterGroupStmtRest(role *ast.RoleSpec) *ast.Node { var action int32 switch p.kind() { case ast.Token_ADD_P: diff --git a/parser/testdata/deparse/postgres_regress/collate.icu.utf8.metadata.json b/parser/testdata/deparse/postgres_regress/collate.icu.utf8.metadata.json index ac3a9a6..90d2a91 100644 --- a/parser/testdata/deparse/postgres_regress/collate.icu.utf8.metadata.json +++ b/parser/testdata/deparse/postgres_regress/collate.icu.utf8.metadata.json @@ -186,7 +186,6 @@ "185", "186", "187", - "188", "189", "190", "191", diff --git a/parser/testdata/deparse/postgres_regress/collate.linux.utf8.metadata.json b/parser/testdata/deparse/postgres_regress/collate.linux.utf8.metadata.json index 83d100f..bee9810 100644 --- a/parser/testdata/deparse/postgres_regress/collate.linux.utf8.metadata.json +++ b/parser/testdata/deparse/postgres_regress/collate.linux.utf8.metadata.json @@ -179,7 +179,6 @@ "178", "179", "180", - "181", "182", "183", "184", diff --git a/parser/testdata/deparse/postgres_regress/collate.windows.win1252.metadata.json b/parser/testdata/deparse/postgres_regress/collate.windows.win1252.metadata.json index 24e4d39..fec01cc 100644 --- a/parser/testdata/deparse/postgres_regress/collate.windows.win1252.metadata.json +++ b/parser/testdata/deparse/postgres_regress/collate.windows.win1252.metadata.json @@ -150,7 +150,6 @@ "149", "150", "151", - "152", "153", "154", "155", diff --git a/parser/testdata/deparse/postgres_regress/triggers.metadata.json b/parser/testdata/deparse/postgres_regress/triggers.metadata.json index 35abd9b..4494352 100644 --- a/parser/testdata/deparse/postgres_regress/triggers.metadata.json +++ b/parser/testdata/deparse/postgres_regress/triggers.metadata.json @@ -140,7 +140,6 @@ "1039", "104", "1040", - "1041", "1042", "1043", "1044", diff --git a/parser/testdata/parse/postgres_regress/alter_generic.metadata.json b/parser/testdata/parse/postgres_regress/alter_generic.metadata.json index 07e4f73..d7a152f 100644 --- a/parser/testdata/parse/postgres_regress/alter_generic.metadata.json +++ b/parser/testdata/parse/postgres_regress/alter_generic.metadata.json @@ -3,49 +3,12 @@ "012", "017", "018", - "019", - "020", - "021", - "022", - "023", - "024", - "025", - "026", - "027", - "028", - "029", - "030", - "031", - "032", "036", "037", - "038", - "039", - "040", - "041", - "042", - "043", - "044", - "045", - "046", - "047", - "048", - "049", "053", "054", - "055", - "056", - "057", - "058", - "059", "061", "062", - "063", - "064", - "065", - "066", - "067", - "068", "071", "072", "073", @@ -56,61 +19,17 @@ "078", "081", "082", - "083", - "084", - "086", - "087", - "088", - "089", - "090", - "091", "095", "096", - "097", - "098", - "099", "101", - "102", - "103", - "104", "107", "108", - "109", - "110", "111", "112", - "113", - "114", - "116", - "117", - "118", - "119", - "120", - "121", - "122", - "123", - "124", - "125", "127", "128", - "129", - "130", "131", "132", - "133", - "134", - "136", - "137", - "138", - "139", - "140", - "141", - "142", - "143", - "144", - "145", - "146", - "147", "152", "153", "154", @@ -169,64 +88,23 @@ "245", "249", "250", - "251", - "252", - "253", - "254", - "255", "258", "259", - "260", - "261", - "262", - "263", - "264", - "265", "269", "270", - "271", - "272", - "273", - "274", - "275", "277", "278", - "279", - "280", - "281", - "282", - "283", - "284", "288", "289", - "290", - "291", - "292", - "293", - "294", "296", "297", - "298", - "299", - "300", - "301", - "302", - "303", "306", "307", - "308", - "309", - "310", "311", - "312", "313", "315", "316", - "317", - "318", - "319", "320", - "321", "322" ] } diff --git a/parser/testdata/parse/postgres_regress/alter_operator.metadata.json b/parser/testdata/parse/postgres_regress/alter_operator.metadata.json index 7eca36c..e553de6 100644 --- a/parser/testdata/parse/postgres_regress/alter_operator.metadata.json +++ b/parser/testdata/parse/postgres_regress/alter_operator.metadata.json @@ -1,37 +1,10 @@ { "todo": [ "003", - "005", - "006", - "009", - "010", - "013", - "016", - "019", - "020", - "021", - "024", "028", "029", "030", - "031", - "032", - "033", - "034", - "036", - "038", - "039", - "041", - "042", - "043", - "044", "046", - "047", - "048", - "049", - "050", - "051", - "052", - "053" + "047" ] } diff --git a/parser/testdata/parse/postgres_regress/alter_table.metadata.json b/parser/testdata/parse/postgres_regress/alter_table.metadata.json index 11ccac4..d5b97aa 100644 --- a/parser/testdata/parse/postgres_regress/alter_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/alter_table.metadata.json @@ -1,17 +1,5 @@ { "todo": [ - "070", - "073", - "081", - "082", - "083", - "084", - "086", - "087", - "088", - "089", - "096", - "103", "1042", "1043", "1045", @@ -21,28 +9,9 @@ "1049", "1050", "1051", - "1054", - "1055", - "1056", - "1057", - "1058", - "1059", - "106", - "1060", - "1061", - "1062", - "1063", - "1064", - "1065", - "1066", - "1067", - "1068", - "1069", - "107", "1077", "1078", "1079", - "108", "1080", "1081", "1082", @@ -52,7 +21,6 @@ "1086", "1087", "1088", - "109", "1090", "1092", "1096", @@ -65,7 +33,6 @@ "1107", "1108", "1109", - "111", "1112", "1114", "1115", @@ -75,13 +42,7 @@ "1123", "1124", "1142", - "1154", - "1155", - "1162", - "1163", - "118", "1189", - "119", "1190", "1191", "1192", @@ -89,40 +50,20 @@ "1194", "1203", "1204", - "1213", - "1214", - "1215", - "1216", - "1217", - "123", - "124", "1268", "1272", - "128", "1285", "1287", - "129", "1328", - "134", "1340", - "136", - "144", - "145", - "147", - "150", - "1504", "1505", "1527", - "154", "1554", "1581", "1586", - "159", - "160", "1600", "1605", "1606", - "161", "1611", "1612", "1616", @@ -130,30 +71,13 @@ "1619", "1622", "1629", - "163", "1633", - "164", "1648", - "1650", - "166", - "169", - "172", - "173", - "339", "368", "427", "432", "437", "532", - "608", - "609", - "686", - "687", - "688", - "689", - "690", - "691", - "692", "753", "764", "765", diff --git a/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json b/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json index 3ead977..8e2256d 100644 --- a/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json @@ -11,14 +11,6 @@ "167", "169", "170", - "172", - "173", - "174", - "175", - "176", - "177", - "186", - "188", "189", "191", "192", diff --git a/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json b/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json index 57b5143..830afcc 100644 --- a/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json @@ -10,14 +10,6 @@ "161", "162", "163", - "165", - "166", - "167", - "168", - "169", - "170", - "179", - "181", "182", "184", "185", diff --git a/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json b/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json index 0057118..06a580e 100644 --- a/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json @@ -10,14 +10,6 @@ "132", "133", "134", - "136", - "137", - "138", - "139", - "140", - "141", - "150", - "152", "153", "155", "156", diff --git a/parser/testdata/parse/postgres_regress/constraints.metadata.json b/parser/testdata/parse/postgres_regress/constraints.metadata.json index 62369fd..bc83604 100644 --- a/parser/testdata/parse/postgres_regress/constraints.metadata.json +++ b/parser/testdata/parse/postgres_regress/constraints.metadata.json @@ -1,7 +1,6 @@ { "todo": [ "295", - "314", - "315" + "314" ] } diff --git a/parser/testdata/parse/postgres_regress/create_aggregate.metadata.json b/parser/testdata/parse/postgres_regress/create_aggregate.metadata.json index 8c87b63..ca214b0 100644 --- a/parser/testdata/parse/postgres_regress/create_aggregate.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_aggregate.metadata.json @@ -16,8 +16,6 @@ "029", "030", "031", - "032", - "033", "034", "035", "036", diff --git a/parser/testdata/parse/postgres_regress/create_function_sql.metadata.json b/parser/testdata/parse/postgres_regress/create_function_sql.metadata.json index de71512..e65a4ab 100644 --- a/parser/testdata/parse/postgres_regress/create_function_sql.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_function_sql.metadata.json @@ -1,7 +1,5 @@ { "todo": [ - "003", - "036", - "037" + "003" ] } diff --git a/parser/testdata/parse/postgres_regress/create_misc.metadata.json b/parser/testdata/parse/postgres_regress/create_misc.metadata.json index acc318e..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/create_misc.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_misc.metadata.json @@ -1,12 +1,3 @@ { - "todo": [ - "071", - "072", - "073", - "074", - "075", - "076", - "078", - "080" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/create_procedure.metadata.json b/parser/testdata/parse/postgres_regress/create_procedure.metadata.json index 6eebd63..cb14203 100644 --- a/parser/testdata/parse/postgres_regress/create_procedure.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_procedure.metadata.json @@ -3,10 +3,6 @@ "051", "091", "092", - "096", - "100", - "101", - "102", - "103" + "096" ] } diff --git a/parser/testdata/parse/postgres_regress/create_role.metadata.json b/parser/testdata/parse/postgres_regress/create_role.metadata.json index a081fde..0190c20 100644 --- a/parser/testdata/parse/postgres_regress/create_role.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_role.metadata.json @@ -3,14 +3,10 @@ "003", "032", "046", - "051", - "054", "060", "071", "074", - "077", "080", - "081", "083", "108", "126" diff --git a/parser/testdata/parse/postgres_regress/create_type.metadata.json b/parser/testdata/parse/postgres_regress/create_type.metadata.json index f818b1b..6dd552a 100644 --- a/parser/testdata/parse/postgres_regress/create_type.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_type.metadata.json @@ -19,11 +19,7 @@ "043", "063", "068", - "073", "074", - "075", - "076", - "077", - "078" + "075" ] } diff --git a/parser/testdata/parse/postgres_regress/create_view.metadata.json b/parser/testdata/parse/postgres_regress/create_view.metadata.json index 6a7f889..e26600a 100644 --- a/parser/testdata/parse/postgres_regress/create_view.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_view.metadata.json @@ -2,18 +2,6 @@ "todo": [ "031", "039", - "117", - "118", - "119", - "120", - "121", - "122", - "123", - "124", - "126", - "127", - "158", - "188", "241", "244", "257", diff --git a/parser/testdata/parse/postgres_regress/database.metadata.json b/parser/testdata/parse/postgres_regress/database.metadata.json index 0da1d06..f23fe5c 100644 --- a/parser/testdata/parse/postgres_regress/database.metadata.json +++ b/parser/testdata/parse/postgres_regress/database.metadata.json @@ -1,11 +1,5 @@ { "todo": [ - "001", - "002", - "003", - "004", - "005", - "008", - "012" + "001" ] } diff --git a/parser/testdata/parse/postgres_regress/domain.metadata.json b/parser/testdata/parse/postgres_regress/domain.metadata.json index f66a687..7748b9d 100644 --- a/parser/testdata/parse/postgres_regress/domain.metadata.json +++ b/parser/testdata/parse/postgres_regress/domain.metadata.json @@ -16,37 +16,10 @@ "071", "072", "085", - "088", - "090", - "092", - "094", - "097", - "100", - "106", - "109", "113", - "117", - "118", - "119", - "123", - "126", - "127", "128", - "131", - "133", - "135", - "137", - "140", "144", - "147", - "148", - "149", - "151", "153", - "158", - "160", - "162", - "164", "172", "173", "174", @@ -55,33 +28,17 @@ "197", "212", "213", - "216", - "220", "222", - "225", "228", - "231", "234", - "237", - "240", "241", - "246", - "247", "254", "258", "263", "276", - "279", - "281", - "285", - "287", "292", "302", - "303", - "304", "306", - "307", - "308", "310", "311" ] diff --git a/parser/testdata/parse/postgres_regress/enum.metadata.json b/parser/testdata/parse/postgres_regress/enum.metadata.json index 872aac6..771e377 100644 --- a/parser/testdata/parse/postgres_regress/enum.metadata.json +++ b/parser/testdata/parse/postgres_regress/enum.metadata.json @@ -2,62 +2,11 @@ "todo": [ "001", "009", - "011", - "013", - "014", - "015", - "016", - "019", - "020", - "021", - "022", - "024", "026", - "027", - "028", - "029", - "030", - "031", - "032", - "033", - "034", - "035", - "036", - "037", - "038", - "039", - "040", - "041", - "042", - "043", - "044", - "045", - "046", - "047", - "048", - "049", - "050", - "051", - "052", - "053", - "054", - "055", - "056", "091", "122", - "125", - "127", - "128", "129", - "131", - "144", - "145", - "149", "154", - "155", - "159", - "160", - "161", - "162" + "159" ] } diff --git a/parser/testdata/parse/postgres_regress/errors.metadata.json b/parser/testdata/parse/postgres_regress/errors.metadata.json index c0c5863..0f945ee 100644 --- a/parser/testdata/parse/postgres_regress/errors.metadata.json +++ b/parser/testdata/parse/postgres_regress/errors.metadata.json @@ -1,13 +1,5 @@ { "todo": [ - "016", - "017", - "018", - "019", - "020", - "021", - "022", - "023", "026", "027", "078", diff --git a/parser/testdata/parse/postgres_regress/event_trigger.metadata.json b/parser/testdata/parse/postgres_regress/event_trigger.metadata.json index d9a6b7e..de6de98 100644 --- a/parser/testdata/parse/postgres_regress/event_trigger.metadata.json +++ b/parser/testdata/parse/postgres_regress/event_trigger.metadata.json @@ -15,21 +15,12 @@ "017", "018", "022", - "024", - "026", - "029", - "031", - "039", "042", "044", "046", "047", "048", "049", - "050", - "052", - "053", - "054", "074", "080", "082", @@ -56,7 +47,6 @@ "160", "162", "164", - "171", "212", "213", "214", diff --git a/parser/testdata/parse/postgres_regress/event_trigger_login.metadata.json b/parser/testdata/parse/postgres_regress/event_trigger_login.metadata.json index e774fcd..25bbae4 100644 --- a/parser/testdata/parse/postgres_regress/event_trigger_login.metadata.json +++ b/parser/testdata/parse/postgres_regress/event_trigger_login.metadata.json @@ -1,7 +1,6 @@ { "todo": [ "002", - "004", - "005" + "004" ] } diff --git a/parser/testdata/parse/postgres_regress/foreign_data.metadata.json b/parser/testdata/parse/postgres_regress/foreign_data.metadata.json index 411b18e..4a7125d 100644 --- a/parser/testdata/parse/postgres_regress/foreign_data.metadata.json +++ b/parser/testdata/parse/postgres_regress/foreign_data.metadata.json @@ -130,15 +130,8 @@ "264", "265", "274", - "288", - "290", - "291", - "292", "301", "302", - "311", - "312", - "313", "338", "346", "348", @@ -197,10 +190,6 @@ "443", "444", "459", - "468", - "469", - "470", - "471", "473", "474", "475", diff --git a/parser/testdata/parse/postgres_regress/inherit.metadata.json b/parser/testdata/parse/postgres_regress/inherit.metadata.json index d0a1ad6..eb3756d 100644 --- a/parser/testdata/parse/postgres_regress/inherit.metadata.json +++ b/parser/testdata/parse/postgres_regress/inherit.metadata.json @@ -4,13 +4,6 @@ "155", "160", "161", - "252", - "253", - "254", - "255", - "266", - "268", - "269", "453", "454", "465", diff --git a/parser/testdata/parse/postgres_regress/largeobject.metadata.json b/parser/testdata/parse/postgres_regress/largeobject.metadata.json index f7bda51..80e9b81 100644 --- a/parser/testdata/parse/postgres_regress/largeobject.metadata.json +++ b/parser/testdata/parse/postgres_regress/largeobject.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "004", "006" ] } diff --git a/parser/testdata/parse/postgres_regress/matview.metadata.json b/parser/testdata/parse/postgres_regress/matview.metadata.json index 1b69eca..1b29c27 100644 --- a/parser/testdata/parse/postgres_regress/matview.metadata.json +++ b/parser/testdata/parse/postgres_regress/matview.metadata.json @@ -1,7 +1,5 @@ { "todo": [ - "027", - "102", "157", "158", "167" diff --git a/parser/testdata/parse/postgres_regress/merge.metadata.json b/parser/testdata/parse/postgres_regress/merge.metadata.json index 6840a49..03f8736 100644 --- a/parser/testdata/parse/postgres_regress/merge.metadata.json +++ b/parser/testdata/parse/postgres_regress/merge.metadata.json @@ -19,8 +19,6 @@ "420", "426", "433", - "484", - "485", "502", "540" ] diff --git a/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json b/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json index ee582d2..0dab877 100644 --- a/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json +++ b/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json @@ -12,8 +12,6 @@ "529", "530", "537", - "539", - "540", "542", "543", "545", diff --git a/parser/testdata/parse/postgres_regress/namespace.metadata.json b/parser/testdata/parse/postgres_regress/namespace.metadata.json index b4696b2..595ab7b 100644 --- a/parser/testdata/parse/postgres_regress/namespace.metadata.json +++ b/parser/testdata/parse/postgres_regress/namespace.metadata.json @@ -3,7 +3,6 @@ "002", "006", "011", - "022", "026" ] } diff --git a/parser/testdata/parse/postgres_regress/password.metadata.json b/parser/testdata/parse/postgres_regress/password.metadata.json index 1c73217..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/password.metadata.json +++ b/parser/testdata/parse/postgres_regress/password.metadata.json @@ -1,6 +1,3 @@ { - "todo": [ - "014", - "016" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/privileges.metadata.json b/parser/testdata/parse/postgres_regress/privileges.metadata.json index e84468a..2f989d3 100644 --- a/parser/testdata/parse/postgres_regress/privileges.metadata.json +++ b/parser/testdata/parse/postgres_regress/privileges.metadata.json @@ -43,7 +43,6 @@ "133", "134", "135", - "137", "138", "139", "140", diff --git a/parser/testdata/parse/postgres_regress/psql.metadata.json b/parser/testdata/parse/postgres_regress/psql.metadata.json index c3a652d..281b3fb 100644 --- a/parser/testdata/parse/postgres_regress/psql.metadata.json +++ b/parser/testdata/parse/postgres_regress/psql.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "125", "127" ] } diff --git a/parser/testdata/parse/postgres_regress/publication.metadata.json b/parser/testdata/parse/postgres_regress/publication.metadata.json index 7cd667a..804b3d9 100644 --- a/parser/testdata/parse/postgres_regress/publication.metadata.json +++ b/parser/testdata/parse/postgres_regress/publication.metadata.json @@ -220,8 +220,6 @@ "511", "512", "513", - "515", - "516", "517", "518", "519", diff --git a/parser/testdata/parse/postgres_regress/rules.metadata.json b/parser/testdata/parse/postgres_regress/rules.metadata.json index a35652d..e55293c 100644 --- a/parser/testdata/parse/postgres_regress/rules.metadata.json +++ b/parser/testdata/parse/postgres_regress/rules.metadata.json @@ -56,16 +56,10 @@ "485", "486", "493", - "494", - "497", - "498", - "499", - "503", "514", "520", "524", "557", - "558", "562", "563", "564", diff --git a/parser/testdata/parse/postgres_regress/sequence.metadata.json b/parser/testdata/parse/postgres_regress/sequence.metadata.json index 06d0c57..c8845a9 100644 --- a/parser/testdata/parse/postgres_regress/sequence.metadata.json +++ b/parser/testdata/parse/postgres_regress/sequence.metadata.json @@ -1,7 +1,5 @@ { "todo": [ - "079", - "085", "171", "172", "178", diff --git a/parser/testdata/parse/postgres_regress/stats_ext.metadata.json b/parser/testdata/parse/postgres_regress/stats_ext.metadata.json index 2cd238b..4182c1a 100644 --- a/parser/testdata/parse/postgres_regress/stats_ext.metadata.json +++ b/parser/testdata/parse/postgres_regress/stats_ext.metadata.json @@ -22,7 +22,6 @@ "024", "025", "028", - "034", "037", "041", "044", @@ -30,10 +29,6 @@ "048", "049", "057", - "060", - "063", - "067", - "068", "072", "084", "094", diff --git a/parser/testdata/parse/postgres_regress/tablespace.metadata.json b/parser/testdata/parse/postgres_regress/tablespace.metadata.json index c2ef5b0..637af3f 100644 --- a/parser/testdata/parse/postgres_regress/tablespace.metadata.json +++ b/parser/testdata/parse/postgres_regress/tablespace.metadata.json @@ -4,10 +4,6 @@ "002", "004", "005", - "009", - "010", - "011", - "012", "120", "122", "125", @@ -20,8 +16,6 @@ "174", "180", "184", - "185", - "191", - "195" + "191" ] } diff --git a/parser/testdata/parse/postgres_regress/triggers.metadata.json b/parser/testdata/parse/postgres_regress/triggers.metadata.json index 8d5c0aa..5cc5ae0 100644 --- a/parser/testdata/parse/postgres_regress/triggers.metadata.json +++ b/parser/testdata/parse/postgres_regress/triggers.metadata.json @@ -16,17 +16,11 @@ "1014", "1024", "1038", - "1039", - "1041", - "1042", "1043", - "1044", "1045", "1046", - "1047", "1052", "1053", - "1054", "123", "124", "125", @@ -37,7 +31,6 @@ "137", "138", "139", - "149", "160", "164", "165", diff --git a/parser/testdata/parse/postgres_regress/tsdicts.metadata.json b/parser/testdata/parse/postgres_regress/tsdicts.metadata.json index ee0ac9c..7813aa7 100644 --- a/parser/testdata/parse/postgres_regress/tsdicts.metadata.json +++ b/parser/testdata/parse/postgres_regress/tsdicts.metadata.json @@ -11,9 +11,6 @@ "074", "075", "076", - "081", - "084", - "085", "088", "090", "091", diff --git a/parser/testdata/parse/postgres_regress/typed_table.metadata.json b/parser/testdata/parse/postgres_regress/typed_table.metadata.json index 5bfc0c8..4543e75 100644 --- a/parser/testdata/parse/postgres_regress/typed_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/typed_table.metadata.json @@ -1,7 +1,6 @@ { "todo": [ "002", - "010", "011", "022" ] From d8627aee6738c1e9d8b24bba03d9ce080f11a5eb Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 16 Aug 2026 19:29:33 +0000 Subject: [PATCH 09/24] Milestone 7: CREATE DOMAIN/DATABASE/EXTENSION, ALTER EXTENSION Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01J19Kf5LpGUhi2vxFJjzQJE --- internal/parse/ddl_alter_generic.go | 4 + internal/parse/ddl_dispatch.go | 9 ++ internal/parse/ddl_extension.go | 152 ++++++++++++++++++ .../deparse/comment_multiline.metadata.json | 4 +- .../alter_table.metadata.json | 3 - .../parse/postgres_regress/case.metadata.json | 2 - .../collate.icu.utf8.metadata.json | 6 - .../collate.linux.utf8.metadata.json | 4 - .../postgres_regress/collate.metadata.json | 3 - .../collate.windows.win1252.metadata.json | 4 - .../constraints.metadata.json | 5 +- .../create_role.metadata.json | 1 - .../create_table.metadata.json | 2 - .../create_type.metadata.json | 3 +- .../postgres_regress/database.metadata.json | 4 +- .../postgres_regress/domain.metadata.json | 41 +---- .../drop_if_exists.metadata.json | 1 - .../parse/postgres_regress/enum.metadata.json | 1 - .../fast_default.metadata.json | 4 - .../postgres_regress/insert.metadata.json | 4 - .../parse/postgres_regress/json.metadata.json | 4 - .../postgres_regress/jsonb.metadata.json | 6 - .../multirangetypes.metadata.json | 2 - .../object_address.metadata.json | 1 - .../postgres_regress/plpgsql.metadata.json | 3 - .../postgres_regress/rangetypes.metadata.json | 2 - .../security_label.metadata.json | 4 +- .../postgres_regress/spgist.metadata.json | 4 +- .../postgres_regress/sqljson.metadata.json | 3 +- .../sqljson_jsontable.metadata.json | 5 +- .../sqljson_queryfuncs.metadata.json | 10 +- .../parse/postgres_regress/temp.metadata.json | 1 - .../postgres_regress/xmlmap.metadata.json | 6 +- 33 files changed, 176 insertions(+), 132 deletions(-) create mode 100644 internal/parse/ddl_extension.go diff --git a/internal/parse/ddl_alter_generic.go b/internal/parse/ddl_alter_generic.go index 3f335b0..857307b 100644 --- a/internal/parse/ddl_alter_generic.go +++ b/internal/parse/ddl_alter_generic.go @@ -250,6 +250,10 @@ func (p *parser) parseAlterDispatch() *ast.Node { } p.syntaxErrorAt() + case ast.Token_EXTENSION: + p.next() + return p.parseAlterExtensionStmt() + case ast.Token_FUNCTION, ast.Token_PROCEDURE, ast.Token_ROUTINE: var objtype ast.ObjectType switch p.next().Kind { diff --git a/internal/parse/ddl_dispatch.go b/internal/parse/ddl_dispatch.go index 70af5b7..2d31207 100644 --- a/internal/parse/ddl_dispatch.go +++ b/internal/parse/ddl_dispatch.go @@ -30,6 +30,15 @@ func (p *parser) parseCreateDispatch() *ast.Node { return p.parseCreateCastStmt() case ast.Token_FUNCTION, ast.Token_PROCEDURE: return p.parseCreateFunctionStmt(false) + case ast.Token_DOMAIN_P: + p.next() + return p.parseCreateDomainStmt() + case ast.Token_DATABASE: + p.next() + return p.parseCreatedbStmt() + case ast.Token_EXTENSION: + p.next() + return p.parseCreateExtensionStmt() } if stmt := p.parseCreateStmtFamily(false); stmt != nil { return stmt diff --git a/internal/parse/ddl_extension.go b/internal/parse/ddl_extension.go new file mode 100644 index 0000000..f6a2105 --- /dev/null +++ b/internal/parse/ddl_extension.go @@ -0,0 +1,152 @@ +package parse + +// CreateDomainStmt, CreatedbStmt, and the extension DDL: +// CreateExtensionStmt, AlterExtensionStmt, AlterExtensionContentsStmt. + +import ( + "github.com/sqlc-dev/oliphant/ast" +) + +// parseCreateDomainStmt is gram.y's CreateDomainStmt; CREATE DOMAIN_P +// consumed. +func (p *parser) parseCreateDomainStmt() *ast.Node { + n := &ast.CreateDomainStmt{Domainname: p.anyName()} + p.have(ast.Token_AS) + n.TypeName = p.parseTypename() + n.Constraints, n.CollClause = p.parseColQualList() + return &ast.Node{Node: &ast.Node_CreateDomainStmt{CreateDomainStmt: n}} +} + +// parseCreatedbStmt is gram.y's CreatedbStmt; CREATE DATABASE consumed. +func (p *parser) parseCreatedbStmt() *ast.Node { + n := &ast.CreatedbStmt{Dbname: p.name()} + p.parseOptWith() + n.Options = p.parseCreatedbOptItems() + return &ast.Node{Node: &ast.Node_CreatedbStmt{CreatedbStmt: n}} +} + +// parseCreateExtensionStmt is gram.y's CreateExtensionStmt; CREATE +// EXTENSION consumed. +func (p *parser) parseCreateExtensionStmt() *ast.Node { + n := &ast.CreateExtensionStmt{} + if p.have(ast.Token_IF_P) { + p.expect(ast.Token_NOT) + p.expect(ast.Token_EXISTS) + n.IfNotExists = true + } + n.Extname = p.name() + p.parseOptWith() + // create_extension_opt_list + for { + tok := p.peek() + switch tok.Kind { + case ast.Token_SCHEMA: + p.next() + n.Options = append(n.Options, makeDefElem("schema", nStr(p.name()), tok.Start)) + case ast.Token_VERSION_P: + p.next() + n.Options = append(n.Options, makeDefElem("new_version", nStr(p.nonReservedWordOrSconst()), tok.Start)) + case ast.Token_FROM: + p.next() + p.nonReservedWordOrSconst() + p.ereport("base_yyparse", "CREATE EXTENSION ... FROM is no longer supported", tok.Start) + case ast.Token_CASCADE: + p.next() + n.Options = append(n.Options, makeDefElem("cascade", nBoolean(true), tok.Start)) + default: + return &ast.Node{Node: &ast.Node_CreateExtensionStmt{CreateExtensionStmt: n}} + } + } +} + +// parseAlterExtensionStmt handles ALTER EXTENSION name ... : the UPDATE +// form (AlterExtensionStmt), ADD/DROP members (AlterExtensionContentsStmt), +// and SET SCHEMA (generic). ALTER EXTENSION is consumed. +func (p *parser) parseAlterExtensionStmt() *ast.Node { + name := p.name() + switch p.kind() { + case ast.Token_UPDATE: + p.next() + n := &ast.AlterExtensionStmt{Extname: name} + for p.kind() == ast.Token_TO { + ttok := p.next() + n.Options = append(n.Options, makeDefElem("new_version", nStr(p.nonReservedWordOrSconst()), ttok.Start)) + } + return &ast.Node{Node: &ast.Node_AlterExtensionStmt{AlterExtensionStmt: n}} + case ast.Token_ADD_P, ast.Token_DROP: + n := &ast.AlterExtensionContentsStmt{Extname: name, Action: 1} + if p.next().Kind == ast.Token_DROP { + n.Action = -1 + } + n.Objtype, n.Object = p.parseExtensionMemberObject() + return &ast.Node{Node: &ast.Node_AlterExtensionContentsStmt{AlterExtensionContentsStmt: n}} + } + if n := p.parseAlterGenericTail(ast.ObjectType_OBJECT_EXTENSION, nStr(name), nil, false, + tailSchema); n != nil { + return n + } + p.syntaxErrorAt() + return nil +} + +// parseExtensionMemberObject parses the object reference of +// AlterExtensionContentsStmt. +func (p *parser) parseExtensionMemberObject() (ast.ObjectType, *ast.Node) { + switch p.kind() { + case ast.Token_AGGREGATE: + p.next() + return ast.ObjectType_OBJECT_AGGREGATE, p.parseAggregateWithArgtypes() + case ast.Token_CAST: + p.next() + p.expect(ast.Token('(')) + from := p.parseTypename() + p.expect(ast.Token_AS) + to := p.parseTypename() + p.expect(ast.Token(')')) + return ast.ObjectType_OBJECT_CAST, + nList([]*ast.Node{nTypeName(from), nTypeName(to)}) + case ast.Token_DOMAIN_P: + p.next() + return ast.ObjectType_OBJECT_DOMAIN, nTypeName(p.parseTypename()) + case ast.Token_FUNCTION: + p.next() + return ast.ObjectType_OBJECT_FUNCTION, p.parseFunctionWithArgtypes() + case ast.Token_PROCEDURE: + p.next() + return ast.ObjectType_OBJECT_PROCEDURE, p.parseFunctionWithArgtypes() + case ast.Token_ROUTINE: + p.next() + return ast.ObjectType_OBJECT_ROUTINE, p.parseFunctionWithArgtypes() + case ast.Token_OPERATOR: + p.next() + switch p.kind() { + case ast.Token_CLASS, ast.Token_FAMILY: + objtype := ast.ObjectType_OBJECT_OPCLASS + if p.next().Kind == ast.Token_FAMILY { + objtype = ast.ObjectType_OBJECT_OPFAMILY + } + names := p.anyName() + p.expect(ast.Token_USING) + return objtype, nList(append([]*ast.Node{nStr(p.name())}, names...)) + } + return ast.ObjectType_OBJECT_OPERATOR, p.parseOperatorWithArgtypes() + case ast.Token_TRANSFORM: + p.next() + p.expect(ast.Token_FOR) + t := p.parseTypename() + p.expect(ast.Token_LANGUAGE) + return ast.ObjectType_OBJECT_TRANSFORM, + nList([]*ast.Node{nTypeName(t), nStr(p.name())}) + case ast.Token_TYPE_P: + p.next() + return ast.ObjectType_OBJECT_TYPE, nTypeName(p.parseTypename()) + } + if t, ok := p.tryObjectTypeAnyName(); ok { + return t, nList(p.anyName()) + } + if t, ok := p.tryObjectTypeName(); ok { + return t, nStr(p.name()) + } + p.syntaxErrorAt() + return 0, nil +} diff --git a/parser/testdata/parse/deparse/comment_multiline.metadata.json b/parser/testdata/parse/deparse/comment_multiline.metadata.json index f23fe5c..737fd31 100644 --- a/parser/testdata/parse/deparse/comment_multiline.metadata.json +++ b/parser/testdata/parse/deparse/comment_multiline.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "001" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/alter_table.metadata.json b/parser/testdata/parse/postgres_regress/alter_table.metadata.json index d5b97aa..90df5f3 100644 --- a/parser/testdata/parse/postgres_regress/alter_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/alter_table.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "1042", "1043", "1045", "1046", @@ -78,7 +77,6 @@ "432", "437", "532", - "753", "764", "765", "770", @@ -98,7 +96,6 @@ "821", "831", "847", - "854", "859", "873", "880", diff --git a/parser/testdata/parse/postgres_regress/case.metadata.json b/parser/testdata/parse/postgres_regress/case.metadata.json index a8dfb08..f5529c8 100644 --- a/parser/testdata/parse/postgres_regress/case.metadata.json +++ b/parser/testdata/parse/postgres_regress/case.metadata.json @@ -1,8 +1,6 @@ { "todo": [ - "045", "048", - "052", "055", "060" ] diff --git a/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json b/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json index 8e2256d..f840f77 100644 --- a/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json @@ -1,8 +1,5 @@ { "todo": [ - "023", - "024", - "089", "156", "160", "162", @@ -12,7 +9,6 @@ "169", "170", "189", - "191", "192", "200", "201", @@ -33,8 +29,6 @@ "253", "255", "366", - "486", - "487", "501" ] } diff --git a/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json b/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json index 830afcc..19cd32d 100644 --- a/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json @@ -1,8 +1,5 @@ { "todo": [ - "023", - "024", - "097", "156", "157", "158", @@ -11,7 +8,6 @@ "162", "163", "182", - "184", "185", "193", "194", diff --git a/parser/testdata/parse/postgres_regress/collate.metadata.json b/parser/testdata/parse/postgres_regress/collate.metadata.json index a908d95..497f22d 100644 --- a/parser/testdata/parse/postgres_regress/collate.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.metadata.json @@ -1,8 +1,5 @@ { "todo": [ - "013", - "014", - "048", "115", "117", "118", diff --git a/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json b/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json index 06a580e..d293032 100644 --- a/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json @@ -1,8 +1,5 @@ { "todo": [ - "023", - "024", - "072", "127", "128", "129", @@ -11,7 +8,6 @@ "133", "134", "153", - "155", "156", "164", "165", diff --git a/parser/testdata/parse/postgres_regress/constraints.metadata.json b/parser/testdata/parse/postgres_regress/constraints.metadata.json index bc83604..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/constraints.metadata.json +++ b/parser/testdata/parse/postgres_regress/constraints.metadata.json @@ -1,6 +1,3 @@ { - "todo": [ - "295", - "314" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/create_role.metadata.json b/parser/testdata/parse/postgres_regress/create_role.metadata.json index 0190c20..dbbcdb1 100644 --- a/parser/testdata/parse/postgres_regress/create_role.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_role.metadata.json @@ -2,7 +2,6 @@ "todo": [ "003", "032", - "046", "060", "071", "074", diff --git a/parser/testdata/parse/postgres_regress/create_table.metadata.json b/parser/testdata/parse/postgres_regress/create_table.metadata.json index 5194e5d..983491d 100644 --- a/parser/testdata/parse/postgres_regress/create_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_table.metadata.json @@ -4,8 +4,6 @@ "032", "058", "076", - "108", - "114", "267", "298" ] diff --git a/parser/testdata/parse/postgres_regress/create_type.metadata.json b/parser/testdata/parse/postgres_regress/create_type.metadata.json index 6dd552a..934ba95 100644 --- a/parser/testdata/parse/postgres_regress/create_type.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_type.metadata.json @@ -19,7 +19,6 @@ "043", "063", "068", - "074", - "075" + "074" ] } diff --git a/parser/testdata/parse/postgres_regress/database.metadata.json b/parser/testdata/parse/postgres_regress/database.metadata.json index f23fe5c..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/database.metadata.json +++ b/parser/testdata/parse/postgres_regress/database.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "001" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/domain.metadata.json b/parser/testdata/parse/postgres_regress/domain.metadata.json index 7748b9d..219ec43 100644 --- a/parser/testdata/parse/postgres_regress/domain.metadata.json +++ b/parser/testdata/parse/postgres_regress/domain.metadata.json @@ -1,45 +1,6 @@ { "todo": [ - "001", - "003", - "007", - "008", - "009", - "010", - "028", - "029", - "040", - "041", - "067", - "068", - "069", - "071", - "072", - "085", - "113", - "128", - "144", - "153", - "172", - "173", - "174", - "190", - "195", - "197", - "212", "213", - "222", - "228", - "234", - "241", - "254", - "258", - "263", - "276", - "292", - "302", - "306", - "310", - "311" + "234" ] } diff --git a/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json b/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json index dc1c7a2..178050a 100644 --- a/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json +++ b/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json @@ -1,7 +1,6 @@ { "todo": [ "026", - "031", "049", "055", "061", diff --git a/parser/testdata/parse/postgres_regress/enum.metadata.json b/parser/testdata/parse/postgres_regress/enum.metadata.json index 771e377..54ffa9d 100644 --- a/parser/testdata/parse/postgres_regress/enum.metadata.json +++ b/parser/testdata/parse/postgres_regress/enum.metadata.json @@ -3,7 +3,6 @@ "001", "009", "026", - "091", "122", "129", "154", diff --git a/parser/testdata/parse/postgres_regress/fast_default.metadata.json b/parser/testdata/parse/postgres_regress/fast_default.metadata.json index e9322ba..125ee5f 100644 --- a/parser/testdata/parse/postgres_regress/fast_default.metadata.json +++ b/parser/testdata/parse/postgres_regress/fast_default.metadata.json @@ -1,10 +1,6 @@ { "todo": [ "009", - "067", - "068", - "069", - "070", "144", "153", "162", diff --git a/parser/testdata/parse/postgres_regress/insert.metadata.json b/parser/testdata/parse/postgres_regress/insert.metadata.json index 68b08b5..c9e0f57 100644 --- a/parser/testdata/parse/postgres_regress/insert.metadata.json +++ b/parser/testdata/parse/postgres_regress/insert.metadata.json @@ -4,13 +4,9 @@ "044", "045", "046", - "049", - "050", "076", "077", "078", - "084", - "085", "216", "243", "289", diff --git a/parser/testdata/parse/postgres_regress/json.metadata.json b/parser/testdata/parse/postgres_regress/json.metadata.json index f17800b..5abd4e2 100644 --- a/parser/testdata/parse/postgres_regress/json.metadata.json +++ b/parser/testdata/parse/postgres_regress/json.metadata.json @@ -1,11 +1,7 @@ { "todo": [ "212", - "213", - "214", - "215", "216", - "217", "218", "219", "312" diff --git a/parser/testdata/parse/postgres_regress/jsonb.metadata.json b/parser/testdata/parse/postgres_regress/jsonb.metadata.json index d329f80..f525d59 100644 --- a/parser/testdata/parse/postgres_regress/jsonb.metadata.json +++ b/parser/testdata/parse/postgres_regress/jsonb.metadata.json @@ -1,18 +1,12 @@ { "todo": [ "353", - "354", - "355", - "356", "357", - "358", "359", "360", "441", "446", "447", - "456", - "457", "458", "459" ] diff --git a/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json b/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json index 0dab877..d9a7498 100644 --- a/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json +++ b/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json @@ -1,8 +1,6 @@ { "todo": [ - "511", "512", - "515", "519", "522", "523", diff --git a/parser/testdata/parse/postgres_regress/object_address.metadata.json b/parser/testdata/parse/postgres_regress/object_address.metadata.json index 2d55967..be083b9 100644 --- a/parser/testdata/parse/postgres_regress/object_address.metadata.json +++ b/parser/testdata/parse/postgres_regress/object_address.metadata.json @@ -10,7 +10,6 @@ "018", "019", "020", - "021", "023", "024", "026", diff --git a/parser/testdata/parse/postgres_regress/plpgsql.metadata.json b/parser/testdata/parse/postgres_regress/plpgsql.metadata.json index 7bd3f7a..34009da 100644 --- a/parser/testdata/parse/postgres_regress/plpgsql.metadata.json +++ b/parser/testdata/parse/postgres_regress/plpgsql.metadata.json @@ -42,9 +42,6 @@ "563", "599", "802", - "818", - "867", - "871", "876", "877", "881", diff --git a/parser/testdata/parse/postgres_regress/rangetypes.metadata.json b/parser/testdata/parse/postgres_regress/rangetypes.metadata.json index f9cfda3..7448ea1 100644 --- a/parser/testdata/parse/postgres_regress/rangetypes.metadata.json +++ b/parser/testdata/parse/postgres_regress/rangetypes.metadata.json @@ -1,9 +1,7 @@ { "todo": [ "317", - "323", "324", - "328", "332", "333", "361", diff --git a/parser/testdata/parse/postgres_regress/security_label.metadata.json b/parser/testdata/parse/postgres_regress/security_label.metadata.json index 4d49589..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/security_label.metadata.json +++ b/parser/testdata/parse/postgres_regress/security_label.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "011" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/spgist.metadata.json b/parser/testdata/parse/postgres_regress/spgist.metadata.json index 3b2ed2e..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/spgist.metadata.json +++ b/parser/testdata/parse/postgres_regress/spgist.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "023" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/sqljson.metadata.json b/parser/testdata/parse/postgres_regress/sqljson.metadata.json index e9a9b45..39ac5e6 100644 --- a/parser/testdata/parse/postgres_regress/sqljson.metadata.json +++ b/parser/testdata/parse/postgres_regress/sqljson.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "103", - "208" + "103" ] } diff --git a/parser/testdata/parse/postgres_regress/sqljson_jsontable.metadata.json b/parser/testdata/parse/postgres_regress/sqljson_jsontable.metadata.json index e38eb1f..e9cea49 100644 --- a/parser/testdata/parse/postgres_regress/sqljson_jsontable.metadata.json +++ b/parser/testdata/parse/postgres_regress/sqljson_jsontable.metadata.json @@ -1,8 +1,5 @@ { "todo": [ - "010", - "016", - "066", - "067" + "010" ] } diff --git a/parser/testdata/parse/postgres_regress/sqljson_queryfuncs.metadata.json b/parser/testdata/parse/postgres_regress/sqljson_queryfuncs.metadata.json index 4f7d756..b214c39 100644 --- a/parser/testdata/parse/postgres_regress/sqljson_queryfuncs.metadata.json +++ b/parser/testdata/parse/postgres_regress/sqljson_queryfuncs.metadata.json @@ -1,16 +1,8 @@ { "todo": [ - "055", "061", - "062", - "131", - "132", "176", "181", - "182", - "257", - "291", - "292", - "302" + "182" ] } diff --git a/parser/testdata/parse/postgres_regress/temp.metadata.json b/parser/testdata/parse/postgres_regress/temp.metadata.json index 8246015..33ee0b6 100644 --- a/parser/testdata/parse/postgres_regress/temp.metadata.json +++ b/parser/testdata/parse/postgres_regress/temp.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "084", "135", "138" ] diff --git a/parser/testdata/parse/postgres_regress/xmlmap.metadata.json b/parser/testdata/parse/postgres_regress/xmlmap.metadata.json index 6db3769..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/xmlmap.metadata.json +++ b/parser/testdata/parse/postgres_regress/xmlmap.metadata.json @@ -1,7 +1,3 @@ { - "todo": [ - "004", - "036", - "037" - ] + "todo": [] } From 0ea34c333a5d2e70dd403dbea14516f808b35c32 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 16 Aug 2026 19:30:56 +0000 Subject: [PATCH 10/24] Milestone 7: CREATE [CONSTRAINT] TRIGGER, CREATE EVENT TRIGGER, CREATE ASSERTION Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01J19Kf5LpGUhi2vxFJjzQJE --- internal/parse/ddl_dispatch.go | 23 +- internal/parse/ddl_trigger.go | 214 +++++++++++++++++ .../postgres_regress/copy2.metadata.json | 4 +- .../event_trigger.metadata.json | 1 - .../postgres_regress/triggers.metadata.json | 2 - .../deparse/ddl_create_trigger.metadata.json | 4 +- .../alter_table.metadata.json | 5 +- .../parse/postgres_regress/copy.metadata.json | 5 +- .../postgres_regress/copy2.metadata.json | 4 +- .../postgres_regress/copydml.metadata.json | 4 +- .../create_table.metadata.json | 3 +- .../drop_if_exists.metadata.json | 1 - .../event_trigger.metadata.json | 29 --- .../event_trigger_login.metadata.json | 3 +- .../fast_default.metadata.json | 9 - .../foreign_data.metadata.json | 6 - .../foreign_key.metadata.json | 6 - .../indirect_toast.metadata.json | 4 +- .../postgres_regress/inherit.metadata.json | 1 - .../postgres_regress/insert.metadata.json | 7 +- .../insert_conflict.metadata.json | 4 +- .../postgres_regress/merge.metadata.json | 16 -- .../object_address.metadata.json | 1 - .../postgres_regress/plpgsql.metadata.json | 51 +---- .../postgres_regress/rangefuncs.metadata.json | 1 - .../postgres_regress/triggers.metadata.json | 215 +----------------- .../postgres_regress/truncate.metadata.json | 5 +- .../postgres_regress/tsearch.metadata.json | 4 +- .../updatable_views.metadata.json | 8 - .../postgres_regress/update.metadata.json | 21 -- .../parse/postgres_regress/with.metadata.json | 3 - 31 files changed, 245 insertions(+), 419 deletions(-) create mode 100644 internal/parse/ddl_trigger.go diff --git a/internal/parse/ddl_dispatch.go b/internal/parse/ddl_dispatch.go index 2d31207..6ce11f0 100644 --- a/internal/parse/ddl_dispatch.go +++ b/internal/parse/ddl_dispatch.go @@ -39,6 +39,22 @@ func (p *parser) parseCreateDispatch() *ast.Node { case ast.Token_EXTENSION: p.next() return p.parseCreateExtensionStmt() + case ast.Token_EVENT: + if p.kindN(1) == ast.Token_TRIGGER { + p.next() + p.next() + return p.parseCreateEventTrigStmt() + } + case ast.Token_ASSERTION: + // gram.y: CreateAssertionStmt always errors (no position). + p.next() + p.anyName() + p.expect(ast.Token_CHECK) + p.expect(ast.Token('(')) + p.parseAExpr(0) + p.expect(ast.Token(')')) + p.parseConstraintAttributeSpec() + p.ereport("base_yyparse", "CREATE ASSERTION is not yet implemented", -1) } if stmt := p.parseCreateStmtFamily(false); stmt != nil { return stmt @@ -401,13 +417,6 @@ const ( relPersistUnlogged = "u" ) -// Stubs for productions landing later in milestones 6-7; each fails with -// the syntax error the dispatcher would otherwise have raised. -func (p *parser) parseCreateTrigStmt(orReplace, isConstraint bool) *ast.Node { - p.syntaxErrorAt() - return nil -} - func (p *parser) parseGrantStmt() *ast.Node { p.syntaxErrorAt() return nil diff --git a/internal/parse/ddl_trigger.go b/internal/parse/ddl_trigger.go new file mode 100644 index 0000000..b4c966c --- /dev/null +++ b/internal/parse/ddl_trigger.go @@ -0,0 +1,214 @@ +package parse + +// CreateTrigStmt (CREATE [CONSTRAINT] TRIGGER) and CreateEventTrigStmt. + +import ( + "strconv" + + "github.com/sqlc-dev/oliphant/ast" +) + +// Trigger type bits from trigger.h. +const ( + triggerTypeRow = 1 << 0 + triggerTypeBefore = 1 << 1 + triggerTypeInsert = 1 << 2 + triggerTypeDelete = 1 << 3 + triggerTypeUpdate = 1 << 4 + triggerTypeTruncate = 1 << 5 + triggerTypeInstead = 1 << 6 + triggerTypeAfter = 0 +) + +// parseCreateTrigStmt is gram.y's CreateTrigStmt. CREATE [OR REPLACE] +// [CONSTRAINT] is consumed; TRIGGER is the lookahead. +func (p *parser) parseCreateTrigStmt(replace, isConstraint bool) *ast.Node { + p.expect(ast.Token_TRIGGER) + n := &ast.CreateTrigStmt{Replace: replace, Isconstraint: isConstraint} + n.Trigname = p.name() + + if isConstraint { + if replace { + // gram.y: not supported, see CreateTrigger (no error position). + p.ereport("base_yyparse", "CREATE OR REPLACE CONSTRAINT TRIGGER is not supported", -1) + } + p.expect(ast.Token_AFTER) + n.Timing = triggerTypeAfter + n.Events, n.Columns = p.parseTriggerEvents() + p.expect(ast.Token_ON) + n.Relation = p.parseQualifiedName() + if p.have(ast.Token_FROM) { + n.Constrrel = p.parseQualifiedName() + } + cas, casLoc := p.parseConstraintAttributeSpec() + p.processCASbits(cas, casLoc, "TRIGGER", &n.Deferrable, &n.Initdeferred, nil, nil) + p.expect(ast.Token_FOR) + p.have(ast.Token_EACH) + p.expect(ast.Token_ROW) + n.Row = true + if p.have(ast.Token_WHEN) { + p.expect(ast.Token('(')) + n.WhenClause = p.parseAExpr(0) + p.expect(ast.Token(')')) + } + } else { + // TriggerActionTime + switch { + case p.have(ast.Token_BEFORE): + n.Timing = triggerTypeBefore + case p.have(ast.Token_AFTER): + n.Timing = triggerTypeAfter + case p.have(ast.Token_INSTEAD): + p.expect(ast.Token_OF) + n.Timing = triggerTypeInstead + default: + p.syntaxErrorAt() + } + n.Events, n.Columns = p.parseTriggerEvents() + p.expect(ast.Token_ON) + n.Relation = p.parseQualifiedName() + // TriggerReferencing + if p.have(ast.Token_REFERENCING) { + for { + t := &ast.TriggerTransition{} + switch { + case p.have(ast.Token_NEW): + t.IsNew = true + case p.have(ast.Token_OLD): + default: + p.syntaxErrorAt() + } + switch { + case p.have(ast.Token_TABLE): + t.IsTable = true + case p.have(ast.Token_ROW): + default: + p.syntaxErrorAt() + } + p.have(ast.Token_AS) + t.Name = p.colId() + n.TransitionRels = append(n.TransitionRels, + &ast.Node{Node: &ast.Node_TriggerTransition{TriggerTransition: t}}) + if p.kind() != ast.Token_NEW && p.kind() != ast.Token_OLD { + break + } + } + } + // TriggerForSpec + if p.have(ast.Token_FOR) { + p.have(ast.Token_EACH) + switch { + case p.have(ast.Token_ROW): + n.Row = true + case p.have(ast.Token_STATEMENT): + default: + p.syntaxErrorAt() + } + } + if p.have(ast.Token_WHEN) { + p.expect(ast.Token('(')) + n.WhenClause = p.parseAExpr(0) + p.expect(ast.Token(')')) + } + } + + p.expect(ast.Token_EXECUTE) + p.parseFunctionOrProcedure() + n.Funcname = p.parseFuncName(p.peek()) + p.expect(ast.Token('(')) + // TriggerFuncArgs + if p.kind() != ast.Token(')') { + n.Args = append(n.Args, p.parseTriggerFuncArg()) + for p.have(ast.Token(',')) { + n.Args = append(n.Args, p.parseTriggerFuncArg()) + } + } + p.expect(ast.Token(')')) + return &ast.Node{Node: &ast.Node_CreateTrigStmt{CreateTrigStmt: n}} +} + +// parseFunctionOrProcedure is gram.y's FUNCTION_or_PROCEDURE. +func (p *parser) parseFunctionOrProcedure() { + if !p.have(ast.Token_FUNCTION) && !p.have(ast.Token_PROCEDURE) { + p.syntaxErrorAt() + } +} + +// parseTriggerEvents is gram.y's TriggerEvents/TriggerOneEvent. +func (p *parser) parseTriggerEvents() (int32, []*ast.Node) { + events, columns := p.parseTriggerOneEvent() + for p.have(ast.Token_OR) { + ev2, cols2 := p.parseTriggerOneEvent() + if events&ev2 != 0 { + p.parserYyerror("duplicate trigger events specified") + } + events |= ev2 + columns = append(columns, cols2...) + } + return events, columns +} + +// parseTriggerOneEvent is gram.y's TriggerOneEvent. +func (p *parser) parseTriggerOneEvent() (int32, []*ast.Node) { + switch { + case p.have(ast.Token_INSERT): + return triggerTypeInsert, nil + case p.have(ast.Token_DELETE_P): + return triggerTypeDelete, nil + case p.have(ast.Token_UPDATE): + if p.have(ast.Token_OF) { + return triggerTypeUpdate, p.columnList() + } + return triggerTypeUpdate, nil + case p.have(ast.Token_TRUNCATE): + return triggerTypeTruncate, nil + } + p.syntaxErrorAt() + return 0, nil +} + +// parseTriggerFuncArg is gram.y's TriggerFuncArg. +func (p *parser) parseTriggerFuncArg() *ast.Node { + tok := p.peek() + switch tok.Kind { + case ast.Token_ICONST: + return nStr(strconv.Itoa(int(p.iconst()))) + case ast.Token_FCONST, ast.Token_SCONST: + p.next() + return nStr(tok.Str) + } + return nStr(p.colLabel()) +} + +// parseCreateEventTrigStmt is gram.y's CreateEventTrigStmt; CREATE EVENT +// TRIGGER consumed. +func (p *parser) parseCreateEventTrigStmt() *ast.Node { + n := &ast.CreateEventTrigStmt{Trigname: p.name()} + p.expect(ast.Token_ON) + n.Eventname = p.colLabel() + if p.have(ast.Token_WHEN) { + // event_trigger_when_list + for { + etok := p.peek() + name := p.colId() + p.expect(ast.Token_IN_P) + p.expect(ast.Token('(')) + var vals []*ast.Node + vals = append(vals, nStr(p.sconst())) + for p.have(ast.Token(',')) { + vals = append(vals, nStr(p.sconst())) + } + p.expect(ast.Token(')')) + n.Whenclause = append(n.Whenclause, makeDefElem(name, nList(vals), etok.Start)) + if !p.have(ast.Token_AND) { + break + } + } + } + p.expect(ast.Token_EXECUTE) + p.parseFunctionOrProcedure() + n.Funcname = p.parseFuncName(p.peek()) + p.expect(ast.Token('(')) + p.expect(ast.Token(')')) + return &ast.Node{Node: &ast.Node_CreateEventTrigStmt{CreateEventTrigStmt: n}} +} diff --git a/parser/testdata/deparse/postgres_regress/copy2.metadata.json b/parser/testdata/deparse/postgres_regress/copy2.metadata.json index f23fe5c..737fd31 100644 --- a/parser/testdata/deparse/postgres_regress/copy2.metadata.json +++ b/parser/testdata/deparse/postgres_regress/copy2.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "001" - ] + "todo": [] } diff --git a/parser/testdata/deparse/postgres_regress/event_trigger.metadata.json b/parser/testdata/deparse/postgres_regress/event_trigger.metadata.json index 21e7df0..d1d36fe 100644 --- a/parser/testdata/deparse/postgres_regress/event_trigger.metadata.json +++ b/parser/testdata/deparse/postgres_regress/event_trigger.metadata.json @@ -16,7 +16,6 @@ "014", "015", "016", - "017", "018", "019", "020", diff --git a/parser/testdata/deparse/postgres_regress/triggers.metadata.json b/parser/testdata/deparse/postgres_regress/triggers.metadata.json index 4494352..1fda10e 100644 --- a/parser/testdata/deparse/postgres_regress/triggers.metadata.json +++ b/parser/testdata/deparse/postgres_regress/triggers.metadata.json @@ -232,9 +232,7 @@ "179", "180", "181", - "182", "183", - "184", "185", "186", "187", diff --git a/parser/testdata/parse/deparse/ddl_create_trigger.metadata.json b/parser/testdata/parse/deparse/ddl_create_trigger.metadata.json index f23fe5c..737fd31 100644 --- a/parser/testdata/parse/deparse/ddl_create_trigger.metadata.json +++ b/parser/testdata/parse/deparse/ddl_create_trigger.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "001" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/alter_table.metadata.json b/parser/testdata/parse/postgres_regress/alter_table.metadata.json index 90df5f3..8a8bf84 100644 --- a/parser/testdata/parse/postgres_regress/alter_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/alter_table.metadata.json @@ -58,9 +58,7 @@ "1505", "1527", "1554", - "1581", "1586", - "1600", "1605", "1606", "1611", @@ -103,7 +101,6 @@ "897", "898", "924", - "942", - "994" + "942" ] } diff --git a/parser/testdata/parse/postgres_regress/copy.metadata.json b/parser/testdata/parse/postgres_regress/copy.metadata.json index 8ac8784..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/copy.metadata.json +++ b/parser/testdata/parse/postgres_regress/copy.metadata.json @@ -1,6 +1,3 @@ { - "todo": [ - "038", - "050" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/copy2.metadata.json b/parser/testdata/parse/postgres_regress/copy2.metadata.json index f23fe5c..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/copy2.metadata.json +++ b/parser/testdata/parse/postgres_regress/copy2.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "001" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/copydml.metadata.json b/parser/testdata/parse/postgres_regress/copydml.metadata.json index c2889ed..34447ce 100644 --- a/parser/testdata/parse/postgres_regress/copydml.metadata.json +++ b/parser/testdata/parse/postgres_regress/copydml.metadata.json @@ -12,8 +12,6 @@ "040", "043", "046", - "049", - "053", - "054" + "049" ] } diff --git a/parser/testdata/parse/postgres_regress/create_table.metadata.json b/parser/testdata/parse/postgres_regress/create_table.metadata.json index 983491d..4f25a29 100644 --- a/parser/testdata/parse/postgres_regress/create_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_table.metadata.json @@ -4,7 +4,6 @@ "032", "058", "076", - "267", - "298" + "267" ] } diff --git a/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json b/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json index 178050a..cd4fa13 100644 --- a/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json +++ b/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json @@ -5,7 +5,6 @@ "055", "061", "075", - "087", "095" ] } diff --git a/parser/testdata/parse/postgres_regress/event_trigger.metadata.json b/parser/testdata/parse/postgres_regress/event_trigger.metadata.json index de6de98..d996efc 100644 --- a/parser/testdata/parse/postgres_regress/event_trigger.metadata.json +++ b/parser/testdata/parse/postgres_regress/event_trigger.metadata.json @@ -1,20 +1,5 @@ { "todo": [ - "001", - "006", - "007", - "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "018", - "022", "042", "044", "046", @@ -22,19 +7,12 @@ "048", "049", "074", - "080", - "082", - "096", - "098", "099", "109", "110", - "117", "118", - "121", "122", "125", - "130", "133", "136", "140", @@ -44,16 +22,9 @@ "150", "153", "155", - "160", - "162", - "164", - "212", - "213", - "214", "215", "216", "217", - "224", "226", "228" ] diff --git a/parser/testdata/parse/postgres_regress/event_trigger_login.metadata.json b/parser/testdata/parse/postgres_regress/event_trigger_login.metadata.json index 25bbae4..4ba0f2e 100644 --- a/parser/testdata/parse/postgres_regress/event_trigger_login.metadata.json +++ b/parser/testdata/parse/postgres_regress/event_trigger_login.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "002", - "004" + "002" ] } diff --git a/parser/testdata/parse/postgres_regress/fast_default.metadata.json b/parser/testdata/parse/postgres_regress/fast_default.metadata.json index 125ee5f..1940133 100644 --- a/parser/testdata/parse/postgres_regress/fast_default.metadata.json +++ b/parser/testdata/parse/postgres_regress/fast_default.metadata.json @@ -1,14 +1,5 @@ { "todo": [ - "009", - "144", - "153", - "162", - "171", - "180", - "189", - "198", - "207", "223", "230", "243", diff --git a/parser/testdata/parse/postgres_regress/foreign_data.metadata.json b/parser/testdata/parse/postgres_regress/foreign_data.metadata.json index 4a7125d..2628b64 100644 --- a/parser/testdata/parse/postgres_regress/foreign_data.metadata.json +++ b/parser/testdata/parse/postgres_regress/foreign_data.metadata.json @@ -177,12 +177,6 @@ "405", "406", "407", - "413", - "414", - "415", - "416", - "417", - "418", "427", "429", "432", diff --git a/parser/testdata/parse/postgres_regress/foreign_key.metadata.json b/parser/testdata/parse/postgres_regress/foreign_key.metadata.json index aa9a1d1..76fc9e9 100644 --- a/parser/testdata/parse/postgres_regress/foreign_key.metadata.json +++ b/parser/testdata/parse/postgres_regress/foreign_key.metadata.json @@ -7,12 +7,6 @@ "1031", "1038", "1076", - "1105", - "1106", - "1107", - "1108", - "1109", - "1110", "1114", "426", "427", diff --git a/parser/testdata/parse/postgres_regress/indirect_toast.metadata.json b/parser/testdata/parse/postgres_regress/indirect_toast.metadata.json index 72bfdf3..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/indirect_toast.metadata.json +++ b/parser/testdata/parse/postgres_regress/indirect_toast.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "017" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/inherit.metadata.json b/parser/testdata/parse/postgres_regress/inherit.metadata.json index eb3756d..a738801 100644 --- a/parser/testdata/parse/postgres_regress/inherit.metadata.json +++ b/parser/testdata/parse/postgres_regress/inherit.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "085", "155", "160", "161", diff --git a/parser/testdata/parse/postgres_regress/insert.metadata.json b/parser/testdata/parse/postgres_regress/insert.metadata.json index c9e0f57..aed29c0 100644 --- a/parser/testdata/parse/postgres_regress/insert.metadata.json +++ b/parser/testdata/parse/postgres_regress/insert.metadata.json @@ -7,20 +7,15 @@ "076", "077", "078", - "216", - "243", "289", "290", "294", "299", "300", - "336", "341", "342", "343", "347", - "348", - "358", - "359" + "348" ] } diff --git a/parser/testdata/parse/postgres_regress/insert_conflict.metadata.json b/parser/testdata/parse/postgres_regress/insert_conflict.metadata.json index d6b48ed..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/insert_conflict.metadata.json +++ b/parser/testdata/parse/postgres_regress/insert_conflict.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "252" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/merge.metadata.json b/parser/testdata/parse/postgres_regress/merge.metadata.json index 03f8736..841779b 100644 --- a/parser/testdata/parse/postgres_regress/merge.metadata.json +++ b/parser/testdata/parse/postgres_regress/merge.metadata.json @@ -3,23 +3,7 @@ "018", "040", "043", - "205", - "206", - "207", - "208", - "209", - "210", - "211", - "212", - "213", - "214", - "215", - "216", - "229", - "420", - "426", "433", - "502", "540" ] } diff --git a/parser/testdata/parse/postgres_regress/object_address.metadata.json b/parser/testdata/parse/postgres_regress/object_address.metadata.json index be083b9..4dcc819 100644 --- a/parser/testdata/parse/postgres_regress/object_address.metadata.json +++ b/parser/testdata/parse/postgres_regress/object_address.metadata.json @@ -10,7 +10,6 @@ "018", "019", "020", - "023", "024", "026", "027", diff --git a/parser/testdata/parse/postgres_regress/plpgsql.metadata.json b/parser/testdata/parse/postgres_regress/plpgsql.metadata.json index 34009da..6dc6e8b 100644 --- a/parser/testdata/parse/postgres_regress/plpgsql.metadata.json +++ b/parser/testdata/parse/postgres_regress/plpgsql.metadata.json @@ -1,58 +1,9 @@ { "todo": [ - "023", - "025", - "027", - "029", - "031", - "033", - "035", - "037", - "039", - "045", - "047", - "049", - "050", - "051", - "052", - "053", - "055", - "056", - "057", - "058", - "059", - "061", - "062", - "063", - "065", - "067", - "069", - "071", - "073", - "075", - "077", - "078", - "079", - "083", - "084", - "085", - "086", - "087", "433", "563", "599", "802", - "876", - "877", - "881", - "887", - "889", - "891", - "892", - "903", - "917", - "918", - "921", - "928" + "921" ] } diff --git a/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json b/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json index 2e7c207..f903420 100644 --- a/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json +++ b/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json @@ -1,7 +1,6 @@ { "todo": [ "166", - "294", "298", "332", "386", diff --git a/parser/testdata/parse/postgres_regress/triggers.metadata.json b/parser/testdata/parse/postgres_regress/triggers.metadata.json index 5cc5ae0..1b1bab6 100644 --- a/parser/testdata/parse/postgres_regress/triggers.metadata.json +++ b/parser/testdata/parse/postgres_regress/triggers.metadata.json @@ -1,220 +1,7 @@ { "todo": [ - "019", - "020", - "021", - "025", - "026", - "047", - "055", - "062", - "078", - "092", - "093", - "1009", - "1012", - "1014", - "1024", - "1038", - "1043", - "1045", - "1046", - "1052", - "1053", - "123", - "124", - "125", - "127", - "134", - "135", - "136", - "137", - "138", - "139", - "160", - "164", - "165", - "166", - "167", - "168", - "174", - "175", - "176", - "182", - "183", - "184", - "185", - "186", - "187", - "188", - "199", - "200", - "201", - "202", - "228", - "237", - "251", - "261", - "269", - "270", - "271", - "272", - "273", - "274", - "275", - "276", - "277", - "278", - "279", - "280", - "281", - "282", - "283", - "284", - "285", - "286", - "287", - "288", - "289", - "290", - "291", - "310", - "312", - "314", - "332", "336", "337", - "338", - "353", - "355", - "357", - "370", - "372", - "374", - "376", - "400", - "402", - "418", - "419", - "426", - "434", - "436", - "452", - "458", - "459", - "463", - "479", - "491", - "494", - "495", - "505", - "506", - "507", - "508", - "509", - "510", - "511", - "512", - "513", - "514", - "515", - "516", - "517", - "518", - "519", - "520", - "521", - "522", - "523", - "524", - "525", - "540", - "541", - "542", - "543", - "544", - "552", - "553", - "554", - "555", - "562", - "578", - "579", - "589", - "605", - "618", - "630", - "631", - "649", - "664", - "665", - "677", - "698", - "699", - "707", - "708", - "727", - "762", - "763", - "764", - "765", - "766", - "767", - "768", - "769", - "770", - "771", - "772", - "773", - "801", - "808", - "810", - "820", - "821", - "822", - "826", - "836", - "837", - "838", - "839", - "840", - "841", - "842", - "843", - "844", - "845", - "846", - "847", - "877", - "879", - "886", - "887", - "895", - "896", - "905", - "906", - "911", - "912", - "916", - "917", - "918", - "919", - "935", - "936", - "937", - "945", - "946", - "947", - "960", - "961", - "963", - "972", - "974", - "976", - "978", - "982", - "984", - "986", - "993" + "338" ] } diff --git a/parser/testdata/parse/postgres_regress/truncate.metadata.json b/parser/testdata/parse/postgres_regress/truncate.metadata.json index 82d05cd..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/truncate.metadata.json +++ b/parser/testdata/parse/postgres_regress/truncate.metadata.json @@ -1,6 +1,3 @@ { - "todo": [ - "092", - "101" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/tsearch.metadata.json b/parser/testdata/parse/postgres_regress/tsearch.metadata.json index 47c2110..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/tsearch.metadata.json +++ b/parser/testdata/parse/postgres_regress/tsearch.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "348" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/updatable_views.metadata.json b/parser/testdata/parse/postgres_regress/updatable_views.metadata.json index 2a6596b..72abb25 100644 --- a/parser/testdata/parse/postgres_regress/updatable_views.metadata.json +++ b/parser/testdata/parse/postgres_regress/updatable_views.metadata.json @@ -6,7 +6,6 @@ "1007", "1008", "1009", - "1047", "1061", "1074", "1087", @@ -14,10 +13,6 @@ "151", "155", "159", - "180", - "184", - "188", - "210", "232", "233", "234", @@ -49,9 +44,6 @@ "477", "487", "509", - "546", - "727", - "737", "753", "754", "766", diff --git a/parser/testdata/parse/postgres_regress/update.metadata.json b/parser/testdata/parse/postgres_regress/update.metadata.json index 737798b..b0f645a 100644 --- a/parser/testdata/parse/postgres_regress/update.metadata.json +++ b/parser/testdata/parse/postgres_regress/update.metadata.json @@ -1,32 +1,11 @@ { "todo": [ - "092", - "094", - "095", - "100", - "101", - "102", "113", "114", "115", - "120", "130", "135", "145", - "149", - "150", - "151", - "152", - "153", - "154", - "155", - "156", - "157", - "158", - "159", - "160", - "223", - "229", "243" ] } diff --git a/parser/testdata/parse/postgres_regress/with.metadata.json b/parser/testdata/parse/postgres_regress/with.metadata.json index e02297c..6c3a46e 100644 --- a/parser/testdata/parse/postgres_regress/with.metadata.json +++ b/parser/testdata/parse/postgres_regress/with.metadata.json @@ -5,9 +5,6 @@ "182", "186", "189", - "242", - "246", - "251", "275", "277", "279", From 7d837919017409b1f1a26781108d167c4476782b Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 16 Aug 2026 19:32:56 +0000 Subject: [PATCH 11/24] Milestone 7: GRANT/REVOKE, role grants, ALTER DEFAULT PRIVILEGES, policies, CREATE ACCESS METHOD Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01J19Kf5LpGUhi2vxFJjzQJE --- internal/parse/ddl_alter_generic.go | 33 ++ internal/parse/ddl_dispatch.go | 13 +- internal/parse/ddl_grant.go | 490 ++++++++++++++++++ internal/parse/parser.go | 4 + .../rowsecurity.metadata.json | 1 - .../alter_generic.metadata.json | 2 - .../postgres_regress/cluster.metadata.json | 4 +- .../postgres_regress/create_am.metadata.json | 6 - .../create_function_sql.metadata.json | 4 +- .../create_index.metadata.json | 4 +- .../create_operator.metadata.json | 10 - .../create_procedure.metadata.json | 5 +- .../create_role.metadata.json | 12 +- .../postgres_regress/dependency.metadata.json | 11 - .../postgres_regress/equivclass.metadata.json | 7 +- .../event_trigger.metadata.json | 12 +- .../event_trigger_login.metadata.json | 4 +- .../foreign_data.metadata.json | 31 +- .../foreign_key.metadata.json | 2 - .../postgres_regress/identity.metadata.json | 1 - .../postgres_regress/inherit.metadata.json | 10 +- .../postgres_regress/init_privs.metadata.json | 6 +- .../postgres_regress/insert.metadata.json | 12 +- .../largeobject.metadata.json | 4 +- .../parse/postgres_regress/lock.metadata.json | 11 +- .../postgres_regress/matview.metadata.json | 6 +- .../postgres_regress/merge.metadata.json | 8 +- .../misc_functions.metadata.json | 7 +- .../multirangetypes.metadata.json | 3 - .../object_address.metadata.json | 3 - .../postgres_regress/privileges.metadata.json | 66 +-- .../parse/postgres_regress/psql.metadata.json | 4 +- .../publication.metadata.json | 4 - .../rowsecurity.metadata.json | 103 +--- .../postgres_regress/rules.metadata.json | 5 +- .../select_into.metadata.json | 6 +- .../select_views.metadata.json | 9 +- .../postgres_regress/sequence.metadata.json | 23 +- .../postgres_regress/stats_ext.metadata.json | 12 - .../subscription.metadata.json | 5 - .../postgres_regress/tablespace.metadata.json | 2 - .../postgres_regress/test_setup.metadata.json | 1 - .../updatable_views.metadata.json | 39 +- .../postgres_regress/update.metadata.json | 6 - 44 files changed, 561 insertions(+), 450 deletions(-) create mode 100644 internal/parse/ddl_grant.go diff --git a/internal/parse/ddl_alter_generic.go b/internal/parse/ddl_alter_generic.go index 857307b..0aa2135 100644 --- a/internal/parse/ddl_alter_generic.go +++ b/internal/parse/ddl_alter_generic.go @@ -254,6 +254,39 @@ func (p *parser) parseAlterDispatch() *ast.Node { p.next() return p.parseAlterExtensionStmt() + case ast.Token_DEFAULT: + if p.kindN(1) == ast.Token_PRIVILEGES { + p.next() + p.next() + return p.parseAlterDefaultPrivilegesStmt() + } + + case ast.Token_POLICY: + p.next() + missingOk := false + if p.have(ast.Token_IF_P) { + p.expect(ast.Token_EXISTS) + missingOk = true + } + name := p.name() + p.expect(ast.Token_ON) + rel := p.parseQualifiedName() + if p.kind() == ast.Token_RENAME { + p.next() + p.expect(ast.Token_TO) + r := newRenameStmt(ast.ObjectType_OBJECT_POLICY) + r.Relation = rel + r.Subname = name + r.MissingOk = missingOk + r.Newname = p.name() + return nRenameStmt(r) + } + if missingOk { + // Only the RENAME form allows IF EXISTS. + p.syntaxErrorAt() + } + return p.parseAlterPolicyStmt(name, rel) + case ast.Token_FUNCTION, ast.Token_PROCEDURE, ast.Token_ROUTINE: var objtype ast.ObjectType switch p.next().Kind { diff --git a/internal/parse/ddl_dispatch.go b/internal/parse/ddl_dispatch.go index 6ce11f0..0f061e7 100644 --- a/internal/parse/ddl_dispatch.go +++ b/internal/parse/ddl_dispatch.go @@ -45,6 +45,15 @@ func (p *parser) parseCreateDispatch() *ast.Node { p.next() return p.parseCreateEventTrigStmt() } + case ast.Token_POLICY: + p.next() + return p.parseCreatePolicyStmt() + case ast.Token_ACCESS: + if p.kindN(1) == ast.Token_METHOD { + p.next() + p.next() + return p.parseCreateAmStmt() + } case ast.Token_ASSERTION: // gram.y: CreateAssertionStmt always errors (no position). p.next() @@ -417,7 +426,3 @@ const ( relPersistUnlogged = "u" ) -func (p *parser) parseGrantStmt() *ast.Node { - p.syntaxErrorAt() - return nil -} diff --git a/internal/parse/ddl_grant.go b/internal/parse/ddl_grant.go new file mode 100644 index 0000000..767a24d --- /dev/null +++ b/internal/parse/ddl_grant.go @@ -0,0 +1,490 @@ +package parse + +// GRANT/REVOKE (GrantStmt, GrantRoleStmt), ALTER DEFAULT PRIVILEGES, +// CREATE/ALTER POLICY, and CREATE ACCESS METHOD. + +import ( + "fmt" + + "github.com/sqlc-dev/oliphant/ast" +) + +func nAccessPriv(n *ast.AccessPriv) *ast.Node { + return &ast.Node{Node: &ast.Node_AccessPriv{AccessPriv: n}} +} + +func nGrantStmt(n *ast.GrantStmt) *ast.Node { + return &ast.Node{Node: &ast.Node_GrantStmt{GrantStmt: n}} +} + +// parsePrivilege is gram.y's privilege. +func (p *parser) parsePrivilege() *ast.Node { + n := &ast.AccessPriv{} + switch p.kind() { + case ast.Token_SELECT: + p.next() + n.PrivName = "select" + case ast.Token_REFERENCES: + p.next() + n.PrivName = "references" + case ast.Token_CREATE: + p.next() + n.PrivName = "create" + case ast.Token_ALTER: + p.next() + p.expect(ast.Token_SYSTEM_P) + n.PrivName = "alter system" + return nAccessPriv(n) + default: + n.PrivName = p.colId() + } + if p.have(ast.Token('(')) { + n.Cols = p.columnList() + p.expect(ast.Token(')')) + } + return nAccessPriv(n) +} + +// parsePrivilegeList is gram.y's privilege_list. +func (p *parser) parsePrivilegeList() []*ast.Node { + list := []*ast.Node{p.parsePrivilege()} + for p.have(ast.Token(',')) { + list = append(list, p.parsePrivilege()) + } + return list +} + +// parsePrivileges is gram.y's privileges: ALL [PRIVILEGES] [(cols)] or a +// privilege_list. +func (p *parser) parsePrivileges() []*ast.Node { + if p.have(ast.Token_ALL) { + p.have(ast.Token_PRIVILEGES) + if p.have(ast.Token('(')) { + n := &ast.AccessPriv{Cols: p.columnList()} + p.expect(ast.Token(')')) + return []*ast.Node{nAccessPriv(n)} + } + return nil + } + return p.parsePrivilegeList() +} + +// parsePrivilegeTarget is gram.y's privilege_target. +func (p *parser) parsePrivilegeTarget() (ast.GrantTargetType, ast.ObjectType, []*ast.Node) { + obj := ast.GrantTargetType_ACL_TARGET_OBJECT + switch p.kind() { + case ast.Token_TABLE: + p.next() + return obj, ast.ObjectType_OBJECT_TABLE, p.parseQualifiedNameList() + case ast.Token_SEQUENCE: + p.next() + return obj, ast.ObjectType_OBJECT_SEQUENCE, p.parseQualifiedNameList() + case ast.Token_FOREIGN: + p.next() + switch { + case p.have(ast.Token_DATA_P): + p.expect(ast.Token_WRAPPER) + return obj, ast.ObjectType_OBJECT_FDW, p.nameList() + case p.have(ast.Token_SERVER): + return obj, ast.ObjectType_OBJECT_FOREIGN_SERVER, p.nameList() + } + p.syntaxErrorAt() + case ast.Token_FUNCTION: + p.next() + return obj, ast.ObjectType_OBJECT_FUNCTION, p.parseFunctionWithArgtypesList() + case ast.Token_PROCEDURE: + p.next() + return obj, ast.ObjectType_OBJECT_PROCEDURE, p.parseFunctionWithArgtypesList() + case ast.Token_ROUTINE: + p.next() + return obj, ast.ObjectType_OBJECT_ROUTINE, p.parseFunctionWithArgtypesList() + case ast.Token_DATABASE: + p.next() + return obj, ast.ObjectType_OBJECT_DATABASE, p.nameList() + case ast.Token_DOMAIN_P: + p.next() + return obj, ast.ObjectType_OBJECT_DOMAIN, p.parseAnyNameList() + case ast.Token_LANGUAGE: + p.next() + return obj, ast.ObjectType_OBJECT_LANGUAGE, p.nameList() + case ast.Token_LARGE_P: + p.next() + p.expect(ast.Token_OBJECT_P) + list := []*ast.Node{p.parseNumericOnly()} + for p.have(ast.Token(',')) { + list = append(list, p.parseNumericOnly()) + } + return obj, ast.ObjectType_OBJECT_LARGEOBJECT, list + case ast.Token_PARAMETER: + p.next() + list := []*ast.Node{nStr(p.parseVarName())} + for p.have(ast.Token(',')) { + list = append(list, nStr(p.parseVarName())) + } + return obj, ast.ObjectType_OBJECT_PARAMETER_ACL, list + case ast.Token_SCHEMA: + p.next() + return obj, ast.ObjectType_OBJECT_SCHEMA, p.nameList() + case ast.Token_TABLESPACE: + p.next() + return obj, ast.ObjectType_OBJECT_TABLESPACE, p.nameList() + case ast.Token_TYPE_P: + p.next() + return obj, ast.ObjectType_OBJECT_TYPE, p.parseAnyNameList() + case ast.Token_ALL: + p.next() + all := ast.GrantTargetType_ACL_TARGET_ALL_IN_SCHEMA + var t ast.ObjectType + switch p.kind() { + case ast.Token_TABLES: + t = ast.ObjectType_OBJECT_TABLE + case ast.Token_SEQUENCES: + t = ast.ObjectType_OBJECT_SEQUENCE + case ast.Token_FUNCTIONS: + t = ast.ObjectType_OBJECT_FUNCTION + case ast.Token_PROCEDURES: + t = ast.ObjectType_OBJECT_PROCEDURE + case ast.Token_ROUTINES: + t = ast.ObjectType_OBJECT_ROUTINE + default: + p.syntaxErrorAt() + } + p.next() + p.expect(ast.Token_IN_P) + p.expect(ast.Token_SCHEMA) + return all, t, p.nameList() + } + return obj, ast.ObjectType_OBJECT_TABLE, p.parseQualifiedNameList() +} + +// parseGranteeList is gram.y's grantee_list. +func (p *parser) parseGranteeList() []*ast.Node { + parseGrantee := func() *ast.Node { + p.have(ast.Token_GROUP_P) + return nRoleSpec(p.parseRoleSpec()) + } + list := []*ast.Node{parseGrantee()} + for p.have(ast.Token(',')) { + list = append(list, parseGrantee()) + } + return list +} + +// parseOptGrantedBy is gram.y's opt_granted_by. +func (p *parser) parseOptGrantedBy() *ast.RoleSpec { + if p.kind() == ast.Token_GRANTED { + p.next() + p.expect(ast.Token_BY) + return p.parseRoleSpec() + } + return nil +} + +// parseGrantStmt is gram.y's GrantStmt / GrantRoleStmt: the privilege list +// is parsed first and ON/TO picks the statement. +func (p *parser) parseGrantStmt() *ast.Node { + p.expect(ast.Token_GRANT) + privs := p.parsePrivileges() + if p.have(ast.Token_ON) { + n := &ast.GrantStmt{ + IsGrant: true, + Privileges: privs, + Behavior: ast.DropBehavior_DROP_RESTRICT, + } + n.Targtype, n.Objtype, n.Objects = p.parsePrivilegeTarget() + p.expect(ast.Token_TO) + n.Grantees = p.parseGranteeList() + if p.kind() == ast.Token_WITH && p.kindN(1) == ast.Token_GRANT { + p.next() + p.next() + p.expect(ast.Token_OPTION) + n.GrantOption = true + } + n.Grantor = p.parseOptGrantedBy() + return nGrantStmt(n) + } + // gram.y: GrantRoleStmt + p.expect(ast.Token_TO) + n := &ast.GrantRoleStmt{ + IsGrant: true, + GrantedRoles: privs, + GranteeRoles: p.parseRoleList(), + Behavior: ast.DropBehavior_DROP_RESTRICT, + } + if p.kind() == ast.Token_WITH || p.kind() == ast.Token_WITH_LA { + p.next() + // grant_role_opt_list + for { + otok := p.peek() + name := p.colLabel() + var val *ast.Node + switch { + case p.have(ast.Token_OPTION): + val = nBoolean(true) + case p.have(ast.Token_TRUE_P): + val = nBoolean(true) + case p.have(ast.Token_FALSE_P): + val = nBoolean(false) + default: + p.syntaxErrorAt() + } + n.Opt = append(n.Opt, makeDefElem(name, val, otok.Start)) + if !p.have(ast.Token(',')) { + break + } + } + } + n.Grantor = p.parseOptGrantedBy() + return &ast.Node{Node: &ast.Node_GrantRoleStmt{GrantRoleStmt: n}} +} + +// parseRevokeStmt is gram.y's RevokeStmt / RevokeRoleStmt. +func (p *parser) parseRevokeStmt() *ast.Node { + p.expect(ast.Token_REVOKE) + + // REVOKE GRANT OPTION FOR ... is always the GrantStmt form; REVOKE + // ColId OPTION FOR ... is the role form with an option DefElem. + if p.kind() == ast.Token_GRANT && p.kindN(1) == ast.Token_OPTION { + p.next() + p.next() + p.expect(ast.Token_FOR) + n := &ast.GrantStmt{GrantOption: true, Privileges: p.parsePrivileges()} + p.expect(ast.Token_ON) + n.Targtype, n.Objtype, n.Objects = p.parsePrivilegeTarget() + p.expect(ast.Token_FROM) + n.Grantees = p.parseGranteeList() + n.Grantor = p.parseOptGrantedBy() + n.Behavior = p.parseOptDropBehavior() + return nGrantStmt(n) + } + if isColIdToken(p.peek()) && p.kindN(1) == ast.Token_OPTION && p.kindN(2) == ast.Token_FOR { + otok := p.peek() + optName := p.colId() + p.next() + p.next() + n := &ast.GrantRoleStmt{ + Opt: []*ast.Node{makeDefElem(optName, nBoolean(false), otok.Start)}, + GrantedRoles: p.parsePrivilegeList(), + } + p.expect(ast.Token_FROM) + n.GranteeRoles = p.parseRoleList() + n.Grantor = p.parseOptGrantedBy() + n.Behavior = p.parseOptDropBehavior() + return &ast.Node{Node: &ast.Node_GrantRoleStmt{GrantRoleStmt: n}} + } + + privs := p.parsePrivileges() + if p.have(ast.Token_ON) { + n := &ast.GrantStmt{Privileges: privs} + n.Targtype, n.Objtype, n.Objects = p.parsePrivilegeTarget() + p.expect(ast.Token_FROM) + n.Grantees = p.parseGranteeList() + n.Grantor = p.parseOptGrantedBy() + n.Behavior = p.parseOptDropBehavior() + return nGrantStmt(n) + } + p.expect(ast.Token_FROM) + n := &ast.GrantRoleStmt{ + GrantedRoles: privs, + GranteeRoles: p.parseRoleList(), + } + n.Grantor = p.parseOptGrantedBy() + n.Behavior = p.parseOptDropBehavior() + return &ast.Node{Node: &ast.Node_GrantRoleStmt{GrantRoleStmt: n}} +} + +// parseAlterDefaultPrivilegesStmt is gram.y's AlterDefaultPrivilegesStmt; +// ALTER DEFAULT PRIVILEGES consumed. +func (p *parser) parseAlterDefaultPrivilegesStmt() *ast.Node { + n := &ast.AlterDefaultPrivilegesStmt{} + // DefACLOptionList + for { + tok := p.peek() + switch tok.Kind { + case ast.Token_IN_P: + p.next() + p.expect(ast.Token_SCHEMA) + n.Options = append(n.Options, makeDefElem("schemas", nList(p.nameList()), tok.Start)) + continue + case ast.Token_FOR: + p.next() + if !p.have(ast.Token_ROLE) && !p.have(ast.Token_USER) { + p.syntaxErrorAt() + } + n.Options = append(n.Options, makeDefElem("roles", nList(p.parseRoleList()), tok.Start)) + continue + } + break + } + // DefACLAction + action := &ast.GrantStmt{ + Targtype: ast.GrantTargetType_ACL_TARGET_DEFAULTS, + Behavior: ast.DropBehavior_DROP_RESTRICT, + } + switch { + case p.have(ast.Token_GRANT): + action.IsGrant = true + action.Privileges = p.parsePrivileges() + p.expect(ast.Token_ON) + action.Objtype = p.parseDefACLPrivilegeTarget() + p.expect(ast.Token_TO) + action.Grantees = p.parseGranteeList() + if p.kind() == ast.Token_WITH && p.kindN(1) == ast.Token_GRANT { + p.next() + p.next() + p.expect(ast.Token_OPTION) + action.GrantOption = true + } + case p.have(ast.Token_REVOKE): + if p.kind() == ast.Token_GRANT && p.kindN(1) == ast.Token_OPTION { + p.next() + p.next() + p.expect(ast.Token_FOR) + action.GrantOption = true + } + action.Privileges = p.parsePrivileges() + p.expect(ast.Token_ON) + action.Objtype = p.parseDefACLPrivilegeTarget() + p.expect(ast.Token_FROM) + action.Grantees = p.parseGranteeList() + action.Behavior = p.parseOptDropBehavior() + default: + p.syntaxErrorAt() + } + n.Action = action + return &ast.Node{Node: &ast.Node_AlterDefaultPrivilegesStmt{AlterDefaultPrivilegesStmt: n}} +} + +// parseDefACLPrivilegeTarget is gram.y's defacl_privilege_target. +func (p *parser) parseDefACLPrivilegeTarget() ast.ObjectType { + switch p.kind() { + case ast.Token_TABLES: + p.next() + return ast.ObjectType_OBJECT_TABLE + case ast.Token_FUNCTIONS, ast.Token_ROUTINES: + p.next() + return ast.ObjectType_OBJECT_FUNCTION + case ast.Token_SEQUENCES: + p.next() + return ast.ObjectType_OBJECT_SEQUENCE + case ast.Token_TYPES_P: + p.next() + return ast.ObjectType_OBJECT_TYPE + case ast.Token_SCHEMAS: + p.next() + return ast.ObjectType_OBJECT_SCHEMA + } + p.syntaxErrorAt() + return 0 +} + +// parseCreatePolicyStmt is gram.y's CreatePolicyStmt; CREATE POLICY +// consumed. +func (p *parser) parseCreatePolicyStmt() *ast.Node { + n := &ast.CreatePolicyStmt{PolicyName: p.name(), Permissive: true, CmdName: "all"} + p.expect(ast.Token_ON) + n.Table = p.parseQualifiedName() + if p.have(ast.Token_AS) { + itok := p.peek() + ident := p.expect(ast.Token_IDENT) + switch ident.Str { + case "permissive": + case "restrictive": + n.Permissive = false + default: + p.ereport("base_yyparse", + fmt.Sprintf("unrecognized row security option %q", ident.Str), itok.Start) + } + } + if p.have(ast.Token_FOR) { + n.CmdName = p.parseRowSecurityCmd() + } + if p.have(ast.Token_TO) { + n.Roles = p.parseRoleList() + } else { + n.Roles = []*ast.Node{nRoleSpec(&ast.RoleSpec{ + Roletype: ast.RoleSpecType_ROLESPEC_PUBLIC, + Location: -1, + })} + } + if p.have(ast.Token_USING) { + p.expect(ast.Token('(')) + n.Qual = p.parseAExpr(0) + p.expect(ast.Token(')')) + } + if p.kind() == ast.Token_WITH && p.kindN(1) == ast.Token_CHECK { + p.next() + p.next() + p.expect(ast.Token('(')) + n.WithCheck = p.parseAExpr(0) + p.expect(ast.Token(')')) + } + return &ast.Node{Node: &ast.Node_CreatePolicyStmt{CreatePolicyStmt: n}} +} + +// parseAlterPolicyStmt is gram.y's AlterPolicyStmt; ALTER POLICY name ON +// qualified_name consumed. +func (p *parser) parseAlterPolicyStmt(name string, table *ast.RangeVar) *ast.Node { + n := &ast.AlterPolicyStmt{PolicyName: name, Table: table} + if p.have(ast.Token_TO) { + n.Roles = p.parseRoleList() + } + if p.have(ast.Token_USING) { + p.expect(ast.Token('(')) + n.Qual = p.parseAExpr(0) + p.expect(ast.Token(')')) + } + if p.kind() == ast.Token_WITH && p.kindN(1) == ast.Token_CHECK { + p.next() + p.next() + p.expect(ast.Token('(')) + n.WithCheck = p.parseAExpr(0) + p.expect(ast.Token(')')) + } + return &ast.Node{Node: &ast.Node_AlterPolicyStmt{AlterPolicyStmt: n}} +} + +// parseRowSecurityCmd is gram.y's row_security_cmd. +func (p *parser) parseRowSecurityCmd() string { + switch { + case p.have(ast.Token_ALL): + return "all" + case p.have(ast.Token_SELECT): + return "select" + case p.have(ast.Token_INSERT): + return "insert" + case p.have(ast.Token_UPDATE): + return "update" + case p.have(ast.Token_DELETE_P): + return "delete" + } + p.syntaxErrorAt() + return "" +} + +// parseCreateAmStmt is gram.y's CreateAmStmt; CREATE ACCESS METHOD +// consumed. +func (p *parser) parseCreateAmStmt() *ast.Node { + n := &ast.CreateAmStmt{Amname: p.name()} + p.expect(ast.Token_TYPE_P) + switch { + case p.have(ast.Token_INDEX): + n.Amtype = "i" + case p.have(ast.Token_TABLE): + n.Amtype = "t" + default: + p.syntaxErrorAt() + } + p.expect(ast.Token_HANDLER) + n.HandlerName = p.parseHandlerName() + return &ast.Node{Node: &ast.Node_CreateAmStmt{CreateAmStmt: n}} +} + +// parseHandlerName is gram.y's handler_name: name | name attrs. +func (p *parser) parseHandlerName() []*ast.Node { + names := []*ast.Node{nStr(p.name())} + for p.have(ast.Token('.')) { + names = append(names, nStr(p.attrName())) + } + return names +} diff --git a/internal/parse/parser.go b/internal/parse/parser.go index 30fe4ef..55bc8bc 100644 --- a/internal/parse/parser.go +++ b/internal/parse/parser.go @@ -277,6 +277,10 @@ func (p *parser) parseToplevelStmt() *ast.Node { return p.parseReindexStmt() case ast.Token_DO: return p.parseDoStmt() + case ast.Token_GRANT: + return p.parseGrantStmt() + case ast.Token_REVOKE: + return p.parseRevokeStmt() case ast.Token_SECURITY: if p.kindN(1) == ast.Token_LABEL { p.next() diff --git a/parser/testdata/deparse/postgres_regress/rowsecurity.metadata.json b/parser/testdata/deparse/postgres_regress/rowsecurity.metadata.json index 2c2ac38..3240031 100644 --- a/parser/testdata/deparse/postgres_regress/rowsecurity.metadata.json +++ b/parser/testdata/deparse/postgres_regress/rowsecurity.metadata.json @@ -36,7 +36,6 @@ "034", "035", "036", - "037", "038", "039", "040", diff --git a/parser/testdata/parse/postgres_regress/alter_generic.metadata.json b/parser/testdata/parse/postgres_regress/alter_generic.metadata.json index d7a152f..3f5edae 100644 --- a/parser/testdata/parse/postgres_regress/alter_generic.metadata.json +++ b/parser/testdata/parse/postgres_regress/alter_generic.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "012", "017", "018", "036", @@ -43,7 +42,6 @@ "164", "168", "170", - "177", "178", "180", "182", diff --git a/parser/testdata/parse/postgres_regress/cluster.metadata.json b/parser/testdata/parse/postgres_regress/cluster.metadata.json index 116d5e3..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/cluster.metadata.json +++ b/parser/testdata/parse/postgres_regress/cluster.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "068" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/create_am.metadata.json b/parser/testdata/parse/postgres_regress/create_am.metadata.json index 4995994..8c28074 100644 --- a/parser/testdata/parse/postgres_regress/create_am.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_am.metadata.json @@ -1,12 +1,6 @@ { "todo": [ - "001", - "002", - "003", "005", - "027", - "028", - "029", "132", "133", "134", diff --git a/parser/testdata/parse/postgres_regress/create_function_sql.metadata.json b/parser/testdata/parse/postgres_regress/create_function_sql.metadata.json index e65a4ab..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/create_function_sql.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_function_sql.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "003" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/create_index.metadata.json b/parser/testdata/parse/postgres_regress/create_index.metadata.json index dd47471..e37a6cd 100644 --- a/parser/testdata/parse/postgres_regress/create_index.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_index.metadata.json @@ -1,8 +1,6 @@ { "todo": [ "333", - "548", - "604", - "609" + "548" ] } diff --git a/parser/testdata/parse/postgres_regress/create_operator.metadata.json b/parser/testdata/parse/postgres_regress/create_operator.metadata.json index 60d91df..ea69eb9 100644 --- a/parser/testdata/parse/postgres_regress/create_operator.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_operator.metadata.json @@ -5,8 +5,6 @@ "003", "011", "012", - "027", - "028", "030", "033", "036", @@ -15,20 +13,12 @@ "043", "044", "047", - "049", - "050", "052", "056", - "058", - "059", "061", "065", - "067", - "068", "070", "074", - "076", - "077", "079", "082", "085", diff --git a/parser/testdata/parse/postgres_regress/create_procedure.metadata.json b/parser/testdata/parse/postgres_regress/create_procedure.metadata.json index cb14203..62986cb 100644 --- a/parser/testdata/parse/postgres_regress/create_procedure.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_procedure.metadata.json @@ -1,8 +1,5 @@ { "todo": [ - "051", - "091", - "092", - "096" + "051" ] } diff --git a/parser/testdata/parse/postgres_regress/create_role.metadata.json b/parser/testdata/parse/postgres_regress/create_role.metadata.json index dbbcdb1..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/create_role.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_role.metadata.json @@ -1,13 +1,3 @@ { - "todo": [ - "003", - "032", - "060", - "071", - "074", - "080", - "083", - "108", - "126" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/dependency.metadata.json b/parser/testdata/parse/postgres_regress/dependency.metadata.json index 3f580c1..8d57daf 100644 --- a/parser/testdata/parse/postgres_regress/dependency.metadata.json +++ b/parser/testdata/parse/postgres_regress/dependency.metadata.json @@ -1,16 +1,5 @@ { "todo": [ - "006", - "007", - "010", - "012", - "014", - "016", - "032", - "035", - "038", - "039", - "043", "045", "046", "051" diff --git a/parser/testdata/parse/postgres_regress/equivclass.metadata.json b/parser/testdata/parse/postgres_regress/equivclass.metadata.json index 84fb537..f9f4c13 100644 --- a/parser/testdata/parse/postgres_regress/equivclass.metadata.json +++ b/parser/testdata/parse/postgres_regress/equivclass.metadata.json @@ -14,11 +14,6 @@ "024", "026", "027", - "029", - "064", - "066", - "067", - "072", - "073" + "029" ] } diff --git a/parser/testdata/parse/postgres_regress/event_trigger.metadata.json b/parser/testdata/parse/postgres_regress/event_trigger.metadata.json index d996efc..ad975b1 100644 --- a/parser/testdata/parse/postgres_regress/event_trigger.metadata.json +++ b/parser/testdata/parse/postgres_regress/event_trigger.metadata.json @@ -1,17 +1,12 @@ { "todo": [ - "042", - "044", "046", "047", "048", - "049", "074", "099", "109", "110", - "118", - "122", "125", "133", "136", @@ -21,11 +16,6 @@ "147", "150", "153", - "155", - "215", - "216", - "217", - "226", - "228" + "155" ] } diff --git a/parser/testdata/parse/postgres_regress/event_trigger_login.metadata.json b/parser/testdata/parse/postgres_regress/event_trigger_login.metadata.json index 4ba0f2e..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/event_trigger_login.metadata.json +++ b/parser/testdata/parse/postgres_regress/event_trigger_login.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "002" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/foreign_data.metadata.json b/parser/testdata/parse/postgres_regress/foreign_data.metadata.json index 2628b64..ba4181a 100644 --- a/parser/testdata/parse/postgres_regress/foreign_data.metadata.json +++ b/parser/testdata/parse/postgres_regress/foreign_data.metadata.json @@ -53,33 +53,23 @@ "092", "093", "095", - "097", "099", - "101", - "102", "104", - "106", "108", - "110", "111", "112", "113", "114", "115", - "116", - "117", "119", "120", "122", - "123", "125", "126", "128", "129", "131", - "133", "135", - "137", "139", "142", "143", @@ -132,47 +122,29 @@ "274", "301", "302", - "338", - "346", - "348", - "349", "351", "352", "353", "355", "356", "357", - "359", "360", "361", "362", - "364", "365", "366", - "369", - "370", "372", "373", - "375", - "376", "377", "378", - "380", - "381", "382", "383", "384", - "387", - "388", - "390", "391", "392", - "393", "394", "397", - "398", "400", - "401", "402", "405", "406", @@ -192,7 +164,6 @@ "486", "489", "508", - "509", - "522" + "509" ] } diff --git a/parser/testdata/parse/postgres_regress/foreign_key.metadata.json b/parser/testdata/parse/postgres_regress/foreign_key.metadata.json index 76fc9e9..d1ae55a 100644 --- a/parser/testdata/parse/postgres_regress/foreign_key.metadata.json +++ b/parser/testdata/parse/postgres_regress/foreign_key.metadata.json @@ -12,8 +12,6 @@ "427", "488", "581", - "688", - "700", "729", "740", "750", diff --git a/parser/testdata/parse/postgres_regress/identity.metadata.json b/parser/testdata/parse/postgres_regress/identity.metadata.json index 479a298..c32a1dc 100644 --- a/parser/testdata/parse/postgres_regress/identity.metadata.json +++ b/parser/testdata/parse/postgres_regress/identity.metadata.json @@ -2,7 +2,6 @@ "todo": [ "106", "108", - "144", "155", "157", "162", diff --git a/parser/testdata/parse/postgres_regress/inherit.metadata.json b/parser/testdata/parse/postgres_regress/inherit.metadata.json index a738801..b371a13 100644 --- a/parser/testdata/parse/postgres_regress/inherit.metadata.json +++ b/parser/testdata/parse/postgres_regress/inherit.metadata.json @@ -2,14 +2,6 @@ "todo": [ "155", "160", - "161", - "453", - "454", - "465", - "616", - "617", - "622", - "623", - "628" + "161" ] } diff --git a/parser/testdata/parse/postgres_regress/init_privs.metadata.json b/parser/testdata/parse/postgres_regress/init_privs.metadata.json index d151fe5..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/init_privs.metadata.json +++ b/parser/testdata/parse/postgres_regress/init_privs.metadata.json @@ -1,7 +1,3 @@ { - "todo": [ - "002", - "003", - "004" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/insert.metadata.json b/parser/testdata/parse/postgres_regress/insert.metadata.json index aed29c0..c2aaa6c 100644 --- a/parser/testdata/parse/postgres_regress/insert.metadata.json +++ b/parser/testdata/parse/postgres_regress/insert.metadata.json @@ -6,16 +6,6 @@ "046", "076", "077", - "078", - "289", - "290", - "294", - "299", - "300", - "341", - "342", - "343", - "347", - "348" + "078" ] } diff --git a/parser/testdata/parse/postgres_regress/largeobject.metadata.json b/parser/testdata/parse/postgres_regress/largeobject.metadata.json index 80e9b81..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/largeobject.metadata.json +++ b/parser/testdata/parse/postgres_regress/largeobject.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "006" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/lock.metadata.json b/parser/testdata/parse/postgres_regress/lock.metadata.json index b3e2db9..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/lock.metadata.json +++ b/parser/testdata/parse/postgres_regress/lock.metadata.json @@ -1,12 +1,3 @@ { - "todo": [ - "013", - "071", - "083", - "089", - "096", - "103", - "109", - "115" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/matview.metadata.json b/parser/testdata/parse/postgres_regress/matview.metadata.json index 1b29c27..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/matview.metadata.json +++ b/parser/testdata/parse/postgres_regress/matview.metadata.json @@ -1,7 +1,3 @@ { - "todo": [ - "157", - "158", - "167" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/merge.metadata.json b/parser/testdata/parse/postgres_regress/merge.metadata.json index 841779b..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/merge.metadata.json +++ b/parser/testdata/parse/postgres_regress/merge.metadata.json @@ -1,9 +1,3 @@ { - "todo": [ - "018", - "040", - "043", - "433", - "540" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/misc_functions.metadata.json b/parser/testdata/parse/postgres_regress/misc_functions.metadata.json index 7851a72..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/misc_functions.metadata.json +++ b/parser/testdata/parse/postgres_regress/misc_functions.metadata.json @@ -1,8 +1,3 @@ { - "todo": [ - "050", - "055", - "087", - "113" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json b/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json index d9a7498..ee89b15 100644 --- a/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json +++ b/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json @@ -10,9 +10,6 @@ "529", "530", "537", - "542", - "543", - "545", "582", "583" ] diff --git a/parser/testdata/parse/postgres_regress/object_address.metadata.json b/parser/testdata/parse/postgres_regress/object_address.metadata.json index 4dcc819..ff2e536 100644 --- a/parser/testdata/parse/postgres_regress/object_address.metadata.json +++ b/parser/testdata/parse/postgres_regress/object_address.metadata.json @@ -10,11 +10,8 @@ "018", "019", "020", - "024", "026", "027", - "028", - "029", "030", "032", "033", diff --git a/parser/testdata/parse/postgres_regress/privileges.metadata.json b/parser/testdata/parse/postgres_regress/privileges.metadata.json index 2f989d3..6d3503f 100644 --- a/parser/testdata/parse/postgres_regress/privileges.metadata.json +++ b/parser/testdata/parse/postgres_regress/privileges.metadata.json @@ -1,77 +1,13 @@ { "todo": [ - "025", - "026", - "027", - "028", - "029", - "032", - "035", - "037", - "038", - "040", - "043", - "044", - "045", - "046", - "052", - "053", - "057", - "058", - "066", - "067", - "068", - "069", - "071", - "073", - "075", - "076", - "077", - "079", - "080", - "085", - "086", - "092", - "116", "122", - "123", "125", "126", "128", "129", "130", "133", - "134", - "135", - "138", - "139", - "140", - "141", - "142", - "143", - "156", - "158", - "159", - "162", - "163", - "164", - "165", - "166", - "184", "195", - "203", - "208", - "209", - "216", - "223", - "235", - "240", - "251", - "252", - "264", - "273", - "274", - "316", - "320" + "203" ] } diff --git a/parser/testdata/parse/postgres_regress/psql.metadata.json b/parser/testdata/parse/postgres_regress/psql.metadata.json index 281b3fb..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/psql.metadata.json +++ b/parser/testdata/parse/postgres_regress/psql.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "127" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/publication.metadata.json b/parser/testdata/parse/postgres_regress/publication.metadata.json index 804b3d9..06a4496 100644 --- a/parser/testdata/parse/postgres_regress/publication.metadata.json +++ b/parser/testdata/parse/postgres_regress/publication.metadata.json @@ -189,20 +189,16 @@ "440", "442", "450", - "452", "455", "456", "457", "459", "460", - "462", "464", - "469", "471", "473", "475", "476", - "480", "484", "486", "487", diff --git a/parser/testdata/parse/postgres_regress/rowsecurity.metadata.json b/parser/testdata/parse/postgres_regress/rowsecurity.metadata.json index 8e22a19..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/rowsecurity.metadata.json +++ b/parser/testdata/parse/postgres_regress/rowsecurity.metadata.json @@ -1,104 +1,3 @@ { - "todo": [ - "018", - "019", - "021", - "024", - "027", - "030", - "033", - "036", - "037", - "038", - "039", - "059", - "062", - "072", - "109", - "112", - "116", - "118", - "119", - "147", - "151", - "152", - "153", - "156", - "157", - "177", - "186", - "189", - "213", - "220", - "226", - "232", - "233", - "241", - "242", - "250", - "251", - "259", - "260", - "261", - "262", - "271", - "276", - "283", - "332", - "334", - "337", - "353", - "354", - "355", - "371", - "377", - "385", - "386", - "387", - "388", - "410", - "425", - "427", - "428", - "459", - "469", - "480", - "487", - "495", - "503", - "509", - "510", - "523", - "524", - "535", - "543", - "551", - "559", - "561", - "562", - "563", - "564", - "565", - "577", - "578", - "579", - "580", - "581", - "594", - "595", - "611", - "612", - "613", - "625", - "627", - "637", - "639", - "654", - "655", - "663", - "689", - "691", - "716", - "718" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/rules.metadata.json b/parser/testdata/parse/postgres_regress/rules.metadata.json index e55293c..99f93e7 100644 --- a/parser/testdata/parse/postgres_regress/rules.metadata.json +++ b/parser/testdata/parse/postgres_regress/rules.metadata.json @@ -64,10 +64,7 @@ "563", "564", "581", - "600", "601", - "606", - "607", - "608" + "606" ] } diff --git a/parser/testdata/parse/postgres_regress/select_into.metadata.json b/parser/testdata/parse/postgres_regress/select_into.metadata.json index 2d9cf5a..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/select_into.metadata.json +++ b/parser/testdata/parse/postgres_regress/select_into.metadata.json @@ -1,7 +1,3 @@ { - "todo": [ - "007", - "008", - "021" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/select_views.metadata.json b/parser/testdata/parse/postgres_regress/select_views.metadata.json index 977286c..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/select_views.metadata.json +++ b/parser/testdata/parse/postgres_regress/select_views.metadata.json @@ -1,10 +1,3 @@ { - "todo": [ - "018", - "019", - "020", - "021", - "022", - "023" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/sequence.metadata.json b/parser/testdata/parse/postgres_regress/sequence.metadata.json index c8845a9..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/sequence.metadata.json +++ b/parser/testdata/parse/postgres_regress/sequence.metadata.json @@ -1,24 +1,3 @@ { - "todo": [ - "171", - "172", - "178", - "179", - "185", - "186", - "193", - "194", - "201", - "202", - "209", - "210", - "217", - "218", - "225", - "226", - "233", - "234", - "240", - "244" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/stats_ext.metadata.json b/parser/testdata/parse/postgres_regress/stats_ext.metadata.json index 4182c1a..a60b9c3 100644 --- a/parser/testdata/parse/postgres_regress/stats_ext.metadata.json +++ b/parser/testdata/parse/postgres_regress/stats_ext.metadata.json @@ -100,31 +100,19 @@ "709", "710", "711", - "724", "729", "731", - "737", - "744", - "745", - "759", - "760", "768", "769", "780", - "782", "785", "786", - "788", "790", "791", - "793", - "794", "796", "797", - "799", "801", "802", - "804", "806" ] } diff --git a/parser/testdata/parse/postgres_regress/subscription.metadata.json b/parser/testdata/parse/postgres_regress/subscription.metadata.json index 7c4b7aa..d9eb6e0 100644 --- a/parser/testdata/parse/postgres_regress/subscription.metadata.json +++ b/parser/testdata/parse/postgres_regress/subscription.metadata.json @@ -82,17 +82,12 @@ "123", "124", "127", - "129", "131", - "133", "135", - "137", "139", "140", "141", - "143", "145", - "147", "149", "151", "153" diff --git a/parser/testdata/parse/postgres_regress/tablespace.metadata.json b/parser/testdata/parse/postgres_regress/tablespace.metadata.json index 637af3f..325adf3 100644 --- a/parser/testdata/parse/postgres_regress/tablespace.metadata.json +++ b/parser/testdata/parse/postgres_regress/tablespace.metadata.json @@ -14,8 +14,6 @@ "142", "158", "174", - "180", - "184", "191" ] } diff --git a/parser/testdata/parse/postgres_regress/test_setup.metadata.json b/parser/testdata/parse/postgres_regress/test_setup.metadata.json index d8fb05d..4bdcbd8 100644 --- a/parser/testdata/parse/postgres_regress/test_setup.metadata.json +++ b/parser/testdata/parse/postgres_regress/test_setup.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "002", "004", "059", "060", diff --git a/parser/testdata/parse/postgres_regress/updatable_views.metadata.json b/parser/testdata/parse/postgres_regress/updatable_views.metadata.json index 72abb25..a3e1785 100644 --- a/parser/testdata/parse/postgres_regress/updatable_views.metadata.json +++ b/parser/testdata/parse/postgres_regress/updatable_views.metadata.json @@ -3,9 +3,6 @@ "086", "087", "088", - "1007", - "1008", - "1009", "1061", "1074", "1087", @@ -13,45 +10,11 @@ "151", "155", "159", - "232", - "233", - "234", - "235", - "262", - "276", - "277", - "306", - "318", - "325", - "337", - "344", - "363", - "364", - "377", - "378", - "391", - "399", - "400", - "406", - "424", - "429", - "430", - "446", - "447", - "457", - "458", - "476", - "477", - "487", - "509", "753", "754", "766", "805", "806", - "904", - "995", - "996", - "997" + "904" ] } diff --git a/parser/testdata/parse/postgres_regress/update.metadata.json b/parser/testdata/parse/postgres_regress/update.metadata.json index b0f645a..1fac85a 100644 --- a/parser/testdata/parse/postgres_regress/update.metadata.json +++ b/parser/testdata/parse/postgres_regress/update.metadata.json @@ -1,11 +1,5 @@ { "todo": [ - "113", - "114", - "115", - "130", - "135", - "145", "243" ] } From 728ae7ce6971c148fa1acbe2a4a202793cb61a25 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 16 Aug 2026 19:35:09 +0000 Subject: [PATCH 12/24] =?UTF-8?q?Milestone=207:=20DefineStmt=20family=20?= =?UTF-8?q?=E2=80=94=20aggregates,=20operators,=20types,=20text=20search,?= =?UTF-8?q?=20collations,=20opclasses,=20statistics?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01J19Kf5LpGUhi2vxFJjzQJE --- internal/parse/ddl_alter_generic.go | 12 +- internal/parse/ddl_define.go | 279 ++++++++++++++++++ internal/parse/ddl_dispatch.go | 57 ++++ .../create_operator.metadata.json | 1 - .../postgres_regress/stats_ext.metadata.json | 5 - .../deparse/ddl_create_type.metadata.json | 4 +- .../postgres_regress/aggregates.metadata.json | 12 +- .../alter_generic.metadata.json | 92 +----- .../alter_operator.metadata.json | 9 +- .../alter_table.metadata.json | 11 +- .../postgres_regress/arrays.metadata.json | 1 - .../parse/postgres_regress/case.metadata.json | 6 +- .../collate.icu.utf8.metadata.json | 31 +- .../collate.linux.utf8.metadata.json | 14 +- .../postgres_regress/collate.metadata.json | 21 +- .../collate.utf8.metadata.json | 6 +- .../collate.windows.win1252.metadata.json | 13 +- .../create_aggregate.metadata.json | 33 +-- .../postgres_regress/create_am.metadata.json | 1 - .../create_cast.metadata.json | 5 +- .../create_operator.metadata.json | 29 +- .../create_table.metadata.json | 3 +- .../create_table_like.metadata.json | 3 - .../create_type.metadata.json | 20 +- .../postgres_regress/dependency.metadata.json | 2 - .../postgres_regress/domain.metadata.json | 3 +- .../drop_if_exists.metadata.json | 3 - .../drop_operator.metadata.json | 7 +- .../parse/postgres_regress/enum.metadata.json | 10 +- .../postgres_regress/equivclass.metadata.json | 18 +- .../postgres_regress/errors.metadata.json | 2 - .../event_trigger.metadata.json | 2 - .../expressions.metadata.json | 8 +- .../postgres_regress/float4.metadata.json | 5 +- .../postgres_regress/float8.metadata.json | 5 +- .../postgres_regress/hash_func.metadata.json | 1 - .../parse/postgres_regress/join.metadata.json | 3 +- .../multirangetypes.metadata.json | 11 +- .../object_address.metadata.json | 9 +- .../partition_prune.metadata.json | 5 +- .../polymorphism.metadata.json | 57 +--- .../postgres_regress/privileges.metadata.json | 4 +- .../publication.metadata.json | 3 - .../postgres_regress/rangetypes.metadata.json | 10 +- .../select_parallel.metadata.json | 4 +- .../postgres_regress/sqljson.metadata.json | 4 +- .../sqljson_queryfuncs.metadata.json | 1 - .../postgres_regress/stats_ext.metadata.json | 105 ------- .../postgres_regress/subselect.metadata.json | 3 +- .../parse/postgres_regress/temp.metadata.json | 1 - .../postgres_regress/test_setup.metadata.json | 7 +- .../postgres_regress/tsdicts.metadata.json | 18 -- .../parse/postgres_regress/tsrf.metadata.json | 4 +- .../postgres_regress/update.metadata.json | 4 +- .../postgres_regress/window.metadata.json | 7 +- 55 files changed, 377 insertions(+), 617 deletions(-) create mode 100644 internal/parse/ddl_define.go diff --git a/internal/parse/ddl_alter_generic.go b/internal/parse/ddl_alter_generic.go index 0aa2135..1dc6138 100644 --- a/internal/parse/ddl_alter_generic.go +++ b/internal/parse/ddl_alter_generic.go @@ -355,11 +355,12 @@ func (p *parser) parseAlterDispatch() *ast.Node { } names := p.anyName() p.expect(ast.Token_USING) - obj := nList(append([]*ast.Node{nStr(p.name())}, names...)) + amname := p.name() + obj := nList(append([]*ast.Node{nStr(amname)}, names...)) if isFamily { switch p.kind() { case ast.Token_ADD_P, ast.Token_DROP: - return p.parseAlterOpFamilyStmt(obj) + return p.parseAlterOpFamilyStmtImpl(names, amname) } } if n := p.parseAlterGenericTail(objtype, obj, nil, false, @@ -857,12 +858,7 @@ func (p *parser) parseOperatorDefArg() *ast.Node { return nTypeName(p.parseFuncType()) } -// Stubs for statements arriving in later milestone-7 batches. -func (p *parser) parseAlterOpFamilyStmt(obj *ast.Node) *ast.Node { - p.syntaxErrorAt() - return nil -} - +// Stub for the text-search configuration batch. func (p *parser) parseAlterTSConfigurationStmt(names []*ast.Node) *ast.Node { p.syntaxErrorAt() return nil diff --git a/internal/parse/ddl_define.go b/internal/parse/ddl_define.go new file mode 100644 index 0000000..6a67f94 --- /dev/null +++ b/internal/parse/ddl_define.go @@ -0,0 +1,279 @@ +package parse + +// DefineStmt (CREATE AGGREGATE/OPERATOR/TYPE/TEXT SEARCH .../COLLATION), +// CompositeTypeStmt, CreateEnumStmt, CreateRangeStmt, CreateStatsStmt, +// and the operator class family. + +import ( + "github.com/sqlc-dev/oliphant/ast" +) + +func nDefineStmt(n *ast.DefineStmt) *ast.Node { + return &ast.Node{Node: &ast.Node_DefineStmt{DefineStmt: n}} +} + +// parseCreateAggregateStmt is gram.y's DefineStmt AGGREGATE arms; CREATE +// [OR REPLACE] AGGREGATE consumed. +func (p *parser) parseCreateAggregateStmt(replace bool) *ast.Node { + n := &ast.DefineStmt{ + Kind: ast.ObjectType_OBJECT_AGGREGATE, + Replace: replace, + Defnames: p.parseFuncName(p.peek()), + } + // New style has aggr_args then definition; old style has '(' IDENT '=' + // ... ')' directly. Disambiguate on the token after '(': old_aggr_elem + // requires IDENT '='. + if p.kindN(1) == ast.Token_IDENT && p.kindN(2) == ast.Token('=') { + n.Oldstyle = true + p.expect(ast.Token('(')) + for { + etok := p.peek() + name := p.expect(ast.Token_IDENT).Str + p.expect(ast.Token('=')) + n.Definition = append(n.Definition, makeDefElem(name, p.parseDefArg(), etok.Start)) + if !p.have(ast.Token(',')) { + break + } + } + p.expect(ast.Token(')')) + return nDefineStmt(n) + } + params, ndirect := p.parseAggrArgs() + n.Args = []*ast.Node{nList(params), nInteger(ndirect)} + n.Definition = p.parseDefinition() + return nDefineStmt(n) +} + +// parseCreateOperatorStmt handles CREATE OPERATOR: the DefineStmt arm plus +// the CLASS/FAMILY statements; CREATE OPERATOR consumed. +func (p *parser) parseCreateOperatorStmt() *ast.Node { + switch p.kind() { + case ast.Token_CLASS: + // gram.y: CreateOpClassStmt + p.next() + n := &ast.CreateOpClassStmt{Opclassname: p.anyName()} + n.IsDefault = p.have(ast.Token_DEFAULT) + p.expect(ast.Token_FOR) + p.expect(ast.Token_TYPE_P) + n.Datatype = p.parseTypename() + p.expect(ast.Token_USING) + n.Amname = p.name() + if p.have(ast.Token_FAMILY) { + n.Opfamilyname = p.anyName() + } + p.expect(ast.Token_AS) + n.Items = p.parseOpclassItemList() + return &ast.Node{Node: &ast.Node_CreateOpClassStmt{CreateOpClassStmt: n}} + case ast.Token_FAMILY: + // gram.y: CreateOpFamilyStmt + p.next() + n := &ast.CreateOpFamilyStmt{Opfamilyname: p.anyName()} + p.expect(ast.Token_USING) + n.Amname = p.name() + return &ast.Node{Node: &ast.Node_CreateOpFamilyStmt{CreateOpFamilyStmt: n}} + } + // gram.y: DefineStmt: CREATE OPERATOR any_operator definition + n := &ast.DefineStmt{ + Kind: ast.ObjectType_OBJECT_OPERATOR, + Defnames: p.parseAnyOperator(), + Definition: p.parseDefinition(), + } + return nDefineStmt(n) +} + +// parseCreateTypeStmt is gram.y's DefineStmt TYPE_P arms; CREATE TYPE_P +// consumed. +func (p *parser) parseCreateTypeStmt() *ast.Node { + ntok := p.peek() + names := p.anyName() + switch p.kind() { + case ast.Token('('): + n := &ast.DefineStmt{ + Kind: ast.ObjectType_OBJECT_TYPE, + Defnames: names, + Definition: p.parseDefinition(), + } + return nDefineStmt(n) + case ast.Token_AS: + p.next() + switch p.kind() { + case ast.Token_ENUM_P: + p.next() + n := &ast.CreateEnumStmt{TypeName: names} + p.expect(ast.Token('(')) + if p.kind() != ast.Token(')') { + n.Vals = append(n.Vals, nStr(p.sconst())) + for p.have(ast.Token(',')) { + n.Vals = append(n.Vals, nStr(p.sconst())) + } + } + p.expect(ast.Token(')')) + return &ast.Node{Node: &ast.Node_CreateEnumStmt{CreateEnumStmt: n}} + case ast.Token_RANGE: + p.next() + n := &ast.CreateRangeStmt{TypeName: names, Params: p.parseDefinition()} + return &ast.Node{Node: &ast.Node_CreateRangeStmt{CreateRangeStmt: n}} + } + // gram.y: CompositeTypeStmt + return p.parseCompositeTypeStmt(names, ntok.Start) + } + // Shell type. + return nDefineStmt(&ast.DefineStmt{ + Kind: ast.ObjectType_OBJECT_TYPE, + Defnames: names, + }) +} + +// parseCompositeTypeStmt finishes CREATE TYPE any_name AS '(' ... ')'; the +// caller consumed AS and passes the any_name with its start location (@3). +func (p *parser) parseCompositeTypeStmt(names []*ast.Node, nameLoc int32) *ast.Node { + n := &ast.CompositeTypeStmt{} + n.Typevar = p.makeRangeVarFromAnyName(names, nameLoc) + p.expect(ast.Token('(')) + if p.kind() != ast.Token(')') { + n.Coldeflist = p.parseTableFuncElementList() + } + p.expect(ast.Token(')')) + return &ast.Node{Node: &ast.Node_CompositeTypeStmt{CompositeTypeStmt: n}} +} + +// parseOpclassItemList is gram.y's opclass_item_list. +func (p *parser) parseOpclassItemList() []*ast.Node { + list := []*ast.Node{p.parseOpclassItem()} + for p.have(ast.Token(',')) { + list = append(list, p.parseOpclassItem()) + } + return list +} + +// OPCLASS_ITEM_* constants (parsenodes.h). +const ( + opclassItemOperator = 1 + opclassItemFunction = 2 + opclassItemStorageType = 3 +) + +// parseOpclassItem is gram.y's opclass_item. +func (p *parser) parseOpclassItem() *ast.Node { + n := &ast.CreateOpClassItem{} + switch { + case p.have(ast.Token_OPERATOR): + n.Itemtype = opclassItemOperator + n.Number = p.iconst() + op := p.parseAnyOperator() + if p.kind() == ast.Token('(') { + n.Name = &ast.ObjectWithArgs{Objname: op, Objargs: p.parseOperArgtypes()} + } else { + n.Name = &ast.ObjectWithArgs{Objname: op} + } + // opclass_purpose + if p.kind() == ast.Token_FOR { + p.next() + switch { + case p.have(ast.Token_SEARCH): + case p.have(ast.Token_ORDER): + p.expect(ast.Token_BY) + n.OrderFamily = p.anyName() + default: + p.syntaxErrorAt() + } + } + p.have(ast.Token_RECHECK) + case p.have(ast.Token_FUNCTION): + n.Itemtype = opclassItemFunction + n.Number = p.iconst() + if p.kind() == ast.Token('(') { + // function_with_argtypes starts with a func_name, never '(', + // so this must be the '(' type_list ')' prefix. + p.next() + n.ClassArgs = p.parseTypeList() + p.expect(ast.Token(')')) + } + n.Name = p.parseFunctionWithArgtypes().GetObjectWithArgs() + case p.have(ast.Token_STORAGE): + n.Itemtype = opclassItemStorageType + n.Storedtype = p.parseTypename() + default: + p.syntaxErrorAt() + } + return &ast.Node{Node: &ast.Node_CreateOpClassItem{CreateOpClassItem: n}} +} + +// parseAlterOpFamilyStmt is gram.y's AlterOpFamilyStmt; ALTER OPERATOR +// FAMILY any_name USING name consumed and passed as obj (family name last +// as in the object list convention). +func (p *parser) parseAlterOpFamilyStmtImpl(opfamilyname []*ast.Node, amname string) *ast.Node { + n := &ast.AlterOpFamilyStmt{Opfamilyname: opfamilyname, Amname: amname} + switch { + case p.have(ast.Token_ADD_P): + n.Items = p.parseOpclassItemList() + case p.have(ast.Token_DROP): + n.IsDrop = true + // opclass_drop_list + for { + d := &ast.CreateOpClassItem{} + switch { + case p.have(ast.Token_OPERATOR): + d.Itemtype = opclassItemOperator + case p.have(ast.Token_FUNCTION): + d.Itemtype = opclassItemFunction + default: + p.syntaxErrorAt() + } + d.Number = p.iconst() + p.expect(ast.Token('(')) + d.ClassArgs = p.parseTypeList() + p.expect(ast.Token(')')) + n.Items = append(n.Items, + &ast.Node{Node: &ast.Node_CreateOpClassItem{CreateOpClassItem: d}}) + if !p.have(ast.Token(',')) { + break + } + } + default: + p.syntaxErrorAt() + } + return &ast.Node{Node: &ast.Node_AlterOpFamilyStmt{AlterOpFamilyStmt: n}} +} + +// parseCreateStatsStmt is gram.y's CreateStatsStmt; CREATE STATISTICS +// consumed. +func (p *parser) parseCreateStatsStmt() *ast.Node { + n := &ast.CreateStatsStmt{} + if p.have(ast.Token_IF_P) { + p.expect(ast.Token_NOT) + p.expect(ast.Token_EXISTS) + n.IfNotExists = true + n.Defnames = p.anyName() + } else if p.kind() != ast.Token_ON && p.kind() != ast.Token('(') { + n.Defnames = p.anyName() + } + if p.have(ast.Token('(')) { + n.StatTypes = p.nameList() + p.expect(ast.Token(')')) + } + p.expect(ast.Token_ON) + n.Exprs = []*ast.Node{p.parseStatsParam()} + for p.have(ast.Token(',')) { + n.Exprs = append(n.Exprs, p.parseStatsParam()) + } + p.expect(ast.Token_FROM) + n.Relations = p.parseFromList() + return &ast.Node{Node: &ast.Node_CreateStatsStmt{CreateStatsStmt: n}} +} + +// parseStatsParam is gram.y's stats_param. +func (p *parser) parseStatsParam() *ast.Node { + n := &ast.StatsElem{} + switch { + case p.kind() == ast.Token('('): + p.next() + n.Expr = p.parseAExpr(0) + p.expect(ast.Token(')')) + case p.startsFunctionCallAhead(): + n.Expr = p.parseFuncExprWindowless() + default: + n.Name = p.colId() + } + return &ast.Node{Node: &ast.Node_StatsElem{StatsElem: n}} +} diff --git a/internal/parse/ddl_dispatch.go b/internal/parse/ddl_dispatch.go index 0f061e7..c5f3dc0 100644 --- a/internal/parse/ddl_dispatch.go +++ b/internal/parse/ddl_dispatch.go @@ -48,6 +48,60 @@ func (p *parser) parseCreateDispatch() *ast.Node { case ast.Token_POLICY: p.next() return p.parseCreatePolicyStmt() + case ast.Token_AGGREGATE: + p.next() + return p.parseCreateAggregateStmt(false) + case ast.Token_OPERATOR: + p.next() + return p.parseCreateOperatorStmt() + case ast.Token_TYPE_P: + p.next() + return p.parseCreateTypeStmt() + case ast.Token_STATISTICS: + p.next() + return p.parseCreateStatsStmt() + case ast.Token_COLLATION: + // gram.y: DefineStmt COLLATION arms + p.next() + n := &ast.DefineStmt{Kind: ast.ObjectType_OBJECT_COLLATION} + if p.have(ast.Token_IF_P) { + p.expect(ast.Token_NOT) + p.expect(ast.Token_EXISTS) + n.IfNotExists = true + } + n.Defnames = p.anyName() + if ftok := p.peek(); ftok.Kind == ast.Token_FROM { + p.next() + ntok := p.peek() + n.Definition = []*ast.Node{makeDefElem("from", nList(p.anyName()), ntok.Start)} + } else { + n.Definition = p.parseDefinition() + } + return nDefineStmt(n) + case ast.Token_TEXT_P: + if p.kindN(1) == ast.Token_SEARCH { + p.next() + p.next() + var kind ast.ObjectType + switch p.kind() { + case ast.Token_PARSER: + kind = ast.ObjectType_OBJECT_TSPARSER + case ast.Token_DICTIONARY: + kind = ast.ObjectType_OBJECT_TSDICTIONARY + case ast.Token_TEMPLATE: + kind = ast.ObjectType_OBJECT_TSTEMPLATE + case ast.Token_CONFIGURATION: + kind = ast.ObjectType_OBJECT_TSCONFIGURATION + default: + p.syntaxErrorAt() + } + p.next() + return nDefineStmt(&ast.DefineStmt{ + Kind: kind, + Defnames: p.anyName(), + Definition: p.parseDefinition(), + }) + } case ast.Token_ACCESS: if p.kindN(1) == ast.Token_METHOD { p.next() @@ -143,6 +197,9 @@ func (p *parser) parseCreateOrReplace(schemaElt bool) *ast.Node { } case ast.Token_FUNCTION, ast.Token_PROCEDURE: return p.parseCreateFunctionStmt(true) + case ast.Token_AGGREGATE: + p.next() + return p.parseCreateAggregateStmt(true) } p.syntaxErrorAt() return nil diff --git a/parser/testdata/deparse/postgres_regress/create_operator.metadata.json b/parser/testdata/deparse/postgres_regress/create_operator.metadata.json index bb4c277..ee386e5 100644 --- a/parser/testdata/deparse/postgres_regress/create_operator.metadata.json +++ b/parser/testdata/deparse/postgres_regress/create_operator.metadata.json @@ -10,7 +10,6 @@ "008", "009", "010", - "011", "012", "013", "015", diff --git a/parser/testdata/deparse/postgres_regress/stats_ext.metadata.json b/parser/testdata/deparse/postgres_regress/stats_ext.metadata.json index b2f6706..c8ed76b 100644 --- a/parser/testdata/deparse/postgres_regress/stats_ext.metadata.json +++ b/parser/testdata/deparse/postgres_regress/stats_ext.metadata.json @@ -2,9 +2,6 @@ "todo": [ "001", "002", - "003", - "004", - "005", "006", "007", "008", @@ -23,8 +20,6 @@ "021", "022", "023", - "024", - "025", "026", "027", "028", diff --git a/parser/testdata/parse/deparse/ddl_create_type.metadata.json b/parser/testdata/parse/deparse/ddl_create_type.metadata.json index f23fe5c..737fd31 100644 --- a/parser/testdata/parse/deparse/ddl_create_type.metadata.json +++ b/parser/testdata/parse/deparse/ddl_create_type.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "001" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/aggregates.metadata.json b/parser/testdata/parse/postgres_regress/aggregates.metadata.json index 7b2cb6c..1309172 100644 --- a/parser/testdata/parse/postgres_regress/aggregates.metadata.json +++ b/parser/testdata/parse/postgres_regress/aggregates.metadata.json @@ -1,15 +1,5 @@ { "todo": [ - "368", - "372", - "373", - "383", - "384", - "385", - "392", - "393", - "398", - "440", - "450" + "368" ] } diff --git a/parser/testdata/parse/postgres_regress/alter_generic.metadata.json b/parser/testdata/parse/postgres_regress/alter_generic.metadata.json index 3f5edae..8b48c69 100644 --- a/parser/testdata/parse/postgres_regress/alter_generic.metadata.json +++ b/parser/testdata/parse/postgres_regress/alter_generic.metadata.json @@ -1,9 +1,5 @@ { "todo": [ - "017", - "018", - "036", - "037", "053", "054", "061", @@ -17,92 +13,6 @@ "077", "078", "081", - "082", - "095", - "096", - "101", - "107", - "108", - "111", - "112", - "127", - "128", - "131", - "132", - "152", - "153", - "154", - "157", - "158", - "159", - "160", - "161", - "162", - "163", - "164", - "168", - "170", - "178", - "180", - "182", - "183", - "184", - "186", - "187", - "189", - "190", - "192", - "193", - "195", - "196", - "197", - "200", - "202", - "206", - "208", - "212", - "214", - "218", - "220", - "223", - "224", - "226", - "227", - "228", - "229", - "230", - "231", - "232", - "234", - "235", - "236", - "237", - "238", - "240", - "241", - "242", - "243", - "244", - "245", - "249", - "250", - "258", - "259", - "269", - "270", - "277", - "278", - "288", - "289", - "296", - "297", - "306", - "307", - "311", - "313", - "315", - "316", - "320", - "322" + "082" ] } diff --git a/parser/testdata/parse/postgres_regress/alter_operator.metadata.json b/parser/testdata/parse/postgres_regress/alter_operator.metadata.json index e553de6..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/alter_operator.metadata.json +++ b/parser/testdata/parse/postgres_regress/alter_operator.metadata.json @@ -1,10 +1,3 @@ { - "todo": [ - "003", - "028", - "029", - "030", - "046", - "047" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/alter_table.metadata.json b/parser/testdata/parse/postgres_regress/alter_table.metadata.json index 8a8bf84..e5b52e2 100644 --- a/parser/testdata/parse/postgres_regress/alter_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/alter_table.metadata.json @@ -1,13 +1,7 @@ { "todo": [ "1043", - "1045", - "1046", "1047", - "1048", - "1049", - "1050", - "1051", "1077", "1078", "1079", @@ -58,13 +52,11 @@ "1505", "1527", "1554", - "1586", "1605", "1606", "1611", "1612", "1616", - "1618", "1619", "1622", "1629", @@ -100,7 +92,6 @@ "886", "897", "898", - "924", - "942" + "924" ] } diff --git a/parser/testdata/parse/postgres_regress/arrays.metadata.json b/parser/testdata/parse/postgres_regress/arrays.metadata.json index a9a4828..def4101 100644 --- a/parser/testdata/parse/postgres_regress/arrays.metadata.json +++ b/parser/testdata/parse/postgres_regress/arrays.metadata.json @@ -1,7 +1,6 @@ { "todo": [ "312", - "315", "451" ] } diff --git a/parser/testdata/parse/postgres_regress/case.metadata.json b/parser/testdata/parse/postgres_regress/case.metadata.json index f5529c8..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/case.metadata.json +++ b/parser/testdata/parse/postgres_regress/case.metadata.json @@ -1,7 +1,3 @@ { - "todo": [ - "048", - "055", - "060" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json b/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json index f840f77..7a80072 100644 --- a/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json @@ -1,34 +1,5 @@ { "todo": [ - "156", - "160", - "162", - "163", - "165", - "167", - "169", - "170", - "189", - "192", - "200", - "201", - "209", - "213", - "216", - "217", - "219", - "222", - "225", - "226", - "228", - "234", - "235", - "236", - "249", - "250", - "253", - "255", - "366", - "501" + "192" ] } diff --git a/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json b/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json index 19cd32d..0925097 100644 --- a/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json @@ -1,17 +1,5 @@ { "todo": [ - "156", - "157", - "158", - "160", - "161", - "162", - "163", - "182", - "185", - "193", - "194", - "200", - "201" + "185" ] } diff --git a/parser/testdata/parse/postgres_regress/collate.metadata.json b/parser/testdata/parse/postgres_regress/collate.metadata.json index 497f22d..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/collate.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.metadata.json @@ -1,22 +1,3 @@ { - "todo": [ - "115", - "117", - "118", - "119", - "120", - "121", - "122", - "126", - "134", - "135", - "136", - "137", - "138", - "139", - "140", - "141", - "142", - "143" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/collate.utf8.metadata.json b/parser/testdata/parse/postgres_regress/collate.utf8.metadata.json index e966305..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/collate.utf8.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.utf8.metadata.json @@ -1,7 +1,3 @@ { - "todo": [ - "003", - "004", - "006" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json b/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json index d293032..24c2e81 100644 --- a/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json @@ -1,16 +1,5 @@ { "todo": [ - "127", - "128", - "129", - "131", - "132", - "133", - "134", - "153", - "156", - "164", - "165", - "171" + "156" ] } diff --git a/parser/testdata/parse/postgres_regress/create_aggregate.metadata.json b/parser/testdata/parse/postgres_regress/create_aggregate.metadata.json index ca214b0..f28a9ef 100644 --- a/parser/testdata/parse/postgres_regress/create_aggregate.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_aggregate.metadata.json @@ -1,37 +1,6 @@ { "todo": [ - "001", - "005", "006", - "007", - "008", - "013", - "014", - "017", - "018", - "020", - "023", - "024", - "027", - "029", - "030", - "031", - "034", - "035", - "036", - "037", - "038", - "039", - "042", - "043", - "045", - "047", - "048", - "050", - "053", - "055", - "057", - "058", - "059" + "014" ] } diff --git a/parser/testdata/parse/postgres_regress/create_am.metadata.json b/parser/testdata/parse/postgres_regress/create_am.metadata.json index 8c28074..14592fe 100644 --- a/parser/testdata/parse/postgres_regress/create_am.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_am.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "005", "132", "133", "134", diff --git a/parser/testdata/parse/postgres_regress/create_cast.metadata.json b/parser/testdata/parse/postgres_regress/create_cast.metadata.json index 5589cf5..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/create_cast.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_cast.metadata.json @@ -1,6 +1,3 @@ { - "todo": [ - "001", - "004" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/create_operator.metadata.json b/parser/testdata/parse/postgres_regress/create_operator.metadata.json index ea69eb9..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/create_operator.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_operator.metadata.json @@ -1,30 +1,3 @@ { - "todo": [ - "001", - "002", - "003", - "011", - "012", - "030", - "033", - "036", - "040", - "042", - "043", - "044", - "047", - "052", - "056", - "061", - "065", - "070", - "074", - "079", - "082", - "085", - "086", - "088", - "089", - "090" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/create_table.metadata.json b/parser/testdata/parse/postgres_regress/create_table.metadata.json index 4f25a29..de28fd1 100644 --- a/parser/testdata/parse/postgres_regress/create_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_table.metadata.json @@ -3,7 +3,6 @@ "002", "032", "058", - "076", - "267" + "076" ] } diff --git a/parser/testdata/parse/postgres_regress/create_table_like.metadata.json b/parser/testdata/parse/postgres_regress/create_table_like.metadata.json index 672522e..fa04876 100644 --- a/parser/testdata/parse/postgres_regress/create_table_like.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_table_like.metadata.json @@ -1,8 +1,5 @@ { "todo": [ - "063", - "087", - "088", "139" ] } diff --git a/parser/testdata/parse/postgres_regress/create_type.metadata.json b/parser/testdata/parse/postgres_regress/create_type.metadata.json index 934ba95..64858eb 100644 --- a/parser/testdata/parse/postgres_regress/create_type.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_type.metadata.json @@ -1,24 +1,6 @@ { "todo": [ "005", - "006", - "007", - "008", - "011", - "012", - "013", - "018", - "019", - "023", - "024", - "025", - "027", - "028", - "037", - "040", - "043", - "063", - "068", - "074" + "028" ] } diff --git a/parser/testdata/parse/postgres_regress/dependency.metadata.json b/parser/testdata/parse/postgres_regress/dependency.metadata.json index 8d57daf..62986cb 100644 --- a/parser/testdata/parse/postgres_regress/dependency.metadata.json +++ b/parser/testdata/parse/postgres_regress/dependency.metadata.json @@ -1,7 +1,5 @@ { "todo": [ - "045", - "046", "051" ] } diff --git a/parser/testdata/parse/postgres_regress/domain.metadata.json b/parser/testdata/parse/postgres_regress/domain.metadata.json index 219ec43..b21f4ad 100644 --- a/parser/testdata/parse/postgres_regress/domain.metadata.json +++ b/parser/testdata/parse/postgres_regress/domain.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "213", - "234" + "213" ] } diff --git a/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json b/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json index cd4fa13..b325f48 100644 --- a/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json +++ b/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json @@ -2,9 +2,6 @@ "todo": [ "026", "049", - "055", - "061", - "075", "095" ] } diff --git a/parser/testdata/parse/postgres_regress/drop_operator.metadata.json b/parser/testdata/parse/postgres_regress/drop_operator.metadata.json index e6e214a..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/drop_operator.metadata.json +++ b/parser/testdata/parse/postgres_regress/drop_operator.metadata.json @@ -1,8 +1,3 @@ { - "todo": [ - "001", - "002", - "007", - "008" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/enum.metadata.json b/parser/testdata/parse/postgres_regress/enum.metadata.json index 54ffa9d..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/enum.metadata.json +++ b/parser/testdata/parse/postgres_regress/enum.metadata.json @@ -1,11 +1,3 @@ { - "todo": [ - "001", - "009", - "026", - "122", - "129", - "154", - "159" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/equivclass.metadata.json b/parser/testdata/parse/postgres_regress/equivclass.metadata.json index f9f4c13..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/equivclass.metadata.json +++ b/parser/testdata/parse/postgres_regress/equivclass.metadata.json @@ -1,19 +1,3 @@ { - "todo": [ - "001", - "004", - "005", - "008", - "014", - "015", - "017", - "018", - "020", - "021", - "023", - "024", - "026", - "027", - "029" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/errors.metadata.json b/parser/testdata/parse/postgres_regress/errors.metadata.json index 0f945ee..7163c1e 100644 --- a/parser/testdata/parse/postgres_regress/errors.metadata.json +++ b/parser/testdata/parse/postgres_regress/errors.metadata.json @@ -1,7 +1,5 @@ { "todo": [ - "026", - "027", "078", "079", "080", diff --git a/parser/testdata/parse/postgres_regress/event_trigger.metadata.json b/parser/testdata/parse/postgres_regress/event_trigger.metadata.json index ad975b1..c3fd2dc 100644 --- a/parser/testdata/parse/postgres_regress/event_trigger.metadata.json +++ b/parser/testdata/parse/postgres_regress/event_trigger.metadata.json @@ -3,11 +3,9 @@ "046", "047", "048", - "074", "099", "109", "110", - "125", "133", "136", "140", diff --git a/parser/testdata/parse/postgres_regress/expressions.metadata.json b/parser/testdata/parse/postgres_regress/expressions.metadata.json index f242142..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/expressions.metadata.json +++ b/parser/testdata/parse/postgres_regress/expressions.metadata.json @@ -1,9 +1,3 @@ { - "todo": [ - "051", - "055", - "060", - "061", - "062" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/float4.metadata.json b/parser/testdata/parse/postgres_regress/float4.metadata.json index 05fc447..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/float4.metadata.json +++ b/parser/testdata/parse/postgres_regress/float4.metadata.json @@ -1,6 +1,3 @@ { - "todo": [ - "090", - "093" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/float8.metadata.json b/parser/testdata/parse/postgres_regress/float8.metadata.json index a6161ec..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/float8.metadata.json +++ b/parser/testdata/parse/postgres_regress/float8.metadata.json @@ -1,6 +1,3 @@ { - "todo": [ - "159", - "162" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/hash_func.metadata.json b/parser/testdata/parse/postgres_regress/hash_func.metadata.json index 0e3b015..9a23c6c 100644 --- a/parser/testdata/parse/postgres_regress/hash_func.metadata.json +++ b/parser/testdata/parse/postgres_regress/hash_func.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "026", "032", "035" ] diff --git a/parser/testdata/parse/postgres_regress/join.metadata.json b/parser/testdata/parse/postgres_regress/join.metadata.json index 2cbaac1..2703b95 100644 --- a/parser/testdata/parse/postgres_regress/join.metadata.json +++ b/parser/testdata/parse/postgres_regress/join.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "270", - "712" + "270" ] } diff --git a/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json b/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json index ee89b15..36ed8a5 100644 --- a/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json +++ b/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json @@ -1,16 +1,7 @@ { "todo": [ - "512", - "519", "522", - "523", "525", - "526", - "528", - "529", - "530", - "537", - "582", - "583" + "582" ] } diff --git a/parser/testdata/parse/postgres_regress/object_address.metadata.json b/parser/testdata/parse/postgres_regress/object_address.metadata.json index ff2e536..e374cb0 100644 --- a/parser/testdata/parse/postgres_regress/object_address.metadata.json +++ b/parser/testdata/parse/postgres_regress/object_address.metadata.json @@ -2,20 +2,13 @@ "todo": [ "007", "008", - "009", - "010", - "011", - "012", "017", - "018", "019", - "020", "026", "027", "030", "032", "033", - "035", - "036" + "035" ] } diff --git a/parser/testdata/parse/postgres_regress/partition_prune.metadata.json b/parser/testdata/parse/postgres_regress/partition_prune.metadata.json index 3c0ae53..0dd9aba 100644 --- a/parser/testdata/parse/postgres_regress/partition_prune.metadata.json +++ b/parser/testdata/parse/postgres_regress/partition_prune.metadata.json @@ -1,8 +1,5 @@ { "todo": [ - "557", - "565", - "689", - "690" + "565" ] } diff --git a/parser/testdata/parse/postgres_regress/polymorphism.metadata.json b/parser/testdata/parse/postgres_regress/polymorphism.metadata.json index c32c207..81528ab 100644 --- a/parser/testdata/parse/postgres_regress/polymorphism.metadata.json +++ b/parser/testdata/parse/postgres_regress/polymorphism.metadata.json @@ -6,66 +6,11 @@ "081", "082", "083", - "084", - "085", - "086", - "087", - "088", - "089", - "090", - "091", - "092", - "093", - "094", - "095", - "096", - "097", - "098", - "099", - "100", - "101", - "102", - "103", - "104", - "105", - "106", - "107", "108", "109", "110", "111", "112", - "113", - "114", - "115", - "116", - "117", - "118", - "119", - "120", - "121", - "122", - "123", - "124", - "125", - "126", - "127", - "128", - "129", - "130", - "131", - "132", - "133", - "134", - "135", - "136", - "137", - "138", - "176", - "180", - "182", - "183", - "186", - "187" + "113" ] } diff --git a/parser/testdata/parse/postgres_regress/privileges.metadata.json b/parser/testdata/parse/postgres_regress/privileges.metadata.json index 6d3503f..c08b81d 100644 --- a/parser/testdata/parse/postgres_regress/privileges.metadata.json +++ b/parser/testdata/parse/postgres_regress/privileges.metadata.json @@ -6,8 +6,6 @@ "128", "129", "130", - "133", - "195", - "203" + "133" ] } diff --git a/parser/testdata/parse/postgres_regress/publication.metadata.json b/parser/testdata/parse/postgres_regress/publication.metadata.json index 06a4496..e0d4c09 100644 --- a/parser/testdata/parse/postgres_regress/publication.metadata.json +++ b/parser/testdata/parse/postgres_regress/publication.metadata.json @@ -49,11 +49,9 @@ "116", "118", "119", - "121", "122", "124", "125", - "126", "127", "128", "129", @@ -62,7 +60,6 @@ "132", "133", "134", - "135", "137", "140", "141", diff --git a/parser/testdata/parse/postgres_regress/rangetypes.metadata.json b/parser/testdata/parse/postgres_regress/rangetypes.metadata.json index 7448ea1..06d98f1 100644 --- a/parser/testdata/parse/postgres_regress/rangetypes.metadata.json +++ b/parser/testdata/parse/postgres_regress/rangetypes.metadata.json @@ -1,14 +1,6 @@ { "todo": [ - "317", - "324", - "332", - "333", - "361", "366", - "367", - "369", - "371", - "401" + "369" ] } diff --git a/parser/testdata/parse/postgres_regress/select_parallel.metadata.json b/parser/testdata/parse/postgres_regress/select_parallel.metadata.json index e373677..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/select_parallel.metadata.json +++ b/parser/testdata/parse/postgres_regress/select_parallel.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "231" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/sqljson.metadata.json b/parser/testdata/parse/postgres_regress/sqljson.metadata.json index 39ac5e6..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/sqljson.metadata.json +++ b/parser/testdata/parse/postgres_regress/sqljson.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "103" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/sqljson_queryfuncs.metadata.json b/parser/testdata/parse/postgres_regress/sqljson_queryfuncs.metadata.json index b214c39..9ed2937 100644 --- a/parser/testdata/parse/postgres_regress/sqljson_queryfuncs.metadata.json +++ b/parser/testdata/parse/postgres_regress/sqljson_queryfuncs.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "061", "176", "181", "182" diff --git a/parser/testdata/parse/postgres_regress/stats_ext.metadata.json b/parser/testdata/parse/postgres_regress/stats_ext.metadata.json index a60b9c3..e9661d9 100644 --- a/parser/testdata/parse/postgres_regress/stats_ext.metadata.json +++ b/parser/testdata/parse/postgres_regress/stats_ext.metadata.json @@ -1,118 +1,13 @@ { "todo": [ - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "021", - "023", - "024", - "025", - "028", - "037", - "041", - "044", - "047", - "048", - "049", - "057", - "072", - "084", - "094", - "101", - "102", - "104", - "106", - "107", - "108", "119", "120", "121", "122", - "125", - "126", - "127", - "128", - "129", - "130", - "131", - "132", - "133", - "149", - "189", - "199", - "216", - "217", - "227", - "237", - "247", - "258", - "259", - "277", - "287", - "320", "348", - "378", - "414", - "415", - "428", - "438", - "470", "497", "499", - "517", - "518", - "519", - "534", - "556", - "574", - "585", - "592", - "601", - "620", - "641", - "642", - "657", - "669", - "679", - "684", - "692", - "695", - "696", - "697", - "699", - "701", - "704", - "705", - "709", - "710", - "711", - "729", - "731", - "768", - "769", "780", - "785", - "786", - "790", - "791", - "796", - "797", - "801", - "802", "806" ] } diff --git a/parser/testdata/parse/postgres_regress/subselect.metadata.json b/parser/testdata/parse/postgres_regress/subselect.metadata.json index fad8d38..89d3a90 100644 --- a/parser/testdata/parse/postgres_regress/subselect.metadata.json +++ b/parser/testdata/parse/postgres_regress/subselect.metadata.json @@ -1,7 +1,6 @@ { "todo": [ "089", - "093", - "164" + "093" ] } diff --git a/parser/testdata/parse/postgres_regress/temp.metadata.json b/parser/testdata/parse/postgres_regress/temp.metadata.json index 33ee0b6..b31f23c 100644 --- a/parser/testdata/parse/postgres_regress/temp.metadata.json +++ b/parser/testdata/parse/postgres_regress/temp.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "135", "138" ] } diff --git a/parser/testdata/parse/postgres_regress/test_setup.metadata.json b/parser/testdata/parse/postgres_regress/test_setup.metadata.json index 4bdcbd8..3204043 100644 --- a/parser/testdata/parse/postgres_regress/test_setup.metadata.json +++ b/parser/testdata/parse/postgres_regress/test_setup.metadata.json @@ -1,10 +1,5 @@ { "todo": [ - "004", - "059", - "060", - "061", - "065", - "067" + "004" ] } diff --git a/parser/testdata/parse/postgres_regress/tsdicts.metadata.json b/parser/testdata/parse/postgres_regress/tsdicts.metadata.json index 7813aa7..75242b0 100644 --- a/parser/testdata/parse/postgres_regress/tsdicts.metadata.json +++ b/parser/testdata/parse/postgres_regress/tsdicts.metadata.json @@ -1,29 +1,11 @@ { "todo": [ - "001", - "017", - "033", - "052", - "070", - "071", - "072", - "073", - "074", - "075", - "076", - "088", - "090", "091", - "095", "096", "102", "106", - "110", "111", - "116", "117", - "121", - "122", "123", "124", "125", diff --git a/parser/testdata/parse/postgres_regress/tsrf.metadata.json b/parser/testdata/parse/postgres_regress/tsrf.metadata.json index 7f28e1c..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/tsrf.metadata.json +++ b/parser/testdata/parse/postgres_regress/tsrf.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "065" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/update.metadata.json b/parser/testdata/parse/postgres_regress/update.metadata.json index 1fac85a..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/update.metadata.json +++ b/parser/testdata/parse/postgres_regress/update.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "243" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/window.metadata.json b/parser/testdata/parse/postgres_regress/window.metadata.json index ed33ae5..922c662 100644 --- a/parser/testdata/parse/postgres_regress/window.metadata.json +++ b/parser/testdata/parse/postgres_regress/window.metadata.json @@ -1,11 +1,6 @@ { "todo": [ "136", - "137", - "317", - "318", - "322", - "323", - "330" + "137" ] } From 3fa09396ec13e2175c3d3b11b2afe28000ca9933 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 16 Aug 2026 19:37:16 +0000 Subject: [PATCH 13/24] Milestone 7: publications and subscriptions Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01J19Kf5LpGUhi2vxFJjzQJE --- internal/parse/ddl_alter_generic.go | 30 +- internal/parse/ddl_dispatch.go | 6 + internal/parse/ddl_publication.go | 284 ++++++++++++++++++ .../publication.metadata.json | 3 - .../subscription.metadata.json | 2 - .../testdata/parse/libpg_query.metadata.json | 3 +- .../alter_table.metadata.json | 1 - .../object_address.metadata.json | 5 +- .../publication.metadata.json | 228 +------------- .../subscription.metadata.json | 94 +----- 10 files changed, 323 insertions(+), 333 deletions(-) create mode 100644 internal/parse/ddl_publication.go diff --git a/internal/parse/ddl_alter_generic.go b/internal/parse/ddl_alter_generic.go index 1dc6138..a3c0043 100644 --- a/internal/parse/ddl_alter_generic.go +++ b/internal/parse/ddl_alter_generic.go @@ -132,8 +132,36 @@ func (p *parser) roleSpecToRoleId(spec *ast.RoleSpec, loc int32) string { // parseAlterDispatch routes a statement beginning with ALTER. The ALTER // token is not yet consumed. func (p *parser) parseAlterDispatch() *ast.Node { - p.expect(ast.Token_ALTER) + alterTok := p.expect(ast.Token_ALTER) switch p.kind() { + case ast.Token_PUBLICATION: + p.next() + pubname := p.name() + switch p.kind() { + case ast.Token_RENAME, ast.Token_OWNER: + if n := p.parseAlterGenericTail(ast.ObjectType_OBJECT_PUBLICATION, nStr(pubname), nil, false, + tailRename|tailOwner); n != nil { + if r := n.GetRenameStmt(); r != nil { + r.Object = nStr(pubname) + } + return n + } + p.syntaxErrorAt() + } + return p.parseAlterPublicationStmt(pubname) + + case ast.Token_SUBSCRIPTION: + p.next() + subname := p.name() + switch p.kind() { + case ast.Token_RENAME, ast.Token_OWNER: + if n := p.parseAlterGenericTail(ast.ObjectType_OBJECT_SUBSCRIPTION, nStr(subname), nil, false, + tailRename|tailOwner); n != nil { + return n + } + p.syntaxErrorAt() + } + return p.parseAlterSubscriptionStmt(subname, alterTok.Start) case ast.Token_AGGREGATE: p.next() obj := p.parseAggregateWithArgtypes() diff --git a/internal/parse/ddl_dispatch.go b/internal/parse/ddl_dispatch.go index c5f3dc0..235e4de 100644 --- a/internal/parse/ddl_dispatch.go +++ b/internal/parse/ddl_dispatch.go @@ -48,6 +48,12 @@ func (p *parser) parseCreateDispatch() *ast.Node { case ast.Token_POLICY: p.next() return p.parseCreatePolicyStmt() + case ast.Token_PUBLICATION: + p.next() + return p.parseCreatePublicationStmt() + case ast.Token_SUBSCRIPTION: + p.next() + return p.parseCreateSubscriptionStmt() case ast.Token_AGGREGATE: p.next() return p.parseCreateAggregateStmt(false) diff --git a/internal/parse/ddl_publication.go b/internal/parse/ddl_publication.go new file mode 100644 index 0000000..1f09569 --- /dev/null +++ b/internal/parse/ddl_publication.go @@ -0,0 +1,284 @@ +package parse + +// Logical replication DDL: CreatePublicationStmt, AlterPublicationStmt, +// CreateSubscriptionStmt, AlterSubscriptionStmt. + +import ( + "github.com/sqlc-dev/oliphant/ast" +) + +// parseCreatePublicationStmt is gram.y's CreatePublicationStmt; CREATE +// PUBLICATION consumed. +func (p *parser) parseCreatePublicationStmt() *ast.Node { + n := &ast.CreatePublicationStmt{Pubname: p.name()} + if p.have(ast.Token_FOR) { + if p.kind() == ast.Token_ALL && p.kindN(1) == ast.Token_TABLES { + p.next() + p.next() + n.ForAllTables = true + } else { + n.Pubobjects = p.parsePubObjList() + } + } + n.Options = p.parseOptDefinition() + return &ast.Node{Node: &ast.Node_CreatePublicationStmt{CreatePublicationStmt: n}} +} + +// parseAlterPublicationStmt handles ALTER PUBLICATION name ...; the name's +// tail (RENAME/OWNER) is resolved by the caller. +func (p *parser) parseAlterPublicationStmt(name string) *ast.Node { + n := &ast.AlterPublicationStmt{Pubname: name} + switch { + case p.have(ast.Token_SET): + if p.kind() == ast.Token('(') { + n.Options = p.parseDefinition() + return &ast.Node{Node: &ast.Node_AlterPublicationStmt{AlterPublicationStmt: n}} + } + n.Action = ast.AlterPublicationAction_AP_SetObjects + n.Pubobjects = p.parsePubObjList() + case p.have(ast.Token_ADD_P): + n.Action = ast.AlterPublicationAction_AP_AddObjects + n.Pubobjects = p.parsePubObjList() + case p.have(ast.Token_DROP): + n.Action = ast.AlterPublicationAction_AP_DropObjects + n.Pubobjects = p.parsePubObjList() + default: + p.syntaxErrorAt() + } + return &ast.Node{Node: &ast.Node_AlterPublicationStmt{AlterPublicationStmt: n}} +} + +// parsePubObjList is gram.y's pub_obj_list plus preprocess_pubobj_list. +func (p *parser) parsePubObjList() []*ast.Node { + list := []*ast.Node{p.parsePublicationObjSpec()} + for p.have(ast.Token(',')) { + list = append(list, p.parsePublicationObjSpec()) + } + p.preprocessPubobjList(list) + return list +} + +func nPublicationObjSpec(n *ast.PublicationObjSpec) *ast.Node { + return &ast.Node{Node: &ast.Node_PublicationObjSpec{PublicationObjSpec: n}} +} + +// parsePublicationObjSpec is gram.y's PublicationObjSpec. +func (p *parser) parsePublicationObjSpec() *ast.Node { + tok := p.peek() + switch tok.Kind { + case ast.Token_TABLE: + p.next() + n := &ast.PublicationObjSpec{ + Pubobjtype: ast.PublicationObjSpecType_PUBLICATIONOBJ_TABLE, + Pubtable: &ast.PublicationTable{Relation: p.parseRelationExprVar()}, + } + p.finishPublicationTable(n.Pubtable) + return nPublicationObjSpec(n) + case ast.Token_TABLES: + p.next() + p.expect(ast.Token_IN_P) + p.expect(ast.Token_SCHEMA) + stok := p.peek() + if p.have(ast.Token_CURRENT_SCHEMA) { + return nPublicationObjSpec(&ast.PublicationObjSpec{ + Pubobjtype: ast.PublicationObjSpecType_PUBLICATIONOBJ_TABLES_IN_CUR_SCHEMA, + Location: stok.Start, + }) + } + return nPublicationObjSpec(&ast.PublicationObjSpec{ + Pubobjtype: ast.PublicationObjSpecType_PUBLICATIONOBJ_TABLES_IN_SCHEMA, + Name: p.colId(), + Location: stok.Start, + }) + case ast.Token_CURRENT_SCHEMA: + p.next() + return nPublicationObjSpec(&ast.PublicationObjSpec{ + Pubobjtype: ast.PublicationObjSpecType_PUBLICATIONOBJ_CONTINUATION, + Location: tok.Start, + }) + case ast.Token_ONLY: + // extended_relation_expr + p.next() + n := &ast.PublicationObjSpec{ + Pubobjtype: ast.PublicationObjSpecType_PUBLICATIONOBJ_CONTINUATION, + Pubtable: &ast.PublicationTable{}, + } + var rel *ast.RangeVar + if p.have(ast.Token('(')) { + rel = p.parseQualifiedName() + p.expect(ast.Token(')')) + } else { + rel = p.parseQualifiedName() + } + rel.Inh = false + n.Pubtable.Relation = rel + p.finishPublicationTable(n.Pubtable) + return nPublicationObjSpec(n) + } + + // ColId [indirection] forms and qualified_name '*'. + name := p.colId() + n := &ast.PublicationObjSpec{ + Pubobjtype: ast.PublicationObjSpecType_PUBLICATIONOBJ_CONTINUATION, + Location: tok.Start, + } + if p.kind() == ast.Token('.') { + ind := p.parseOptIndirection() + rel := p.makeRangeVarFromQualifiedName(name, ind, tok.Start) + if p.have(ast.Token('*')) { + rel.Inh = true + } + n.Pubtable = &ast.PublicationTable{Relation: rel} + p.finishPublicationTable(n.Pubtable) + return nPublicationObjSpec(n) + } + if p.have(ast.Token('*')) { + // extended_relation_expr: qualified_name '*' + rel := makeRangeVar("", name, tok.Start) + rel.Inh = true + n.Pubtable = &ast.PublicationTable{Relation: rel} + n.Location = 0 + p.finishPublicationTable(n.Pubtable) + return nPublicationObjSpec(n) + } + var cols []*ast.Node + if p.have(ast.Token('(')) { + cols = p.columnList() + p.expect(ast.Token(')')) + } + var where *ast.Node + if p.have(ast.Token_WHERE) { + p.expect(ast.Token('(')) + where = p.parseAExpr(0) + p.expect(ast.Token(')')) + } + if cols != nil || where != nil { + n.Pubtable = &ast.PublicationTable{ + Relation: makeRangeVar("", name, tok.Start), + Columns: cols, + WhereClause: where, + } + } else { + n.Name = name + } + return nPublicationObjSpec(n) +} + +// finishPublicationTable parses opt_column_list OptWhereClause into a +// PublicationTable. +func (p *parser) finishPublicationTable(t *ast.PublicationTable) { + if p.have(ast.Token('(')) { + t.Columns = p.columnList() + p.expect(ast.Token(')')) + } + if p.have(ast.Token_WHERE) { + p.expect(ast.Token('(')) + t.WhereClause = p.parseAExpr(0) + p.expect(ast.Token(')')) + } +} + +// preprocessPubobjList is gram.y's preprocess_pubobj_list. +func (p *parser) preprocessPubobjList(list []*ast.Node) { + if len(list) == 0 { + return + } + first := list[0].GetPublicationObjSpec() + if first.Pubobjtype == ast.PublicationObjSpecType_PUBLICATIONOBJ_CONTINUATION { + p.ereport("base_yyparse", "invalid publication object list", first.Location) + } + prev := ast.PublicationObjSpecType_PUBLICATIONOBJ_CONTINUATION + for _, item := range list { + obj := item.GetPublicationObjSpec() + if obj.Pubobjtype == ast.PublicationObjSpecType_PUBLICATIONOBJ_CONTINUATION { + obj.Pubobjtype = prev + } + switch obj.Pubobjtype { + case ast.PublicationObjSpecType_PUBLICATIONOBJ_TABLE: + if obj.Name == "" && obj.Pubtable == nil { + p.ereport("base_yyparse", "invalid table name", obj.Location) + } + if obj.Name != "" { + obj.Pubtable = &ast.PublicationTable{ + Relation: makeRangeVar("", obj.Name, obj.Location), + } + obj.Name = "" + } + case ast.PublicationObjSpecType_PUBLICATIONOBJ_TABLES_IN_SCHEMA, + ast.PublicationObjSpecType_PUBLICATIONOBJ_TABLES_IN_CUR_SCHEMA: + if obj.Pubtable != nil && obj.Pubtable.WhereClause != nil { + p.ereport("base_yyparse", "WHERE clause not allowed for schema", obj.Location) + } + if obj.Pubtable != nil && obj.Pubtable.Columns != nil { + p.ereport("base_yyparse", "column specification not allowed for schema", obj.Location) + } + switch { + case obj.Name != "": + obj.Pubobjtype = ast.PublicationObjSpecType_PUBLICATIONOBJ_TABLES_IN_SCHEMA + case obj.Pubtable == nil: + obj.Pubobjtype = ast.PublicationObjSpecType_PUBLICATIONOBJ_TABLES_IN_CUR_SCHEMA + default: + p.ereport("base_yyparse", "invalid schema name", obj.Location) + } + } + prev = obj.Pubobjtype + } +} + +// parseCreateSubscriptionStmt is gram.y's CreateSubscriptionStmt; CREATE +// SUBSCRIPTION consumed. +func (p *parser) parseCreateSubscriptionStmt() *ast.Node { + n := &ast.CreateSubscriptionStmt{Subname: p.name()} + p.expect(ast.Token_CONNECTION) + n.Conninfo = p.sconst() + p.expect(ast.Token_PUBLICATION) + n.Publication = p.nameList() + n.Options = p.parseOptDefinition() + return &ast.Node{Node: &ast.Node_CreateSubscriptionStmt{CreateSubscriptionStmt: n}} +} + +// parseAlterSubscriptionStmt handles ALTER SUBSCRIPTION name ...; alterLoc +// is the ALTER token's location (used by the ENABLE/DISABLE DefElem). +func (p *parser) parseAlterSubscriptionStmt(name string, alterLoc int32) *ast.Node { + n := &ast.AlterSubscriptionStmt{Subname: name} + switch { + case p.have(ast.Token_SET): + if p.have(ast.Token_PUBLICATION) { + n.Kind = ast.AlterSubscriptionType_ALTER_SUBSCRIPTION_SET_PUBLICATION + n.Publication = p.nameList() + n.Options = p.parseOptDefinition() + } else { + n.Kind = ast.AlterSubscriptionType_ALTER_SUBSCRIPTION_OPTIONS + n.Options = p.parseDefinition() + } + case p.have(ast.Token_CONNECTION): + n.Kind = ast.AlterSubscriptionType_ALTER_SUBSCRIPTION_CONNECTION + n.Conninfo = p.sconst() + case p.have(ast.Token_REFRESH): + p.expect(ast.Token_PUBLICATION) + n.Kind = ast.AlterSubscriptionType_ALTER_SUBSCRIPTION_REFRESH + n.Options = p.parseOptDefinition() + case p.have(ast.Token_ADD_P): + p.expect(ast.Token_PUBLICATION) + n.Kind = ast.AlterSubscriptionType_ALTER_SUBSCRIPTION_ADD_PUBLICATION + n.Publication = p.nameList() + n.Options = p.parseOptDefinition() + case p.have(ast.Token_DROP): + p.expect(ast.Token_PUBLICATION) + n.Kind = ast.AlterSubscriptionType_ALTER_SUBSCRIPTION_DROP_PUBLICATION + n.Publication = p.nameList() + n.Options = p.parseOptDefinition() + case p.have(ast.Token_ENABLE_P): + n.Kind = ast.AlterSubscriptionType_ALTER_SUBSCRIPTION_ENABLED + n.Options = []*ast.Node{makeDefElem("enabled", nBoolean(true), alterLoc)} + case p.have(ast.Token_DISABLE_P): + n.Kind = ast.AlterSubscriptionType_ALTER_SUBSCRIPTION_ENABLED + n.Options = []*ast.Node{makeDefElem("enabled", nBoolean(false), alterLoc)} + case p.have(ast.Token_SKIP): + n.Kind = ast.AlterSubscriptionType_ALTER_SUBSCRIPTION_SKIP + n.Options = p.parseDefinition() + default: + p.syntaxErrorAt() + } + return &ast.Node{Node: &ast.Node_AlterSubscriptionStmt{AlterSubscriptionStmt: n}} +} diff --git a/parser/testdata/deparse/postgres_regress/publication.metadata.json b/parser/testdata/deparse/postgres_regress/publication.metadata.json index 8cf9d31..d91846a 100644 --- a/parser/testdata/deparse/postgres_regress/publication.metadata.json +++ b/parser/testdata/deparse/postgres_regress/publication.metadata.json @@ -110,7 +110,6 @@ "108", "109", "110", - "111", "112", "113", "114", @@ -509,7 +508,6 @@ "507", "508", "509", - "510", "511", "512", "513", @@ -526,7 +524,6 @@ "524", "525", "526", - "527", "528", "529", "530", diff --git a/parser/testdata/deparse/postgres_regress/subscription.metadata.json b/parser/testdata/deparse/postgres_regress/subscription.metadata.json index 494e73b..1bf8a2b 100644 --- a/parser/testdata/deparse/postgres_regress/subscription.metadata.json +++ b/parser/testdata/deparse/postgres_regress/subscription.metadata.json @@ -5,8 +5,6 @@ "003", "004", "005", - "006", - "007", "008", "009", "010", diff --git a/parser/testdata/parse/libpg_query.metadata.json b/parser/testdata/parse/libpg_query.metadata.json index 75acf0e..e51835e 100644 --- a/parser/testdata/parse/libpg_query.metadata.json +++ b/parser/testdata/parse/libpg_query.metadata.json @@ -1,7 +1,6 @@ { "todo": [ "009", - "010", - "035" + "010" ] } diff --git a/parser/testdata/parse/postgres_regress/alter_table.metadata.json b/parser/testdata/parse/postgres_regress/alter_table.metadata.json index e5b52e2..0450856 100644 --- a/parser/testdata/parse/postgres_regress/alter_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/alter_table.metadata.json @@ -61,7 +61,6 @@ "1622", "1629", "1633", - "1648", "368", "427", "432", diff --git a/parser/testdata/parse/postgres_regress/object_address.metadata.json b/parser/testdata/parse/postgres_regress/object_address.metadata.json index e374cb0..a618d06 100644 --- a/parser/testdata/parse/postgres_regress/object_address.metadata.json +++ b/parser/testdata/parse/postgres_regress/object_address.metadata.json @@ -6,9 +6,6 @@ "019", "026", "027", - "030", - "032", - "033", - "035" + "030" ] } diff --git a/parser/testdata/parse/postgres_regress/publication.metadata.json b/parser/testdata/parse/postgres_regress/publication.metadata.json index e0d4c09..aa22592 100644 --- a/parser/testdata/parse/postgres_regress/publication.metadata.json +++ b/parser/testdata/parse/postgres_regress/publication.metadata.json @@ -1,255 +1,29 @@ { "todo": [ - "006", - "011", "013", - "014", - "015", - "016", "017", - "024", "026", - "028", - "029", - "030", - "031", - "032", - "033", - "035", - "037", - "038", - "039", - "041", - "042", "044", "045", - "046", - "047", - "048", - "049", - "056", - "057", - "062", - "063", "067", - "071", "076", - "078", - "092", - "094", - "095", - "096", - "098", - "099", - "103", - "107", - "111", "112", - "115", - "116", - "118", - "119", - "122", - "124", - "125", - "127", - "128", - "129", - "130", - "131", - "132", - "133", - "134", - "137", - "140", - "141", - "142", - "143", - "144", - "145", - "146", - "147", - "148", - "149", - "150", - "151", - "153", - "154", - "177", - "180", - "182", - "184", - "186", - "190", - "192", - "196", - "198", - "200", - "208", - "210", - "212", - "214", "216", - "217", - "218", "220", - "221", "223", - "224", "225", - "226", "227", "229", - "230", - "237", - "238", - "241", - "242", - "245", - "246", - "248", - "249", - "250", - "251", - "253", - "258", - "260", - "263", - "265", - "267", - "274", - "276", - "277", - "280", - "281", - "282", - "291", - "293", - "294", - "296", - "297", - "299", - "301", - "303", - "305", - "314", - "327", - "328", - "329", - "330", - "331", - "332", - "333", - "334", - "339", - "343", - "352", - "355", - "357", - "359", - "361", - "365", - "367", - "371", - "373", - "375", - "383", - "385", - "387", - "389", "391", - "392", - "393", "395", - "396", "398", - "399", "400", - "401", "402", "404", - "405", - "415", - "421", - "423", - "426", - "428", - "430", - "432", - "433", - "434", - "435", - "436", - "437", - "438", - "439", - "440", - "442", - "450", - "455", - "456", - "457", - "459", - "460", - "464", - "471", - "473", - "475", - "476", - "484", - "486", - "487", - "488", - "498", - "499", - "500", - "501", - "502", - "503", - "504", - "507", "509", - "510", - "511", - "512", - "513", - "517", - "518", - "519", - "520", - "521", - "522", - "523", - "524", - "525", - "526", - "527", "528", - "529", - "534", - "536", - "545", - "555", - "561", - "563", - "565", - "566", "568", - "589", - "592", - "594", - "597", - "600", - "602", - "612", - "623", - "635", "647", - "648", - "650", - "651", - "652", - "653", - "654" + "648" ] } diff --git a/parser/testdata/parse/postgres_regress/subscription.metadata.json b/parser/testdata/parse/postgres_regress/subscription.metadata.json index d9eb6e0..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/subscription.metadata.json +++ b/parser/testdata/parse/postgres_regress/subscription.metadata.json @@ -1,95 +1,3 @@ { - "todo": [ - "006", - "007", - "009", - "011", - "012", - "013", - "022", - "024", - "026", - "027", - "028", - "029", - "030", - "031", - "032", - "033", - "034", - "035", - "036", - "037", - "038", - "039", - "042", - "043", - "044", - "045", - "046", - "047", - "048", - "049", - "050", - "051", - "052", - "053", - "054", - "055", - "056", - "057", - "059", - "060", - "063", - "065", - "066", - "067", - "068", - "069", - "073", - "079", - "080", - "081", - "082", - "084", - "085", - "086", - "087", - "088", - "089", - "090", - "091", - "092", - "093", - "094", - "095", - "096", - "098", - "099", - "101", - "104", - "108", - "109", - "112", - "113", - "114", - "115", - "116", - "118", - "119", - "121", - "122", - "123", - "124", - "127", - "131", - "135", - "139", - "140", - "141", - "145", - "149", - "151", - "153" - ] + "todo": [] } From fde63bd093d7c3e959e2edddb903b8288811389c Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 16 Aug 2026 19:38:37 +0000 Subject: [PATCH 14/24] =?UTF-8?q?Milestone=207:=20foreign-data=20DDL=20?= =?UTF-8?q?=E2=80=94=20FDWs,=20servers,=20foreign=20tables,=20user=20mappi?= =?UTF-8?q?ngs,=20IMPORT=20FOREIGN=20SCHEMA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01J19Kf5LpGUhi2vxFJjzQJE --- internal/parse/ddl_alter_generic.go | 35 ++- internal/parse/ddl_dispatch.go | 19 +- internal/parse/ddl_foreign.go | 204 ++++++++++++++++++ internal/parse/parser.go | 2 + .../foreign_data.metadata.json | 3 - .../testdata/parse/libpg_query.metadata.json | 5 +- .../alter_generic.metadata.json | 8 - .../postgres_regress/create_am.metadata.json | 7 +- .../event_trigger.metadata.json | 3 - .../fast_default.metadata.json | 3 - .../foreign_data.metadata.json | 158 +------------- .../object_address.metadata.json | 5 - .../postgres_regress/stats_ext.metadata.json | 3 - 13 files changed, 259 insertions(+), 196 deletions(-) create mode 100644 internal/parse/ddl_foreign.go diff --git a/internal/parse/ddl_alter_generic.go b/internal/parse/ddl_alter_generic.go index a3c0043..7ca68b7 100644 --- a/internal/parse/ddl_alter_generic.go +++ b/internal/parse/ddl_alter_generic.go @@ -415,7 +415,9 @@ func (p *parser) parseAlterDispatch() *ast.Node { case ast.Token_ROLE, ast.Token_USER: if p.kindN(1) == ast.Token_MAPPING { - break // AlterUserMappingStmt (FDW batch) + p.next() + p.next() + return p.parseAlterUserMappingStmt() } p.next() if p.kind() == ast.Token_ALL { @@ -502,6 +504,19 @@ func (p *parser) parseAlterDispatch() *ast.Node { } p.syntaxErrorAt() + case ast.Token_SERVER: + p.next() + name := p.name() + switch p.kind() { + case ast.Token_RENAME, ast.Token_OWNER: + if n := p.parseAlterGenericTail(ast.ObjectType_OBJECT_FOREIGN_SERVER, nStr(name), nil, false, + tailRename|tailOwner); n != nil { + return n + } + p.syntaxErrorAt() + } + return p.parseAlterForeignServerStmt(name) + case ast.Token_SCHEMA: p.next() obj := nStr(p.name()) @@ -654,12 +669,26 @@ func (p *parser) parseAlterDispatch() *ast.Node { return p.parseAlterTableStmt(ast.ObjectType_OBJECT_MATVIEW, false, true) } case ast.Token_FOREIGN: - if p.kindN(1) == ast.Token_TABLE { + switch p.kindN(1) { + case ast.Token_TABLE: p.next() p.next() return p.parseAlterTableStmt(ast.ObjectType_OBJECT_FOREIGN_TABLE, true, false) + case ast.Token_DATA_P: + p.next() + p.next() + p.expect(ast.Token_WRAPPER) + name := p.name() + switch p.kind() { + case ast.Token_RENAME, ast.Token_OWNER: + if n := p.parseAlterGenericTail(ast.ObjectType_OBJECT_FDW, nStr(name), nil, false, + tailRename|tailOwner); n != nil { + return n + } + p.syntaxErrorAt() + } + return p.parseAlterFdwStmt(name) } - break // ALTER FOREIGN DATA WRAPPER (FDW batch) case ast.Token_SEQUENCE: p.next() diff --git a/internal/parse/ddl_dispatch.go b/internal/parse/ddl_dispatch.go index 235e4de..efde1e6 100644 --- a/internal/parse/ddl_dispatch.go +++ b/internal/parse/ddl_dispatch.go @@ -17,7 +17,9 @@ func (p *parser) parseCreateDispatch() *ast.Node { return p.parseCreateRoleStmt(ast.RoleStmtType_ROLESTMT_ROLE) case ast.Token_USER: if p.kindN(1) == ast.Token_MAPPING { - break // CreateUserMappingStmt (milestone 7) + p.next() + p.next() + return p.parseCreateUserMappingStmt() } return p.parseCreateRoleStmt(ast.RoleStmtType_ROLESTMT_USER) case ast.Token_GROUP_P: @@ -51,6 +53,21 @@ func (p *parser) parseCreateDispatch() *ast.Node { case ast.Token_PUBLICATION: p.next() return p.parseCreatePublicationStmt() + case ast.Token_FOREIGN: + switch p.kindN(1) { + case ast.Token_DATA_P: + p.next() + p.next() + p.expect(ast.Token_WRAPPER) + return p.parseCreateFdwStmt() + case ast.Token_TABLE: + p.next() + p.next() + return p.parseCreateForeignTableStmt() + } + case ast.Token_SERVER: + p.next() + return p.parseCreateForeignServerStmt() case ast.Token_SUBSCRIPTION: p.next() return p.parseCreateSubscriptionStmt() diff --git a/internal/parse/ddl_foreign.go b/internal/parse/ddl_foreign.go new file mode 100644 index 0000000..7edbcef --- /dev/null +++ b/internal/parse/ddl_foreign.go @@ -0,0 +1,204 @@ +package parse + +// Foreign-data DDL: CreateFdwStmt, AlterFdwStmt, CreateForeignServerStmt, +// AlterForeignServerStmt, CreateForeignTableStmt, ImportForeignSchemaStmt, +// CreateUserMappingStmt, AlterUserMappingStmt. + +import ( + "github.com/sqlc-dev/oliphant/ast" +) + +// parseOptFdwOptions is gram.y's opt_fdw_options. +func (p *parser) parseOptFdwOptions() []*ast.Node { + var list []*ast.Node + for { + tok := p.peek() + switch tok.Kind { + case ast.Token_HANDLER: + p.next() + list = append(list, makeDefElem("handler", nList(p.parseHandlerName()), tok.Start)) + case ast.Token_VALIDATOR: + p.next() + list = append(list, makeDefElem("validator", nList(p.parseHandlerName()), tok.Start)) + case ast.Token_NO: + switch p.kindN(1) { + case ast.Token_HANDLER: + p.next() + p.next() + list = append(list, makeDefElem("handler", nil, tok.Start)) + case ast.Token_VALIDATOR: + p.next() + p.next() + list = append(list, makeDefElem("validator", nil, tok.Start)) + default: + return list + } + default: + return list + } + } +} + +// parseCreateFdwStmt is gram.y's CreateFdwStmt; CREATE FOREIGN DATA +// WRAPPER consumed. +func (p *parser) parseCreateFdwStmt() *ast.Node { + n := &ast.CreateFdwStmt{Fdwname: p.name()} + n.FuncOptions = p.parseOptFdwOptions() + n.Options = p.parseCreateGenericOptions() + return &ast.Node{Node: &ast.Node_CreateFdwStmt{CreateFdwStmt: n}} +} + +// parseAlterFdwStmt is gram.y's AlterFdwStmt; ALTER FOREIGN DATA WRAPPER +// consumed. RENAME TO/OWNER TO are resolved by the caller. +func (p *parser) parseAlterFdwStmt(name string) *ast.Node { + n := &ast.AlterFdwStmt{Fdwname: name} + n.FuncOptions = p.parseOptFdwOptions() + if p.kind() == ast.Token_OPTIONS { + n.Options = p.parseAlterGenericOptions() + } else if n.FuncOptions == nil { + p.syntaxErrorAt() + } + return &ast.Node{Node: &ast.Node_AlterFdwStmt{AlterFdwStmt: n}} +} + +// parseCreateForeignServerStmt is gram.y's CreateForeignServerStmt; CREATE +// SERVER consumed. +func (p *parser) parseCreateForeignServerStmt() *ast.Node { + n := &ast.CreateForeignServerStmt{} + if p.have(ast.Token_IF_P) { + p.expect(ast.Token_NOT) + p.expect(ast.Token_EXISTS) + n.IfNotExists = true + } + n.Servername = p.name() + if p.have(ast.Token_TYPE_P) { + n.Servertype = p.sconst() + } + if p.have(ast.Token_VERSION_P) { + if !p.have(ast.Token_NULL_P) { + n.Version = p.sconst() + } + } + p.expect(ast.Token_FOREIGN) + p.expect(ast.Token_DATA_P) + p.expect(ast.Token_WRAPPER) + n.Fdwname = p.name() + n.Options = p.parseCreateGenericOptions() + return &ast.Node{Node: &ast.Node_CreateForeignServerStmt{CreateForeignServerStmt: n}} +} + +// parseAlterForeignServerStmt is gram.y's AlterForeignServerStmt; ALTER +// SERVER name consumed. +func (p *parser) parseAlterForeignServerStmt(name string) *ast.Node { + n := &ast.AlterForeignServerStmt{Servername: name} + if p.have(ast.Token_VERSION_P) { + n.HasVersion = true + if !p.have(ast.Token_NULL_P) { + n.Version = p.sconst() + } + if p.kind() == ast.Token_OPTIONS { + n.Options = p.parseAlterGenericOptions() + } + } else { + n.Options = p.parseAlterGenericOptions() + } + return &ast.Node{Node: &ast.Node_AlterForeignServerStmt{AlterForeignServerStmt: n}} +} + +// parseCreateForeignTableStmt is gram.y's CreateForeignTableStmt; CREATE +// FOREIGN TABLE consumed. +func (p *parser) parseCreateForeignTableStmt() *ast.Node { + n := &ast.CreateForeignTableStmt{} + base := &ast.CreateStmt{Oncommit: ast.OnCommitAction_ONCOMMIT_NOOP} + if p.have(ast.Token_IF_P) { + p.expect(ast.Token_NOT) + p.expect(ast.Token_EXISTS) + base.IfNotExists = true + } + base.Relation = p.parseQualifiedName() + base.Relation.Relpersistence = relPersistPermanent + if p.have(ast.Token_PARTITION) { + p.expect(ast.Token_OF) + base.InhRelations = []*ast.Node{nRangeVar(p.parseQualifiedName())} + if p.have(ast.Token('(')) { + base.TableElts = p.parseTypedTableElementList() + p.expect(ast.Token(')')) + } + base.Partbound = p.parsePartitionBoundSpec() + } else { + p.expect(ast.Token('(')) + if p.kind() != ast.Token(')') { + base.TableElts = p.parseTableElementList() + } + p.expect(ast.Token(')')) + if p.have(ast.Token_INHERITS) { + p.expect(ast.Token('(')) + base.InhRelations = p.parseQualifiedNameList() + p.expect(ast.Token(')')) + } + } + p.expect(ast.Token_SERVER) + n.Servername = p.name() + n.Options = p.parseCreateGenericOptions() + n.BaseStmt = base + return &ast.Node{Node: &ast.Node_CreateForeignTableStmt{CreateForeignTableStmt: n}} +} + +// parseImportForeignSchemaStmt is gram.y's ImportForeignSchemaStmt. +func (p *parser) parseImportForeignSchemaStmt() *ast.Node { + p.expect(ast.Token_IMPORT_P) + p.expect(ast.Token_FOREIGN) + p.expect(ast.Token_SCHEMA) + n := &ast.ImportForeignSchemaStmt{RemoteSchema: p.name()} + // import_qualification + switch { + case p.have(ast.Token_LIMIT): + p.expect(ast.Token_TO) + n.ListType = ast.ImportForeignSchemaType_FDW_IMPORT_SCHEMA_LIMIT_TO + p.expect(ast.Token('(')) + n.TableList = p.parseRelationExprList() + p.expect(ast.Token(')')) + case p.have(ast.Token_EXCEPT): + n.ListType = ast.ImportForeignSchemaType_FDW_IMPORT_SCHEMA_EXCEPT + p.expect(ast.Token('(')) + n.TableList = p.parseRelationExprList() + p.expect(ast.Token(')')) + default: + n.ListType = ast.ImportForeignSchemaType_FDW_IMPORT_SCHEMA_ALL + } + p.expect(ast.Token_FROM) + p.expect(ast.Token_SERVER) + n.ServerName = p.name() + p.expect(ast.Token_INTO) + n.LocalSchema = p.name() + n.Options = p.parseCreateGenericOptions() + return &ast.Node{Node: &ast.Node_ImportForeignSchemaStmt{ImportForeignSchemaStmt: n}} +} + +// parseCreateUserMappingStmt is gram.y's CreateUserMappingStmt; CREATE +// USER MAPPING consumed. +func (p *parser) parseCreateUserMappingStmt() *ast.Node { + n := &ast.CreateUserMappingStmt{} + if p.have(ast.Token_IF_P) { + p.expect(ast.Token_NOT) + p.expect(ast.Token_EXISTS) + n.IfNotExists = true + } + p.expect(ast.Token_FOR) + n.User = p.parseAuthIdent() + p.expect(ast.Token_SERVER) + n.Servername = p.name() + n.Options = p.parseCreateGenericOptions() + return &ast.Node{Node: &ast.Node_CreateUserMappingStmt{CreateUserMappingStmt: n}} +} + +// parseAlterUserMappingStmt is gram.y's AlterUserMappingStmt; ALTER USER +// MAPPING consumed. +func (p *parser) parseAlterUserMappingStmt() *ast.Node { + p.expect(ast.Token_FOR) + n := &ast.AlterUserMappingStmt{User: p.parseAuthIdent()} + p.expect(ast.Token_SERVER) + n.Servername = p.name() + n.Options = p.parseAlterGenericOptions() + return &ast.Node{Node: &ast.Node_AlterUserMappingStmt{AlterUserMappingStmt: n}} +} diff --git a/internal/parse/parser.go b/internal/parse/parser.go index 55bc8bc..9b97716 100644 --- a/internal/parse/parser.go +++ b/internal/parse/parser.go @@ -281,6 +281,8 @@ func (p *parser) parseToplevelStmt() *ast.Node { return p.parseGrantStmt() case ast.Token_REVOKE: return p.parseRevokeStmt() + case ast.Token_IMPORT_P: + return p.parseImportForeignSchemaStmt() case ast.Token_SECURITY: if p.kindN(1) == ast.Token_LABEL { p.next() diff --git a/parser/testdata/deparse/postgres_regress/foreign_data.metadata.json b/parser/testdata/deparse/postgres_regress/foreign_data.metadata.json index dc2db61..c02bf54 100644 --- a/parser/testdata/deparse/postgres_regress/foreign_data.metadata.json +++ b/parser/testdata/deparse/postgres_regress/foreign_data.metadata.json @@ -35,7 +35,6 @@ "034", "035", "036", - "037", "038", "039", "040", @@ -109,7 +108,6 @@ "108", "109", "110", - "111", "112", "113", "114", @@ -198,7 +196,6 @@ "197", "198", "199", - "200", "201", "202", "203", diff --git a/parser/testdata/parse/libpg_query.metadata.json b/parser/testdata/parse/libpg_query.metadata.json index e51835e..737fd31 100644 --- a/parser/testdata/parse/libpg_query.metadata.json +++ b/parser/testdata/parse/libpg_query.metadata.json @@ -1,6 +1,3 @@ { - "todo": [ - "009", - "010" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/alter_generic.metadata.json b/parser/testdata/parse/postgres_regress/alter_generic.metadata.json index 8b48c69..3f3d592 100644 --- a/parser/testdata/parse/postgres_regress/alter_generic.metadata.json +++ b/parser/testdata/parse/postgres_regress/alter_generic.metadata.json @@ -4,14 +4,6 @@ "054", "061", "062", - "071", - "072", - "073", - "074", - "075", - "076", - "077", - "078", "081", "082" ] diff --git a/parser/testdata/parse/postgres_regress/create_am.metadata.json b/parser/testdata/parse/postgres_regress/create_am.metadata.json index 14592fe..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/create_am.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_am.metadata.json @@ -1,8 +1,3 @@ { - "todo": [ - "132", - "133", - "134", - "141" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/event_trigger.metadata.json b/parser/testdata/parse/postgres_regress/event_trigger.metadata.json index c3fd2dc..fcd212b 100644 --- a/parser/testdata/parse/postgres_regress/event_trigger.metadata.json +++ b/parser/testdata/parse/postgres_regress/event_trigger.metadata.json @@ -1,8 +1,5 @@ { "todo": [ - "046", - "047", - "048", "099", "109", "110", diff --git a/parser/testdata/parse/postgres_regress/fast_default.metadata.json b/parser/testdata/parse/postgres_regress/fast_default.metadata.json index 1940133..8d6579e 100644 --- a/parser/testdata/parse/postgres_regress/fast_default.metadata.json +++ b/parser/testdata/parse/postgres_regress/fast_default.metadata.json @@ -2,9 +2,6 @@ "todo": [ "223", "230", - "243", - "244", - "245", "247" ] } diff --git a/parser/testdata/parse/postgres_regress/foreign_data.metadata.json b/parser/testdata/parse/postgres_regress/foreign_data.metadata.json index ba4181a..0c1a88d 100644 --- a/parser/testdata/parse/postgres_regress/foreign_data.metadata.json +++ b/parser/testdata/parse/postgres_regress/foreign_data.metadata.json @@ -1,169 +1,13 @@ { "todo": [ - "012", - "014", - "018", - "019", - "020", - "022", - "024", - "025", - "028", - "030", - "032", - "033", - "034", - "036", - "037", - "038", - "039", - "040", - "041", - "042", - "043", - "044", - "045", - "046", - "048", - "050", - "051", - "052", - "055", - "057", - "058", - "059", - "060", - "061", - "070", - "071", - "073", - "074", - "075", - "081", - "082", - "083", - "084", - "085", - "086", - "087", - "088", - "089", - "090", - "091", - "092", - "093", - "095", - "099", - "104", - "108", - "111", - "112", - "113", - "114", - "115", - "119", - "120", - "122", - "125", - "126", - "128", - "129", - "131", - "135", - "139", - "142", - "143", - "150", - "154", - "157", - "158", - "159", - "160", - "161", - "162", - "163", - "164", - "165", - "167", - "168", - "169", - "170", - "172", - "174", - "175", - "177", - "178", - "179", - "180", - "181", - "183", - "184", - "185", - "193", - "199", - "200", - "201", - "202", - "204", - "206", - "207", - "214", - "221", - "222", - "227", - "228", - "235", - "236", - "243", - "244", "263", "264", "265", "274", "301", "302", - "351", - "352", - "353", - "355", - "356", - "357", - "360", - "361", - "362", - "365", - "366", - "372", - "373", - "377", - "378", - "382", - "383", - "384", - "391", - "392", - "394", - "397", - "400", - "402", - "405", - "406", - "407", - "427", - "429", - "432", "442", "443", - "444", - "459", - "473", - "474", - "475", - "476", - "484", - "486", - "489", - "508", - "509" + "444" ] } diff --git a/parser/testdata/parse/postgres_regress/object_address.metadata.json b/parser/testdata/parse/postgres_regress/object_address.metadata.json index a618d06..08dfa0d 100644 --- a/parser/testdata/parse/postgres_regress/object_address.metadata.json +++ b/parser/testdata/parse/postgres_regress/object_address.metadata.json @@ -1,11 +1,6 @@ { "todo": [ - "007", - "008", "017", - "019", - "026", - "027", "030" ] } diff --git a/parser/testdata/parse/postgres_regress/stats_ext.metadata.json b/parser/testdata/parse/postgres_regress/stats_ext.metadata.json index e9661d9..d514896 100644 --- a/parser/testdata/parse/postgres_regress/stats_ext.metadata.json +++ b/parser/testdata/parse/postgres_regress/stats_ext.metadata.json @@ -1,9 +1,6 @@ { "todo": [ "119", - "120", - "121", - "122", "348", "497", "499", From 80e4b7ddaecebf883d5791d0bebe51c438beadb7 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 16 Aug 2026 19:40:13 +0000 Subject: [PATCH 15/24] Milestone 7: rules, procedural languages, tablespaces, conversions, transforms, TS configurations Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01J19Kf5LpGUhi2vxFJjzQJE --- internal/parse/ddl_alter_generic.go | 58 ++++- internal/parse/ddl_dispatch.go | 28 +++ internal/parse/ddl_rule.go | 201 ++++++++++++++++++ .../alter_generic.metadata.json | 9 +- .../alter_table.metadata.json | 5 +- .../postgres_regress/conversion.metadata.json | 7 +- .../postgres_regress/copydml.metadata.json | 16 +- .../create_view.metadata.json | 1 - .../drop_if_exists.metadata.json | 4 +- .../foreign_key.metadata.json | 1 - .../postgres_regress/insert.metadata.json | 8 +- .../object_address.metadata.json | 3 +- .../postgres_regress/portals.metadata.json | 4 +- .../postgres_regress/rangefuncs.metadata.json | 1 - .../postgres_regress/returning.metadata.json | 8 +- .../postgres_regress/rules.metadata.json | 69 +----- .../postgres_regress/subselect.metadata.json | 5 +- .../postgres_regress/tablespace.metadata.json | 5 - .../postgres_regress/test_setup.metadata.json | 4 +- .../postgres_regress/triggers.metadata.json | 6 +- .../postgres_regress/tsdicts.metadata.json | 17 +- .../updatable_views.metadata.json | 19 +- .../parse/postgres_regress/with.metadata.json | 13 +- 23 files changed, 300 insertions(+), 192 deletions(-) create mode 100644 internal/parse/ddl_rule.go diff --git a/internal/parse/ddl_alter_generic.go b/internal/parse/ddl_alter_generic.go index 7ca68b7..c5a51b9 100644 --- a/internal/parse/ddl_alter_generic.go +++ b/internal/parse/ddl_alter_generic.go @@ -915,8 +915,60 @@ func (p *parser) parseOperatorDefArg() *ast.Node { return nTypeName(p.parseFuncType()) } -// Stub for the text-search configuration batch. +// parseAlterTSConfigurationStmt is gram.y's AlterTSConfigurationStmt; +// ALTER TEXT SEARCH CONFIGURATION any_name consumed. func (p *parser) parseAlterTSConfigurationStmt(names []*ast.Node) *ast.Node { - p.syntaxErrorAt() - return nil + n := &ast.AlterTSConfigurationStmt{Cfgname: names} + anyWith := func() { + if !p.have(ast.Token_WITH) && !p.have(ast.Token_WITH_LA) { + p.syntaxErrorAt() + } + } + switch { + case p.have(ast.Token_ADD_P): + p.expect(ast.Token_MAPPING) + p.expect(ast.Token_FOR) + n.Kind = ast.AlterTSConfigType_ALTER_TSCONFIG_ADD_MAPPING + n.Tokentype = p.nameList() + anyWith() + n.Dicts = p.parseAnyNameList() + case p.have(ast.Token_ALTER): + p.expect(ast.Token_MAPPING) + switch { + case p.have(ast.Token_FOR): + n.Tokentype = p.nameList() + if p.have(ast.Token_REPLACE) { + n.Kind = ast.AlterTSConfigType_ALTER_TSCONFIG_REPLACE_DICT_FOR_TOKEN + n.Replace = true + old := nList(p.anyName()) + anyWith() + n.Dicts = []*ast.Node{old, nList(p.anyName())} + } else { + n.Kind = ast.AlterTSConfigType_ALTER_TSCONFIG_ALTER_MAPPING_FOR_TOKEN + n.Override = true + anyWith() + n.Dicts = p.parseAnyNameList() + } + case p.have(ast.Token_REPLACE): + n.Kind = ast.AlterTSConfigType_ALTER_TSCONFIG_REPLACE_DICT + n.Replace = true + old := nList(p.anyName()) + anyWith() + n.Dicts = []*ast.Node{old, nList(p.anyName())} + default: + p.syntaxErrorAt() + } + case p.have(ast.Token_DROP): + p.expect(ast.Token_MAPPING) + n.Kind = ast.AlterTSConfigType_ALTER_TSCONFIG_DROP_MAPPING + if p.have(ast.Token_IF_P) { + p.expect(ast.Token_EXISTS) + n.MissingOk = true + } + p.expect(ast.Token_FOR) + n.Tokentype = p.nameList() + default: + p.syntaxErrorAt() + } + return &ast.Node{Node: &ast.Node_AlterTsconfigurationStmt{AlterTsconfigurationStmt: n}} } diff --git a/internal/parse/ddl_dispatch.go b/internal/parse/ddl_dispatch.go index efde1e6..64079e8 100644 --- a/internal/parse/ddl_dispatch.go +++ b/internal/parse/ddl_dispatch.go @@ -131,6 +131,26 @@ func (p *parser) parseCreateDispatch() *ast.Node { p.next() return p.parseCreateAmStmt() } + case ast.Token_RULE: + p.next() + return p.parseRuleStmt(false) + case ast.Token_TRUSTED, ast.Token_PROCEDURAL, ast.Token_LANGUAGE: + return p.parseCreatePLangStmt(false) + case ast.Token_TABLESPACE: + p.next() + return p.parseCreateTableSpaceStmt() + case ast.Token_CONVERSION_P: + p.next() + return p.parseCreateConversionStmt(false) + case ast.Token_DEFAULT: + if p.kindN(1) == ast.Token_CONVERSION_P { + p.next() + p.next() + return p.parseCreateConversionStmt(true) + } + case ast.Token_TRANSFORM: + p.next() + return p.parseCreateTransformStmt(false) case ast.Token_ASSERTION: // gram.y: CreateAssertionStmt always errors (no position). p.next() @@ -223,6 +243,14 @@ func (p *parser) parseCreateOrReplace(schemaElt bool) *ast.Node { case ast.Token_AGGREGATE: p.next() return p.parseCreateAggregateStmt(true) + case ast.Token_RULE: + p.next() + return p.parseRuleStmt(true) + case ast.Token_TRUSTED, ast.Token_PROCEDURAL, ast.Token_LANGUAGE: + return p.parseCreatePLangStmt(true) + case ast.Token_TRANSFORM: + p.next() + return p.parseCreateTransformStmt(true) } p.syntaxErrorAt() return nil diff --git a/internal/parse/ddl_rule.go b/internal/parse/ddl_rule.go new file mode 100644 index 0000000..a4c682c --- /dev/null +++ b/internal/parse/ddl_rule.go @@ -0,0 +1,201 @@ +package parse + +// RuleStmt, CreatePLangStmt, CreateTableSpaceStmt, CreateConversionStmt, +// CreateTransformStmt, and AlterTSConfigurationStmt. + +import ( + "github.com/sqlc-dev/oliphant/ast" +) + +// parseRuleStmt is gram.y's RuleStmt; CREATE [OR REPLACE] RULE consumed. +func (p *parser) parseRuleStmt(replace bool) *ast.Node { + n := &ast.RuleStmt{Replace: replace, Rulename: p.name()} + p.expect(ast.Token_AS) + p.expect(ast.Token_ON) + // event + switch { + case p.have(ast.Token_SELECT): + n.Event = ast.CmdType_CMD_SELECT + case p.have(ast.Token_UPDATE): + n.Event = ast.CmdType_CMD_UPDATE + case p.have(ast.Token_DELETE_P): + n.Event = ast.CmdType_CMD_DELETE + case p.have(ast.Token_INSERT): + n.Event = ast.CmdType_CMD_INSERT + default: + p.syntaxErrorAt() + } + p.expect(ast.Token_TO) + n.Relation = p.parseQualifiedName() + if p.have(ast.Token_WHERE) { + n.WhereClause = p.parseAExpr(0) + } + p.expect(ast.Token_DO) + // opt_instead + switch { + case p.have(ast.Token_INSTEAD): + n.Instead = true + case p.have(ast.Token_ALSO): + } + // RuleActionList + switch { + case p.have(ast.Token_NOTHING): + case p.have(ast.Token('(')): + // RuleActionMulti + for { + if stmt := p.parseRuleActionStmtOrEmpty(); stmt != nil { + n.Actions = append(n.Actions, stmt) + } + if !p.have(ast.Token(';')) { + break + } + } + p.expect(ast.Token(')')) + default: + n.Actions = []*ast.Node{p.parseRuleActionStmt()} + } + return &ast.Node{Node: &ast.Node_RuleStmt{RuleStmt: n}} +} + +// parseRuleActionStmt is gram.y's RuleActionStmt. +func (p *parser) parseRuleActionStmt() *ast.Node { + switch p.kind() { + case ast.Token_SELECT, ast.Token_TABLE, ast.Token_VALUES, ast.Token('('): + return p.parseSelectStmt() + case ast.Token_WITH, ast.Token_WITH_LA: + return p.parseWithPrefixedStmt() + case ast.Token_INSERT: + return p.parseInsertStmt(nil) + case ast.Token_UPDATE: + return p.parseUpdateStmt(nil) + case ast.Token_DELETE_P: + return p.parseDeleteStmt(nil) + case ast.Token_NOTIFY: + return p.parseNotifyStmt() + } + p.syntaxErrorAt() + return nil +} + +// parseRuleActionStmtOrEmpty is gram.y's RuleActionStmtOrEmpty. +func (p *parser) parseRuleActionStmtOrEmpty() *ast.Node { + switch p.kind() { + case ast.Token(';'), ast.Token(')'): + return nil + } + return p.parseRuleActionStmt() +} + +// parseCreatePLangStmt is gram.y's CreatePLangStmt; CREATE [OR REPLACE] +// consumed, [TRUSTED] [PROCEDURAL] LANGUAGE ahead. +func (p *parser) parseCreatePLangStmt(replace bool) *ast.Node { + trusted := p.have(ast.Token_TRUSTED) + p.have(ast.Token_PROCEDURAL) + p.expect(ast.Token_LANGUAGE) + name := p.name() + if p.kind() != ast.Token_HANDLER { + // Parameterless CREATE LANGUAGE is interpreted as CREATE EXTENSION, + // with OR REPLACE translated to IF NOT EXISTS. + return &ast.Node{Node: &ast.Node_CreateExtensionStmt{CreateExtensionStmt: &ast.CreateExtensionStmt{ + IfNotExists: replace, + Extname: name, + }}} + } + p.next() + n := &ast.CreatePLangStmt{ + Replace: replace, + Plname: name, + Pltrusted: trusted, + Plhandler: p.parseHandlerName(), + } + if p.have(ast.Token_INLINE_P) { + n.Plinline = p.parseHandlerName() + } + // opt_validator + switch { + case p.have(ast.Token_VALIDATOR): + n.Plvalidator = p.parseHandlerName() + case p.kind() == ast.Token_NO && p.kindN(1) == ast.Token_VALIDATOR: + p.next() + p.next() + } + return &ast.Node{Node: &ast.Node_CreatePlangStmt{CreatePlangStmt: n}} +} + +// parseCreateTableSpaceStmt is gram.y's CreateTableSpaceStmt; CREATE +// TABLESPACE consumed. +func (p *parser) parseCreateTableSpaceStmt() *ast.Node { + n := &ast.CreateTableSpaceStmt{Tablespacename: p.name()} + if p.have(ast.Token_OWNER) { + n.Owner = p.parseRoleSpec() + } + p.expect(ast.Token_LOCATION) + n.Location = p.sconst() + if p.kind() == ast.Token_WITH && p.kindN(1) == ast.Token('(') { + p.next() + n.Options = p.parseReloptions() + } + return &ast.Node{Node: &ast.Node_CreateTableSpaceStmt{CreateTableSpaceStmt: n}} +} + +// parseCreateConversionStmt is gram.y's CreateConversionStmt; CREATE +// [DEFAULT] CONVERSION consumed, def passed by the dispatcher. +func (p *parser) parseCreateConversionStmt(isDefault bool) *ast.Node { + n := &ast.CreateConversionStmt{Def: isDefault, ConversionName: p.anyName()} + p.expect(ast.Token_FOR) + n.ForEncodingName = p.sconst() + p.expect(ast.Token_TO) + n.ToEncodingName = p.sconst() + p.expect(ast.Token_FROM) + n.FuncName = p.anyName() + return &ast.Node{Node: &ast.Node_CreateConversionStmt{CreateConversionStmt: n}} +} + +// parseCreateTransformStmt is gram.y's CreateTransformStmt; CREATE +// [OR REPLACE] TRANSFORM consumed. +func (p *parser) parseCreateTransformStmt(replace bool) *ast.Node { + n := &ast.CreateTransformStmt{Replace: replace} + p.expect(ast.Token_FOR) + n.TypeName = p.parseTypename() + p.expect(ast.Token_LANGUAGE) + n.Lang = p.name() + p.expect(ast.Token('(')) + // transform_element_list + parseElem := func() (bool, *ast.ObjectWithArgs) { + fromSQL := false + switch { + case p.have(ast.Token_FROM): + fromSQL = true + case p.have(ast.Token_TO): + default: + p.syntaxErrorAt() + } + p.expect(ast.Token_SQL_P) + if !p.have(ast.Token_WITH) && !p.have(ast.Token_WITH_LA) { + p.syntaxErrorAt() + } + p.expect(ast.Token_FUNCTION) + return fromSQL, p.parseFunctionWithArgtypes().GetObjectWithArgs() + } + from1, fn1 := parseElem() + if from1 { + n.Fromsql = fn1 + } else { + n.Tosql = fn1 + } + if p.have(ast.Token(',')) { + // The second element must go the other direction. + dtok := p.peek() + from2, fn2 := parseElem() + if from2 == from1 { + p.syntaxError(dtok) + } + if from2 { + n.Fromsql = fn2 + } else { + n.Tosql = fn2 + } + } + p.expect(ast.Token(')')) + return &ast.Node{Node: &ast.Node_CreateTransformStmt{CreateTransformStmt: n}} +} diff --git a/parser/testdata/parse/postgres_regress/alter_generic.metadata.json b/parser/testdata/parse/postgres_regress/alter_generic.metadata.json index 3f3d592..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/alter_generic.metadata.json +++ b/parser/testdata/parse/postgres_regress/alter_generic.metadata.json @@ -1,10 +1,3 @@ { - "todo": [ - "053", - "054", - "061", - "062", - "081", - "082" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/alter_table.metadata.json b/parser/testdata/parse/postgres_regress/alter_table.metadata.json index 0450856..263e166 100644 --- a/parser/testdata/parse/postgres_regress/alter_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/alter_table.metadata.json @@ -1,7 +1,6 @@ { "todo": [ "1043", - "1047", "1077", "1078", "1079", @@ -65,7 +64,6 @@ "427", "432", "437", - "532", "764", "765", "770", @@ -90,7 +88,6 @@ "880", "886", "897", - "898", - "924" + "898" ] } diff --git a/parser/testdata/parse/postgres_regress/conversion.metadata.json b/parser/testdata/parse/postgres_regress/conversion.metadata.json index 4ba2a8a..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/conversion.metadata.json +++ b/parser/testdata/parse/postgres_regress/conversion.metadata.json @@ -1,8 +1,3 @@ { - "todo": [ - "006", - "007", - "008", - "009" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/copydml.metadata.json b/parser/testdata/parse/postgres_regress/copydml.metadata.json index 34447ce..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/copydml.metadata.json +++ b/parser/testdata/parse/postgres_regress/copydml.metadata.json @@ -1,17 +1,3 @@ { - "todo": [ - "013", - "016", - "019", - "022", - "025", - "028", - "031", - "034", - "037", - "040", - "043", - "046", - "049" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/create_view.metadata.json b/parser/testdata/parse/postgres_regress/create_view.metadata.json index e26600a..1df15cc 100644 --- a/parser/testdata/parse/postgres_regress/create_view.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_view.metadata.json @@ -5,7 +5,6 @@ "241", "244", "257", - "271", "280", "282" ] diff --git a/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json b/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json index b325f48..b641ec3 100644 --- a/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json +++ b/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json @@ -1,7 +1,5 @@ { "todo": [ - "026", - "049", - "095" + "026" ] } diff --git a/parser/testdata/parse/postgres_regress/foreign_key.metadata.json b/parser/testdata/parse/postgres_regress/foreign_key.metadata.json index d1ae55a..99414ee 100644 --- a/parser/testdata/parse/postgres_regress/foreign_key.metadata.json +++ b/parser/testdata/parse/postgres_regress/foreign_key.metadata.json @@ -10,7 +10,6 @@ "1114", "426", "427", - "488", "581", "729", "740", diff --git a/parser/testdata/parse/postgres_regress/insert.metadata.json b/parser/testdata/parse/postgres_regress/insert.metadata.json index c2aaa6c..b641ec3 100644 --- a/parser/testdata/parse/postgres_regress/insert.metadata.json +++ b/parser/testdata/parse/postgres_regress/insert.metadata.json @@ -1,11 +1,5 @@ { "todo": [ - "026", - "044", - "045", - "046", - "076", - "077", - "078" + "026" ] } diff --git a/parser/testdata/parse/postgres_regress/object_address.metadata.json b/parser/testdata/parse/postgres_regress/object_address.metadata.json index 08dfa0d..72bfdf3 100644 --- a/parser/testdata/parse/postgres_regress/object_address.metadata.json +++ b/parser/testdata/parse/postgres_regress/object_address.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "017", - "030" + "017" ] } diff --git a/parser/testdata/parse/postgres_regress/portals.metadata.json b/parser/testdata/parse/postgres_regress/portals.metadata.json index a1fef79..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/portals.metadata.json +++ b/parser/testdata/parse/postgres_regress/portals.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "281" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json b/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json index f903420..0749a73 100644 --- a/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json +++ b/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json @@ -1,7 +1,6 @@ { "todo": [ "166", - "298", "332", "386", "389", diff --git a/parser/testdata/parse/postgres_regress/returning.metadata.json b/parser/testdata/parse/postgres_regress/returning.metadata.json index e523061..05a2eda 100644 --- a/parser/testdata/parse/postgres_regress/returning.metadata.json +++ b/parser/testdata/parse/postgres_regress/returning.metadata.json @@ -1,11 +1,5 @@ { "todo": [ - "031", - "034", - "035", - "040", - "045", - "057", - "069" + "057" ] } diff --git a/parser/testdata/parse/postgres_regress/rules.metadata.json b/parser/testdata/parse/postgres_regress/rules.metadata.json index 99f93e7..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/rules.metadata.json +++ b/parser/testdata/parse/postgres_regress/rules.metadata.json @@ -1,70 +1,3 @@ { - "todo": [ - "005", - "006", - "007", - "015", - "016", - "017", - "018", - "022", - "023", - "024", - "031", - "032", - "033", - "034", - "038", - "039", - "040", - "041", - "046", - "047", - "048", - "049", - "313", - "316", - "317", - "318", - "321", - "342", - "347", - "348", - "362", - "379", - "381", - "404", - "411", - "414", - "416", - "429", - "439", - "440", - "441", - "442", - "452", - "454", - "456", - "464", - "469", - "471", - "475", - "476", - "477", - "478", - "481", - "485", - "486", - "493", - "514", - "520", - "524", - "557", - "562", - "563", - "564", - "581", - "601", - "606" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/subselect.metadata.json b/parser/testdata/parse/postgres_regress/subselect.metadata.json index 89d3a90..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/subselect.metadata.json +++ b/parser/testdata/parse/postgres_regress/subselect.metadata.json @@ -1,6 +1,3 @@ { - "todo": [ - "089", - "093" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/tablespace.metadata.json b/parser/testdata/parse/postgres_regress/tablespace.metadata.json index 325adf3..0eaf41a 100644 --- a/parser/testdata/parse/postgres_regress/tablespace.metadata.json +++ b/parser/testdata/parse/postgres_regress/tablespace.metadata.json @@ -1,9 +1,5 @@ { "todo": [ - "001", - "002", - "004", - "005", "120", "122", "125", @@ -13,7 +9,6 @@ "141", "142", "158", - "174", "191" ] } diff --git a/parser/testdata/parse/postgres_regress/test_setup.metadata.json b/parser/testdata/parse/postgres_regress/test_setup.metadata.json index 3204043..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/test_setup.metadata.json +++ b/parser/testdata/parse/postgres_regress/test_setup.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "004" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/triggers.metadata.json b/parser/testdata/parse/postgres_regress/triggers.metadata.json index 1b1bab6..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/triggers.metadata.json +++ b/parser/testdata/parse/postgres_regress/triggers.metadata.json @@ -1,7 +1,3 @@ { - "todo": [ - "336", - "337", - "338" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/tsdicts.metadata.json b/parser/testdata/parse/postgres_regress/tsdicts.metadata.json index 75242b0..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/tsdicts.metadata.json +++ b/parser/testdata/parse/postgres_regress/tsdicts.metadata.json @@ -1,18 +1,3 @@ { - "todo": [ - "091", - "096", - "102", - "106", - "111", - "117", - "123", - "124", - "125", - "126", - "127", - "128", - "129", - "130" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/updatable_views.metadata.json b/parser/testdata/parse/postgres_regress/updatable_views.metadata.json index a3e1785..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/updatable_views.metadata.json +++ b/parser/testdata/parse/postgres_regress/updatable_views.metadata.json @@ -1,20 +1,3 @@ { - "todo": [ - "086", - "087", - "088", - "1061", - "1074", - "1087", - "118", - "151", - "155", - "159", - "753", - "754", - "766", - "805", - "806", - "904" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/with.metadata.json b/parser/testdata/parse/postgres_regress/with.metadata.json index 6c3a46e..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/with.metadata.json +++ b/parser/testdata/parse/postgres_regress/with.metadata.json @@ -1,14 +1,3 @@ { - "todo": [ - "150", - "173", - "182", - "186", - "189", - "275", - "277", - "279", - "281", - "283" - ] + "todo": [] } From e153d133d95749bc2ba7744e74f938bda3b0f3b7 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 16 Aug 2026 19:41:32 +0000 Subject: [PATCH 16/24] Fix ALTER COLUMN TYPE ColumnDef location; add cmd/difftodo debug aid Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01J19Kf5LpGUhi2vxFJjzQJE --- cmd/difftodo/main.go | 64 +++++++++++++++++++ internal/parse/ddl_altertable.go | 12 ++-- .../alter_table.metadata.json | 55 +--------------- .../compression.metadata.json | 6 +- .../create_index.metadata.json | 3 +- .../create_table.metadata.json | 1 - .../create_view.metadata.json | 2 - .../event_trigger.metadata.json | 8 --- .../fast_default.metadata.json | 6 +- .../foreign_data.metadata.json | 12 +--- .../foreign_key.metadata.json | 3 - .../postgres_regress/identity.metadata.json | 7 +- .../index_including.metadata.json | 5 +- .../index_including_gist.metadata.json | 5 +- .../postgres_regress/indexing.metadata.json | 4 +- .../postgres_regress/inherit.metadata.json | 6 +- .../postgres_regress/plpgsql.metadata.json | 3 +- .../postgres_regress/rangefuncs.metadata.json | 2 - .../replica_identity.metadata.json | 5 +- .../postgres_regress/stats_ext.metadata.json | 6 +- .../postgres_regress/tablespace.metadata.json | 13 +--- .../typed_table.metadata.json | 1 - 22 files changed, 85 insertions(+), 144 deletions(-) create mode 100644 cmd/difftodo/main.go diff --git a/cmd/difftodo/main.go b/cmd/difftodo/main.go new file mode 100644 index 0000000..a7799b4 --- /dev/null +++ b/cmd/difftodo/main.go @@ -0,0 +1,64 @@ +// difftodo prints input, expected, and actual output for the still-failing +// todo cases of parse-suite .test files. Debug aid for the corpus loop; not +// part of the public tooling. +package main + +import ( + "errors" + "fmt" + "os" + "strconv" + + pg_query "github.com/sqlc-dev/oliphant" + "github.com/sqlc-dev/oliphant/internal/testfile" + "github.com/sqlc-dev/oliphant/parser" +) + +func main() { + path := os.Args[1] + limit := 5 + if len(os.Args) > 2 { + limit, _ = strconv.Atoi(os.Args[2]) + } + cases, err := testfile.Read(path) + if err != nil { + panic(err) + } + meta, err := testfile.ReadMetadata(path) + if err != nil { + panic(err) + } + todo := map[string]bool{} + for _, name := range meta.Todo { + todo[name] = true + } + shown := 0 + for _, c := range cases { + if !todo[c.Name] { + continue + } + got, perr := pg_query.ParseToJSON(c.Input) + if perr != nil { + var pe *parser.Error + if errors.As(perr, &pe) { + got = testfile.RenderError(testfile.ErrorExpectation{ + Message: pe.Message, + Cursorpos: pe.Cursorpos, + Filename: pe.Filename, + Funcname: pe.Funcname, + Context: pe.Context, + }) + } else { + got = "UNIMPLEMENTED: " + perr.Error() + } + } + if got == c.Expected { + continue + } + fmt.Printf("== %s\nINPUT: %s\nWANT: %s\nGOT: %s\n\n", c.Name, c.Input, c.Expected, got) + shown++ + if shown >= limit { + break + } + } +} diff --git a/internal/parse/ddl_altertable.go b/internal/parse/ddl_altertable.go index 1885569..4aac04e 100644 --- a/internal/parse/ddl_altertable.go +++ b/internal/parse/ddl_altertable.go @@ -448,6 +448,7 @@ func (p *parser) parseSetStatisticsValue() *ast.Node { // parseAlterColumnCmd handles the ALTER [COLUMN] ColId ... alternatives of // alter_table_cmd; ALTER opt_column are consumed. func (p *parser) parseAlterColumnCmd() *ast.Node { + ctok := p.peek() colname := p.colId() switch p.kind() { case ast.Token_SET: @@ -500,7 +501,7 @@ func (p *parser) parseAlterColumnCmd() *ast.Node { case ast.Token_DATA_P: p.next() p.expect(ast.Token_TYPE_P) - return p.parseAlterColumnType(colname) + return p.parseAlterColumnType(colname, ctok.Start) case ast.Token_GENERATED: // alter_identity_column_option: SET GENERATED generated_when return p.parseAlterIdentityOptions(colname, true) @@ -543,7 +544,7 @@ func (p *parser) parseAlterColumnCmd() *ast.Node { p.syntaxErrorAt() case ast.Token_TYPE_P: p.next() - return p.parseAlterColumnType(colname) + return p.parseAlterColumnType(colname, ctok.Start) case ast.Token_ADD_P: // ALTER col ADD GENERATED generated_when AS IDENTITY [(seqopts)] p.next() @@ -578,10 +579,10 @@ func (p *parser) parseAlterColumnCmd() *ast.Node { // parseAlterColumnType finishes ALTER [COLUMN] col [SET DATA] TYPE: // // Typename opt_collate_clause alter_using -func (p *parser) parseAlterColumnType(colname string) *ast.Node { +func (p *parser) parseAlterColumnType(colname string, colLoc int32) *ast.Node { n := newAlterTableCmd(ast.AlterTableType_AT_AlterColumnType) n.Name = colname - def := &ast.ColumnDef{Location: -1} + def := &ast.ColumnDef{Location: colLoc} def.TypeName = p.parseTypename() if p.kind() == ast.Token_COLLATE { ctok := p.next() @@ -817,12 +818,13 @@ func (p *parser) parseAlterTypeCmd() *ast.Node { case ast.Token_ALTER: p.next() p.expect(ast.Token_ATTRIBUTE) + ctok := p.peek() colname := p.colId() if p.have(ast.Token_SET) { p.expect(ast.Token_DATA_P) } p.expect(ast.Token_TYPE_P) - cmd := p.parseAlterColumnType(colname) + cmd := p.parseAlterColumnType(colname, ctok.Start) cmd.GetAlterTableCmd().Behavior = p.parseOptDropBehavior() return cmd } diff --git a/parser/testdata/parse/postgres_regress/alter_table.metadata.json b/parser/testdata/parse/postgres_regress/alter_table.metadata.json index 263e166..1280b2d 100644 --- a/parser/testdata/parse/postgres_regress/alter_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/alter_table.metadata.json @@ -34,60 +34,7 @@ "1123", "1124", "1142", - "1189", - "1190", - "1191", - "1192", - "1193", - "1194", - "1203", - "1204", - "1268", - "1272", - "1285", - "1287", "1328", - "1340", - "1505", - "1527", - "1554", - "1605", - "1606", - "1611", - "1612", - "1616", - "1619", - "1622", - "1629", - "1633", - "368", - "427", - "432", - "437", - "764", - "765", - "770", - "771", - "772", - "777", - "779", - "781", - "785", - "795", - "796", - "797", - "804", - "809", - "813", - "816", - "821", - "831", - "847", - "859", - "873", - "880", - "886", - "897", - "898" + "1554" ] } diff --git a/parser/testdata/parse/postgres_regress/compression.metadata.json b/parser/testdata/parse/postgres_regress/compression.metadata.json index 0890b16..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/compression.metadata.json +++ b/parser/testdata/parse/postgres_regress/compression.metadata.json @@ -1,7 +1,3 @@ { - "todo": [ - "035", - "036", - "037" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/create_index.metadata.json b/parser/testdata/parse/postgres_regress/create_index.metadata.json index e37a6cd..c571ff1 100644 --- a/parser/testdata/parse/postgres_regress/create_index.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_index.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "333", - "548" + "333" ] } diff --git a/parser/testdata/parse/postgres_regress/create_table.metadata.json b/parser/testdata/parse/postgres_regress/create_table.metadata.json index de28fd1..d385330 100644 --- a/parser/testdata/parse/postgres_regress/create_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_table.metadata.json @@ -2,7 +2,6 @@ "todo": [ "002", "032", - "058", "076" ] } diff --git a/parser/testdata/parse/postgres_regress/create_view.metadata.json b/parser/testdata/parse/postgres_regress/create_view.metadata.json index 1df15cc..489c2df 100644 --- a/parser/testdata/parse/postgres_regress/create_view.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_view.metadata.json @@ -2,8 +2,6 @@ "todo": [ "031", "039", - "241", - "244", "257", "280", "282" diff --git a/parser/testdata/parse/postgres_regress/event_trigger.metadata.json b/parser/testdata/parse/postgres_regress/event_trigger.metadata.json index fcd212b..dbdaa97 100644 --- a/parser/testdata/parse/postgres_regress/event_trigger.metadata.json +++ b/parser/testdata/parse/postgres_regress/event_trigger.metadata.json @@ -1,14 +1,6 @@ { "todo": [ "099", - "109", - "110", - "133", - "136", - "140", - "143", - "145", - "147", "150", "153", "155" diff --git a/parser/testdata/parse/postgres_regress/fast_default.metadata.json b/parser/testdata/parse/postgres_regress/fast_default.metadata.json index 8d6579e..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/fast_default.metadata.json +++ b/parser/testdata/parse/postgres_regress/fast_default.metadata.json @@ -1,7 +1,3 @@ { - "todo": [ - "223", - "230", - "247" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/foreign_data.metadata.json b/parser/testdata/parse/postgres_regress/foreign_data.metadata.json index 0c1a88d..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/foreign_data.metadata.json +++ b/parser/testdata/parse/postgres_regress/foreign_data.metadata.json @@ -1,13 +1,3 @@ { - "todo": [ - "263", - "264", - "265", - "274", - "301", - "302", - "442", - "443", - "444" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/foreign_key.metadata.json b/parser/testdata/parse/postgres_regress/foreign_key.metadata.json index 99414ee..4c394bc 100644 --- a/parser/testdata/parse/postgres_regress/foreign_key.metadata.json +++ b/parser/testdata/parse/postgres_regress/foreign_key.metadata.json @@ -1,7 +1,5 @@ { "todo": [ - "049", - "050", "1019", "1024", "1031", @@ -10,7 +8,6 @@ "1114", "426", "427", - "581", "729", "740", "750", diff --git a/parser/testdata/parse/postgres_regress/identity.metadata.json b/parser/testdata/parse/postgres_regress/identity.metadata.json index c32a1dc..19d2479 100644 --- a/parser/testdata/parse/postgres_regress/identity.metadata.json +++ b/parser/testdata/parse/postgres_regress/identity.metadata.json @@ -1,10 +1,5 @@ { "todo": [ - "106", - "108", - "155", - "157", - "162", - "180" + "162" ] } diff --git a/parser/testdata/parse/postgres_regress/index_including.metadata.json b/parser/testdata/parse/postgres_regress/index_including.metadata.json index d5927ed..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/index_including.metadata.json +++ b/parser/testdata/parse/postgres_regress/index_including.metadata.json @@ -1,6 +1,3 @@ { - "todo": [ - "124", - "125" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/index_including_gist.metadata.json b/parser/testdata/parse/postgres_regress/index_including_gist.metadata.json index 1870c99..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/index_including_gist.metadata.json +++ b/parser/testdata/parse/postgres_regress/index_including_gist.metadata.json @@ -1,6 +1,3 @@ { - "todo": [ - "043", - "044" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/indexing.metadata.json b/parser/testdata/parse/postgres_regress/indexing.metadata.json index 2cf6d67..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/indexing.metadata.json +++ b/parser/testdata/parse/postgres_regress/indexing.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "028" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/inherit.metadata.json b/parser/testdata/parse/postgres_regress/inherit.metadata.json index b371a13..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/inherit.metadata.json +++ b/parser/testdata/parse/postgres_regress/inherit.metadata.json @@ -1,7 +1,3 @@ { - "todo": [ - "155", - "160", - "161" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/plpgsql.metadata.json b/parser/testdata/parse/postgres_regress/plpgsql.metadata.json index 6dc6e8b..f399e51 100644 --- a/parser/testdata/parse/postgres_regress/plpgsql.metadata.json +++ b/parser/testdata/parse/postgres_regress/plpgsql.metadata.json @@ -3,7 +3,6 @@ "433", "563", "599", - "802", - "921" + "802" ] } diff --git a/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json b/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json index 0749a73..7d1556f 100644 --- a/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json +++ b/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json @@ -2,8 +2,6 @@ "todo": [ "166", "332", - "386", - "389", "417" ] } diff --git a/parser/testdata/parse/postgres_regress/replica_identity.metadata.json b/parser/testdata/parse/postgres_regress/replica_identity.metadata.json index a99061f..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/replica_identity.metadata.json +++ b/parser/testdata/parse/postgres_regress/replica_identity.metadata.json @@ -1,6 +1,3 @@ { - "todo": [ - "038", - "042" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/stats_ext.metadata.json b/parser/testdata/parse/postgres_regress/stats_ext.metadata.json index d514896..edbcf06 100644 --- a/parser/testdata/parse/postgres_regress/stats_ext.metadata.json +++ b/parser/testdata/parse/postgres_regress/stats_ext.metadata.json @@ -1,10 +1,6 @@ { "todo": [ "119", - "348", - "497", - "499", - "780", - "806" + "780" ] } diff --git a/parser/testdata/parse/postgres_regress/tablespace.metadata.json b/parser/testdata/parse/postgres_regress/tablespace.metadata.json index 0eaf41a..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/tablespace.metadata.json +++ b/parser/testdata/parse/postgres_regress/tablespace.metadata.json @@ -1,14 +1,3 @@ { - "todo": [ - "120", - "122", - "125", - "126", - "136", - "138", - "141", - "142", - "158", - "191" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/typed_table.metadata.json b/parser/testdata/parse/postgres_regress/typed_table.metadata.json index 4543e75..b1328dc 100644 --- a/parser/testdata/parse/postgres_regress/typed_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/typed_table.metadata.json @@ -1,7 +1,6 @@ { "todo": [ "002", - "011", "022" ] } From e5b485475422801e10f034a481c2bffaf2ba0568 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 16 Aug 2026 19:42:09 +0000 Subject: [PATCH 17/24] makeRangeVarFromAnyName: leave inh false (C makeNode semantics) Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01J19Kf5LpGUhi2vxFJjzQJE --- internal/parse/gram_support.go | 8 +++-- .../postgres_regress/aggregates.metadata.json | 4 +-- .../alter_table.metadata.json | 35 ------------------- .../postgres_regress/arrays.metadata.json | 5 +-- .../collate.icu.utf8.metadata.json | 4 +-- .../collate.linux.utf8.metadata.json | 4 +-- .../collate.windows.win1252.metadata.json | 4 +-- .../create_aggregate.metadata.json | 3 +- .../create_table.metadata.json | 1 - .../create_table_like.metadata.json | 4 +-- .../create_type.metadata.json | 3 +- .../create_view.metadata.json | 1 - .../postgres_regress/dependency.metadata.json | 4 +-- .../postgres_regress/domain.metadata.json | 4 +-- .../drop_if_exists.metadata.json | 4 +-- .../event_trigger.metadata.json | 5 +-- .../postgres_regress/hash_func.metadata.json | 5 +-- .../postgres_regress/identity.metadata.json | 4 +-- .../postgres_regress/insert.metadata.json | 4 +-- .../parse/postgres_regress/join.metadata.json | 4 +-- .../parse/postgres_regress/json.metadata.json | 8 +---- .../postgres_regress/jsonb.metadata.json | 12 +------ .../multirangetypes.metadata.json | 6 +--- .../object_address.metadata.json | 4 +-- .../partition_prune.metadata.json | 4 +-- .../postgres_regress/plpgsql.metadata.json | 7 +--- .../postgres_regress/rangefuncs.metadata.json | 6 +--- .../postgres_regress/rangetypes.metadata.json | 5 +-- .../postgres_regress/returning.metadata.json | 4 +-- .../postgres_regress/rowtypes.metadata.json | 18 +--------- .../sqljson_jsontable.metadata.json | 4 +-- .../sqljson_queryfuncs.metadata.json | 6 +--- .../postgres_regress/stats_ext.metadata.json | 1 - .../parse/postgres_regress/temp.metadata.json | 4 +-- .../typed_table.metadata.json | 5 +-- .../postgres_regress/union.metadata.json | 4 +-- 36 files changed, 37 insertions(+), 171 deletions(-) diff --git a/internal/parse/gram_support.go b/internal/parse/gram_support.go index 1678a41..a453347 100644 --- a/internal/parse/gram_support.go +++ b/internal/parse/gram_support.go @@ -298,9 +298,13 @@ func makeSetOp(op ast.SetOperation, all bool, larg, rarg *ast.Node) *ast.Node { }) } -// gram.y: makeRangeVarFromAnyName +// gram.y: makeRangeVarFromAnyName — makeNode leaves inh false, unlike +// makeRangeVar. func (p *parser) makeRangeVarFromAnyName(names []*ast.Node, position int32) *ast.RangeVar { - r := makeRangeVar("", "", position) + r := &ast.RangeVar{ + Relpersistence: relPersistPermanent, + Location: position, + } switch len(names) { case 1: r.Relname = asString(names[0]).Sval diff --git a/parser/testdata/parse/postgres_regress/aggregates.metadata.json b/parser/testdata/parse/postgres_regress/aggregates.metadata.json index 1309172..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/aggregates.metadata.json +++ b/parser/testdata/parse/postgres_regress/aggregates.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "368" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/alter_table.metadata.json b/parser/testdata/parse/postgres_regress/alter_table.metadata.json index 1280b2d..8c5853a 100644 --- a/parser/testdata/parse/postgres_regress/alter_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/alter_table.metadata.json @@ -1,40 +1,5 @@ { "todo": [ - "1043", - "1077", - "1078", - "1079", - "1080", - "1081", - "1082", - "1083", - "1084", - "1085", - "1086", - "1087", - "1088", - "1090", - "1092", - "1096", - "1099", - "1102", - "1103", - "1104", - "1105", - "1106", - "1107", - "1108", - "1109", - "1112", - "1114", - "1115", - "1118", - "1120", - "1121", - "1123", - "1124", - "1142", - "1328", "1554" ] } diff --git a/parser/testdata/parse/postgres_regress/arrays.metadata.json b/parser/testdata/parse/postgres_regress/arrays.metadata.json index def4101..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/arrays.metadata.json +++ b/parser/testdata/parse/postgres_regress/arrays.metadata.json @@ -1,6 +1,3 @@ { - "todo": [ - "312", - "451" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json b/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json index 7a80072..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.icu.utf8.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "192" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json b/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json index 0925097..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.linux.utf8.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "185" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json b/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json index 24c2e81..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json +++ b/parser/testdata/parse/postgres_regress/collate.windows.win1252.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "156" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/create_aggregate.metadata.json b/parser/testdata/parse/postgres_regress/create_aggregate.metadata.json index f28a9ef..80e9b81 100644 --- a/parser/testdata/parse/postgres_regress/create_aggregate.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_aggregate.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "006", - "014" + "006" ] } diff --git a/parser/testdata/parse/postgres_regress/create_table.metadata.json b/parser/testdata/parse/postgres_regress/create_table.metadata.json index d385330..308eee7 100644 --- a/parser/testdata/parse/postgres_regress/create_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_table.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "002", "032", "076" ] diff --git a/parser/testdata/parse/postgres_regress/create_table_like.metadata.json b/parser/testdata/parse/postgres_regress/create_table_like.metadata.json index fa04876..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/create_table_like.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_table_like.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "139" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/create_type.metadata.json b/parser/testdata/parse/postgres_regress/create_type.metadata.json index 64858eb..172dbcc 100644 --- a/parser/testdata/parse/postgres_regress/create_type.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_type.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "005", - "028" + "005" ] } diff --git a/parser/testdata/parse/postgres_regress/create_view.metadata.json b/parser/testdata/parse/postgres_regress/create_view.metadata.json index 489c2df..2527ec5 100644 --- a/parser/testdata/parse/postgres_regress/create_view.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_view.metadata.json @@ -2,7 +2,6 @@ "todo": [ "031", "039", - "257", "280", "282" ] diff --git a/parser/testdata/parse/postgres_regress/dependency.metadata.json b/parser/testdata/parse/postgres_regress/dependency.metadata.json index 62986cb..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/dependency.metadata.json +++ b/parser/testdata/parse/postgres_regress/dependency.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "051" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/domain.metadata.json b/parser/testdata/parse/postgres_regress/domain.metadata.json index b21f4ad..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/domain.metadata.json +++ b/parser/testdata/parse/postgres_regress/domain.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "213" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json b/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json index b641ec3..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json +++ b/parser/testdata/parse/postgres_regress/drop_if_exists.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "026" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/event_trigger.metadata.json b/parser/testdata/parse/postgres_regress/event_trigger.metadata.json index dbdaa97..bbfd929 100644 --- a/parser/testdata/parse/postgres_regress/event_trigger.metadata.json +++ b/parser/testdata/parse/postgres_regress/event_trigger.metadata.json @@ -1,8 +1,5 @@ { "todo": [ - "099", - "150", - "153", - "155" + "099" ] } diff --git a/parser/testdata/parse/postgres_regress/hash_func.metadata.json b/parser/testdata/parse/postgres_regress/hash_func.metadata.json index 9a23c6c..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/hash_func.metadata.json +++ b/parser/testdata/parse/postgres_regress/hash_func.metadata.json @@ -1,6 +1,3 @@ { - "todo": [ - "032", - "035" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/identity.metadata.json b/parser/testdata/parse/postgres_regress/identity.metadata.json index 19d2479..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/identity.metadata.json +++ b/parser/testdata/parse/postgres_regress/identity.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "162" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/insert.metadata.json b/parser/testdata/parse/postgres_regress/insert.metadata.json index b641ec3..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/insert.metadata.json +++ b/parser/testdata/parse/postgres_regress/insert.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "026" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/join.metadata.json b/parser/testdata/parse/postgres_regress/join.metadata.json index 2703b95..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/join.metadata.json +++ b/parser/testdata/parse/postgres_regress/join.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "270" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/json.metadata.json b/parser/testdata/parse/postgres_regress/json.metadata.json index 5abd4e2..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/json.metadata.json +++ b/parser/testdata/parse/postgres_regress/json.metadata.json @@ -1,9 +1,3 @@ { - "todo": [ - "212", - "216", - "218", - "219", - "312" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/jsonb.metadata.json b/parser/testdata/parse/postgres_regress/jsonb.metadata.json index f525d59..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/jsonb.metadata.json +++ b/parser/testdata/parse/postgres_regress/jsonb.metadata.json @@ -1,13 +1,3 @@ { - "todo": [ - "353", - "357", - "359", - "360", - "441", - "446", - "447", - "458", - "459" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json b/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json index 36ed8a5..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json +++ b/parser/testdata/parse/postgres_regress/multirangetypes.metadata.json @@ -1,7 +1,3 @@ { - "todo": [ - "522", - "525", - "582" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/object_address.metadata.json b/parser/testdata/parse/postgres_regress/object_address.metadata.json index 72bfdf3..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/object_address.metadata.json +++ b/parser/testdata/parse/postgres_regress/object_address.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "017" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/partition_prune.metadata.json b/parser/testdata/parse/postgres_regress/partition_prune.metadata.json index 0dd9aba..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/partition_prune.metadata.json +++ b/parser/testdata/parse/postgres_regress/partition_prune.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "565" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/plpgsql.metadata.json b/parser/testdata/parse/postgres_regress/plpgsql.metadata.json index f399e51..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/plpgsql.metadata.json +++ b/parser/testdata/parse/postgres_regress/plpgsql.metadata.json @@ -1,8 +1,3 @@ { - "todo": [ - "433", - "563", - "599", - "802" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json b/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json index 7d1556f..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json +++ b/parser/testdata/parse/postgres_regress/rangefuncs.metadata.json @@ -1,7 +1,3 @@ { - "todo": [ - "166", - "332", - "417" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/rangetypes.metadata.json b/parser/testdata/parse/postgres_regress/rangetypes.metadata.json index 06d98f1..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/rangetypes.metadata.json +++ b/parser/testdata/parse/postgres_regress/rangetypes.metadata.json @@ -1,6 +1,3 @@ { - "todo": [ - "366", - "369" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/returning.metadata.json b/parser/testdata/parse/postgres_regress/returning.metadata.json index 05a2eda..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/returning.metadata.json +++ b/parser/testdata/parse/postgres_regress/returning.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "057" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/rowtypes.metadata.json b/parser/testdata/parse/postgres_regress/rowtypes.metadata.json index 5f29e0e..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/rowtypes.metadata.json +++ b/parser/testdata/parse/postgres_regress/rowtypes.metadata.json @@ -1,19 +1,3 @@ { - "todo": [ - "001", - "003", - "094", - "099", - "113", - "116", - "119", - "123", - "137", - "142", - "147", - "152", - "155", - "163", - "164" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/sqljson_jsontable.metadata.json b/parser/testdata/parse/postgres_regress/sqljson_jsontable.metadata.json index e9cea49..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/sqljson_jsontable.metadata.json +++ b/parser/testdata/parse/postgres_regress/sqljson_jsontable.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "010" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/sqljson_queryfuncs.metadata.json b/parser/testdata/parse/postgres_regress/sqljson_queryfuncs.metadata.json index 9ed2937..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/sqljson_queryfuncs.metadata.json +++ b/parser/testdata/parse/postgres_regress/sqljson_queryfuncs.metadata.json @@ -1,7 +1,3 @@ { - "todo": [ - "176", - "181", - "182" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/stats_ext.metadata.json b/parser/testdata/parse/postgres_regress/stats_ext.metadata.json index edbcf06..96d7a00 100644 --- a/parser/testdata/parse/postgres_regress/stats_ext.metadata.json +++ b/parser/testdata/parse/postgres_regress/stats_ext.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "119", "780" ] } diff --git a/parser/testdata/parse/postgres_regress/temp.metadata.json b/parser/testdata/parse/postgres_regress/temp.metadata.json index b31f23c..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/temp.metadata.json +++ b/parser/testdata/parse/postgres_regress/temp.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "138" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/typed_table.metadata.json b/parser/testdata/parse/postgres_regress/typed_table.metadata.json index b1328dc..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/typed_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/typed_table.metadata.json @@ -1,6 +1,3 @@ { - "todo": [ - "002", - "022" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/union.metadata.json b/parser/testdata/parse/postgres_regress/union.metadata.json index 619125a..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/union.metadata.json +++ b/parser/testdata/parse/postgres_regress/union.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "086" - ] + "todo": [] } From 59bf47eba4b3e4c7fe1cfd10184426a6f1c23751 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 16 Aug 2026 19:43:03 +0000 Subject: [PATCH 18/24] Fix schema-element CREATE consumption and ALTER PUBLICATION default action Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01J19Kf5LpGUhi2vxFJjzQJE --- internal/parse/ddl_publication.go | 6 +++++- internal/parse/ddl_role.go | 1 + .../postgres_regress/namespace.metadata.json | 1 - .../create_schema.metadata.json | 21 +------------------ .../create_view.metadata.json | 2 -- .../event_trigger.metadata.json | 4 +--- .../foreign_key.metadata.json | 12 +---------- .../postgres_regress/namespace.metadata.json | 7 +------ .../postgres_regress/plancache.metadata.json | 5 +---- .../publication.metadata.json | 21 +------------------ .../postgres_regress/stats_ext.metadata.json | 4 +--- 11 files changed, 13 insertions(+), 71 deletions(-) diff --git a/internal/parse/ddl_publication.go b/internal/parse/ddl_publication.go index 1f09569..6ad4167 100644 --- a/internal/parse/ddl_publication.go +++ b/internal/parse/ddl_publication.go @@ -27,7 +27,11 @@ func (p *parser) parseCreatePublicationStmt() *ast.Node { // parseAlterPublicationStmt handles ALTER PUBLICATION name ...; the name's // tail (RENAME/OWNER) is resolved by the caller. func (p *parser) parseAlterPublicationStmt(name string) *ast.Node { - n := &ast.AlterPublicationStmt{Pubname: name} + // C's zero-valued action is AP_AddObjects. + n := &ast.AlterPublicationStmt{ + Pubname: name, + Action: ast.AlterPublicationAction_AP_AddObjects, + } switch { case p.have(ast.Token_SET): if p.kind() == ast.Token('(') { diff --git a/internal/parse/ddl_role.go b/internal/parse/ddl_role.go index 136c1c5..f4fe59e 100644 --- a/internal/parse/ddl_role.go +++ b/internal/parse/ddl_role.go @@ -336,6 +336,7 @@ func (p *parser) parseOptSchemaEltList() []*ast.Node { // alternatives: CreateStmt, IndexStmt, CreateSeqStmt, CreateTrigStmt, // ViewStmt. func (p *parser) parseCreateSchemaElt() *ast.Node { + p.expect(ast.Token_CREATE) stmt := p.parseCreateStmtFamily(true) if stmt == nil { p.syntaxErrorAt() diff --git a/parser/testdata/deparse/postgres_regress/namespace.metadata.json b/parser/testdata/deparse/postgres_regress/namespace.metadata.json index 6e8763d..7005637 100644 --- a/parser/testdata/deparse/postgres_regress/namespace.metadata.json +++ b/parser/testdata/deparse/postgres_regress/namespace.metadata.json @@ -25,7 +25,6 @@ "023", "024", "025", - "026", "027", "028", "029", diff --git a/parser/testdata/parse/postgres_regress/create_schema.metadata.json b/parser/testdata/parse/postgres_regress/create_schema.metadata.json index 0b305ec..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/create_schema.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_schema.metadata.json @@ -1,22 +1,3 @@ { - "todo": [ - "002", - "003", - "004", - "005", - "006", - "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "019", - "022", - "024" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/create_view.metadata.json b/parser/testdata/parse/postgres_regress/create_view.metadata.json index 2527ec5..75ac2b0 100644 --- a/parser/testdata/parse/postgres_regress/create_view.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_view.metadata.json @@ -1,7 +1,5 @@ { "todo": [ - "031", - "039", "280", "282" ] diff --git a/parser/testdata/parse/postgres_regress/event_trigger.metadata.json b/parser/testdata/parse/postgres_regress/event_trigger.metadata.json index bbfd929..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/event_trigger.metadata.json +++ b/parser/testdata/parse/postgres_regress/event_trigger.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "099" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/foreign_key.metadata.json b/parser/testdata/parse/postgres_regress/foreign_key.metadata.json index 4c394bc..aa5ceda 100644 --- a/parser/testdata/parse/postgres_regress/foreign_key.metadata.json +++ b/parser/testdata/parse/postgres_regress/foreign_key.metadata.json @@ -1,16 +1,6 @@ { "todo": [ - "1019", - "1024", - "1031", - "1038", - "1076", - "1114", "426", - "427", - "729", - "740", - "750", - "757" + "427" ] } diff --git a/parser/testdata/parse/postgres_regress/namespace.metadata.json b/parser/testdata/parse/postgres_regress/namespace.metadata.json index 595ab7b..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/namespace.metadata.json +++ b/parser/testdata/parse/postgres_regress/namespace.metadata.json @@ -1,8 +1,3 @@ { - "todo": [ - "002", - "006", - "011", - "026" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/plancache.metadata.json b/parser/testdata/parse/postgres_regress/plancache.metadata.json index eab3d97..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/plancache.metadata.json +++ b/parser/testdata/parse/postgres_regress/plancache.metadata.json @@ -1,6 +1,3 @@ { - "todo": [ - "034", - "035" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/publication.metadata.json b/parser/testdata/parse/postgres_regress/publication.metadata.json index aa22592..0d37d22 100644 --- a/parser/testdata/parse/postgres_regress/publication.metadata.json +++ b/parser/testdata/parse/postgres_regress/publication.metadata.json @@ -1,29 +1,10 @@ { "todo": [ - "013", - "017", - "026", "044", "045", - "067", - "076", "112", - "216", - "220", - "223", - "225", - "227", - "229", - "391", - "395", - "398", - "400", - "402", - "404", "509", "528", - "568", - "647", - "648" + "568" ] } diff --git a/parser/testdata/parse/postgres_regress/stats_ext.metadata.json b/parser/testdata/parse/postgres_regress/stats_ext.metadata.json index 96d7a00..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/stats_ext.metadata.json +++ b/parser/testdata/parse/postgres_regress/stats_ext.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "780" - ] + "todo": [] } From 886ddbe9294c32175715aa1651cb8ef78fa025e3 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 16 Aug 2026 19:44:46 +0000 Subject: [PATCH 19/24] Match support-function error funcnames; aggregate (*) args; CAS spec location Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01J19Kf5LpGUhi2vxFJjzQJE --- internal/parse/ddl_create.go | 18 +++++++++--------- internal/parse/ddl_define.go | 8 +++++++- internal/parse/ddl_function.go | 2 +- internal/parse/ddl_object.go | 2 +- internal/parse/ddl_publication.go | 10 +++++----- .../create_table.metadata.json | 1 - .../postgres_regress/foreign_key.metadata.json | 2 -- .../postgres_regress/publication.metadata.json | 6 ------ .../create_aggregate.metadata.json | 4 +--- .../create_table.metadata.json | 3 +-- .../postgres_regress/foreign_key.metadata.json | 5 +---- .../polymorphism.metadata.json | 15 +-------------- .../postgres_regress/publication.metadata.json | 9 +-------- 13 files changed, 28 insertions(+), 57 deletions(-) diff --git a/internal/parse/ddl_create.go b/internal/parse/ddl_create.go index 39be30e..b6f3e88 100644 --- a/internal/parse/ddl_create.go +++ b/internal/parse/ddl_create.go @@ -332,7 +332,7 @@ func (p *parser) parseColQualList() ([]*ast.Node, *ast.CollateClause) { c := &ast.CollateClause{Collname: p.anyName(), Location: tok.Start} // gram.y: SplitColQualList if coll != nil { - p.ereport("base_yyparse", "multiple COLLATE clauses not allowed", c.Location) + p.ereport("SplitColQualList", "multiple COLLATE clauses not allowed", c.Location) } coll = c case ast.Token_CONSTRAINT: @@ -727,6 +727,9 @@ const ( // the accumulated CAS bits and the location of the spec (its first token, // or -1 when empty). func (p *parser) parseConstraintAttributeSpec() (int, int32) { + // The spec nonterminal's own location is always -1: PG's YYLLOC_DEFAULT + // assigns empty productions -1 and the left recursion propagates it, so + // processCASbits never reports a cursor position. spec := 0 loc := int32(-1) for { @@ -783,9 +786,6 @@ func (p *parser) parseConstraintAttributeSpec() (int, int32) { p.ereport("base_yyparse", "conflicting constraint properties", tok.Start) } spec = newspec - if loc < 0 { - loc = tok.Start - } } } @@ -797,7 +797,7 @@ func (p *parser) processCASbits(casBits int, loc int32, constrType string, if deferrable != nil { *deferrable = true } else { - p.ereport("base_yyparse", + p.ereport("processCASbits", fmt.Sprintf("%s constraints cannot be marked DEFERRABLE", constrType), loc) } } @@ -805,7 +805,7 @@ func (p *parser) processCASbits(casBits int, loc int32, constrType string, if initdeferred != nil { *initdeferred = true } else { - p.ereport("base_yyparse", + p.ereport("processCASbits", fmt.Sprintf("%s constraints cannot be marked DEFERRABLE", constrType), loc) } } @@ -813,7 +813,7 @@ func (p *parser) processCASbits(casBits int, loc int32, constrType string, if notValid != nil { *notValid = true } else { - p.ereport("base_yyparse", + p.ereport("processCASbits", fmt.Sprintf("%s constraints cannot be marked NOT VALID", constrType), loc) } } @@ -821,7 +821,7 @@ func (p *parser) processCASbits(casBits int, loc int32, constrType string, if noInherit != nil { *noInherit = true } else { - p.ereport("base_yyparse", + p.ereport("processCASbits", fmt.Sprintf("%s constraints cannot be marked NO INHERIT", constrType), loc) } } @@ -990,7 +990,7 @@ func (p *parser) parseOptPartitionSpec() *ast.PartitionSpec { case strEqualsFold(strategy, "hash"): n.Strategy = ast.PartitionStrategy_PARTITION_STRATEGY_HASH default: - p.fail(p.filter.ParserError("base_yyparse", + p.fail(p.filter.ParserError("parsePartitionStrategy", fmt.Sprintf("unrecognized partitioning strategy %q", strategy), -1)) _ = stok } diff --git a/internal/parse/ddl_define.go b/internal/parse/ddl_define.go index 6a67f94..47560e5 100644 --- a/internal/parse/ddl_define.go +++ b/internal/parse/ddl_define.go @@ -39,7 +39,13 @@ func (p *parser) parseCreateAggregateStmt(replace bool) *ast.Node { return nDefineStmt(n) } params, ndirect := p.parseAggrArgs() - n.Args = []*ast.Node{nList(params), nInteger(ndirect)} + // The zero-argument '(*)' form stores NIL — a null list element — not + // an empty List node. + argsNode := &ast.Node{} + if params != nil { + argsNode = nList(params) + } + n.Args = []*ast.Node{argsNode, nInteger(ndirect)} n.Definition = p.parseDefinition() return nDefineStmt(n) } diff --git a/internal/parse/ddl_function.go b/internal/parse/ddl_function.go index c09e33b..0a0ecf7 100644 --- a/internal/parse/ddl_function.go +++ b/internal/parse/ddl_function.go @@ -56,7 +56,7 @@ func (p *parser) parseCreateFunctionStmt(replace bool) *ast.Node { ast.FunctionParameterMode_FUNC_PARAM_IN, ast.FunctionParameterMode_FUNC_PARAM_VARIADIC: default: - p.ereport("base_yyparse", "OUT and INOUT arguments aren't allowed in TABLE functions", -1) + p.ereport("mergeTableFuncParameters", "OUT and INOUT arguments aren't allowed in TABLE functions", -1) } } n.Parameters = append(n.Parameters, cols...) diff --git a/internal/parse/ddl_object.go b/internal/parse/ddl_object.go index 846dcea..15d7386 100644 --- a/internal/parse/ddl_object.go +++ b/internal/parse/ddl_object.go @@ -238,7 +238,7 @@ func (p *parser) makeOrderedSetArgs(direct, ordered []*ast.Node, orderedLoc int3 if len(ordered) != 1 || firsto.Mode != ast.FunctionParameterMode_FUNC_PARAM_VARIADIC || !typeNamesEqual(lastd.ArgType, firsto.ArgType) { - p.ereport("base_yyparse", + p.ereport("makeOrderedSetArgs", "an ordered-set aggregate with a VARIADIC direct argument must have one VARIADIC aggregated argument of the same data type", firsto.ArgType.GetLocation()) } diff --git a/internal/parse/ddl_publication.go b/internal/parse/ddl_publication.go index 6ad4167..7f88de0 100644 --- a/internal/parse/ddl_publication.go +++ b/internal/parse/ddl_publication.go @@ -189,7 +189,7 @@ func (p *parser) preprocessPubobjList(list []*ast.Node) { } first := list[0].GetPublicationObjSpec() if first.Pubobjtype == ast.PublicationObjSpecType_PUBLICATIONOBJ_CONTINUATION { - p.ereport("base_yyparse", "invalid publication object list", first.Location) + p.ereport("preprocess_pubobj_list", "invalid publication object list", first.Location) } prev := ast.PublicationObjSpecType_PUBLICATIONOBJ_CONTINUATION for _, item := range list { @@ -200,7 +200,7 @@ func (p *parser) preprocessPubobjList(list []*ast.Node) { switch obj.Pubobjtype { case ast.PublicationObjSpecType_PUBLICATIONOBJ_TABLE: if obj.Name == "" && obj.Pubtable == nil { - p.ereport("base_yyparse", "invalid table name", obj.Location) + p.ereport("preprocess_pubobj_list", "invalid table name", obj.Location) } if obj.Name != "" { obj.Pubtable = &ast.PublicationTable{ @@ -211,10 +211,10 @@ func (p *parser) preprocessPubobjList(list []*ast.Node) { case ast.PublicationObjSpecType_PUBLICATIONOBJ_TABLES_IN_SCHEMA, ast.PublicationObjSpecType_PUBLICATIONOBJ_TABLES_IN_CUR_SCHEMA: if obj.Pubtable != nil && obj.Pubtable.WhereClause != nil { - p.ereport("base_yyparse", "WHERE clause not allowed for schema", obj.Location) + p.ereport("preprocess_pubobj_list", "WHERE clause not allowed for schema", obj.Location) } if obj.Pubtable != nil && obj.Pubtable.Columns != nil { - p.ereport("base_yyparse", "column specification not allowed for schema", obj.Location) + p.ereport("preprocess_pubobj_list", "column specification not allowed for schema", obj.Location) } switch { case obj.Name != "": @@ -222,7 +222,7 @@ func (p *parser) preprocessPubobjList(list []*ast.Node) { case obj.Pubtable == nil: obj.Pubobjtype = ast.PublicationObjSpecType_PUBLICATIONOBJ_TABLES_IN_CUR_SCHEMA default: - p.ereport("base_yyparse", "invalid schema name", obj.Location) + p.ereport("preprocess_pubobj_list", "invalid schema name", obj.Location) } } prev = obj.Pubobjtype diff --git a/parser/testdata/deparse/postgres_regress/create_table.metadata.json b/parser/testdata/deparse/postgres_regress/create_table.metadata.json index 589c734..33ef44b 100644 --- a/parser/testdata/deparse/postgres_regress/create_table.metadata.json +++ b/parser/testdata/deparse/postgres_regress/create_table.metadata.json @@ -74,7 +74,6 @@ "073", "074", "075", - "076", "077", "078", "079", diff --git a/parser/testdata/deparse/postgres_regress/foreign_key.metadata.json b/parser/testdata/deparse/postgres_regress/foreign_key.metadata.json index 0a20572..d3c3ad7 100644 --- a/parser/testdata/deparse/postgres_regress/foreign_key.metadata.json +++ b/parser/testdata/deparse/postgres_regress/foreign_key.metadata.json @@ -578,8 +578,6 @@ "422", "423", "424", - "426", - "427", "428", "429", "430", diff --git a/parser/testdata/deparse/postgres_regress/publication.metadata.json b/parser/testdata/deparse/postgres_regress/publication.metadata.json index d91846a..ae5b33b 100644 --- a/parser/testdata/deparse/postgres_regress/publication.metadata.json +++ b/parser/testdata/deparse/postgres_regress/publication.metadata.json @@ -43,8 +43,6 @@ "041", "042", "043", - "044", - "045", "046", "047", "048", @@ -110,7 +108,6 @@ "108", "109", "110", - "112", "113", "114", "115", @@ -507,7 +504,6 @@ "506", "507", "508", - "509", "511", "512", "513", @@ -524,7 +520,6 @@ "524", "525", "526", - "528", "529", "530", "531", @@ -564,7 +559,6 @@ "565", "566", "567", - "568", "569", "570", "571", diff --git a/parser/testdata/parse/postgres_regress/create_aggregate.metadata.json b/parser/testdata/parse/postgres_regress/create_aggregate.metadata.json index 80e9b81..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/create_aggregate.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_aggregate.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "006" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/create_table.metadata.json b/parser/testdata/parse/postgres_regress/create_table.metadata.json index 308eee7..e0cd2e7 100644 --- a/parser/testdata/parse/postgres_regress/create_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_table.metadata.json @@ -1,6 +1,5 @@ { "todo": [ - "032", - "076" + "032" ] } diff --git a/parser/testdata/parse/postgres_regress/foreign_key.metadata.json b/parser/testdata/parse/postgres_regress/foreign_key.metadata.json index aa5ceda..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/foreign_key.metadata.json +++ b/parser/testdata/parse/postgres_regress/foreign_key.metadata.json @@ -1,6 +1,3 @@ { - "todo": [ - "426", - "427" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/polymorphism.metadata.json b/parser/testdata/parse/postgres_regress/polymorphism.metadata.json index 81528ab..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/polymorphism.metadata.json +++ b/parser/testdata/parse/postgres_regress/polymorphism.metadata.json @@ -1,16 +1,3 @@ { - "todo": [ - "078", - "079", - "080", - "081", - "082", - "083", - "108", - "109", - "110", - "111", - "112", - "113" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/publication.metadata.json b/parser/testdata/parse/postgres_regress/publication.metadata.json index 0d37d22..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/publication.metadata.json +++ b/parser/testdata/parse/postgres_regress/publication.metadata.json @@ -1,10 +1,3 @@ { - "todo": [ - "044", - "045", - "112", - "509", - "528", - "568" - ] + "todo": [] } From 8eb8b80912597af61d5f5246180b7bc506f93322 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 16 Aug 2026 19:46:00 +0000 Subject: [PATCH 20/24] Fix NOT commitment in ColQualList, ALTER GROUP DefElem location, COLLATION FOR in FROM Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01J19Kf5LpGUhi2vxFJjzQJE --- internal/parse/ddl_create.go | 16 ++++++++-------- internal/parse/ddl_role.go | 7 ++++--- internal/parse/select.go | 3 +++ .../postgres_regress/errors.metadata.json | 10 +--------- .../parse/postgres_regress/errors.metadata.json | 11 +---------- .../postgres_regress/privileges.metadata.json | 10 +--------- 6 files changed, 18 insertions(+), 39 deletions(-) diff --git a/internal/parse/ddl_create.go b/internal/parse/ddl_create.go index b6f3e88..01f235c 100644 --- a/internal/parse/ddl_create.go +++ b/internal/parse/ddl_create.go @@ -343,23 +343,23 @@ func (p *parser) parseColQualList() ([]*ast.Node, *ast.CollateClause) { c.Location = tok.Start constraints = append(constraints, nConstraint(c)) case ast.Token_NOT: - switch p.kindN(1) { - case ast.Token_NULL_P: - p.next() - p.next() + // bison always shifts NOT here (nothing else in the follow set + // starts with it), so a bad token after NOT is reported at that + // token, not at NOT. + p.next() + switch { + case p.have(ast.Token_NULL_P): constraints = append(constraints, nConstraint(&ast.Constraint{ Contype: ast.ConstrType_CONSTR_NOTNULL, Location: tok.Start, })) - case ast.Token_DEFERRABLE: - p.next() - p.next() + case p.have(ast.Token_DEFERRABLE): constraints = append(constraints, nConstraint(&ast.Constraint{ Contype: ast.ConstrType_CONSTR_ATTR_NOT_DEFERRABLE, Location: tok.Start, })) default: - return constraints, coll + p.syntaxErrorAt() } case ast.Token_DEFERRABLE: p.next() diff --git a/internal/parse/ddl_role.go b/internal/parse/ddl_role.go index f4fe59e..f59841e 100644 --- a/internal/parse/ddl_role.go +++ b/internal/parse/ddl_role.go @@ -261,15 +261,16 @@ func (p *parser) parseAlterGroupStmtRest(role *ast.RoleSpec) *ast.Node { default: p.syntaxErrorAt() } - utok := p.expect(ast.Token_USER) + p.expect(ast.Token_USER) + // gram.y gives the DefElem @6 — the role_list's location. + ltok := p.peek() n := &ast.AlterRoleStmt{ Role: role, Action: action, Options: []*ast.Node{ - makeDefElem("rolemembers", nList(p.parseRoleList()), utok.End), + makeDefElem("rolemembers", nList(p.parseRoleList()), ltok.Start), }, } - // gram.y gives the DefElem @6 — the role_list's location. return &ast.Node{Node: &ast.Node_AlterRoleStmt{AlterRoleStmt: n}} } diff --git a/internal/parse/select.go b/internal/parse/select.go index 3243623..a91ecaf 100644 --- a/internal/parse/select.go +++ b/internal/parse/select.go @@ -709,6 +709,9 @@ func (p *parser) startsFunctionCallAhead() bool { ast.Token_CURRENT_CATALOG, ast.Token_CURRENT_SCHEMA, ast.Token_CAST, ast.Token_SYSTEM_USER: return true + case ast.Token_COLLATION: + // COLLATION FOR '(' a_expr ')' + return p.kindN(1) == ast.Token_FOR } // Scan past the (possibly dotted) name: name ('.' attr)* '('. i := 1 diff --git a/parser/testdata/deparse/postgres_regress/errors.metadata.json b/parser/testdata/deparse/postgres_regress/errors.metadata.json index 65bebe4..cbe4108 100644 --- a/parser/testdata/deparse/postgres_regress/errors.metadata.json +++ b/parser/testdata/deparse/postgres_regress/errors.metadata.json @@ -43,14 +43,6 @@ "069", "070", "071", - "072", - "078", - "079", - "080", - "081", - "082", - "083", - "084", - "085" + "072" ] } diff --git a/parser/testdata/parse/postgres_regress/errors.metadata.json b/parser/testdata/parse/postgres_regress/errors.metadata.json index 7163c1e..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/errors.metadata.json +++ b/parser/testdata/parse/postgres_regress/errors.metadata.json @@ -1,12 +1,3 @@ { - "todo": [ - "078", - "079", - "080", - "081", - "082", - "083", - "084", - "085" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/privileges.metadata.json b/parser/testdata/parse/postgres_regress/privileges.metadata.json index c08b81d..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/privileges.metadata.json +++ b/parser/testdata/parse/postgres_regress/privileges.metadata.json @@ -1,11 +1,3 @@ { - "todo": [ - "122", - "125", - "126", - "128", - "129", - "130", - "133" - ] + "todo": [] } From 7f7ed69fa85ace838d0ecfbbf9dc5f48af163fa9 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 16 Aug 2026 19:47:58 +0000 Subject: [PATCH 21/24] Fix _LA identifier classification, OptWith commitment, ALTER COLUMN RESET, bare DOUBLE type name, empty routine body Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01J19Kf5LpGUhi2vxFJjzQJE --- internal/parse/ddl_altertable.go | 6 ++++ internal/parse/ddl_create.go | 4 +++ internal/parse/ddl_function.go | 7 ++++- internal/parse/names.go | 29 +++++++++++++++++++ internal/parse/typename.go | 9 ++++-- .../create_table.metadata.json | 1 - .../alter_table.metadata.json | 4 +-- .../postgres_regress/amutils.metadata.json | 4 +-- .../create_index.metadata.json | 4 +-- .../create_procedure.metadata.json | 4 +-- .../create_table.metadata.json | 4 +-- .../create_type.metadata.json | 4 +-- 12 files changed, 58 insertions(+), 22 deletions(-) diff --git a/internal/parse/ddl_altertable.go b/internal/parse/ddl_altertable.go index 4aac04e..bdfce58 100644 --- a/internal/parse/ddl_altertable.go +++ b/internal/parse/ddl_altertable.go @@ -512,6 +512,12 @@ func (p *parser) parseAlterColumnCmd() *ast.Node { } } p.syntaxErrorAt() + case ast.Token_RESET: + p.next() + n := newAlterTableCmd(ast.AlterTableType_AT_ResetOptions) + n.Name = colname + n.Def = nList(p.parseReloptions()) + return nAlterTableCmd(n) case ast.Token_DROP: p.next() switch { diff --git a/internal/parse/ddl_create.go b/internal/parse/ddl_create.go index 01f235c..de8f3c5 100644 --- a/internal/parse/ddl_create.go +++ b/internal/parse/ddl_create.go @@ -135,6 +135,10 @@ func (p *parser) parseOptWithReloptions() []*ast.Node { p.next() return p.parseReloptions() } + // WITH can only start "WITH reloptions" here; bison shifts it and + // fails at the following token. + p.next() + p.syntaxErrorAt() case ast.Token_WITHOUT: if p.kindN(1) == ast.Token_OIDS { p.next() diff --git a/internal/parse/ddl_function.go b/internal/parse/ddl_function.go index 0a0ecf7..9c40364 100644 --- a/internal/parse/ddl_function.go +++ b/internal/parse/ddl_function.go @@ -253,7 +253,12 @@ func (p *parser) parseOptRoutineBody() *ast.Node { } } p.next() - return nList([]*ast.Node{nList(stmts)}) + // An empty body stores NIL (a null list element), not an empty List. + inner := &ast.Node{} + if stmts != nil { + inner = nList(stmts) + } + return nList([]*ast.Node{inner}) } return nil } diff --git a/internal/parse/names.go b/internal/parse/names.go index 2d24de9..5b96409 100644 --- a/internal/parse/names.go +++ b/internal/parse/names.go @@ -12,9 +12,26 @@ import ( // its canonical lower-case spelling, an IDENT's Str is the downcased, // truncated identifier — in both cases exactly the C production's $$. + +// isLookaheadMergedToken reports whether tok is one of base_yylex's merged +// lookahead terminals. They inherit the keyword classification of their +// first word from the lexer, but the grammar treats them as distinct +// terminals that can never be identifiers. +func isLookaheadMergedToken(tok lexer.Token) bool { + switch tok.Kind { + case ast.Token_NOT_LA, ast.Token_NULLS_LA, ast.Token_WITH_LA, + ast.Token_WITHOUT_LA, ast.Token_FORMAT_LA: + return true + } + return false +} + // isColIdToken reports whether tok can begin ColId: // gram.y: ColId: IDENT | unreserved_keyword | col_name_keyword func isColIdToken(tok lexer.Token) bool { + if isLookaheadMergedToken(tok) { + return false + } switch tok.KeywordKind { case ast.KeywordKind_NO_KEYWORD: return tok.Kind == ast.Token_IDENT @@ -27,6 +44,9 @@ func isColIdToken(tok lexer.Token) bool { // isTypeFunctionNameToken: // gram.y: type_function_name: IDENT | unreserved_keyword | type_func_name_keyword func isTypeFunctionNameToken(tok lexer.Token) bool { + if isLookaheadMergedToken(tok) { + return false + } switch tok.KeywordKind { case ast.KeywordKind_NO_KEYWORD: return tok.Kind == ast.Token_IDENT @@ -40,6 +60,9 @@ func isTypeFunctionNameToken(tok lexer.Token) bool { // gram.y: NonReservedWord: IDENT | unreserved_keyword | col_name_keyword | // type_func_name_keyword func isNonReservedWordToken(tok lexer.Token) bool { + if isLookaheadMergedToken(tok) { + return false + } switch tok.KeywordKind { case ast.KeywordKind_NO_KEYWORD: return tok.Kind == ast.Token_IDENT @@ -54,6 +77,9 @@ func isNonReservedWordToken(tok lexer.Token) bool { // gram.y: ColLabel: IDENT | unreserved_keyword | col_name_keyword | // type_func_name_keyword | reserved_keyword func isColLabelToken(tok lexer.Token) bool { + if isLookaheadMergedToken(tok) { + return false + } if tok.KeywordKind != ast.KeywordKind_NO_KEYWORD { return true } @@ -63,6 +89,9 @@ func isColLabelToken(tok lexer.Token) bool { // isBareColLabelToken: // gram.y: BareColLabel: IDENT | bare_label_keyword func isBareColLabelToken(tok lexer.Token) bool { + if isLookaheadMergedToken(tok) { + return false + } if tok.Kind == ast.Token_IDENT && tok.KeywordKind == ast.KeywordKind_NO_KEYWORD { return true } diff --git a/internal/parse/typename.go b/internal/parse/typename.go index be5b4fb..d60a943 100644 --- a/internal/parse/typename.go +++ b/internal/parse/typename.go @@ -120,9 +120,14 @@ func (p *parser) parseKeywordTypename(constForm bool) *ast.TypeName { t.Location = tok.Start return t case ast.Token_DOUBLE_P: - // DOUBLE_P PRECISION + // DOUBLE_P PRECISION; a bare "double" is a GenericType name (the + // keyword is unreserved and PRECISION is what commits the Numeric + // reading). + if p.kindN(1) != ast.Token_PRECISION { + return nil + } + p.next() p.next() - p.expect(ast.Token_PRECISION) t := SystemTypeName("float8") t.Location = tok.Start return t diff --git a/parser/testdata/deparse/postgres_regress/create_table.metadata.json b/parser/testdata/deparse/postgres_regress/create_table.metadata.json index 33ef44b..16c3b3b 100644 --- a/parser/testdata/deparse/postgres_regress/create_table.metadata.json +++ b/parser/testdata/deparse/postgres_regress/create_table.metadata.json @@ -30,7 +30,6 @@ "028", "029", "031", - "032", "033", "034", "035", diff --git a/parser/testdata/parse/postgres_regress/alter_table.metadata.json b/parser/testdata/parse/postgres_regress/alter_table.metadata.json index 8c5853a..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/alter_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/alter_table.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "1554" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/amutils.metadata.json b/parser/testdata/parse/postgres_regress/amutils.metadata.json index e2f1b87..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/amutils.metadata.json +++ b/parser/testdata/parse/postgres_regress/amutils.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "007" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/create_index.metadata.json b/parser/testdata/parse/postgres_regress/create_index.metadata.json index c571ff1..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/create_index.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_index.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "333" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/create_procedure.metadata.json b/parser/testdata/parse/postgres_regress/create_procedure.metadata.json index 62986cb..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/create_procedure.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_procedure.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "051" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/create_table.metadata.json b/parser/testdata/parse/postgres_regress/create_table.metadata.json index e0cd2e7..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/create_table.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_table.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "032" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/create_type.metadata.json b/parser/testdata/parse/postgres_regress/create_type.metadata.json index 172dbcc..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/create_type.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_type.metadata.json @@ -1,5 +1,3 @@ { - "todo": [ - "005" - ] + "todo": [] } From c10a15c57449dffc392e91b6464b8cb10b74a025 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 16 Aug 2026 19:49:56 +0000 Subject: [PATCH 22/24] =?UTF-8?q?Fix=20UNBOUNDED=20frame=20bounds=20and=20?= =?UTF-8?q?reserved-keyword=20func=5Ftables=20=E2=80=94=20parse=20corpus?= =?UTF-8?q?=20at=20zero=20todos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01J19Kf5LpGUhi2vxFJjzQJE --- internal/parse/func.go | 14 +++++++++----- internal/parse/select.go | 9 +++++---- .../postgres_regress/create_view.metadata.json | 5 +---- .../parse/postgres_regress/window.metadata.json | 5 +---- 4 files changed, 16 insertions(+), 17 deletions(-) diff --git a/internal/parse/func.go b/internal/parse/func.go index c538178..97cfd41 100644 --- a/internal/parse/func.go +++ b/internal/parse/func.go @@ -1025,14 +1025,18 @@ func (p *parser) parseFrameExtent() *ast.WindowDef { func (p *parser) parseFrameBound() *ast.WindowDef { switch p.kind() { case ast.Token_UNBOUNDED: - p.next() - switch { - case p.have(ast.Token_PRECEDING): + // UNBOUNDED commits only when PRECEDING/FOLLOWING follows directly; + // otherwise it's an ordinary identifier in the offset expression. + switch p.kindN(1) { + case ast.Token_PRECEDING: + p.next() + p.next() return &ast.WindowDef{FrameOptions: frameOptionStartUnboundedPreceding} - case p.have(ast.Token_FOLLOWING): + case ast.Token_FOLLOWING: + p.next() + p.next() return &ast.WindowDef{FrameOptions: frameOptionStartUnboundedFollowing} } - p.syntaxErrorAt() case ast.Token_CURRENT_P: if p.kindN(1) == ast.Token_ROW { p.next() diff --git a/internal/parse/select.go b/internal/parse/select.go index a91ecaf..41e5fea 100644 --- a/internal/parse/select.go +++ b/internal/parse/select.go @@ -697,11 +697,9 @@ func (p *parser) parseFuncName(tok lexer.Token) []*ast.Node { // relation) starts here: a name possibly dotted, followed by '('. func (p *parser) startsFunctionCallAhead() bool { tok := p.peek() - if !isColIdToken(tok) && !isTypeFunctionNameToken(tok) { - return false - } // Keywords with special function syntax are func_tables too - // (func_expr_common_subexpr in func_expr_windowless). + // (func_expr_common_subexpr in func_expr_windowless); several are + // reserved, so this check must run before the identifier gate. switch tok.Kind { case ast.Token_CURRENT_DATE, ast.Token_CURRENT_TIME, ast.Token_CURRENT_TIMESTAMP, ast.Token_LOCALTIME, ast.Token_LOCALTIMESTAMP, ast.Token_CURRENT_ROLE, @@ -713,6 +711,9 @@ func (p *parser) startsFunctionCallAhead() bool { // COLLATION FOR '(' a_expr ')' return p.kindN(1) == ast.Token_FOR } + if !isColIdToken(tok) && !isTypeFunctionNameToken(tok) { + return false + } // Scan past the (possibly dotted) name: name ('.' attr)* '('. i := 1 for { diff --git a/parser/testdata/parse/postgres_regress/create_view.metadata.json b/parser/testdata/parse/postgres_regress/create_view.metadata.json index 75ac2b0..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/create_view.metadata.json +++ b/parser/testdata/parse/postgres_regress/create_view.metadata.json @@ -1,6 +1,3 @@ { - "todo": [ - "280", - "282" - ] + "todo": [] } diff --git a/parser/testdata/parse/postgres_regress/window.metadata.json b/parser/testdata/parse/postgres_regress/window.metadata.json index 922c662..737fd31 100644 --- a/parser/testdata/parse/postgres_regress/window.metadata.json +++ b/parser/testdata/parse/postgres_regress/window.metadata.json @@ -1,6 +1,3 @@ { - "todo": [ - "136", - "137" - ] + "todo": [] } From f46720195a700ecb81e6e396879302cbceb8c9ac Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 16 Aug 2026 19:54:23 +0000 Subject: [PATCH 23/24] Milestone 7: SplitWithParser and IsUtilityStmt Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01J19Kf5LpGUhi2vxFJjzQJE --- compat_test.go | 33 +++++++++++++-- oracle/oracle | Bin 13564592 -> 13564592 bytes parser/parser.go | 39 +++++++++++++++++- .../split_parser/libpg_query.metadata.json | 11 +---- 4 files changed, 67 insertions(+), 16 deletions(-) diff --git a/compat_test.go b/compat_test.go index 681a7ab..517d9c8 100644 --- a/compat_test.go +++ b/compat_test.go @@ -43,10 +43,6 @@ func TestNotImplementedErrors(t *testing.T) { check("Fingerprint", err) _, err = pg_query.FingerprintToUInt64("SELECT 1") check("FingerprintToUInt64", err) - _, err = pg_query.SplitWithParser("SELECT 1", false) - check("SplitWithParser", err) - _, err = pg_query.IsUtilityStmt("SELECT 1") - check("IsUtilityStmt", err) _, err = pg_query.ParsePlPgSqlToJSON("SELECT 1") check("ParsePlPgSqlToJSON", err) _, err = pg_query.Summary("SELECT 1", 0) @@ -90,6 +86,35 @@ func TestScanTokens(t *testing.T) { } } +// TestSplitWithParser mirrors pg_query_go's parser-based split tests. +func TestSplitWithParser(t *testing.T) { + stmts, err := pg_query.SplitWithParser("CREATE RULE x AS ON SELECT TO tbl DO (SELECT 1; SELECT 2); SELECT 3", true) + if err != nil { + t.Fatal(err) + } + want := []string{"CREATE RULE x AS ON SELECT TO tbl DO (SELECT 1; SELECT 2)", "SELECT 3"} + if len(stmts) != len(want) || stmts[0] != want[0] || stmts[1] != want[1] { + t.Fatalf("SplitWithParser = %q, want %q", stmts, want) + } +} + +// TestIsUtilityStmt pins the statement classification split. +func TestIsUtilityStmt(t *testing.T) { + got, err := pg_query.IsUtilityStmt("SELECT 1; VACUUM; INSERT INTO t VALUES (1); CREATE TABLE t (a int)") + if err != nil { + t.Fatal(err) + } + want := []bool{false, true, false, true} + if len(got) != len(want) { + t.Fatalf("IsUtilityStmt returned %d results, want %d", len(got), len(want)) + } + for i := range want { + if got[i] != want[i] { + t.Errorf("IsUtilityStmt[%d] = %v, want %v", i, got[i], want[i]) + } + } +} + // TestSplitWithScanner mirrors pg_query_go's scanner-based split tests. func TestSplitWithScanner(t *testing.T) { stmts, err := pg_query.SplitWithScanner("SELECT /* comment with ; */ 1; SELECT 2", true) diff --git a/oracle/oracle b/oracle/oracle index 34360cb8fa0f58e9f55e0b6e252daf6052627768..19b19c10d18e76f80285859add157058cbbe24b3 100755 GIT binary patch delta 1172 zcmci8>0iqM0LSrHN|Y<)zHee}zqS2-{UUUmH9A(S9NBMMSz8)w*^)ElEQDM!_e~N@ zNv`C|Khi@l&wYC4FYw^~;QM{}Y5UV1*)}8?9&7Frduxh9^?lCY?F0QrZ+3jKzqun^ zlb>hz7ZsM5YO*W=hoL}nX83XfYL7A3BNz;xtTZLF*k#J7a(hi`leJbfT3jWSc1M9f zU`R_%H=8dm*RyvZk8m*|(B&r0_EXYYZ zIY}=z3|i8WflOp!9Sm3xBeG$_25dwQa*>C8m{EX2SWtvwlwcD!V+*#T6x(2h0vqgb zpbX{M4ks$$f*Y0Cfhu^g6T9F=HGHVSZuk*EE%t;4Ep<({{}i)@m~joko;vKsKJ3Q< z9K<2i<1mikC>n4K$8iEDaSEr=h$fuDS)4;N&f@|uq6L?58CP%>*U*aVxPc&U;udb> z4({R}?&AR-;t?L>37+B^o}&#f(2kerz$?5)2%UI?E_CB9dhiatc#jYGh)?*8K72tx TzTz9c;|G3XAQbHR6_flIJ~Q_l delta 1172 zcmci8$66Bs07c;sK@@BV0ekOY$RwFb0*Xo(La2cN7R;nbm(V1L6*X2+QL%u=-W3%M zirBH2jZYyP7rOVb^9fx1i+h)+=TCoN&oHmQBDA(4O7ZjeV3;qnG{V&Nz(F($WMZ>*G5CTp|KXsIZ!vODsd z+-dQN33^!-Z+2$6Ehz~puC(kDmrHBbNl!%530@Tnz z3lS1@(8GWj#9|qiBMvLD5~~o81SIQIjcG-5NF;6^jH_=YSk?Y93Evy+&S9`8U4wqhH$ zV+VF(7h16!d$1QC?8AN>z(E|sVYHzgM{pF!(1GJPfs^RODV)X`oJAM9aSrF<#RXi% zC0xc8T*Wn9#|_-XE!@T(+{Hcg;65JUA$su$kKscfp5Q6^@eBiaju&`|S9py#c#A>2 V!+U(dM|{F(e8E?rci>w{++W+6_J;rf diff --git a/parser/parser.go b/parser/parser.go index 3b2754f..ad087e5 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -152,8 +152,26 @@ func SplitWithScanner(input string, trimSpace bool) (result []string, err error) } } +// SplitWithParser splits on the RawStmt boundaries of a real parse +// (pg_query_split.c: pg_query_split_with_parser); a zero stmt_len runs to +// the end of the input. func SplitWithParser(input string, trimSpace bool) (result []string, err error) { - return nil, errNotImplemented("SplitWithParser") + tree, perr := parse.Parse(input) + if perr != nil { + return nil, scanErr(perr) + } + for _, raw := range tree.Stmts { + end := raw.StmtLocation + raw.StmtLen + if raw.StmtLen == 0 { + end = int32(len(input)) + } + stmt := input[raw.StmtLocation:end] + if trimSpace { + stmt = strings.TrimSpace(stmt) + } + result = append(result, stmt) + } + return result, nil } func FingerprintToUInt64(input string) (result uint64, err error) { @@ -170,8 +188,25 @@ func HashXXH3_64(input []byte, seed uint64) (result uint64) { return xxh3.Hash64Seed(input, seed) } +// IsUtilityStmt reports, per statement, whether it is a utility statement +// (pg_query_is_utility_stmt.c: everything except SELECT/INSERT/UPDATE/ +// DELETE/MERGE). func IsUtilityStmt(input string) (result []bool, err error) { - return nil, errNotImplemented("IsUtilityStmt") + tree, perr := parse.Parse(input) + if perr != nil { + return nil, scanErr(perr) + } + result = make([]bool, 0, len(tree.Stmts)) + for _, raw := range tree.Stmts { + switch raw.Stmt.Node.(type) { + case *ast.Node_SelectStmt, *ast.Node_InsertStmt, *ast.Node_UpdateStmt, + *ast.Node_DeleteStmt, *ast.Node_MergeStmt: + result = append(result, false) + default: + result = append(result, true) + } + } + return result, nil } func SummaryToProtobuf(input string, truncateLimit int) ([]byte, error) { diff --git a/parser/testdata/split_parser/libpg_query.metadata.json b/parser/testdata/split_parser/libpg_query.metadata.json index 5e6664a..737fd31 100644 --- a/parser/testdata/split_parser/libpg_query.metadata.json +++ b/parser/testdata/split_parser/libpg_query.metadata.json @@ -1,12 +1,3 @@ { - "todo": [ - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008" - ] + "todo": [] } From 021e06c196f5325011a92453697cdc58ebf10696 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 16 Aug 2026 19:54:58 +0000 Subject: [PATCH 24/24] PLAN.md: milestones 6 and 7 as-built notes Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01J19Kf5LpGUhi2vxFJjzQJE --- PLAN.md | 59 +++++++++++++++++++++++++++++----- internal/parse/ddl_dispatch.go | 1 - internal/parse/names.go | 1 - 3 files changed, 51 insertions(+), 10 deletions(-) diff --git a/PLAN.md b/PLAN.md index c75b0de..f18f9d9 100644 --- a/PLAN.md +++ b/PLAN.md @@ -392,15 +392,18 @@ gate; the corpus harness exists before the first line of the lexer. 5. **DML.** ✅ *Landed 2026-08-16.* `INSERT` (`ON CONFLICT`, `OVERRIDING`), `UPDATE`, `DELETE`, `MERGE`, `RETURNING`, `COPY`, `PREPARE`/`EXECUTE`, cursors. See "As-built notes (milestone 5)". -6. **DDL, part 1.** `CREATE`/`ALTER TABLE` (the second-biggest grammar - region: constraints, partitioning, identity, storage options), - `CREATE INDEX`, views, sequences, schemas. -7. **DDL, part 2 + utility.** The long tail of ~150 statement types: - functions/procedures, triggers, policies, roles/grants, types/domains, - FDWs, publications/subscriptions, `EXPLAIN`/`VACUUM`/`SET`/`SHOW`, event - triggers, … `SplitWithParser` and `IsUtilityStmt` fall out here. +6. **DDL, part 1.** ✅ *Landed 2026-08-16.* `CREATE`/`ALTER TABLE` (the + second-biggest grammar region: constraints, partitioning, identity, + storage options), `CREATE INDEX`, views, sequences, schemas. See + "As-built notes (milestones 6–7)". +7. **DDL, part 2 + utility.** ✅ *Landed 2026-08-16.* The long tail of ~150 + statement types: functions/procedures, triggers, policies, roles/grants, + types/domains, FDWs, publications/subscriptions, + `EXPLAIN`/`VACUUM`/`SET`/`SHOW`, event triggers, … `SplitWithParser` and + `IsUtilityStmt` ship here. **Gate for 4–7:** 100% of the regress corpus — trees, JSON bytes, error - messages, cursor positions. + messages, cursor positions — met: the parse suite's todo list is empty + (42,970 cases across every tier), as are scan and both split suites. 8. **Normalize + Fingerprint.** Port `pg_query_normalize.c` (constant locations → `$n`, `NormalizeUtility`); generated fingerprint walk + the hand-written special cases. **Gate:** all normalize/fingerprint goldens, @@ -555,6 +558,46 @@ Measured at the pin, where the plan's estimates differ: and the `-summary` classifier shows no tree or error mismatches against any implemented statement. +### As-built notes (milestones 6–7) + +- Statement dispatch is a family of lookahead routers + (`internal/parse/ddl_dispatch.go`, `ddl_alter_generic.go`): each + CREATE/ALTER/DROP object-kind arm parses the object reference once, then + the following token picks the production, mirroring how the LALR tables + keep RenameStmt/AlterObjectSchemaStmt/AlterOwnerStmt/ + AlterObjectDependsStmt alive alongside each object's own ALTER statement. + A shared `parseAlterGenericTail` implements the four generic tails with a + per-kind support mask, so `ALTER LANGUAGE x SET SCHEMA` still fails at + the token bison would reject. +- The CreateStmt/CreateAsStmt ambiguity (`CREATE TABLE t (…)` element list + vs. `create_as_target` column list) is the one new bounded-backtracking + site: the CTAS reading is tried first and commits only when its `AS` + arrives, else the position resets and the element list parses. +- C's zero-valued enums surface as their proto-shifted spellings, which the + goldens made explicit: every `AlterTableCmd`/`RenameStmt` carries + `behavior: DROP_RESTRICT`, `RenameStmt.relationType` defaults to + `OBJECT_ACCESS_METHOD`, and `AlterPublicationStmt.action` to + `AP_AddObjects`. Two NIL-vs-empty-list shapes matter: the zero-argument + `(*)` aggregate stores a null list element in `DefineStmt.args`, and an + empty `BEGIN ATOMIC` body stores `[NIL]`, not `[[]]`. +- Support-function ereports carry their C call site's funcname + (`processCASbits`, `SplitColQualList`, `makeOrderedSetArgs`, + `preprocess_pubobj_list`, …), and `ConstraintAttributeSpec`'s own + location is always -1 (PG's `YYLLOC_DEFAULT` gives empty productions -1 + and the left recursion propagates it), so `processCASbits` errors have no + cursor position. +- The `base_yylex`-merged `*_LA` tokens keep their first word's keyword + classification in the lexer but are never identifiers in the grammar; the + identifier-class helpers reject them (found via `nulls first` in + `index_elem`, where `NULLS_LA` must not parse as an opclass name). +- `makeRangeVarFromAnyName` builds via `makeNode`, so `inh` stays false — + unlike `makeRangeVar`'s true — which the CompositeTypeStmt goldens pin. +- `cmd/difftodo` (debug aid) prints input/want/got for a file's remaining + parse todos; it drove the long-tail mismatch hunt to zero. +- Corpus effect: all 19,787 remaining parse todos graduated, plus the 8 + `split_parser` cases. The remaining todo suites (deparse, fingerprint, + normalize, normalize_utility) belong to milestones 8–9. + ## Regeneration (the PostgreSQL-upgrade story) Everything derived is derived by committed tooling from the pin: diff --git a/internal/parse/ddl_dispatch.go b/internal/parse/ddl_dispatch.go index 64079e8..a6c904d 100644 --- a/internal/parse/ddl_dispatch.go +++ b/internal/parse/ddl_dispatch.go @@ -533,4 +533,3 @@ const ( relPersistTemp = "t" relPersistUnlogged = "u" ) - diff --git a/internal/parse/names.go b/internal/parse/names.go index 5b96409..83b4a6a 100644 --- a/internal/parse/names.go +++ b/internal/parse/names.go @@ -12,7 +12,6 @@ import ( // its canonical lower-case spelling, an IDENT's Str is the downcased, // truncated identifier — in both cases exactly the C production's $$. - // isLookaheadMergedToken reports whether tok is one of base_yylex's merged // lookahead terminals. They inherit the keyword classification of their // first word from the lexer, but the grammar treats them as distinct