~drizzle-trunk/drizzle/development

1 by brian
clean slate
1
/* Copyright (C) 2005 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
#ifndef _my_plugin_h
17
#define _my_plugin_h
18
19
#ifdef __cplusplus
20
class THD;
21
class Item;
22
#define MYSQL_THD THD*
23
#else
24
#define MYSQL_THD void*
25
#endif
26
27
#ifndef _m_string_h
28
/* This definition must match the one given in m_string.h */
29
struct st_mysql_lex_string
30
{
31
  char *str;
32
  unsigned int length;
33
};
34
#endif /* _m_string_h */
35
typedef struct st_mysql_lex_string MYSQL_LEX_STRING;
36
37
#define MYSQL_XIDDATASIZE 128
38
/**
39
  struct st_mysql_xid is binary compatible with the XID structure as
40
  in the X/Open CAE Specification, Distributed Transaction Processing:
41
  The XA Specification, X/Open Company Ltd., 1991.
42
  http://www.opengroup.org/bookstore/catalog/c193.htm
43
44
  @see XID in sql/handler.h
45
*/
46
struct st_mysql_xid {
47
  long formatID;
48
  long gtrid_length;
49
  long bqual_length;
50
  char data[MYSQL_XIDDATASIZE];  /* Not \0-terminated */
51
};
52
typedef struct st_mysql_xid MYSQL_XID;
53
54
/*************************************************************************
55
  Plugin API. Common for all plugin types.
56
*/
57
58
#define MYSQL_PLUGIN_INTERFACE_VERSION 0x0100
59
60
/*
61
  The allowable types of plugins
62
*/
63
#define MYSQL_UDF_PLUGIN             0  /* User-defined function        */
64
#define MYSQL_STORAGE_ENGINE_PLUGIN  1  /* Storage Engine               */
65
#define MYSQL_FTPARSER_PLUGIN        2  /* Full-text parser plugin      */
66
#define MYSQL_DAEMON_PLUGIN          3  /* The daemon/raw plugin type */
67
#define MYSQL_INFORMATION_SCHEMA_PLUGIN  4  /* The I_S plugin type */
68
#define MYSQL_AUDIT_PLUGIN           5  /* The Audit plugin type        */
69
#define MYSQL_MAX_PLUGIN_TYPE_NUM    6  /* The number of plugin types   */
70
71
/* We use the following strings to define licenses for plugins */
72
#define PLUGIN_LICENSE_PROPRIETARY 0
73
#define PLUGIN_LICENSE_GPL 1
74
#define PLUGIN_LICENSE_BSD 2
75
76
#define PLUGIN_LICENSE_PROPRIETARY_STRING "PROPRIETARY"
77
#define PLUGIN_LICENSE_GPL_STRING "GPL"
78
#define PLUGIN_LICENSE_BSD_STRING "BSD"
79
80
/*
81
  Macros for beginning and ending plugin declarations.  Between
82
  mysql_declare_plugin and mysql_declare_plugin_end there should
83
  be a st_mysql_plugin struct for each plugin to be declared.
84
*/
85
86
87
#ifndef MYSQL_DYNAMIC_PLUGIN
88
#define __MYSQL_DECLARE_PLUGIN(NAME, VERSION, PSIZE, DECLS)                   \
89
int VERSION= MYSQL_PLUGIN_INTERFACE_VERSION;                                  \
90
int PSIZE= sizeof(struct st_mysql_plugin);                                    \
91
struct st_mysql_plugin DECLS[]= {
92
#else
93
#define __MYSQL_DECLARE_PLUGIN(NAME, VERSION, PSIZE, DECLS)                   \
94
int _mysql_plugin_interface_version_= MYSQL_PLUGIN_INTERFACE_VERSION;         \
95
int _mysql_sizeof_struct_st_plugin_= sizeof(struct st_mysql_plugin);          \
96
struct st_mysql_plugin _mysql_plugin_declarations_[]= {
97
#endif
98
99
#define mysql_declare_plugin(NAME) \
100
__MYSQL_DECLARE_PLUGIN(NAME, \
101
                 builtin_ ## NAME ## _plugin_interface_version, \
102
                 builtin_ ## NAME ## _sizeof_struct_st_plugin, \
103
                 builtin_ ## NAME ## _plugin)
104
105
#define mysql_declare_plugin_end ,{0,0,0,0,0,0,0,0,0,0,0,0}}
106
107
/*
108
  declarations for SHOW STATUS support in plugins
109
*/
110
enum enum_mysql_show_type
111
{
112
  SHOW_UNDEF, SHOW_BOOL, SHOW_INT, SHOW_LONG,
113
  SHOW_LONGLONG, SHOW_CHAR, SHOW_CHAR_PTR,
114
  SHOW_ARRAY, SHOW_FUNC, SHOW_DOUBLE
115
};
116
117
struct st_mysql_show_var {
118
  const char *name;
119
  char *value;
120
  enum enum_mysql_show_type type;
121
};
122
123
#define SHOW_VAR_FUNC_BUFF_SIZE 1024
124
typedef int (*mysql_show_var_func)(MYSQL_THD, struct st_mysql_show_var*, char *);
125
126
127
/*
128
  declarations for server variables and command line options
129
*/
130
131
132
#define PLUGIN_VAR_BOOL         0x0001
133
#define PLUGIN_VAR_INT          0x0002
134
#define PLUGIN_VAR_LONG         0x0003
135
#define PLUGIN_VAR_LONGLONG     0x0004
136
#define PLUGIN_VAR_STR          0x0005
137
#define PLUGIN_VAR_ENUM         0x0006
138
#define PLUGIN_VAR_SET          0x0007
139
#define PLUGIN_VAR_UNSIGNED     0x0080
140
#define PLUGIN_VAR_THDLOCAL     0x0100 /* Variable is per-connection */
141
#define PLUGIN_VAR_READONLY     0x0200 /* Server variable is read only */
142
#define PLUGIN_VAR_NOSYSVAR     0x0400 /* Not a server variable */
143
#define PLUGIN_VAR_NOCMDOPT     0x0800 /* Not a command line option */
144
#define PLUGIN_VAR_NOCMDARG     0x1000 /* No argument for cmd line */
145
#define PLUGIN_VAR_RQCMDARG     0x0000 /* Argument required for cmd line */
146
#define PLUGIN_VAR_OPCMDARG     0x2000 /* Argument optional for cmd line */
147
#define PLUGIN_VAR_MEMALLOC     0x8000 /* String needs memory allocated */
148
149
struct st_mysql_sys_var;
150
struct st_mysql_value;
151
152
/*
153
  SYNOPSIS
154
    (*mysql_var_check_func)()
155
      thd               thread handle
156
      var               dynamic variable being altered
157
      save              pointer to temporary storage
158
      value             user provided value
159
  RETURN
160
    0   user provided value is OK and the update func may be called.
161
    any other value indicates error.
162
  
163
  This function should parse the user provided value and store in the
164
  provided temporary storage any data as required by the update func.
165
  There is sufficient space in the temporary storage to store a double.
166
  Note that the update func may not be called if any other error occurs
167
  so any memory allocated should be thread-local so that it may be freed
168
  automatically at the end of the statement.
169
*/
170
171
typedef int (*mysql_var_check_func)(MYSQL_THD thd,
172
                                    struct st_mysql_sys_var *var,
173
                                    void *save, struct st_mysql_value *value);
174
175
/*
176
  SYNOPSIS
177
    (*mysql_var_update_func)()
178
      thd               thread handle
179
      var               dynamic variable being altered
180
      var_ptr           pointer to dynamic variable
181
      save              pointer to temporary storage
182
   RETURN
183
     NONE
184
   
185
   This function should use the validated value stored in the temporary store
186
   and persist it in the provided pointer to the dynamic variable.
187
   For example, strings may require memory to be allocated.
188
*/
189
typedef void (*mysql_var_update_func)(MYSQL_THD thd,
190
                                      struct st_mysql_sys_var *var,
191
                                      void *var_ptr, const void *save);
192
193
194
/* the following declarations are for internal use only */
195
196
197
#define PLUGIN_VAR_MASK \
198
        (PLUGIN_VAR_READONLY | PLUGIN_VAR_NOSYSVAR | \
199
         PLUGIN_VAR_NOCMDOPT | PLUGIN_VAR_NOCMDARG | \
200
         PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC)
201
202
#define MYSQL_PLUGIN_VAR_HEADER \
203
  int flags;                    \
204
  const char *name;             \
205
  const char *comment;          \
206
  mysql_var_check_func check;   \
207
  mysql_var_update_func update
208
209
#define MYSQL_SYSVAR_NAME(name) mysql_sysvar_ ## name
210
#define MYSQL_SYSVAR(name) \
211
  ((struct st_mysql_sys_var *)&(MYSQL_SYSVAR_NAME(name)))
212
213
/*
214
  for global variables, the value pointer is the first
215
  element after the header, the default value is the second.
216
  for thread variables, the value offset is the first
217
  element after the header, the default value is the second.
218
*/
219
   
220
221
#define DECLARE_MYSQL_SYSVAR_BASIC(name, type) struct { \
222
  MYSQL_PLUGIN_VAR_HEADER;      \
223
  type *value;                  \
224
  const type def_val;           \
225
} MYSQL_SYSVAR_NAME(name)
226
227
#define DECLARE_MYSQL_SYSVAR_SIMPLE(name, type) struct { \
228
  MYSQL_PLUGIN_VAR_HEADER;      \
229
  type *value; type def_val;    \
230
  type min_val; type max_val;   \
231
  type blk_sz;                  \
232
} MYSQL_SYSVAR_NAME(name)
233
234
#define DECLARE_MYSQL_SYSVAR_TYPELIB(name, type) struct { \
235
  MYSQL_PLUGIN_VAR_HEADER;      \
236
  type *value; type def_val;    \
237
  TYPELIB *typelib;             \
238
} MYSQL_SYSVAR_NAME(name)
239
240
#define DECLARE_THDVAR_FUNC(type) \
241
  type *(*resolve)(MYSQL_THD thd, int offset)
