~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/common.h

  • Committer: Brian Aker
  • Date: 2009-02-07 22:33:25 UTC
  • Revision ID: brian@tangent.org-20090207223325-5ipgldvw1pkghboq
typdef class removal (just... use the name of the class).

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* - mode: c; c-basic-offset: 2; indent-tabs-mode: nil; -*-
 
1
/* -*- mode: c; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
2
 *  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
3
3
 *
4
 
 *  Copyright (C) 2008 MySQL
 
4
 *  Copyright (C) 2008 Sun Microsystems, Inc.
5
5
 *
6
6
 *  This program is free software; you can redistribute it and/or modify
7
7
 *  it under the terms of the GNU General Public License as published by
8
 
 *  the Free Software Foundation; either version 2 of the License, or
9
 
 *  (at your option) any later version.
 
8
 *  the Free Software Foundation; version 2 of the License.
10
9
 *
11
10
 *  This program is distributed in the hope that it will be useful,
12
11
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
22
21
** Common definition between mysql server & client
23
22
*/
24
23
 
25
 
#ifndef _libdrizzle_drizzle_com_h
26
 
#define _libdrizzle_drizzle_com_h
 
24
#ifndef DRIZZLED_DRIZZLE_COMMON_H
 
25
#define DRIZZLED_DRIZZLE_COMMON_H
 
26
 
 
27
#include <unistd.h>
 
28
#include <stdint.h>
 
29
#include <drizzled/korr.h>
 
30
 
 
31
#if !defined(__cplusplus)
 
32
# include <stdbool.h>
 
33
#endif
27
34
 
28
35
/*
29
36
   This is included in the server and in the client.
35
42
   values, or it will break replication between version.
36
43
 
37
44
   context is encoded as following:
38
 
   SELECT - SELECT_LEX_NODE::options
 
45
   SELECT - Select_Lex_Node::options
39
46
   THD    - THD::options
40
47
   intern - neither. used only as
41
48
            func(..., select_node->options | thd->options | OPTION_XXX, ...)
43
50
   TODO: separate three contexts above, move them to separate bitfields.
44
51
*/
45
52
 
46
 
#define SELECT_DISTINCT         (1ULL << 0)     // SELECT, user
47
 
#define SELECT_STRAIGHT_JOIN    (1ULL << 1)     // SELECT, user
48
 
#define SELECT_DESCRIBE         (1ULL << 2)     // SELECT, user
49
 
#define SELECT_SMALL_RESULT     (1ULL << 3)     // SELECT, user
50
 
#define SELECT_BIG_RESULT       (1ULL << 4)     // SELECT, user
51
 
#define OPTION_FOUND_ROWS       (1ULL << 5)     // SELECT, user
52
 
#define SELECT_NO_JOIN_CACHE    (1ULL << 7)     // intern
53
 
#define OPTION_BIG_TABLES       (1ULL << 8)     // THD, user
54
 
#define OPTION_BIG_SELECTS      (1ULL << 9)     // THD, user
55
 
#define OPTION_LOG_OFF          (1ULL << 10)    // THD, user
56
 
#define OPTION_QUOTE_SHOW_CREATE (1ULL << 11)   // THD, user, unused
57
 
#define TMP_TABLE_ALL_COLUMNS   (1ULL << 12)    // SELECT, intern
58
 
#define OPTION_WARNINGS         (1ULL << 13)    // THD, user
59
 
#define OPTION_AUTO_IS_NULL     (1ULL << 14)    // THD, user, binlog
60
 
#define OPTION_FOUND_COMMENT    (1ULL << 15)    // SELECT, intern, parser
61
 
#define OPTION_SAFE_UPDATES     (1ULL << 16)    // THD, user
62
 
#define OPTION_BUFFER_RESULT    (1ULL << 17)    // SELECT, user
63
 
#define OPTION_BIN_LOG          (1ULL << 18)    // THD, user
64
 
#define OPTION_NOT_AUTOCOMMIT   (1ULL << 19)    // THD, user
65
 
#define OPTION_BEGIN            (1ULL << 20)    // THD, intern
66
 
#define OPTION_TABLE_LOCK       (1ULL << 21)    // THD, intern
67
 
#define OPTION_QUICK            (1ULL << 22)    // SELECT (for DELETE)
68
 
#define OPTION_KEEP_LOG         (1ULL << 23)    // THD, user
 
53
#define SELECT_DISTINCT         (UINT64_C(1) << 0)     // SELECT, user
 
54
#define SELECT_STRAIGHT_JOIN    (UINT64_C(1) << 1)     // SELECT, user
 
55
#define SELECT_DESCRIBE         (UINT64_C(1) << 2)     // SELECT, user
 
56
#define SELECT_SMALL_RESULT     (UINT64_C(1) << 3)     // SELECT, user
 
57
#define SELECT_BIG_RESULT       (UINT64_C(1) << 4)     // SELECT, user
 
58
#define OPTION_FOUND_ROWS       (UINT64_C(1) << 5)     // SELECT, user
 
59
#define SELECT_NO_JOIN_CACHE    (UINT64_C(1) << 7)     // intern
 
60
#define OPTION_BIG_TABLES       (UINT64_C(1) << 8)     // THD, user
 
61
#define OPTION_BIG_SELECTS      (UINT64_C(1) << 9)     // THD, user
 
62
#define OPTION_LOG_OFF          (UINT64_C(1) << 10)    // THD, user
 
63
#define TMP_TABLE_ALL_COLUMNS   (UINT64_C(1) << 12)    // SELECT, intern
 
64
#define OPTION_WARNINGS         (UINT64_C(1) << 13)    // THD, user
 
65
#define OPTION_AUTO_IS_NULL     (UINT64_C(1) << 14)    // THD, user, binlog
 
66
#define OPTION_FOUND_COMMENT    (UINT64_C(1) << 15)    // SELECT, intern, parser
 
67
#define OPTION_SAFE_UPDATES     (UINT64_C(1) << 16)    // THD, user
 
68
#define OPTION_BUFFER_RESULT    (UINT64_C(1) << 17)    // SELECT, user
 
69
#define OPTION_NOT_AUTOCOMMIT   (UINT64_C(1) << 19)    // THD, user
 
70
#define OPTION_BEGIN            (UINT64_C(1) << 20)    // THD, intern
 
71
#define OPTION_TABLE_LOCK       (UINT64_C(1) << 21)    // THD, intern
 
72
#define OPTION_QUICK            (UINT64_C(1) << 22)    // SELECT (for DELETE)
 
73
#define OPTION_KEEP_LOG         (UINT64_C(1) << 23)    // THD, user
69
74
 
70
75
/* The following is used to detect a conflict with DISTINCT */
71
 
#define SELECT_ALL              (1ULL << 24)    // SELECT, user, parser
 
76
#define SELECT_ALL              (UINT64_C(1) << 24)    // SELECT, user, parser
72
77
 
73
78
/** The following can be set when importing tables in a 'wrong order'
74
79
   to suppress foreign key checks */
75
 
#define OPTION_NO_FOREIGN_KEY_CHECKS    (1ULL << 26) // THD, user, binlog
 
80
#define OPTION_NO_FOREIGN_KEY_CHECKS    (UINT64_C(1) << 26) // THD, user, binlog
76
81
/** The following speeds up inserts to InnoDB tables by suppressing unique
77
82
   key checks in some cases */
78
 
#define OPTION_RELAXED_UNIQUE_CHECKS    (1ULL << 27) // THD, user, binlog
79
 
#define SELECT_NO_UNLOCK                (1ULL << 28) // SELECT, intern
80
 
#define OPTION_SCHEMA_TABLE             (1ULL << 29) // SELECT, intern
 
83
#define OPTION_RELAXED_UNIQUE_CHECKS    (UINT64_C(1) << 27) // THD, user, binlog
 
84
#define SELECT_NO_UNLOCK                (UINT64_C(1) << 28) // SELECT, intern
 
