-
Notifications
You must be signed in to change notification settings - Fork 5.9k
/
type.go
149 lines (129 loc) · 4.58 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
145
146
147
148
149
// 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 information.
const (
TypeDecimal byte = 0
TypeTiny byte = 1
TypeShort byte = 2
TypeLong byte = 3
TypeFloat byte = 4
TypeDouble byte = 5
TypeNull byte = 6
TypeTimestamp byte = 7
TypeLonglong byte = 8
TypeInt24 byte = 9
TypeDate byte = 10
/* Original name was TypeTime, renamed to Duration to resolve the conflict with Go type Time.*/
TypeDuration byte = 11
TypeDatetime byte = 12
TypeYear byte = 13
TypeNewDate byte = 14
TypeVarchar byte = 15
TypeBit byte = 16
TypeJSON byte = 0xf5
TypeNewDecimal byte = 0xf6
TypeEnum byte = 0xf7
TypeSet byte = 0xf8
TypeTinyBlob byte = 0xf9
TypeMediumBlob byte = 0xfa
TypeLongBlob byte = 0xfb
TypeBlob byte = 0xfc
TypeVarString byte = 0xfd
TypeString byte = 0xfe
TypeGeometry byte = 0xff
)
// TypeUnspecified is an uninitialized type. TypeDecimal is not used in MySQL.
const TypeUnspecified = TypeDecimal
// Flag information.
const (
NotNullFlag uint = 1 /* Field can't be NULL */
PriKeyFlag uint = 2 /* Field is part of a primary key */
UniqueKeyFlag uint = 4 /* Field is part of a unique key */
MultipleKeyFlag uint = 8 /* Field is part of a key */
BlobFlag uint = 16 /* Field is a blob */
UnsignedFlag uint = 32 /* Field is unsigned */
ZerofillFlag uint = 64 /* Field is zerofill */
BinaryFlag uint = 128 /* Field is binary */
EnumFlag uint = 256 /* Field is an enum */
AutoIncrementFlag uint = 512 /* Field is an auto increment field */
TimestampFlag uint = 1024 /* Field is a timestamp */
SetFlag uint = 2048 /* Field is a set */
NoDefaultValueFlag uint = 4096 /* Field doesn't have a default value */
OnUpdateNowFlag uint = 8192 /* Field is set to NOW on UPDATE */
NumFlag uint = 32768 /* Field is a num (for clients) */
PartKeyFlag uint = 16384 /* Intern: Part of some keys */
GroupFlag uint = 32768 /* Intern: Group field */
UniqueFlag uint = 65536 /* Intern: Used by sql_yacc */
BinCmpFlag uint = 131072 /* Intern: Used by sql_yacc */
ParseToJSONFlag uint = 262144 /* Intern: Used when we want to parse string to JSON in CAST */
IsBooleanFlag uint = 524288 /* Intern: Used for telling boolean literal from integer */
)
// 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
}
// HasParseToJSONFlag checks if ParseToJSONFlag is set.
func HasParseToJSONFlag(flag uint) bool {
return (flag & ParseToJSONFlag) > 0
}
// HasIsBooleanFlag checks if IsBooleanFlag is set.
func HasIsBooleanFlag(flag uint) bool {
return (flag & IsBooleanFlag) > 0
}