本文整理汇总了Golang中github.com/pingcap/tidb/mysqldef.HasUnsignedFlag函数的典型用法代码示例。如果您正苦于以下问题:Golang HasUnsignedFlag函数的具体用法?Golang HasUnsignedFlag怎么用?Golang HasUnsignedFlag使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了HasUnsignedFlag函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: unflatten
func (t *Table) unflatten(rec interface{}, col *column.Col) (interface{}, error) {
if rec == nil {
return nil, nil
}
switch col.Tp {
case mysql.TypeFloat:
return float32(rec.(float64)), nil
case mysql.TypeDouble:
return rec.(float64), nil
case mysql.TypeTiny:
if mysql.HasUnsignedFlag(col.Flag) {
return uint8(rec.(uint64)), nil
}
return int8(rec.(int64)), nil
case mysql.TypeShort, mysql.TypeYear:
if mysql.HasUnsignedFlag(col.Flag) {
return uint16(rec.(uint64)), nil
}
return int16(rec.(int64)), nil
case mysql.TypeInt24, mysql.TypeLong:
if mysql.HasUnsignedFlag(col.Flag) {
return uint32(rec.(uint64)), nil
}
return int32(rec.(int64)), nil
case mysql.TypeLonglong:
if mysql.HasUnsignedFlag(col.Flag) {
return rec.(uint64), nil
}
return rec.(int64), nil
case mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeBlob, mysql.TypeLongBlob, mysql.TypeVarchar, mysql.TypeString:
return rec, nil
case mysql.TypeDate, mysql.TypeDatetime, mysql.TypeTimestamp:
var t mysql.Time
t.Type = col.Tp
t.Fsp = col.Decimal
err := t.Unmarshal(rec.([]byte))
if err != nil {
return nil, errors.Trace(err)
}
return t, nil
case mysql.TypeDuration:
return mysql.Duration{Duration: time.Duration(rec.(int64)), Fsp: col.Decimal}, nil
case mysql.TypeNewDecimal, mysql.TypeDecimal:
return mysql.ParseDecimal(rec.(string))
}
log.Error(string(col.Tp), rec, reflect.TypeOf(rec))
return nil, nil
}
示例2: String
// String joins the information of FieldType and
// returns a string.
func (ft *FieldType) String() string {
ts := FieldTypeToStr(ft.Tp, ft.Charset)
ans := []string{ts}
if ft.Flen != UnspecifiedLength {
if ft.Decimal == UnspecifiedLength {
ans = append(ans, fmt.Sprintf("(%d)", ft.Flen))
} else {
ans = append(ans, fmt.Sprintf("(%d, %d)", ft.Flen, ft.Decimal))
}
} else if ft.Decimal != UnspecifiedLength {
ans = append(ans, fmt.Sprintf("(%d)", ft.Decimal))
}
if mysql.HasUnsignedFlag(ft.Flag) {
ans = append(ans, "UNSIGNED")
}
if mysql.HasZerofillFlag(ft.Flag) {
ans = append(ans, "ZEROFILL")
}
if mysql.HasBinaryFlag(ft.Flag) {
ans = append(ans, "BINARY")
}
if ft.Charset != "" && ft.Charset != charset.CharsetBin &&
(IsTypeChar(ft.Tp) || IsTypeBlob(ft.Tp)) {
ans = append(ans, fmt.Sprintf("CHARACTER SET %s", ft.Charset))
}
if ft.Collate != "" && ft.Collate != charset.CharsetBin &&
(IsTypeChar(ft.Tp) || IsTypeBlob(ft.Tp)) {
ans = append(ans, fmt.Sprintf("COLLATE %s", ft.Collate))
}
return strings.Join(ans, " ")
}
示例3: GetTypeDesc
// GetTypeDesc gets the description for column type.
func (c *Col) GetTypeDesc() string {
var buf bytes.Buffer
buf.WriteString(types.FieldTypeToStr(c.Tp, c.Charset))
switch c.Tp {
case mysql.TypeSet, mysql.TypeEnum:
// Format is ENUM ('e1', 'e2') or SET ('e1', 'e2')
// If elem contain ', we will convert ' -> ''
elems := make([]string, len(c.Elems))
for i := range elems {
elems[i] = strings.Replace(c.Elems[i], "'", "''", -1)
}
buf.WriteString(fmt.Sprintf("('%s')", strings.Join(elems, "','")))
default:
if c.Flen != -1 {
if c.Decimal == -1 {
buf.WriteString(fmt.Sprintf("(%d)", c.Flen))
} else {
buf.WriteString(fmt.Sprintf("(%d,%d)", c.Flen, c.Decimal))
}
}
}
if mysql.HasUnsignedFlag(c.Flag) {
buf.WriteString(" UNSIGNED")
}
return buf.String()
}
示例4: GetTypeDesc
// GetTypeDesc gets the description for column type.
func (c *Col) GetTypeDesc() string {
desc := c.FieldType.CompactStr()
if mysql.HasUnsignedFlag(c.Flag) {
desc += " UNSIGNED"
}
return desc
}
示例5: getTypeStr
func (c *Col) getTypeStr() string {
ans := []string{types.FieldTypeToStr(c.Tp, c.Charset)}
if c.Flen != -1 {
if c.Decimal == -1 {
ans = append(ans, fmt.Sprintf("(%d)", c.Flen))
} else {
ans = append(ans, fmt.Sprintf("(%d, %d)", c.Flen, c.Decimal))
}
}
if mysql.HasUnsignedFlag(c.Flag) {
ans = append(ans, "UNSIGNED")
}
if mysql.HasZerofillFlag(c.Flag) {
ans = append(ans, "ZEROFILL")
}
if mysql.HasBinaryFlag(c.Flag) {
ans = append(ans, "BINARY")
}
if c.Charset != "" && c.Charset != charset.CharsetBin {
ans = append(ans, fmt.Sprintf("CHARACTER SET %s", c.Charset))
}
if c.Collate != "" {
ans = append(ans, fmt.Sprintf("COLLATE %s", c.Collate))
}
return strings.Join(ans, " ")
}
示例6: String
// String implements the Expression String interface.
func (f *FunctionCast) String() string {
tpStr := ""
if f.Tp.Tp == mysql.TypeLonglong {
if mysql.HasUnsignedFlag(f.Tp.Flag) {
tpStr = "UNSIGNED"
} else {
tpStr = "SIGNED"
}
} else {
tpStr = f.Tp.String()
}
return fmt.Sprintf("CAST(%s AS %s)", f.Expr.String(), tpStr)
}
示例7: getTypeDesc
func (c *Col) getTypeDesc() string {
ans := []string{types.FieldTypeToStr(c.Tp, c.Charset)}
if c.Flen != -1 {
if c.Decimal == -1 {
ans = append(ans, fmt.Sprintf("(%d)", c.Flen))
} else {
ans = append(ans, fmt.Sprintf("(%d, %d)", c.Flen, c.Decimal))
}
}
if mysql.HasUnsignedFlag(c.Flag) {
ans = append(ans, "UNSIGNED")
}
return strings.Join(ans, " ")
}
示例8: String
// String implements the Expression String interface.
func (f *FunctionCast) String() string {
tpStr := ""
if f.Tp.Tp == mysql.TypeLonglong {
if mysql.HasUnsignedFlag(f.Tp.Flag) {
tpStr = "UNSIGNED"
} else {
tpStr = "SIGNED"
}
} else {
tpStr = f.Tp.String()
}
if f.FunctionType == ConvertFunction {
return fmt.Sprintf("CONVERT(%s, %s)", f.Expr.String(), tpStr)
} else if f.FunctionType == BinaryOperator {
return fmt.Sprintf("BINARY %s", f.Expr.String())
}
return fmt.Sprintf("CAST(%s AS %s)", f.Expr.String(), tpStr)
}
示例9: getTypeDesc
func (c *Col) getTypeDesc() string {
ans := []string{types.FieldTypeToStr(c.Tp, c.Charset)}
switch c.Tp {
case mysql.TypeSet, mysql.TypeEnum:
// Format is ENUM ('e1', 'e2') or SET ('e1', 'e2')
ans = append(ans, fmt.Sprintf("('%s')", strings.Join(c.Elems, "','")))
default:
if c.Flen != -1 {
if c.Decimal == -1 {
ans = append(ans, fmt.Sprintf("(%d)", c.Flen))
} else {
ans = append(ans, fmt.Sprintf("(%d, %d)", c.Flen, c.Decimal))
}
}
}
if mysql.HasUnsignedFlag(c.Flag) {
ans = append(ans, "UNSIGNED")
}
return strings.Join(ans, " ")
}
示例10: String
// String joins the information of FieldType and
// returns a string.
func (ft *FieldType) String() string {
ts := FieldTypeToStr(ft.Tp, ft.Charset)
ans := []string{ts}
switch ft.Tp {
case mysql.TypeEnum, mysql.TypeSet:
// Format is ENUM ('e1', 'e2') or SET ('e1', 'e2')
ans = append(ans, fmt.Sprintf("('%s')", strings.Join(ft.Elems, "','")))
default:
if ft.Flen != UnspecifiedLength {
if ft.Decimal == UnspecifiedLength {
ans = append(ans, fmt.Sprintf("(%d)", ft.Flen))
} else {
ans = append(ans, fmt.Sprintf("(%d, %d)", ft.Flen, ft.Decimal))
}
} else if ft.Decimal != UnspecifiedLength {
ans = append(ans, fmt.Sprintf("(%d)", ft.Decimal))
}
}
if mysql.HasUnsignedFlag(ft.Flag) {
ans = append(ans, "UNSIGNED")
}
if mysql.HasZerofillFlag(ft.Flag) {
ans = append(ans, "ZEROFILL")
}
if mysql.HasBinaryFlag(ft.Flag) {
ans = append(ans, "BINARY")
}
if ft.Charset != "" && ft.Charset != charset.CharsetBin &&
(IsTypeChar(ft.Tp) || IsTypeBlob(ft.Tp)) {
ans = append(ans, fmt.Sprintf("CHARACTER SET %s", ft.Charset))
}
if ft.Collate != "" && ft.Collate != charset.CharsetBin &&
(IsTypeChar(ft.Tp) || IsTypeBlob(ft.Tp)) {
ans = append(ans, fmt.Sprintf("COLLATE %s", ft.Collate))
}
return strings.Join(ans, " ")
}
示例11: String
// String joins the information of FieldType and
// returns a string.
func (ft *FieldType) String() string {
strs := []string{ft.CompactStr()}
if mysql.HasUnsignedFlag(ft.Flag) {
strs = append(strs, "UNSIGNED")
}
if mysql.HasZerofillFlag(ft.Flag) {
strs = append(strs, "ZEROFILL")
}
if mysql.HasBinaryFlag(ft.Flag) {
strs = append(strs, "BINARY")
}
if IsTypeChar(ft.Tp) || IsTypeBlob(ft.Tp) {
if ft.Charset != "" && ft.Charset != charset.CharsetBin {
strs = append(strs, fmt.Sprintf("CHARACTER SET %s", ft.Charset))
}
if ft.Collate != "" && ft.Collate != charset.CharsetBin {
strs = append(strs, fmt.Sprintf("COLLATE %s", ft.Collate))
}
}
return strings.Join(strs, " ")
}
示例12: normalizeIntegerFromFloat
func (c *Col) normalizeIntegerFromFloat(v float64) (val int64, errCode int) {
if v > 0 {
v = math.Floor(v + 0.5)
} else {
v = math.Ceil(v - 0.5)
}
if mysql.HasUnsignedFlag(c.Flag) {
if v < 0 {
errCode = errCodeOverflowLower
} else if v > math.MaxUint64 {
errCode = errCodeOverflowUpper
}
} else {
if v < math.MinInt64 {
errCode = errCodeOverflowLower
} else if v > math.MaxInt64 {
errCode = errCodeOverflowUpper
}
}
val = int64(v)
return
}
示例13: Eval
// Eval implements the Expression Eval interface.
func (f *FunctionCast) Eval(ctx context.Context, args map[interface{}]interface{}) (interface{}, error) {
value, err := f.Expr.Eval(ctx, args)
if err != nil {
return nil, err
}
// Casting nil to any type returns null
if value == nil {
return nil, nil
}
// TODO: we need a better function convert between any two types according to FieldType.
// Not only check Type, but also consider Flen/Decimal/Charset and so on.
nv, err := types.Convert(value, f.Tp)
if err != nil {
return nil, err
}
if f.Tp.Tp == mysql.TypeString && f.Tp.Charset == charset.CharsetBin {
nv = []byte(nv.(string))
}
if f.Tp.Flen != types.UnspecifiedLength {
switch f.Tp.Tp {
case mysql.TypeString:
v := nv.(string)
if len(v) > int(f.Tp.Flen) {
v = v[:f.Tp.Flen]
}
return v, nil
}
}
if f.Tp.Tp == mysql.TypeLonglong {
if mysql.HasUnsignedFlag(f.Tp.Flag) {
return uint64(nv.(int64)), nil
}
}
return nv, nil
}
示例14: Convert
// Convert converts the val with type tp.
func Convert(val interface{}, target *FieldType) (v interface{}, err error) {
tp := target.Tp
if val == nil {
return nil, nil
}
switch tp { // TODO: implement mysql types convert when "CAST() AS" syntax are supported.
case mysql.TypeFloat:
x, err := ToFloat64(val)
if err != nil {
return invConv(val, tp)
}
// For float and following double type, we will only truncate it for float(M, D) format.
// If no D is set, we will handle it like origin float whether M is set or not.
if target.Flen != UnspecifiedLength && target.Decimal != UnspecifiedLength {
x, err = TruncateFloat(x, target.Flen, target.Decimal)
if err != nil {
return nil, errors.Trace(err)
}
}
return float32(x), nil
case mysql.TypeDouble:
x, err := ToFloat64(val)
if err != nil {
return invConv(val, tp)
}
if target.Flen != UnspecifiedLength && target.Decimal != UnspecifiedLength {
x, err = TruncateFloat(x, target.Flen, target.Decimal)
if err != nil {
return nil, errors.Trace(err)
}
}
return float64(x), nil
case mysql.TypeBlob, mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob,
mysql.TypeString, mysql.TypeVarchar, mysql.TypeVarString:
x, err := ToString(val)
if err != nil {
return invConv(val, tp)
}
// TODO: consider target.Charset/Collate
x = truncateStr(x, target.Flen)
if target.Charset == charset.CharsetBin {
return []byte(x), nil
}
return x, nil
case mysql.TypeDuration:
fsp := mysql.DefaultFsp
if target.Decimal != UnspecifiedLength {
fsp = target.Decimal
}
switch x := val.(type) {
case mysql.Duration:
return x.RoundFrac(fsp)
case mysql.Time:
t, err := x.ConvertToDuration()
if err != nil {
return nil, errors.Trace(err)
}
return t.RoundFrac(fsp)
case string:
return mysql.ParseDuration(x, fsp)
default:
return invConv(val, tp)
}
case mysql.TypeTimestamp, mysql.TypeDatetime, mysql.TypeDate:
fsp := mysql.DefaultFsp
if target.Decimal != UnspecifiedLength {
fsp = target.Decimal
}
switch x := val.(type) {
case mysql.Time:
t, err := x.Convert(tp)
if err != nil {
return nil, errors.Trace(err)
}
return t.RoundFrac(fsp)
case mysql.Duration:
t, err := x.ConvertToTime(tp)
if err != nil {
return nil, errors.Trace(err)
}
return t.RoundFrac(fsp)
case string:
return mysql.ParseTime(x, tp, fsp)
case int64:
return mysql.ParseTimeFromNum(x, tp, fsp)
default:
return invConv(val, tp)
}
case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong:
unsigned := mysql.HasUnsignedFlag(target.Flag)
if unsigned {
return convertToUint(val, target)
}
return convertToInt(val, target)
case mysql.TypeBit:
x, err := convertToUint(val, target)
if err != nil {
return x, errors.Trace(err)
//.........这里部分代码省略.........
示例15: Convert
// Convert converts the val with type tp.
func Convert(val interface{}, target *FieldType) (v interface{}, err error) { //NTYPE
tp := target.Tp
if val == nil {
return nil, nil
}
switch tp { // TODO: implement mysql types convert when "CAST() AS" syntax are supported.
case mysql.TypeFloat:
x, err := ToFloat64(val)
if err != nil {
return invConv(val, tp)
}
if target.Flen != UnspecifiedLength {
x, err = TruncateFloat(x, target.Flen, target.Decimal)
if err != nil {
return nil, errors.Trace(err)
}
}
return float32(x), nil
case mysql.TypeDouble:
x, err := ToFloat64(val)
if err != nil {
return invConv(val, tp)
}
if target.Flen != UnspecifiedLength {
x, err = TruncateFloat(x, target.Flen, target.Decimal)
if err != nil {
return nil, errors.Trace(err)
}
}
return float64(x), nil
case mysql.TypeBlob, mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob,
mysql.TypeString, mysql.TypeVarchar, mysql.TypeVarString:
x, err := ToString(val)
if err != nil {
return invConv(val, tp)
}
// TODO: consider target.Charset/Collate
x = truncateStr(x, target.Flen)
if target.Charset == charset.CharsetBin {
return []byte(x), nil
}
return x, nil
case mysql.TypeDuration:
fsp := mysql.DefaultFsp
if target.Decimal != UnspecifiedLength {
fsp = target.Decimal
}
switch x := val.(type) {
case mysql.Duration:
return x.RoundFrac(fsp)
case mysql.Time:
t, err := x.ConvertToDuration()
if err != nil {
return nil, errors.Trace(err)
}
return t.RoundFrac(fsp)
case string:
return mysql.ParseDuration(x, fsp)
default:
return invConv(val, tp)
}
case mysql.TypeTimestamp, mysql.TypeDatetime, mysql.TypeDate:
fsp := mysql.DefaultFsp
if target.Decimal != UnspecifiedLength {
fsp = target.Decimal
}
switch x := val.(type) {
case mysql.Time:
t, err := x.Convert(tp)
if err != nil {
return nil, errors.Trace(err)
}
return t.RoundFrac(fsp)
case mysql.Duration:
t, err := x.ConvertToTime(tp)
if err != nil {
return nil, errors.Trace(err)
}
return t.RoundFrac(fsp)
case string:
return mysql.ParseTime(x, tp, fsp)
case int64:
return mysql.ParseTimeFromNum(x, tp, fsp)
default:
return invConv(val, tp)
}
case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong:
unsigned := mysql.HasUnsignedFlag(target.Flag)
if unsigned {
return convertToUint(val, target)
}
return convertToInt(val, target)
case mysql.TypeBit:
x, err := convertToUint(val, target)
if err != nil {
return x, errors.Trace(err)
}
//.........这里部分代码省略.........