From: Enlightenment S. <no-...@en...> - 2011-02-08 23:44:25
|
Log: fix init, add esql_res_error_get and ESQL_EVENT_CONNECT, some other stuff, whatever Author: discomfitor Date: 2011-02-08 15:43:45 -0800 (Tue, 08 Feb 2011) New Revision: 56827 Trac: http://trac.enlightenment.org/e/changeset/56827 Modified: trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h trunk/PROTO/esskyuehl/src/lib/esql.c trunk/PROTO/esskyuehl/src/lib/esql_events.c trunk/PROTO/esskyuehl/src/lib/esql_private.h trunk/PROTO/esskyuehl/src/lib/esql_res.c Modified: trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h =================================================================== --- trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h 2011-02-08 23:30:00 UTC (rev 56826) +++ trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h 2011-02-08 23:43:45 UTC (rev 56827) @@ -18,7 +18,6 @@ #define ESQL_H #include <Eina.h> -#include <Ecore.h> #ifdef EAPI # undef EAPI @@ -43,6 +42,7 @@ #endif /* ! _WIN32 */ extern int ESQL_EVENT_ERROR; +extern int ESQL_EVENT_CONNECT; extern int ESQL_EVENT_RESULT; typedef struct Esql Esql; @@ -116,6 +116,7 @@ /* res */ EAPI Esql *esql_res_esql_get(Esql_Res *res); +EAPI const char *esql_res_error_get(Esql_Res *res); EAPI int esql_res_rows_count(Esql_Res *res); EAPI int esql_res_cols_count(Esql_Res *res); EAPI long long int esql_res_rows_affected(Esql_Res *res); Modified: trunk/PROTO/esskyuehl/src/lib/esql.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql.c 2011-02-08 23:30:00 UTC (rev 56826) +++ trunk/PROTO/esskyuehl/src/lib/esql.c 2011-02-08 23:43:45 UTC (rev 56827) @@ -30,6 +30,7 @@ static int esql_init_count_ = 0; int ESQL_EVENT_ERROR = 0; +int ESQL_EVENT_CONNECT = 0; int ESQL_EVENT_RESULT = 0; @@ -54,11 +55,13 @@ goto eina_fail; } if (!ecore_init()) goto fail; - return esql_init_count_; ESQL_EVENT_ERROR = ecore_event_type_new(); ESQL_EVENT_RESULT = ecore_event_type_new(); + ESQL_EVENT_CONNECT = ecore_event_type_new(); + return esql_init_count_; + fail: eina_log_domain_unregister(esql_log_dom); esql_log_dom = -1; Modified: trunk/PROTO/esskyuehl/src/lib/esql_events.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_events.c 2011-02-08 23:30:00 UTC (rev 56826) +++ trunk/PROTO/esskyuehl/src/lib/esql_events.c 2011-02-08 23:43:45 UTC (rev 56827) @@ -99,7 +99,15 @@ break; default: ERR("Connection error: %s", e->backend.error_get(e)); - ecore_event_add(ESQL_EVENT_ERROR, (void*)e->backend.error_get(e), (Ecore_End_Cb)esql_fake_free, NULL); + { + Esql_Res *res; + + res = calloc(1, sizeof(Esql_Res)); + EINA_SAFETY_ON_NULL_GOTO(res, out); + res->e = e; + res->error = e->backend.error_get(e); + ecore_event_add(ESQL_EVENT_ERROR, res, (Ecore_End_Cb)esql_res_free, NULL); + } return ECORE_CALLBACK_CANCEL; } return ECORE_CALLBACK_RENEW; Modified: trunk/PROTO/esskyuehl/src/lib/esql_private.h =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_private.h 2011-02-08 23:30:00 UTC (rev 56826) +++ trunk/PROTO/esskyuehl/src/lib/esql_private.h 2011-02-08 23:43:45 UTC (rev 56827) @@ -5,8 +5,8 @@ #ifndef ESQL_PRIV_H #define ESQL_PRIV_H -#include <Eina.h> #include <Esskyuehl.h> +#include <Ecore.h> #include <time.h> #ifdef HAVE_ALLOCA_H @@ -80,6 +80,7 @@ struct Esql_Res { Esql *e; /* parent object */ + const char *error; Eina_Inlist *rows; int row_count; Modified: trunk/PROTO/esskyuehl/src/lib/esql_res.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_res.c 2011-02-08 23:30:00 UTC (rev 56826) +++ trunk/PROTO/esskyuehl/src/lib/esql_res.c 2011-02-08 23:43:45 UTC (rev 56827) @@ -100,7 +100,14 @@ return res->e; } +const char * +esql_res_error_get(Esql_Res *res) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(res, NULL); + return res->error; +} + int esql_res_rows_count(Esql_Res *res) { |
From: Enlightenment S. <no-...@en...> - 2011-02-09 05:16:03
|
Log: add drizzle support Author: discomfitor Date: 2011-02-08 21:15:55 -0800 (Tue, 08 Feb 2011) New Revision: 56835 Trac: http://trac.enlightenment.org/e/changeset/56835 Modified: trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h Modified: trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h =================================================================== --- trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h 2011-02-09 04:39:03 UTC (rev 56834) +++ trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h 2011-02-09 05:15:55 UTC (rev 56835) @@ -82,6 +82,7 @@ typedef enum { ESQL_TYPE_NONE, +#define ESQL_TYPE_DRIZZLE ESQL_TYPE_MYSQL /**< Drizzle supports the mysql protocol */ ESQL_TYPE_MYSQL } Esql_Type; |
From: Enlightenment S. <no-...@en...> - 2011-02-14 16:22:38
|
Log: formatting Author: discomfitor Date: 2011-02-14 08:22:31 -0800 (Mon, 14 Feb 2011) New Revision: 57028 Trac: http://trac.enlightenment.org/e/changeset/57028 Modified: trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h trunk/PROTO/esskyuehl/src/lib/esql.c trunk/PROTO/esskyuehl/src/lib/esql_connect.c trunk/PROTO/esskyuehl/src/lib/esql_events.c trunk/PROTO/esskyuehl/src/lib/esql_private.h trunk/PROTO/esskyuehl/src/lib/esql_query.c trunk/PROTO/esskyuehl/src/lib/esql_res.c Modified: trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h =================================================================== --- trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h 2011-02-14 16:14:26 UTC (rev 57027) +++ trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h 2011-02-14 16:22:31 UTC (rev 57028) @@ -42,7 +42,7 @@ # endif #endif /* ! _WIN32 */ -#define ESQL_DEFAULT_PORT_MYSQL "3306" /**< Convenience define for default MySQL port */ +#define ESQL_DEFAULT_PORT_MYSQL "3306" /**< Convenience define for default MySQL port */ #define ESQL_DEFAULT_PORT_POSTGRESQL "5432" /**< Convenience define for default PostgreSQL port */ /** @@ -64,7 +64,7 @@ * @typedef Esql * Base Esskyuehl object for connecting to servers */ -typedef struct Esql Esql; +typedef struct Esql Esql; /** * @typedef Esql_Res * Esskyuehl result set object for managing query results @@ -116,25 +116,25 @@ typedef struct Esql_Cell { EINA_INLIST; /**< use to iterate through cells */ - Esql_Row *row; /**< parent row */ + Esql_Row *row; /**< parent row */ Esql_Cell_Type type; - const char *colname; /**< NOT stringshared */ + const char *colname; /**< NOT stringshared */ union { - char c; /**< ESQL_CELL_TYPE_TINYINT */ - short s; /**< ESQL_CELL_TYPE_SHORT */ - int i; /**< ESQL_CELL_TYPE_LONG */ - long long int l; /**< ESQL_CELL_TYPE_LONGLONG */ - float f; /**< ESQL_CELL_TYPE_FLOAT */ - double d; /**< ESQL_CELL_TYPE_DOUBLE */ - const char *string; /**< ESQL_CELL_TYPE_STRING */ + char c; /**< ESQL_CELL_TYPE_TINYINT */ + short s; /**< ESQL_CELL_TYPE_SHORT */ + int i; /**< ESQL_CELL_TYPE_LONG */ + long long int l; /**< ESQL_CELL_TYPE_LONGLONG */ + float f; /**< ESQL_CELL_TYPE_FLOAT */ + double d; /**< ESQL_CELL_TYPE_DOUBLE */ + const char *string; /**< ESQL_CELL_TYPE_STRING */ const unsigned char *blob; /**< ESQL_CELL_TYPE_BLOB */ - struct tm tm; /**< ESQL_CELL_TYPE_TIMESTAMP */ - struct timeval tv; /**< ESQL_CELL_TYPE_TIME */ + struct tm tm; /**< ESQL_CELL_TYPE_TIMESTAMP */ + struct timeval tv; /**< ESQL_CELL_TYPE_TIME */ /** ESQL_CELL_TYPE_UNKNOWN == #NULL */ } value; - size_t len; /**< only valid with ESQL_CELL_TYPE_BLOB and ESQL_CELL_TYPE_STRING */ + size_t len; /**< only valid with ESQL_CELL_TYPE_BLOB and ESQL_CELL_TYPE_STRING */ } Esql_Cell; /** @} */ /* lib */ @@ -142,35 +142,43 @@ EAPI int esql_shutdown(void); /* esql */ -Esql *esql_new(Esql_Type type); -EAPI void *esql_data_get(Esql *e); -EAPI void esql_data_set(Esql *e, void *data); -EAPI Eina_Bool esql_type_set(Esql *e, Esql_Type type); +Esql *esql_new(Esql_Type type); +EAPI void *esql_data_get(Esql *e); +EAPI void esql_data_set(Esql *e, + void *data); +EAPI Eina_Bool esql_type_set(Esql *e, + Esql_Type type); EAPI Esql_Type esql_type_get(Esql *e); -EAPI void esql_free(Esql *e); +EAPI void esql_free(Esql *e); /* connect */ -EAPI Eina_Bool esql_connect(Esql *e, const char *addr, const char *user, - const char *passwd); -EAPI Eina_Bool esql_disconnect(Esql *e); -EAPI Eina_Bool esql_database_set(Esql *e, const char *database_name); +EAPI Eina_Bool esql_connect(Esql *e, + const char *addr, + const char *user, + const char *passwd); +EAPI Eina_Bool esql_disconnect(Esql *e); +EAPI Eina_Bool esql_database_set(Esql *e, + const char *database_name); EAPI const char *esql_database_get(Esql *e); /* query */ -EAPI Eina_Bool esql_query(Esql *e, const char *query); -EAPI Eina_Bool esql_query_args(Esql *e, const char *fmt, ...); +EAPI Eina_Bool esql_query(Esql *e, + const char *query); +EAPI Eina_Bool esql_query_args(Esql *e, + const char *fmt, + ...); /* res */ -EAPI Esql *esql_res_esql_get(Esql_Res *res); -EAPI const char *esql_res_error_get(Esql_Res *res); -EAPI int esql_res_rows_count(Esql_Res *res); -EAPI int esql_res_cols_count(Esql_Res *res); -EAPI long long int esql_res_rows_affected(Esql_Res *res); -EAPI long long int esql_res_id(Esql_Res *res); +EAPI Esql *esql_res_esql_get(Esql_Res *res); +EAPI const char *esql_res_error_get(Esql_Res *res); +EAPI int esql_res_rows_count(Esql_Res *res); +EAPI int esql_res_cols_count(Esql_Res *res); +EAPI long long int esql_res_rows_affected(Esql_Res *res); +EAPI long long int esql_res_id(Esql_Res *res); EAPI Eina_Iterator *esql_res_row_iterator_new(Esql_Res *res); /* row */ EAPI Eina_Inlist *esql_row_cells_get(Esql_Row *r); -EAPI int esql_row_cell_count(Esql_Row *r); -EAPI Esql_Res *esql_row_res_get(Esql_Row *r); +EAPI int esql_row_cell_count(Esql_Row *r); +EAPI Esql_Res *esql_row_res_get(Esql_Row *r); #endif Modified: trunk/PROTO/esskyuehl/src/lib/esql.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql.c 2011-02-14 16:14:26 UTC (rev 57027) +++ trunk/PROTO/esskyuehl/src/lib/esql.c 2011-02-14 16:22:31 UTC (rev 57028) @@ -8,7 +8,7 @@ * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License @@ -33,10 +33,9 @@ int ESQL_EVENT_CONNECT = 0; int ESQL_EVENT_RESULT = 0; - /** * @brief Initialize Esql - * + * * This function initializes events and * logging functions for Esql and must be called prior to making any * calls. @@ -72,10 +71,10 @@ /** * @brief Shut down Esql - * + * * This function uninitializes memory allocated by esql_init. * Call when no further Esql functions will be used. - * @return The number of times the esql_init has been called, or -1 if + * @return The number of times the esql_init has been called, or -1 if * all occurrences of esql have been shut down */ int @@ -90,6 +89,7 @@ esql_log_dom = -1; return esql_init_count_; } + /** @} */ /** * @defgroup Esql_Object Objects @@ -132,7 +132,8 @@ * @param data The data to associate */ void -esql_data_set(Esql *e, void *data) +esql_data_set(Esql *e, + void *data) { EINA_SAFETY_ON_NULL_RETURN(e); e->data = data; @@ -149,7 +150,8 @@ * @return EINA_TRUE on success, else EINA_FALSE */ Eina_Bool -esql_type_set(Esql *e, Esql_Type type) +esql_type_set(Esql *e, + Esql_Type type) { EINA_SAFETY_ON_NULL_RETURN_VAL(e, EINA_FALSE); @@ -162,9 +164,11 @@ case ESQL_TYPE_MYSQL: esql_mysac_init(e); break; + case ESQL_TYPE_POSTGRESQL: esql_postgresql_init(e); break; + default: return EINA_FALSE; } @@ -199,4 +203,5 @@ if (e->backend.free) e->backend.free(e); free(e); } - /** @} */ + +/** @} */ Modified: trunk/PROTO/esskyuehl/src/lib/esql_connect.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_connect.c 2011-02-14 16:14:26 UTC (rev 57027) +++ trunk/PROTO/esskyuehl/src/lib/esql_connect.c 2011-02-14 16:22:31 UTC (rev 57028) @@ -8,7 +8,7 @@ * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License @@ -37,17 +37,19 @@ * @return EINA_TRUE if the connection could be started, else EINA_FALSE */ Eina_Bool -esql_connect(Esql *e, const char *addr, const char *user, - const char *passwd) +esql_connect(Esql *e, + const char *addr, + const char *user, + const char *passwd) { int ret, fd; - + EINA_SAFETY_ON_NULL_RETURN_VAL(e, EINA_FALSE); EINA_SAFETY_ON_TRUE_RETURN_VAL(e->type == ESQL_TYPE_NONE, EINA_FALSE); EINA_SAFETY_ON_TRUE_RETURN_VAL(!e->backend.db && (e->type == ESQL_TYPE_MYSQL), EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(addr, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(user, EINA_FALSE); - + if (e->connected) { ERR("Connection error: already connected!"); @@ -100,10 +102,11 @@ * @return EINA_TRUE on successful queue of the action, else EINA_FALSE */ Eina_Bool -esql_database_set(Esql *e, const char *database_name) +esql_database_set(Esql *e, + const char *database_name) { DBG("(e=%p, database_name='%s')", e, database_name); - + EINA_SAFETY_ON_NULL_RETURN_VAL(e, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(database_name, EINA_FALSE); if (e->database && (!e->backend.database_set)) @@ -124,7 +127,7 @@ e->backend_set_funcs = eina_list_append(e->backend_set_funcs, esql_database_set); e->backend_set_params = eina_list_append(e->backend_set_params, strdup(database_name)); } - + return EINA_TRUE; } @@ -140,4 +143,5 @@ return e->database; } + /** @} */ Modified: trunk/PROTO/esskyuehl/src/lib/esql_events.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_events.c 2011-02-14 16:14:26 UTC (rev 57027) +++ trunk/PROTO/esskyuehl/src/lib/esql_events.c 2011-02-14 16:22:31 UTC (rev 57028) @@ -8,7 +8,7 @@ * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License @@ -22,17 +22,18 @@ #include <Esskyuehl.h> #include <esql_private.h> -#define UPDATE_LISTS(TYPE) do { \ - if (e->backend_set_funcs && (e->backend_set_funcs->data == esql_##TYPE)) \ - { \ - free(e->backend_set_params->data); \ - e->backend_set_funcs = eina_list_remove_list(e->backend_set_funcs, e->backend_set_funcs); \ - e->backend_set_params = eina_list_remove_list(e->backend_set_params, e->backend_set_params); \ - } \ -} while (0) +#define UPDATE_LISTS(TYPE) do { \ + if (e->backend_set_funcs && (e->backend_set_funcs->data == esql_##TYPE)) \ + { \ + free(e->backend_set_params->data); \ + e->backend_set_funcs = eina_list_remove_list(e->backend_set_funcs, e->backend_set_funcs); \ + e->backend_set_params = eina_list_remove_list(e->backend_set_params, e->backend_set_params); \ + } \ + } while (0) static void -esql_fake_free(void *data __UNUSED__, void *data2 __UNUSED__) +esql_fake_free(void *data __UNUSED__, + void *data2 __UNUSED__) { } @@ -50,10 +51,12 @@ e->connected = EINA_TRUE; ecore_event_add(ESQL_EVENT_CONNECT, e, (Ecore_End_Cb)esql_fake_free, NULL); break; + case ESQL_CONNECT_TYPE_DATABASE_SET: INFO("Working database is now '%s'", e->database); UPDATE_LISTS(database_set); break; + case ESQL_CONNECT_TYPE_QUERY: UPDATE_LISTS(query); { @@ -66,6 +69,7 @@ ecore_event_add(ESQL_EVENT_RESULT, res, (Ecore_End_Cb)esql_res_free, NULL); } break; + default: break; } @@ -113,7 +117,8 @@ } Eina_Bool -esql_connect_handler(Esql *e, Ecore_Fd_Handler *fdh) +esql_connect_handler(Esql *e, + Ecore_Fd_Handler *fdh) { DBG("(e=%p, fdh=%p)", e, fdh); @@ -125,29 +130,34 @@ esql_call_complete(e); ecore_main_fd_handler_active_set(fdh, ECORE_FD_WRITE); break; + case ECORE_FD_READ | ECORE_FD_WRITE: ecore_main_fd_handler_active_set(fdh, ECORE_FD_READ | ECORE_FD_WRITE); break; + case ECORE_FD_READ: ecore_main_fd_handler_active_set(fdh, ECORE_FD_READ); break; + case ECORE_FD_WRITE: ecore_main_fd_handler_active_set(fdh, ECORE_FD_WRITE); break; + default: - { - Esql_Res *res; + { + Esql_Res *res; - res = calloc(1, sizeof(Esql_Res)); - EINA_SAFETY_ON_NULL_RETURN_VAL(res, ECORE_CALLBACK_RENEW); - res->e = e; - e->res = res; - res->error = e->backend.error_get(e); - ERR("Connection error: %s", res->error); - ecore_event_add(ESQL_EVENT_ERROR, res, (Ecore_End_Cb)esql_res_free, NULL); - } + res = calloc(1, sizeof(Esql_Res)); + EINA_SAFETY_ON_NULL_RETURN_VAL(res, ECORE_CALLBACK_RENEW); + res->e = e; + e->res = res; + res->error = e->backend.error_get(e); + ERR("Connection error: %s", res->error); + ecore_event_add(ESQL_EVENT_ERROR, res, (Ecore_End_Cb)esql_res_free, NULL); + } e->fdh = NULL; return ECORE_CALLBACK_CANCEL; } return ECORE_CALLBACK_RENEW; } + Modified: trunk/PROTO/esskyuehl/src/lib/esql_private.h =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_private.h 2011-02-14 16:14:26 UTC (rev 57027) +++ trunk/PROTO/esskyuehl/src/lib/esql_private.h 2011-02-14 16:22:31 UTC (rev 57028) @@ -22,14 +22,14 @@ extern int esql_log_dom; -#define DBG(...) EINA_LOG_DOM_DBG(esql_log_dom, __VA_ARGS__) -#define INFO(...) EINA_LOG_DOM_INFO(esql_log_dom, __VA_ARGS__) -#define WARN(...) EINA_LOG_DOM_WARN(esql_log_dom, __VA_ARGS__) -#define ERR(...) EINA_LOG_DOM_ERR(esql_log_dom, __VA_ARGS__) -#define CRI(...) EINA_LOG_DOM_CRIT(esql_log_dom, __VA_ARGS__) +#define DBG(...) EINA_LOG_DOM_DBG(esql_log_dom, __VA_ARGS__) +#define INFO(...) EINA_LOG_DOM_INFO(esql_log_dom, __VA_ARGS__) +#define WARN(...) EINA_LOG_DOM_WARN(esql_log_dom, __VA_ARGS__) +#define ERR(...) EINA_LOG_DOM_ERR(esql_log_dom, __VA_ARGS__) +#define CRI(...) EINA_LOG_DOM_CRIT(esql_log_dom, __VA_ARGS__) #if !defined(strdupa) -# define strdupa(str) strcpy(alloca(strlen(str) + 1), str) +# define strdupa(str) strcpy(alloca(strlen(str) + 1), str) #endif #if !defined(strndupa) @@ -44,59 +44,59 @@ ESQL_CONNECT_TYPE_QUERY } Esql_Connect_Type; -typedef const char *(*Esql_Error_Cb)(Esql *); -typedef void (*Esql_Cb)(Esql *); +typedef const char * (*Esql_Error_Cb)(Esql *); +typedef void (*Esql_Cb)(Esql *); typedef Ecore_Fd_Handler_Flags (*Esql_Connect_Cb)(Esql *); -typedef void (*Esql_Setup_Cb)(Esql *, const char *, const char *, const char *); -typedef void (*Esql_Set_Cb)(Esql *, const char *); -typedef int (*Esql_Fd_Cb)(Esql *); -typedef char *(*Esql_Escape_Cb)(Esql *, const char *, va_list); -typedef void (*Esql_Res_Cb)(Esql_Res *); -typedef Esql_Row *(*Esql_Row_Cb)(Esql_Res *); +typedef void (*Esql_Setup_Cb)(Esql *, const char *, const char *, const char *); +typedef void (*Esql_Set_Cb)(Esql *, const char *); +typedef int (*Esql_Fd_Cb)(Esql *); +typedef char * (*Esql_Escape_Cb)(Esql *, const char *, va_list); +typedef void (*Esql_Res_Cb)(Esql_Res *); +typedef Esql_Row * (*Esql_Row_Cb)(Esql_Res *); -typedef const char *(*Esql_Row_Col_Name_Cb)(Esql_Row *); +typedef const char * (*Esql_Row_Col_Name_Cb)(Esql_Row *); struct Esql { struct { - void *db; /* db object pointer */ - char *conn_str; /* unused for some db types */ - int conn_str_len; - Esql_Error_Cb error_get; + void *db; /* db object pointer */ + char *conn_str; /* unused for some db types */ + int conn_str_len; + Esql_Error_Cb error_get; Esql_Connect_Cb connect; - Esql_Cb disconnect; - Esql_Cb free; - Esql_Setup_Cb setup; - Esql_Set_Cb database_set; - Esql_Set_Cb query; + Esql_Cb disconnect; + Esql_Cb free; + Esql_Setup_Cb setup; + Esql_Set_Cb database_set; + Esql_Set_Cb query; Esql_Connect_Cb database_send; Esql_Connect_Cb io; - Esql_Fd_Cb fd_get; - Esql_Escape_Cb escape; - Esql_Res_Cb res; - Esql_Res_Cb res_free; + Esql_Fd_Cb fd_get; + Esql_Escape_Cb escape; + Esql_Res_Cb res; + Esql_Res_Cb res_free; } backend; - const char *database; + const char *database; Ecore_Fd_Handler *fdh; - Eina_Bool connected : 1; - Esql_Res *res; /* current working result */ - Esql_Type type; + Eina_Bool connected : 1; + Esql_Res *res; /* current working result */ + Esql_Type type; Esql_Connect_Type current; - Eina_List *backend_set_funcs; /* Esql_Set_Cb */ - Eina_List *backend_set_params; /* char * */ - void *data; + Eina_List *backend_set_funcs; /* Esql_Set_Cb */ + Eina_List *backend_set_params; /* char * */ + void *data; }; struct Esql_Res { - Esql *e; /* parent object */ - const char *error; + Esql *e; /* parent object */ + const char *error; - Eina_Inlist *rows; - int row_count; - int num_cols; + Eina_Inlist *rows; + int row_count; + int num_cols; long long int affected; long long int id; @@ -108,12 +108,12 @@ struct Esql_Row { - EINA_INLIST; + EINA_INLIST; - Esql_Res *res; + Esql_Res *res; Eina_Inlist *cells; - int num_cells; + int num_cells; struct { void *row; @@ -122,20 +122,26 @@ typedef struct Esql_Row_Iterator { - Eina_Iterator iterator; + Eina_Iterator iterator; const Esql_Row *head; const Esql_Row *current; } Esql_Row_Iterator; -void esql_mysac_init(Esql *e); -void esql_postgresql_init(Esql *e); +void esql_mysac_init(Esql *e); +void esql_postgresql_init(Esql *e); -void esql_res_free(void *data __UNUSED__, Esql_Res *res); -void esql_row_free(Esql_Row *r); +void esql_res_free(void *data __UNUSED__, + Esql_Res *res); +void esql_row_free(Esql_Row *r); -Eina_Bool esql_connect_handler(Esql *e, Ecore_Fd_Handler *fdh); +Eina_Bool esql_connect_handler(Esql *e, + Ecore_Fd_Handler *fdh); -char *esql_query_escape(Eina_Bool backslashes, size_t *len, const char *fmt, va_list args); -char *esql_string_escape(Eina_Bool backslashes, const char *s); +char *esql_query_escape(Eina_Bool backslashes, + size_t *len, + const char *fmt, + va_list args); +char *esql_string_escape(Eina_Bool backslashes, + const char *s); #endif Modified: trunk/PROTO/esskyuehl/src/lib/esql_query.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_query.c 2011-02-14 16:14:26 UTC (rev 57027) +++ trunk/PROTO/esskyuehl/src/lib/esql_query.c 2011-02-14 16:22:31 UTC (rev 57028) @@ -8,7 +8,7 @@ * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License @@ -24,7 +24,8 @@ #include <stdarg.h> char * -esql_string_escape(Eina_Bool backslashes, const char *s) +esql_string_escape(Eina_Bool backslashes, + const char *s) { char *ret, *rp; const char *p; @@ -49,7 +50,7 @@ for (p = s, rp = ret; *p; p++, rp++) { char e = 0; - + switch (*p) { case '\'': @@ -57,15 +58,19 @@ case '"': e = *p; break; + case '\n': e = 'n'; break; + case '\r': e = 'r'; break; + case '\0': e = '0'; break; + default: *rp = *p; continue; @@ -80,7 +85,10 @@ } char * -esql_query_escape(Eina_Bool backslashes, size_t *len, const char *fmt, va_list args) +esql_query_escape(Eina_Bool backslashes, + size_t *len, + const char *fmt, + va_list args) { Eina_Strbuf *buf; const char *p, *pp; @@ -100,13 +108,14 @@ if (!pp) pp = fmt + strlen(fmt) - 1; EINA_SAFETY_ON_FALSE_GOTO(eina_strbuf_append_length(buf, p, ((pp - p > 1) ? pp - p : 1)), err); - if (*pp != '%') break; /* no more fmt strings */ + if (*pp != '%') break; /* no more fmt strings */ top: switch (pp[1]) { case 0: ERR("Invalid format string!"); goto err; + case 'l': if (!l) l = EINA_TRUE; @@ -119,6 +128,7 @@ } pp++; goto top; + case 'f': if (l && ll) { @@ -128,6 +138,7 @@ d = va_arg(args, double); EINA_SAFETY_ON_FALSE_GOTO(eina_strbuf_append_printf(buf, "%lf", d), err); break; + case 'i': case 'd': if (l && ll) @@ -138,18 +149,20 @@ i = va_arg(args, int); EINA_SAFETY_ON_FALSE_GOTO(eina_strbuf_append_printf(buf, "%lli", i), err); break; + case 's': if (l) { ERR("Invalid format string!"); goto err; } - s = va_arg(args, char*); + s = va_arg(args, char *); s = esql_string_escape(backslashes, s); EINA_SAFETY_ON_NULL_GOTO(s, err); EINA_SAFETY_ON_FALSE_GOTO(eina_strbuf_append(buf, s), err); free(s); break; + case 'c': if (l) { @@ -167,14 +180,16 @@ free(s); } break; + case '%': EINA_SAFETY_ON_FALSE_GOTO(eina_strbuf_append_char(buf, '%'), err); break; + default: ERR("Unsupported format string: '%s'!", pp); goto err; } - + p = pp + ((pp[1]) ? 2 : 1); } *len = eina_strbuf_length_get(buf); @@ -197,7 +212,8 @@ * @return EINA_TRUE on successful queuing of the query, else EINA_FALSE */ Eina_Bool -esql_query(Esql *e, const char *query) +esql_query(Esql *e, + const char *query) { DBG("(e=%p, fmt='%s')", e, query); @@ -233,7 +249,9 @@ * @p e 's backend database. */ Eina_Bool -esql_query_args(Esql *e, const char *fmt, ...) +esql_query_args(Esql *e, + const char *fmt, + ...) { va_list args; char *query; Modified: trunk/PROTO/esskyuehl/src/lib/esql_res.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_res.c 2011-02-14 16:14:26 UTC (rev 57027) +++ trunk/PROTO/esskyuehl/src/lib/esql_res.c 2011-02-14 16:22:31 UTC (rev 57028) @@ -8,7 +8,7 @@ * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License @@ -23,15 +23,16 @@ #include <esql_private.h> static Eina_Bool -esql_row_iterator_next(Esql_Row_Iterator *it, Esql_Row **r) +esql_row_iterator_next(Esql_Row_Iterator *it, + Esql_Row **r) { Eina_Inlist *l; EINA_SAFETY_ON_NULL_RETURN_VAL(it, EINA_FALSE); if (!it->current) return EINA_FALSE; - *r = (Esql_Row*)it->current; + *r = (Esql_Row *)it->current; - l = EINA_INLIST_GET((Esql_Row*)it->current); + l = EINA_INLIST_GET((Esql_Row *)it->current); it->current = l ? EINA_INLIST_CONTAINER_GET(l->next, Esql_Row) : NULL; return EINA_TRUE; @@ -42,7 +43,7 @@ { EINA_SAFETY_ON_NULL_RETURN_VAL(it, NULL); - return (Esql_Row*)it->head; + return (Esql_Row *)it->head; } static void @@ -54,11 +55,12 @@ } void -esql_res_free(void *data __UNUSED__, Esql_Res *res) +esql_res_free(void *data __UNUSED__, + Esql_Res *res) { Esql_Row *r; Eina_Inlist *l, *ll; - + if ((!res) || (!res->rows)) return; for (l = res->rows, ll = l->next; l; l = ll, ll = ll ? ll->next : NULL) @@ -85,6 +87,7 @@ } free(r); } + /** * @defgroup Esql_Res Results * @brief Functions to use result objects @@ -188,7 +191,7 @@ EINA_SAFETY_ON_NULL_RETURN_VAL(res, NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(res->rows, NULL); - + it = calloc(1, sizeof(Esql_Row_Iterator)); EINA_SAFETY_ON_NULL_RETURN_VAL(it, NULL); @@ -247,4 +250,5 @@ return r->res; } + /** @} */ |
From: Enlightenment S. <no-...@en...> - 2011-02-15 19:55:29
|
Log: switch order of fdh deletion in disconnect Author: discomfitor Date: 2011-02-15 11:55:22 -0800 (Tue, 15 Feb 2011) New Revision: 57064 Trac: http://trac.enlightenment.org/e/changeset/57064 Modified: trunk/PROTO/esskyuehl/src/lib/esql_connect.c Modified: trunk/PROTO/esskyuehl/src/lib/esql_connect.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_connect.c 2011-02-15 19:51:06 UTC (rev 57063) +++ trunk/PROTO/esskyuehl/src/lib/esql_connect.c 2011-02-15 19:55:22 UTC (rev 57064) @@ -86,9 +86,9 @@ EINA_SAFETY_ON_NULL_RETURN_VAL(e, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(e->backend.db, EINA_FALSE); + e->backend.disconnect(e); if (e->fdh) ecore_main_fd_handler_del(e->fdh); e->fdh = NULL; - e->backend.disconnect(e); e->connected = EINA_FALSE; INFO("Disconnected"); return EINA_TRUE; |
From: Enlightenment S. <no-...@en...> - 2011-02-17 06:50:16
|
Log: formatting, use EINA_INLIST_FOREACH_SAFE instead of ugly for() constructs Author: discomfitor Date: 2011-02-16 22:50:09 -0800 (Wed, 16 Feb 2011) New Revision: 57109 Trac: http://trac.enlightenment.org/e/changeset/57109 Modified: trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h trunk/PROTO/esskyuehl/src/lib/esql.c trunk/PROTO/esskyuehl/src/lib/esql_connect.c trunk/PROTO/esskyuehl/src/lib/esql_events.c trunk/PROTO/esskyuehl/src/lib/esql_pool.c trunk/PROTO/esskyuehl/src/lib/esql_private.h trunk/PROTO/esskyuehl/src/lib/esql_query.c trunk/PROTO/esskyuehl/src/lib/esql_res.c Modified: trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h =================================================================== --- trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h 2011-02-17 06:44:31 UTC (rev 57108) +++ trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h 2011-02-17 06:50:09 UTC (rev 57109) @@ -162,25 +162,28 @@ EAPI int esql_shutdown(void); /* esql */ -EAPI Esql *esql_new(Esql_Type type); -EAPI Esql *esql_pool_new(int size, Esql_Type type); -EAPI void *esql_data_get(Esql *e); -EAPI void esql_data_set(Esql *e, - void *data); +EAPI Esql *esql_new(Esql_Type type); +EAPI Esql *esql_pool_new(int size, + Esql_Type type); +EAPI void *esql_data_get(Esql *e); +EAPI void esql_data_set(Esql *e, + void *data); EAPI Esql_Query_Id esql_current_query_id_get(Esql *e); -EAPI const char *esql_error_get(Esql *e); -EAPI Eina_Bool esql_type_set(Esql *e, - Esql_Type type); -EAPI Esql_Type esql_type_get(Esql *e); -EAPI void esql_free(Esql *e); +EAPI const char *esql_error_get(Esql *e); +EAPI Eina_Bool esql_type_set(Esql *e, + Esql_Type type); +EAPI Esql_Type esql_type_get(Esql *e); +EAPI void esql_free(Esql *e); /* connect */ EAPI Eina_Bool esql_connect(Esql *e, const char *addr, const char *user, const char *passwd); -EAPI void esql_disconnect(Esql *e); -EAPI void esql_connect_callback_set(Esql *e, Esql_Connect_Cb cb, void *data); +EAPI void esql_disconnect(Esql *e); +EAPI void esql_connect_callback_set(Esql *e, + Esql_Connect_Cb cb, + void *data); EAPI Eina_Bool esql_database_set(Esql *e, const char *database_name); EAPI const char *esql_database_get(Esql *e); @@ -197,8 +200,8 @@ void *data, const char *fmt, va_list args); -EAPI Eina_Bool esql_query_callback_set(Esql_Query_Id id, - Esql_Query_Cb callback); +EAPI Eina_Bool esql_query_callback_set(Esql_Query_Id id, + Esql_Query_Cb callback); /* res */ EAPI Esql *esql_res_esql_get(Esql_Res *res); Modified: trunk/PROTO/esskyuehl/src/lib/esql.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql.c 2011-02-17 06:44:31 UTC (rev 57108) +++ trunk/PROTO/esskyuehl/src/lib/esql.c 2011-02-17 06:50:09 UTC (rev 57109) @@ -158,7 +158,7 @@ Esql_Type type) { EINA_SAFETY_ON_NULL_RETURN_VAL(e, EINA_FALSE); - if (e->pool) return esql_pool_type_set((Esql_Pool*)e, type); + if (e->pool) return esql_pool_type_set((Esql_Pool *)e, type); if ((type != e->type) && e->backend.db && e->backend.free) e->backend.free(e); @@ -174,6 +174,7 @@ ERR("MySQL not supported!"); #endif break; + case ESQL_TYPE_POSTGRESQL: INFO("Esql type for %p set to PostgreSQL", e); #ifdef HAVE_PSQL @@ -182,6 +183,7 @@ ERR("PostgreSQL not supported!"); #endif break; + default: INFO("Esql type for %p is unknown!", e); return EINA_FALSE; @@ -245,7 +247,7 @@ EINA_SAFETY_ON_NULL_RETURN(e); if (e->pool) { - esql_pool_free((Esql_Pool*)e); + esql_pool_free((Esql_Pool *)e); return; } if (e->connected) esql_disconnect(e); Modified: trunk/PROTO/esskyuehl/src/lib/esql_connect.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_connect.c 2011-02-17 06:44:31 UTC (rev 57108) +++ trunk/PROTO/esskyuehl/src/lib/esql_connect.c 2011-02-17 06:50:09 UTC (rev 57109) @@ -48,7 +48,7 @@ EINA_SAFETY_ON_TRUE_RETURN_VAL(e->type == ESQL_TYPE_NONE, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(addr, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(user, EINA_FALSE); - if (e->pool) return esql_pool_connect((Esql_Pool*)e, addr, user, passwd); + if (e->pool) return esql_pool_connect((Esql_Pool *)e, addr, user, passwd); EINA_SAFETY_ON_TRUE_RETURN_VAL(!e->backend.db && (e->type == ESQL_TYPE_MYSQL), EINA_FALSE); if (e->connected) @@ -87,7 +87,7 @@ e->connected = EINA_FALSE; if (e->pool) { - esql_pool_disconnect((Esql_Pool*)e); + esql_pool_disconnect((Esql_Pool *)e); return; } EINA_SAFETY_ON_NULL_RETURN(e->backend.db); @@ -107,7 +107,9 @@ * @param data The data */ void -esql_connect_callback_set(Esql *e, Esql_Connect_Cb cb, void *data) +esql_connect_callback_set(Esql *e, + Esql_Connect_Cb cb, + void *data) { EINA_SAFETY_ON_NULL_RETURN(e); @@ -140,8 +142,8 @@ } eina_stringshare_replace(&e->database, database_name); - if (e->pool) return esql_pool_database_set((Esql_Pool*)e, database_name); - + if (e->pool) return esql_pool_database_set((Esql_Pool *)e, database_name); + if (!e->backend.database_set) return EINA_TRUE; if ((!e->current) && e->connected) { Modified: trunk/PROTO/esskyuehl/src/lib/esql_events.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_events.c 2011-02-17 06:44:31 UTC (rev 57108) +++ trunk/PROTO/esskyuehl/src/lib/esql_events.c 2011-02-17 06:50:09 UTC (rev 57109) @@ -33,8 +33,8 @@ } while (0) static void -esql_fake_free(void *data __UNUSED__, - Esql *e) +esql_fake_free(void *data __UNUSED__, + Esql *e) { e->error = NULL; } @@ -46,7 +46,7 @@ Esql *ev; DBG("(e=%p)", e); - ev = e->pool_struct ? (Esql*)e->pool_struct : e; + ev = e->pool_struct ? (Esql *)e->pool_struct : e; switch (e->current) { case ESQL_CONNECT_TYPE_INIT: @@ -58,7 +58,7 @@ } else INFO("Connected"); - + if ((!e->pool_struct) || (e->pool_struct->e_connected == e->pool_struct->size)) { if (e->pool_struct) @@ -135,7 +135,7 @@ e->backend.query(e, e->backend_set_params->data); e->current = ESQL_CONNECT_TYPE_QUERY; e->cur_data = data; - e->cur_id = *((Esql_Query_Id*)e->backend_ids->data); + e->cur_id = *((Esql_Query_Id *)e->backend_ids->data); if (data) eina_hash_del_by_key(esql_query_data, e->backend_ids->data); INFO("Next call: query"); } @@ -147,9 +147,9 @@ Ecore_Fd_Handler *fdh) { Esql *ev; - + DBG("(e=%p, fdh=%p)", e, fdh); - ev = e->pool_struct ? (Esql*)e->pool_struct : e; /* use pool struct for events */ + ev = e->pool_struct ? (Esql *)e->pool_struct : e; /* use pool struct for events */ if (!ecore_main_fd_handler_active_get(fdh, ECORE_FD_READ | ECORE_FD_WRITE)) return ECORE_CALLBACK_RENEW; @@ -191,13 +191,13 @@ res->data = e->cur_data; res->qid = e->cur_id; e->res = res; - + res->error = e->error; ERR("Connection error: %s", res->error); INFO("Executing callback for current event"); qcb(res, e->cur_data); - + e->query_start = e->query_end = 0.0; eina_hash_del_by_key(esql_query_callbacks, &e->cur_id); esql_res_free(NULL, res); Modified: trunk/PROTO/esskyuehl/src/lib/esql_pool.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_pool.c 2011-02-17 06:44:31 UTC (rev 57108) +++ trunk/PROTO/esskyuehl/src/lib/esql_pool.c 2011-02-17 06:50:09 UTC (rev 57109) @@ -37,14 +37,14 @@ time = ecore_time_get(); EINA_INLIST_FOREACH(ep->esqls, e) { - if (time - e->query_start > cur) - { /* assume older query start time means faster return (obviously not always true) */ + if (time - e->query_start > cur) /* assume older query start time means faster return (obviously not always true) */ + { cur = time - e->query_start; use = e; } } if (!use) /* this should never happen in a reasonable setting */ - use = EINA_INLIST_CONTAINER_GET(ep->esqls, Esql); /* use first one */ + use = EINA_INLIST_CONTAINER_GET(ep->esqls, Esql); /* use first one */ return use; } @@ -54,9 +54,7 @@ Esql *e; Eina_Inlist *l; - for (e = (ep->esqls ? _EINA_INLIST_CONTAINER(e, ep->esqls) : NULL), l = e ? ((EINA_INLIST_GET(e) ? EINA_INLIST_GET(e)->next : NULL)) : NULL; - e; /* in 1.1, this is FOREACH_SAFE */ - e = _EINA_INLIST_CONTAINER(e, l), l = l ? l->next : NULL) + EINA_INLIST_FOREACH_SAFE(ep->esqls, l, e) esql_free(e); eina_stringshare_del(ep->database); @@ -64,7 +62,8 @@ } Eina_Bool -esql_pool_type_set(Esql_Pool *ep, Esql_Type type) +esql_pool_type_set(Esql_Pool *ep, + Esql_Type type) { Esql *e; Eina_Bool ret = EINA_TRUE; @@ -79,7 +78,8 @@ } Eina_Bool -esql_pool_database_set(Esql_Pool *ep, const char *database_name) +esql_pool_database_set(Esql_Pool *ep, + const char *database_name) { Esql *e; @@ -121,7 +121,10 @@ } Esql_Query_Id -esql_pool_query_args(Esql_Pool *ep, void *data, const char *fmt, va_list args) +esql_pool_query_args(Esql_Pool *ep, + void *data, + const char *fmt, + va_list args) { Esql *e; @@ -131,7 +134,9 @@ } Esql_Query_Id -esql_pool_query(Esql_Pool *ep, void *data, const char *query) +esql_pool_query(Esql_Pool *ep, + void *data, + const char *query) { Esql *e; @@ -139,6 +144,7 @@ EINA_SAFETY_ON_NULL_RETURN_VAL(e, 0); return esql_query(e, data, query); } + /* API */ /** @@ -155,17 +161,18 @@ * @return The #Esql object representing a connection pool */ Esql * -esql_pool_new(int size, Esql_Type type) +esql_pool_new(int size, + Esql_Type type) { int i; Esql *e; Esql_Pool *ep; - + EINA_SAFETY_ON_TRUE_RETURN_VAL(size < 1, NULL); EINA_SAFETY_ON_TRUE_RETURN_VAL(type == ESQL_TYPE_NONE, NULL); ep = calloc(1, sizeof(Esql_Pool)); EINA_SAFETY_ON_NULL_RETURN_VAL(ep, NULL); - + for (i = 0; i < size; i++) { e = esql_new(type); @@ -178,7 +185,7 @@ ep->pool = EINA_TRUE; ep->type = type; ep->size = size; - return (Esql*)ep; + return (Esql *)ep; error: EINA_INLIST_FOREACH(ep->esqls, e) @@ -186,3 +193,4 @@ free(ep); return NULL; } + Modified: trunk/PROTO/esskyuehl/src/lib/esql_private.h =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_private.h 2011-02-17 06:44:31 UTC (rev 57108) +++ trunk/PROTO/esskyuehl/src/lib/esql_private.h 2011-02-17 06:50:09 UTC (rev 57109) @@ -38,6 +38,13 @@ # define strndupa(str, len) strncpy(alloca(len + 1), str, len) #endif +#ifndef EINA_INLIST_FOREACH_SAFE +#define EINA_INLIST_FOREACH_SAFE(list, list2, l) \ + for (l = (list ? _EINA_INLIST_CONTAINER(l, list) : NULL), list2 = l ? ((EINA_INLIST_GET(l) ? EINA_INLIST_GET(l)->next : NULL)) : NULL; \ + l; \ + l = _EINA_INLIST_CONTAINER(l, list2), list2 = list2 ? list2->next : NULL) +#endif + typedef enum { ESQL_CONNECT_TYPE_NONE, @@ -61,50 +68,50 @@ typedef struct Esql_Pool { EINA_INLIST; - const char *error; - Eina_Bool pool : 1; - Eina_Bool connected : 1; - const char *database; - Esql_Type type; - Esql_Connect_Cb connect_cb; - void *connect_cb_data; - void *data; + const char *error; + Eina_Bool pool : 1; + Eina_Bool connected : 1; + const char *database; + Esql_Type type; + Esql_Connect_Cb connect_cb; + void *connect_cb_data; + void *data; /* non-esql */ - int size; - int e_connected; - Eina_Inlist *esqls; + int size; + int e_connected; + Eina_Inlist *esqls; } Esql_Pool; struct Esql { - EINA_INLIST; - const char *error; - Eina_Bool pool : 1; - Eina_Bool connected : 1; - const char *database; - Esql_Type type; - Esql_Connect_Cb connect_cb; - void *connect_cb_data; - void *data; - + EINA_INLIST; + const char *error; + Eina_Bool pool : 1; + Eina_Bool connected : 1; + const char *database; + Esql_Type type; + Esql_Connect_Cb connect_cb; + void *connect_cb_data; + void *data; + struct { - void *db; /* db object pointer */ - char *conn_str; /* unused for some db types */ - int conn_str_len; - Esql_Error_Cb error_get; + void *db; /* db object pointer */ + char *conn_str; /* unused for some db types */ + int conn_str_len; + Esql_Error_Cb error_get; Esql_Connection_Cb connect; - Esql_Cb disconnect; - Esql_Cb free; - Esql_Setup_Cb setup; - Esql_Set_Cb database_set; - Esql_Set_Cb query; + Esql_Cb disconnect; + Esql_Cb free; + Esql_Setup_Cb setup; + Esql_Set_Cb database_set; + Esql_Set_Cb query; Esql_Connection_Cb database_send; Esql_Connection_Cb io; - Esql_Fd_Cb fd_get; - Esql_Escape_Cb escape; - Esql_Res_Cb res; - Esql_Res_Cb res_free; + Esql_Fd_Cb fd_get; + Esql_Escape_Cb escape; + Esql_Res_Cb res; + Esql_Res_Cb res_free; } backend; Esql_Pool *pool_struct; @@ -113,7 +120,7 @@ Ecore_Fd_Handler *fdh; Esql_Res *res; /* current working result */ - + Esql_Connect_Type current; double query_start; double query_end; @@ -165,7 +172,6 @@ const Esql_Row *current; } Esql_Row_Iterator; - void esql_mysac_init(Esql *e); void esql_postgresql_init(Esql *e); @@ -184,20 +190,27 @@ const char *s); Esql_Query_Id -esql_pool_query(Esql_Pool *ep, void *data, const char *query); +esql_pool_query(Esql_Pool *ep, + void *data, + const char *query); Esql_Query_Id -esql_pool_query_args(Esql_Pool *ep, void *data, const char *fmt, va_list args); +esql_pool_query_args(Esql_Pool *ep, + void *data, + const char *fmt, + va_list args); void -esql_pool_disconnect(Esql_Pool *ep); + esql_pool_disconnect(Esql_Pool *ep); Eina_Bool -esql_pool_connect(Esql_Pool *ep, + esql_pool_connect(Esql_Pool *ep, const char *addr, const char *user, const char *passwd); Eina_Bool -esql_pool_database_set(Esql_Pool *ep, const char *database_name); +esql_pool_database_set(Esql_Pool *ep, + const char *database_name); Eina_Bool -esql_pool_type_set(Esql_Pool *ep, Esql_Type type); +esql_pool_type_set(Esql_Pool *ep, + Esql_Type type); void esql_pool_free(Esql_Pool *ep); #endif Modified: trunk/PROTO/esskyuehl/src/lib/esql_query.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_query.c 2011-02-17 06:44:31 UTC (rev 57108) +++ trunk/PROTO/esskyuehl/src/lib/esql_query.c 2011-02-17 06:50:09 UTC (rev 57109) @@ -230,10 +230,10 @@ ERR("Esql object must be connected!"); return 0; } - if (e->pool) return esql_pool_query((Esql_Pool*)e, data, query); + if (e->pool) return esql_pool_query((Esql_Pool *)e, data, query); EINA_SAFETY_ON_NULL_RETURN_VAL(e->backend.db, 0); - while (++esql_id < 1); + while (++esql_id < 1) ; if (!e->current) { e->query_start = ecore_time_get(); @@ -299,9 +299,9 @@ */ Esql_Query_Id esql_query_vargs(Esql *e, - void *data, - const char *fmt, - va_list args) + void *data, + const char *fmt, + va_list args) { char *query; @@ -315,13 +315,13 @@ return 0; } if (e->pool) - return esql_pool_query_args((Esql_Pool*)e, data, fmt, args); + return esql_pool_query_args((Esql_Pool *)e, data, fmt, args); EINA_SAFETY_ON_NULL_RETURN_VAL(e->backend.db, 0); query = e->backend.escape(e, fmt, args); EINA_SAFETY_ON_NULL_RETURN_VAL(query, 0); - while (++esql_id < 1); + while (++esql_id < 1) ; if (!e->current) { e->backend.query(e, query); @@ -340,14 +340,13 @@ if (!esql_query_data) esql_query_data = eina_hash_int64_new(NULL); eina_hash_add(esql_query_data, &esql_id, data); } - } return esql_id; } /** * @brief Set a callback for an #Esql_Query_Id - * + * * This function is used to setup a callback to be called for the response of * a query with @p id, overriding (disabling) the ESQL_EVENT_RESULT event * for that call. If a previous callback was set for @p id, this will overwrite it. @@ -370,4 +369,5 @@ return eina_hash_add(esql_query_callbacks, &id, callback); } + /** @} */ Modified: trunk/PROTO/esskyuehl/src/lib/esql_res.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_res.c 2011-02-17 06:44:31 UTC (rev 57108) +++ trunk/PROTO/esskyuehl/src/lib/esql_res.c 2011-02-17 06:50:09 UTC (rev 57109) @@ -59,15 +59,12 @@ Esql_Res *res) { Esql_Row *r; - Eina_Inlist *l, *ll; + Eina_Inlist *l; if ((!res) || (!res->rows)) return; - for (l = res->rows, ll = l->next; l; l = ll, ll = ll ? ll->next : NULL) - { - r = EINA_INLIST_CONTAINER_GET(l, Esql_Row); - esql_row_free(r); - } + EINA_INLIST_FOREACH_SAFE(res->rows, l, r) + esql_row_free(r); res->e->backend.res_free(res); free(res); } @@ -76,15 +73,13 @@ esql_row_free(Esql_Row *r) { Esql_Cell *cell; - Eina_Inlist *l, *ll; + Eina_Inlist *l; if ((!r) || (!r->cells)) return; - for (l = r->cells, ll = l->next; l; l = ll, ll = ll ? ll->next : NULL) - { - cell = EINA_INLIST_CONTAINER_GET(l, Esql_Cell); - free(cell); - } + EINA_INLIST_FOREACH_SAFE(r->cells, l, cell) + free(cell); + free(r); } |
From: Enlightenment S. <no-...@en...> - 2011-02-17 07:57:49
|
Log: add dynamic pool load balancing, some more debug info, do event list cleanups in a more opportune spot Author: discomfitor Date: 2011-02-16 23:57:41 -0800 (Wed, 16 Feb 2011) New Revision: 57113 Trac: http://trac.enlightenment.org/e/changeset/57113 Modified: trunk/PROTO/esskyuehl/src/lib/esql_events.c trunk/PROTO/esskyuehl/src/lib/esql_pool.c trunk/PROTO/esskyuehl/src/lib/esql_private.h Modified: trunk/PROTO/esskyuehl/src/lib/esql_events.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_events.c 2011-02-17 07:53:49 UTC (rev 57112) +++ trunk/PROTO/esskyuehl/src/lib/esql_events.c 2011-02-17 07:57:41 UTC (rev 57113) @@ -74,12 +74,13 @@ break; case ESQL_CONNECT_TYPE_DATABASE_SET: - INFO("Working database is now '%s'", e->database); - UPDATE_LISTS(database_set); + if (e->pool_struct) + INFO("Pool member %u: working database is now '%s'", e->pool_id, e->database); + else + INFO("Working database is now '%s'", e->database); break; case ESQL_CONNECT_TYPE_QUERY: - UPDATE_LISTS(query); e->query_end = ecore_time_get(); { Esql_Res *res; @@ -115,20 +116,33 @@ e->error = NULL; if (!e->backend_set_funcs) { - INFO("No calls queued"); if (e->pool_struct) - INFO("Pool member %u is now idle", e->pool_id); - return; + { + if (!esql_pool_rebalance(e->pool_struct, e)) + { + INFO("Pool member %u is now idle", e->pool_id); + return; + } + } + else + { + INFO("No calls queued"); + return; + } } /* next call */ cb = e->backend_set_funcs->data; if (cb == (Esql_Set_Cb)esql_database_set) { cb(e, e->backend_set_params->data); - INFO("Next call: DB change"); + UPDATE_LISTS(database_set); + if (e->pool_struct) + INFO("Pool member %u: next call: DB change", e->pool_id); + else + INFO("Next call: DB change"); } else if (cb == (Esql_Set_Cb)esql_query) - { + { /* don't use cb, leads to unnecessary calls and breakage */ void *data; data = eina_hash_find(esql_query_data, e->backend_ids->data); @@ -137,7 +151,11 @@ e->cur_data = data; e->cur_id = *((Esql_Query_Id *)e->backend_ids->data); if (data) eina_hash_del_by_key(esql_query_data, e->backend_ids->data); - INFO("Next call: query"); + UPDATE_LISTS(query); + if (e->pool_struct) + INFO("Pool member %u: next call: query", e->pool_id); + else + INFO("Next call: query"); } esql_connect_handler(e, e->fdh); /* have to call again to start next call */ } Modified: trunk/PROTO/esskyuehl/src/lib/esql_pool.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_pool.c 2011-02-17 07:53:49 UTC (rev 57112) +++ trunk/PROTO/esskyuehl/src/lib/esql_pool.c 2011-02-17 07:57:41 UTC (rev 57113) @@ -48,6 +48,37 @@ return use; } +Eina_Bool +esql_pool_rebalance(Esql_Pool *ep, Esql *e /* idle connection */) +{ + Esql *it; + + DBG("(ep=%p, e=%p)", ep, e); + EINA_INLIST_FOREACH(ep->esqls, it) + { + if (it->backend_set_funcs) /* queued call */ + { + INFO("Load balancing: moving query from %u to %u", it->pool_id, e->pool_id); +#if defined(eina_list_move_list) + eina_list_move_list(&e->backend_set_funcs, &it->backend_set_funcs, it->backend_set_funcs); + eina_list_move_list(&e->backend_set_params, &it->backend_set_params, it->backend_set_params); + eina_list_move_list(&e->backend_ids, &it->backend_ids, it->backend_ids); +#else +#define LIST_MOVE(X) \ + e->X = eina_list_append(e->X, it->X->data); \ + it->X = eina_list_remove_list(it->X, it->X) + LIST_MOVE(backend_set_funcs); + LIST_MOVE(backend_set_params); + LIST_MOVE(backend_ids); +#undef LIST_MOVE +#endif + return EINA_TRUE; + } + } + INFO("No rebalancing necessary"); + return EINA_FALSE; +} + void esql_pool_free(Esql_Pool *ep) { Modified: trunk/PROTO/esskyuehl/src/lib/esql_private.h =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_private.h 2011-02-17 07:53:49 UTC (rev 57112) +++ trunk/PROTO/esskyuehl/src/lib/esql_private.h 2011-02-17 07:57:41 UTC (rev 57113) @@ -39,10 +39,10 @@ #endif #ifndef EINA_INLIST_FOREACH_SAFE -#define EINA_INLIST_FOREACH_SAFE(list, list2, l) \ - for (l = (list ? _EINA_INLIST_CONTAINER(l, list) : NULL), list2 = l ? ((EINA_INLIST_GET(l) ? EINA_INLIST_GET(l)->next : NULL)) : NULL; \ - l; \ - l = _EINA_INLIST_CONTAINER(l, list2), list2 = list2 ? list2->next : NULL) +#define EINA_INLIST_FOREACH_SAFE(list, list2, l) \ + for (l = (list ? _EINA_INLIST_CONTAINER(l, list) : NULL), list2 = l ? ((EINA_INLIST_GET(l) ? EINA_INLIST_GET(l)->next : NULL)) : NULL; \ + l; \ + l = _EINA_INLIST_CONTAINER(l, list2), list2 = list2 ? list2->next : NULL) #endif typedef enum @@ -189,6 +189,9 @@ char *esql_string_escape(Eina_Bool backslashes, const char *s); + +Eina_Bool +esql_pool_rebalance(Esql_Pool *ep, Esql *e); Esql_Query_Id esql_pool_query(Esql_Pool *ep, void *data, |
From: Enlightenment S. <no-...@en...> - 2011-03-26 22:14:56
|
Log: +EAPI const char *esql_current_query_get(Esql *e); +EAPI const char *esql_res_query_get(Esql_Res *res); Author: discomfitor Date: 2011-03-26 15:14:46 -0700 (Sat, 26 Mar 2011) New Revision: 58104 Trac: http://trac.enlightenment.org/e/changeset/58104 Modified: trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h trunk/PROTO/esskyuehl/src/lib/esql.c trunk/PROTO/esskyuehl/src/lib/esql_events.c trunk/PROTO/esskyuehl/src/lib/esql_private.h trunk/PROTO/esskyuehl/src/lib/esql_query.c trunk/PROTO/esskyuehl/src/lib/esql_res.c Modified: trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h =================================================================== --- trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h 2011-03-26 20:48:46 UTC (rev 58103) +++ trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h 2011-03-26 22:14:46 UTC (rev 58104) @@ -169,6 +169,7 @@ EAPI void esql_data_set(Esql *e, void *data); EAPI Esql_Query_Id esql_current_query_id_get(Esql *e); +const char *esql_current_query_get(Esql *e); EAPI const char *esql_error_get(Esql *e); EAPI Eina_Bool esql_type_set(Esql *e, Esql_Type type); @@ -208,6 +209,7 @@ EAPI const char *esql_res_error_get(Esql_Res *res); EAPI void *esql_res_data_get(Esql_Res *res); EAPI Esql_Query_Id esql_res_query_id_get(Esql_Res *res); +EAPI const char *esql_res_query_get(Esql_Res *res); EAPI int esql_res_rows_count(Esql_Res *res); EAPI int esql_res_cols_count(Esql_Res *res); EAPI long long int esql_res_rows_affected(Esql_Res *res); Modified: trunk/PROTO/esskyuehl/src/lib/esql.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql.c 2011-03-26 20:48:46 UTC (rev 58103) +++ trunk/PROTO/esskyuehl/src/lib/esql.c 2011-03-26 22:14:46 UTC (rev 58104) @@ -208,7 +208,7 @@ /** * @brief Return the #Esql_Query_Id of the current active query - * @param res The #Esql object (NOT #NULL) + * @param e The #Esql object (NOT #NULL) * @return The query id, or 0 if no query is active * @note For obvious reasons, this cannot be used with connection pools */ @@ -222,6 +222,19 @@ } /** + * @brief Return the query string for the current query + * @param e The #Esql object (NOT #NULL) + * @return The query string (NOT stringshared) + */ +const char * +esql_current_query_get(Esql *e) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(e, NULL); + + return e->cur_query; +} + +/** * @brief Retrieve the error string associated with an #Esql object * This function will return #NULL in all cases where an error has not occurred. * @param res The #Esql object (NOT #NULL) @@ -255,7 +268,7 @@ if (e->backend_ids) eina_list_free(e->backend_set_funcs); if (e->backend_set_params) eina_list_free(e->backend_set_params); if (e->backend_ids) eina_list_free(e->backend_ids); - + if (e->cur_query) free(e->cur_query); free(e); } Modified: trunk/PROTO/esskyuehl/src/lib/esql_events.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_events.c 2011-03-26 20:48:46 UTC (rev 58103) +++ trunk/PROTO/esskyuehl/src/lib/esql_events.c 2011-03-26 22:14:46 UTC (rev 58104) @@ -89,6 +89,8 @@ res = calloc(1, sizeof(Esql_Res)); EINA_SAFETY_ON_NULL_GOTO(res, out); res->e = e; + res->query = e->cur_query; + e->cur_query = NULL; e->backend.res(res); res->data = e->cur_data; qcb = eina_hash_find(esql_query_callbacks, &e->cur_id); @@ -150,6 +152,7 @@ e->current = ESQL_CONNECT_TYPE_QUERY; e->cur_data = data; e->cur_id = *((Esql_Query_Id *)e->backend_ids->data); + e->cur_query = strdup(e->backend_set_params->data); if (data) eina_hash_del_by_key(esql_query_data, e->backend_ids->data); UPDATE_LISTS(query); if (e->pool_struct) @@ -209,6 +212,8 @@ res->data = e->cur_data; res->qid = e->cur_id; e->res = res; + res->query = e->cur_query; + e->cur_query = NULL; res->error = e->error; ERR("Connection error: %s", res->error); Modified: trunk/PROTO/esskyuehl/src/lib/esql_private.h =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_private.h 2011-03-26 20:48:46 UTC (rev 58103) +++ trunk/PROTO/esskyuehl/src/lib/esql_private.h 2011-03-26 22:14:46 UTC (rev 58104) @@ -129,6 +129,7 @@ Eina_List *backend_ids; /* Esql_Query_Id * */ void *cur_data; Esql_Query_Id cur_id; + char *cur_query; }; struct Esql_Res @@ -143,6 +144,7 @@ long long int affected; long long int id; Esql_Query_Id qid; + char *query; struct { Modified: trunk/PROTO/esskyuehl/src/lib/esql_query.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_query.c 2011-03-26 20:48:46 UTC (rev 58103) +++ trunk/PROTO/esskyuehl/src/lib/esql_query.c 2011-03-26 22:14:46 UTC (rev 58104) @@ -241,6 +241,7 @@ e->current = ESQL_CONNECT_TYPE_QUERY; e->cur_data = data; e->cur_id = esql_id; + e->cur_query = strdup(query); } else { @@ -328,7 +329,7 @@ e->current = ESQL_CONNECT_TYPE_QUERY; e->cur_data = data; e->cur_id = esql_id; - free(query); + e->cur_query = query; } else { Modified: trunk/PROTO/esskyuehl/src/lib/esql_res.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_res.c 2011-03-26 20:48:46 UTC (rev 58103) +++ trunk/PROTO/esskyuehl/src/lib/esql_res.c 2011-03-26 22:14:46 UTC (rev 58104) @@ -66,6 +66,7 @@ EINA_INLIST_FOREACH_SAFE(res->rows, l, r) esql_row_free(r); res->e->backend.res_free(res); + free(res->query); free(res); } @@ -143,6 +144,18 @@ } /** + * @brief Return the query string for the result + * @param res The result object (NOT #NULL) + * @return The query string (NOT stringshared) + */ +const char * +esql_res_query_get(Esql_Res *res) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(res, NULL); + + return res->query; +} +/** * @brief Retrieve the number of rows selected by a SELECT statement * This function has no effect for INSERT/UPDATE/etc statements. * @param res The result object (NOT #NULL) |
From: Enlightenment S. <no-...@en...> - 2011-03-26 22:15:34
|
Log: forgot EAPI Author: discomfitor Date: 2011-03-26 15:15:24 -0700 (Sat, 26 Mar 2011) New Revision: 58106 Trac: http://trac.enlightenment.org/e/changeset/58106 Modified: trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h Modified: trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h =================================================================== --- trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h 2011-03-26 22:15:07 UTC (rev 58105) +++ trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h 2011-03-26 22:15:24 UTC (rev 58106) @@ -169,7 +169,7 @@ EAPI void esql_data_set(Esql *e, void *data); EAPI Esql_Query_Id esql_current_query_id_get(Esql *e); -const char *esql_current_query_get(Esql *e); +EAPI const char *esql_current_query_get(Esql *e); EAPI const char *esql_error_get(Esql *e); EAPI Eina_Bool esql_type_set(Esql *e, Esql_Type type); |
From: Enlightenment S. <no-...@en...> - 2011-03-26 22:23:59
|
Log: fix mem ordering for pool->query, feeble attempt to make qid work with pools by adding doc saying it probably won't work Author: discomfitor Date: 2011-03-26 15:23:52 -0700 (Sat, 26 Mar 2011) New Revision: 58107 Trac: http://trac.enlightenment.org/e/changeset/58107 Modified: trunk/PROTO/esskyuehl/src/lib/esql.c trunk/PROTO/esskyuehl/src/lib/esql_events.c trunk/PROTO/esskyuehl/src/lib/esql_private.h Modified: trunk/PROTO/esskyuehl/src/lib/esql.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql.c 2011-03-26 22:15:24 UTC (rev 58106) +++ trunk/PROTO/esskyuehl/src/lib/esql.c 2011-03-26 22:23:52 UTC (rev 58107) @@ -210,13 +210,13 @@ * @brief Return the #Esql_Query_Id of the current active query * @param e The #Esql object (NOT #NULL) * @return The query id, or 0 if no query is active - * @note For obvious reasons, this cannot be used with connection pools + * @note For obvious reasons, this cannot be used reliably with + * connection pools unless a callback is set */ Esql_Query_Id esql_current_query_id_get(Esql *e) { EINA_SAFETY_ON_NULL_RETURN_VAL(e, 0); - EINA_SAFETY_ON_TRUE_RETURN_VAL(e->pool, 0); return e->cur_id; } @@ -225,6 +225,8 @@ * @brief Return the query string for the current query * @param e The #Esql object (NOT #NULL) * @return The query string (NOT stringshared) + * @note For obvious reasons, this cannot be used reliably with + * connection pools unless a callback is set */ const char * esql_current_query_get(Esql *e) Modified: trunk/PROTO/esskyuehl/src/lib/esql_events.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_events.c 2011-03-26 22:15:24 UTC (rev 58106) +++ trunk/PROTO/esskyuehl/src/lib/esql_events.c 2011-03-26 22:23:52 UTC (rev 58107) @@ -196,7 +196,12 @@ default: e->error = e->backend.error_get(e); e->query_end = ecore_time_get(); - if (e->pool_struct) e->pool_struct->error = e->error; + if (e->pool_struct) + { + e->pool_struct->error = e->error; + e->pool_struct->cur_query = e->cur_query; + e->pool_struct->cur_id = e->cur_id; + } if (e->type == ESQL_CONNECT_TYPE_QUERY) { Esql_Query_Cb qcb; Modified: trunk/PROTO/esskyuehl/src/lib/esql_private.h =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_private.h 2011-03-26 22:15:24 UTC (rev 58106) +++ trunk/PROTO/esskyuehl/src/lib/esql_private.h 2011-03-26 22:23:52 UTC (rev 58107) @@ -76,6 +76,8 @@ Esql_Connect_Cb connect_cb; void *connect_cb_data; void *data; + char *cur_query; + Esql_Query_Id cur_id; /* non-esql */ int size; int e_connected; @@ -93,7 +95,9 @@ Esql_Connect_Cb connect_cb; void *connect_cb_data; void *data; - + char *cur_query; + Esql_Query_Id cur_id; + struct { void *db; /* db object pointer */ @@ -128,8 +132,6 @@ Eina_List *backend_set_params; /* char * */ Eina_List *backend_ids; /* Esql_Query_Id * */ void *cur_data; - Esql_Query_Id cur_id; - char *cur_query; }; struct Esql_Res |
From: Enlightenment S. <no-...@en...> - 2011-03-27 21:26:08
|
Log: add esql_convert.c with some convenience functions for converting single cell results Author: discomfitor Date: 2011-03-27 14:26:01 -0700 (Sun, 27 Mar 2011) New Revision: 58130 Trac: http://trac.enlightenment.org/e/changeset/58130 Added: trunk/PROTO/esskyuehl/src/lib/esql_convert.c Modified: trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h trunk/PROTO/esskyuehl/src/lib/Makefile.am Modified: trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h =================================================================== --- trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h 2011-03-27 21:17:16 UTC (rev 58129) +++ trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h 2011-03-27 21:26:01 UTC (rev 58130) @@ -216,6 +216,13 @@ EAPI long long int esql_res_id(Esql_Res *res); EAPI Eina_Iterator *esql_res_row_iterator_new(Esql_Res *res); +/* convert */ +EAPI Eina_Bool esql_res_to_string(Esql_Res *res, const char **str); +EAPI Eina_Bool esql_res_to_lli(Esql_Res *res, long long int *i); +EAPI Eina_Bool esql_res_to_double(Esql_Res *res, double *d); +EAPI Eina_Bool esql_res_to_tm(Esql_Res *res, struct tm *t); +EAPI Eina_Bool esql_res_to_timeval(Esql_Res *res, struct timeval *tv); + /* row */ EAPI Eina_Inlist *esql_row_cells_get(Esql_Row *r); EAPI int esql_row_cell_count(Esql_Row *r); Modified: trunk/PROTO/esskyuehl/src/lib/Makefile.am =================================================================== --- trunk/PROTO/esskyuehl/src/lib/Makefile.am 2011-03-27 21:17:16 UTC (rev 58129) +++ trunk/PROTO/esskyuehl/src/lib/Makefile.am 2011-03-27 21:26:01 UTC (rev 58130) @@ -35,6 +35,7 @@ libesskyuehl_la_SOURCES = \ esql.c \ esql_connect.c \ +esql_convert.c \ esql_events.c \ esql_pool.c \ esql_query.c \ |
From: Enlightenment S. <no-...@en...> - 2011-03-27 23:11:21
|
Log: fix segv in queued queries Author: discomfitor Date: 2011-03-27 16:11:15 -0700 (Sun, 27 Mar 2011) New Revision: 58131 Trac: http://trac.enlightenment.org/e/changeset/58131 Modified: trunk/PROTO/esskyuehl/src/lib/esql_query.c Modified: trunk/PROTO/esskyuehl/src/lib/esql_query.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_query.c 2011-03-27 21:26:01 UTC (rev 58130) +++ trunk/PROTO/esskyuehl/src/lib/esql_query.c 2011-03-27 23:11:15 UTC (rev 58131) @@ -246,7 +246,7 @@ else { e->backend_set_funcs = eina_list_append(e->backend_set_funcs, esql_query); - e->backend_set_params = eina_list_append(e->backend_set_params, query); + e->backend_set_params = eina_list_append(e->backend_set_params, strdup(query)); e->backend_ids = eina_list_append(e->backend_ids, &esql_id); if (data) { |
From: Enlightenment S. <no-...@en...> - 2011-03-27 23:41:26
|
Log: formatting, fix dumb copypaste in convert, add EAPI Eina_Bool esql_cell_to_lli(Esql_Cell *cell, long long int *i); Author: discomfitor Date: 2011-03-27 16:41:18 -0700 (Sun, 27 Mar 2011) New Revision: 58134 Trac: http://trac.enlightenment.org/e/changeset/58134 Modified: trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h trunk/PROTO/esskyuehl/src/lib/esql_convert.c trunk/PROTO/esskyuehl/src/lib/esql_private.h Modified: trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h =================================================================== --- trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h 2011-03-27 23:25:29 UTC (rev 58133) +++ trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h 2011-03-27 23:41:18 UTC (rev 58134) @@ -222,6 +222,7 @@ EAPI Eina_Bool esql_res_to_double(Esql_Res *res, double *d); EAPI Eina_Bool esql_res_to_tm(Esql_Res *res, struct tm *t); EAPI Eina_Bool esql_res_to_timeval(Esql_Res *res, struct timeval *tv); +EAPI Eina_Bool esql_cell_to_lli(Esql_Cell *cell, long long int *i); /* row */ EAPI Eina_Inlist *esql_row_cells_get(Esql_Row *r); Modified: trunk/PROTO/esskyuehl/src/lib/esql_convert.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_convert.c 2011-03-27 23:25:29 UTC (rev 58133) +++ trunk/PROTO/esskyuehl/src/lib/esql_convert.c 2011-03-27 23:41:18 UTC (rev 58134) @@ -64,11 +64,6 @@ EINA_SAFETY_ON_TRUE_RETURN_VAL(res->row_count != 1, EINA_FALSE); row = EINA_INLIST_CONTAINER_GET(res->rows, Esql_Row); cell = EINA_INLIST_CONTAINER_GET(row->cells, Esql_Cell); - EINA_SAFETY_ON_TRUE_RETURN_VAL( - (cell->type != ESQL_CELL_TYPE_TINYINT) && - (cell->type != ESQL_CELL_TYPE_SHORT) && - (cell->type != ESQL_CELL_TYPE_LONG) && - (cell->type != ESQL_CELL_TYPE_LONGLONG), EINA_FALSE); switch (cell->type) { case ESQL_CELL_TYPE_TINYINT: @@ -85,7 +80,7 @@ break; default: ERR("cell from res %p has invalid type!", res); - return EINA_FALSE; + return EINA_FALSE; } return EINA_TRUE; } @@ -116,7 +111,7 @@ break; default: ERR("cell from res %p has invalid type!", res); - return EINA_FALSE; + return EINA_FALSE; } return EINA_TRUE; } @@ -162,4 +157,38 @@ memcpy(tv, &cell->value.tv, sizeof(struct timeval)); return EINA_TRUE; } + +/*********************************************************************/ + +/** + * @brief Convert cell to a long long int + * @param cell Cell + * @param i Pointer to store int at + * @return EINA_TRUE on success, else EINA_FALSE + */ +Eina_Bool +esql_cell_to_lli(Esql_Cell *cell, long long int *i) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(i, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(cell, EINA_FALSE); + switch (cell->type) + { + case ESQL_CELL_TYPE_TINYINT: + *i = cell->value.c; + break; + case ESQL_CELL_TYPE_SHORT: + *i = cell->value.s; + break; + case ESQL_CELL_TYPE_LONG: + *i = cell->value.i; + break; + case ESQL_CELL_TYPE_LONGLONG: + *i = cell->value.l; + break; + default: + ERR("cell %p has invalid type!", cell); + return EINA_FALSE; + } + return EINA_TRUE; +} /** @} */ Modified: trunk/PROTO/esskyuehl/src/lib/esql_private.h =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_private.h 2011-03-27 23:25:29 UTC (rev 58133) +++ trunk/PROTO/esskyuehl/src/lib/esql_private.h 2011-03-27 23:41:18 UTC (rev 58134) @@ -97,7 +97,7 @@ void *data; char *cur_query; Esql_Query_Id cur_id; - + struct { void *db; /* db object pointer */ |
From: Enlightenment S. <no-...@en...> - 2011-03-27 23:46:05
|
Log: EAPI Eina_Bool esql_cell_to_double(Esql_Cell *cell, double *d); Author: discomfitor Date: 2011-03-27 16:45:58 -0700 (Sun, 27 Mar 2011) New Revision: 58135 Trac: http://trac.enlightenment.org/e/changeset/58135 Modified: trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h trunk/PROTO/esskyuehl/src/lib/esql_convert.c Modified: trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h =================================================================== --- trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h 2011-03-27 23:41:18 UTC (rev 58134) +++ trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h 2011-03-27 23:45:58 UTC (rev 58135) @@ -223,6 +223,7 @@ EAPI Eina_Bool esql_res_to_tm(Esql_Res *res, struct tm *t); EAPI Eina_Bool esql_res_to_timeval(Esql_Res *res, struct timeval *tv); EAPI Eina_Bool esql_cell_to_lli(Esql_Cell *cell, long long int *i); +EAPI Eina_Bool esql_cell_to_double(Esql_Cell *cell, double *d); /* row */ EAPI Eina_Inlist *esql_row_cells_get(Esql_Row *r); Modified: trunk/PROTO/esskyuehl/src/lib/esql_convert.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_convert.c 2011-03-27 23:41:18 UTC (rev 58134) +++ trunk/PROTO/esskyuehl/src/lib/esql_convert.c 2011-03-27 23:45:58 UTC (rev 58135) @@ -191,4 +191,30 @@ } return EINA_TRUE; } + +/** + * @brief Convert cell to a double + * @param cell Cell + * @param d Pointer to store double at + * @return EINA_TRUE on success, else EINA_FALSE + */ +Eina_Bool +esql_cell_to_double(Esql_Cell *cell, double *d) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(d, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(cell, EINA_FALSE); + switch (cell->type) + { + case ESQL_CELL_TYPE_FLOAT: + *d = cell->value.f; + break; + case ESQL_CELL_TYPE_DOUBLE: + *d = cell->value.d; + break; + default: + ERR("cell %p has invalid type!", cell); + return EINA_FALSE; + } + return EINA_TRUE; +} /** @} */ |
From: Enlightenment S. <no-...@en...> - 2011-03-28 03:17:09
|
Log: forgot to stringshare in esql_res_to_string Author: discomfitor Date: 2011-03-27 20:17:03 -0700 (Sun, 27 Mar 2011) New Revision: 58141 Trac: http://trac.enlightenment.org/e/changeset/58141 Modified: trunk/PROTO/esskyuehl/src/lib/esql_convert.c Modified: trunk/PROTO/esskyuehl/src/lib/esql_convert.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_convert.c 2011-03-28 01:34:06 UTC (rev 58140) +++ trunk/PROTO/esskyuehl/src/lib/esql_convert.c 2011-03-28 03:17:03 UTC (rev 58141) @@ -30,7 +30,7 @@ /** * @brief Convert result to a string * @param res Result - * @param str Pointer to store string at + * @param str Pointer to stringshare string to * @return EINA_TRUE on success, else EINA_FALSE */ Eina_Bool @@ -44,7 +44,7 @@ row = EINA_INLIST_CONTAINER_GET(res->rows, Esql_Row); cell = EINA_INLIST_CONTAINER_GET(row->cells, Esql_Cell); EINA_SAFETY_ON_TRUE_RETURN_VAL(cell->type != ESQL_CELL_TYPE_STRING, EINA_FALSE); - *str = cell->value.string; + *str = eina_stringshare_add(cell->value.string); return EINA_TRUE; } |
From: Enlightenment S. <no-...@en...> - 2011-03-28 05:17:20
|
Log: change up new convert api, not a fan of that style here Author: discomfitor Date: 2011-03-27 22:17:13 -0700 (Sun, 27 Mar 2011) New Revision: 58143 Trac: http://trac.enlightenment.org/e/changeset/58143 Modified: trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h trunk/PROTO/esskyuehl/src/lib/esql_convert.c Modified: trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h =================================================================== --- trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h 2011-03-28 03:40:19 UTC (rev 58142) +++ trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h 2011-03-28 05:17:13 UTC (rev 58143) @@ -217,13 +217,13 @@ EAPI Eina_Iterator *esql_res_row_iterator_new(Esql_Res *res); /* convert */ -EAPI Eina_Bool esql_res_to_string(Esql_Res *res, const char **str); -EAPI Eina_Bool esql_res_to_lli(Esql_Res *res, long long int *i); -EAPI Eina_Bool esql_res_to_double(Esql_Res *res, double *d); -EAPI Eina_Bool esql_res_to_tm(Esql_Res *res, struct tm *t); -EAPI Eina_Bool esql_res_to_timeval(Esql_Res *res, struct timeval *tv); -EAPI Eina_Bool esql_cell_to_lli(Esql_Cell *cell, long long int *i); -EAPI Eina_Bool esql_cell_to_double(Esql_Cell *cell, double *d); +EAPI const char * esql_res_to_string(Esql_Res *res); +EAPI long long int esql_res_to_lli(Esql_Res *res); +EAPI double esql_res_to_double(Esql_Res *res); +EAPI struct tm *esql_res_to_tm(Esql_Res *res); +EAPI struct timeval *esql_res_to_timeval(Esql_Res *res); +EAPI long long int esql_cell_to_lli(Esql_Cell *cell); +EAPI double esql_cell_to_double(Esql_Cell *cell); /* row */ EAPI Eina_Inlist *esql_row_cells_get(Esql_Row *r); Modified: trunk/PROTO/esskyuehl/src/lib/esql_convert.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_convert.c 2011-03-28 03:40:19 UTC (rev 58142) +++ trunk/PROTO/esskyuehl/src/lib/esql_convert.c 2011-03-28 05:17:13 UTC (rev 58143) @@ -30,88 +30,76 @@ /** * @brief Convert result to a string * @param res Result - * @param str Pointer to stringshare string to - * @return EINA_TRUE on success, else EINA_FALSE + * @return Stringshared result */ -Eina_Bool -esql_res_to_string(Esql_Res *res, const char **str) +const char * +esql_res_to_string(Esql_Res *res) { Esql_Row *row; Esql_Cell *cell; - EINA_SAFETY_ON_NULL_RETURN_VAL(res, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(str, EINA_FALSE); - EINA_SAFETY_ON_TRUE_RETURN_VAL(res->row_count != 1, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(res, NULL); + EINA_SAFETY_ON_TRUE_RETURN_VAL(res->row_count != 1, NULL); row = EINA_INLIST_CONTAINER_GET(res->rows, Esql_Row); cell = EINA_INLIST_CONTAINER_GET(row->cells, Esql_Cell); - EINA_SAFETY_ON_TRUE_RETURN_VAL(cell->type != ESQL_CELL_TYPE_STRING, EINA_FALSE); - *str = eina_stringshare_add(cell->value.string); - return EINA_TRUE; + EINA_SAFETY_ON_TRUE_RETURN_VAL( + (cell->type != ESQL_CELL_TYPE_STRING) && + (cell->type != ESQL_CELL_TYPE_UNKNOWN), NULL); + return eina_stringshare_add(cell->value.string); } /** * @brief Convert result to a long long int * @param res Result - * @param i Pointer to store int at - * @return EINA_TRUE on success, else EINA_FALSE + * @return The result */ -Eina_Bool -esql_res_to_lli(Esql_Res *res, long long int *i) +long long int +esql_res_to_lli(Esql_Res *res) { Esql_Row *row; Esql_Cell *cell; EINA_SAFETY_ON_NULL_RETURN_VAL(res, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(i, EINA_FALSE); EINA_SAFETY_ON_TRUE_RETURN_VAL(res->row_count != 1, EINA_FALSE); row = EINA_INLIST_CONTAINER_GET(res->rows, Esql_Row); cell = EINA_INLIST_CONTAINER_GET(row->cells, Esql_Cell); switch (cell->type) { case ESQL_CELL_TYPE_TINYINT: - *i = cell->value.c; - break; + return cell->value.c; case ESQL_CELL_TYPE_SHORT: - *i = cell->value.s; - break; + return cell->value.s; case ESQL_CELL_TYPE_LONG: - *i = cell->value.i; - break; + return cell->value.i; case ESQL_CELL_TYPE_LONGLONG: - *i = cell->value.l; - break; + return cell->value.l; default: - ERR("cell from res %p has invalid type!", res); - return EINA_FALSE; + return 0; } - return EINA_TRUE; } /** * @brief Convert result to a double * @param res Result - * @param d Pointer to store double at - * @return EINA_TRUE on success, else EINA_FALSE + * @return The result */ -Eina_Bool -esql_res_to_double(Esql_Res *res, double *d) +double +esql_res_to_double(Esql_Res *res) { Esql_Row *row; Esql_Cell *cell; - EINA_SAFETY_ON_NULL_RETURN_VAL(res, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(d, EINA_FALSE); - EINA_SAFETY_ON_TRUE_RETURN_VAL(res->row_count != 1, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(res, 0.0); + EINA_SAFETY_ON_TRUE_RETURN_VAL(res->row_count != 1, 0.0); row = EINA_INLIST_CONTAINER_GET(res->rows, Esql_Row); cell = EINA_INLIST_CONTAINER_GET(row->cells, Esql_Cell); switch (cell->type) { case ESQL_CELL_TYPE_FLOAT: - *d = cell->value.f; + return cell->value.f; break; case ESQL_CELL_TYPE_DOUBLE: - *d = cell->value.d; + return cell->value.d; break; default: - ERR("cell from res %p has invalid type!", res); - return EINA_FALSE; + return 0.0; } return EINA_TRUE; } @@ -119,43 +107,39 @@ /** * @brief Convert result to a tm struct * @param res Result - * @param t Pointer to copy values to - * @return EINA_TRUE on success, else EINA_FALSE + * @return Pointer to struct tm */ -Eina_Bool -esql_res_to_tm(Esql_Res *res, struct tm *t) +struct tm * +esql_res_to_tm(Esql_Res *res) { Esql_Row *row; Esql_Cell *cell; - EINA_SAFETY_ON_NULL_RETURN_VAL(res, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(t, EINA_FALSE); - EINA_SAFETY_ON_TRUE_RETURN_VAL(res->row_count != 1, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(res, NULL); + EINA_SAFETY_ON_TRUE_RETURN_VAL(res->row_count != 1, NULL); row = EINA_INLIST_CONTAINER_GET(res->rows, Esql_Row); cell = EINA_INLIST_CONTAINER_GET(row->cells, Esql_Cell); - EINA_SAFETY_ON_TRUE_RETURN_VAL(cell->type != ESQL_CELL_TYPE_TIMESTAMP, EINA_FALSE); - memcpy(t, &cell->value.tm, sizeof(struct tm)); - return EINA_TRUE; + EINA_SAFETY_ON_TRUE_RETURN_VAL((cell->type != ESQL_CELL_TYPE_TIMESTAMP) && + (cell->type != ESQL_CELL_TYPE_UNKNOWN), NULL); + return &cell->value.tm; } /** * @brief Convert result to a timeval struct * @param res Result - * @param tv Pointer to copy values to - * @return EINA_TRUE on success, else EINA_FALSE + * @return Pointer to struct timeval */ -Eina_Bool -esql_res_to_timeval(Esql_Res *res, struct timeval *tv) +struct timeval * +esql_res_to_timeval(Esql_Res *res) { Esql_Row *row; Esql_Cell *cell; - EINA_SAFETY_ON_NULL_RETURN_VAL(res, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(tv, EINA_FALSE); - EINA_SAFETY_ON_TRUE_RETURN_VAL(res->row_count != 1, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(res, NULL); + EINA_SAFETY_ON_TRUE_RETURN_VAL(res->row_count != 1, NULL); row = EINA_INLIST_CONTAINER_GET(res->rows, Esql_Row); cell = EINA_INLIST_CONTAINER_GET(row->cells, Esql_Cell); - EINA_SAFETY_ON_TRUE_RETURN_VAL(cell->type != ESQL_CELL_TYPE_TIMESTAMP, EINA_FALSE); - memcpy(tv, &cell->value.tv, sizeof(struct timeval)); - return EINA_TRUE; + EINA_SAFETY_ON_TRUE_RETURN_VAL((cell->type != ESQL_CELL_TYPE_TIME) && + (cell->type != ESQL_CELL_TYPE_UNKNOWN), NULL); + return &cell->value.tv; } /*********************************************************************/ @@ -163,58 +147,46 @@ /** * @brief Convert cell to a long long int * @param cell Cell - * @param i Pointer to store int at - * @return EINA_TRUE on success, else EINA_FALSE + * @return The result */ -Eina_Bool -esql_cell_to_lli(Esql_Cell *cell, long long int *i) +long long int +esql_cell_to_lli(Esql_Cell *cell) { - EINA_SAFETY_ON_NULL_RETURN_VAL(i, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(cell, EINA_FALSE); switch (cell->type) { case ESQL_CELL_TYPE_TINYINT: - *i = cell->value.c; - break; + return cell->value.c; case ESQL_CELL_TYPE_SHORT: - *i = cell->value.s; - break; + return cell->value.s; case ESQL_CELL_TYPE_LONG: - *i = cell->value.i; - break; + return cell->value.i; case ESQL_CELL_TYPE_LONGLONG: - *i = cell->value.l; - break; + return cell->value.l; default: - ERR("cell %p has invalid type!", cell); - return EINA_FALSE; + return 0; } - return EINA_TRUE; } /** * @brief Convert cell to a double * @param cell Cell - * @param d Pointer to store double at - * @return EINA_TRUE on success, else EINA_FALSE + * @return The result */ -Eina_Bool -esql_cell_to_double(Esql_Cell *cell, double *d) +double +esql_cell_to_double(Esql_Cell *cell) { - EINA_SAFETY_ON_NULL_RETURN_VAL(d, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(cell, EINA_FALSE); switch (cell->type) { case ESQL_CELL_TYPE_FLOAT: - *d = cell->value.f; + return cell->value.f; break; case ESQL_CELL_TYPE_DOUBLE: - *d = cell->value.d; + return cell->value.d; break; default: - ERR("cell %p has invalid type!", cell); - return EINA_FALSE; + return 0.0; } - return EINA_TRUE; } /** @} */ |
From: Enlightenment S. <no-...@en...> - 2011-03-28 05:18:01
|
Log: formatting Author: discomfitor Date: 2011-03-27 22:17:55 -0700 (Sun, 27 Mar 2011) New Revision: 58144 Trac: http://trac.enlightenment.org/e/changeset/58144 Modified: trunk/PROTO/esskyuehl/src/lib/esql_events.c Modified: trunk/PROTO/esskyuehl/src/lib/esql_events.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_events.c 2011-03-28 05:17:13 UTC (rev 58143) +++ trunk/PROTO/esskyuehl/src/lib/esql_events.c 2011-03-28 05:17:55 UTC (rev 58144) @@ -201,7 +201,7 @@ e->pool_struct->error = e->error; e->pool_struct->cur_query = e->cur_query; e->pool_struct->cur_id = e->cur_id; - } + } if (e->type == ESQL_CONNECT_TYPE_QUERY) { Esql_Query_Cb qcb; |
From: Enlightenment S. <no-...@en...> - 2011-03-28 05:50:16
|
Log: fix some cell convert return values, make all res_to_X functions allocate Author: discomfitor Date: 2011-03-27 22:50:09 -0700 (Sun, 27 Mar 2011) New Revision: 58146 Trac: http://trac.enlightenment.org/e/changeset/58146 Modified: trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h trunk/PROTO/esskyuehl/src/lib/esql_convert.c Modified: trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h =================================================================== --- trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h 2011-03-28 05:30:37 UTC (rev 58145) +++ trunk/PROTO/esskyuehl/src/lib/Esskyuehl.h 2011-03-28 05:50:09 UTC (rev 58146) @@ -218,6 +218,7 @@ /* convert */ EAPI const char * esql_res_to_string(Esql_Res *res); +EAPI unsigned char *esql_res_to_blob(Esql_Res *res); EAPI long long int esql_res_to_lli(Esql_Res *res); EAPI double esql_res_to_double(Esql_Res *res); EAPI struct tm *esql_res_to_tm(Esql_Res *res); Modified: trunk/PROTO/esskyuehl/src/lib/esql_convert.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_convert.c 2011-03-28 05:30:37 UTC (rev 58145) +++ trunk/PROTO/esskyuehl/src/lib/esql_convert.c 2011-03-28 05:50:09 UTC (rev 58146) @@ -48,6 +48,29 @@ } /** + * @brief Convert result to a binary blob + * @param res Result + * @return Allocated binary blob (must be freed) + */ +unsigned char * +esql_res_to_blob(Esql_Res *res) +{ + Esql_Row *row; + Esql_Cell *cell; + unsigned char *ret; + EINA_SAFETY_ON_NULL_RETURN_VAL(res, NULL); + EINA_SAFETY_ON_TRUE_RETURN_VAL(res->row_count != 1, NULL); + row = EINA_INLIST_CONTAINER_GET(res->rows, Esql_Row); + cell = EINA_INLIST_CONTAINER_GET(row->cells, Esql_Cell); + EINA_SAFETY_ON_TRUE_RETURN_VAL( + (cell->type != ESQL_CELL_TYPE_BLOB) && + (cell->type != ESQL_CELL_TYPE_UNKNOWN), NULL); + ret = malloc(cell->len); + memcpy(ret, cell->value.blob, cell->len); + return ret; +} + +/** * @brief Convert result to a long long int * @param res Result * @return The result @@ -107,39 +130,45 @@ /** * @brief Convert result to a tm struct * @param res Result - * @return Pointer to struct tm + * @return Pointer to allocated struct tm (must be freed) */ struct tm * esql_res_to_tm(Esql_Res *res) { Esql_Row *row; Esql_Cell *cell; + struct tm *ret; EINA_SAFETY_ON_NULL_RETURN_VAL(res, NULL); EINA_SAFETY_ON_TRUE_RETURN_VAL(res->row_count != 1, NULL); row = EINA_INLIST_CONTAINER_GET(res->rows, Esql_Row); cell = EINA_INLIST_CONTAINER_GET(row->cells, Esql_Cell); EINA_SAFETY_ON_TRUE_RETURN_VAL((cell->type != ESQL_CELL_TYPE_TIMESTAMP) && (cell->type != ESQL_CELL_TYPE_UNKNOWN), NULL); - return &cell->value.tm; + ret = calloc(1, sizeof(struct tm)); + memcpy(ret, &cell->value.tm, sizeof(struct tm)); + return ret; } /** * @brief Convert result to a timeval struct * @param res Result - * @return Pointer to struct timeval + * @return Pointer to allocated struct timeval (must be freed) */ struct timeval * esql_res_to_timeval(Esql_Res *res) { Esql_Row *row; Esql_Cell *cell; + struct timeval *ret; EINA_SAFETY_ON_NULL_RETURN_VAL(res, NULL); EINA_SAFETY_ON_TRUE_RETURN_VAL(res->row_count != 1, NULL); row = EINA_INLIST_CONTAINER_GET(res->rows, Esql_Row); cell = EINA_INLIST_CONTAINER_GET(row->cells, Esql_Cell); EINA_SAFETY_ON_TRUE_RETURN_VAL((cell->type != ESQL_CELL_TYPE_TIME) && (cell->type != ESQL_CELL_TYPE_UNKNOWN), NULL); - return &cell->value.tv; + ret = calloc(1, sizeof(struct timeval)); + memcpy(ret, &cell->value.tv, sizeof(struct timeval)); + return ret; } /*********************************************************************/ @@ -152,7 +181,7 @@ long long int esql_cell_to_lli(Esql_Cell *cell) { - EINA_SAFETY_ON_NULL_RETURN_VAL(cell, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(cell, 0); switch (cell->type) { case ESQL_CELL_TYPE_TINYINT: @@ -176,7 +205,7 @@ double esql_cell_to_double(Esql_Cell *cell) { - EINA_SAFETY_ON_NULL_RETURN_VAL(cell, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(cell, 0.0); switch (cell->type) { case ESQL_CELL_TYPE_FLOAT: |
From: Enlightenment S. <no-...@en...> - 2011-03-28 06:29:36
|
Log: fix bug where qid was not set for results :/ Author: discomfitor Date: 2011-03-27 23:29:29 -0700 (Sun, 27 Mar 2011) New Revision: 58147 Trac: http://trac.enlightenment.org/e/changeset/58147 Modified: trunk/PROTO/esskyuehl/src/lib/esql_events.c Modified: trunk/PROTO/esskyuehl/src/lib/esql_events.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_events.c 2011-03-28 05:50:09 UTC (rev 58146) +++ trunk/PROTO/esskyuehl/src/lib/esql_events.c 2011-03-28 06:29:29 UTC (rev 58147) @@ -93,6 +93,7 @@ e->cur_query = NULL; e->backend.res(res); res->data = e->cur_data; + res->qid = e->cur_id; qcb = eina_hash_find(esql_query_callbacks, &e->cur_id); if (qcb) { |
From: Enlightenment S. <no-...@en...> - 2011-03-28 06:44:41
|
Log: more mem realigning, use correct check for pool member Author: discomfitor Date: 2011-03-27 23:44:34 -0700 (Sun, 27 Mar 2011) New Revision: 58148 Trac: http://trac.enlightenment.org/e/changeset/58148 Modified: trunk/PROTO/esskyuehl/src/lib/esql_events.c trunk/PROTO/esskyuehl/src/lib/esql_private.h Modified: trunk/PROTO/esskyuehl/src/lib/esql_events.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_events.c 2011-03-28 06:29:29 UTC (rev 58147) +++ trunk/PROTO/esskyuehl/src/lib/esql_events.c 2011-03-28 06:44:34 UTC (rev 58148) @@ -46,12 +46,12 @@ Esql *ev; DBG("(e=%p)", e); - ev = e->pool_struct ? (Esql *)e->pool_struct : e; + ev = e->pool_member ? (Esql *)e->pool_struct : e; switch (e->current) { case ESQL_CONNECT_TYPE_INIT: e->connected = EINA_TRUE; - if (e->pool_struct) + if (e->pool_member) { e->pool_struct->e_connected++; INFO("Pool connection %u created (%i/%i)", e->pool_id, e->pool_struct->e_connected, e->pool_struct->size); @@ -59,9 +59,9 @@ else INFO("Connected"); - if ((!e->pool_struct) || (e->pool_struct->e_connected == e->pool_struct->size)) + if ((!e->pool_member) || (e->pool_member && (e->pool_struct->e_connected == e->pool_struct->size))) { - if (e->pool_struct) + if (e->pool_member) { e->pool_struct->connected = EINA_TRUE; INFO("[%i/%i] connections made for pool", e->pool_struct->size, e->pool_struct->size); @@ -74,7 +74,7 @@ break; case ESQL_CONNECT_TYPE_DATABASE_SET: - if (e->pool_struct) + if (e->pool_member) INFO("Pool member %u: working database is now '%s'", e->pool_id, e->database); else INFO("Working database is now '%s'", e->database); @@ -119,7 +119,7 @@ e->error = NULL; if (!e->backend_set_funcs) { - if (e->pool_struct) + if (e->pool_member) { if (!esql_pool_rebalance(e->pool_struct, e)) { @@ -139,7 +139,7 @@ { cb(e, e->backend_set_params->data); UPDATE_LISTS(database_set); - if (e->pool_struct) + if (e->pool_member) INFO("Pool member %u: next call: DB change", e->pool_id); else INFO("Next call: DB change"); @@ -156,7 +156,7 @@ e->cur_query = strdup(e->backend_set_params->data); if (data) eina_hash_del_by_key(esql_query_data, e->backend_ids->data); UPDATE_LISTS(query); - if (e->pool_struct) + if (e->pool_member) INFO("Pool member %u: next call: query", e->pool_id); else INFO("Next call: query"); @@ -171,7 +171,7 @@ Esql *ev; DBG("(e=%p, fdh=%p)", e, fdh); - ev = e->pool_struct ? (Esql *)e->pool_struct : e; /* use pool struct for events */ + ev = e->pool_member ? (Esql *)e->pool_struct : e; /* use pool struct for events */ if (!ecore_main_fd_handler_active_get(fdh, ECORE_FD_READ | ECORE_FD_WRITE)) return ECORE_CALLBACK_RENEW; @@ -197,7 +197,7 @@ default: e->error = e->backend.error_get(e); e->query_end = ecore_time_get(); - if (e->pool_struct) + if (e->pool_member) { e->pool_struct->error = e->error; e->pool_struct->cur_query = e->cur_query; Modified: trunk/PROTO/esskyuehl/src/lib/esql_private.h =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_private.h 2011-03-28 06:29:29 UTC (rev 58147) +++ trunk/PROTO/esskyuehl/src/lib/esql_private.h 2011-03-28 06:44:34 UTC (rev 58148) @@ -78,6 +78,7 @@ void *data; char *cur_query; Esql_Query_Id cur_id; + Eina_Bool pool_member : 1; /* non-esql */ int size; int e_connected; @@ -97,6 +98,7 @@ void *data; char *cur_query; Esql_Query_Id cur_id; + Eina_Bool pool_member : 1; struct { @@ -119,7 +121,6 @@ } backend; Esql_Pool *pool_struct; - Eina_Bool pool_member : 1; unsigned int pool_id; Ecore_Fd_Handler *fdh; |
From: Enlightenment S. <no-...@en...> - 2011-03-28 06:44:56
|
Log: fix esql_res_esql_get() to work properly with pools Author: discomfitor Date: 2011-03-27 23:44:50 -0700 (Sun, 27 Mar 2011) New Revision: 58149 Trac: http://trac.enlightenment.org/e/changeset/58149 Modified: trunk/PROTO/esskyuehl/src/lib/esql_res.c Modified: trunk/PROTO/esskyuehl/src/lib/esql_res.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_res.c 2011-03-28 06:44:34 UTC (rev 58148) +++ trunk/PROTO/esskyuehl/src/lib/esql_res.c 2011-03-28 06:44:50 UTC (rev 58149) @@ -100,6 +100,8 @@ { EINA_SAFETY_ON_NULL_RETURN_VAL(res, NULL); + if (res->e->pool_member) + return (Esql*)res->e->pool_struct; return res->e; } |
From: Enlightenment S. <no-...@en...> - 2011-03-28 07:33:43
|
Log: whoops, wrong flag here was causing insane looping/cpu use Author: discomfitor Date: 2011-03-28 00:33:35 -0700 (Mon, 28 Mar 2011) New Revision: 58150 Trac: http://trac.enlightenment.org/e/changeset/58150 Modified: trunk/PROTO/esskyuehl/src/lib/esql_events.c Modified: trunk/PROTO/esskyuehl/src/lib/esql_events.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_events.c 2011-03-28 06:44:50 UTC (rev 58149) +++ trunk/PROTO/esskyuehl/src/lib/esql_events.c 2011-03-28 07:33:35 UTC (rev 58150) @@ -179,7 +179,7 @@ { case 0: esql_call_complete(e); - ecore_main_fd_handler_active_set(fdh, ECORE_FD_WRITE); + ecore_main_fd_handler_active_set(fdh, ECORE_FD_READ); break; case ECORE_FD_READ | ECORE_FD_WRITE: |
From: Enlightenment S. <no-...@en...> - 2011-03-28 07:57:49
|
Log: okay that broke it altogether, going back to old behavior :/ Author: discomfitor Date: 2011-03-28 00:57:42 -0700 (Mon, 28 Mar 2011) New Revision: 58151 Trac: http://trac.enlightenment.org/e/changeset/58151 Modified: trunk/PROTO/esskyuehl/src/lib/esql_events.c trunk/PROTO/esskyuehl/src/lib/esql_query.c Modified: trunk/PROTO/esskyuehl/src/lib/esql_events.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_events.c 2011-03-28 07:33:35 UTC (rev 58150) +++ trunk/PROTO/esskyuehl/src/lib/esql_events.c 2011-03-28 07:57:42 UTC (rev 58151) @@ -175,11 +175,11 @@ if (!ecore_main_fd_handler_active_get(fdh, ECORE_FD_READ | ECORE_FD_WRITE)) return ECORE_CALLBACK_RENEW; + ecore_main_fd_handler_active_set(fdh, 0); switch (e->backend.io(e)) { case 0: esql_call_complete(e); - ecore_main_fd_handler_active_set(fdh, ECORE_FD_READ); break; case ECORE_FD_READ | ECORE_FD_WRITE: Modified: trunk/PROTO/esskyuehl/src/lib/esql_query.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_query.c 2011-03-28 07:33:35 UTC (rev 58150) +++ trunk/PROTO/esskyuehl/src/lib/esql_query.c 2011-03-28 07:57:42 UTC (rev 58151) @@ -238,6 +238,7 @@ { e->query_start = ecore_time_get(); e->backend.query(e, query); + ecore_main_fd_handler_active_set(e->fdh, ECORE_FD_WRITE); e->current = ESQL_CONNECT_TYPE_QUERY; e->cur_data = data; e->cur_id = esql_id; @@ -326,6 +327,7 @@ if (!e->current) { e->backend.query(e, query); + ecore_main_fd_handler_active_set(e->fdh, ECORE_FD_WRITE); e->current = ESQL_CONNECT_TYPE_QUERY; e->cur_data = data; e->cur_id = esql_id; |
From: Enlightenment S. <no-...@en...> - 2011-03-28 22:15:33
|
Log: add better query debug info Author: discomfitor Date: 2011-03-28 15:15:24 -0700 (Mon, 28 Mar 2011) New Revision: 58159 Trac: http://trac.enlightenment.org/e/changeset/58159 Modified: trunk/PROTO/esskyuehl/src/lib/esql_events.c trunk/PROTO/esskyuehl/src/lib/esql_query.c Modified: trunk/PROTO/esskyuehl/src/lib/esql_events.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_events.c 2011-03-28 21:38:49 UTC (rev 58158) +++ trunk/PROTO/esskyuehl/src/lib/esql_events.c 2011-03-28 22:15:24 UTC (rev 58159) @@ -149,6 +149,7 @@ void *data; data = eina_hash_find(esql_query_data, e->backend_ids->data); + DBG("(e=%p, query=%s)", e, (char*)e->backend_set_params->data); e->backend.query(e, e->backend_set_params->data); e->current = ESQL_CONNECT_TYPE_QUERY; e->cur_data = data; Modified: trunk/PROTO/esskyuehl/src/lib/esql_query.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_query.c 2011-03-28 21:38:49 UTC (rev 58158) +++ trunk/PROTO/esskyuehl/src/lib/esql_query.c 2011-03-28 22:15:24 UTC (rev 58159) @@ -221,7 +221,7 @@ void *data, const char *query) { - DBG("(e=%p, fmt='%s')", e, query); + DBG("(e=%p, query='%s')", e, query); EINA_SAFETY_ON_NULL_RETURN_VAL(e, 0); EINA_SAFETY_ON_NULL_RETURN_VAL(query, 0); @@ -327,6 +327,7 @@ if (!e->current) { e->backend.query(e, query); + DBG("e=%p, query=%s", e, query); ecore_main_fd_handler_active_set(e->fdh, ECORE_FD_WRITE); e->current = ESQL_CONNECT_TYPE_QUERY; e->cur_data = data; |
From: Enlightenment S. <no-...@en...> - 2011-03-28 23:09:48
|
Log: this one is too funny for words. e->type is the type of database to connect to. Author: discomfitor Date: 2011-03-28 16:09:42 -0700 (Mon, 28 Mar 2011) New Revision: 58160 Trac: http://trac.enlightenment.org/e/changeset/58160 Modified: trunk/PROTO/esskyuehl/src/lib/esql_events.c Modified: trunk/PROTO/esskyuehl/src/lib/esql_events.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_events.c 2011-03-28 22:15:24 UTC (rev 58159) +++ trunk/PROTO/esskyuehl/src/lib/esql_events.c 2011-03-28 23:09:42 UTC (rev 58160) @@ -204,7 +204,7 @@ e->pool_struct->cur_query = e->cur_query; e->pool_struct->cur_id = e->cur_id; } - if (e->type == ESQL_CONNECT_TYPE_QUERY) + if (e->current == ESQL_CONNECT_TYPE_QUERY) { Esql_Query_Cb qcb; |
From: Enlightenment S. <no-...@en...> - 2011-04-01 04:03:05
|
Log: 0 row results no longer display error messages on convert, fixed some return values Author: discomfitor Date: 2011-03-31 21:02:59 -0700 (Thu, 31 Mar 2011) New Revision: 58233 Trac: http://trac.enlightenment.org/e/changeset/58233 Modified: trunk/PROTO/esskyuehl/src/lib/esql_convert.c Modified: trunk/PROTO/esskyuehl/src/lib/esql_convert.c =================================================================== --- trunk/PROTO/esskyuehl/src/lib/esql_convert.c 2011-04-01 04:02:56 UTC (rev 58232) +++ trunk/PROTO/esskyuehl/src/lib/esql_convert.c 2011-04-01 04:02:59 UTC (rev 58233) @@ -38,7 +38,8 @@ Esql_Row *row; Esql_Cell *cell; EINA_SAFETY_ON_NULL_RETURN_VAL(res, NULL); - EINA_SAFETY_ON_TRUE_RETURN_VAL(res->row_count != 1, NULL); + EINA_SAFETY_ON_TRUE_RETURN_VAL(res->row_count > 1, NULL); + if (!res->row_count) return NULL; row = EINA_INLIST_CONTAINER_GET(res->rows, Esql_Row); cell = EINA_INLIST_CONTAINER_GET(row->cells, Esql_Cell); EINA_SAFETY_ON_TRUE_RETURN_VAL( @@ -59,7 +60,8 @@ Esql_Cell *cell; unsigned char *ret; EINA_SAFETY_ON_NULL_RETURN_VAL(res, NULL); - EINA_SAFETY_ON_TRUE_RETURN_VAL(res->row_count != 1, NULL); + EINA_SAFETY_ON_TRUE_RETURN_VAL(res->row_count > 1, NULL); + if (!res->row_count) return NULL; row = EINA_INLIST_CONTAINER_GET(res->rows, Esql_Row); cell = EINA_INLIST_CONTAINER_GET(row->cells, Esql_Cell); EINA_SAFETY_ON_TRUE_RETURN_VAL( @@ -80,8 +82,9 @@ { Esql_Row *row; Esql_Cell *cell; - EINA_SAFETY_ON_NULL_RETURN_VAL(res, EINA_FALSE); - EINA_SAFETY_ON_TRUE_RETURN_VAL(res->row_count != 1, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(res, 0); + EINA_SAFETY_ON_TRUE_RETURN_VAL(res->row_count > 1, 0); + if (!res->row_count) return 0; row = EINA_INLIST_CONTAINER_GET(res->rows, Esql_Row); cell = EINA_INLIST_CONTAINER_GET(row->cells, Esql_Cell); switch (cell->type) @@ -110,7 +113,8 @@ Esql_Row *row; Esql_Cell *cell; EINA_SAFETY_ON_NULL_RETURN_VAL(res, 0.0); - EINA_SAFETY_ON_TRUE_RETURN_VAL(res->row_count != 1, 0.0); + EINA_SAFETY_ON_TRUE_RETURN_VAL(res->row_count > 1, 0.0); + if (!res->row_count) return 0.0; row = EINA_INLIST_CONTAINER_GET(res->rows, Esql_Row); cell = EINA_INLIST_CONTAINER_GET(row->cells, Esql_Cell); switch (cell->type) @@ -139,7 +143,8 @@ Esql_Cell *cell; struct tm *ret; EINA_SAFETY_ON_NULL_RETURN_VAL(res, NULL); - EINA_SAFETY_ON_TRUE_RETURN_VAL(res->row_count != 1, NULL); + EINA_SAFETY_ON_TRUE_RETURN_VAL(res->row_count > 1, NULL); + if (!res->row_count) return NULL; row = EINA_INLIST_CONTAINER_GET(res->rows, Esql_Row); cell = EINA_INLIST_CONTAINER_GET(row->cells, Esql_Cell); EINA_SAFETY_ON_TRUE_RETURN_VAL((cell->type != ESQL_CELL_TYPE_TIMESTAMP) && @@ -161,7 +166,8 @@ Esql_Cell *cell; struct timeval *ret; EINA_SAFETY_ON_NULL_RETURN_VAL(res, NULL); - EINA_SAFETY_ON_TRUE_RETURN_VAL(res->row_count != 1, NULL); + EINA_SAFETY_ON_TRUE_RETURN_VAL(res->row_count > 1, NULL); + if (!res->row_count) return NULL; row = EINA_INLIST_CONTAINER_GET(res->rows, Esql_Row); cell = EINA_INLIST_CONTAINER_GET(row->cells, Esql_Cell); EINA_SAFETY_ON_TRUE_RETURN_VAL((cell->type != ESQL_CELL_TYPE_TIME) && |