本文整理汇总了Golang中github.com/pingcap/tidb/util/types.NewDatum函数的典型用法代码示例。如果您正苦于以下问题:Golang NewDatum函数的具体用法?Golang NewDatum怎么用?Golang NewDatum使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了NewDatum函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: GetColDefaultValue
// GetColDefaultValue gets default value of the column.
func GetColDefaultValue(ctx context.Context, col *model.ColumnInfo) (types.Datum, bool, error) {
// Check no default value flag.
if mysql.HasNoDefaultValueFlag(col.Flag) && col.Tp != mysql.TypeEnum {
return types.Datum{}, false, errors.Errorf("Field '%s' doesn't have a default value", col.Name)
}
// Check and get timestamp/datetime default value.
if col.Tp == mysql.TypeTimestamp || col.Tp == mysql.TypeDatetime {
if col.DefaultValue == nil {
return types.Datum{}, true, nil
}
value, err := evaluator.GetTimeValue(ctx, col.DefaultValue, col.Tp, col.Decimal)
if err != nil {
return types.Datum{}, true, errors.Errorf("Field '%s' get default value fail - %s", col.Name, errors.Trace(err))
}
return types.NewDatum(value), true, nil
} else if col.Tp == mysql.TypeEnum {
// For enum type, if no default value and not null is set,
// the default value is the first element of the enum list
if col.DefaultValue == nil && mysql.HasNotNullFlag(col.Flag) {
return types.NewDatum(col.FieldType.Elems[0]), true, nil
}
}
return types.NewDatum(col.DefaultValue), true, nil
}
开发者ID:astaxie,项目名称:tidb,代码行数:28,代码来源:table.go
示例2: flatten
func flatten(data types.Datum) (types.Datum, error) {
switch data.Kind() {
case types.KindMysqlTime:
// for mysql datetime, timestamp and date type
b, err := data.GetMysqlTime().Marshal()
if err != nil {
return types.NewDatum(nil), errors.Trace(err)
}
return types.NewDatum(b), nil
case types.KindMysqlDuration:
// for mysql time type
data.SetInt64(int64(data.GetMysqlDuration().Duration))
return data, nil
case types.KindMysqlDecimal:
data.SetString(data.GetMysqlDecimal().String())
return data, nil
case types.KindMysqlEnum:
data.SetUint64(data.GetMysqlEnum().Value)
return data, nil
case types.KindMysqlSet:
data.SetUint64(data.GetMysqlSet().Value)
return data, nil
case types.KindMysqlBit:
data.SetUint64(data.GetMysqlBit().Value)
return data, nil
case types.KindMysqlHex:
data.SetInt64(data.GetMysqlHex().Value)
return data, nil
default:
return data, nil
}
}
开发者ID:anywhy,项目名称:tidb,代码行数:32,代码来源:tables.go
示例3: getRowCountByTableRange
func getRowCountByTableRange(sc *variable.StatementContext, statsTbl *statistics.Table, ranges []TableRange, offset int) (uint64, error) {
var rowCount uint64
for _, rg := range ranges {
var cnt int64
var err error
if rg.LowVal == math.MinInt64 && rg.HighVal == math.MaxInt64 {
cnt = statsTbl.Count
} else if rg.LowVal == math.MinInt64 {
cnt, err = statsTbl.Columns[offset].LessRowCount(sc, types.NewDatum(rg.HighVal))
} else if rg.HighVal == math.MaxInt64 {
cnt, err = statsTbl.Columns[offset].GreaterRowCount(sc, types.NewDatum(rg.LowVal))
} else {
if rg.LowVal == rg.HighVal {
cnt, err = statsTbl.Columns[offset].EqualRowCount(sc, types.NewDatum(rg.LowVal))
} else {
cnt, err = statsTbl.Columns[offset].BetweenRowCount(sc, types.NewDatum(rg.LowVal), types.NewDatum(rg.HighVal))
}
}
if err != nil {
return 0, errors.Trace(err)
}
rowCount += uint64(cnt)
}
if rowCount > uint64(statsTbl.Count) {
rowCount = uint64(statsTbl.Count)
}
return rowCount, nil
}
开发者ID:pingcap,项目名称:tidb,代码行数:28,代码来源:physical_plan_builder.go
示例4: evalIn
func (e *Evaluator) evalIn(expr *tipb.Expr) (types.Datum, error) {
if len(expr.Children) != 2 {
return types.Datum{}, ErrInvalid.Gen("IN need 2 operand, got %d", len(expr.Children))
}
target, err := e.Eval(expr.Children[0])
if err != nil {
return types.Datum{}, errors.Trace(err)
}
if target.IsNull() {
return types.Datum{}, nil
}
valueListExpr := expr.Children[1]
if valueListExpr.GetTp() != tipb.ExprType_ValueList {
return types.Datum{}, ErrInvalid.Gen("the second children should be value list type")
}
decoded, err := e.decodeValueList(valueListExpr)
if err != nil {
return types.Datum{}, errors.Trace(err)
}
in, err := checkIn(target, decoded.values)
if err != nil {
return types.Datum{}, errors.Trace(err)
}
if in {
return types.NewDatum(1), nil
}
if decoded.hasNull {
return types.Datum{}, nil
}
return types.NewDatum(0), nil
}
开发者ID:XuHuaiyu,项目名称:tidb,代码行数:31,代码来源:eval.go
示例5: fetchRows
func (e *UpdateExec) fetchRows() error {
for {
row, err := e.SelectExec.Next()
if err != nil {
return errors.Trace(err)
}
if row == nil {
return nil
}
data := make([]types.Datum, len(e.SelectExec.Fields()))
newData := make([]types.Datum, len(e.SelectExec.Fields()))
for i, f := range e.SelectExec.Fields() {
data[i] = types.NewDatum(f.Expr.GetValue())
newData[i] = data[i]
if e.OrderedList[i] != nil {
val, err := evaluator.Eval(e.ctx, e.OrderedList[i].Expr)
if err != nil {
return errors.Trace(err)
}
newData[i] = types.NewDatum(val)
}
}
row.Data = data
e.rows = append(e.rows, row)
e.newRowsData = append(e.newRowsData, newData)
}
}
开发者ID:astaxie,项目名称:tidb,代码行数:27,代码来源:executor_write.go
示例6: TestCast
func (s *testEvaluatorSuite) TestCast(c *C) {
defer testleak.AfterTest(c)()
f := types.NewFieldType(mysql.TypeLonglong)
expr := &ast.FuncCastExpr{
Expr: ast.NewValueExpr(1),
Tp: f,
}
ast.SetFlag(expr)
v, err := Eval(s.ctx, expr)
c.Assert(err, IsNil)
c.Assert(v, testutil.DatumEquals, types.NewDatum(int64(1)))
f.Flag |= mysql.UnsignedFlag
v, err = Eval(s.ctx, expr)
c.Assert(err, IsNil)
c.Assert(v, testutil.DatumEquals, types.NewDatum(uint64(1)))
f.Tp = mysql.TypeString
f.Charset = charset.CharsetBin
v, err = Eval(s.ctx, expr)
c.Assert(err, IsNil)
c.Assert(v, testutil.DatumEquals, types.NewDatum([]byte("1")))
f.Tp = mysql.TypeString
f.Charset = "utf8"
v, err = Eval(s.ctx, expr)
c.Assert(err, IsNil)
c.Assert(v, testutil.DatumEquals, types.NewDatum("1"))
expr.Expr = ast.NewValueExpr(nil)
v, err = Eval(s.ctx, expr)
c.Assert(err, IsNil)
c.Assert(v.Kind(), Equals, types.KindNull)
}
开发者ID:pingcap,项目名称:tidb,代码行数:35,代码来源:evaluator_test.go
示例7: getHashKey
// getHashKey encodes a requiredProperty to a unique hash code.
func (p *requiredProperty) getHashKey() ([]byte, error) {
datums := make([]types.Datum, 0, len(p.props)*3+1)
datums = append(datums, types.NewDatum(p.sortKeyLen))
for _, c := range p.props {
datums = append(datums, types.NewDatum(c.desc), types.NewDatum(c.col.FromID), types.NewDatum(c.col.Index))
}
bytes, err := codec.EncodeValue(nil, datums...)
return bytes, errors.Trace(err)
}
开发者ID:jmptrader,项目名称:tidb,代码行数:10,代码来源:plan.go
示例8: Next
// Next implements the Executor Next interface.
func (e *ApplyExec) Next() (*Row, error) {
srcRow, err := e.Src.Next()
if err != nil {
return nil, errors.Trace(err)
}
if srcRow == nil {
return nil, nil
}
for {
for _, col := range e.outerSchema {
idx := col.Index
*col.Data = srcRow.Data[idx]
}
innerRow, err := e.innerExec.Next()
if err != nil {
return nil, errors.Trace(err)
}
trimLen := len(srcRow.Data)
if innerRow != nil {
srcRow.Data = append(srcRow.Data, innerRow.Data...)
}
if e.checker == nil {
e.innerExec.Close()
return srcRow, nil
}
if innerRow == nil {
// When inner exec finishes, we need to append a result column to true, false or NULL.
var result types.Datum
if e.checker.all {
result = types.NewDatum(true)
} else {
// If 'any' meets a null value, the result will be null.
if e.checker.dataHasNull {
result = types.NewDatum(nil)
} else {
result = types.NewDatum(false)
}
}
srcRow.Data = append(srcRow.Data, result)
e.checker.reset()
e.innerExec.Close()
return srcRow, nil
}
finished, data, err := e.checker.check(srcRow.Data)
if err != nil {
return nil, errors.Trace(err)
}
srcRow.Data = srcRow.Data[:trimLen]
if finished {
e.checker.reset()
e.innerExec.Close()
srcRow.Data = append(srcRow.Data, data)
return srcRow, nil
}
}
}
开发者ID:pingcap,项目名称:tidb,代码行数:57,代码来源:executor.go
示例9: TestTrim
func (s *testEvaluatorSuite) TestTrim(c *C) {
defer testleak.AfterTest(c)()
tbl := []struct {
str interface{}
remstr interface{}
dir ast.TrimDirectionType
result interface{}
}{
{" bar ", nil, ast.TrimBothDefault, "bar"},
{"xxxbarxxx", "x", ast.TrimLeading, "barxxx"},
{"xxxbarxxx", "x", ast.TrimBoth, "bar"},
{"barxxyz", "xyz", ast.TrimTrailing, "barx"},
{nil, "xyz", ast.TrimBoth, nil},
{1, 2, ast.TrimBoth, "1"},
{" \t\rbar\n ", nil, ast.TrimBothDefault, "bar"},
}
ctx := mock.NewContext()
for _, v := range tbl {
f := &ast.FuncCallExpr{
FnName: model.NewCIStr("TRIM"),
Args: []ast.ExprNode{
ast.NewValueExpr(v.str),
ast.NewValueExpr(v.remstr),
ast.NewValueExpr(v.dir),
},
}
r, err := Eval(ctx, f)
c.Assert(err, IsNil)
c.Assert(r, testutil.DatumEquals, types.NewDatum(v.result))
}
for _, v := range []struct {
str, result interface{}
fn string
}{
{" ", "", "LTRIM"},
{" ", "", "RTRIM"},
{"foo0", "foo0", "LTRIM"},
{"bar0", "bar0", "RTRIM"},
{" foo1", "foo1", "LTRIM"},
{"bar1 ", "bar1", "RTRIM"},
{spaceChars + "foo2 ", "foo2 ", "LTRIM"},
{" bar2" + spaceChars, " bar2", "RTRIM"},
{nil, nil, "LTRIM"},
{nil, nil, "RTRIM"},
} {
f := &ast.FuncCallExpr{
FnName: model.NewCIStr(v.fn),
Args: []ast.ExprNode{ast.NewValueExpr(v.str)},
}
r, err := Eval(ctx, f)
c.Assert(err, IsNil)
c.Assert(r, testutil.DatumEquals, types.NewDatum(v.result))
}
}
开发者ID:XuHuaiyu,项目名称:tidb,代码行数:55,代码来源:builtin_string_test.go
示例10: TestCoalesce
func (s *testEvaluatorSuite) TestCoalesce(c *C) {
args := types.MakeDatums(1, nil)
v, err := builtinCoalesce(args, nil)
c.Assert(err, IsNil)
c.Assert(v, DatumEquals, types.NewDatum(1))
args = types.MakeDatums(nil, nil)
v, err = builtinCoalesce(args, nil)
c.Assert(err, IsNil)
c.Assert(v, DatumEquals, types.NewDatum(nil))
}
开发者ID:astaxie,项目名称:tidb,代码行数:11,代码来源:builtin_test.go
示例11: TestCoalesce
func (s *testEvaluatorSuite) TestCoalesce(c *C) {
defer testleak.AfterTest(c)()
args := types.MakeDatums(1, nil)
v, err := builtinCoalesce(args, nil)
c.Assert(err, IsNil)
c.Assert(v, testutil.DatumEquals, types.NewDatum(1))
args = types.MakeDatums(nil, nil)
v, err = builtinCoalesce(args, nil)
c.Assert(err, IsNil)
c.Assert(v, testutil.DatumEquals, types.NewDatum(nil))
}
开发者ID:yubobo,项目名称:tidb,代码行数:12,代码来源:builtin_test.go
示例12: inExpr
func inExpr(target interface{}, list ...interface{}) *tipb.Expr {
targetDatum := types.NewDatum(target)
var listDatums []types.Datum
for _, v := range list {
listDatums = append(listDatums, types.NewDatum(v))
}
types.SortDatums(listDatums)
targetExpr := datumExpr(targetDatum)
val, _ := codec.EncodeValue(nil, listDatums...)
listExpr := &tipb.Expr{Tp: tipb.ExprType_ValueList, Val: val}
return &tipb.Expr{Tp: tipb.ExprType_In, Children: []*tipb.Expr{targetExpr, listExpr}}
}
开发者ID:yangxuanjia,项目名称:tidb,代码行数:12,代码来源:eval_test.go
示例13: Next
// Next implements Executor Next interface.
func (e *ApplyExec) Next() (*Row, error) {
srcRow, err := e.Src.Next()
if err != nil {
return nil, errors.Trace(err)
}
if srcRow == nil {
return nil, nil
}
for {
for _, col := range e.outerSchema {
idx := col.Index
col.SetValue(&srcRow.Data[idx])
}
innerRow, err := e.innerExec.Next()
if err != nil {
return nil, errors.Trace(err)
}
trimLen := len(srcRow.Data)
if innerRow != nil {
srcRow.Data = append(srcRow.Data, innerRow.Data...)
}
if e.checker == nil {
e.innerExec.Close()
return srcRow, nil
}
if innerRow == nil {
var d types.Datum
// If we can't determine the result until the last row comes, the all must be true and any must not be true.
// If the any have met a null, the result will be null.
if e.checker.dataHasNull && !e.checker.all {
d = types.NewDatum(nil)
} else {
d = types.NewDatum(e.checker.all)
}
srcRow.Data = append(srcRow.Data, d)
e.checker.dataHasNull = false
e.innerExec.Close()
return srcRow, nil
}
finished, data, err := e.checker.Check(srcRow.Data)
if err != nil {
return nil, errors.Trace(err)
}
srcRow.Data = srcRow.Data[:trimLen]
if finished {
e.checker.dataHasNull = false
e.innerExec.Close()
srcRow.Data = append(srcRow.Data, data)
return srcRow, nil
}
}
}
开发者ID:XuHuaiyu,项目名称:tidb,代码行数:53,代码来源:new_executor.go
示例14: buildTableRanges
func (r *rangeBuilder) buildTableRanges(rangePoints []rangePoint) []TableRange {
tableRanges := make([]TableRange, 0, len(rangePoints)/2)
for i := 0; i < len(rangePoints); i += 2 {
startPoint := rangePoints[i]
if startPoint.value.IsNull() || startPoint.value.Kind() == types.KindMinNotNull {
startPoint.value.SetInt64(math.MinInt64)
}
startInt, err := startPoint.value.ToInt64()
if err != nil {
r.err = errors.Trace(err)
return tableRanges
}
startDatum := types.NewDatum(startInt)
cmp, err := startDatum.CompareDatum(startPoint.value)
if err != nil {
r.err = errors.Trace(err)
return tableRanges
}
if cmp < 0 || (cmp == 0 && startPoint.excl) {
startInt++
}
endPoint := rangePoints[i+1]
if endPoint.value.IsNull() {
endPoint.value.SetInt64(math.MinInt64)
} else if endPoint.value.Kind() == types.KindMaxValue {
endPoint.value.SetInt64(math.MaxInt64)
}
endInt, err := endPoint.value.ToInt64()
if err != nil {
r.err = errors.Trace(err)
return tableRanges
}
endDatum := types.NewDatum(endInt)
cmp, err = endDatum.CompareDatum(endPoint.value)
if err != nil {
r.err = errors.Trace(err)
return tableRanges
}
if cmp > 0 || (cmp == 0 && endPoint.excl) {
endInt--
}
if startInt > endInt {
continue
}
tableRanges = append(tableRanges, TableRange{LowVal: startInt, HighVal: endInt})
}
return tableRanges
}
开发者ID:jmptrader,项目名称:tidb,代码行数:48,代码来源:range.go
示例15: TestExpression
func (s *testExpressionSuite) TestExpression(c *C) {
defer testleak.AfterTest(c)()
var schema Schema
for i := 0; i < 3; i++ {
schema = append(schema, &Column{ColName: model.NewCIStr("t"), FromID: "mock", Position: i})
}
tc1 := &Column{FromID: "t", ColName: model.NewCIStr("c1")}
kc1 := &Column{FromID: "k", ColName: model.NewCIStr("c1")}
tc2 := &Column{FromID: "t", ColName: model.NewCIStr("c2")}
con := &Constant{Value: types.NewDatum(10)}
col := &ast.ColumnName{Name: model.NewCIStr("t")}
// t.c1 as t, t.c2 as t, 10 as t => error
index, err := getColIndex([]Expression{tc1, tc2, con}, schema, col)
c.Check(err, NotNil)
// t.c1 as t, 10 as t, t.c2 as t => 10
index, err = getColIndex([]Expression{tc1, con, tc2}, schema, col)
c.Assert(index, Equals, 1)
// t.c1 as t, t.c1 as t, 10 as t => 10
index, err = getColIndex([]Expression{tc1, tc1, con}, schema, col)
c.Assert(index, Equals, 2)
// t.c1 as t, k.c1 as t, 10 as t => error
index, err = getColIndex([]Expression{tc1, kc1, con}, schema, col)
c.Check(err, NotNil)
}
开发者ID:duzhanyuan,项目名称:tidb,代码行数:25,代码来源:expression_test.go
示例16: TestBinopBitop
func (s *testEvaluatorSuite) TestBinopBitop(c *C) {
defer testleak.AfterTest(c)()
ctx := mock.NewContext()
tbl := []struct {
lhs interface{}
op opcode.Op
rhs interface{}
ret interface{}
}{
{1, opcode.And, 1, 1},
{1, opcode.Or, 1, 1},
{1, opcode.Xor, 1, 0},
{1, opcode.LeftShift, 1, 2},
{2, opcode.RightShift, 1, 1},
{nil, opcode.And, 1, nil},
{1, opcode.And, nil, nil},
{nil, opcode.Or, 1, nil},
{nil, opcode.Xor, 1, nil},
{nil, opcode.LeftShift, 1, nil},
{nil, opcode.RightShift, 1, nil},
}
for _, t := range tbl {
expr := &ast.BinaryOperationExpr{Op: t.op, L: ast.NewValueExpr(t.lhs), R: ast.NewValueExpr(t.rhs)}
v, err := Eval(ctx, expr)
c.Assert(err, IsNil)
switch x := t.ret.(type) {
case nil:
c.Assert(v.Kind(), Equals, types.KindNull)
case int:
c.Assert(v, testutil.DatumEquals, types.NewDatum(uint64(x)))
}
}
}
开发者ID:yangxuanjia,项目名称:tidb,代码行数:35,代码来源:evaluator_test.go
示例17: genValues
func genValues(handle int64, tbl *simpleTableInfo) []types.Datum {
values := make([]types.Datum, 0, len(tbl.cTypes))
for _, tp := range tbl.cTypes {
switch tp {
case mysql.TypeLong:
values = append(values, types.NewDatum(handle))
case mysql.TypeVarchar:
values = append(values, types.NewDatum(fmt.Sprintf("varchar:%d", handle)))
case mysql.TypeDouble:
values = append(values, types.NewDatum(float64(handle)/10))
default:
values = append(values, types.Datum{})
}
}
return values
}
开发者ID:pingcap,项目名称:tidb,代码行数:16,代码来源:xapi_test.go
示例18: setRow
func setRow(txn kv.Transaction, handle int64, tbl *simpleTableInfo, gen genValueFunc) error {
rowKey := tablecodec.EncodeRowKey(tbl.tID, codec.EncodeInt(nil, handle))
columnValues := gen(handle, tbl)
value, err := tablecodec.EncodeRow(columnValues, tbl.cIDs)
if err != nil {
return errors.Trace(err)
}
err = txn.Set(rowKey, value)
if err != nil {
return errors.Trace(err)
}
for i, idxCol := range tbl.indices {
idxVal := columnValues[idxCol]
encoded, err := codec.EncodeKey(nil, idxVal, types.NewDatum(handle))
if err != nil {
return errors.Trace(err)
}
idxKey := tablecodec.EncodeIndexSeekKey(tbl.tID, tbl.iIDs[i], encoded)
err = txn.Set(idxKey, []byte{0})
if err != nil {
return errors.Trace(err)
}
}
return nil
}
开发者ID:pingcap,项目名称:tidb,代码行数:25,代码来源:xapi_test.go
示例19: TestDecimalCodec
func (s *testDecimalSuite) TestDecimalCodec(c *C) {
defer testleak.AfterTest(c)()
inputs := []struct {
Input float64
}{
{float64(123400)},
{float64(1234)},
{float64(12.34)},
{float64(0.1234)},
{float64(0.01234)},
{float64(-0.1234)},
{float64(-0.01234)},
{float64(12.3400)},
{float64(-12.34)},
{float64(0.00000)},
{float64(0)},
{float64(-0.0)},
{float64(-0.000)},
}
for _, input := range inputs {
v := types.NewDecFromFloatForTest(input.Input)
b := EncodeDecimal([]byte{}, types.NewDatum(v))
_, d, err := DecodeDecimal(b)
c.Assert(err, IsNil)
c.Assert(v.Compare(d.GetMysqlDecimal()), Equals, 0)
}
}
开发者ID:pingcap,项目名称:tidb,代码行数:28,代码来源:decimal_test.go
示例20: tryToPushDownAgg
// tryToPushDownAgg tries to push down an aggregate function into a join path. If all aggFuncs are first row, we won't
// process it temporarily. If not, We will add additional group by columns and first row functions. We make a new aggregation
// operator.
func (a *aggPushDownSolver) tryToPushDownAgg(aggFuncs []expression.AggregationFunction, gbyCols []*expression.Column, join *Join, childIdx int) LogicalPlan {
child := join.GetChildByIndex(childIdx).(LogicalPlan)
if a.allFirstRow(aggFuncs) {
return child
}
agg := a.makeNewAgg(aggFuncs, gbyCols)
child.SetParents(agg)
agg.SetChildren(child)
agg.correlated = agg.correlated || child.IsCorrelated()
// If agg has no group-by item, it will return a default value, which may cause some bugs.
// So here we add a group-by item forcely.
if len(agg.GroupByItems) == 0 {
agg.GroupByItems = []expression.Expression{&expression.Constant{
Value: types.NewDatum(0),
RetType: types.NewFieldType(mysql.TypeLong)}}
}
if (childIdx == 0 && join.JoinType == RightOuterJoin) || (childIdx == 1 && join.JoinType == LeftOuterJoin) {
var existsDefaultValues bool
join.DefaultValues, existsDefaultValues = a.getDefaultValues(agg)
if !existsDefaultValues {
return child
}
}
return agg
}
开发者ID:pingcap,项目名称:tidb,代码行数:28,代码来源:aggregation_push_down.go
注:本文中的github.com/pingcap/tidb/util/types.NewDatum函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论