~drizzle-trunk/drizzle/development

1 by brian
clean slate
1
/* Copyright (C) 2000-2003 MySQL AB
2
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.
6
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.
11
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 */
15
16
/*
17
  This file defines the client API to MySQL and also the ABI of the
18
  dynamically linked libmysqlclient.
19
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 .
24
25
*/
26
27
#ifndef _mysql_h
28
#define _mysql_h
29
30
#ifdef	__cplusplus
31
extern "C" {
32
#endif
33
34
#ifndef _global_h				/* If not standard header */
35
#include <sys/types.h>
36
#ifdef __LCC__
37
#include <winsock2.h>				/* For windows */
38
#endif
39
typedef char my_bool;
40
#define STDCALL
41
42
#ifndef my_socket_defined
43
typedef int my_socket;
44
#endif /* my_socket_defined */
45
#endif /* _global_h */
46
77.1.39 by Monty Taylor
More mysql->drizzle renaming.
47
#include "drizzle_version.h"
48
#include "drizzle_com.h"
49
#include "drizzle_time.h"
1 by brian
clean slate
50
50 by Brian Aker
Remaining major pieces of PS removed
51
#include "my_list.h" /* for LISTs used in 'MYSQL' */
1 by brian
clean slate
52
53
extern unsigned int mysql_port;
54
extern char *mysql_unix_port;
55
56
#define CLIENT_NET_READ_TIMEOUT		365*24*3600	/* Timeout on read */
57
#define CLIENT_NET_WRITE_TIMEOUT	365*24*3600	/* Timeout on write */
58
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)
69 by Brian Aker
Next bit of removal of mediumint
62
#define IS_NUM(t)	((t) <= MYSQL_TYPE_LONGLONG || (t) == MYSQL_TYPE_YEAR || (t) == MYSQL_TYPE_NEWDECIMAL)
1 by brian
clean slate
63
#define IS_NUM_FIELD(f)	 ((f)->flags & NUM_FLAG)
69 by Brian Aker
Next bit of removal of mediumint
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)
1 by brian
clean slate
65
#define IS_LONGDATA(t) ((t) >= MYSQL_TYPE_TINY_BLOB && (t) <= MYSQL_TYPE_STRING)
66
67
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 */
89
  void *extension;
90
} MYSQL_FIELD;
91
92
typedef char **MYSQL_ROW;		/* return data as array of strings */
93
typedef unsigned int MYSQL_FIELD_OFFSET; /* offset to current field */
94
95
#ifndef _global_h
96
#if defined(NO_CLIENT_LONG_LONG)
97
typedef unsigned long my_ulonglong;
98
#else
99
typedef unsigned long long my_ulonglong;
100
#endif
101
#endif
102
103
#include "typelib.h"
104
105
#define MYSQL_COUNT_ERROR (~(my_ulonglong) 0)
106
107
/* backward compatibility define - to be removed eventually */
108
#define ER_WARN_DATA_TRUNCATED WARN_DATA_TRUNCATED
109
110
typedef struct st_mysql_rows {
111
  struct st_mysql_rows *next;		/* list of rows */
112
  MYSQL_ROW data;
113
  unsigned long length;
114
} MYSQL_ROWS;
115
116
typedef MYSQL_ROWS *MYSQL_ROW_OFFSET;	/* offset to current row */
117
118
#include "my_alloc.h"
119
120
typedef struct embedded_query_result EMBEDDED_QUERY_RESULT;
121
typedef struct st_mysql_data {
122
  MYSQL_ROWS *data;
123
  struct embedded_query_result *embedded_info;
124
  MEM_ROOT alloc;
125
  my_ulonglong rows;
126
  unsigned int fields;
127
  /* extra info for embedded library */
128
  void *extension;
129
} MYSQL_DATA;
130
131
enum mysql_option 
132
{
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
142
};
143
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;
160
  my_bool unused1;
161
  my_bool unused2;
162
  my_bool unused3;
163
  my_bool unused4;
164
  enum mysql_option methods_to_use;
165
  char *client_ip;
166
  /* Refuse client connecting to server if it uses old (pre-4.1.1) protocol */
167
  my_bool secure_auth;
168
  /* 0 - never report, 1 - always report (default) */
169
  my_bool report_data_truncation;
170
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;
177
  void *extension;
