forked from pingcap/tidb
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtype.go
144 lines (125 loc) · 3.95 KB
/
type.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package mysql
// MySQL type informations.
const (
TypeDecimal byte = iota
TypeTiny
TypeShort
TypeLong
TypeFloat
TypeDouble
TypeNull
TypeTimestamp
TypeLonglong
TypeInt24
TypeDate
TypeDuration /* Original name was TypeTime, renamed to Duration to resolve the conflict with Go type Time.*/
TypeDatetime
TypeYear
TypeNewDate
TypeVarchar
TypeBit
)
// TypeUnspecified is an uninitialized type. TypeDecimal is not used in MySQL.
var TypeUnspecified = TypeDecimal
// MySQL type informations.
const (
TypeNewDecimal byte = iota + 0xf6
TypeEnum
TypeSet
TypeTinyBlob
TypeMediumBlob
TypeLongBlob
TypeBlob
TypeVarString
TypeString
TypeGeometry
)
// IsUninitializedType check if a type code is uninitialized.
// TypeDecimal is the old type code for decimal and not be used in the new mysql version.
func IsUninitializedType(tp byte) bool {
return tp == TypeDecimal
}
// Flag informations.
const (
NotNullFlag = 1 /* Field can't be NULL */
PriKeyFlag = 2 /* Field is part of a primary key */
UniqueKeyFlag = 4 /* Field is part of a unique key */
MultipleKeyFlag = 8 /* Field is part of a key */
BlobFlag = 16 /* Field is a blob */
UnsignedFlag = 32 /* Field is unsigned */
ZerofillFlag = 64 /* Field is zerofill */
BinaryFlag = 128 /* Field is binary */
EnumFlag = 256 /* Field is an enum */
AutoIncrementFlag = 512 /* Field is an auto increment field */
TimestampFlag = 1024 /* Field is a timestamp */
SetFlag = 2048 /* Field is a set */
NoDefaultValueFlag = 4096 /* Field doesn't have a default value */
OnUpdateNowFlag = 8192 /* Field is set to NOW on UPDATE */
NumFlag = 32768 /* Field is a num (for clients) */
PartKeyFlag = 16384 /* Intern: Part of some keys */
GroupFlag = 32768 /* Intern: Group field */
UniqueFlag = 65536 /* Intern: Used by sql_yacc */
BinCmpFlag = 131072 /* Intern: Used by sql_yacc */
)
// TypeInt24 bounds.
const (
MaxUint24 = 1<<24 - 1
MaxInt24 = 1<<23 - 1
MinInt24 = -1 << 23
)
// HasNotNullFlag checks if NotNullFlag is set.
func HasNotNullFlag(flag uint) bool {
return (flag & NotNullFlag) > 0
}
// HasNoDefaultValueFlag checks if NoDefaultValueFlag is set.
func HasNoDefaultValueFlag(flag uint) bool {
return (flag & NoDefaultValueFlag) > 0
}
// HasAutoIncrementFlag checks if AutoIncrementFlag is set.
func HasAutoIncrementFlag(flag uint) bool {
return (flag & AutoIncrementFlag) > 0
}
// HasUnsignedFlag checks if UnsignedFlag is set.
func HasUnsignedFlag(flag uint) bool {
return (flag & UnsignedFlag) > 0
}
// HasZerofillFlag checks if ZerofillFlag is set.
func HasZerofillFlag(flag uint) bool {
return (flag & ZerofillFlag) > 0
}
// HasBinaryFlag checks if BinaryFlag is set.
func HasBinaryFlag(flag uint) bool {
return (flag & BinaryFlag) > 0
}
// HasPriKeyFlag checks if PriKeyFlag is set.
func HasPriKeyFlag(flag uint) bool {
return (flag & PriKeyFlag) > 0
}
// HasUniKeyFlag checks if UniqueKeyFlag is set.
func HasUniKeyFlag(flag uint) bool {
return (flag & UniqueKeyFlag) > 0
}
// HasMultipleKeyFlag checks if MultipleKeyFlag is set.
func HasMultipleKeyFlag(flag uint) bool {
return (flag & MultipleKeyFlag) > 0
}
// HasTimestampFlag checks if HasTimestampFlag is set.
func HasTimestampFlag(flag uint) bool {
return (flag & TimestampFlag) > 0
}
// HasOnUpdateNowFlag checks if OnUpdateNowFlag is set.
func HasOnUpdateNowFlag(flag uint) bool {
return (flag & OnUpdateNowFlag) > 0
}