85
#define OPTION_SCHEMA_TABLE             (UINT64_C(1) << 29) // SELECT, intern
81
86
/** Flag set if setup_tables already done */
82
 
#define OPTION_SETUP_TABLES_DONE        (1ULL << 30) // intern
 
87
#define OPTION_SETUP_TABLES_DONE        (UINT64_C(1) << 30) // intern
83
88
/** If not set then the thread will ignore all warnings with level notes. */
84
 
#define OPTION_SQL_NOTES                (1ULL << 31) // THD, user
 
89
#define OPTION_SQL_NOTES                (UINT64_C(1) << 31) // THD, user
85
90
/**
86
91
  Force the used temporary table to be a MyISAM table (because we will use
87
92
  fulltext functions when reading from it.
88
93
*/
89
 
#define TMP_TABLE_FORCE_MYISAM          (1ULL << 32)
90
 
#define OPTION_PROFILING                (1ULL << 33)
 
94
#define TMP_TABLE_FORCE_MYISAM          (UINT64_C(1) << 32)
 
95
#define OPTION_PROFILING                (UINT64_C(1) << 33)
91
96
 
92
97
/*
93
98
  Dont report errors for individual rows,
94
99
  But just report error on commit (or read ofcourse)
95
100
*/
96
 
#define OPTION_ALLOW_BATCH              (1ULL << 33) // THD, intern (slave)
 
101
#define OPTION_ALLOW_BATCH              (UINT64_C(1) << 33) // THD, intern (slave)
97
102
 
98
103
/**
99
104
  Maximum length of time zone name that we support
103
108
 
104
109
#define HOSTNAME_LENGTH 60
105
110
#define SYSTEM_CHARSET_MBMAXLEN 4
 
111
#define USERNAME_CHAR_LENGTH 16
106
112
#define NAME_CHAR_LEN   64              /* Field/table name length */
107
 
#define USERNAME_CHAR_LENGTH 16
108
113
#define NAME_LEN                (NAME_CHAR_LEN*SYSTEM_CHARSET_MBMAXLEN)
109
114
#define USERNAME_LENGTH         (USERNAME_CHAR_LENGTH*SYSTEM_CHARSET_MBMAXLEN)
110
115
 
118
123
#define COLUMN_COMMENT_MAXLEN 1024
119
124
#define INDEX_COMMENT_MAXLEN 1024
120
125
 
 
126
/* The length of the header part for each virtual column in the .frm file. */
 
127
#define FRM_VCOL_HEADER_SIZE 3
 
128
/*
 
129
  Maximum length of the expression statement defined for virtual columns.
 
130
*/
 
131
#define VIRTUAL_COLUMN_EXPRESSION_MAXLEN 255 - FRM_VCOL_HEADER_SIZE
121
132
 
122
133
/*
123
134
  USER_HOST_BUFF_SIZE -- length of string buffer, that is enough to contain
140
151
  COM_SLEEP, COM_QUIT, COM_INIT_DB, COM_QUERY, COM_FIELD_LIST,
141
152
  COM_CREATE_DB, COM_DROP_DB, COM_REFRESH, COM_SHUTDOWN,
142
153
  COM_PROCESS_INFO, COM_CONNECT, COM_PROCESS_KILL, COM_PING,
143
 
  COM_TIME, COM_CHANGE_USER, COM_BINLOG_DUMP,
144
 
  COM_CONNECT_OUT, COM_REGISTER_SLAVE,
 
154
  COM_TIME, COM_CHANGE_USER,
 
155
  COM_CONNECT_OUT,
145
156
  COM_SET_OPTION, COM_DAEMON,
146
157
  /* don't forget to update const char *command_name[] in sql_parse.cc */
147
158
 
194
205
#define REFRESH_TABLES          4       /* close all tables */
195
206
#define REFRESH_HOSTS           8       /* Flush host cache */
196
207
#define REFRESH_STATUS          16      /* Flush status variables */
197
 
#define REFRESH_THREADS         32      /* Flush thread cache */
198
 
#define REFRESH_SLAVE           64      /* Reset master info and restart slave
199
 
                                           thread */
200
 