178
};
179
180
enum mysql_status 
181
{
182
  MYSQL_STATUS_READY,MYSQL_STATUS_GET_RESULT,MYSQL_STATUS_USE_RESULT
183
};
184
185
enum mysql_protocol_type 
186
{
187
  MYSQL_PROTOCOL_DEFAULT, MYSQL_PROTOCOL_TCP, MYSQL_PROTOCOL_SOCKET,
188
  MYSQL_PROTOCOL_PIPE, MYSQL_PROTOCOL_MEMORY
189
};
190
191
typedef struct character_set
192
{
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 */
201
} MY_CHARSET_INFO;
202
203
struct st_mysql_methods;
204
struct st_mysql_stmt;
205
206
typedef struct st_mysql
207
{
208
  NET		net;			/* Communication parameters */
209
  unsigned char	*connector_fd;		/* ConnectorFd for SSL */
210
  char		*host,*user,*passwd,*unix_socket,*server_version,*host_info;
211
  char          *info, *db;
212
  struct charset_info_st *charset;
213
  MYSQL_FIELD	*fields;
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;
220
  unsigned int	port;
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 */
231
232
  /* session-wide random string */
233
  char	        scramble[SCRAMBLE_LENGTH+1];
234
  my_bool unused1;
235
  void *unused2, *unused3, *unused4, *unused5;
236
237
  LIST  *stmts;                     /* list of all statements */
238
  const struct st_mysql_methods *methods;
239
  void *thd;
240
  /*
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.
243
  */
244
  my_bool *unbuffered_fetch_owner;
245
  /* needed for embedded server - no net buffer to store the 'info' */
246
  char *info_buffer;
247
  void *extension;
248
} MYSQL;
249
250
251
typedef struct st_mysql_res {
252
  my_ulonglong  row_count;
253
  MYSQL_FIELD	*fields;
254
  MYSQL_DATA	*data;
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;  
266
  void *extension;
267
} MYSQL_RES;
268
269
270
#if !defined(MYSQL_SERVER) && !defined(MYSQL_CLIENT)
271
#define MYSQL_CLIENT
272
#endif
273
274
275
typedef struct st_mysql_parameters
276
{
277
  unsigned long *p_max_allowed_packet;
278
  unsigned long *p_net_buffer_length;
279
  void *extension;
280
} MYSQL_PARAMETERS;
281
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)
285
#endif
286
287
/*
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.
291
*/
292
int STDCALL mysql_server_init(int argc, char **argv, char **groups);
293
void STDCALL mysql_server_end(void);
294
295
/*
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.
303
*/
304
#define mysql_library_init mysql_server_init
305
#define mysql_library_end mysql_server_end
306
307
MYSQL_PARAMETERS *STDCALL mysql_get_parameters(void);
308
309
/*
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
313
  function calls.
314
*/
315
my_bool STDCALL mysql_thread_init(void);
316
void STDCALL mysql_thread_end(void);
317
318
/*
319
  Functions to get information from the MYSQL and MYSQL_RES structures
320
  Should definitely be used if one uses shared libraries.
321
*/
322
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);
331
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);
343
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,
352
					   const char *user,
353
					   const char *passwd,
354
					   const char *db,
355
					   unsigned int port,
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);
366
367
void        STDCALL mysql_get_character_set_info(MYSQL *mysql,
368
                           MY_CHARSET_INFO *charset);
369
370
/* local infile support */
371
372
#define LOCAL_INFILE_ERROR_LEN 512
373
374
void
375
mysql_set_local_infile_handler(MYSQL *mysql,
376
                               int (*local_infile_init)(void **, const char *,
377
                            void *),
378
                               int (*local_infile_read)(void *, char *,
379
							unsigned int),
380
                               void (*local_infile_end)(void *),
381
                               int (*local_infile_error)(void *, char*,
382
							 unsigned int),
383
                               void *);
384
385
void
386
mysql_set_local_infile_default(MYSQL *mysql);
387
388
int		STDCALL mysql_shutdown(MYSQL *mysql,
389
                                       enum mysql_enum_shutdown_level
390
                                       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
397
						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,
410
				      const void *arg);
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,
422
					  const char *wild);
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);
435
436
437
438
typedef struct st_mysql_methods
439
{
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,
50 by Brian Aker
Remaining major pieces of PS removed
447
			      my_bool skip_check);
1 by brian
clean slate
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);
459
} MYSQL_METHODS;
460
461
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);
468
469
470
/* status return codes */
471
#define MYSQL_NO_DATA        100
472
#define MYSQL_DATA_TRUNCATED 101
473
474
#define mysql_reload(mysql) mysql_refresh((mysql),REFRESH_GRANT)
475
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);
481
#endif
482
#define HAVE_MYSQL_REAL_CONNECT
483
484
/*
485
  The following functions are mainly exported because of mysqlbinlog;
486
  They are not for general usage
487
*/
488
489
#define simple_command(mysql, command, arg, length, skip_check) \
490
  (*(mysql)->methods->advanced_command)(mysql, command, 0,  \
50 by Brian Aker
Remaining major pieces of PS removed
491
                                        0, arg, length, skip_check)
1 by brian
clean slate
492
493
#ifdef	__cplusplus
494
}
495
#endif
496
497
#endif /* _mysql_h */