[
https://issues.apache.org/jira/browse/SPARK-60032?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
ASF GitHub Bot updated SPARK-60032:
-----------------------------------
Labels: pull-request-available (was: )
> ALTER TABLE ADD CONSTRAINT builds the stored CHECK predicate from the
> optimized expression, freezing current_timestamp()
> ------------------------------------------------------------------------------------------------------------------------
>
> Key: SPARK-60032
> URL: https://issues.apache.org/jira/browse/SPARK-60032
> Project: Spark
> Issue Type: Bug
> Components: SQL
> Affects Versions: 5.0.0
> Reporter: Yang Jie
> Priority: Major
> Labels: pull-request-available
>
> For ALTER TABLE ... ADD CONSTRAINT ... CHECK, DataSourceV2Strategy calls
> CheckConstraint.toV2Constraint on the optimized plan, so the V2 predicate
> stored in the catalog is built from the optimized expression. Writes resolve
> the stored predicate() before predicateSql
> (ResolveTableConstraints.buildCatalystExpression), so whatever the optimizer
> did at ALTER time is what later writes enforce.
> For example, ComputeCurrentTime folds current_timestamp() into a literal:
> ALTER TABLE t ADD CONSTRAINT vt CHECK (ts <= current_timestamp());
> -- the stored predicate is ts <= <ALTER time literal>
> INSERT INTO t VALUES (1, 'a', current_timestamp());
> -- fails with CHECK_CONSTRAINT_VIOLATION, although the message shows ts <=
> current_timestamp()
> CREATE TABLE is not affected, because ResolveTableSpec builds its predicate
> during analysis. DefaultValueExpression and GeneratedColumnExpression avoid
> the same problem by building their V2 form from analyzedChild
> (AnalysisAwareExpression). Building the CHECK predicate from the analyzed
> expression would do the same here.
> Raised in https://github.com/apache/spark/pull/59217#discussion_r4199939321
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]