21#define SQLITE_SERVER_VERSION "SQLite Server using libdrizzle 0.1"
23#define DRIZZLE_RETURN_CHECK(__ret, __function, __drizzle) \
25 if ((__ret) != DRIZZLE_RETURN_OK) \
26 DRIZZLE_RETURN_ERROR(__function, __drizzle) \
29#define DRIZZLE_RETURN_ERROR(__function, __drizzle) \
31 printf(__function ":%s\n", drizzle_error(__drizzle)); \
35#define DRIZZLE_RETURN_CHECK_VAL(__ret, __function, __drizzle) \
37 if ((__ret) != DRIZZLE_RETURN_OK) \
39 printf(__function ":%s\n", drizzle_error(__drizzle)); \
57static int row_cb(
void *data,
int field_count,
char **fields,
char **columns);
59static void usage(
char *name);
61int main(
int argc,
char *argv[])
65 const char *host= NULL;
75 while((c = getopt(argc, argv,
"c:h:mp:v")) != -1)
80 count= (uint32_t)atoi(optarg);
92 port= (in_port_t)atoi(optarg);
105 if (argc != (optind + 1))
111 sqlite3_open(argv[optind], &(
server.db));
114 printf(
"sqlite3_open: could not open sqlite3 db\n");
120 printf(
"drizzle_create:NULL\n");
129 printf(
"drizzle_con_create:NULL\n");
188 (
const uint8_t *)
"ABCDEFGHIJKLMNOPQRST");
226 printf(
"Command=%u Data=%s\n", command,
227 data == NULL ?
"NULL" : (
char *)data);
234 !strcasecmp((
char *)data,
"SHOW DATABASES"))
249 if (strstr((
char *)data,
"@@version") != NULL)
258 server->send_columns=
true;
261 if (!strcasecmp((
char *)data,
"SHOW TABLES"))
263 sqlite_ret= sqlite3_exec(
server->db,
264 "SELECT name FROM sqlite_master WHERE type='table'",
273 if (sqlite_ret != SQLITE_OK)
275 if (sqlite_err == NULL)
276 printf(
"sqlite3_exec failed\n");
284 printf(
"sqlite3_exec:%s\n", sqlite_err);
285 sqlite3_free(sqlite_err);
306static int row_cb(
void *data,
int field_count,
char **fields,
char **columns)
313 if (
server->send_columns ==
true)
315 server->send_columns=
false;
334 for (x= 0; x < field_count; x++)
338 0 : (uint32_t)strlen(fields[x]));
354 for (x= 0; x < field_count; x++)
356 if (fields[x] == NULL)
359 sizes[x]= strlen(fields[x]);
369 for (x= 0; x < field_count; x++)
438 printf(
"\nusage: %s [-c <count>] [-h <host>] [-m] [-p <port>] [-v] "
439 "<sqlite3 db file>\n", name);
440 printf(
"\t-c <count> - Number of connections to accept before exiting\n");
441 printf(
"\t-h <host> - Host to listen on\n");
442 printf(
"\t-m - Use the MySQL protocol\n");
443 printf(
"\t-p <port> - Port to listen on\n");
444 printf(
"\t-v - Increase verbosity level\n");
@ DRIZZLE_COMMAND_FIELD_LIST
Drizzle Declarations for Servers.
void drizzle_column_set_orig_table(drizzle_column_st *column, const char *orig_table)
void drizzle_column_set_charset(drizzle_column_st *column, drizzle_charset_t charset)
void drizzle_column_set_size(drizzle_column_st *column, uint32_t size)
drizzle_return_t drizzle_column_write(drizzle_result_st *result, drizzle_column_st *column)
void drizzle_column_set_db(drizzle_column_st *column, const char *db)
void drizzle_column_set_type(drizzle_column_st *column, drizzle_column_type_t type)
void drizzle_column_set_name(drizzle_column_st *column, const char *name)
void drizzle_column_set_table(drizzle_column_st *column, const char *table)
void drizzle_column_set_catalog(drizzle_column_st *column, const char *catalog)
void drizzle_column_set_orig_name(drizzle_column_st *column, const char *orig_name)
void drizzle_column_free(drizzle_column_st *column)
drizzle_column_st * drizzle_column_create(drizzle_result_st *result, drizzle_column_st *column)
@ DRIZZLE_COLUMN_TYPE_VARCHAR
void drizzle_con_set_status(drizzle_con_st *con, drizzle_con_status_t status)
void drizzle_con_set_server_version(drizzle_con_st *con, const char *server_version)
void drizzle_con_set_scramble(drizzle_con_st *con, const uint8_t *scramble)
drizzle_return_t drizzle_con_listen(drizzle_con_st *con)
void drizzle_con_set_max_packet_size(drizzle_con_st *con, uint32_t max_packet_size)
void drizzle_con_set_capabilities(drizzle_con_st *con, drizzle_capabilities_t capabilities)
void drizzle_con_set_charset(drizzle_con_st *con, drizzle_charset_t charset)
void * drizzle_con_command_buffer(drizzle_con_st *con, drizzle_command_t *command, size_t *total, drizzle_return_t *ret_ptr)
void drizzle_con_set_thread_id(drizzle_con_st *con, uint32_t thread_id)
void drizzle_con_set_protocol_version(drizzle_con_st *con, uint8_t protocol_version)
void drizzle_con_set_tcp(drizzle_con_st *con, const char *host, in_port_t port)
void drizzle_con_add_options(drizzle_con_st *con, drizzle_con_options_t options)
@ DRIZZLE_CON_STATUS_NONE
@ DRIZZLE_CAPABILITIES_NONE
#define DRIZZLE_MAX_PACKET_SIZE
@ DRIZZLE_RETURN_LOST_CONNECTION
drizzle_return_t drizzle_field_write(drizzle_result_st *result, const drizzle_field_t field, size_t size, size_t total)
drizzle_return_t drizzle_handshake_client_read(drizzle_con_st *con)
drizzle_return_t drizzle_handshake_server_write(drizzle_con_st *con)
void drizzle_result_set_error(drizzle_result_st *result, const char *error)
void drizzle_result_set_error_code(drizzle_result_st *result, uint16_t error_code)
void drizzle_result_set_eof(drizzle_result_st *result, bool eof)
drizzle_return_t drizzle_result_write(drizzle_con_st *con, drizzle_result_st *result, bool flush)
void drizzle_result_calc_row_size(drizzle_result_st *result, const drizzle_field_t *field, const size_t *size)
void drizzle_result_set_column_count(drizzle_result_st *result, uint16_t column_count)
drizzle_result_st * drizzle_result_create(drizzle_con_st *con, drizzle_result_st *result)
void drizzle_result_free(drizzle_result_st *result)
drizzle_return_t drizzle_row_write(drizzle_result_st *result)
drizzle_con_st * drizzle_con_accept(drizzle_st *drizzle, drizzle_con_st *con, drizzle_return_t *ret_ptr)
struct drizzle_result_st drizzle_result_st
struct drizzle_con_st drizzle_con_st
struct drizzle_st drizzle_st
struct drizzle_column_st drizzle_column_st
drizzle_con_st * drizzle_con_create(drizzle_st *drizzle, drizzle_con_st *con)
const char * drizzle_error(const drizzle_st *drizzle)
void drizzle_set_verbose(drizzle_st *drizzle, drizzle_verbose_t verbose)
void drizzle_free(drizzle_st *drizzle)
void drizzle_add_options(drizzle_st *drizzle, drizzle_options_t options)
drizzle_st * drizzle_create(drizzle_st *drizzle)
void drizzle_con_free(drizzle_con_st *con)
static void server(drizzle_st *drizzle, drizzle_con_st *con, drizzle_result_st *result, drizzle_column_st *column)
#define DRIZZLE_RETURN_CHECK(__ret, __function, __drizzle)
int main(int argc, char *argv[])
static int row_cb(void *data, int field_count, char **fields, char **columns)
#define DRIZZLE_RETURN_CHECK_VAL(__ret, __function, __drizzle)
static void usage(char *name)
#define DRIZZLE_RETURN_ERROR(__function, __drizzle)
#define SQLITE_SERVER_VERSION
static void server_run(sqlite_server *server)
static drizzle_return_t send_version(sqlite_server *server)
drizzle_verbose_t verbose