expr

package
v1.2.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 29, 2026 License: AGPL-3.0 Imports: 1 Imported by: 0

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 Op

type Op uint8

Op 二元运算符枚举

const (
	// OpEQ 等于(=)
	OpEQ Op = iota
	// OpNE 不等于(<>)
	OpNE
	// OpGT 大于(>)
	OpGT
	// OpGE 大于等于(>=)
	OpGE
	// OpLT 小于(<)
	OpLT
	// OpLE 小于等于(<=)
	OpLE
	// OpAND 逻辑与(AND)
	OpAND
	// OpOR 逻辑或(OR)
	OpOR
	// OpAdd 加法(+)
	OpAdd
	// OpSub 减法(-)
	OpSub
	// OpMul 乘法(*)
	OpMul
	// OpDiv 除法(/)
	OpDiv
	// OpMod 取模(%)
	OpMod
)

func (Op) String

func (o Op) String() string

String 返回运算符的 SQL 表示

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 结果

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL