00001 /* 00002 * Drizzle Client & Protocol Library 00003 * 00004 * Copyright (C) 2008 Eric Day (eday@oddments.org) 00005 * All rights reserved. 00006 * 00007 * Use and distribution licensed under the BSD license. See 00008 * the COPYING file in this directory for full text. 00009 */ 00010 00016 #ifndef __DRIZZLE_STRUCTS_H 00017 #define __DRIZZLE_STRUCTS_H 00018 00019 #ifdef __cplusplus 00020 extern "C" { 00021 #endif 00022 00026 struct drizzle_st 00027 { 00028 uint16_t error_code; 00029 drizzle_options_t options; 00030 drizzle_verbose_t verbose; 00031 uint32_t con_count; 00032 uint32_t pfds_size; 00033 uint32_t query_count; 00034 uint32_t query_new; 00035 uint32_t query_running; 00036 int last_errno; 00037 int timeout; 00038 drizzle_con_st *con_list; 00039 void *context; 00040 drizzle_context_free_fn *context_free_fn; 00041 drizzle_event_watch_fn *event_watch_fn; 00042 void *event_watch_context; 00043 drizzle_log_fn *log_fn; 00044 void *log_context; 00045 struct pollfd *pfds; 00046 drizzle_query_st *query_list; 00047 char sqlstate[DRIZZLE_MAX_SQLSTATE_SIZE + 1]; 00048 char last_error[DRIZZLE_MAX_ERROR_SIZE]; 00049 }; 00050 00054 struct drizzle_con_tcp_st 00055 { 00056 in_port_t port; 00057 struct addrinfo *addrinfo; 00058 char *host; 00059 char host_buffer[NI_MAXHOST]; 00060 }; 00061 00065 struct drizzle_con_uds_st 00066 { 00067 struct addrinfo addrinfo; 00068 struct sockaddr_un sockaddr; 00069 }; 00070 00074 struct drizzle_con_st 00075 { 00076 uint8_t packet_number; 00077 uint8_t protocol_version; 00078 uint8_t state_current; 00079 short events; 00080 short revents; 00081 drizzle_capabilities_t capabilities; 00082 drizzle_charset_t charset; 00083 drizzle_command_t command; 00084 drizzle_con_options_t options; 00085 drizzle_con_socket_t socket_type; 00086 drizzle_con_status_t status; 00087 uint32_t max_packet_size; 00088 uint32_t result_count; 00089 uint32_t thread_id; 00090 int backlog; 00091 int fd; 00092 size_t buffer_size; 00093 size_t command_offset; 00094 size_t command_size; 00095 size_t command_total; 00096 size_t packet_size; 00097 struct addrinfo *addrinfo_next; 00098 uint8_t *buffer_ptr; 00099 uint8_t *command_buffer; 00100 uint8_t *command_data; 00101 void *context; 00102 drizzle_con_context_free_fn *context_free_fn; 00103 drizzle_st *drizzle; 00104 drizzle_con_st *next; 00105 drizzle_con_st *prev; 00106 drizzle_query_st *query; 00107 drizzle_result_st *result; 00108 drizzle_result_st *result_list; 00109 uint8_t *scramble; 00110 union 00111 { 00112 drizzle_con_tcp_st tcp; 00113 drizzle_con_uds_st uds; 00114 } socket; 00115 uint8_t buffer[DRIZZLE_MAX_BUFFER_SIZE]; 00116 char db[DRIZZLE_MAX_DB_SIZE]; 00117 char password[DRIZZLE_MAX_PASSWORD_SIZE]; 00118 uint8_t scramble_buffer[DRIZZLE_MAX_SCRAMBLE_SIZE]; 00119 char server_version[DRIZZLE_MAX_SERVER_VERSION_SIZE]; 00120 drizzle_state_fn *state_stack[DRIZZLE_STATE_STACK_SIZE]; 00121 char user[DRIZZLE_MAX_USER_SIZE]; 00122 }; 00123 00127 struct drizzle_query_st 00128 { 00129 drizzle_st *drizzle; 00130 drizzle_query_st *next; 00131 drizzle_query_st *prev; 00132 drizzle_query_options_t options; 00133 drizzle_query_state_t state; 00134 drizzle_con_st *con; 00135 drizzle_result_st *result; 00136 const char *string; 00137 size_t size; 00138 void *context; 00139 drizzle_query_context_free_fn *context_free_fn; 00140 }; 00141 00145 struct drizzle_result_st 00146 { 00147 drizzle_con_st *con; 00148 drizzle_result_st *next; 00149 drizzle_result_st *prev; 00150 drizzle_result_options_t options; 00151 00152 char info[DRIZZLE_MAX_INFO_SIZE]; 00153 uint16_t error_code; 00154 char sqlstate[DRIZZLE_MAX_SQLSTATE_SIZE + 1]; 00155 uint64_t insert_id; 00156 uint16_t warning_count; 00157 uint64_t affected_rows; 00158 00159 uint16_t column_count; 00160 uint16_t column_current; 00161 drizzle_column_st *column_list; 00162 drizzle_column_st *column; 00163 drizzle_column_st *column_buffer; 00164 00165 uint64_t row_count; 00166 uint64_t row_current; 00167 00168 uint16_t field_current; 00169 size_t field_total; 00170 size_t field_offset; 00171 size_t field_size; 00172 drizzle_field_t field; 00173 drizzle_field_t field_buffer; 00174 00175 uint64_t row_list_size; 00176 drizzle_row_t row; 00177 drizzle_row_t *row_list; 00178 size_t *field_sizes; 00179 size_t **field_sizes_list; 00180 }; 00181 00185 struct drizzle_column_st 00186 { 00187 drizzle_result_st *result; 00188 drizzle_column_st *next; 00189 drizzle_column_st *prev; 00190 drizzle_column_options_t options; 00191 char catalog[DRIZZLE_MAX_CATALOG_SIZE]; 00192 char db[DRIZZLE_MAX_DB_SIZE]; 00193 char table[DRIZZLE_MAX_TABLE_SIZE]; 00194 char orig_table[DRIZZLE_MAX_TABLE_SIZE]; 00195 char name[DRIZZLE_MAX_COLUMN_NAME_SIZE]; 00196 char orig_name[DRIZZLE_MAX_COLUMN_NAME_SIZE]; 00197 drizzle_charset_t charset; 00198 uint32_t size; 00199 size_t max_size; 00200 drizzle_column_type_t type; 00201 drizzle_column_flags_t flags; 00202 uint8_t decimals; 00203 uint8_t default_value[DRIZZLE_MAX_DEFAULT_VALUE_SIZE]; 00204 size_t default_value_size; 00205 }; 00206 00207 #ifdef __cplusplus 00208 } 00209 #endif 00210 00211 #endif /* __DRIZZLE_STRUCTS_H */