Skip to content

Commit f777d41

Browse files
elianddbclaude
andcommitted
Prevent user and system variables in column default and generated values
This change adds validation to prevent user variables (@variable) and system variables (@@variable) from being used in column default value expressions and generated column expressions, matching MySQL's behavior. Added ErrColumnDefaultUserVariable error and validation logic in validateColumnDefault function to detect UserVar and SystemVar expressions. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
1 parent 1af0f6e commit f777d41

File tree

2 files changed

+6
-0
lines changed

2 files changed

+6
-0
lines changed

sql/analyzer/resolve_column_defaults.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,9 @@ func validateColumnDefault(ctx *sql.Context, col *sql.Column, colDefault *sql.Co
233233
var err error
234234
sql.Inspect(colDefault.Expr, func(e sql.Expression) bool {
235235
switch e.(type) {
236+
case *expression.UserVar, *expression.SystemVar:
237+
err = sql.ErrColumnDefaultUserVariable.New(col.Name)
238+
return false
236239
case sql.FunctionExpression, *expression.UnresolvedFunction:
237240
var funcName string
238241
switch expr := e.(type) {

sql/errors.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,9 @@ var (
147147
// ErrInvalidColumnDefaultValue is returned when column default function value is not wrapped in parentheses for column types excluding datetime and timestamp
148148
ErrInvalidColumnDefaultValue = errors.NewKind("Invalid default value for '%s'")
149149

150+
// ErrColumnDefaultUserVariable is returned when a column default expression contains user or system variables
151+
ErrColumnDefaultUserVariable = errors.NewKind("Default value expression of column '%s' cannot refer user or system variables.")
152+
150153
// ErrInvalidDefaultValueOrder is returned when a default value references a column that comes after it and contains a default expression.
151154
ErrInvalidDefaultValueOrder = errors.NewKind(`default value of column "%s" cannot refer to a column defined after it if those columns have an expression default value`)
152155

0 commit comments

Comments
 (0)