class Dbh {
private:
switch_cache_db_handle_t *dbh;
+ char *err;
bool m_connected;
static int query_callback(void *pArg, int argc, char **argv, char **cargv);
public:
bool test_reactive(char *test_sql, char *drop_sql = NULL, char *reactive_sql = NULL);
bool query(char *sql, SWIGLUA_FN lua_fun);
int affected_rows();
+ char *last_error();
+ void clear_error();
int load_extension(const char *extension);
};
Dbh::Dbh(char *dsn, char *user, char *pass)
{
dbh = NULL;
+ err = NULL;
char *tmp = NULL;
if (!zstr(user) || !zstr(pass)) {
Dbh::~Dbh()
{
if (dbh) release();
+
+ clear_error();
+}
+
+void Dbh::clear_error()
+{
+ switch_safe_free(err);
+}
+
+char *Dbh::last_error()
+{
+ return err;
}
bool Dbh::release()
bool Dbh::query(char *sql, SWIGLUA_FN lua_fun)
{
+ clear_error();
+
if (zstr(sql)) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Missing SQL query.\n");
return false;
if (dbh) {
if (lua_fun.L) {
- if (switch_cache_db_execute_sql_callback(dbh, sql, query_callback, &lua_fun, NULL) == SWITCH_STATUS_SUCCESS) {
+ if (switch_cache_db_execute_sql_callback(dbh, sql, query_callback, &lua_fun, &err) == SWITCH_STATUS_SUCCESS) {
return true;
}
} else { /* if no lua_fun arg is passed from Lua, an empty initialized struct will be sent - see freeswitch.i */
- if (switch_cache_db_execute_sql(dbh, sql, NULL) == SWITCH_STATUS_SUCCESS) {
+ if (switch_cache_db_execute_sql(dbh, sql, &err) == SWITCH_STATUS_SUCCESS) {
return true;
}
}
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "DBH NOT Connected.\n");
}
-
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "DBH NOT Connected.\n");
return false;
}
class Dbh {
protected:
switch_cache_db_handle_t *dbh;
+ char *err;
bool m_connected;
static int query_callback(void *pArg, int argc, char **argv, char **cargv);
public:
bool test_reactive(char *test_sql, char *drop_sql = NULL, char *reactive_sql = NULL);
bool query(char *sql, SWIGLUA_FN lua_fun);
int affected_rows();
+ char *last_error();
+ void clear_error();
int load_extension(const char *extension);
};
}
}
+static int _wrap_Dbh_last_error(lua_State* L) {
+ int SWIG_arg = 0;
+ LUA::Dbh *arg1 = (LUA::Dbh *) 0 ;
+ char *result = 0 ;
+
+ SWIG_check_num_args("LUA::Dbh::last_error",1,1)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("LUA::Dbh::last_error",1,"LUA::Dbh *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_LUA__Dbh,0))){
+ SWIG_fail_ptr("Dbh_last_error",1,SWIGTYPE_p_LUA__Dbh);
+ }
+
+ result = (char *)(arg1)->last_error();
+ lua_pushstring(L,(const char *)result); SWIG_arg++;
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_Dbh_clear_error(lua_State* L) {
+ int SWIG_arg = 0;
+ LUA::Dbh *arg1 = (LUA::Dbh *) 0 ;
+
+ SWIG_check_num_args("LUA::Dbh::clear_error",1,1)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("LUA::Dbh::clear_error",1,"LUA::Dbh *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_LUA__Dbh,0))){
+ SWIG_fail_ptr("Dbh_clear_error",1,SWIGTYPE_p_LUA__Dbh);
+ }
+
+ (arg1)->clear_error();
+
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
static int _wrap_Dbh_load_extension(lua_State* L) {
int SWIG_arg = 0;
LUA::Dbh *arg1 = (LUA::Dbh *) 0 ;
{"test_reactive", _wrap_Dbh_test_reactive},
{"query", _wrap_Dbh_query},
{"affected_rows", _wrap_Dbh_affected_rows},
+ {"last_error", _wrap_Dbh_last_error},
+ {"clear_error", _wrap_Dbh_clear_error},
{"load_extension", _wrap_Dbh_load_extension},
{0,0}
};