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