#define REFRESH_MASTER          128     /* Remove all bin logs in the index
201
 
                                           and truncate the index */
202
208
 
203
209
/* The following can't be set with mysql_refresh() */
204
210
#define REFRESH_READ_LOCK       16384   /* Lock tables for read */
205
211
#define REFRESH_FAST            32768   /* Intern flag */
206
212
 
207
 
/* RESET (remove all queries) from query cache */
208
 
#define REFRESH_QUERY_CACHE     65536
209
 
#define REFRESH_QUERY_CACHE_FREE 0x20000L /* pack query cache */
210
 
#define REFRESH_DES_KEY_FILE    0x40000L
211
 
#define REFRESH_USER_RESOURCES  0x80000L
212
 
 
213
213
#define CLIENT_LONG_PASSWORD    1       /* new more secure passwords */
214
214
#define CLIENT_FOUND_ROWS       2       /* Found instead of affected rows */
215
215
#define CLIENT_LONG_FLAG        4       /* Get all column flags */
294
294
 
295
295
#define ONLY_KILL_QUERY         1
296
296
 
297
 
struct st_vio;                                  /* Only C */
298
 
typedef struct st_vio Vio;
299
 
 
300
297
#define MAX_TINYINT_WIDTH       3       /* Max width for a TINY w.o. sign */
301
298
#define MAX_SMALLINT_WIDTH      5       /* Max width for a SHORT w.o. sign */
302
299
#define MAX_MEDIUMINT_WIDTH     8       /* Max width for a INT24 w.o. sign */
308
305
#define DRIZZLE_PROTOCOL_NO_MORE_DATA 0xFE
309
306
 
310
307
 
311
 
typedef struct st_net {
312
 
  Vio *vio;
313
 
  unsigned char *buff,*buff_end,*write_pos,*read_pos;
314
 
  int fd;                                       /* For Perl DBI/dbd */
315
 
  /*
316
 
    The following variable is set if we are doing several queries in one
317
 
    command ( as in LOAD TABLE ... FROM MASTER ),
318
 
    and do not want to confuse the client with OK at the wrong time
319
 
  */
320
 
  unsigned long remain_in_buf,length, buf_length, where_b;
321
 
  unsigned long max_packet,max_packet_size;
322
 
  unsigned int pkt_nr,compress_pkt_nr;
323
 
  unsigned int write_timeout;
324
 
  unsigned int read_timeout;
325
 
  unsigned int retry_count;
326
 
  int fcntl;
327
 
  unsigned int *return_status;
328
 
  unsigned char reading_or_writing;
329
 
  char save_char;
330
 
  bool compress;
331
 
  /*
332
 
    Pointer to query object in query cache, do not equal NULL (0) for
333
 
    queries in cache that have not stored its results yet
334
 
  */
335
 
  /*
336
 
    Unused, please remove with the next incompatible ABI change.
337
 
  */
338
 
  unsigned char *unused;
339
 
  unsigned int last_errno;
340
 
  unsigned char error; 
341
 
  /** Client library error message buffer. Actually belongs to struct MYSQL. */
342
 
  char last_error[DRIZZLE_ERRMSG_SIZE];
343
 
  /** Client library sqlstate buffer. Set along with the error message. */
344
 
  char sqlstate[SQLSTATE_LENGTH+1];
345
 
  void *extension;
346
 
} NET;
347
308
 
348
309
 
349
310
#define packet_error (~(uint32_t) 0)
350
311
 
351
 
/* Start TINY at 1 because we removed DECIMAL from off the front of the enum */
352
 
enum enum_field_types { DRIZZLE_TYPE_TINY=1,
353
 
                        DRIZZLE_TYPE_SHORT,  DRIZZLE_TYPE_LONG,
354
 
                        DRIZZLE_TYPE_DOUBLE,
355
 
                        DRIZZLE_TYPE_NULL,   DRIZZLE_TYPE_TIMESTAMP,
356
 
                        DRIZZLE_TYPE_LONGLONG,
357
 
                        DRIZZLE_TYPE_DATE,   DRIZZLE_TYPE_TIME,
358
 