242
243
#define DECLARE_MYSQL_THDVAR_BASIC(name, type) struct { \
244
  MYSQL_PLUGIN_VAR_HEADER;      \
245
  int offset;                   \
246
  const type def_val;           \
247
  DECLARE_THDVAR_FUNC(type);    \
248
} MYSQL_SYSVAR_NAME(name)
249
250
#define DECLARE_MYSQL_THDVAR_SIMPLE(name, type) struct { \
251
  MYSQL_PLUGIN_VAR_HEADER;      \
252
  int offset;                   \
253
  type def_val; type min_val;   \
254
  type max_val; type blk_sz;    \
255
  DECLARE_THDVAR_FUNC(type);    \
256
} MYSQL_SYSVAR_NAME(name)
257
258
#define DECLARE_MYSQL_THDVAR_TYPELIB(name, type) struct { \
259
  MYSQL_PLUGIN_VAR_HEADER;      \
260
  int offset;                   \
261
  type def_val;                 \
262
  DECLARE_THDVAR_FUNC(type);    \
263
  TYPELIB *typelib;             \
264
} MYSQL_SYSVAR_NAME(name)
265
266
267
/*
268
  the following declarations are for use by plugin implementors
269
*/
270
271
#define MYSQL_SYSVAR_BOOL(name, varname, opt, comment, check, update, def) \
272
DECLARE_MYSQL_SYSVAR_BASIC(name, char) = { \
273
  PLUGIN_VAR_BOOL | ((opt) & PLUGIN_VAR_MASK), \
274
  #name, comment, check, update, &varname, def}
275
276
#define MYSQL_SYSVAR_STR(name, varname, opt, comment, check, update, def) \
277
DECLARE_MYSQL_SYSVAR_BASIC(name, char *) = { \
278
  PLUGIN_VAR_STR | ((opt) & PLUGIN_VAR_MASK), \
279
  #name, comment, check, update, &varname, def}
280
281
#define MYSQL_SYSVAR_INT(name, varname, opt, comment, check, update, def, min, max, blk) \
282
DECLARE_MYSQL_SYSVAR_SIMPLE(name, int) = { \
283
  PLUGIN_VAR_INT | ((opt) & PLUGIN_VAR_MASK), \
284
  #name, comment, check, update, &varname, def, min, max, blk }
285
286
#define MYSQL_SYSVAR_UINT(name, varname, opt, comment, check, update, def, min, max, blk) \
287
DECLARE_MYSQL_SYSVAR_SIMPLE(name, unsigned int) = { \
288
  PLUGIN_VAR_INT | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
289
  #name, comment, check, update, &varname, def, min, max, blk }
290
291
#define MYSQL_SYSVAR_LONG(name, varname, opt, comment, check, update, def, min, max, blk) \
292
DECLARE_MYSQL_SYSVAR_SIMPLE(name, long) = { \
293
  PLUGIN_VAR_LONG | ((opt) & PLUGIN_VAR_MASK), \
294
  #name, comment, check, update, &varname, def, min, max, blk }
295
296
#define MYSQL_SYSVAR_ULONG(name, varname, opt, comment, check, update, def, min, max, blk) \
297
DECLARE_MYSQL_SYSVAR_SIMPLE(name, unsigned long) = { \
298
  PLUGIN_VAR_LONG | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
299
  #name, comment, check, update, &varname, def, min, max, blk }
300
301
#define MYSQL_SYSVAR_LONGLONG(name, varname, opt, comment, check, update, def, min, max, blk) \
302
DECLARE_MYSQL_SYSVAR_SIMPLE(name, long long) = { \
303
  PLUGIN_VAR_LONGLONG | ((opt) & PLUGIN_VAR_MASK), \
304
  #name, comment, check, update, &varname, def, min, max, blk }
305
306
#define MYSQL_SYSVAR_ULONGLONG(name, varname, opt, comment, check, update, def, min, max, blk) \
307
DECLARE_MYSQL_SYSVAR_SIMPLE(name, unsigned long long) = { \
308
  PLUGIN_VAR_LONGLONG | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
309
  #name, comment, check, update, &varname, def, min, max, blk }
310
311
#define MYSQL_SYSVAR_ENUM(name, varname, opt, comment, check, update, def, typelib) \
312
DECLARE_MYSQL_SYSVAR_TYPELIB(name, unsigned long) = { \
313
  PLUGIN_VAR_ENUM | ((opt) & PLUGIN_VAR_MASK), \
314
  #name, comment, check, update, &varname, def, typelib }
315
316
#define MYSQL_SYSVAR_SET(name, varname, opt, comment, check, update, def, typelib) \
317
DECLARE_MYSQL_SYSVAR_TYPELIB(name, unsigned long long) = { \
318
  PLUGIN_VAR_SET | ((opt) & PLUGIN_VAR_MASK), \
319
  #name, comment, check, update, &varname, def, typelib }
320
321
#define MYSQL_THDVAR_BOOL(name, opt, comment, check, update, def) \
322
DECLARE_MYSQL_THDVAR_BASIC(name, char) = { \
323
  PLUGIN_VAR_BOOL | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \
324
  #name, comment, check, update, -1, def, NULL}
325
326
#define MYSQL_THDVAR_STR(name, opt, comment, check, update, def) \
327
DECLARE_MYSQL_THDVAR_BASIC(name, char *) = { \
328
  PLUGIN_VAR_STR | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \
329
  #name, comment, check, update, -1, def, NULL}
330
331
#define MYSQL_THDVAR_INT(name, opt, comment, check, update, def, min, max, blk) \
332
DECLARE_MYSQL_THDVAR_SIMPLE(name, int) = { \
333
  PLUGIN_VAR_INT | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \
334
  #name, comment, check, update, -1, def, min, max, blk, NULL }
335
336
#define MYSQL_THDVAR_UINT(name, opt, comment, check, update, def, min, max, blk) \
337
DECLARE_MYSQL_THDVAR_SIMPLE(name, unsigned int) = { \
338
  PLUGIN_VAR_INT | PLUGIN_VAR_THDLOCAL | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
339
  #name, comment, check, update, -1, def, min, max, blk, NULL }
340
341
#define MYSQL_THDVAR_LONG(name, opt, comment, check, update, def, min, max, blk) \
342
DECLARE_MYSQL_THDVAR_SIMPLE(name, long) = { \
343
  PLUGIN_VAR_LONG | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \
344
  #name, comment, check, update, -1, def, min, max, blk, NULL }
345
346
#define MYSQL_THDVAR_ULONG(name, opt, comment, check, update, def, min, max, blk) \
347
DECLARE_MYSQL_THDVAR_SIMPLE(name, unsigned long) = { \
348
  PLUGIN_VAR_LONG | PLUGIN_VAR_THDLOCAL | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
349
  #name, comment, check, update, -1, def, min, max, blk, NULL }
350
351
#define MYSQL_THDVAR_LONGLONG(name, opt, comment, check, update, def, min, max, blk) \
352
DECLARE_MYSQL_THDVAR_SIMPLE(name, long long) = { \
353
  PLUGIN_VAR_LONGLONG | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \
354
  #name, comment, check, update, -1, def, min, max, blk, NULL }
355
356
#define MYSQL_THDVAR_ULONGLONG(name, opt, comment, check, update, def, min, max, blk) \
357
DECLARE_MYSQL_THDVAR_SIMPLE(name, unsigned long long) = { \
358
  PLUGIN_VAR_LONGLONG | PLUGIN_VAR_THDLOCAL | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
359
  #name, comment, check, update, -1, def, min, max, blk, NULL }
360
361
#define MYSQL_THDVAR_ENUM(name, opt, comment, check, update, def, typelib) \
362
DECLARE_MYSQL_THDVAR_TYPELIB(name, unsigned long) = { \
363
  PLUGIN_VAR_ENUM | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \
364
  #name, comment, check, update, -1, def, NULL, typelib }
365
366
#define MYSQL_THDVAR_SET(name, opt, comment, check, update, def, typelib) \
367
DECLARE_MYSQL_THDVAR_TYPELIB(name, unsigned long long) = { \
368
  PLUGIN_VAR_SET | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \
369
  #name, comment, check, update, -1, def, NULL, typelib }
370
371
/* accessor macros */
372
373
#define SYSVAR(name) \
374
  (*(MYSQL_SYSVAR_NAME(name).value))
375
376
/* when thd == null, result points to global value */
377
#define THDVAR(thd, name) \
378
  (*(MYSQL_SYSVAR_NAME(name).resolve(thd, MYSQL_SYSVAR_NAME(name).offset)))
379
380
381
/*
382
  Plugin description structure.
383
*/
384
385
struct st_mysql_plugin
386
{
387
  int type;             /* the plugin type (a MYSQL_XXX_PLUGIN value)   */
388
  void *info;           /* pointer to type-specific plugin descriptor   */
389
  const char *name;     /* plugin name                                  */
390
  const char *author;   /* plugin author (for SHOW PLUGINS)             */
391
  const char *descr;    /* general descriptive text (for SHOW PLUGINS ) */
392
  int license;          /* the plugin license (PLUGIN_LICENSE_XXX)      */
393
  int (*init)(void *);  /* the function to invoke when plugin is loaded */
394
  int (*deinit)(void *);/* the function to invoke when plugin is unloaded */
395
  unsigned int version; /* plugin version (for SHOW PLUGINS)            */
396
  struct st_mysql_show_var *status_vars;
397
  struct st_mysql_sys_var **system_vars;
398
  void * __reserved1;   /* reserved for dependency checking             */
399
};
400
401
/*************************************************************************
402
  API for Full-text parser plugin. (MYSQL_FTPARSER_PLUGIN)
403
*/
404
#include "plugin_ftparser.h"
405
406
/*************************************************************************
407
  API for Storage Engine plugin. (MYSQL_DAEMON_PLUGIN)
408
*/
409
410
/* handlertons of different MySQL releases are incompatible */
411
#define MYSQL_DAEMON_INTERFACE_VERSION (MYSQL_VERSION_ID << 8)
412
413
/*
414
  Here we define only the descriptor structure, that is referred from
415
  st_mysql_plugin.
416
*/
417
418
struct st_mysql_daemon
419
{
420
  int interface_version;
421
};
422
423
424
/*************************************************************************
425
  API for I_S plugin. (MYSQL_INFORMATION_SCHEMA_PLUGIN)
426
*/
427
428
/* handlertons of different MySQL releases are incompatible */
429
#define MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION (MYSQL_VERSION_ID << 8)
430
431
/*
432
  Here we define only the descriptor structure, that is referred from
433
  st_mysql_plugin.
434
*/
435
436
struct st_mysql_information_schema
437
{
438
  int interface_version;
439
};
440
441
442
/*************************************************************************
443
  API for Storage Engine plugin. (MYSQL_STORAGE_ENGINE_PLUGIN)
444
*/
445
446
/* handlertons of different MySQL releases are incompatible */
447
#define MYSQL_HANDLERTON_INTERFACE_VERSION (MYSQL_VERSION_ID << 8)
448
449
/*
450
  The real API is in the sql/handler.h
451
  Here we define only the descriptor structure, that is referred from
452
  st_mysql_plugin.
453
*/
454
455
struct st_mysql_storage_engine
456
{
457
  int interface_version;
458
};
459
460
struct handlerton;
461
462
463
/*************************************************************************
464
  st_mysql_value struct for reading values from mysqld.
465
  Used by server variables framework to parse user-provided values.
466
  Will be used for arguments when implementing UDFs.
467
468
  Note that val_str() returns a string in temporary memory
469
  that will be freed at the end of statement. Copy the string
470
  if you need it to persist.
471
*/
472
473
#define MYSQL_VALUE_TYPE_STRING 0
474
#define MYSQL_VALUE_TYPE_REAL   1
475
#define MYSQL_VALUE_TYPE_INT    2
476
477
struct st_mysql_value
478
{
479
  int (*value_type)(struct st_mysql_value *);
480
  const char *(*val_str)(struct st_mysql_value *, char *buffer, int *length);
481
  int (*val_real)(struct st_mysql_value *, double *realbuf);
482
  int (*val_int)(struct st_mysql_value *, long long *intbuf);
483
};
484
485
486
/*************************************************************************
487
  Miscellaneous functions for plugin implementors
488
*/
489
490
#ifdef __cplusplus
491
extern "C" {
492
#endif
493
494
int thd_in_lock_tables(const MYSQL_THD thd);
495
int thd_tablespace_op(const MYSQL_THD thd);
496
long long thd_test_options(const MYSQL_THD thd, long long test_options);
497
int thd_sql_command(const MYSQL_THD thd);
498
const char *thd_proc_info(MYSQL_THD thd, const char *info);
499
void **thd_ha_data(const MYSQL_THD thd, const struct handlerton *hton);
500
int thd_tx_isolation(const MYSQL_THD thd);
501
char *thd_security_context(MYSQL_THD thd, char *buffer, unsigned int length,
502
                           unsigned int max_query_len);
503
/* Increments the row counter, see THD::row_count */
504
void thd_inc_row_count(MYSQL_THD thd);
505
506
/**
507
  Create a temporary file.
508
509
  @details
510
  The temporary file is created in a location specified by the mysql
511
  server configuration (--tmpdir option).  The caller does not need to
512
  delete the file, it will be deleted automatically.
513
514
  @param prefix  prefix for temporary file name
515
  @retval -1    error
516
  @retval >= 0  a file handle that can be passed to dup or my_close
517
*/
518
int mysql_tmpfile(const char *prefix);
519
520
/**
521
  Check the killed state of a connection
522
523
  @details
524
  In MySQL support for the KILL statement is cooperative. The KILL
525
  statement only sets a "killed" flag. This function returns the value
526
  of that flag.  A thread should check it often, especially inside
527
  time-consuming loops, and gracefully abort the operation if it is
528
  non-zero.
529
530
  @param thd  user thread connection handle
531
  @retval 0  the connection is active
532
  @retval 1  the connection has been killed
533
*/
534
int thd_killed(const MYSQL_THD thd);
535
536
537
/**
538
  Return the thread id of a user thread
539
540
  @param thd  user thread connection handle
541
  @return  thread id
542
*/
543
unsigned long thd_get_thread_id(const MYSQL_THD thd);
544
545
546
/**
547
  Allocate memory in the connection's local memory pool
548
549
  @details
550
  When properly used in place of @c my_malloc(), this can significantly
551
  improve concurrency. Don't use this or related functions to allocate
552
  large chunks of memory. Use for temporary storage only. The memory
553
  will be freed automatically at the end of the statement; no explicit
554
  code is required to prevent memory leaks.
555
556
  @see alloc_root()
557
*/
558
void *thd_alloc(MYSQL_THD thd, unsigned int size);
559
/**
560
  @see thd_alloc()
561
*/
562
void *thd_calloc(MYSQL_THD thd, unsigned int size);
563
/**
564
  @see thd_alloc()
565
*/
566
char *thd_strdup(MYSQL_THD thd, const char *str);
567
/**
568
  @see thd_alloc()
569
*/
570
char *thd_strmake(MYSQL_THD thd, const char *str, unsigned int size);
571
/**
572
  @see thd_alloc()
573
*/
574
void *thd_memdup(MYSQL_THD thd, const void* str, unsigned int size);
575
576
/**
577
  Create a LEX_STRING in this connection's local memory pool
578
579
  @param thd      user thread connection handle
580
  @param lex_str  pointer to LEX_STRING object to be initialized
581
  @param str      initializer to be copied into lex_str
582
  @param size     length of str, in bytes
583
  @param allocate_lex_string  flag: if TRUE, allocate new LEX_STRING object,
584
                              instead of using lex_str value
585
  @return  NULL on failure, or pointer to the LEX_STRING object
586
587
  @see thd_alloc()
588
*/
589
MYSQL_LEX_STRING *thd_make_lex_string(MYSQL_THD thd, MYSQL_LEX_STRING *lex_str,
590
                                      const char *str, unsigned int size,
591
                                      int allocate_lex_string);
592
593
/**
594
  Get the XID for this connection's transaction
595
596
  @param thd  user thread connection handle
597
  @param xid  location where identifier is stored
598
*/
599
void thd_get_xid(const MYSQL_THD thd, MYSQL_XID *xid);
600
601
/**
602
  Invalidate the query cache for a given table.
603
604
  @param thd         user thread connection handle
605
  @param key         databasename\\0tablename\\0
606
  @param key_length  length of key in bytes, including the NUL bytes
607
  @param using_trx   flag: TRUE if using transactions, FALSE otherwise
608
*/
609
void mysql_query_cache_invalidate4(MYSQL_THD thd,
610
                                   const char *key, unsigned int key_length,
611
                                   int using_trx);
612
613
#ifdef __cplusplus
614
}
615
#endif
616
617
#ifdef __cplusplus
618
/**
619
  Provide a handler data getter to simplify coding
620
*/
621
inline
622
void *
623
thd_get_ha_data(const MYSQL_THD thd, const struct handlerton *hton)
624
{
625
  return *thd_ha_data(thd, hton);
626
}
627
628
/**
629
  Provide a handler data setter to simplify coding
630
*/
631
inline
632
void
633
thd_set_ha_data(const MYSQL_THD thd, const struct handlerton *hton,
634
                const void *ha_data)
635
{
636
  *thd_ha_data(thd, hton)= (void*) ha_data;
637
}
638
#endif
639
640
#endif
641