From 6b6198e96fc8e5a3a699a5d7c025143500178224 Mon Sep 17 00:00:00 2001
From: Anthony Minessale <anthm@freeswitch.org>
Date: Tue, 22 Jan 2013 09:55:07 -0600
Subject: [PATCH] FS-5027

---
 src/mod/languages/mod_lua/freeswitch_lua.cpp | 64 ++++++++++----------
 1 file changed, 31 insertions(+), 33 deletions(-)

diff --git a/src/mod/languages/mod_lua/freeswitch_lua.cpp b/src/mod/languages/mod_lua/freeswitch_lua.cpp
index c8918aee97..9158969e01 100644
--- a/src/mod/languages/mod_lua/freeswitch_lua.cpp
+++ b/src/mod/languages/mod_lua/freeswitch_lua.cpp
@@ -331,61 +331,53 @@ switch_status_t Session::run_dtmf_callback(void *input, switch_input_type_t ityp
 	return SWITCH_STATUS_SUCCESS;
 }
 
+
 Dbh::Dbh(char *dsn, char *user, char *pass)
 {
-  switch_cache_db_connection_options_t options = { {0} };
-  const char *prefix = "core:";
-  switch_cache_db_handle_type_t type;
-  m_connected = false;
+	dbh = NULL;
 
-  if (strstr(dsn, prefix) == dsn) {
-    options.core_db_options.db_path = &dsn[strlen(prefix)];
-    if (switch_cache_db_get_db_handle(&dbh, SCDB_TYPE_CORE_DB, &options) == SWITCH_STATUS_SUCCESS) {
-      m_connected = true;
-    }
-  } else if (!strncasecmp(dsn, "pgsql://", 8)) {
-    type = SCDB_TYPE_PGSQL;
-    options.pgsql_options.dsn = (char *)(dsn + 8);
-    if (switch_cache_db_get_db_handle(&dbh, SCDB_TYPE_PGSQL, &options) == SWITCH_STATUS_SUCCESS) {
-      m_connected = true;
-    }
-  } else {
-    options.odbc_options.dsn = dsn;
-    options.odbc_options.user = user;
-    options.odbc_options.pass = pass;
-    if (switch_cache_db_get_db_handle(&dbh, SCDB_TYPE_ODBC, &options) == SWITCH_STATUS_SUCCESS) {
-      m_connected = true;
-    }
-  }
+	if (!zstr(user) || !zstr(pass)) {
+		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "user and pass params have been removed.  Please specify the user and pass in the DSN.\n");
+	}
+
+	if (switch_cache_db_get_db_handle_dsn(&dbh, dsn) == SWITCH_STATUS_SUCCESS) {
+		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "DBH handle %p Connected.\n", (void *) dbh);
+	} else {
+		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Connection failed.  DBH NOT Connected.\n");
+	}
 }
 
 Dbh::~Dbh()
 {
-  release();
+	if (dbh) release();
 }
 
 bool Dbh::release()
 {
-  if (m_connected) {
-    switch_cache_db_release_db_handle(&dbh);
-    m_connected = false;
-    return true;
+  if (dbh) {
+	  switch_cache_db_release_db_handle(&dbh);
+	  switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "DBH handle %p released.\n", (void *) dbh);
+	  return true;
   }
+
+  switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "DBH NOT Connected.\n");
   return false;
 }
 
 bool Dbh::connected()
 {
-  return m_connected;
+	return dbh ? true : false;
 }
 
 bool Dbh::test_reactive(char *test_sql, char *drop_sql, char *reactive_sql)
 {
-  if (m_connected) {
+  if (dbh) {
     if (switch_cache_db_test_reactive(dbh, test_sql, drop_sql, reactive_sql) == SWITCH_TRUE) {
       return true;
     }
   }
+
+  switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "DBH NOT Connected.\n");
   return false;
 }
 
@@ -417,7 +409,7 @@ int Dbh::query_callback(void *pArg, int argc, char **argv, char **cargv)
 
 bool Dbh::query(char *sql, SWIGLUA_FN lua_fun)
 {
-  if (m_connected) {
+  if (dbh) {
     if (lua_fun.L) {
       if (switch_cache_db_execute_sql_callback(dbh, sql, query_callback, &lua_fun, NULL) == SWITCH_STATUS_SUCCESS) {
         return true;
@@ -428,21 +420,27 @@ bool Dbh::query(char *sql, SWIGLUA_FN lua_fun)
       }
     }
   }
+
+  switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "DBH NOT Connected.\n");
   return false;
 }
 
 int Dbh::affected_rows()
 {
-  if (m_connected) {
+  if (dbh) {
     return switch_cache_db_affected_rows(dbh);
   }
+
+  switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "DBH NOT Connected.\n");
   return 0;
 }
 
 int Dbh::load_extension(const char *extension)
 {
-  if (m_connected) {
+  if (dbh) {
     return switch_cache_db_load_extension(dbh, extension);
   }
+
+  switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "DBH NOT Connected.\n");
   return 0;
 }