forked from pingcap/tidb
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtype.go
142 lines (123 loc) · 4.23 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
// 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 = 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
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.
var TypeUnspecified = TypeDecimal
// 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
}