Documentation
¶
Overview ¶
Package expr 定义 VDS SQL 层的表达式接口和基础表达式类型。
M1 支持三种表达式:
- Constant:字面量常量(来自 VALUES / SET 子句)
- ColumnRef:列引用(来自 SELECT 列表 / WHERE 条件)
- BinaryOp:二元运算(=、>、<、AND、OR)
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type AutoIncExpr ¶ added in v1.1.6
type AutoIncExpr struct{}
AutoIncExpr 自增占位符表达式(AUTO_INCREMENT 列插入时使用,求值时由执行器调用 NextAutoInc())
type BetweenExpr ¶ added in v1.1.6
type BetweenExpr struct {
// Expr 被测试的表达式
Expr Expression
// Low 范围下界(含)
Low Expression
// High 范围上界(含)
High Expression
// Not 为 true 时表示 NOT BETWEEN
Not bool
}
BetweenExpr BETWEEN ... AND ... 表达式
type BinaryOp ¶
type BinaryOp struct {
// Op 运算符
Op Op
// Left 左操作数
Left Expression
// Right 右操作数
Right Expression
}
BinaryOp 二元运算表达式
type CaseExpr ¶ added in v1.1.6
type CaseExpr struct {
// Value 简单 CASE 的比较值(可为 nil = 搜索 CASE)
Value Expression
// WhenClauses WHEN ... THEN ... 分支列表
WhenClauses []WhenClause
// ElseExpr ELSE 分支(可为 nil,此时无匹配返回 NULL)
ElseExpr Expression
}
CaseExpr CASE WHEN 条件表达式。 Value 为 nil 时为"搜索 CASE"(CASE WHEN cond THEN ...), Value 非 nil 时为"简单 CASE"(CASE val WHEN v1 THEN ...)。
type ColumnRef ¶
type ColumnRef struct {
// ColName 列名(用于显示和调试)
ColName string
// ColIndex 在输入 Schema 中的列索引(Planner 解析后填充)
ColIndex int
}
ColumnRef 列引用表达式
type Constant ¶
type Constant struct {
// Value 常量值
Value interface{}
}
Constant 字面量常量表达式 Value 的 Go 类型遵循 types.Value 约定:
- nil → NULL
- int64 → INT / TIMESTAMP
- float64 → FLOAT
- string → VARCHAR
- bool → BOOL
- []byte → BLOB
type ExistsSubquery ¶ added in v1.1.6
type ExistsSubquery struct {
// Plan 子查询物理计划
Plan interface{}
// Not 为 true 时为 NOT EXISTS
Not bool
}
ExistsSubquery EXISTS (SELECT ...) 或 NOT EXISTS
type Expression ¶
type Expression interface {
// contains filtered or unexported methods
}
Expression 表达式接口,所有表达式类型必须实现此接口。
type FuncExpr ¶ added in v1.1.6
type FuncExpr struct {
// Name 函数名(小写)
Name string
// Args 函数参数列表
Args []Expression
}
FuncExpr 函数调用表达式(LENGTH/UPPER/LOWER/SUBSTR 等)。
type InListExpr ¶ added in v1.1.6
type InListExpr struct {
// Expr 被检查的表达式
Expr Expression
// List 值列表
List []Expression
// Not 为 true 时表示 NOT IN
Not bool
}
InListExpr IN 值列表表达式(x IN (v1, v2, ...) / x NOT IN (...))。 子查询版本(x IN (SELECT ...))暂不支持。
type InSubquery ¶ added in v1.1.6
type InSubquery struct {
// Expr 左侧被测试的值
Expr Expression
// Plan 子查询物理计划
Plan interface{}
// Not 为 true 时为 NOT IN
Not bool
}
InSubquery col IN (SELECT ...) 或 col NOT IN (SELECT ...)
type IsNullExpr ¶ added in v1.1.6
type IsNullExpr struct {
// Expr 被检查的表达式
Expr Expression
// Not 为 true 时表示 IS NOT NULL
Not bool
}
IsNullExpr NULL 检查表达式(IS NULL / IS NOT NULL)。 求值:递归求值 Expr,若结果为 nil 则 IS NULL=true,IS NOT NULL=false。
type LikeExpr ¶ added in v1.1.6
type LikeExpr struct {
// Expr 被匹配的表达式
Expr Expression
// Pattern 匹配模式(% 多字符,_ 单字符)
Pattern Expression
// Not 为 true 时表示 NOT LIKE
Not bool
// Escape 转义字符(0 表示无自定义转义,默认 \)
Escape byte
}
LikeExpr LIKE 模式匹配表达式(x LIKE '%pat%' / x NOT LIKE '%pat%')。 求值:将 Expr 和 Pattern 转为字符串,按 SQL LIKE 语法匹配。
type ParamRef ¶
type ParamRef struct {
// Offset 参数索引(0-base),命名参数时为 -1
Offset int
// Name 命名参数名称(如 "name" 对应 @name),位置参数时为空
Name string
}
ParamRef 参数引用表达式(M2 新增) Offset 对应 SQL 中第 N 个 ? 占位符(0-indexed),运行时从 ExecContext.Params 中取值。 Name 为非空时表示命名参数(如 @name),运行时从 ExecContext.NamedParams 中取值。
type ScalarSubquery ¶ added in v1.1.6
type ScalarSubquery struct {
Plan interface{} // *planner.PhysicalPlan 实际类型
}
ScalarSubquery 标量子查询(返回单行单列的 SELECT) Plan 持有已构建的 PhysicalPlan(interface{} 以避免循环依赖)
type WhenClause ¶ added in v1.1.6
type WhenClause struct {
// When WHEN 条件表达式
When Expression
// Then THEN 结果表达式
Then Expression
}
WhenClause WHEN 条件 → THEN 结果