From f328e13d5159a5e64bdce5e760ed125bce8b958e Mon Sep 17 00:00:00 2001 From: Zach Musgrave Date: Wed, 22 Jan 2025 13:36:06 -0800 Subject: [PATCH 1/2] Fixed a couple bugs in column default normalization: 1) editing the expression tree in place so the change is invisible to debug logging, 2) normalizing some literals that should manage their own round-trip serialization --- sql/analyzer/resolve_column_defaults.go | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/sql/analyzer/resolve_column_defaults.go b/sql/analyzer/resolve_column_defaults.go index 3711b6e20e..8c99e8495a 100644 --- a/sql/analyzer/resolve_column_defaults.go +++ b/sql/analyzer/resolve_column_defaults.go @@ -438,13 +438,27 @@ func normalizeDefault(ctx *sql.Context, colDefault *sql.ColumnDefaultValue) (sql return colDefault, transform.SameTree, nil } typ := colDefault.Type() - if types.IsTime(typ) || types.IsTimespan(typ) || types.IsEnum(typ) || types.IsSet(typ) || types.IsJSON(typ) { + if skipDefaultNormalizationForType(typ) { return colDefault, transform.SameTree, nil } val, err := colDefault.Eval(ctx, nil) if err != nil { return colDefault, transform.SameTree, nil } - colDefault.Expr = expression.NewLiteral(val, typ) - return colDefault, transform.NewTree, nil + + newDefault, err := colDefault.WithChildren(expression.NewLiteral(val, typ)) + if err != nil { + return nil, transform.SameTree, err + } + return newDefault, transform.NewTree, nil +} + +// skipDefaultNormalizationForType returns true if the default value for the given type should not be normalized for +// serialization before being passed to the integrator for table creation +func skipDefaultNormalizationForType(typ sql.Type) bool { + // Extended types handle their own serialization concerns + if _, ok := typ.(types.ExtendedType); ok { + return true + } + return types.IsTime(typ) || types.IsTimespan(typ) || types.IsEnum(typ) || types.IsSet(typ) || types.IsJSON(typ) } From 88dcda4ce0f6d48476841a81df9aace4a592ae99 Mon Sep 17 00:00:00 2001 From: zachmu Date: Wed, 22 Jan 2025 23:20:16 +0000 Subject: [PATCH 2/2] [ga-format-pr] Run ./format_repo.sh to fix formatting --- sql/analyzer/resolve_column_defaults.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sql/analyzer/resolve_column_defaults.go b/sql/analyzer/resolve_column_defaults.go index 8c99e8495a..3a1dbd0019 100644 --- a/sql/analyzer/resolve_column_defaults.go +++ b/sql/analyzer/resolve_column_defaults.go @@ -445,7 +445,7 @@ func normalizeDefault(ctx *sql.Context, colDefault *sql.ColumnDefaultValue) (sql if err != nil { return colDefault, transform.SameTree, nil } - + newDefault, err := colDefault.WithChildren(expression.NewLiteral(val, typ)) if err != nil { return nil, transform.SameTree, err @@ -453,7 +453,7 @@ func normalizeDefault(ctx *sql.Context, colDefault *sql.ColumnDefaultValue) (sql return newDefault, transform.NewTree, nil } -// skipDefaultNormalizationForType returns true if the default value for the given type should not be normalized for +// skipDefaultNormalizationForType returns true if the default value for the given type should not be normalized for // serialization before being passed to the integrator for table creation func skipDefaultNormalizationForType(typ sql.Type) bool { // Extended types handle their own serialization concerns