1 module utils.db.mysql.binding; 2 3 public import 4 core.stdc.config; 5 6 7 enum 8 { 9 MYSQL_OPT_CONNECT_TIMEOUT, MYSQL_OPT_COMPRESS, MYSQL_OPT_NAMED_PIPE, 10 MYSQL_INIT_COMMAND, MYSQL_READ_DEFAULT_FILE, MYSQL_READ_DEFAULT_GROUP, 11 MYSQL_SET_CHARSET_DIR, MYSQL_SET_CHARSET_NAME, MYSQL_OPT_LOCAL_INFILE, 12 MYSQL_OPT_PROTOCOL, MYSQL_SHARED_MEMORY_BASE_NAME, MYSQL_OPT_READ_TIMEOUT, 13 MYSQL_OPT_WRITE_TIMEOUT, MYSQL_OPT_USE_RESULT, 14 MYSQL_OPT_USE_REMOTE_CONNECTION, MYSQL_OPT_USE_EMBEDDED_CONNECTION, 15 MYSQL_OPT_GUESS_CONNECTION, MYSQL_SET_CLIENT_IP, MYSQL_SECURE_AUTH, 16 MYSQL_REPORT_DATA_TRUNCATION, MYSQL_OPT_RECONNECT, 17 MYSQL_OPT_SSL_VERIFY_SERVER_CERT, MYSQL_PLUGIN_DIR, MYSQL_DEFAULT_AUTH, 18 MYSQL_OPT_BIND, 19 MYSQL_OPT_SSL_KEY, MYSQL_OPT_SSL_CERT, 20 MYSQL_OPT_SSL_CA, MYSQL_OPT_SSL_CAPATH, MYSQL_OPT_SSL_CIPHER, 21 MYSQL_OPT_SSL_CRL, MYSQL_OPT_SSL_CRLPATH, 22 MYSQL_OPT_CONNECT_ATTR_RESET, MYSQL_OPT_CONNECT_ATTR_ADD, 23 MYSQL_OPT_CONNECT_ATTR_DELETE, 24 MYSQL_SERVER_PUBLIC_KEY, 25 MYSQL_ENABLE_CLEARTEXT_PLUGIN, 26 MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS, 27 MYSQL_OPT_SSL_ENFORCE, 28 MYSQL_OPT_MAX_ALLOWED_PACKET, MYSQL_OPT_NET_BUFFER_LENGTH, 29 MYSQL_OPT_TLS_VERSION, 30 MYSQL_OPT_SSL_MODE 31 } 32 33 enum 34 { 35 MYSQL_STATUS_READY, MYSQL_STATUS_GET_RESULT, MYSQL_STATUS_USE_RESULT, 36 MYSQL_STATUS_STATEMENT_GET_RESULT 37 } 38 39 enum 40 { 41 MYSQL_PROTOCOL_DEFAULT, MYSQL_PROTOCOL_TCP, MYSQL_PROTOCOL_SOCKET, 42 MYSQL_PROTOCOL_PIPE, MYSQL_PROTOCOL_MEMORY 43 } 44 45 enum 46 { 47 SSL_MODE_DISABLED = 1, SSL_MODE_PREFERRED, SSL_MODE_REQUIRED, 48 SSL_MODE_VERIFY_CA, SSL_MODE_VERIFY_IDENTITY 49 } 50 51 enum 52 { 53 MYSQL_STMT_INIT_DONE = 1, 54 MYSQL_STMT_PREPARE_DONE, 55 MYSQL_STMT_EXECUTE_DONE, 56 MYSQL_STMT_FETCH_DONE 57 } 58 59 enum 60 { 61 STMT_ATTR_UPDATE_MAX_LENGTH, 62 STMT_ATTR_CURSOR_TYPE, 63 STMT_ATTR_PREFETCH_ROWS 64 } 65 66 enum 67 { 68 MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY, 69 MYSQL_TYPE_SHORT, MYSQL_TYPE_LONG, 70 MYSQL_TYPE_FLOAT, MYSQL_TYPE_DOUBLE, 71 MYSQL_TYPE_NULL, MYSQL_TYPE_TIMESTAMP, 72 MYSQL_TYPE_LONGLONG,MYSQL_TYPE_INT24, 73 MYSQL_TYPE_DATE, MYSQL_TYPE_TIME, 74 MYSQL_TYPE_DATETIME, MYSQL_TYPE_YEAR, 75 MYSQL_TYPE_NEWDATE, MYSQL_TYPE_VARCHAR, 76 MYSQL_TYPE_BIT, 77 MYSQL_TYPE_TIMESTAMP2, 78 MYSQL_TYPE_DATETIME2, 79 MYSQL_TYPE_TIME2, 80 MYSQL_TYPE_JSON = 245, 81 MYSQL_TYPE_NEWDECIMAL = 246, 82 MYSQL_TYPE_ENUM = 247, 83 MYSQL_TYPE_SET = 248, 84 MYSQL_TYPE_TINY_BLOB = 249, 85 MYSQL_TYPE_MEDIUM_BLOB = 250, 86 MYSQL_TYPE_LONG_BLOB = 251, 87 MYSQL_TYPE_BLOB = 252, 88 MYSQL_TYPE_VAR_STRING = 253, 89 MYSQL_TYPE_STRING = 254, 90 MYSQL_TYPE_GEOMETRY = 255 91 } 92 93 enum 94 { 95 MYSQL_NO_DATA = 100, 96 MYSQL_DATA_TRUNCATED 97 } 98 99 alias NET = void; 100 alias MYSQL = void; 101 alias MYSQL_ROW = char**; 102 alias MYSQL_FIELD_OFFSET = uint; 103 alias MYSQL_ROW_OFFSET = MYSQL_ROWS*; 104 105 extern(System): 106 107 struct MYSQL_FIELD 108 { 109 char* name; 110 char* org_name; 111 char* table; 112 char* org_table; 113 char* db; 114 char* catalog; 115 char* def; 116 c_ulong length; 117 c_ulong max_length; 118 uint name_length; 119 uint org_name_length; 120 uint table_length; 121 uint org_table_length; 122 uint db_length; 123 uint catalog_length; 124 uint def_length; 125 uint flags; 126 uint decimals; 127 uint charsetnr; 128 int type; 129 void* extension; 130 } 131 132 struct MYSQL_ROWS 133 { 134 MYSQL_ROWS* next; 135 MYSQL_ROW data; 136 c_ulong length; 137 } 138 139 struct USED_MEM 140 { 141 USED_MEM* next; 142 uint left; 143 uint size; 144 } 145 146 struct LIST 147 { 148 LIST* prev, next; 149 void* data; 150 } 151 152 struct MEM_ROOT 153 { 154 USED_MEM* free; 155 USED_MEM* used; 156 USED_MEM* pre_alloc; 157 size_t min_malloc; 158 size_t block_size; 159 uint block_num; 160 uint first_block_usage; 161 162 void function() error_handler; 163 164 uint m_psi_key; 165 } 166 167 struct MYSQL_DATA 168 { 169 MYSQL_ROWS* data; 170 void* embedded_info; 171 MEM_ROOT alloc; 172 ulong rows; 173 uint fields; 174 void* extension; 175 } 176 177 struct MY_CHARSET_INFO 178 { 179 uint number; 180 uint state; 181 const(char)* csname; 182 const(char)* name; 183 const(char)* comment; 184 const(char)* dir; 185 uint mbminlen; 186 uint mbmaxlen; 187 } 188 189 struct MYSQL_RES 190 { 191 ulong row_count; 192 MYSQL_FIELD* fields; 193 MYSQL_DATA* data; 194 MYSQL_ROWS* data_cursor; 195 c_ulong* lengths; 196 MYSQL* handle; 197 const(void)* methods; 198 MYSQL_ROW row; 199 MYSQL_ROW current_row; 200 MEM_ROOT field_alloc; 201 uint field_count, current_field; 202 bool eof; 203 204 bool unbuffered_fetch_cancelled; 205 void* extension; 206 } 207 208 struct MYSQL_PARAMETERS 209 { 210 c_ulong* p_max_allowed_packet; 211 c_ulong* p_net_buffer_length; 212 void* extension; 213 } 214 215 struct MYSQL_BIND 216 { 217 c_ulong* length; 218 bool* is_null; 219 void* buffer; 220 221 bool* error; 222 ubyte* row_ptr; 223 224 void function(NET* net, MYSQL_BIND* param) store_param_func; 225 void function(MYSQL_BIND*, MYSQL_FIELD*, ubyte** row) fetch_result; 226 void function(MYSQL_BIND*, MYSQL_FIELD*, ubyte** row) skip_result; 227 228 c_ulong buffer_length; 229 c_ulong offset; 230 c_ulong length_value; 231 uint param_number; 232 uint pack_length; 233 int buffer_type; 234 bool error_value; 235 bool is_unsigned; 236 bool long_data_used; 237 bool is_null_value; 238 void* extension; 239 } 240 241 struct MYSQL_STMT 242 { 243 MEM_ROOT mem_root; 244 LIST list; 245 MYSQL* mysql; 246 MYSQL_BIND* params; 247 MYSQL_BIND* bind; 248 MYSQL_FIELD* fields; 249 MYSQL_DATA result; 250 MYSQL_ROWS* data_cursor; 251 252 int function(MYSQL_STMT* stmt, ubyte** row) read_row_func; 253 254 ulong affected_rows; 255 ulong insert_id; 256 c_ulong stmt_id; 257 c_ulong flags; 258 c_ulong prefetch_rows; 259 260 uint server_status; 261 uint last_errno; 262 uint param_count; 263 uint field_count; 264 int state; 265 char[512] last_error; 266 char[5+1] sqlstate; 267 268 bool send_types_to_server; 269 bool bind_param_done; 270 ubyte bind_result_done; 271 272 bool unbuffered_fetch_cancelled; 273 bool update_max_length; 274 void* extension; 275 } 276 277 bool my_init(); 278 279 MYSQL_PARAMETERS* mysql_get_parameters(); 280 281 int mysql_server_init(int argc, char** argv, char** groups); 282 void mysql_server_end(); 283 284 bool mysql_thread_init(); 285 void mysql_thread_end(); 286 287 ulong mysql_num_rows(MYSQL_RES* res); 288 uint mysql_num_fields(MYSQL_RES* res); 289 bool mysql_eof(MYSQL_RES* res); 290 MYSQL_FIELD* mysql_fetch_field_direct(MYSQL_RES* res, uint fieldnr); 291 MYSQL_FIELD* mysql_fetch_fields(MYSQL_RES* res); 292 MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES* res); 293 MYSQL_FIELD_OFFSET mysql_field_tell(MYSQL_RES* res); 294 295 uint mysql_field_count(MYSQL* mysql); 296 ulong mysql_affected_rows(MYSQL* mysql); 297 ulong mysql_insert_id(MYSQL* mysql); 298 uint mysql_errno(MYSQL* mysql); 299 const(char)* mysql_error(MYSQL* mysql); 300 const(char)* mysql_sqlstate(MYSQL* mysql); 301 uint mysql_warning_count(MYSQL* mysql); 302 const(char)* mysql_info(MYSQL* mysql); 303 c_ulong mysql_thread_id(MYSQL* mysql); 304 const(char)* mysql_character_set_name(MYSQL* mysql); 305 int mysql_set_character_set(MYSQL* mysql, const(char)* csname); 306 307 MYSQL* mysql_init(MYSQL* mysql); 308 bool mysql_ssl_set(MYSQL* mysql, const(char)* key, const(char)* cert, const(char)* ca, const(char)* capath, const(char)* cipher); 309 310 const(char)* mysql_get_ssl_cipher(MYSQL* mysql); 311 bool mysql_change_user(MYSQL* mysql, const(char)* user, const(char)* passwd, const(char)* db); 312 313 MYSQL* mysql_real_connect(MYSQL* mysql, const(char)* host, const(char)* user, const(char)* passwd, const(char)* db, uint port, const(char)* unix_socket, c_ulong clientflag); 314 315 int mysql_select_db(MYSQL* mysql, const(char)* db); 316 int mysql_query(MYSQL* mysql, const(char)* q); 317 int mysql_send_query(MYSQL* mysql, const(char)* q, c_ulong length); 318 int mysql_real_query(MYSQL* mysql, const(char)* q, c_ulong length); 319 MYSQL_RES* mysql_store_result(MYSQL* mysql); 320 MYSQL_RES* mysql_use_result(MYSQL* mysql); 321 322 void mysql_get_character_set_info(MYSQL* mysql, MY_CHARSET_INFO* charset); 323 324 int mysql_session_track_get_first(MYSQL* mysql, int type, const(char)** data, size_t* length); 325 int mysql_session_track_get_next(MYSQL* mysql, int type, const(char)** data, size_t* length); 326 327 void mysql_set_local_infile_handler(MYSQL* mysql, int function(void**, const(char)*, void*) local_infile_init, int function(void*, char*, uint) local_infile_read, void function(void*) local_infile_end, int function(void*, char*, uint) local_infile_error, void*); 328 329 void mysql_set_local_infile_default(MYSQL* mysql); 330 331 int mysql_shutdown(MYSQL* mysql, int shutdown_level); 332 int mysql_dump_debug_info(MYSQL* mysql); 333 int mysql_refresh(MYSQL* mysql, uint refresh_options); 334 int mysql_kill(MYSQL* mysql, c_ulong pid); 335 int mysql_set_server_option(MYSQL* mysql, int option); 336 int mysql_ping(MYSQL* mysql); 337 const(char)* mysql_stat(MYSQL* mysql); 338 const(char)* mysql_get_server_info(MYSQL* mysql); 339 const(char)* mysql_get_client_info(); 340 c_ulong mysql_get_client_version(); 341 const(char)* mysql_get_host_info(MYSQL* mysql); 342 c_ulong mysql_get_server_version(MYSQL* mysql); 343 uint mysql_get_proto_info(MYSQL* mysql); 344 MYSQL_RES* mysql_list_dbs(MYSQL* mysql, const(char)* wild); 345 MYSQL_RES* mysql_list_tables(MYSQL* mysql, const(char)* wild); 346 MYSQL_RES* mysql_list_processes(MYSQL* mysql); 347 int mysql_options(MYSQL* mysql, int option, const(void)* arg); 348 int mysql_options4(MYSQL* mysql, int option, const(void)* arg1, const(void)* arg2); 349 int mysql_get_option(MYSQL* mysql, int option, const(void)* arg); 350 void mysql_free_result(MYSQL_RES* result); 351 void mysql_data_seek(MYSQL_RES* result, ulong offset); 352 MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES* result, MYSQL_ROW_OFFSET offset); 353 MYSQL_FIELD_OFFSET mysql_field_seek(MYSQL_RES* result, MYSQL_FIELD_OFFSET offset); 354 MYSQL_ROW mysql_fetch_row(MYSQL_RES* result); 355 c_ulong* mysql_fetch_lengths(MYSQL_RES* result); 356 MYSQL_FIELD* mysql_fetch_field(MYSQL_RES* result); 357 MYSQL_RES* mysql_list_fields(MYSQL* mysql, const(char)* table, const(char)* wild); 358 c_ulong mysql_escape_string(char* to, const(char)* from, c_ulong from_length); 359 c_ulong mysql_hex_string(char* to, const(char)* from, c_ulong from_length); 360 c_ulong mysql_real_escape_string(MYSQL* mysql, char* to, const(char)* from, c_ulong length); 361 c_ulong mysql_real_escape_string_quote(MYSQL* mysql, char* to, const(char)* from, c_ulong length, char quote); 362 void mysql_debug(const(char)* debug_); 363 void myodbc_remove_escape(MYSQL* mysql, char* name); 364 uint mysql_thread_safe(); 365 bool mysql_embedded(); 366 bool mysql_read_query_result(MYSQL* mysql); 367 int mysql_reset_connection(MYSQL* mysql); 368 369 MYSQL_STMT* mysql_stmt_init(MYSQL* mysql); 370 int mysql_stmt_prepare(MYSQL_STMT* stmt, const(char)* query, c_ulong length); 371 int mysql_stmt_execute(MYSQL_STMT* stmt); 372 int mysql_stmt_fetch(MYSQL_STMT* stmt); 373 int mysql_stmt_fetch_column(MYSQL_STMT* stmt, MYSQL_BIND* bind_arg, uint column, c_ulong offset); 374 int mysql_stmt_store_result(MYSQL_STMT* stmt); 375 c_ulong mysql_stmt_param_count(MYSQL_STMT* stmt); 376 bool mysql_stmt_attr_set(MYSQL_STMT* stmt, int attr_type, const(void)* attr); 377 bool mysql_stmt_attr_get(MYSQL_STMT* stmt, int attr_type, void* attr); 378 bool mysql_stmt_bind_param(MYSQL_STMT* stmt, MYSQL_BIND* bnd); 379 bool mysql_stmt_bind_result(MYSQL_STMT* stmt, MYSQL_BIND* bnd); 380 bool mysql_stmt_close(MYSQL_STMT* stmt); 381 bool mysql_stmt_reset(MYSQL_STMT* stmt); 382 bool mysql_stmt_free_result(MYSQL_STMT* stmt); 383 bool mysql_stmt_send_long_data(MYSQL_STMT* stmt, uint param_number, const(char)* data, c_ulong length); 384 MYSQL_RES* mysql_stmt_result_metadata(MYSQL_STMT* stmt); 385 MYSQL_RES* mysql_stmt_param_metadata(MYSQL_STMT* stmt); 386 uint mysql_stmt_errno(MYSQL_STMT* stmt); 387 const(char)* mysql_stmt_error(MYSQL_STMT* stmt); 388 const(char)* mysql_stmt_sqlstate(MYSQL_STMT* stmt); 389 MYSQL_ROW_OFFSET mysql_stmt_row_seek(MYSQL_STMT* stmt, MYSQL_ROW_OFFSET offset); 390 MYSQL_ROW_OFFSET mysql_stmt_row_tell(MYSQL_STMT* stmt); 391 void mysql_stmt_data_seek(MYSQL_STMT* stmt, ulong offset); 392 ulong mysql_stmt_num_rows(MYSQL_STMT* stmt); 393 ulong mysql_stmt_affected_rows(MYSQL_STMT* stmt); 394 ulong mysql_stmt_insert_id(MYSQL_STMT* stmt); 395 uint mysql_stmt_field_count(MYSQL_STMT* stmt); 396 397 bool mysql_commit(MYSQL* mysql); 398 bool mysql_rollback(MYSQL* mysql); 399 bool mysql_autocommit(MYSQL* mysql, bool auto_mode); 400 bool mysql_more_results(MYSQL* mysql); 401 int mysql_next_result(MYSQL* mysql); 402 int mysql_stmt_next_result(MYSQL_STMT* stmt); 403 void mysql_close(MYSQL* sock);