Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
14 changes: 7 additions & 7 deletions pkg/executor/aggfuncs/builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,9 +92,9 @@ func BuildWindowFunctions(ctx sessionctx.Context, windowFuncDesc *aggregation.Ag
case ast.WindowFuncCumeDist:
return buildCumeDist(ordinal, orderByCols)
case ast.WindowFuncNthValue:
return buildNthValue(windowFuncDesc, ordinal)
return buildNthValue(ctx, windowFuncDesc, ordinal)
case ast.WindowFuncNtile:
return buildNtile(windowFuncDesc, ordinal)
return buildNtile(ctx, windowFuncDesc, ordinal)
case ast.WindowFuncPercentRank:
return buildPercentRank(ordinal, orderByCols)
case ast.WindowFuncLead:
Expand Down Expand Up @@ -680,22 +680,22 @@ func buildCumeDist(ordinal int, orderByCols []*expression.Column) AggFunc {
return r
}

func buildNthValue(aggFuncDesc *aggregation.AggFuncDesc, ordinal int) AggFunc {
func buildNthValue(sctx sessionctx.Context, aggFuncDesc *aggregation.AggFuncDesc, ordinal int) AggFunc {
base := baseAggFunc{
args: aggFuncDesc.Args,
ordinal: ordinal,
}
// Already checked when building the function description.
nth, _, _ := expression.GetUint64FromConstant(aggFuncDesc.Args[1])
nth, _, _ := expression.GetUint64FromConstant(sctx, aggFuncDesc.Args[1])
return &nthValue{baseAggFunc: base, tp: aggFuncDesc.RetTp, nth: nth}
}

func buildNtile(aggFuncDes *aggregation.AggFuncDesc, ordinal int) AggFunc {
func buildNtile(sctx sessionctx.Context, aggFuncDes *aggregation.AggFuncDesc, ordinal int) AggFunc {
base := baseAggFunc{
args: aggFuncDes.Args,
ordinal: ordinal,
}
n, _, _ := expression.GetUint64FromConstant(aggFuncDes.Args[0])
n, _, _ := expression.GetUint64FromConstant(sctx, aggFuncDes.Args[0])
return &ntile{baseAggFunc: base, n: n}
}

Expand All @@ -709,7 +709,7 @@ func buildPercentRank(ordinal int, orderByCols []*expression.Column) AggFunc {
func buildLeadLag(ctx sessionctx.Context, aggFuncDesc *aggregation.AggFuncDesc, ordinal int) baseLeadLag {
offset := uint64(1)
if len(aggFuncDesc.Args) >= 2 {
offset, _, _ = expression.GetUint64FromConstant(aggFuncDesc.Args[1])
offset, _, _ = expression.GetUint64FromConstant(ctx, aggFuncDesc.Args[1])
}
var defaultExpr expression.Expression
defaultExpr = expression.NewNull()
Expand Down
4 changes: 2 additions & 2 deletions pkg/executor/aggfuncs/func_group_concat.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,9 +73,9 @@ func (e *baseGroupConcat4String) AppendFinalResult2Chunk(_ sessionctx.Context, p
func (e *baseGroupConcat4String) handleTruncateError(sctx sessionctx.Context) (err error) {
if atomic.CompareAndSwapInt32(e.truncated, 0, 1) {
if !sctx.GetSessionVars().StmtCtx.TruncateAsWarning {
return expression.ErrCutValueGroupConcat.GenWithStackByArgs(e.args[0].String())
return expression.ErrCutValueGroupConcat.GenWithStackByArgs(e.args[0].StringWithCtx(false))
}
sctx.GetSessionVars().StmtCtx.AppendWarning(expression.ErrCutValueGroupConcat.GenWithStackByArgs(e.args[0].String()))
sctx.GetSessionVars().StmtCtx.AppendWarning(expression.ErrCutValueGroupConcat.FastGenByArgs(e.args[0].StringWithCtx(false)))
}
return nil
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/executor/distsql.go
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ func closeAll(objs ...Closeable) error {
func rebuildIndexRanges(ctx sessionctx.Context, is *plannercore.PhysicalIndexScan, idxCols []*expression.Column, colLens []int) (ranges []*ranger.Range, err error) {
access := make([]expression.Expression, 0, len(is.AccessCondition))
for _, cond := range is.AccessCondition {
newCond, err1 := expression.SubstituteCorCol2Constant(cond)
newCond, err1 := expression.SubstituteCorCol2Constant(ctx, cond)
if err1 != nil {
return nil, err1
}
Expand Down Expand Up @@ -341,7 +341,7 @@ func (e *IndexReaderExecutor) open(ctx context.Context, kvRanges []kv.KeyRange)
if err != nil {
return err
}
pbConditions, err := expression.ExpressionsToPBList(e.Ctx().GetSessionVars().StmtCtx, []expression.Expression{inCondition}, e.Ctx().GetClient())
pbConditions, err := expression.ExpressionsToPBList(e.Ctx(), []expression.Expression{inCondition}, e.Ctx().GetClient())
if err != nil {
return err
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/executor/importer/import.go
Original file line number Diff line number Diff line change
Expand Up @@ -756,7 +756,7 @@ func (p *Plan) initParameters(plan *plannercore.ImportInto) error {
optionMap := make(map[string]interface{}, len(plan.Options))
for _, opt := range plan.Options {
if opt.Value != nil {
val := opt.Value.String()
val := opt.Value.StringWithCtx(false)
if opt.Name == cloudStorageURIOption {
val = ast.RedactURL(val)
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/expression/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ go_library(
"//pkg/util/password-validation",
"//pkg/util/plancodec",
"//pkg/util/printer",
"//pkg/util/redact",
"//pkg/util/sem",
"//pkg/util/set",
"//pkg/util/size",
Expand All @@ -117,7 +118,6 @@ go_library(
"@com_github_pingcap_errors//:errors",
"@com_github_pingcap_failpoint//:failpoint",
"@com_github_pingcap_tipb//go-tipb",
"@com_github_pkg_errors//:errors",
"@com_github_tikv_client_go_v2//oracle",
"@org_uber_go_atomic//:atomic",
"@org_uber_go_zap//:zap",
Expand Down
9 changes: 4 additions & 5 deletions pkg/expression/aggregation/agg_to_pb.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ func (desc *baseFuncDesc) GetTiPBExpr(tryWindowDesc bool) (tp tipb.ExprType) {

// AggFuncToPBExpr converts aggregate function to pb.
func AggFuncToPBExpr(sctx sessionctx.Context, client kv.Client, aggFunc *AggFuncDesc, storeType kv.StoreType) (*tipb.Expr, error) {
pc := expression.NewPBConverter(client, sctx.GetSessionVars().StmtCtx)
pc := expression.NewPBConverter(client, sctx)
tp := aggFunc.GetTiPBExpr(false)
if !client.IsRequestTypeSupported(kv.ReqTypeSelect, int64(tp)) {
return nil, errors.New("select request is not supported by client")
Expand All @@ -111,7 +111,7 @@ func AggFuncToPBExpr(sctx sessionctx.Context, client kv.Client, aggFunc *AggFunc
for _, arg := range aggFunc.Args {
pbArg := pc.ExprToPB(arg)
if pbArg == nil {
return nil, errors.New(aggFunc.String() + " can't be converted to PB.")
return nil, errors.New(aggFunc.StringWithCtx(false) + " can't be converted to PB.")
}
children = append(children, pbArg)
}
Expand All @@ -122,11 +122,10 @@ func AggFuncToPBExpr(sctx sessionctx.Context, client kv.Client, aggFunc *AggFunc

if tp == tipb.ExprType_GroupConcat {
orderBy := make([]*tipb.ByItem, 0, len(aggFunc.OrderByItems))
sc := sctx.GetSessionVars().StmtCtx
for _, arg := range aggFunc.OrderByItems {
pbArg := expression.SortByItemToPB(sc, client, arg.Expr, arg.Desc)
pbArg := expression.SortByItemToPB(sctx, client, arg.Expr, arg.Desc)
if pbArg == nil {
return nil, errors.New(aggFunc.String() + " can't be converted to PB.")
return nil, errors.New(aggFunc.StringWithCtx(false) + " can't be converted to PB.")
}
orderBy = append(orderBy, pbArg)
}
Expand Down
9 changes: 7 additions & 2 deletions pkg/expression/aggregation/base_func.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,10 +73,15 @@ func (a *baseFuncDesc) clone() *baseFuncDesc {

// String implements the fmt.Stringer interface.
func (a *baseFuncDesc) String() string {
return a.StringWithCtx(false)
}

// StringWithCtx returns the string within given context.
func (a *baseFuncDesc) StringWithCtx(redact bool) string {
buffer := bytes.NewBufferString(a.Name)
buffer.WriteString("(")
for i, arg := range a.Args {
buffer.WriteString(arg.String())
buffer.WriteString(arg.StringWithCtx(redact))
if i+1 != len(a.Args) {
buffer.WriteString(", ")
}
Expand Down Expand Up @@ -150,7 +155,7 @@ func (a *baseFuncDesc) typeInfer4ApproxPercentile(ctx sessionctx.Context) error
}
percent, isNull, err := a.Args[1].EvalInt(ctx, chunk.Row{})
if err != nil {
return fmt.Errorf("APPROX_PERCENTILE: Invalid argument %s", a.Args[1].String())
return fmt.Errorf("APPROX_PERCENTILE: Invalid argument %s", a.Args[1].StringWithCtx(false))
}
if percent <= 0 || percent > 100 || isNull {
if isNull {
Expand Down
2 changes: 1 addition & 1 deletion pkg/expression/aggregation/concat.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ func (cf *concatFunction) Update(evalCtx *AggEvaluateContext, sc *stmtctx.Statem
}
evalCtx.Buffer.Truncate(i)
if !cf.truncated {
sc.AppendWarning(expression.ErrCutValueGroupConcat.GenWithStackByArgs(cf.Args[0].String()))
sc.AppendWarning(expression.ErrCutValueGroupConcat.FastGenByArgs(cf.Args[0].StringWithCtx(false)))
}
cf.truncated = true
}
Expand Down
9 changes: 7 additions & 2 deletions pkg/expression/aggregation/descriptor.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,13 +66,18 @@ func NewAggFuncDescForWindowFunc(ctx sessionctx.Context, desc *WindowFuncDesc, h

// String implements the fmt.Stringer interface.
func (a *AggFuncDesc) String() string {
return a.StringWithCtx(false)
}

// StringWithCtx returns the string representation within given ctx.
func (a *AggFuncDesc) StringWithCtx(redact bool) string {
buffer := bytes.NewBufferString(a.Name)
buffer.WriteString("(")
if a.HasDistinct {
buffer.WriteString("distinct ")
}
for i, arg := range a.Args {
buffer.WriteString(arg.String())
buffer.WriteString(arg.StringWithCtx(redact))
if i+1 != len(a.Args) {
buffer.WriteString(", ")
}
Expand All @@ -81,7 +86,7 @@ func (a *AggFuncDesc) String() string {
buffer.WriteString(" order by ")
}
for i, arg := range a.OrderByItems {
buffer.WriteString(arg.String())
buffer.WriteString(arg.StringWithCtx(redact))
if i+1 != len(a.OrderByItems) {
buffer.WriteString(", ")
}
Expand Down
9 changes: 5 additions & 4 deletions pkg/expression/aggregation/explain.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,11 @@ import (

"github.com/pingcap/failpoint"
"github.com/pingcap/tidb/pkg/parser/ast"
"github.com/pingcap/tidb/pkg/sessionctx"
)

// ExplainAggFunc generates explain information for a aggregation function.
func ExplainAggFunc(agg *AggFuncDesc, normalized bool) string {
func ExplainAggFunc(ctx sessionctx.Context, agg *AggFuncDesc, normalized bool) string {
var buffer bytes.Buffer
showMode := false
failpoint.Inject("show-agg-mode", func(v failpoint.Value) {
Expand All @@ -49,13 +50,13 @@ func ExplainAggFunc(agg *AggFuncDesc, normalized bool) string {
if normalized {
fmt.Fprintf(&buffer, "%s desc", item.Expr.ExplainNormalizedInfo())
} else {
fmt.Fprintf(&buffer, "%s desc", item.Expr.ExplainInfo())
fmt.Fprintf(&buffer, "%s desc", item.Expr.ExplainInfo(ctx))
}
} else {
if normalized {
fmt.Fprintf(&buffer, "%s", item.Expr.ExplainNormalizedInfo())
} else {
fmt.Fprintf(&buffer, "%s", item.Expr.ExplainInfo())
fmt.Fprintf(&buffer, "%s", item.Expr.ExplainInfo(ctx))
}
}

Expand All @@ -71,7 +72,7 @@ func ExplainAggFunc(agg *AggFuncDesc, normalized bool) string {
if normalized {
buffer.WriteString(arg.ExplainNormalizedInfo())
} else {
buffer.WriteString(arg.ExplainInfo())
buffer.WriteString(arg.ExplainInfo(ctx))
}
}
buffer.WriteString(")")
Expand Down
10 changes: 5 additions & 5 deletions pkg/expression/aggregation/window_func.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,13 @@ func NewWindowFuncDesc(ctx sessionctx.Context, name string, args []expression.Ex
if !skipCheckArgs {
switch strings.ToLower(name) {
case ast.WindowFuncNthValue:
val, isNull, ok := expression.GetUint64FromConstant(args[1])
val, isNull, ok := expression.GetUint64FromConstant(ctx, args[1])
// nth_value does not allow `0`, but allows `null`.
if !ok || (val == 0 && !isNull) {
return nil, nil
}
case ast.WindowFuncNtile:
val, isNull, ok := expression.GetUint64FromConstant(args[0])
val, isNull, ok := expression.GetUint64FromConstant(ctx, args[0])
// ntile does not allow `0`, but allows `null`.
if !ok || (val == 0 && !isNull) {
return nil, nil
Expand All @@ -51,7 +51,7 @@ func NewWindowFuncDesc(ctx sessionctx.Context, name string, args []expression.Ex
if len(args) < 2 {
break
}
_, isNull, ok := expression.GetUint64FromConstant(args[1])
_, isNull, ok := expression.GetUint64FromConstant(ctx, args[1])
if !ok || isNull {
return nil, nil
}
Expand Down Expand Up @@ -125,7 +125,7 @@ func (s *WindowFuncDesc) Clone() *WindowFuncDesc {

// WindowFuncToPBExpr converts aggregate function to pb.
func WindowFuncToPBExpr(sctx sessionctx.Context, client kv.Client, desc *WindowFuncDesc) *tipb.Expr {
pc := expression.NewPBConverter(client, sctx.GetSessionVars().StmtCtx)
pc := expression.NewPBConverter(client, sctx)
tp := desc.GetTiPBExpr(true)
if !client.IsRequestTypeSupported(kv.ReqTypeSelect, int64(tp)) {
return nil
Expand All @@ -145,7 +145,7 @@ func WindowFuncToPBExpr(sctx sessionctx.Context, client kv.Client, desc *WindowF
// CanPushDownToTiFlash control whether a window function desc can be push down to tiflash.
func (s *WindowFuncDesc) CanPushDownToTiFlash(ctx sessionctx.Context) bool {
// args
if !expression.CanExprsPushDown(ctx.GetSessionVars().StmtCtx, s.Args, ctx.GetClient(), kv.TiFlash) {
if !expression.CanExprsPushDown(ctx, s.Args, ctx.GetClient(), kv.TiFlash) {
return false
}
// window functions
Expand Down
2 changes: 1 addition & 1 deletion pkg/expression/bench_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1379,7 +1379,7 @@ func benchmarkVectorizedEvalOneVec(b *testing.B, vecExprCases vecExprBenchCases)
for funcName, testCases := range vecExprCases {
for _, testCase := range testCases {
expr, _, input, output := genVecExprBenchCase(ctx, funcName, testCase)
exprName := expr.String()
exprName := expr.StringWithCtx(false)
if sf, ok := expr.(*ScalarFunction); ok {
exprName = fmt.Sprintf("%v", reflect.TypeOf(sf.Function))
tmp := strings.Split(exprName, ".")
Expand Down
Loading