feat: deparse modified AST and improve INSERT pretty-printing #256
+128
−83
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
This PR enables AST-based transformations for SQL statements inside PL/pgSQL function bodies and improves pretty-printing for INSERT statements.
plpgsql-deparser changes:
sql-stmtkind: Now usesDeparser.deparse()to convert the modified AST back to SQLsql-exprkind: Still returnsoriginalstring (backward compatible)assignkind: Usestargetandvaluestrings directly (backward compatible)DehydrationOptionsinterface to thread SQL deparse options throughpgsql-deparser changes:
isPretty()isPretty()Use case: Schema renaming in introspection exports - when SQL statements inside function bodies need their schema references transformed.
DehydrationOptions API
This threads options through
dehydratePlpgsqlAst→dehydrateNode→dehydrateQuery→Deparser.deparse().Updates since last revision
Review & Testing Checklist for Human
excluded(notEXCLUDED) and no column alignment in SET clauses - verify this is acceptable for your use caseASaliases, parentheses placement) compared to original SQL - review the snapshot diff carefullyRecommended test plan:
pnpm testinpackages/plpgsql-deparser- all 23 tests should passpnpm testinpackages/deparser- verify no new failuresNotes
sql-exprkind intentionally still returnsoriginalfor backward compatibilityDehydrationOptionsis exported from the package for callers to useLink to Devin run: https://app.devin.ai/sessions/cf99eca9a417440f98c23cd9db41555b
Requested by: Dan Lynch (@pyramation)