                        DRIZZLE_TYPE_DATETIME,
359
 
                        DRIZZLE_TYPE_NEWDATE, DRIZZLE_TYPE_VARCHAR,
360
 
      DRIZZLE_TYPE_NEWDECIMAL=253,
361
 
                        DRIZZLE_TYPE_ENUM=254,
362
 
                        DRIZZLE_TYPE_BLOB=255
363
 
};
364
 
 
365
 
 
366
 
/* Shutdown/kill enums and constants */ 
 
312
 
 
313
/* Shutdown/kill enums and constants */
367
314
 
368
315
/* Bits for THD::killable. */
369
316
#define DRIZZLE_SHUTDOWN_KILLABLE_CONNECT    (unsigned char)(1 << 0)
371
318
#define DRIZZLE_SHUTDOWN_KILLABLE_LOCK_TABLE (unsigned char)(1 << 2)
372
319
#define DRIZZLE_SHUTDOWN_KILLABLE_UPDATE     (unsigned char)(1 << 3)
373
320
 
374
 
enum drizzle_enum_shutdown_level {
375
 
  /*
376
 
    We want levels to be in growing order of hardness (because we use number
377
 
    comparisons). Note that DEFAULT does not respect the growing property, but
378
 
    it's ok.
379
 
  */
380
 
  SHUTDOWN_DEFAULT = 0,
381
 
  /* wait for existing connections to finish */
382
 
  SHUTDOWN_WAIT_CONNECTIONS= DRIZZLE_SHUTDOWN_KILLABLE_CONNECT,
383
 
  /* wait for existing trans to finish */
384
 
  SHUTDOWN_WAIT_TRANSACTIONS= DRIZZLE_SHUTDOWN_KILLABLE_TRANS,
385
 
  /* wait for existing updates to finish (=> no partial MyISAM update) */
386
 
  SHUTDOWN_WAIT_UPDATES= DRIZZLE_SHUTDOWN_KILLABLE_UPDATE,
387
 
  /* flush InnoDB buffers and other storage engines' buffers*/
388
 
  SHUTDOWN_WAIT_ALL_BUFFERS= (DRIZZLE_SHUTDOWN_KILLABLE_UPDATE << 1),
389
 
  /* don't flush InnoDB buffers, flush other storage engines' buffers*/
390
 
  SHUTDOWN_WAIT_CRITICAL_BUFFERS= (DRIZZLE_SHUTDOWN_KILLABLE_UPDATE << 1) + 1,
391
 
  /* Now the 2 levels of the KILL command */
392
 
  KILL_QUERY= 254,
393
 
