feat(postgres): Support generated columns #4472
Merged
+18
−0
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.
Fixes #4463
Postgres supports the following column constraints for
CREATE TABLE
DDLs:The former defines a generated column while the latter an identity one.
This PR overrides
parser.py::_parse_generated_as_identity()
which will transform the producedexp.GeneratedAsIdentityColumnConstraint
into anexp.ComputedColumnConstraint()
, as is already happening onspark.py
.Warning
Something that stands out as bad naming/design is the fact that
exp.GeneratedAsIdentityColumnConstraint
should concern only IDENTITY columns, but overtime it has grown to parse different variants of theGENERATED
syntax even if semantically they're not equivalent.This leads to the "hacky" solution of having to transform it to
exp.ComputedColumnConstraint
after it has been parsed, as is happening in the PR. Should we make an effort to deduplicate the two?Docs
PSQL CREATE TABLE | PSQL GENERATED columns | PSQL IDENTITY columns