2
* Drizzle Client & Protocol Library
4
* Copyright (C) 2008 Eric Day (eday@oddments.org)
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions are
11
* * Redistributions of source code must retain the above copyright
12
* notice, this list of conditions and the following disclaimer.
14
* * Redistributions in binary form must reproduce the above
15
* copyright notice, this list of conditions and the following disclaimer
16
* in the documentation and/or other materials provided with the
19
* * The names of its contributors may not be used to endorse or
20
* promote products derived from this software without specific prior
23
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
27
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39
* @brief Defines, typedefs, enums, and macros
42
#ifndef __DRIZZLE_CONSTANTS_H
43
#define __DRIZZLE_CONSTANTS_H
50
* @addtogroup drizzle_constants Constants
51
* @ingroup drizzle_client_interface
52
* @ingroup drizzle_server_interface
57
* @todo Remove these with next major API change.
59
#define DRIZZLE_RETURN_SERVER_GONE DRIZZLE_RETURN_LOST_CONNECTION
60
#define DRIZZLE_RETURN_EOF DRIZZLE_RETURN_LOST_CONNECTION
61
#define DRIZZLE_COLUMN_TYPE_VIRTUAL 17
64
#define DRIZZLE_DEFAULT_TCP_HOST "127.0.0.1"
65
#define DRIZZLE_DEFAULT_TCP_PORT 4427
66
#define DRIZZLE_DEFAULT_TCP_PORT_MYSQL 4427
67
#define DRIZZLE_DEFAULT_UDS "/tmp/drizzle.sock"
68
#define DRIZZLE_DEFAULT_UDS_MYSQL "/tmp/mysql.sock"
69
#define DRIZZLE_DEFAULT_BACKLOG 64
70
#define DRIZZLE_MAX_ERROR_SIZE 2048
71
#define DRIZZLE_MAX_USER_SIZE 64
72
#define DRIZZLE_MAX_PASSWORD_SIZE 32
73
#define DRIZZLE_MAX_DB_SIZE 64
74
#define DRIZZLE_MAX_INFO_SIZE 2048
75
#define DRIZZLE_MAX_SQLSTATE_SIZE 5
76
#define DRIZZLE_MAX_CATALOG_SIZE 128
77
#define DRIZZLE_MAX_TABLE_SIZE 128
78
#define DRIZZLE_MAX_COLUMN_NAME_SIZE 2048
79
#define DRIZZLE_MAX_DEFAULT_VALUE_SIZE 2048
80
#define DRIZZLE_MAX_PACKET_SIZE UINT32_MAX
81
#define DRIZZLE_MAX_BUFFER_SIZE 32768
82
#define DRIZZLE_BUFFER_COPY_THRESHOLD 8192
83
#define DRIZZLE_MAX_SERVER_VERSION_SIZE 32
84
#define DRIZZLE_MAX_SERVER_EXTRA_SIZE 32
85
#define DRIZZLE_MAX_SCRAMBLE_SIZE 20
86
#define DRIZZLE_STATE_STACK_SIZE 8
87
#define DRIZZLE_ROW_GROW_SIZE 8192
88
#define DRIZZLE_DEFAULT_SOCKET_TIMEOUT 10
89
#define DRIZZLE_DEFAULT_SOCKET_SEND_SIZE 32768
90
#define DRIZZLE_DEFAULT_SOCKET_RECV_SIZE 32768
91
#define DRIZZLE_MYSQL_PASSWORD_HASH 41
99
DRIZZLE_RETURN_IO_WAIT,
100
DRIZZLE_RETURN_PAUSE,
101
DRIZZLE_RETURN_ROW_BREAK,
102
DRIZZLE_RETURN_MEMORY,
103
DRIZZLE_RETURN_ERRNO,
104
DRIZZLE_RETURN_INTERNAL_ERROR,
105
DRIZZLE_RETURN_GETADDRINFO,
106
DRIZZLE_RETURN_NOT_READY,
107
DRIZZLE_RETURN_BAD_PACKET_NUMBER,
108
DRIZZLE_RETURN_BAD_HANDSHAKE_PACKET,
109
DRIZZLE_RETURN_BAD_PACKET,
110
DRIZZLE_RETURN_PROTOCOL_NOT_SUPPORTED,
111
DRIZZLE_RETURN_UNEXPECTED_DATA,
112
DRIZZLE_RETURN_NO_SCRAMBLE,
113
DRIZZLE_RETURN_AUTH_FAILED,
114
DRIZZLE_RETURN_NULL_SIZE,
115
DRIZZLE_RETURN_ERROR_CODE,
116
DRIZZLE_RETURN_TOO_MANY_COLUMNS,
117
DRIZZLE_RETURN_ROW_END,
118
DRIZZLE_RETURN_LOST_CONNECTION,
119
DRIZZLE_RETURN_COULD_NOT_CONNECT,
120
DRIZZLE_RETURN_NO_ACTIVE_CONNECTIONS,
121
DRIZZLE_RETURN_HANDSHAKE_FAILED,
122
DRIZZLE_RETURN_TIMEOUT,
123
DRIZZLE_RETURN_MAX /* Always add new codes to the end before this one. */
131
DRIZZLE_VERBOSE_NEVER,
132
DRIZZLE_VERBOSE_FATAL,
133
DRIZZLE_VERBOSE_ERROR,
134
DRIZZLE_VERBOSE_INFO,
135
DRIZZLE_VERBOSE_DEBUG,
136
DRIZZLE_VERBOSE_CRAZY,
144
* Options for drizzle_st.
149
DRIZZLE_ALLOCATED= (1 << 0),
150
DRIZZLE_NON_BLOCKING= (1 << 1),
151
DRIZZLE_FREE_OBJECTS= (1 << 2),
152
DRIZZLE_ASSERT_DANGLING= (1 << 3)
156
* @ingroup drizzle_con
157
* Options for drizzle_con_st.
162
DRIZZLE_CON_ALLOCATED= (1 << 0),
163
DRIZZLE_CON_MYSQL= (1 << 1),
164
DRIZZLE_CON_RAW_PACKET= (1 << 2),
165
DRIZZLE_CON_RAW_SCRAMBLE= (1 << 3),
166
DRIZZLE_CON_READY= (1 << 4),
167
DRIZZLE_CON_NO_RESULT_READ= (1 << 5),
168
DRIZZLE_CON_IO_READY= (1 << 6),
169
DRIZZLE_CON_LISTEN= (1 << 7),
170
DRIZZLE_CON_EXPERIMENTAL= (1 << 8),
171
DRIZZLE_CON_FOUND_ROWS= (1 << 9),
172
DRIZZLE_CON_ADMIN= (1 << 10)
173
} drizzle_con_options_t;
176
* @ingroup drizzle_con
177
* Socket types for drizzle_con_st.
181
DRIZZLE_CON_SOCKET_TCP= 0,
182
DRIZZLE_CON_SOCKET_UDS= (1 << 0)
183
} drizzle_con_socket_t;
186
* @ingroup drizzle_con
187
* Status flags for drizle_con_st.
191
DRIZZLE_CON_STATUS_NONE= 0,
192
DRIZZLE_CON_STATUS_IN_TRANS= (1 << 0),
193
DRIZZLE_CON_STATUS_AUTOCOMMIT= (1 << 1),
194
DRIZZLE_CON_STATUS_MORE_RESULTS_EXISTS= (1 << 3),
195
DRIZZLE_CON_STATUS_QUERY_NO_GOOD_INDEX_USED= (1 << 4),
196
DRIZZLE_CON_STATUS_QUERY_NO_INDEX_USED= (1 << 5),
197
DRIZZLE_CON_STATUS_CURSOR_EXISTS= (1 << 6),
198
DRIZZLE_CON_STATUS_LAST_ROW_SENT= (1 << 7),
199
DRIZZLE_CON_STATUS_DB_DROPPED= (1 << 8),
200
DRIZZLE_CON_STATUS_NO_BACKSLASH_ESCAPES= (1 << 9),
201
DRIZZLE_CON_STATUS_QUERY_WAS_SLOW= (1 << 10)
202
} drizzle_con_status_t;
205
* @ingroup drizzle_con
206
* Capabilities for drizzle_con_st.
210
DRIZZLE_CAPABILITIES_NONE= 0,
211
DRIZZLE_CAPABILITIES_LONG_PASSWORD= (1 << 0),
212
DRIZZLE_CAPABILITIES_FOUND_ROWS= (1 << 1),
213
DRIZZLE_CAPABILITIES_LONG_FLAG= (1 << 2),
214
DRIZZLE_CAPABILITIES_CONNECT_WITH_DB= (1 << 3),
215
DRIZZLE_CAPABILITIES_NO_SCHEMA= (1 << 4),
216
DRIZZLE_CAPABILITIES_COMPRESS= (1 << 5),
217
DRIZZLE_CAPABILITIES_ODBC= (1 << 6),
218
DRIZZLE_CAPABILITIES_LOCAL_FILES= (1 << 7),
219
DRIZZLE_CAPABILITIES_IGNORE_SPACE= (1 << 8),
220
DRIZZLE_CAPABILITIES_PROTOCOL_41= (1 << 9),
221
DRIZZLE_CAPABILITIES_INTERACTIVE= (1 << 10),
222
DRIZZLE_CAPABILITIES_SSL= (1 << 11),
223
DRIZZLE_CAPABILITIES_IGNORE_SIGPIPE= (1 << 12),
224
DRIZZLE_CAPABILITIES_TRANSACTIONS= (1 << 13),
225
DRIZZLE_CAPABILITIES_RESERVED= (1 << 14),
226
DRIZZLE_CAPABILITIES_SECURE_CONNECTION= (1 << 15),
227
DRIZZLE_CAPABILITIES_MULTI_STATEMENTS= (1 << 16),
228
DRIZZLE_CAPABILITIES_MULTI_RESULTS= (1 << 17),
229
DRIZZLE_CAPABILITIES_ADMIN= (1 << 25),
230
DRIZZLE_CAPABILITIES_CLIENT= (DRIZZLE_CAPABILITIES_LONG_PASSWORD |
231
DRIZZLE_CAPABILITIES_FOUND_ROWS |
232
DRIZZLE_CAPABILITIES_LONG_FLAG |
233
DRIZZLE_CAPABILITIES_CONNECT_WITH_DB |
234
DRIZZLE_CAPABILITIES_TRANSACTIONS |
235
DRIZZLE_CAPABILITIES_PROTOCOL_41 |
236
DRIZZLE_CAPABILITIES_SECURE_CONNECTION |
237
DRIZZLE_CAPABILITIES_ADMIN)
238
} drizzle_capabilities_t;
241
* @ingroup drizzle_command
242
* Commands for drizzle_command functions.
246
DRIZZLE_COMMAND_SLEEP, /* Not used currently. */
247
DRIZZLE_COMMAND_QUIT,
248
DRIZZLE_COMMAND_INIT_DB,
249
DRIZZLE_COMMAND_QUERY,
250
DRIZZLE_COMMAND_FIELD_LIST, /* Deprecated. */
251
DRIZZLE_COMMAND_CREATE_DB, /* Deprecated. */
252
DRIZZLE_COMMAND_DROP_DB, /* Deprecated. */
253
DRIZZLE_COMMAND_REFRESH,
254
DRIZZLE_COMMAND_SHUTDOWN,
255
DRIZZLE_COMMAND_STATISTICS,
256
DRIZZLE_COMMAND_PROCESS_INFO, /* Deprecated. */
257
DRIZZLE_COMMAND_CONNECT, /* Not used currently. */
258
DRIZZLE_COMMAND_PROCESS_KILL, /* Deprecated. */
259
DRIZZLE_COMMAND_DEBUG,
260
DRIZZLE_COMMAND_PING,
261
DRIZZLE_COMMAND_TIME, /* Not used currently. */
262
DRIZZLE_COMMAND_DELAYED_INSERT, /* Not used currently. */
263
DRIZZLE_COMMAND_CHANGE_USER,
264
DRIZZLE_COMMAND_BINLOG_DUMP, /* Not used currently. */
265
DRIZZLE_COMMAND_TABLE_DUMP, /* Not used currently. */
266
DRIZZLE_COMMAND_CONNECT_OUT, /* Not used currently. */
267
DRIZZLE_COMMAND_REGISTER_SLAVE, /* Not used currently. */
268
DRIZZLE_COMMAND_STMT_PREPARE, /* Not used currently. */
269
DRIZZLE_COMMAND_STMT_EXECUTE, /* Not used currently. */
270
DRIZZLE_COMMAND_STMT_SEND_LONG_DATA, /* Not used currently. */
271
DRIZZLE_COMMAND_STMT_CLOSE, /* Not used currently. */
272
DRIZZLE_COMMAND_STMT_RESET, /* Not used currently. */
273
DRIZZLE_COMMAND_SET_OPTION, /* Not used currently. */
274
DRIZZLE_COMMAND_STMT_FETCH, /* Not used currently. */
275
DRIZZLE_COMMAND_DAEMON, /* Not used currently. */
276
DRIZZLE_COMMAND_END /* Not used currently. */
280
* @ingroup drizzle_command
281
* Commands for the Drizzle protocol functions.
285
DRIZZLE_COMMAND_DRIZZLE_SLEEP,
286
DRIZZLE_COMMAND_DRIZZLE_QUIT,
287
DRIZZLE_COMMAND_DRIZZLE_INIT_DB,
288
DRIZZLE_COMMAND_DRIZZLE_QUERY,
289
DRIZZLE_COMMAND_DRIZZLE_SHUTDOWN,
290
DRIZZLE_COMMAND_DRIZZLE_CONNECT,
291
DRIZZLE_COMMAND_DRIZZLE_PING,
292
DRIZZLE_COMMAND_DRIZZLE_END
293
} drizzle_command_drizzle_t;
296
* @ingroup drizzle_query
297
* Options for drizzle_query_st.
302
DRIZZLE_QUERY_ALLOCATED= (1 << 0)
303
} drizzle_query_options_t;
306
* @ingroup drizzle_query
307
* States for drizle_query_st.
311
DRIZZLE_QUERY_STATE_INIT,
312
DRIZZLE_QUERY_STATE_QUERY,
313
DRIZZLE_QUERY_STATE_RESULT,
314
DRIZZLE_QUERY_STATE_DONE
315
} drizzle_query_state_t;
318
* @ingroup drizzle_result
319
* Options for drizzle_result_st.
323
DRIZZLE_RESULT_NONE= 0,
324
DRIZZLE_RESULT_ALLOCATED= (1 << 0),
325
DRIZZLE_RESULT_SKIP_COLUMN= (1 << 1),
326
DRIZZLE_RESULT_BUFFER_COLUMN= (1 << 2),
327
DRIZZLE_RESULT_BUFFER_ROW= (1 << 3),
328
DRIZZLE_RESULT_EOF_PACKET= (1 << 4),
329
DRIZZLE_RESULT_ROW_BREAK= (1 << 5)
330
} drizzle_result_options_t;
333
* @ingroup drizzle_column
334
* Options for drizzle_column_st.
338
DRIZZLE_COLUMN_ALLOCATED= (1 << 0)
339
} drizzle_column_options_t;
342
* @ingroup drizzle_column
343
* Types for drizzle_column_st.
347
DRIZZLE_COLUMN_TYPE_DECIMAL,
348
DRIZZLE_COLUMN_TYPE_TINY,
349
DRIZZLE_COLUMN_TYPE_SHORT,
350
DRIZZLE_COLUMN_TYPE_LONG,
351
DRIZZLE_COLUMN_TYPE_FLOAT,
352
DRIZZLE_COLUMN_TYPE_DOUBLE,
353
DRIZZLE_COLUMN_TYPE_NULL,
354
DRIZZLE_COLUMN_TYPE_TIMESTAMP,
355
DRIZZLE_COLUMN_TYPE_LONGLONG,
356
DRIZZLE_COLUMN_TYPE_INT24,
357
DRIZZLE_COLUMN_TYPE_DATE,
358
DRIZZLE_COLUMN_TYPE_TIME,
359
DRIZZLE_COLUMN_TYPE_DATETIME,
360
DRIZZLE_COLUMN_TYPE_YEAR,
361
DRIZZLE_COLUMN_TYPE_NEWDATE,
362
DRIZZLE_COLUMN_TYPE_VARCHAR,
363
DRIZZLE_COLUMN_TYPE_BIT,
364
DRIZZLE_COLUMN_TYPE_NEWDECIMAL= 246,
365
DRIZZLE_COLUMN_TYPE_ENUM= 247,
366
DRIZZLE_COLUMN_TYPE_SET= 248,
367
DRIZZLE_COLUMN_TYPE_TINY_BLOB= 249,
368
DRIZZLE_COLUMN_TYPE_MEDIUM_BLOB= 250,
369
DRIZZLE_COLUMN_TYPE_LONG_BLOB= 251,
370
DRIZZLE_COLUMN_TYPE_BLOB= 252,
371
DRIZZLE_COLUMN_TYPE_VAR_STRING= 253,
372
DRIZZLE_COLUMN_TYPE_STRING= 254,
373
DRIZZLE_COLUMN_TYPE_GEOMETRY= 255
374
} drizzle_column_type_t;
377
* @ingroup drizzle_column
378
* Types for drizzle_column_st for Drizzle.
382
DRIZZLE_COLUMN_TYPE_DRIZZLE_TINY,
383
DRIZZLE_COLUMN_TYPE_DRIZZLE_LONG,
384
DRIZZLE_COLUMN_TYPE_DRIZZLE_DOUBLE,
385
DRIZZLE_COLUMN_TYPE_DRIZZLE_NULL,
386
DRIZZLE_COLUMN_TYPE_DRIZZLE_TIMESTAMP,
387
DRIZZLE_COLUMN_TYPE_DRIZZLE_LONGLONG,
388
DRIZZLE_COLUMN_TYPE_DRIZZLE_DATETIME,
389
DRIZZLE_COLUMN_TYPE_DRIZZLE_DATE,
390
DRIZZLE_COLUMN_TYPE_DRIZZLE_VARCHAR,
391
DRIZZLE_COLUMN_TYPE_DRIZZLE_NEWDECIMAL,
392
DRIZZLE_COLUMN_TYPE_DRIZZLE_ENUM,
393
DRIZZLE_COLUMN_TYPE_DRIZZLE_BLOB,
394
DRIZZLE_COLUMN_TYPE_DRIZZLE_MAX=DRIZZLE_COLUMN_TYPE_DRIZZLE_BLOB
395
} drizzle_column_type_drizzle_t;
398
* @ingroup drizzle_column
399
* Flags for drizzle_column_st.
403
DRIZZLE_COLUMN_FLAGS_NONE= 0,
404
DRIZZLE_COLUMN_FLAGS_NOT_NULL= (1 << 0),
405
DRIZZLE_COLUMN_FLAGS_PRI_KEY= (1 << 1),
406
DRIZZLE_COLUMN_FLAGS_UNIQUE_KEY= (1 << 2),
407
DRIZZLE_COLUMN_FLAGS_MULTIPLE_KEY= (1 << 3),
408
DRIZZLE_COLUMN_FLAGS_BLOB= (1 << 4),
409
DRIZZLE_COLUMN_FLAGS_UNSIGNED= (1 << 5),
410
DRIZZLE_COLUMN_FLAGS_ZEROFILL= (1 << 6),
411
DRIZZLE_COLUMN_FLAGS_BINARY= (1 << 7),
412
DRIZZLE_COLUMN_FLAGS_ENUM= (1 << 8),
413
DRIZZLE_COLUMN_FLAGS_AUTO_INCREMENT= (1 << 9),
414
DRIZZLE_COLUMN_FLAGS_TIMESTAMP= (1 << 10),
415
DRIZZLE_COLUMN_FLAGS_SET= (1 << 11),
416
DRIZZLE_COLUMN_FLAGS_NO_DEFAULT_VALUE= (1 << 12),
417
DRIZZLE_COLUMN_FLAGS_ON_UPDATE_NOW= (1 << 13),
418
DRIZZLE_COLUMN_FLAGS_PART_KEY= (1 << 14),
419
DRIZZLE_COLUMN_FLAGS_NUM= (1 << 15),
420
DRIZZLE_COLUMN_FLAGS_GROUP= (1 << 15), /* NUM & GROUP the same. */
421
DRIZZLE_COLUMN_FLAGS_UNIQUE= (1 << 16),
422
DRIZZLE_COLUMN_FLAGS_BINCMP= (1 << 17),
423
DRIZZLE_COLUMN_FLAGS_GET_FIXED_FIELDS= (1 << 18),
424
DRIZZLE_COLUMN_FLAGS_IN_PART_FUNC= (1 << 19),
425
DRIZZLE_COLUMN_FLAGS_IN_ADD_INDEX= (1 << 20),
426
DRIZZLE_COLUMN_FLAGS_RENAMED= (1 << 21)
427
} drizzle_column_flags_t;
430
* @addtogroup drizzle_types Types
431
* @ingroup drizzle_client_interface
432
* @ingroup drizzle_server_interface
437
typedef struct drizzle_st drizzle_st;
438
typedef struct drizzle_con_tcp_st drizzle_con_tcp_st;
439
typedef struct drizzle_con_uds_st drizzle_con_uds_st;
440
typedef struct drizzle_con_st drizzle_con_st;
441
typedef struct drizzle_query_st drizzle_query_st;
442
typedef struct drizzle_result_st drizzle_result_st;
443
typedef struct drizzle_column_st drizzle_column_st;
444
typedef char *drizzle_field_t;
445
typedef drizzle_field_t *drizzle_row_t;
446
typedef uint8_t drizzle_charset_t;
448
/* Function types. */
449
typedef void (drizzle_context_free_fn)(drizzle_st *drizzle,
451
typedef void (drizzle_log_fn)(const char *line, drizzle_verbose_t verbose,
453
typedef drizzle_return_t (drizzle_state_fn)(drizzle_con_st *con);
454
typedef void (drizzle_con_context_free_fn)(drizzle_con_st *con,
456
typedef void (drizzle_query_context_free_fn)(drizzle_query_st *query,
459
* Custom function to register or deregister interest in file descriptor
460
* events. See drizzle_set_event_watch_fn().
462
* @param[in] con Connection that has changed the events it is interested in.
463
* Use drizzle_con_fd() to get the file descriptor.
464
* @param[in] events A bit mask of POLLIN | POLLOUT, specifying if the
465
* connection is waiting for read or write events.
466
* @param[in] context Application context pointer registered with
467
* drizzle_set_event_watch_fn().
468
* @return DRIZZLE_RETURN_OK if successful.
470
typedef drizzle_return_t (drizzle_event_watch_fn)(drizzle_con_st *con,
477
* @addtogroup drizzle_macros Macros
478
* @ingroup drizzle_client_interface
479
* @ingroup drizzle_server_interface
483
/* Protocol unpacking macros. */
484
#define drizzle_get_byte2(__buffer) \
485
(uint16_t)((__buffer)[0] | \
486
((__buffer)[1] << 8))
487
#define drizzle_get_byte3(__buffer) \
488
(uint32_t)((__buffer)[0] | \
489
((__buffer)[1] << 8) | \
490
((__buffer)[2] << 16))
491
#define drizzle_get_byte4(__buffer) \
492
(uint32_t)((__buffer)[0] | \
493
((__buffer)[1] << 8) | \
494
((__buffer)[2] << 16) | \
495
((__buffer)[3] << 24))
496
#define drizzle_get_byte8(__buffer) \
497
((uint64_t)(__buffer)[0] | \
498
((uint64_t)(__buffer)[1] << 8) | \
499
((uint64_t)(__buffer)[2] << 16) | \
500
((uint64_t)(__buffer)[3] << 24) | \
501
((uint64_t)(__buffer)[4] << 32) | \
502
((uint64_t)(__buffer)[5] << 40) | \
503
((uint64_t)(__buffer)[6] << 48) | \
504
((uint64_t)(__buffer)[7] << 56))
506
/* Protocol packing macros. */
507
#define drizzle_set_byte2(__buffer, __int) do { \
508
(__buffer)[0]= (uint8_t)((__int) & 0xFF); \
509
(__buffer)[1]= (uint8_t)(((__int) >> 8) & 0xFF); } while (0)
510
#define drizzle_set_byte3(__buffer, __int) do { \
511
(__buffer)[0]= (uint8_t)((__int) & 0xFF); \
512
(__buffer)[1]= (uint8_t)(((__int) >> 8) & 0xFF); \
513
(__buffer)[2]= (uint8_t)(((__int) >> 16) & 0xFF); } while (0)
514
#define drizzle_set_byte4(__buffer, __int) do { \
515
(__buffer)[0]= (uint8_t)((__int) & 0xFF); \
516
(__buffer)[1]= (uint8_t)(((__int) >> 8) & 0xFF); \
517
(__buffer)[2]= (uint8_t)(((__int) >> 16) & 0xFF); \
518
(__buffer)[3]= (uint8_t)(((__int) >> 24) & 0xFF); } while (0)
519
#define drizzle_set_byte8(__buffer, __int) do { \
520
(__buffer)[0]= (uint8_t)((__int) & 0xFF); \
521
(__buffer)[1]= (uint8_t)(((__int) >> 8) & 0xFF); \
522
(__buffer)[2]= (uint8_t)(((__int) >> 16) & 0xFF); \
523
(__buffer)[3]= (uint8_t)(((__int) >> 24) & 0xFF); \
524
(__buffer)[4]= (uint8_t)(((__int) >> 32) & 0xFF); \
525
(__buffer)[5]= (uint8_t)(((__int) >> 40) & 0xFF); \
526
(__buffer)[6]= (uint8_t)(((__int) >> 48) & 0xFF); \
527
(__buffer)[7]= (uint8_t)(((__int) >> 56) & 0xFF); } while (0)
529
/* Multi-byte character macros. */
530
#define drizzle_mb_char(__c) (((__c) & 0x80) != 0)
531
#define drizzle_mb_length(__c) \
532
((uint32_t)(__c) <= 0x7f ? 1 : \
533
((uint32_t)(__c) <= 0x7ff ? 2 : \
534
((uint32_t)(__c) <= 0xd7ff ? 3 : \
535
((uint32_t)(__c) <= 0xdfff || (uint32_t)(__c) > 0x10ffff ? 0 : \
536
((uint32_t)(__c) <= 0xffff ? 3 : 4)))))
544
#endif /* __DRIZZLE_CONSTANTS_H */