1 module mysql.protocol.constants;
2 
3 /++
4 Server capability flags.
5 
6 During the connection handshake process, the server sends a uint of flags
7 describing its capabilities.
8 
9 See_Also: http://dev.mysql.com/doc/internals/en/connection-phase.html#capability-flags
10 +/
11 enum SvrCapFlags: uint
12 {
13 	OLD_LONG_PASSWORD   = 0x0_0001, /// Long old-style passwords (Not 4.1+ passwords)
14 	FOUND_NOT_AFFECTED  = 0x0_0002, /// Report rows found rather than rows affected
15 	ALL_COLUMN_FLAGS    = 0x0_0004, /// Send all column flags
16 	WITH_DB             = 0x0_0008, /// Can take database as part of login
17 	NO_SCHEMA           = 0x0_0010, /// Can disallow database name as part of column name database.table.column
18 	CAN_COMPRESS        = 0x0_0020, /// Can compress packets
19 	ODBC                = 0x0_0040, /// Can handle ODBC
20 	LOCAL_FILES         = 0x0_0080, /// Can use LOAD DATA LOCAL
21 	IGNORE_SPACE        = 0x0_0100, /// Can ignore spaces before '$(LPAREN)'
22 	PROTOCOL41          = 0x0_0200, /// Can use 4.1+ protocol
23 	INTERACTIVE         = 0x0_0400, /// Interactive client?
24 	SSL                 = 0x0_0800, /// Can switch to SSL after handshake
25 	IGNORE_SIGPIPE      = 0x0_1000, /// Ignore sigpipes?
26 	TRANSACTIONS        = 0x0_2000, /// Transaction support
27 	RESERVED            = 0x0_4000, //  Old flag for 4.1 protocol
28 	SECURE_CONNECTION   = 0x0_8000, /// 4.1+ authentication
29 	MULTI_STATEMENTS    = 0x1_0000, /// Multiple statement support
30 	MULTI_RESULTS       = 0x2_0000, /// Multiple result set support
31 }
32 
33 /++
34 Column type codes
35 +/
36 enum SQLType : short
37 {
38 	INFER_FROM_D_TYPE = -1,
39 	DECIMAL      = 0x00,
40 	TINY         = 0x01,
41 	SHORT        = 0x02,
42 	INT          = 0x03,
43 	FLOAT        = 0x04,
44 	DOUBLE       = 0x05,
45 	NULL         = 0x06,
46 	TIMESTAMP    = 0x07,
47 	LONGLONG     = 0x08,
48 	INT24        = 0x09,
49 	DATE         = 0x0a,
50 	TIME         = 0x0b,
51 	DATETIME     = 0x0c,
52 	YEAR         = 0x0d,
53 	NEWDATE      = 0x0e,
54 	VARCHAR      = 0x0f, // new in MySQL 5.0
55 	BIT          = 0x10, // new in MySQL 5.0
56 	NEWDECIMAL   = 0xf6, // new in MYSQL 5.0
57 	ENUM         = 0xf7,
58 	SET          = 0xf8,
59 	TINYBLOB     = 0xf9,
60 	MEDIUMBLOB   = 0xfa,
61 	LONGBLOB     = 0xfb,
62 	BLOB         = 0xfc,
63 	VARSTRING    = 0xfd,
64 	STRING       = 0xfe,
65 	GEOMETRY     = 0xff
66 }
67 
68 /++
69 Server refresh flags
70 +/
71 enum RefreshFlags : ubyte
72 {
73 	GRANT    =   1,
74 	LOG      =   2,
75 	TABLES   =   4,
76 	HOSTS    =   8,
77 	STATUS   =  16,
78 	THREADS  =  32,
79 	SLAVE    =  64,
80 	MASTER   = 128
81 }
82 
83 /++
84 Type of Command Packet (COM_XXX)
85 See_Also: http://forge.mysql.com/wiki/MySQL_Internals_ClientServer_Protocol#Command_Packet_.28Overview.29
86 +/
87 enum CommandType : ubyte
88 {
89 	SLEEP               = 0x00,
90 	QUIT                = 0x01,
91 	INIT_DB             = 0x02,
92 	QUERY               = 0x03,
93 	FIELD_LIST          = 0x04,
94 	CREATE_DB           = 0x05,
95 	DROP_DB             = 0x06,
96 	REFRESH             = 0x07,
97 	SHUTDOWN            = 0x08,
98 	STATISTICS          = 0x09,
99 	PROCESS_INFO        = 0x0a,
100 	CONNECT             = 0x0b,
101 	PROCESS_KILL        = 0x0c,
102 	DEBUG               = 0x0d,
103 	PING                = 0x0e,
104 	TIME                = 0x0f,
105 	DELAYED_INSERT      = 0x10,
106 	CHANGE_USER         = 0x11,
107 	BINLOG_DUBP         = 0x12,
108 	TABLE_DUMP          = 0x13,
109 	CONNECT_OUT         = 0x14,
110 	REGISTER_SLAVE      = 0x15,
111 	STMT_PREPARE        = 0x16,
112 	STMT_EXECUTE        = 0x17,
113 	STMT_SEND_LONG_DATA = 0x18,
114 	STMT_CLOSE          = 0x19,
115 	STMT_RESET          = 0x1a,
116 	STMT_OPTION         = 0x1b,
117 	STMT_FETCH          = 0x1c,
118 }
119 
120 /// Magic marker sent in the first byte of mysql results in response to auth or command packets
121 enum ResultPacketMarker : ubyte
122 {
123 	/++
124 	Server reports an error
125 	See_Also: http://forge.mysql.com/wiki/MySQL_Internals_ClientServer_Protocol#Error_Packet
126 	+/
127 	error   = 0xff,
128 
129 	/++
130 	No error, no result set.
131 	See_Also: http://forge.mysql.com/wiki/MySQL_Internals_ClientServer_Protocol#OK_Packet
132 	+/
133 	ok      = 0x00,
134 
135 	/++
136 	Server reports end of data
137 	See_Also: http://forge.mysql.com/wiki/MySQL_Internals_ClientServer_Protocol#EOF_Packet
138 	+/
139 	eof     = 0xfe,
140 }
141 
142 /++
143 Field Flags
144 See_Also: http://forge.mysql.com/wiki/MySQL_Internals_ClientServer_Protocol#Field_Packet
145 +/
146 enum FieldFlags : ushort
147 {
148 	NOT_NULL        = 0x0001,
149 	PRI_KEY         = 0x0002,
150 	UNIQUE_KEY      = 0x0004,
151 	MULTIPLE_KEY    = 0x0008,
152 	BLOB            = 0x0010,
153 	UNSIGNED        = 0x0020,
154 	ZEROFILL        = 0x0040,
155 	BINARY          = 0x0080,
156 	ENUM            = 0x0100,
157 	AUTO_INCREMENT  = 0x0200,
158 	TIMESTAMP       = 0x0400,
159 	SET             = 0x0800
160 }