MCPcopy
hub / github.com/pingcap/tidb / TestBuildExpression

Function TestBuildExpression

pkg/planner/core/expression_test.go:385–552  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

383}
384
385func TestBuildExpression(t *testing.T) {
386 tbl := &model.TableInfo{
387 Columns: []*model.ColumnInfo{
388 {
389 Name: pmodel.NewCIStr("id"),
390 Offset: 0,
391 State: model.StatePublic,
392 FieldType: *types.NewFieldType(mysql.TypeString),
393 DefaultIsExpr: true,
394 DefaultValue: "uuid()",
395 },
396 {
397 Name: pmodel.NewCIStr("a"),
398 Offset: 1,
399 State: model.StatePublic,
400 FieldType: *types.NewFieldType(mysql.TypeLonglong),
401 },
402 {
403 Name: pmodel.NewCIStr("b"),
404 Offset: 2,
405 State: model.StatePublic,
406 FieldType: *types.NewFieldType(mysql.TypeLonglong),
407 DefaultValue: "123",
408 },
409 },
410 }
411
412 ctx := exprstatic.NewExprContext()
413 evalCtx := ctx.GetStaticEvalCtx()
414 cols, names, err := expression.ColumnInfos2ColumnsAndNames(ctx, pmodel.NewCIStr(""), tbl.Name, tbl.Cols(), tbl)
415 require.NoError(t, err)
416 schema := expression.NewSchema(cols...)
417
418 // normal build
419 ctx = ctx.Apply(exprstatic.WithColumnIDAllocator(exprctx.NewSimplePlanColumnIDAllocator(0)))
420 expr, err := buildExpr(t, ctx, "(1+a)*(3+b)", expression.WithTableInfo("", tbl))
421 require.NoError(t, err)
422 ctx = ctx.Apply(exprstatic.WithColumnIDAllocator(exprctx.NewSimplePlanColumnIDAllocator(0)))
423 expr2, err := expression.ParseSimpleExpr(ctx, "(1+a)*(3+b)", expression.WithTableInfo("", tbl))
424 require.NoError(t, err)
425 require.True(t, expr.Equal(evalCtx, expr2))
426 val, _, err := expr.EvalInt(evalCtx, chunk.MutRowFromValues("", 1, 2).ToRow())
427 require.NoError(t, err)
428 require.Equal(t, int64(10), val)
429 val, _, err = expr.EvalInt(evalCtx, chunk.MutRowFromValues("", 3, 4).ToRow())
430 require.NoError(t, err)
431 require.Equal(t, int64(28), val)
432 val, _, err = expr2.EvalInt(evalCtx, chunk.MutRowFromValues("", 1, 2).ToRow())
433 require.NoError(t, err)
434 require.Equal(t, int64(10), val)
435 val, _, err = expr2.EvalInt(evalCtx, chunk.MutRowFromValues("", 3, 4).ToRow())
436 require.NoError(t, err)
437 require.Equal(t, int64(28), val)
438
439 expr, err = buildExpr(t, ctx, "(1+a)*(3+b)", expression.WithInputSchemaAndNames(schema, names, nil))
440 require.NoError(t, err)
441 val, _, err = expr.EvalInt(evalCtx, chunk.MutRowFromValues("", 1, 2).ToRow())
442 require.NoError(t, err)

Callers

nothing calls this directly

Calls 15

GetStaticEvalCtxMethod · 0.95
ColsMethod · 0.95
ApplyMethod · 0.95
AppendMethod · 0.95
LocationMethod · 0.95
GetSessionVarsMethod · 0.95
NewFieldTypeFunction · 0.92
NewExprContextFunction · 0.92
NewSchemaFunction · 0.92
WithColumnIDAllocatorFunction · 0.92

Tested by

no test coverage detected