1 #ifndef TNT_PROTO_H_INCLUDED
2 #define TNT_PROTO_H_INCLUDED
3 
4 /*
5  * Redistribution and use in source and binary forms, with or
6  * without modification, are permitted provided that the following
7  * conditions are met:
8  *
9  * 1. Redistributions of source code must retain the above
10  *    copyright notice, this list of conditions and the
11  *    following disclaimer.
12  *
13  * 2. Redistributions in binary form must reproduce the above
14  *    copyright notice, this list of conditions and the following
15  *    disclaimer in the documentation and/or other materials
16  *    provided with the distribution.
17  *
18  * THIS SOFTWARE IS PROVIDED BY <COPYRIGHT HOLDER> ``AS IS'' AND
19  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
20  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
22  * <COPYRIGHT HOLDER> OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
23  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
26  * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
29  * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30  * SUCH DAMAGE.
31  */
32 
33 /**
34  * \file tnt_proto.h
35  * \brief IProto protocol constants
36  */
37 
38 /**
39  * \brief Request/response header field types (keys)
40  */
41 enum tnt_header_key_t {
42 	TNT_CODE      = 0x00,
43 	TNT_SYNC      = 0x01,
44 	TNT_SERVER_ID = 0x02,
45 	TNT_LSN       = 0x03,
46 	TNT_TIMESTAMP = 0x04,
47 	TNT_SCHEMA_ID = 0x05
48 };
49 
50 /**
51  * \brief Request body field types (keys)
52  */
53 enum tnt_body_key_t {
54 	TNT_SPACE = 0x10,
55 	TNT_INDEX = 0x11,
56 	TNT_LIMIT = 0x12,
57 	TNT_OFFSET = 0x13,
58 	TNT_ITERATOR = 0x14,
59 	TNT_INDEX_BASE = 0x15,
60 	TNT_KEY = 0x20,
61 	TNT_TUPLE = 0x21,
62 	TNT_FUNCTION = 0x22,
63 	TNT_USERNAME = 0x23,
64 	TNT_SERVER_UUID = 0x24,
65 	TNT_CLUSTER_UUID = 0x25,
66 	TNT_VCLOCK = 0x26,
67 	TNT_EXPRESSION = 0x27,
68 	TNT_OPS = 0x28,
69 	TNT_SQL_TEXT = 0x40,
70 	TNT_SQL_BIND = 0x41,
71 };
72 
73 enum tnt_response_type_t {
74 	TNT_OK    = 0x00,
75 	TNT_CHUNK = 0x80,
76 };
77 
78 /**
79  * \brief Response body field types (keys)
80  */
81 enum tnt_response_key_t {
82 	TNT_DATA = 0x30,
83 	TNT_ERROR = 0x31,
84 	TNT_METADATA = 0x32,
85 	TNT_SQL_INFO = 0x42,
86 };
87 
88 /**
89  * \brief Request types
90  */
91 enum tnt_request_t {
92 	TNT_OP_SELECT    = 1,
93 	TNT_OP_INSERT    = 2,
94 	TNT_OP_REPLACE   = 3,
95 	TNT_OP_UPDATE    = 4,
96 	TNT_OP_DELETE    = 5,
97 	TNT_OP_CALL_16   = 6,
98 	TNT_OP_AUTH      = 7,
99 	TNT_OP_EVAL      = 8,
100 	TNT_OP_UPSERT    = 9,
101 	TNT_OP_CALL      = 10,
102 	TNT_OP_EXECUTE   = 11,
103 	TNT_OP_PING      = 64,
104 	TNT_OP_JOIN      = 65,
105 	TNT_OP_SUBSCRIBE = 66
106 };
107 
108 /**
109  * \brief Update operations
110  */
111 enum tnt_update_op_t {
112 	TNT_UOP_ADDITION = '+',
113 	TNT_UOP_SUBSTRACT = '-',
114 	TNT_UOP_AND = '&',
115 	TNT_UOP_XOR = '^',
116 	TNT_UOP_OR = '|',
117 	TNT_UOP_DELETE = '#',
118 	TNT_UOP_INSERT = '!',
119 	TNT_UOP_ASSIGN = '=',
120 	TNT_UOP_SPLICE = ':',
121 };
122 
123 /**
124  * \brief Iterator types
125  */
126 enum tnt_iterator_t {
127 	TNT_ITER_EQ = 0,
128 	TNT_ITER_REQ,
129 	TNT_ITER_ALL,
130 	TNT_ITER_LT,
131 	TNT_ITER_LE,
132 	TNT_ITER_GE,
133 	TNT_ITER_GT,
134 	TNT_ITER_BITS_ALL_SET,
135 	TNT_ITER_BITS_ANY_SET,
136 	TNT_ITER_BITS_ALL_NOT_SET,
137 	TNT_ITER_OVERLAP,
138 	TNT_ITER_NEIGHBOR,
139 };
140 
141 /**
142  * \internal
143  */
144 #define TNT_SCRAMBLE_SIZE 20
145 /**
146  * \internal
147  */
148 #define TNT_GREETING_SIZE 128
149 /**
150  * \internal
151  */
152 #define TNT_VERSION_SIZE  64
153 /**
154  * \internal
155  */
156 #define TNT_SALT_SIZE     44
157 
158 /**
159  * \brief System spaces
160  */
161 enum tnt_spaces_t {
162 	tnt_sp_space = 280,
163 	tnt_sp_index = 288,
164 	tnt_sp_func  = 296,
165 	tnt_sp_user  = 304,
166 	tnt_sp_priv  = 312,
167 	tnt_vsp_space = 281,
168 	tnt_vsp_index = 289,
169 	tnt_vsp_func  = 297,
170 	tnt_vsp_user  = 305,
171 	tnt_vsp_priv  = 313,
172 };
173 
174 /**
175  * \brief System indexes
176  */
177 enum tnt_indexes_t {
178 	tnt_vin_primary = 0,
179 	tnt_vin_owner   = 1,
180 	tnt_vin_name    = 2,
181 };
182 
183 /**
184  * \brief Error code types
185  */
186 enum tnt_errcode_t {
187 	TNT_ER_UNKNOWN = 0,
188 	TNT_ER_ILLEGAL_PARAMS = 1,
189 	TNT_ER_MEMORY_ISSUE = 2,
190 	TNT_ER_TUPLE_FOUND = 3,
191 	TNT_ER_TUPLE_NOT_FOUND = 4,
192 	TNT_ER_UNSUPPORTED = 5,
193 	TNT_ER_NONMASTER = 6,
194 	TNT_ER_READONLY = 7,
195 	TNT_ER_INJECTION = 8,
196 	TNT_ER_CREATE_SPACE = 9,
197 	TNT_ER_SPACE_EXISTS = 10,
198 	TNT_ER_DROP_SPACE = 11,
199 	TNT_ER_ALTER_SPACE = 12,
200 	TNT_ER_INDEX_TYPE = 13,
201 	TNT_ER_MODIFY_INDEX = 14,
202 	TNT_ER_LAST_DROP = 15,
203 	TNT_ER_TUPLE_FORMAT_LIMIT = 16,
204 	TNT_ER_DROP_PRIMARY_KEY = 17,
205 	TNT_ER_KEY_PART_TYPE = 18,
206 	TNT_ER_EXACT_MATCH = 19,
207 	TNT_ER_INVALID_MSGPACK = 20,
208 	TNT_ER_PROC_RET = 21,
209 	TNT_ER_TUPLE_NOT_ARRAY = 22,
210 	TNT_ER_FIELD_TYPE = 23,
211 	TNT_ER_FIELD_TYPE_MISMATCH = 24,
212 	TNT_ER_SPLICE = 25,
213 	TNT_ER_ARG_TYPE = 26,
214 	TNT_ER_TUPLE_IS_TOO_LONG = 27,
215 	TNT_ER_UNKNOWN_UPDATE_OP = 28,
216 	TNT_ER_UPDATE_FIELD = 29,
217 	TNT_ER_FIBER_STACK = 30,
218 	TNT_ER_KEY_PART_COUNT = 31,
219 	TNT_ER_PROC_LUA = 32,
220 	TNT_ER_NO_SUCH_PROC = 33,
221 	TNT_ER_NO_SUCH_TRIGGER = 34,
222 	TNT_ER_NO_SUCH_INDEX = 35,
223 	TNT_ER_NO_SUCH_SPACE = 36,
224 	TNT_ER_NO_SUCH_FIELD = 37,
225 	TNT_ER_SPACE_FIELD_COUNT = 38,
226 	TNT_ER_INDEX_FIELD_COUNT = 39,
227 	TNT_ER_WAL_IO = 40,
228 	TNT_ER_MORE_THAN_ONE_TUPLE = 41,
229 	TNT_ER_ACCESS_DENIED = 42,
230 	TNT_ER_CREATE_USER = 43,
231 	TNT_ER_DROP_USER = 44,
232 	TNT_ER_NO_SUCH_USER = 45,
233 	TNT_ER_USER_EXISTS = 46,
234 	TNT_ER_PASSWORD_MISMATCH = 47,
235 	TNT_ER_UNKNOWN_REQUEST_TYPE = 48,
236 	TNT_ER_UNKNOWN_SCHEMA_OBJECT = 49,
237 	TNT_ER_CREATE_FUNCTION = 50,
238 	TNT_ER_NO_SUCH_FUNCTION = 51,
239 	TNT_ER_FUNCTION_EXISTS = 52,
240 	TNT_ER_FUNCTION_ACCESS_DENIED = 53,
241 	TNT_ER_FUNCTION_MAX = 54,
242 	TNT_ER_SPACE_ACCESS_DENIED = 55,
243 	TNT_ER_USER_MAX = 56,
244 	TNT_ER_NO_SUCH_ENGINE = 57,
245 	TNT_ER_RELOAD_CFG = 58,
246 	TNT_ER_CFG = 59,
247 	TNT_ER_SOPHIA = 60,
248 	TNT_ER_LOCAL_SERVER_IS_NOT_ACTIVE = 61,
249 	TNT_ER_UNKNOWN_SERVER = 62,
250 	TNT_ER_CLUSTER_ID_MISMATCH = 63,
251 	TNT_ER_INVALID_UUID = 64,
252 	TNT_ER_CLUSTER_ID_IS_RO = 65,
253 	TNT_ER_RESERVED66 = 66,
254 	TNT_ER_SERVER_ID_IS_RESERVED = 67,
255 	TNT_ER_INVALID_ORDER = 68,
256 	TNT_ER_MISSING_REQUEST_FIELD = 69,
257 	TNT_ER_IDENTIFIER = 70,
258 	TNT_ER_DROP_FUNCTION = 71,
259 	TNT_ER_ITERATOR_TYPE = 72,
260 	TNT_ER_REPLICA_MAX = 73,
261 	TNT_ER_INVALID_XLOG = 74,
262 	TNT_ER_INVALID_XLOG_NAME = 75,
263 	TNT_ER_INVALID_XLOG_ORDER = 76,
264 	TNT_ER_NO_CONNECTION = 77,
265 	TNT_ER_TIMEOUT = 78,
266 	TNT_ER_ACTIVE_TRANSACTION = 79,
267 	TNT_ER_NO_ACTIVE_TRANSACTION = 80,
268 	TNT_ER_CROSS_ENGINE_TRANSACTION = 81,
269 	TNT_ER_NO_SUCH_ROLE = 82,
270 	TNT_ER_ROLE_EXISTS = 83,
271 	TNT_ER_CREATE_ROLE = 84,
272 	TNT_ER_INDEX_EXISTS = 85,
273 	TNT_ER_TUPLE_REF_OVERFLOW = 86,
274 	TNT_ER_ROLE_LOOP = 87,
275 	TNT_ER_GRANT = 88,
276 	TNT_ER_PRIV_GRANTED = 89,
277 	TNT_ER_ROLE_GRANTED = 90,
278 	TNT_ER_PRIV_NOT_GRANTED = 91,
279 	TNT_ER_ROLE_NOT_GRANTED = 92,
280 	TNT_ER_MISSING_SNAPSHOT = 93,
281 	TNT_ER_CANT_UPDATE_PRIMARY_KEY = 94,
282 	TNT_ER_UPDATE_INTEGER_OVERFLOW = 95,
283 	TNT_ER_GUEST_USER_PASSWORD = 96,
284 	TNT_ER_TRANSACTION_CONFLICT = 97,
285 	TNT_ER_UNSUPPORTED_ROLE_PRIV = 98,
286 	TNT_ER_LOAD_FUNCTION = 99,
287 	TNT_ER_FUNCTION_LANGUAGE = 100,
288 	TNT_ER_RTREE_RECT = 101,
289 	TNT_ER_PROC_C = 102,
290 	TNT_ER_UNKNOWN_RTREE_INDEX_DISTANCE_TYPE = 103,
291 	TNT_ER_PROTOCOL = 104,
292 	TNT_ER_UPSERT_UNIQUE_SECONDARY_KEY = 105,
293 	TNT_ER_WRONG_INDEX_RECORD = 106,
294 	TNT_ER_WRONG_INDEX_PARTS = 107,
295 	TNT_ER_WRONG_INDEX_OPTIONS = 108,
296 	TNT_ER_WRONG_SCHEMA_VERSION = 109,
297 	TNT_ER_SLAB_ALLOC_MAX = 110,
298 };
299 
300 #endif /* TNT_PROTO_H_INCLUDED */
301