mysql_com.h
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:15k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2000 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. /*
  14. ** Common definition between mysql server & client
  15. */
  16. #ifndef _mysql_com_h
  17. #define _mysql_com_h
  18. #define NAME_LEN 64 /* Field/table name length */
  19. #define HOSTNAME_LENGTH 60
  20. #define USERNAME_LENGTH 16
  21. #define SERVER_VERSION_LENGTH 60
  22. #define SQLSTATE_LENGTH 5
  23. #define LOCAL_HOST "localhost"
  24. #define LOCAL_HOST_NAMEDPIPE "."
  25. #if defined(__WIN__) && !defined( _CUSTOMCONFIG_)
  26. #define MYSQL_NAMEDPIPE "MySQL"
  27. #define MYSQL_SERVICENAME "MySQL"
  28. #endif /* __WIN__ */
  29. enum enum_server_command
  30. {
  31.   COM_SLEEP, COM_QUIT, COM_INIT_DB, COM_QUERY, COM_FIELD_LIST,
  32.   COM_CREATE_DB, COM_DROP_DB, COM_REFRESH, COM_SHUTDOWN, COM_STATISTICS,
  33.   COM_PROCESS_INFO, COM_CONNECT, COM_PROCESS_KILL, COM_DEBUG, COM_PING,
  34.   COM_TIME, COM_DELAYED_INSERT, COM_CHANGE_USER, COM_BINLOG_DUMP,
  35.   COM_TABLE_DUMP, COM_CONNECT_OUT, COM_REGISTER_SLAVE,
  36.   COM_PREPARE, COM_EXECUTE, COM_LONG_DATA, COM_CLOSE_STMT,
  37.   COM_RESET_STMT, COM_SET_OPTION,
  38.   /* don't forget to update const char *command_name[] in sql_parse.cc */
  39.   /* Must be last */
  40.   COM_END
  41. };
  42. /*
  43.   Length of random string sent by server on handshake; this is also length of
  44.   obfuscated password, recieved from client
  45. */
  46. #define SCRAMBLE_LENGTH 20
  47. #define SCRAMBLE_LENGTH_323 8
  48. /* length of password stored in the db: new passwords are preceeded with '*' */
  49. #define SCRAMBLED_PASSWORD_CHAR_LENGTH (SCRAMBLE_LENGTH*2+1)
  50. #define SCRAMBLED_PASSWORD_CHAR_LENGTH_323 (SCRAMBLE_LENGTH_323*2)
  51. #define NOT_NULL_FLAG 1 /* Field can't be NULL */
  52. #define PRI_KEY_FLAG 2 /* Field is part of a primary key */
  53. #define UNIQUE_KEY_FLAG 4 /* Field is part of a unique key */
  54. #define MULTIPLE_KEY_FLAG 8 /* Field is part of a key */
  55. #define BLOB_FLAG 16 /* Field is a blob */
  56. #define UNSIGNED_FLAG 32 /* Field is unsigned */
  57. #define ZEROFILL_FLAG 64 /* Field is zerofill */
  58. #define BINARY_FLAG 128 /* Field is binary   */
  59. /* The following are only sent to new clients */
  60. #define ENUM_FLAG 256 /* field is an enum */
  61. #define AUTO_INCREMENT_FLAG 512 /* field is a autoincrement field */
  62. #define TIMESTAMP_FLAG 1024 /* Field is a timestamp */
  63. #define SET_FLAG 2048 /* field is a set */
  64. #define NUM_FLAG 32768 /* Field is num (for clients) */
  65. #define PART_KEY_FLAG 16384 /* Intern; Part of some key */
  66. #define GROUP_FLAG 32768 /* Intern: Group field */
  67. #define UNIQUE_FLAG 65536 /* Intern: Used by sql_yacc */
  68. #define BINCMP_FLAG 131072 /* Intern: Used by sql_yacc */
  69. #define REFRESH_GRANT 1 /* Refresh grant tables */
  70. #define REFRESH_LOG 2 /* Start on new log file */
  71. #define REFRESH_TABLES 4 /* close all tables */
  72. #define REFRESH_HOSTS 8 /* Flush host cache */
  73. #define REFRESH_STATUS 16 /* Flush status variables */
  74. #define REFRESH_THREADS 32 /* Flush thread cache */
  75. #define REFRESH_SLAVE           64      /* Reset master info and restart slave
  76.    thread */
  77. #define REFRESH_MASTER          128     /* Remove all bin logs in the index
  78.    and truncate the index */
  79. /* The following can't be set with mysql_refresh() */
  80. #define REFRESH_READ_LOCK 16384 /* Lock tables for read */
  81. #define REFRESH_FAST 32768 /* Intern flag */
  82. /* RESET (remove all queries) from query cache */
  83. #define REFRESH_QUERY_CACHE 65536
  84. #define REFRESH_QUERY_CACHE_FREE 0x20000L /* pack query cache */
  85. #define REFRESH_DES_KEY_FILE 0x40000L
  86. #define REFRESH_USER_RESOURCES 0x80000L
  87. #define CLIENT_LONG_PASSWORD 1 /* new more secure passwords */
  88. #define CLIENT_FOUND_ROWS 2 /* Found instead of affected rows */
  89. #define CLIENT_LONG_FLAG 4 /* Get all column flags */
  90. #define CLIENT_CONNECT_WITH_DB 8 /* One can specify db on connect */
  91. #define CLIENT_NO_SCHEMA 16 /* Don't allow database.table.column */
  92. #define CLIENT_COMPRESS 32 /* Can use compression protocol */
  93. #define CLIENT_ODBC 64 /* Odbc client */
  94. #define CLIENT_LOCAL_FILES 128 /* Can use LOAD DATA LOCAL */
  95. #define CLIENT_IGNORE_SPACE 256 /* Ignore spaces before '(' */
  96. #define CLIENT_PROTOCOL_41 512 /* New 4.1 protocol */
  97. #define CLIENT_INTERACTIVE 1024 /* This is an interactive client */
  98. #define CLIENT_SSL              2048 /* Switch to SSL after handshake */
  99. #define CLIENT_IGNORE_SIGPIPE   4096    /* IGNORE sigpipes */
  100. #define CLIENT_TRANSACTIONS 8192 /* Client knows about transactions */
  101. #define CLIENT_RESERVED         16384   /* Old flag for 4.1 protocol  */
  102. #define CLIENT_SECURE_CONNECTION 32768  /* New 4.1 authentication */
  103. #define CLIENT_MULTI_STATEMENTS 65536   /* Enable/disable multi-stmt support */
  104. #define CLIENT_MULTI_RESULTS    131072  /* Enable/disable multi-results */
  105. #define CLIENT_REMEMBER_OPTIONS (((ulong) 1) << 31)
  106. #define SERVER_STATUS_IN_TRANS     1 /* Transaction has started */
  107. #define SERVER_STATUS_AUTOCOMMIT   2 /* Server in auto_commit mode */
  108. #define SERVER_STATUS_MORE_RESULTS 4 /* More results on server */
  109. #define SERVER_MORE_RESULTS_EXISTS 8    /* Multi query - next query exists */
  110. #define SERVER_QUERY_NO_GOOD_INDEX_USED 16
  111. #define SERVER_QUERY_NO_INDEX_USED      32
  112. #define SERVER_STATUS_DB_DROPPED        256 /* A database was dropped */
  113. #define MYSQL_ERRMSG_SIZE 512
  114. #define NET_READ_TIMEOUT 30 /* Timeout on read */
  115. #define NET_WRITE_TIMEOUT 60 /* Timeout on write */
  116. #define NET_WAIT_TIMEOUT 8*60*60 /* Wait for new query */
  117. struct st_vio; /* Only C */
  118. typedef struct st_vio Vio;
  119. #define MAX_TINYINT_WIDTH       3       /* Max width for a TINY w.o. sign */
  120. #define MAX_SMALLINT_WIDTH      5       /* Max width for a SHORT w.o. sign */
  121. #define MAX_MEDIUMINT_WIDTH     8       /* Max width for a INT24 w.o. sign */
  122. #define MAX_INT_WIDTH           10      /* Max width for a LONG w.o. sign */
  123. #define MAX_BIGINT_WIDTH        20      /* Max width for a LONGLONG */
  124. #define MAX_CHAR_WIDTH 255 /* Max length for a CHAR colum */
  125. #define MAX_BLOB_WIDTH 8192 /* Default width for blob */
  126. typedef struct st_net {
  127. #if !defined(CHECK_EMBEDDED_DIFFERENCES) || !defined(EMBEDDED_LIBRARY)
  128.   Vio* vio;
  129.   unsigned char *buff,*buff_end,*write_pos,*read_pos;
  130.   my_socket fd; /* For Perl DBI/dbd */
  131.   unsigned long max_packet,max_packet_size;
  132.   unsigned int pkt_nr,compress_pkt_nr;
  133.   unsigned int write_timeout, read_timeout, retry_count;
  134.   int fcntl;
  135.   my_bool compress;
  136.   /*
  137.     The following variable is set if we are doing several queries in one
  138.     command ( as in LOAD TABLE ... FROM MASTER ),
  139.     and do not want to confuse the client with OK at the wrong time
  140.   */
  141.   unsigned long remain_in_buf,length, buf_length, where_b;
  142.   unsigned int *return_status;
  143.   unsigned char reading_or_writing;
  144.   char save_char;
  145.   my_bool no_send_ok;
  146.   /*
  147.     Pointer to query object in query cache, do not equal NULL (0) for
  148.     queries in cache that have not stored its results yet
  149.   */
  150. #endif
  151.   char last_error[MYSQL_ERRMSG_SIZE], sqlstate[SQLSTATE_LENGTH+1];
  152.   unsigned int last_errno;
  153.   unsigned char error;
  154.   gptr query_cache_query;
  155.   my_bool report_error; /* We should report error (we have unreported error) */
  156.   my_bool return_errno;
  157. } NET;
  158. #define packet_error (~(unsigned long) 0)
  159. enum enum_field_types { MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY,
  160. MYSQL_TYPE_SHORT,  MYSQL_TYPE_LONG,
  161. MYSQL_TYPE_FLOAT,  MYSQL_TYPE_DOUBLE,
  162. MYSQL_TYPE_NULL,   MYSQL_TYPE_TIMESTAMP,
  163. MYSQL_TYPE_LONGLONG,MYSQL_TYPE_INT24,
  164. MYSQL_TYPE_DATE,   MYSQL_TYPE_TIME,
  165. MYSQL_TYPE_DATETIME, MYSQL_TYPE_YEAR,
  166. MYSQL_TYPE_NEWDATE,
  167. MYSQL_TYPE_ENUM=247,
  168. MYSQL_TYPE_SET=248,
  169. MYSQL_TYPE_TINY_BLOB=249,
  170. MYSQL_TYPE_MEDIUM_BLOB=250,
  171. MYSQL_TYPE_LONG_BLOB=251,
  172. MYSQL_TYPE_BLOB=252,
  173. MYSQL_TYPE_VAR_STRING=253,
  174. MYSQL_TYPE_STRING=254,
  175. MYSQL_TYPE_GEOMETRY=255
  176. };
  177. /* For backward compatibility */
  178. #define CLIENT_MULTI_QUERIES    CLIENT_MULTI_STATEMENTS    
  179. #define FIELD_TYPE_DECIMAL     MYSQL_TYPE_DECIMAL
  180. #define FIELD_TYPE_TINY        MYSQL_TYPE_TINY
  181. #define FIELD_TYPE_SHORT       MYSQL_TYPE_SHORT
  182. #define FIELD_TYPE_LONG        MYSQL_TYPE_LONG
  183. #define FIELD_TYPE_FLOAT       MYSQL_TYPE_FLOAT
  184. #define FIELD_TYPE_DOUBLE      MYSQL_TYPE_DOUBLE
  185. #define FIELD_TYPE_NULL        MYSQL_TYPE_NULL
  186. #define FIELD_TYPE_TIMESTAMP   MYSQL_TYPE_TIMESTAMP
  187. #define FIELD_TYPE_LONGLONG    MYSQL_TYPE_LONGLONG
  188. #define FIELD_TYPE_INT24       MYSQL_TYPE_INT24
  189. #define FIELD_TYPE_DATE        MYSQL_TYPE_DATE
  190. #define FIELD_TYPE_TIME        MYSQL_TYPE_TIME
  191. #define FIELD_TYPE_DATETIME    MYSQL_TYPE_DATETIME
  192. #define FIELD_TYPE_YEAR        MYSQL_TYPE_YEAR
  193. #define FIELD_TYPE_NEWDATE     MYSQL_TYPE_NEWDATE
  194. #define FIELD_TYPE_ENUM        MYSQL_TYPE_ENUM
  195. #define FIELD_TYPE_SET         MYSQL_TYPE_SET
  196. #define FIELD_TYPE_TINY_BLOB   MYSQL_TYPE_TINY_BLOB
  197. #define FIELD_TYPE_MEDIUM_BLOB MYSQL_TYPE_MEDIUM_BLOB
  198. #define FIELD_TYPE_LONG_BLOB   MYSQL_TYPE_LONG_BLOB
  199. #define FIELD_TYPE_BLOB        MYSQL_TYPE_BLOB
  200. #define FIELD_TYPE_VAR_STRING  MYSQL_TYPE_VAR_STRING
  201. #define FIELD_TYPE_STRING      MYSQL_TYPE_STRING
  202. #define FIELD_TYPE_CHAR        MYSQL_TYPE_TINY
  203. #define FIELD_TYPE_INTERVAL    MYSQL_TYPE_ENUM
  204. #define FIELD_TYPE_GEOMETRY    MYSQL_TYPE_GEOMETRY
  205. /* Shutdown/kill enums and constants */ 
  206. /* Bits for THD::killable. */
  207. #define MYSQL_SHUTDOWN_KILLABLE_CONNECT    (unsigned char)(1 << 0)
  208. #define MYSQL_SHUTDOWN_KILLABLE_TRANS      (unsigned char)(1 << 1)
  209. #define MYSQL_SHUTDOWN_KILLABLE_LOCK_TABLE (unsigned char)(1 << 2)
  210. #define MYSQL_SHUTDOWN_KILLABLE_UPDATE     (unsigned char)(1 << 3)
  211. enum mysql_enum_shutdown_level {
  212.   /*
  213.     We want levels to be in growing order of hardness (because we use number
  214.     comparisons). Note that DEFAULT does not respect the growing property, but
  215.     it's ok.
  216.   */
  217.   SHUTDOWN_DEFAULT = 0,
  218.   /* wait for existing connections to finish */
  219.   SHUTDOWN_WAIT_CONNECTIONS= MYSQL_SHUTDOWN_KILLABLE_CONNECT,
  220.   /* wait for existing trans to finish */
  221.   SHUTDOWN_WAIT_TRANSACTIONS= MYSQL_SHUTDOWN_KILLABLE_TRANS,
  222.   /* wait for existing updates to finish (=> no partial MyISAM update) */
  223.   SHUTDOWN_WAIT_UPDATES= MYSQL_SHUTDOWN_KILLABLE_UPDATE,
  224.   /* flush InnoDB buffers and other storage engines' buffers*/
  225.   SHUTDOWN_WAIT_ALL_BUFFERS= (MYSQL_SHUTDOWN_KILLABLE_UPDATE << 1),
  226.   /* don't flush InnoDB buffers, flush other storage engines' buffers*/
  227.   SHUTDOWN_WAIT_CRITICAL_BUFFERS= (MYSQL_SHUTDOWN_KILLABLE_UPDATE << 1) + 1,
  228.   /* Now the 2 levels of the KILL command */
  229. #if MYSQL_VERSION_ID >= 50000
  230.   KILL_QUERY= 254,
  231. #endif
  232.   KILL_CONNECTION= 255
  233. };
  234. /* options for mysql_set_option */
  235. enum enum_mysql_set_option
  236. {
  237.   MYSQL_OPTION_MULTI_STATEMENTS_ON,
  238.   MYSQL_OPTION_MULTI_STATEMENTS_OFF
  239. };
  240. #define net_new_transaction(net) ((net)->pkt_nr=0)
  241. #ifdef __cplusplus
  242. extern "C" {
  243. #endif
  244. my_bool my_net_init(NET *net, Vio* vio);
  245. void my_net_local_init(NET *net);
  246. void net_end(NET *net);
  247. void net_clear(NET *net);
  248. my_bool net_realloc(NET *net, unsigned long length);
  249. my_bool net_flush(NET *net);
  250. my_bool my_net_write(NET *net,const char *packet,unsigned long len);
  251. my_bool net_write_command(NET *net,unsigned char command,
  252.   const char *header, unsigned long head_len,
  253.   const char *packet, unsigned long len);
  254. int net_real_write(NET *net,const char *packet,unsigned long len);
  255. unsigned long my_net_read(NET *net);
  256. /*
  257.   The following function is not meant for normal usage
  258.   Currently it's used internally by manager.c
  259. */
  260. struct sockaddr;
  261. int my_connect(my_socket s, const struct sockaddr *name, unsigned int namelen,
  262.        unsigned int timeout);
  263. struct rand_struct {
  264.   unsigned long seed1,seed2,max_value;
  265.   double max_value_dbl;
  266. };
  267. #ifdef __cplusplus
  268. }
  269. #endif
  270.   /* The following is for user defined functions */
  271. enum Item_result {STRING_RESULT, REAL_RESULT, INT_RESULT, ROW_RESULT};
  272. typedef struct st_udf_args
  273. {
  274.   unsigned int arg_count; /* Number of arguments */
  275.   enum Item_result *arg_type; /* Pointer to item_results */
  276.   char **args; /* Pointer to argument */
  277.   unsigned long *lengths; /* Length of string arguments */
  278.   char *maybe_null; /* Set to 1 for all maybe_null args */
  279. } UDF_ARGS;
  280.   /* This holds information about the result */
  281. typedef struct st_udf_init
  282. {
  283.   my_bool maybe_null; /* 1 if function can return NULL */
  284.   unsigned int decimals; /* for real functions */
  285.   unsigned long max_length; /* For string functions */
  286.   char   *ptr; /* free pointer for function data */
  287.   my_bool const_item; /* 0 if result is independent of arguments */
  288. } UDF_INIT;
  289.   /* Constants when using compression */
  290. #define NET_HEADER_SIZE 4 /* standard header size */
  291. #define COMP_HEADER_SIZE 3 /* compression header extra size */
  292.   /* Prototypes to password functions */
  293. #ifdef __cplusplus
  294. extern "C" {
  295. #endif
  296. /*
  297.   These functions are used for authentication by client and server and
  298.   implemented in sql/password.c
  299. */
  300. void randominit(struct rand_struct *, unsigned long seed1,
  301.                 unsigned long seed2);
  302. double my_rnd(struct rand_struct *);
  303. void create_random_string(char *to, unsigned int length, struct rand_struct *rand_st);
  304. void hash_password(unsigned long *to, const char *password, unsigned int password_len);
  305. void make_scrambled_password_323(char *to, const char *password);
  306. void scramble_323(char *to, const char *message, const char *password);
  307. my_bool check_scramble_323(const char *, const char *message,
  308.                            unsigned long *salt);
  309. void get_salt_from_password_323(unsigned long *res, const char *password);
  310. void make_password_from_salt_323(char *to, const unsigned long *salt);
  311. void make_scrambled_password(char *to, const char *password);
  312. void scramble(char *to, const char *message, const char *password);
  313. my_bool check_scramble(const char *reply, const char *message,
  314.                        const unsigned char *hash_stage2);
  315. void get_salt_from_password(unsigned char *res, const char *password);
  316. void make_password_from_salt(char *to, const unsigned char *hash_stage2);
  317. /* end of password.c */
  318. char *get_tty_password(char *opt_message);
  319. const char *mysql_errno_to_sqlstate(unsigned int mysql_errno);
  320. /* Some other useful functions */
  321. my_bool my_init(void);
  322. int load_defaults(const char *conf_file, const char **groups,
  323.   int *argc, char ***argv);
  324. my_bool my_thread_init(void);
  325. void my_thread_end(void);
  326. #ifdef _global_h
  327. ulong STDCALL net_field_length(uchar **packet);
  328. my_ulonglong net_field_length_ll(uchar **packet);
  329. char *net_store_length(char *pkg, ulonglong length);
  330. #endif
  331. #ifdef __cplusplus
  332. }
  333. #endif
  334. #define NULL_LENGTH ((unsigned long) ~0) /* For net_store_length */
  335. #define MYSQL_STMT_HEADER       4
  336. #define MYSQL_LONG_DATA_HEADER  6
  337. #endif