Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pkg/sql/plan/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -1959,7 +1959,7 @@ func doFormatExpr(expr *plan.Expr, out *bytes.Buffer, depth int) {
prefix := strings.Repeat("\t", depth)
switch t := expr.Expr.(type) {
case *plan.Expr_Col:
out.WriteString(fmt.Sprintf("%sExpr_Col(%s)", prefix, t.Col.Name))
out.WriteString(fmt.Sprintf("%sExpr_Col(%s.%d)", prefix, t.Col.Name, t.Col.ColPos))
case *plan.Expr_Lit:
out.WriteString(fmt.Sprintf("%sExpr_C(%s)", prefix, t.Lit.String()))
case *plan.Expr_F:
Expand Down
24 changes: 12 additions & 12 deletions pkg/vm/engine/readutil/expr_filter.go
Original file line number Diff line number Diff line change
Expand Up @@ -428,7 +428,7 @@ func CompileFilterExpr(
canCompile = false
return
}
colDef := getColDefByName(colExpr.Col.Name, tableDef)
colDef := getColDefByName(expr, colExpr.Col.Name, colExpr.Col.ColPos, tableDef)
_, isSorted := isSortedKey(colDef)
if isSorted {
fastFilterOp = func(obj *objectio.ObjectStats) (bool, error) {
Expand Down Expand Up @@ -462,7 +462,7 @@ func CompileFilterExpr(
canCompile = false
return
}
colDef := getColDefByName(colExpr.Col.Name, tableDef)
colDef := getColDefByName(expr, colExpr.Col.Name, colExpr.Col.ColPos, tableDef)
_, isSorted := isSortedKey(colDef)
if isSorted {
fastFilterOp = func(obj *objectio.ObjectStats) (bool, error) {
Expand Down Expand Up @@ -501,7 +501,7 @@ func CompileFilterExpr(
canCompile = false
return
}
colDef := getColDefByName(colExpr.Col.Name, tableDef)
colDef := getColDefByName(expr, colExpr.Col.Name, colExpr.Col.ColPos, tableDef)
_, isSorted := isSortedKey(colDef)
if isSorted {
fastFilterOp = func(obj *objectio.ObjectStats) (bool, error) {
Expand Down Expand Up @@ -540,7 +540,7 @@ func CompileFilterExpr(
canCompile = false
return
}
colDef := getColDefByName(colExpr.Col.Name, tableDef)
colDef := getColDefByName(expr, colExpr.Col.Name, colExpr.Col.ColPos, tableDef)
_, isSorted := isSortedKey(colDef)
if isSorted {
fastFilterOp = func(obj *objectio.ObjectStats) (bool, error) {
Expand Down Expand Up @@ -574,7 +574,7 @@ func CompileFilterExpr(
canCompile = false
return
}
colDef := getColDefByName(colExpr.Col.Name, tableDef)
colDef := getColDefByName(expr, colExpr.Col.Name, colExpr.Col.ColPos, tableDef)
isPK, isSorted := isSortedKey(colDef)
if isSorted {
fastFilterOp = func(obj *objectio.ObjectStats) (bool, error) {
Expand Down Expand Up @@ -608,7 +608,7 @@ func CompileFilterExpr(
canCompile = false
return
}
colDef := getColDefByName(colExpr.Col.Name, tableDef)
colDef := getColDefByName(expr, colExpr.Col.Name, colExpr.Col.ColPos, tableDef)
_, isSorted := isSortedKey(colDef)
if isSorted {
fastFilterOp = func(obj *objectio.ObjectStats) (bool, error) {
Expand Down Expand Up @@ -641,7 +641,7 @@ func CompileFilterExpr(
canCompile = false
return
}
colDef := getColDefByName(colExpr.Col.Name, tableDef)
colDef := getColDefByName(expr, colExpr.Col.Name, colExpr.Col.ColPos, tableDef)
_, isSorted := isSortedKey(colDef)
if isSorted {
fastFilterOp = func(obj *objectio.ObjectStats) (bool, error) {
Expand Down Expand Up @@ -675,7 +675,7 @@ func CompileFilterExpr(
}
vec := vector.NewVec(types.T_any.ToType())
_ = vec.UnmarshalBinary(val)
colDef := getColDefByName(colExpr.Col.Name, tableDef)
colDef := getColDefByName(expr, colExpr.Col.Name, colExpr.Col.ColPos, tableDef)
isPK, isSorted := isSortedKey(colDef)
if isSorted {
fastFilterOp = func(obj *objectio.ObjectStats) (bool, error) {
Expand Down Expand Up @@ -712,7 +712,7 @@ func CompileFilterExpr(
canCompile = false
return
}
colDef := getColDefByName(colExpr.Col.Name, tableDef)
colDef := getColDefByName(expr, colExpr.Col.Name, colExpr.Col.ColPos, tableDef)
fastFilterOp = nil
loadOp = loadMetadataOnlyOpFactory(fs)
seqNum := colDef.Seqnum
Expand All @@ -733,7 +733,7 @@ func CompileFilterExpr(
canCompile = false
return
}
colDef := getColDefByName(colExpr.Col.Name, tableDef)
colDef := getColDefByName(expr, colExpr.Col.Name, colExpr.Col.ColPos, tableDef)
fastFilterOp = nil
loadOp = loadMetadataOnlyOpFactory(fs)
seqNum := colDef.Seqnum
Expand All @@ -755,7 +755,7 @@ func CompileFilterExpr(
}
vec := vector.NewVec(types.T_any.ToType())
_ = vec.UnmarshalBinary(val)
colDef := getColDefByName(colExpr.Col.Name, tableDef)
colDef := getColDefByName(expr, colExpr.Col.Name, colExpr.Col.ColPos, tableDef)
isPK, isSorted := isSortedKey(colDef)
if isSorted {
fastFilterOp = func(obj *objectio.ObjectStats) (bool, error) {
Expand Down Expand Up @@ -809,7 +809,7 @@ func CompileFilterExpr(
canCompile = false
return
}
colDef := getColDefByName(colExpr.Col.Name, tableDef)
colDef := getColDefByName(expr, colExpr.Col.Name, colExpr.Col.ColPos, tableDef)
isPK, isSorted := isSortedKey(colDef)
if isSorted {
fastFilterOp = func(obj *objectio.ObjectStats) (bool, error) {
Expand Down
45 changes: 30 additions & 15 deletions pkg/vm/engine/readutil/expr_util.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ import (
"context"
"strings"

"go.uber.org/zap"

"github.com/matrixorigin/matrixone/pkg/common/mpool"
"github.com/matrixorigin/matrixone/pkg/container/batch"
"github.com/matrixorigin/matrixone/pkg/container/types"
Expand Down Expand Up @@ -59,7 +61,7 @@ func ConstructInExpr(
)
}

func getColDefByName(name string, tableDef *plan.TableDef) *plan.ColDef {
func getColDefByName(expr *plan.Expr, name string, colPos int32, tableDef *plan.TableDef) *plan.ColDef {
idx := strings.Index(name, ".")
var pos int32
if idx >= 0 {
Expand All @@ -68,6 +70,15 @@ func getColDefByName(name string, tableDef *plan.TableDef) *plan.ColDef {
} else {
pos = tableDef.Name2ColIndex[name]
}
if name != tableDef.Cols[colPos].Name {
logutil.Error(
"Bad-ColExpr",
zap.String("col-name", name),
zap.Int32("col-actual-pos", colPos),
zap.Int32("col-expected-pos", pos),
zap.String("col-expr", plan2.FormatExpr(expr)),
)
}
return tableDef.Cols[pos]
}

Expand All @@ -78,10 +89,12 @@ func compPkCol(colName string, pkName string) bool {
}

func evalValue(
expr *plan.Expr,
exprImpl *plan.Expr_F,
tblDef *plan.TableDef,
isVec bool,
pkName string,
pkColId int32,
) (
ok bool, oid types.T, vals [][]byte,
) {
Expand All @@ -97,27 +110,29 @@ func evalValue(
if !ok {
return false, 0, nil
}
if !compPkCol(col.Col.Name, pkName) {
return false, 0, nil
}

var colPos int32
if col.Col.Name == "" {
colPos = col.Col.ColPos
logutil.Warnf("colExpr.Col.Name is empty")
colName := col.Col.Name
if colName == "" {
colName = tblDef.Cols[pkColId].Name
} else {
idx := strings.Index(col.Col.Name, ".")
if idx == -1 {
colPos = tblDef.Name2ColIndex[col.Col.Name]
} else {
colPos = tblDef.Name2ColIndex[col.Col.Name[idx+1:]]
if col.Col.ColPos != pkColId {
logutil.Error(
"Bad-ColExpr",
zap.String("col-name", colName),
zap.Int32("col-actual-pos", col.Col.ColPos),
zap.Int32("col-expected-pos", pkColId),
zap.String("col-expr", plan2.FormatExpr(expr)),
)
}
}
if !compPkCol(colName, pkName) {
return false, 0, nil
}

if isVec {
return true, types.T(tblDef.Cols[colPos].Typ.Id), [][]byte{val}
return true, types.T(tblDef.Cols[pkColId].Typ.Id), [][]byte{val}
}
return true, types.T(tblDef.Cols[colPos].Typ.Id), vals
return true, types.T(tblDef.Cols[pkColId].Typ.Id), vals
}

func mustColConstValueFromBinaryFuncExpr(
Expand Down
20 changes: 10 additions & 10 deletions pkg/vm/engine/readutil/pk_filter_base.go
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ func ConstructBasePKFilter(

case ">=":
//a >= ?
ok, oid, vals := evalValue(exprImpl, tblDef, false, tblDef.Pkey.PkeyColName)
ok, oid, vals := evalValue(expr, exprImpl, tblDef, false, tblDef.Pkey.PkeyColName, int32(tblDef.Pkey.PkeyColId))
if !ok {
return
}
Expand All @@ -192,7 +192,7 @@ func ConstructBasePKFilter(

case "<=":
//a <= ?
ok, oid, vals := evalValue(exprImpl, tblDef, false, tblDef.Pkey.PkeyColName)
ok, oid, vals := evalValue(expr, exprImpl, tblDef, false, tblDef.Pkey.PkeyColName, int32(tblDef.Pkey.PkeyColId))
if !ok {
return
}
Expand All @@ -203,7 +203,7 @@ func ConstructBasePKFilter(

case ">":
//a > ?
ok, oid, vals := evalValue(exprImpl, tblDef, false, tblDef.Pkey.PkeyColName)
ok, oid, vals := evalValue(expr, exprImpl, tblDef, false, tblDef.Pkey.PkeyColName, int32(tblDef.Pkey.PkeyColId))
if !ok {
return
}
Expand All @@ -214,7 +214,7 @@ func ConstructBasePKFilter(

case "<":
//a < ?
ok, oid, vals := evalValue(exprImpl, tblDef, false, tblDef.Pkey.PkeyColName)
ok, oid, vals := evalValue(expr, exprImpl, tblDef, false, tblDef.Pkey.PkeyColName, int32(tblDef.Pkey.PkeyColId))
if !ok {
return
}
Expand All @@ -225,7 +225,7 @@ func ConstructBasePKFilter(

case "=":
// a = ?
ok, oid, vals := evalValue(exprImpl, tblDef, false, tblDef.Pkey.PkeyColName)
ok, oid, vals := evalValue(expr, exprImpl, tblDef, false, tblDef.Pkey.PkeyColName, int32(tblDef.Pkey.PkeyColId))
if !ok {
return
}
Expand All @@ -235,7 +235,7 @@ func ConstructBasePKFilter(
filter.Oid = oid

case "prefix_eq":
ok, oid, vals := evalValue(exprImpl, tblDef, false, tblDef.Pkey.PkeyColName)
ok, oid, vals := evalValue(expr, exprImpl, tblDef, false, tblDef.Pkey.PkeyColName, int32(tblDef.Pkey.PkeyColId))
if !ok {
return
}
Expand All @@ -245,7 +245,7 @@ func ConstructBasePKFilter(
filter.Oid = oid

case "in":
ok, oid, vals := evalValue(exprImpl, tblDef, true, tblDef.Pkey.PkeyColName)
ok, oid, vals := evalValue(expr, exprImpl, tblDef, true, tblDef.Pkey.PkeyColName, int32(tblDef.Pkey.PkeyColId))
if !ok {
return
}
Expand All @@ -261,7 +261,7 @@ func ConstructBasePKFilter(
filter.Oid = oid

case "prefix_in":
ok, oid, vals := evalValue(exprImpl, tblDef, true, tblDef.Pkey.PkeyColName)
ok, oid, vals := evalValue(expr, exprImpl, tblDef, true, tblDef.Pkey.PkeyColName, int32(tblDef.Pkey.PkeyColId))
if !ok {
return
}
Expand All @@ -277,7 +277,7 @@ func ConstructBasePKFilter(
filter.Oid = oid

case "between":
ok, oid, vals := evalValue(exprImpl, tblDef, false, tblDef.Pkey.PkeyColName)
ok, oid, vals := evalValue(expr, exprImpl, tblDef, false, tblDef.Pkey.PkeyColName, int32(tblDef.Pkey.PkeyColId))
if !ok {
return
}
Expand All @@ -288,7 +288,7 @@ func ConstructBasePKFilter(
filter.Oid = oid

case "prefix_between":
ok, oid, vals := evalValue(exprImpl, tblDef, false, tblDef.Pkey.PkeyColName)
ok, oid, vals := evalValue(expr, exprImpl, tblDef, false, tblDef.Pkey.PkeyColName, int32(tblDef.Pkey.PkeyColId))
if !ok {
return
}
Expand Down
Loading