Documentation
¶
Index ¶
- func EvalBool(expr Expression, row []types.Datum, ctx context.Context) (bool, error)
- type AggFunctionMode
- type AggregationFunction
- type Assignment
- type Column
- func (col *Column) Clone() Expression
- func (col *Column) Decorrelate(_ Schema) Expression
- func (col *Column) Equal(expr Expression) bool
- func (col *Column) Eval(row []types.Datum, _ context.Context) (types.Datum, error)
- func (col *Column) GetType() *types.FieldType
- func (col *Column) HashCode() []byte
- func (col *Column) IsCorrelated() bool
- func (col *Column) MarshalJSON() ([]byte, error)
- func (col *Column) ResolveIndices(schema Schema)
- func (col *Column) String() string
- type Constant
- func (c *Constant) Clone() Expression
- func (c *Constant) Decorrelate(_ Schema) Expression
- func (c *Constant) Equal(b Expression) bool
- func (c *Constant) Eval(_ []types.Datum, _ context.Context) (types.Datum, error)
- func (c *Constant) GetType() *types.FieldType
- func (c *Constant) HashCode() []byte
- func (c *Constant) IsCorrelated() bool
- func (c *Constant) MarshalJSON() ([]byte, error)
- func (c *Constant) ResolveIndices(_ Schema)
- func (c *Constant) String() string
- type CorrelatedColumn
- func (col *CorrelatedColumn) Clone() Expression
- func (col *CorrelatedColumn) Decorrelate(schema Schema) Expression
- func (col *CorrelatedColumn) Equal(expr Expression) bool
- func (col *CorrelatedColumn) Eval(row []types.Datum, _ context.Context) (types.Datum, error)
- func (col *CorrelatedColumn) IsCorrelated() bool
- func (col *CorrelatedColumn) ResolveIndices(_ Schema)
- type Expression
- func ComposeCNFCondition(conditions []Expression) Expression
- func ComposeDNFCondition(conditions []Expression) Expression
- func EvaluateExprWithNull(schema Schema, expr Expression) (Expression, error)
- func NewFunction(funcName string, retType *types.FieldType, args ...Expression) (Expression, error)
- func ScalarFuncs2Exprs(funcs []*ScalarFunction) []Expression
- func Schema2Exprs(schema Schema) []Expression
- func SplitCNFItems(onExpr Expression) []Expression
- func SplitDNFItems(onExpr Expression) []Expression
- type ScalarFunction
- func (sf *ScalarFunction) Clone() Expression
- func (sf *ScalarFunction) Decorrelate(schema Schema) Expression
- func (sf *ScalarFunction) Equal(e Expression) bool
- func (sf *ScalarFunction) Eval(row []types.Datum, ctx context.Context) (types.Datum, error)
- func (sf *ScalarFunction) GetType() *types.FieldType
- func (sf *ScalarFunction) HashCode() []byte
- func (sf *ScalarFunction) IsCorrelated() bool
- func (sf *ScalarFunction) MarshalJSON() ([]byte, error)
- func (sf *ScalarFunction) ResolveIndices(schema Schema)
- func (sf *ScalarFunction) String() string
- type Schema
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type AggFunctionMode ¶
type AggFunctionMode int
AggFunctionMode stands for the aggregation function's mode.
const ( // CompleteMode function accepts origin data. CompleteMode AggFunctionMode = iota // FinalMode function accepts partial data. FinalMode )
type AggregationFunction ¶
type AggregationFunction interface {
fmt.Stringer
json.Marshaler
// Update during executing.
Update(row []types.Datum, groupKey []byte, ctx context.Context) error
// StreamUpdate updates data using streaming algo.
StreamUpdate(row []types.Datum, ctx context.Context) error
// SetMode sets aggFunctionMode for aggregate function.
SetMode(mode AggFunctionMode)
// GetMode gets aggFunctionMode from aggregate function.
GetMode() AggFunctionMode
// GetGroupResult will be called when all data have been processed.
GetGroupResult(groupKey []byte) types.Datum
// GetStreamResult gets a result using streaming agg.
GetStreamResult() types.Datum
// GetArgs stands for getting all arguments.
GetArgs() []Expression
// GetName gets the aggregation function name.
GetName() string
// SetArgs sets argument by index.
SetArgs(args []Expression)
// Clear collects the mapper's memory.
Clear()
// IsDistinct indicates if the aggregate function contains distinct attribute.
IsDistinct() bool
// SetContext sets the aggregate evaluation context.
SetContext(ctx map[string](*ast.AggEvaluateContext))
// Equal checks whether two aggregation functions are equal.
Equal(agg AggregationFunction) bool
// Clone copies an aggregate function totally.
Clone() AggregationFunction
// GetType gets field type of aggregate function.
GetType() *types.FieldType
// CalculateDefaultValue gets the default value when the aggregate function's input is null.
// The input stands for the schema of Aggregation's child. If the function can't produce a default value, the second
// return value will be false.
CalculateDefaultValue(schema Schema) (types.Datum, bool)
}
AggregationFunction stands for aggregate functions.
func NewAggFunction ¶
func NewAggFunction(funcType string, funcArgs []Expression, distinct bool) AggregationFunction
NewAggFunction creates a new AggregationFunction.
type Assignment ¶
type Assignment struct {
Col *Column
Expr Expression
}
Assignment represents a set assignment in Update, such as Update t set c1 = hex(12), c2 = c3 where c2 = 1
type Column ¶
type Column struct {
FromID string
ColName model.CIStr
DBName model.CIStr
TblName model.CIStr
RetType *types.FieldType
ID int64
// Position means the position of this column that appears in the select fields.
// e.g. SELECT name as id , 1 - id as id , 1 + name as id, name as id from src having id = 1;
// There are four ids in the same schema, so you can't identify the column through the FromID and ColName.
Position int
// IsAggOrSubq means if this column is referenced to a Aggregation column or a Subquery column.
// If so, this column's name will be the plain sql text.
IsAggOrSubq bool
// Only used for execution.
Index int
}
Column represents a column.
func (*Column) Decorrelate ¶
func (col *Column) Decorrelate(_ Schema) Expression
Decorrelate implements Expression interface.
func (*Column) Equal ¶
func (col *Column) Equal(expr Expression) bool
Equal implements Expression interface.
func (*Column) IsCorrelated ¶
IsCorrelated implements Expression interface.
func (*Column) MarshalJSON ¶
MarshalJSON implements json.Marshaler interface.
func (*Column) ResolveIndices ¶
ResolveIndices implements Expression interface.
type Constant ¶
Constant stands for a constant value.
func (*Constant) Clone ¶
func (c *Constant) Clone() Expression
Clone implements Expression interface.
func (*Constant) Decorrelate ¶
func (c *Constant) Decorrelate(_ Schema) Expression
Decorrelate implements Expression interface.
func (*Constant) Equal ¶
func (c *Constant) Equal(b Expression) bool
Equal implements Expression interface.
func (*Constant) IsCorrelated ¶
IsCorrelated implements Expression interface.
func (*Constant) MarshalJSON ¶
MarshalJSON implements json.Marshaler interface.
func (*Constant) ResolveIndices ¶
ResolveIndices implements Expression interface.
type CorrelatedColumn ¶
type CorrelatedColumn struct {
}
CorrelatedColumn stands for a column in a correlated sub query.
func (*CorrelatedColumn) Clone ¶
func (col *CorrelatedColumn) Clone() Expression
Clone implements Expression interface.
func (*CorrelatedColumn) Decorrelate ¶
func (col *CorrelatedColumn) Decorrelate(schema Schema) Expression
Decorrelate implements Expression interface.
func (*CorrelatedColumn) Equal ¶
func (col *CorrelatedColumn) Equal(expr Expression) bool
Equal implements Expression interface.
func (*CorrelatedColumn) IsCorrelated ¶
func (col *CorrelatedColumn) IsCorrelated() bool
IsCorrelated implements Expression interface.
func (*CorrelatedColumn) ResolveIndices ¶
func (col *CorrelatedColumn) ResolveIndices(_ Schema)
ResolveIndices implements Expression interface.
type Expression ¶
type Expression interface {
fmt.Stringer
json.Marshaler
// Eval evaluates an expression through a row.
Eval(row []types.Datum, ctx context.Context) (types.Datum, error)
// Get the expression return type.
GetType() *types.FieldType
// Clone copies an expression totally.
Clone() Expression
// HashCode create the hashcode for expression
HashCode() []byte
// Equal checks whether two expressions are equal.
Equal(e Expression) bool
IsCorrelated() bool
// Decorrelate try to decorrelate the expression by schema.
Decorrelate(schema Schema) Expression
// ResolveIndices resolves indices by the given schema.
ResolveIndices(schema Schema)
}
Expression represents all scalar expression in SQL.
func ComposeCNFCondition ¶
func ComposeCNFCondition(conditions []Expression) Expression
ComposeCNFCondition composes CNF items into a balance deep CNF tree, which benefits a lot for pb decoder/encoder.
func ComposeDNFCondition ¶
func ComposeDNFCondition(conditions []Expression) Expression
ComposeDNFCondition composes DNF items into a balance deep DNF tree.
func EvaluateExprWithNull ¶
func EvaluateExprWithNull(schema Schema, expr Expression) (Expression, error)
EvaluateExprWithNull sets columns in schema as null and calculate the final result of the scalar function. If the Expression is a non-constant value, it means the result is unknown.
func NewFunction ¶
func NewFunction(funcName string, retType *types.FieldType, args ...Expression) (Expression, error)
NewFunction creates a new scalar function or constant.
func ScalarFuncs2Exprs ¶
func ScalarFuncs2Exprs(funcs []*ScalarFunction) []Expression
ScalarFuncs2Exprs converts []*ScalarFunction to []Expression.
func Schema2Exprs ¶
func Schema2Exprs(schema Schema) []Expression
Schema2Exprs converts []*Column to []Expression.
func SplitCNFItems ¶
func SplitCNFItems(onExpr Expression) []Expression
SplitCNFItems splits CNF items. CNF means conjunctive normal form, e.g. "a and b and c".
func SplitDNFItems ¶
func SplitDNFItems(onExpr Expression) []Expression
SplitDNFItems splits DNF items. DNF means disjunctive normal form, e.g. "a or b or c".
type ScalarFunction ¶
type ScalarFunction struct {
Args []Expression
FuncName model.CIStr
// TODO: Implement type inference here, now we use ast's return type temporarily.
RetType *types.FieldType
Function evaluator.BuiltinFunc
ArgValues []types.Datum
}
ScalarFunction is the function that returns a value.
func (*ScalarFunction) Clone ¶
func (sf *ScalarFunction) Clone() Expression
Clone implements Expression interface.
func (*ScalarFunction) Decorrelate ¶
func (sf *ScalarFunction) Decorrelate(schema Schema) Expression
Decorrelate implements Expression interface.
func (*ScalarFunction) Equal ¶
func (sf *ScalarFunction) Equal(e Expression) bool
Equal implements Expression interface.
func (*ScalarFunction) GetType ¶
func (sf *ScalarFunction) GetType() *types.FieldType
GetType implements Expression interface.
func (*ScalarFunction) HashCode ¶
func (sf *ScalarFunction) HashCode() []byte
HashCode implements Expression interface.
func (*ScalarFunction) IsCorrelated ¶
func (sf *ScalarFunction) IsCorrelated() bool
IsCorrelated implements Expression interface.
func (*ScalarFunction) MarshalJSON ¶
func (sf *ScalarFunction) MarshalJSON() ([]byte, error)
MarshalJSON implements json.Marshaler interface.
func (*ScalarFunction) ResolveIndices ¶
func (sf *ScalarFunction) ResolveIndices(schema Schema)
ResolveIndices implements Expression interface.
func (*ScalarFunction) String ¶
func (sf *ScalarFunction) String() string
String implements fmt.Stringer interface.
type Schema ¶
type Schema []*Column
Schema stands for the row schema get from input.
func ResultFieldsToSchema ¶
func ResultFieldsToSchema(fields []*ast.ResultField) Schema
ResultFieldsToSchema converts slice of result fields to schema.
func (Schema) FindColumn ¶
func (s Schema) FindColumn(astCol *ast.ColumnName) (*Column, error)
FindColumn finds an Column from schema for a ast.ColumnName. It compares the db/table/column names. If there are more than one result, it will raise ambiguous error.
func (Schema) InitIndices ¶
func (s Schema) InitIndices()
InitIndices sets indices for columns in schema.
func (Schema) RetrieveColumn ¶
RetrieveColumn retrieves column in expression from the columns in schema.