Skip to content

Commit 0e3ada8

Browse files
elianddbclaude
andcommitted
Fix #9428: Allow default keyword as value for generated columns.
🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
1 parent 8f7bd00 commit 0e3ada8

File tree

3 files changed

+43
-6
lines changed

3 files changed

+43
-6
lines changed

enginetest/queries/generated_columns.go

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,14 @@ var GeneratedColumnTests = []ScriptTest{
6565
Query: "select * from t1 where b = 5 order by a",
6666
Expected: []sql.Row{{4, 5}},
6767
},
68+
{
69+
Query: "insert into t1 values (5, DEFAULT)",
70+
Expected: []sql.Row{{types.NewOkResult(1)}},
71+
},
72+
{
73+
Query: "select * from t1 where a = 5",
74+
Expected: []sql.Row{{5, 6}},
75+
},
6876
{
6977
Query: "update t1 set b = b + 1",
7078
ExpectedErr: sql.ErrGeneratedColumnValue,
@@ -75,15 +83,43 @@ var GeneratedColumnTests = []ScriptTest{
7583
},
7684
{
7785
Query: "select * from t1 order by a",
78-
Expected: []sql.Row{{2, 3}, {3, 4}, {4, 5}, {10, 11}},
86+
Expected: []sql.Row{{2, 3}, {3, 4}, {4, 5}, {5, 6}, {10, 11}},
7987
},
8088
{
8189
Query: "delete from t1 where b = 11",
8290
Expected: []sql.Row{{types.NewOkResult(1)}},
8391
},
8492
{
8593
Query: "select * from t1 order by a",
86-
Expected: []sql.Row{{2, 3}, {3, 4}, {4, 5}},
94+
Expected: []sql.Row{{2, 3}, {3, 4}, {4, 5}, {5, 6}},
95+
},
96+
},
97+
},
98+
{
99+
Name: "generated column with DEFAULT in VALUES clause (issue #9428)",
100+
SetUpScript: []string{
101+
"create table t (i int generated always as (1 + 1))",
102+
},
103+
Assertions: []ScriptTestAssertion{
104+
{
105+
Query: "insert into t values (default)",
106+
Expected: []sql.Row{{types.NewOkResult(1)}},
107+
},
108+
{
109+
Query: "select * from t",
110+
Expected: []sql.Row{{2}},
111+
},
112+
{
113+
Query: "insert into t values (default), (default)",
114+
Expected: []sql.Row{{types.NewOkResult(2)}},
115+
},
116+
{
117+
Query: "select * from t order by i",
118+
Expected: []sql.Row{{2}, {2}, {2}},
119+
},
120+
{
121+
Query: "insert into t values (5)",
122+
ExpectedErr: sql.ErrGeneratedColumnValue,
87123
},
88124
},
89125
},

sql/planbuilder/dml.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,6 @@ func (b *Builder) buildInsert(inScope *scope, i *ast.Insert) (outScope *scope) {
7676
schema := rt.Schema()
7777
columns = make([]string, len(schema))
7878
for i, col := range schema {
79-
// Tables with any generated column must always supply a column list, so this is always an error
80-
if col.Generated != nil {
81-
b.handleErr(sql.ErrGeneratedColumnValue.New(col.Name, rt.Name()))
82-
}
8379
columns[i] = col.Name
8480
}
8581
}

sql/planbuilder/dml_validate.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,12 @@ func validGeneratedColumnValue(idx int, source sql.Node) bool {
165165
if _, ok := val.Unwrap().(*sql.ColumnDefaultValue); ok {
166166
return true
167167
}
168+
if _, ok := val.Unwrap().(*expression.DefaultColumn); ok {
169+
return true
170+
}
168171
return false
172+
case *expression.DefaultColumn: // handle unwrapped DefaultColumn
173+
return true
169174
default:
170175
return false
171176
}

0 commit comments

Comments
 (0)