  KILL_CONNECTION= 255
 
321
/* Start TINY at 1 because we removed DECIMAL from off the front of the enum */
 
322
enum enum_field_types { DRIZZLE_TYPE_TINY,
 
323
                        DRIZZLE_TYPE_LONG,
 
324
                        DRIZZLE_TYPE_DOUBLE,
 
325
                        DRIZZLE_TYPE_NULL,
 
326
                        DRIZZLE_TYPE_TIMESTAMP,
 
327
                        DRIZZLE_TYPE_LONGLONG,
 
328
                        DRIZZLE_TYPE_TIME,
 
329
                        DRIZZLE_TYPE_DATETIME,
 
330
                        DRIZZLE_TYPE_DATE,
 
331
                        DRIZZLE_TYPE_VARCHAR,
 
332
                        DRIZZLE_TYPE_VIRTUAL,
 
333
                        DRIZZLE_TYPE_NEWDECIMAL,
 
334
                        DRIZZLE_TYPE_ENUM,
 
335
                        DRIZZLE_TYPE_BLOB,
 
336
                        DRIZZLE_TYPE_MAX=DRIZZLE_TYPE_BLOB
394
337
};
395
338
 
396
339
 
412
355
 
413
356
#define net_new_transaction(net) ((net)->pkt_nr=0)
414
357
 
415
 
#ifdef __cplusplus
416
 
extern "C" {
417
 
#endif
418
 
 
419
 
bool    my_net_init(NET *net, Vio* vio);
420
 
void    my_net_local_init(NET *net);
421
 
void    net_end(NET *net);
422
 
void    net_clear(NET *net, bool clear_buffer);
423
 
bool    net_realloc(NET *net, size_t length);
424
 
bool    net_flush(NET *net);
425
 
bool    my_net_write(NET *net,const unsigned char *packet, size_t len);
426
 
bool    net_write_command(NET *net,unsigned char command,
427
 
                          const unsigned char *header, size_t head_len,
428
 
                          const unsigned char *packet, size_t len);
429
 
int32_t net_real_write(NET *net,const unsigned char *packet, size_t len);
430
 
uint32_t my_net_read(NET *net);
431
 
 
432
 
 
433
 
/** @TODO global.h is actually not needed here... only stdint and protocol.h */
434
 
#ifdef DRIZZLE_SERVER_GLOBAL_H
435
 
void my_net_set_write_timeout(NET *net, uint timeout);
436
 
void my_net_set_read_timeout(NET *net, uint timeout);
437
 
#endif
438
 
 
439
 
struct rand_struct {
440
 
  unsigned long seed1,seed2,max_value;
441
 
  double max_value_dbl;
442
 
};
443
 
 
444
 
#ifdef __cplusplus
445
 
}
446
 
#endif
447
358
 
448
359
  /* The following is for user defined functions */
449
360
 
473
384
  bool const_item;          /* 1 if function always returns the same value */
474
385
  void *extension;
475
386
} UDF_INIT;
476
 
/* 
477
 
  TODO: add a notion for determinism of the UDF. 
 
387
/*
 
388
  TODO: add a notion for determinism of the UDF.
478
389
  See Item_udf_func::update_used_tables ()
479
390
*/
480
391
 
482
393
#define NET_HEADER_SIZE 4               /* standard header size */
483
394
#define COMP_HEADER_SIZE 3              /* compression header extra size */
484
395
 
485
 
  /* Prototypes to password functions */
486
 
 
487
 
#ifdef __cplusplus
488
 
extern "C" {
489
 
#endif
490
 
 
491
 
/*
492
 
  These functions are used for authentication by client and server and
493
 
  implemented in sql/password.c
494
 
*/
495
 
 
496
 
void randominit(struct rand_struct *, uint32_t seed1, uint32_t seed2);
497
 
double my_rnd(struct rand_struct *);
498
 
void create_random_string(char *to, unsigned int length, struct rand_struct *rand_st);
499
 
 
500
 
void hash_password(uint32_t *to, const char *password, uint32_t password_len);
501
 
 
502
 
void make_scrambled_password(char *to, const char *password);
503
 
void scramble(char *to, const char *message, const char *password);
504
 
bool check_scramble(const char *reply, const char *message,
505
 
                       const unsigned char *hash_stage2);
506
 
void get_salt_from_password(unsigned char *res, const char *password);
507
 
void make_password_from_salt(char *to, const unsigned char *hash_stage2);
508
 
char *octet2hex(char *to, const char *str, unsigned int len);
509
 
 
510
 
/* end of password.c */
511
 
 
512
 
char *get_tty_password(const char *opt_message);
513
 
const char *drizzle_errno_to_sqlstate(unsigned int drizzle_errno);
514
 
 
515
 
/** @TODO Is it necessary to include all of drizzled/global.h here? */
516
 
#ifdef DRIZZLE_SERVER_GLOBAL_H
517
 
uint32_t net_field_length(uchar **packet);
518
 
uint64_t net_field_length_ll(uchar **packet);
519
 
uchar *net_store_length(uchar *pkg, uint64_t length);
520
 
#endif
521
 
 
522
 
#ifdef __cplusplus
523
 
}
524
 
#endif
525
396
 
526
397
#define NULL_LENGTH UINT32_MAX /* For net_store_length */
527
 
#define DRIZZLE_STMT_HEADER       4
528
 
#define DRIZZLE_LONG_DATA_HEADER  6
529
398
 
530
399
#endif