(t *testing.T)
| 383 | } |
| 384 | |
| 385 | func 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) |
nothing calls this directly
no test coverage detected