Skip to content

feat: parse ALTER TABLE/INDEX SET TABLESPACE, ALTER DOMAIN, ALTER TRIGGER, ALTER EXTENSION, ALTER PROCEDURE#2311

Closed
fmguerreiro wants to merge 36 commits into
apache:mainfrom
fmguerreiro:feat/alter-set
Closed

feat: parse ALTER TABLE/INDEX SET TABLESPACE, ALTER DOMAIN, ALTER TRIGGER, ALTER EXTENSION, ALTER PROCEDURE#2311
fmguerreiro wants to merge 36 commits into
apache:mainfrom
fmguerreiro:feat/alter-set

Conversation

@fmguerreiro

Copy link
Copy Markdown
Contributor

Summary

Adds PostgreSQL grammar for five DDL variants that previously failed to parse:

  • ALTER TABLE t SET TABLESPACE ts and ALTER INDEX idx SET TABLESPACE ts — extends AlterTableOperation and AlterIndexOperation with a SetTablespace variant (pgmold-109, pgmold-110)
  • ALTER DOMAIN d ADD CONSTRAINT / DROP CONSTRAINT — new AlterDomain statement with AlterDomainOperation enum covering ADD/DROP CONSTRAINT, RENAME CONSTRAINT, RENAME TO, OWNER TO, SET SCHEMA, SET DEFAULT, DROP DEFAULT, VALIDATE CONSTRAINT (pgmold-113)
  • ALTER TRIGGER name ON table RENAME TO new_name — new AlterTrigger statement (pgmold-124)
  • ALTER EXTENSION ext UPDATE [TO version] — new AlterExtension statement with UPDATE TO, SET SCHEMA, OWNER TO, RENAME TO operations (pgmold-126)
  • ALTER PROCEDURE name(args) action — extends AlterFunctionKind with a Procedure variant, reusing the existing AlterFunction machinery (pgmold-130)

Changes

  • src/ast/ddl.rs: new structs AlterDomain, AlterDomainOperation, AlterTrigger, AlterTriggerOperation, AlterExtension, AlterExtensionOperation; extends AlterTableOperation, AlterIndexOperation, AlterFunctionKind
  • src/ast/mod.rs: adds Statement::AlterDomain, Statement::AlterExtension, Statement::AlterTrigger variants; updates re-exports and Display match
  • src/ast/spans.rs: exhaustive arms for new Statement variants and operations
  • src/parser/mod.rs: extends parse_alter dispatch; adds parse_alter_domain, parse_alter_trigger, parse_alter_extension; wires PROCEDURE to parse_alter_function(AlterFunctionKind::Procedure)
  • tests/sqlparser_postgres.rs: round-trip tests for all five variants

Note: fork CI does not run automatically on this repo — correctness is validated by the inline tests.

…R TABLE operations (#1)

PostgreSQL supports FORCE ROW LEVEL SECURITY and NO FORCE ROW LEVEL SECURITY
as ALTER TABLE operations. Add parsing support for both variants.
feat: parse EXCLUDE constraints for PostgreSQL
…m-main

# Conflicts:
#	Cargo.toml
#	src/ast/ddl.rs
#	src/ast/helpers/stmt_create_table.rs
#	src/ast/mod.rs
#	src/ast/spans.rs
#	src/ast/table_constraints.rs
#	src/parser/mod.rs
#	tests/sqlparser_postgres.rs
chore: merge upstream apache/datafusion-sqlparser-rs main
- Add HANDLER and VALIDATOR keywords to the keyword list
- Add FdwRoutineClause enum for HANDLER/NO HANDLER and VALIDATOR/NO VALIDATOR clauses
- Add CreateForeignDataWrapper struct for CREATE FOREIGN DATA WRAPPER
- Add CreateForeignTable struct for CREATE FOREIGN TABLE
- Export new types from ast::mod and add Statement variants
- Add spans.rs coverage returning Span::empty() for the new variants
- Dispatch on FOREIGN keyword in parse_create, branching on DATA WRAPPER or TABLE
- parse_create_foreign_data_wrapper: parses optional HANDLER/NO HANDLER,
  VALIDATOR/NO VALIDATOR, and OPTIONS clauses
- parse_create_foreign_table: parses IF NOT EXISTS, column list via parse_columns,
  required SERVER name, and optional OPTIONS clause
Round-trip tests via pg().verified_stmt for:
- FDW: name-only, HANDLER, NO HANDLER, NO VALIDATOR, combined HANDLER+VALIDATOR+OPTIONS
- FOREIGN TABLE: basic columns+SERVER, IF NOT EXISTS, table-level OPTIONS
Add Statement::CreateAggregate, CreateAggregate struct, CreateAggregateOption
enum, and AggregateModifyKind enum to represent PostgreSQL CREATE AGGREGATE
DDL. Options are stored as a typed enum covering all documented parameters
(SFUNC, STYPE, FINALFUNC, PARALLEL, moving-aggregate variants, etc.).
Wire AGGREGATE into the CREATE dispatch (before the or_replace error branch
so CREATE OR REPLACE AGGREGATE is accepted). parse_create_aggregate parses
the name, argument-type list, and the options block. Each recognised option
keyword dispatches to parse_create_aggregate_option which produces the typed
CreateAggregateOption variant.
Three tests covering: basic old-style aggregate (SFUNC/STYPE/FINALFUNC/INITCOND),
CREATE OR REPLACE with PARALLEL = SAFE, and moving-aggregate options
(MSFUNC/MINVFUNC/MSTYPE/MFINALFUNC_EXTRA/MFINALFUNC_MODIFY). All use
pg().verified_stmt() to assert parse-then-display round-trips identically.
feat: parse CREATE TEXT SEARCH CONFIGURATION/DICTIONARY/PARSER/TEMPLATE
# Conflicts:
#	src/ast/ddl.rs
#	src/ast/mod.rs
# Conflicts:
#	src/ast/ddl.rs
#	src/ast/mod.rs
#	src/parser/mod.rs
# Conflicts:
#	src/ast/ddl.rs
#	src/ast/mod.rs
#	tests/sqlparser_postgres.rs
feat: parse CREATE FOREIGN DATA WRAPPER and CREATE FOREIGN TABLE
PR #7 added the Statement::CreateAggregate variant but omitted the
corresponding match arm in the Spanned impl for Statement. Fork CI
never ran on the PR so this was not caught before merge.
fix(spans): add Span arm for CreateAggregate
…rFunctionKind with Procedure, add SetTablespace to AlterTableOperation and AlterIndexOperation

Adds AST types and Display impls for:
- AlterDomain + AlterDomainOperation (ADD/DROP CONSTRAINT, RENAME, OWNER TO, SET SCHEMA/DEFAULT, DROP DEFAULT, VALIDATE CONSTRAINT)
- AlterTrigger + AlterTriggerOperation (RENAME TO)
- AlterExtension + AlterExtensionOperation (UPDATE TO, SET SCHEMA, OWNER TO, RENAME TO)
- AlterFunctionKind::Procedure variant for ALTER PROCEDURE
- AlterTableOperation::SetTablespace
- AlterIndexOperation::SetTablespace

Updates Spanned impls to remain exhaustive.
@fmguerreiro

Copy link
Copy Markdown
Contributor Author

Opened against wrong repo — this is a fork-specific change.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant