[Freeswitch-svn] [commit] r4505 - in freeswitch/trunk/src: . include mod/event_handlers/mod_cdr
Freeswitch SVN
mikej at freeswitch.org
Sat Mar 10 16:57:02 EST 2007
Author: mikej
Date: Sat Mar 10 16:57:02 2007
New Revision: 4505
Modified:
freeswitch/trunk/src/include/switch_core_db.h
freeswitch/trunk/src/mod/event_handlers/mod_cdr/mod_cdr.vcproj
freeswitch/trunk/src/mod/event_handlers/mod_cdr/sqlitecdr.cpp
freeswitch/trunk/src/switch_core_db.c
Log:
fix sqlite cdr build with new sqlite wrapper in the core, exposing all the necessary functions. Add sqlite cdr to the windows build.
Modified: freeswitch/trunk/src/include/switch_core_db.h
==============================================================================
--- freeswitch/trunk/src/include/switch_core_db.h (original)
+++ freeswitch/trunk/src/include/switch_core_db.h Sat Mar 10 16:57:02 2007
@@ -59,6 +59,22 @@
typedef int (*switch_core_db_callback_func_t)(void *pArg, int argc, char **argv, char **columnNames);
+/*
+** These are special value for the destructor that is passed in as the
+** final argument to routines like switch_core_db_result_blob(). If the destructor
+** argument is SWITCH_CORE_DB_STATIC, it means that the content pointer is constant
+** and will never change. It does not need to be destroyed. The
+** SWITCH_CORE_DB_TRANSIENT value means that the content will likely change in
+** the near future and that the db should make its own private copy of
+** the content before returning.
+**
+** The typedef is necessary to work around problems in certain
+** C++ compilers.
+*/
+typedef void (*switch_core_db_destructor_type_t)(void*);
+#define SWITCH_CORE_DB_STATIC ((switch_core_db_destructor_type_t)0)
+#define SWITCH_CORE_DB_TRANSIENT ((switch_core_db_destructor_type_t)-1)
+
/**
* A function to close the database.
*
@@ -279,6 +295,177 @@
SWITCH_DECLARE(int) switch_core_db_step(switch_core_db_stmt_t *stmt);
/**
+ * The switch_core_db_reset() function is called to reset a compiled SQL
+ * statement obtained by a previous call to switch_core_db_prepare()
+ * back to it's initial state, ready to be re-executed.
+ * Any SQL statement variables that had values bound to them using
+ * the switch_core_db_bind_*() API retain their values.
+ */
+SWITCH_DECLARE(int) switch_core_db_reset(switch_core_db_stmt_t *pStmt);
+
+/**
+ * In the SQL strings input to switch_core_db_prepare(),
+ * one or more literals can be replace by parameters "?" or ":AAA" or
+ * "$VVV" where AAA is an identifer and VVV is a variable name according
+ * to the syntax rules of the TCL programming language.
+ * The value of these parameters (also called "host parameter names") can
+ * be set using the routines listed below.
+ *
+ * In every case, the first parameter is a pointer to the sqlite3_stmt
+ * structure returned from switch_core_db_prepare(). The second parameter is the
+ * index of the parameter. The first parameter as an index of 1. For
+ * named parameters (":AAA" or "$VVV") you can use
+ * switch_core_db_bind_parameter_index() to get the correct index value given
+ * the parameters name. If the same named parameter occurs more than
+ * once, it is assigned the same index each time.
+ *
+ * The switch_core_db_bind_* routine must be called before switch_core_db_step() after
+ * an switch_core_db_prepare() or sqlite3_reset(). Unbound parameterss are
+ * interpreted as NULL.
+ */
+SWITCH_DECLARE(int) switch_core_db_bind_int(switch_core_db_stmt_t *pStmt, int i, int iValue);
+
+/**
+ * In the SQL strings input to switch_core_db_prepare(),
+ * one or more literals can be replace by parameters "?" or ":AAA" or
+ * "$VVV" where AAA is an identifer and VVV is a variable name according
+ * to the syntax rules of the TCL programming language.
+ * The value of these parameters (also called "host parameter names") can
+ * be set using the routines listed below.
+ *
+ * In every case, the first parameter is a pointer to the sqlite3_stmt
+ * structure returned from switch_core_db_prepare(). The second parameter is the
+ * index of the parameter. The first parameter as an index of 1. For
+ * named parameters (":AAA" or "$VVV") you can use
+ * switch_core_db_bind_parameter_index() to get the correct index value given
+ * the parameters name. If the same named parameter occurs more than
+ * once, it is assigned the same index each time.
+ *
+ * The switch_core_db_bind_* routine must be called before switch_core_db_step() after
+ * an switch_core_db_prepare() or sqlite3_reset(). Unbound parameterss are
+ * interpreted as NULL.
+ */
+SWITCH_DECLARE(int) switch_core_db_bind_int64(switch_core_db_stmt_t *pStmt, int i, int64_t iValue);
+
+/**
+ * In the SQL strings input to switch_core_db_prepare(),
+ * one or more literals can be replace by parameters "?" or ":AAA" or
+ * "$VVV" where AAA is an identifer and VVV is a variable name according
+ * to the syntax rules of the TCL programming language.
+ * The value of these parameters (also called "host parameter names") can
+ * be set using the routines listed below.
+ *
+ * In every case, the first parameter is a pointer to the sqlite3_stmt
+ * structure returned from switch_core_db_prepare(). The second parameter is the
+ * index of the parameter. The first parameter as an index of 1. For
+ * named parameters (":AAA" or "$VVV") you can use
+ * switch_core_db_bind_parameter_index() to get the correct index value given
+ * the parameters name. If the same named parameter occurs more than
+ * once, it is assigned the same index each time.
+ *
+ * The fifth parameter to switch_core_db_bind_blob(), switch_core_db_bind_text(), and
+ * switch_core_db_bind_text16() is a destructor used to dispose of the BLOB or
+ * text after SQLite has finished with it. If the fifth argument is the
+ * special value SQLITE_STATIC, then the library assumes that the information
+ * is in static, unmanaged space and does not need to be freed. If the
+ * fifth argument has the value SQLITE_TRANSIENT, then SQLite makes its
+ * own private copy of the data.
+ *
+ * The switch_core_db_bind_* routine must be called before switch_core_db_step() after
+ * an switch_core_db_prepare() or sqlite3_reset(). Unbound parameterss are
+ * interpreted as NULL.
+ */
+SWITCH_DECLARE(int) switch_core_db_bind_text(switch_core_db_stmt_t *pStmt, int i, const char *zData, int nData, switch_core_db_destructor_type_t xDel);
+
+/**
+ * In the SQL strings input to switch_core_db_prepare(),
+ * one or more literals can be replace by parameters "?" or ":AAA" or
+ * "$VVV" where AAA is an identifer and VVV is a variable name according
+ * to the syntax rules of the TCL programming language.
+ * The value of these parameters (also called "host parameter names") can
+ * be set using the routines listed below.
+ *
+ * In every case, the first parameter is a pointer to the sqlite3_stmt
+ * structure returned from switch_core_db_prepare(). The second parameter is the
+ * index of the parameter. The first parameter as an index of 1. For
+ * named parameters (":AAA" or "$VVV") you can use
+ * sqlite3_bind_parameter_index() to get the correct index value given
+ * the parameters name. If the same named parameter occurs more than
+ * once, it is assigned the same index each time.
+ *
+ * The sqlite3_bind_* routine must be called before switch_core_db_step() after
+ * an switch_core_db_prepare() or switch_core_db_reset(). Unbound parameterss are
+ * interpreted as NULL.
+ */
+SWITCH_DECLARE(int) switch_core_db_bind_double(switch_core_db_stmt_t *pStmt, int i, double dValue);
+
+/**
+ * Each entry in a table has a unique integer key. (The key is
+ * the value of the INTEGER PRIMARY KEY column if there is such a column,
+ * otherwise the key is generated at random. The unique key is always
+ * available as the ROWID, OID, or _ROWID_ column.) The following routine
+ * returns the integer key of the most recent insert in the database.
+ *
+ * This function is similar to the mysql_insert_id() function from MySQL.
+ */
+SWITCH_DECLARE(int64_t) switch_core_db_last_insert_rowid(switch_core_db_t *db);
+
+/**
+ * This next routine is really just a wrapper around switch_core_db_exec().
+ * Instead of invoking a user-supplied callback for each row of the
+ * result, this routine remembers each row of the result in memory
+ * obtained from malloc(), then returns all of the result after the
+ * query has finished.
+ *
+ * As an example, suppose the query result where this table:
+ *
+ * Name | Age
+ * -----------------------
+ * Alice | 43
+ * Bob | 28
+ * Cindy | 21
+ *
+ * If the 3rd argument were &azResult then after the function returns
+ * azResult will contain the following data:
+ *
+ * azResult[0] = "Name";
+ * azResult[1] = "Age";
+ * azResult[2] = "Alice";
+ * azResult[3] = "43";
+ * azResult[4] = "Bob";
+ * azResult[5] = "28";
+ * azResult[6] = "Cindy";
+ * azResult[7] = "21";
+ *
+ * Notice that there is an extra row of data containing the column
+ * headers. But the *nrow return value is still 3. *ncolumn is
+ * set to 2. In general, the number of values inserted into azResult
+ * will be ((*nrow) + 1)*(*ncolumn).
+ *
+ * After the calling function has finished using the result, it should
+ * pass the result data pointer to switch_core_db_free_table() in order to
+ * release the memory that was malloc-ed. Because of the way the
+ * malloc() happens, the calling function must not try to call
+ * free() directly. Only switch_core_db_free_table() is able to release
+ * the memory properly and safely.
+ *
+ * The return value of this routine is the same as from switch_core_db_exec().
+ */
+SWITCH_DECLARE(int) switch_core_db_get_table(
+ switch_core_db_t *db, /* An open database */
+ const char *sql, /* SQL to be executed */
+ char ***resultp, /* Result written to a char *[] that this points to */
+ int *nrow, /* Number of result rows written here */
+ int *ncolumn, /* Number of result columns written here */
+ char **errmsg /* Error msg written here */
+);
+
+/**
+ * Call this routine to free the memory that sqlite3_get_table() allocated.
+ */
+SWITCH_DECLARE(void) switch_core_db_free_table(char **result);
+
+/**
* Call this routine to free the memory that switch_core_db_get_table() allocated.
*/
SWITCH_DECLARE(void) switch_core_db_free(char *z);
Modified: freeswitch/trunk/src/mod/event_handlers/mod_cdr/mod_cdr.vcproj
==============================================================================
--- freeswitch/trunk/src/mod/event_handlers/mod_cdr/mod_cdr.vcproj (original)
+++ freeswitch/trunk/src/mod/event_handlers/mod_cdr/mod_cdr.vcproj Sat Mar 10 16:57:02 2007
@@ -397,6 +397,10 @@
>
</File>
<File
+ RelativePath=".\sqlitecdr.cpp"
+ >
+ </File>
+ <File
RelativePath=".\xmlcdr.cpp"
>
</File>
@@ -431,6 +435,10 @@
>
</File>
<File
+ RelativePath=".\sqlitecdr.h"
+ >
+ </File>
+ <File
RelativePath=".\xmlcdr.h"
>
</File>
Modified: freeswitch/trunk/src/mod/event_handlers/mod_cdr/sqlitecdr.cpp
==============================================================================
--- freeswitch/trunk/src/mod/event_handlers/mod_cdr/sqlitecdr.cpp (original)
+++ freeswitch/trunk/src/mod/event_handlers/mod_cdr/sqlitecdr.cpp Sat Mar 10 16:57:02 2007
@@ -190,7 +190,7 @@
int sql_rc = switch_core_db_open(db_filename.c_str(),&db);
- if(sql_rc != SQLITE_OK)
+ if(sql_rc != SWITCH_CORE_DB_OK)
{
switch_console_printf(SWITCH_CHANNEL_LOG,"There was an error opening database filename %s. The error was: %s. SqliteCDR logging has been disabled until the problem is resolved and modcdr_reload is initiated.\n",db_filename.c_str(),switch_core_db_errmsg(db));
activated = 0;
@@ -211,7 +211,7 @@
temp_sql_tables["freeswitchcdr"] = 0;
temp_sql_tables["chanvars"] = 0;
- if(sql_rc == SQLITE_OK)
+ if(sql_rc == SWITCH_CORE_DB_OK)
{
for(int i = 0; i < ((nrow+1)*ncol); i++)
{
@@ -284,7 +284,7 @@
char *errormessage2;
sql_rc = switch_core_db_get_table(db,sql_query_get_schema_of_freeswitchcdr,&result2,&nrow,&ncol,&errormessage2);
- if(sql_rc == SQLITE_OK)
+ if(sql_rc == SWITCH_CORE_DB_OK)
{
for(int k = 0; k < nrow; k++)
{
@@ -451,25 +451,25 @@
int column = 1;
switch_core_db_step(stmt_begin);
switch_core_db_reset(stmt_begin);
- switch_core_db_bind_int64(stmt, column++, (sqlite_int64) sqlite_callstartdate);
- switch_core_db_bind_int64(stmt, column++, (sqlite_int64) sqlite_callanswerdate);
- switch_core_db_bind_int64(stmt, column++, (sqlite_int64) sqlite_calltransferdate);
- switch_core_db_bind_int64(stmt, column++, (sqlite_int64) sqlite_callenddate);
+ switch_core_db_bind_int64(stmt, column++, sqlite_callstartdate);
+ switch_core_db_bind_int64(stmt, column++, sqlite_callanswerdate);
+ switch_core_db_bind_int64(stmt, column++, sqlite_calltransferdate);
+ switch_core_db_bind_int64(stmt, column++, sqlite_callenddate);
switch_core_db_bind_int(stmt, column++, (int) originated);
- switch_core_db_bind_text(stmt, column++, clid,-1,SQLITE_STATIC);
- switch_core_db_bind_text(stmt, column++, src,-1,SQLITE_STATIC);
- switch_core_db_bind_text(stmt, column++, dst,-1,SQLITE_STATIC);
- switch_core_db_bind_text(stmt, column++, ani,-1,SQLITE_STATIC);
- switch_core_db_bind_text(stmt, column++, aniii,-1,SQLITE_STATIC);
- switch_core_db_bind_text(stmt, column++, dialplan,-1,SQLITE_STATIC);
- switch_core_db_bind_text(stmt, column++, myuuid,36,SQLITE_STATIC);
- switch_core_db_bind_text(stmt, column++, destuuid,36,SQLITE_STATIC);
- switch_core_db_bind_text(stmt, column++, srcchannel,-1,SQLITE_STATIC);
- switch_core_db_bind_text(stmt, column++, dstchannel,-1,SQLITE_STATIC);
- switch_core_db_bind_text(stmt, column++, network_addr,-1,SQLITE_STATIC);
- switch_core_db_bind_text(stmt, column++, lastapp,-1,SQLITE_STATIC);
- switch_core_db_bind_text(stmt, column++, lastdata,-1,SQLITE_STATIC);
- switch_core_db_bind_int64(stmt, column++, (sqlite_int64) billusec);
+ switch_core_db_bind_text(stmt, column++, clid,-1,SWITCH_CORE_DB_STATIC);
+ switch_core_db_bind_text(stmt, column++, src,-1,SWITCH_CORE_DB_STATIC);
+ switch_core_db_bind_text(stmt, column++, dst,-1,SWITCH_CORE_DB_STATIC);
+ switch_core_db_bind_text(stmt, column++, ani,-1,SWITCH_CORE_DB_STATIC);
+ switch_core_db_bind_text(stmt, column++, aniii,-1,SWITCH_CORE_DB_STATIC);
+ switch_core_db_bind_text(stmt, column++, dialplan,-1,SWITCH_CORE_DB_STATIC);
+ switch_core_db_bind_text(stmt, column++, myuuid,36,SWITCH_CORE_DB_STATIC);
+ switch_core_db_bind_text(stmt, column++, destuuid,36,SWITCH_CORE_DB_STATIC);
+ switch_core_db_bind_text(stmt, column++, srcchannel,-1,SWITCH_CORE_DB_STATIC);
+ switch_core_db_bind_text(stmt, column++, dstchannel,-1,SWITCH_CORE_DB_STATIC);
+ switch_core_db_bind_text(stmt, column++, network_addr,-1,SWITCH_CORE_DB_STATIC);
+ switch_core_db_bind_text(stmt, column++, lastapp,-1,SWITCH_CORE_DB_STATIC);
+ switch_core_db_bind_text(stmt, column++, lastdata,-1,SWITCH_CORE_DB_STATIC);
+ switch_core_db_bind_int64(stmt, column++, billusec);
switch_core_db_bind_int(stmt, column++, disposition);
switch_core_db_bind_int(stmt, column++, (int) hangupcause);
switch_core_db_bind_int(stmt, column++, amaflags);
@@ -510,7 +510,7 @@
case CDR_DECIMAL:
case CDR_STRING:
{
- switch_core_db_bind_text(stmt,column++,iItr->second.c_str(),-1,SQLITE_STATIC);
+ switch_core_db_bind_text(stmt,column++,iItr->second.c_str(),-1,SWITCH_CORE_DB_STATIC);
break;
}
default:
@@ -520,11 +520,11 @@
}
int sql_rc = switch_core_db_step(stmt);
- if(sql_rc != SQLITE_DONE)
+ if(sql_rc != SWITCH_CORE_DB_DONE)
{
- if(sql_rc == SQLITE_BUSY)
+ if(sql_rc == SWITCH_CORE_DB_BUSY)
sql_rc = switch_core_db_step(stmt);
- else if (sql_rc == SQLITE_ERROR || sql_rc == SQLITE_MISUSE)
+ else if (sql_rc == SWITCH_CORE_DB_ERROR || sql_rc == SWITCH_CORE_DB_MISUSE)
switch_console_printf(SWITCH_CHANNEL_LOG,"There was an error executing switch_core_db_step on SqliteCDR::stmt. The error was: %s\n",switch_core_db_errmsg(db));
}
@@ -532,20 +532,20 @@
if(logchanvars && chanvars_supp.size())
{
- sqlite_int64 rowid = switch_core_db_last_insert_rowid(db);
+ int64_t rowid = switch_core_db_last_insert_rowid(db);
int column2 = 1;
std::map<std::string,std::string>::iterator iItr, iEnd;
for(iItr = chanvars_supp.begin(), iEnd = chanvars_supp.end(); iItr != iEnd; iItr++)
{
switch_core_db_bind_int64(stmt_chanvars, column2++, rowid);
- switch_core_db_bind_text(stmt_chanvars, column2++, iItr->first.c_str(),-1,SQLITE_STATIC);
- switch_core_db_bind_text(stmt_chanvars, column2++, iItr->second.c_str(),-1,SQLITE_STATIC);
+ switch_core_db_bind_text(stmt_chanvars, column2++, iItr->first.c_str(),-1,SWITCH_CORE_DB_STATIC);
+ switch_core_db_bind_text(stmt_chanvars, column2++, iItr->second.c_str(),-1,SWITCH_CORE_DB_STATIC);
int sql_rc = switch_core_db_step(stmt_chanvars);
- if(sql_rc != SQLITE_DONE)
+ if(sql_rc != SWITCH_CORE_DB_DONE)
{
- if(sql_rc == SQLITE_BUSY)
+ if(sql_rc == SWITCH_CORE_DB_BUSY)
sql_rc = switch_core_db_step(stmt_chanvars);
- else if (sql_rc == SQLITE_ERROR || sql_rc == SQLITE_MISUSE)
+ else if (sql_rc == SWITCH_CORE_DB_ERROR || sql_rc == SWITCH_CORE_DB_MISUSE)
switch_console_printf(SWITCH_CHANNEL_LOG,"There was an error executing switch_core_db_step on SqliteCDR::stmt_chanvars. The error was: %s\n",switch_core_db_errmsg(db));
}
Modified: freeswitch/trunk/src/switch_core_db.c
==============================================================================
--- freeswitch/trunk/src/switch_core_db.c (original)
+++ freeswitch/trunk/src/switch_core_db.c Sat Mar 10 16:57:02 2007
@@ -91,6 +91,46 @@
return sqlite3_step(stmt);
}
+SWITCH_DECLARE(int) switch_core_db_reset(switch_core_db_stmt_t *pStmt)
+{
+ return sqlite3_reset(pStmt);
+}
+
+SWITCH_DECLARE(int) switch_core_db_bind_int(switch_core_db_stmt_t *pStmt, int i, int iValue)
+{
+ return sqlite3_bind_int(pStmt, i, iValue);
+}
+
+SWITCH_DECLARE(int) switch_core_db_bind_int64(switch_core_db_stmt_t *pStmt, int i, int64_t iValue)
+{
+ return sqlite3_bind_int64(pStmt, i, iValue);
+}
+
+SWITCH_DECLARE(int) switch_core_db_bind_text(switch_core_db_stmt_t *pStmt, int i, const char *zData, int nData, switch_core_db_destructor_type_t xDel)
+{
+ return sqlite3_bind_text(pStmt, i, zData, nData, xDel);
+}
+
+SWITCH_DECLARE(int) switch_core_db_bind_double(switch_core_db_stmt_t *pStmt, int i, double dValue)
+{
+ return sqlite3_bind_double(pStmt, i, dValue);
+}
+
+SWITCH_DECLARE(int64_t) switch_core_db_last_insert_rowid(switch_core_db_t *db)
+{
+ return sqlite3_last_insert_rowid(db);
+}
+
+SWITCH_DECLARE(int) switch_core_db_get_table(switch_core_db_t *db, const char *sql, char ***resultp, int *nrow, int *ncolumn, char **errmsg)
+{
+ return sqlite3_get_table(db, sql, resultp, nrow, ncolumn, errmsg);
+}
+
+SWITCH_DECLARE(void) switch_core_db_free_table(char **result)
+{
+ sqlite3_free_table(result);
+}
+
SWITCH_DECLARE(void) switch_core_db_free(char *z)
{
sqlite3_free(z);
More information about the Freeswitch-svn
mailing list