1
/* - mode: c; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
* vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
4
* Copyright (C) 2008 Sun Microsystems, Inc.
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; version 2 of the License.
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
15
* You should have received a copy of the GNU General Public License
16
* along with this program; if not, write to the Free Software
17
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
1
/* Copyright (C) 2000-2003 MySQL AB
3
This program is free software; you can redistribute it and/or modify
4
it under the terms of the GNU General Public License as published by
5
the Free Software Foundation; version 2 of the License.
7
This program is distributed in the hope that it will be useful,
8
but WITHOUT ANY WARRANTY; without even the implied warranty of
9
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10
GNU General Public License for more details.
12
You should have received a copy of the GNU General Public License
13
along with this program; if not, write to the Free Software
14
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
21
This file defines the client API to DRIZZLE and also the ABI of the
22
dynamically linked libdrizzle.
17
This file defines the client API to MySQL and also the ABI of the
18
dynamically linked libmysqlclient.
24
In case the file is changed so the ABI is broken, you must also
25
update the SHARED_LIB_MAJOR_VERSION in configure.ac.
20
The ABI should never be changed in a released product of MySQL
21
thus you need to take great care when changing the file. In case
22
the file is changed so the ABI is broken, you must also
23
update the SHAREDLIB_MAJOR_VERSION in configure.in .
29
#ifndef _libdrizzle_libdrizzle_h
30
#define _libdrizzle_libdrizzle_h
32
#include <libdrizzle/drizzle_com.h>
34
#define CLIENT_NET_READ_TIMEOUT 365*24*3600 /* Timeout on read */
35
#define CLIENT_NET_WRITE_TIMEOUT 365*24*3600 /* Timeout on write */
38
#include <libdrizzle/drizzle_field.h>
39
#include <libdrizzle/drizzle_rows.h>
40
#include <libdrizzle/drizzle_data.h>
41
#include <libdrizzle/drizzle_options.h>
43
#include <libdrizzle/drizzle.h>
44
#include <libdrizzle/drizzle_parameters.h>
45
#include <libdrizzle/drizzle_methods.h>
51
const char * drizzle_get_client_info(void);
52
uint32_t drizzle_get_client_version(void);
53
unsigned int drizzle_get_default_port(void);
54
uint32_t drizzle_escape_string(char *to,const char *from,
55
uint32_t from_length);
56
uint32_t drizzle_hex_string(char *to,const char *from,
57
uint32_t from_length);
34
#ifndef _global_h /* If not standard header */
35
#include <sys/types.h>
37
#include <winsock2.h> /* For windows */
42
#ifndef my_socket_defined
43
typedef int my_socket;
44
#endif /* my_socket_defined */
45
#endif /* _global_h */
47
#include "drizzle_version.h"
48
#include "drizzle_com.h"
49
#include "drizzle_time.h"
51
#include "my_list.h" /* for LISTs used in 'MYSQL' */
53
extern unsigned int mysql_port;
54
extern char *mysql_unix_port;
56
#define CLIENT_NET_READ_TIMEOUT 365*24*3600 /* Timeout on read */
57
#define CLIENT_NET_WRITE_TIMEOUT 365*24*3600 /* Timeout on write */
59
#define IS_PRI_KEY(n) ((n) & PRI_KEY_FLAG)
60
#define IS_NOT_NULL(n) ((n) & NOT_NULL_FLAG)
61
#define IS_BLOB(n) ((n) & BLOB_FLAG)
62
#define IS_NUM(t) ((t) <= MYSQL_TYPE_LONGLONG || (t) == MYSQL_TYPE_YEAR || (t) == MYSQL_TYPE_NEWDECIMAL)
63
#define IS_NUM_FIELD(f) ((f)->flags & NUM_FLAG)
64
#define INTERNAL_NUM_FIELD(f) (((f)->type <= MYSQL_TYPE_LONGLONG && ((f)->type != MYSQL_TYPE_TIMESTAMP || (f)->length == 14 || (f)->length == 8)) || (f)->type == MYSQL_TYPE_YEAR)
65
#define IS_LONGDATA(t) ((t) >= MYSQL_TYPE_TINY_BLOB && (t) <= MYSQL_TYPE_STRING)
68
typedef struct st_mysql_field {
69
char *name; /* Name of column */
70
char *org_name; /* Original column name, if an alias */
71
char *table; /* Table of column if column was a field */
72
char *org_table; /* Org table name, if table was an alias */
73
char *db; /* Database for table */
74
char *catalog; /* Catalog for table */
75
char *def; /* Default value (set by mysql_list_fields) */
76
unsigned long length; /* Width of column (create length) */
77
unsigned long max_length; /* Max width for selected set */
78
unsigned int name_length;
79
unsigned int org_name_length;
80
unsigned int table_length;
81
unsigned int org_table_length;
82
unsigned int db_length;
83
unsigned int catalog_length;
84
unsigned int def_length;
85
unsigned int flags; /* Div flags */
86
unsigned int decimals; /* Number of decimals in field */
87
unsigned int charsetnr; /* Character set */
88
enum enum_field_types type; /* Type of field. See mysql_com.h for types */
92
typedef char **MYSQL_ROW; /* return data as array of strings */
93
typedef unsigned int MYSQL_FIELD_OFFSET; /* offset to current field */
96
#if defined(NO_CLIENT_LONG_LONG)
97
typedef unsigned long my_ulonglong;
99
typedef unsigned long long my_ulonglong;
105
#define MYSQL_COUNT_ERROR (~(my_ulonglong) 0)
107
/* backward compatibility define - to be removed eventually */
108
#define ER_WARN_DATA_TRUNCATED WARN_DATA_TRUNCATED
110
typedef struct st_mysql_rows {
111
struct st_mysql_rows *next; /* list of rows */
113
unsigned long length;
116
typedef MYSQL_ROWS *MYSQL_ROW_OFFSET; /* offset to current row */
118
#include "my_alloc.h"
120
typedef struct embedded_query_result EMBEDDED_QUERY_RESULT;
121
typedef struct st_mysql_data {
123
struct embedded_query_result *embedded_info;
127
/* extra info for embedded library */
133
MYSQL_OPT_CONNECT_TIMEOUT, MYSQL_OPT_COMPRESS, MYSQL_OPT_NAMED_PIPE,
134
MYSQL_INIT_COMMAND, MYSQL_READ_DEFAULT_FILE, MYSQL_READ_DEFAULT_GROUP,
135
MYSQL_SET_CHARSET_DIR, MYSQL_SET_CHARSET_NAME, MYSQL_OPT_LOCAL_INFILE,
136
MYSQL_OPT_PROTOCOL, MYSQL_SHARED_MEMORY_BASE_NAME, MYSQL_OPT_READ_TIMEOUT,
137
MYSQL_OPT_WRITE_TIMEOUT, MYSQL_OPT_USE_RESULT,
138
MYSQL_OPT_USE_REMOTE_CONNECTION, MYSQL_OPT_USE_EMBEDDED_CONNECTION,
139
MYSQL_OPT_GUESS_CONNECTION, MYSQL_SET_CLIENT_IP, MYSQL_SECURE_AUTH,
140
MYSQL_REPORT_DATA_TRUNCATION, MYSQL_OPT_RECONNECT,
141
MYSQL_OPT_SSL_VERIFY_SERVER_CERT
144
struct st_mysql_options {
145
unsigned int connect_timeout, read_timeout, write_timeout;
146
unsigned int port, protocol;
147
unsigned long client_flag;
148
char *host,*user,*password,*unix_socket,*db;
149
struct st_dynamic_array *init_commands;
150
char *my_cnf_file,*my_cnf_group, *charset_dir, *charset_name;
151
char *ssl_key; /* PEM key file */
152
char *ssl_cert; /* PEM cert file */
153
char *ssl_ca; /* PEM CA file */
154
char *ssl_capath; /* PEM directory of CA-s? */
155
char *ssl_cipher; /* cipher to use */
156
char *shared_memory_base_name;
157
unsigned long max_allowed_packet;
158
my_bool use_ssl; /* if to use SSL or not */
159
my_bool compress,named_pipe;
164
enum mysql_option methods_to_use;
166
/* Refuse client connecting to server if it uses old (pre-4.1.1) protocol */
168
/* 0 - never report, 1 - always report (default) */
169
my_bool report_data_truncation;
171
/* function pointers for local infile support */
172
int (*local_infile_init)(void **, const char *, void *);
173
int (*local_infile_read)(void *, char *, unsigned int);
174
void (*local_infile_end)(void *);
175
int (*local_infile_error)(void *, char *, unsigned int);
176
void *local_infile_userdata;
182
MYSQL_STATUS_READY,MYSQL_STATUS_GET_RESULT,MYSQL_STATUS_USE_RESULT
185
enum mysql_protocol_type
187
MYSQL_PROTOCOL_DEFAULT, MYSQL_PROTOCOL_TCP, MYSQL_PROTOCOL_SOCKET,
188
MYSQL_PROTOCOL_PIPE, MYSQL_PROTOCOL_MEMORY
191
typedef struct character_set
193
unsigned int number; /* character set number */
194
unsigned int state; /* character set state */
195
const char *csname; /* collation name */
196
const char *name; /* character set name */
197
const char *comment; /* comment */
198
const char *dir; /* character set directory */
199
unsigned int mbminlen; /* min. length for multibyte strings */
200
unsigned int mbmaxlen; /* max. length for multibyte strings */
203
struct st_mysql_methods;
204
struct st_mysql_stmt;
206
typedef struct st_mysql
208
NET net; /* Communication parameters */
209
unsigned char *connector_fd; /* ConnectorFd for SSL */
210
char *host,*user,*passwd,*unix_socket,*server_version,*host_info;
212
struct charset_info_st *charset;
214
MEM_ROOT field_alloc;
215
my_ulonglong affected_rows;
216
my_ulonglong insert_id; /* id if insert on table with NEXTNR */
217
my_ulonglong extra_info; /* Not used */
218
unsigned long thread_id; /* Id for connection in server */
219
unsigned long packet_length;
221
unsigned long client_flag,server_capabilities;
222
unsigned int protocol_version;
223
unsigned int field_count;
224
unsigned int server_status;
225
unsigned int server_language;
226
unsigned int warning_count;
227
struct st_mysql_options options;
228
enum mysql_status status;
229
my_bool free_me; /* If free in mysql_close */
230
my_bool reconnect; /* set to 1 if automatic reconnect */
232
/* session-wide random string */
233
char scramble[SCRAMBLE_LENGTH+1];
235
void *unused2, *unused3, *unused4, *unused5;
237
LIST *stmts; /* list of all statements */
238
const struct st_mysql_methods *methods;
241
Points to boolean flag in MYSQL_RES or MYSQL_STMT. We set this flag
242
from mysql_stmt_close if close had to cancel result set of this object.
244
my_bool *unbuffered_fetch_owner;
245
/* needed for embedded server - no net buffer to store the 'info' */
251
typedef struct st_mysql_res {
252
my_ulonglong row_count;
255
MYSQL_ROWS *data_cursor;
256
unsigned long *lengths; /* column lengths of current row */
257
MYSQL *handle; /* for unbuffered reads */
258
const struct st_mysql_methods *methods;
259
MYSQL_ROW row; /* If unbuffered read */
260
MYSQL_ROW current_row; /* buffer to current row */
261
MEM_ROOT field_alloc;
262
unsigned int field_count, current_field;
263
my_bool eof; /* Used by mysql_fetch_row */
264
/* mysql_stmt_close() had to cancel this result */
265
my_bool unbuffered_fetch_cancelled;
270
#if !defined(MYSQL_SERVER) && !defined(MYSQL_CLIENT)
275
typedef struct st_mysql_parameters
277
unsigned long *p_max_allowed_packet;
278
unsigned long *p_net_buffer_length;
282
#if !defined(MYSQL_SERVER)
283
#define max_allowed_packet (*mysql_get_parameters()->p_max_allowed_packet)
284
#define net_buffer_length (*mysql_get_parameters()->p_net_buffer_length)
288
Set up and bring down the server; to ensure that applications will
289
work when linked against either the standard client library or the
290
embedded server library, these functions should be called.
292
int STDCALL mysql_server_init(int argc, char **argv, char **groups);
293
void STDCALL mysql_server_end(void);
296
mysql_server_init/end need to be called when using libmysqld or
297
libmysqlclient (exactly, mysql_server_init() is called by mysql_init() so
298
you don't need to call it explicitely; but you need to call
299
mysql_server_end() to free memory). The names are a bit misleading
300
(mysql_SERVER* to be used when using libmysqlCLIENT). So we add more general
301
names which suit well whether you're using libmysqld or libmysqlclient. We
302
intend to promote these aliases over the mysql_server* ones.
304
#define mysql_library_init mysql_server_init
305
#define mysql_library_end mysql_server_end
307
MYSQL_PARAMETERS *STDCALL mysql_get_parameters(void);
310
Set up and bring down a thread; these function should be called
311
for each thread in an application which opens at least one MySQL
312
connection. All uses of the connection(s) should be between these
315
my_bool STDCALL mysql_thread_init(void);
316
void STDCALL mysql_thread_end(void);
319
Functions to get information from the MYSQL and MYSQL_RES structures
320
Should definitely be used if one uses shared libraries.
323
my_ulonglong STDCALL mysql_num_rows(MYSQL_RES *res);
324
unsigned int STDCALL mysql_num_fields(MYSQL_RES *res);
325
my_bool STDCALL mysql_eof(MYSQL_RES *res);
326
MYSQL_FIELD *STDCALL mysql_fetch_field_direct(MYSQL_RES *res,
327
unsigned int fieldnr);
328
MYSQL_FIELD * STDCALL mysql_fetch_fields(MYSQL_RES *res);
329
MYSQL_ROW_OFFSET STDCALL mysql_row_tell(MYSQL_RES *res);
330
MYSQL_FIELD_OFFSET STDCALL mysql_field_tell(MYSQL_RES *res);
332
unsigned int STDCALL mysql_field_count(MYSQL *mysql);
333
my_ulonglong STDCALL mysql_affected_rows(MYSQL *mysql);
334
my_ulonglong STDCALL mysql_insert_id(MYSQL *mysql);
335
unsigned int STDCALL mysql_errno(MYSQL *mysql);
336
const char * STDCALL mysql_error(MYSQL *mysql);
337
const char *STDCALL mysql_sqlstate(MYSQL *mysql);
338
unsigned int STDCALL mysql_warning_count(MYSQL *mysql);
339
const char * STDCALL mysql_info(MYSQL *mysql);
340
unsigned long STDCALL mysql_thread_id(MYSQL *mysql);
341
const char * STDCALL mysql_character_set_name(MYSQL *mysql);
342
int STDCALL mysql_set_character_set(MYSQL *mysql, const char *csname);
344
MYSQL * STDCALL mysql_init(MYSQL *mysql);
345
my_bool STDCALL mysql_ssl_set(MYSQL *mysql, const char *key,
346
const char *cert, const char *ca,
347
const char *capath, const char *cipher);
348
const char * STDCALL mysql_get_ssl_cipher(MYSQL *mysql);
349
my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user,
350
const char *passwd, const char *db);
351
MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host,
356
const char *unix_socket,
357
unsigned long clientflag);
358
int STDCALL mysql_select_db(MYSQL *mysql, const char *db);
359
int STDCALL mysql_query(MYSQL *mysql, const char *q);
360
int STDCALL mysql_send_query(MYSQL *mysql, const char *q,
361
unsigned long length);
362
int STDCALL mysql_real_query(MYSQL *mysql, const char *q,
363
unsigned long length);
364
MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql);
365
MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql);
367
void STDCALL mysql_get_character_set_info(MYSQL *mysql,
368
MY_CHARSET_INFO *charset);
370
/* local infile support */
372
#define LOCAL_INFILE_ERROR_LEN 512
375
mysql_set_local_infile_handler(MYSQL *mysql,
376
int (*local_infile_init)(void **, const char *,
378
int (*local_infile_read)(void *, char *,
380
void (*local_infile_end)(void *),
381
int (*local_infile_error)(void *, char*,
386
mysql_set_local_infile_default(MYSQL *mysql);
388
int STDCALL mysql_shutdown(MYSQL *mysql,
389
enum mysql_enum_shutdown_level
391
int STDCALL mysql_dump_debug_info(MYSQL *mysql);
392
int STDCALL mysql_refresh(MYSQL *mysql,
393
unsigned int refresh_options);
394
int STDCALL mysql_kill(MYSQL *mysql,unsigned long pid);
395
int STDCALL mysql_set_server_option(MYSQL *mysql,
396
enum enum_mysql_set_option
398
int STDCALL mysql_ping(MYSQL *mysql);
399
const char * STDCALL mysql_stat(MYSQL *mysql);
400
const char * STDCALL mysql_get_server_info(MYSQL *mysql);
401
const char * STDCALL mysql_get_client_info(void);
402
unsigned long STDCALL mysql_get_client_version(void);
403
const char * STDCALL mysql_get_host_info(MYSQL *mysql);
404
unsigned long STDCALL mysql_get_server_version(MYSQL *mysql);
405
unsigned int STDCALL mysql_get_proto_info(MYSQL *mysql);
406
MYSQL_RES * STDCALL mysql_list_dbs(MYSQL *mysql,const char *wild);
407
MYSQL_RES * STDCALL mysql_list_tables(MYSQL *mysql,const char *wild);
408
MYSQL_RES * STDCALL mysql_list_processes(MYSQL *mysql);
409
int STDCALL mysql_options(MYSQL *mysql,enum mysql_option option,
411
void STDCALL mysql_free_result(MYSQL_RES *result);
412
void STDCALL mysql_data_seek(MYSQL_RES *result,
413
my_ulonglong offset);
414
MYSQL_ROW_OFFSET STDCALL mysql_row_seek(MYSQL_RES *result,
415
MYSQL_ROW_OFFSET offset);
416
MYSQL_FIELD_OFFSET STDCALL mysql_field_seek(MYSQL_RES *result,
417
MYSQL_FIELD_OFFSET offset);
418
MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);
419
unsigned long * STDCALL mysql_fetch_lengths(MYSQL_RES *result);
420
MYSQL_FIELD * STDCALL mysql_fetch_field(MYSQL_RES *result);
421
MYSQL_RES * STDCALL mysql_list_fields(MYSQL *mysql, const char *table,
423
unsigned long STDCALL mysql_escape_string(char *to,const char *from,
424
unsigned long from_length);
425
unsigned long STDCALL mysql_hex_string(char *to,const char *from,
426
unsigned long from_length);
427
unsigned long STDCALL mysql_real_escape_string(MYSQL *mysql,
428
char *to,const char *from,
429
unsigned long length);
430
void STDCALL mysql_debug(const char *debug);
431
void STDCALL myodbc_remove_escape(MYSQL *mysql,char *name);
432
unsigned int STDCALL mysql_thread_safe(void);
433
my_bool STDCALL mysql_embedded(void);
434
my_bool STDCALL mysql_read_query_result(MYSQL *mysql);
438
typedef struct st_mysql_methods
440
my_bool (*read_query_result)(MYSQL *mysql);
441
my_bool (*advanced_command)(MYSQL *mysql,
442
enum enum_server_command command,
443
const unsigned char *header,
444
unsigned long header_length,
445
const unsigned char *arg,
446
unsigned long arg_length,
448
MYSQL_DATA *(*read_rows)(MYSQL *mysql,MYSQL_FIELD *mysql_fields,
449
unsigned int fields);
450
MYSQL_RES * (*use_result)(MYSQL *mysql);
451
void (*fetch_lengths)(unsigned long *to,
452
MYSQL_ROW column, unsigned int field_count);
453
void (*flush_use_result)(MYSQL *mysql);
454
MYSQL_FIELD * (*list_fields)(MYSQL *mysql);
455
int (*unbuffered_fetch)(MYSQL *mysql, char **row);
456
const char *(*read_statistics)(MYSQL *mysql);
457
my_bool (*next_result)(MYSQL *mysql);
458
int (*read_change_user_result)(MYSQL *mysql, char *buff, const char *passwd);
462
my_bool STDCALL mysql_commit(MYSQL * mysql);
463
my_bool STDCALL mysql_rollback(MYSQL * mysql);
464
my_bool STDCALL mysql_autocommit(MYSQL * mysql, my_bool auto_mode);
465
my_bool STDCALL mysql_more_results(MYSQL *mysql);
466
int STDCALL mysql_next_result(MYSQL *mysql);
467
void STDCALL mysql_close(MYSQL *sock);
470
/* status return codes */
471
#define MYSQL_NO_DATA 100
472
#define MYSQL_DATA_TRUNCATED 101
474
#define mysql_reload(mysql) mysql_refresh((mysql),REFRESH_GRANT)
476
#ifdef USE_OLD_FUNCTIONS
477
MYSQL * STDCALL mysql_connect(MYSQL *mysql, const char *host,
478
const char *user, const char *passwd);
479
int STDCALL mysql_create_db(MYSQL *mysql, const char *DB);
480
int STDCALL mysql_drop_db(MYSQL *mysql, const char *DB);
482
#define HAVE_MYSQL_REAL_CONNECT
485
The following functions are mainly exported because of mysqlbinlog;
486
They are not for general usage
489
#define simple_command(mysql, command, arg, length, skip_check) \
490
(*(mysql)->methods->advanced_command)(mysql, command, 0, \
491
0, arg, length, skip_check)
63
#endif /* _libdrizzle_libdrizzle_h */
497
#endif /* _mysql_h */