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