mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-05-31 18:55:49 +00:00
fix sqlite cdr build with new sqlite wrapper in the core, exposing all the necessary functions. Add sqlite cdr to the windows build.
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@4505 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
parent
d212e1ab5c
commit
499fba1651
@ -59,6 +59,22 @@ typedef struct sqlite3_stmt switch_core_db_stmt_t;
|
|||||||
|
|
||||||
typedef int (*switch_core_db_callback_func_t)(void *pArg, int argc, char **argv, char **columnNames);
|
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.
|
* A function to close the database.
|
||||||
*
|
*
|
||||||
@ -278,6 +294,177 @@ SWITCH_DECLARE(int) switch_core_db_prepare(switch_core_db_t *db,
|
|||||||
*/
|
*/
|
||||||
SWITCH_DECLARE(int) switch_core_db_step(switch_core_db_stmt_t *stmt);
|
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.
|
* Call this routine to free the memory that switch_core_db_get_table() allocated.
|
||||||
*/
|
*/
|
||||||
|
@ -396,6 +396,10 @@
|
|||||||
RelativePath=".\pddcdr.cpp"
|
RelativePath=".\pddcdr.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\sqlitecdr.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\xmlcdr.cpp"
|
RelativePath=".\xmlcdr.cpp"
|
||||||
>
|
>
|
||||||
@ -430,6 +434,10 @@
|
|||||||
RelativePath=".\pddcdr.h"
|
RelativePath=".\pddcdr.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\sqlitecdr.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\xmlcdr.h"
|
RelativePath=".\xmlcdr.h"
|
||||||
>
|
>
|
||||||
|
@ -190,7 +190,7 @@ void SqliteCDR::connect(switch_xml_t& cfg, switch_xml_t& xml, switch_xml_t& sett
|
|||||||
|
|
||||||
int sql_rc = switch_core_db_open(db_filename.c_str(),&db);
|
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));
|
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;
|
activated = 0;
|
||||||
@ -211,7 +211,7 @@ void SqliteCDR::connect(switch_xml_t& cfg, switch_xml_t& xml, switch_xml_t& sett
|
|||||||
temp_sql_tables["freeswitchcdr"] = 0;
|
temp_sql_tables["freeswitchcdr"] = 0;
|
||||||
temp_sql_tables["chanvars"] = 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++)
|
for(int i = 0; i < ((nrow+1)*ncol); i++)
|
||||||
{
|
{
|
||||||
@ -284,7 +284,7 @@ void SqliteCDR::connect(switch_xml_t& cfg, switch_xml_t& xml, switch_xml_t& sett
|
|||||||
char *errormessage2;
|
char *errormessage2;
|
||||||
sql_rc = switch_core_db_get_table(db,sql_query_get_schema_of_freeswitchcdr,&result2,&nrow,&ncol,&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++)
|
for(int k = 0; k < nrow; k++)
|
||||||
{
|
{
|
||||||
@ -451,25 +451,25 @@ bool SqliteCDR::process_record()
|
|||||||
int column = 1;
|
int column = 1;
|
||||||
switch_core_db_step(stmt_begin);
|
switch_core_db_step(stmt_begin);
|
||||||
switch_core_db_reset(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_callstartdate);
|
||||||
switch_core_db_bind_int64(stmt, column++, (sqlite_int64) sqlite_callanswerdate);
|
switch_core_db_bind_int64(stmt, column++, sqlite_callanswerdate);
|
||||||
switch_core_db_bind_int64(stmt, column++, (sqlite_int64) sqlite_calltransferdate);
|
switch_core_db_bind_int64(stmt, column++, sqlite_calltransferdate);
|
||||||
switch_core_db_bind_int64(stmt, column++, (sqlite_int64) sqlite_callenddate);
|
switch_core_db_bind_int64(stmt, column++, sqlite_callenddate);
|
||||||
switch_core_db_bind_int(stmt, column++, (int) originated);
|
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++, clid,-1,SWITCH_CORE_DB_STATIC);
|
||||||
switch_core_db_bind_text(stmt, column++, src,-1,SQLITE_STATIC);
|
switch_core_db_bind_text(stmt, column++, src,-1,SWITCH_CORE_DB_STATIC);
|
||||||
switch_core_db_bind_text(stmt, column++, dst,-1,SQLITE_STATIC);
|
switch_core_db_bind_text(stmt, column++, dst,-1,SWITCH_CORE_DB_STATIC);
|
||||||
switch_core_db_bind_text(stmt, column++, ani,-1,SQLITE_STATIC);
|
switch_core_db_bind_text(stmt, column++, ani,-1,SWITCH_CORE_DB_STATIC);
|
||||||
switch_core_db_bind_text(stmt, column++, aniii,-1,SQLITE_STATIC);
|
switch_core_db_bind_text(stmt, column++, aniii,-1,SWITCH_CORE_DB_STATIC);
|
||||||
switch_core_db_bind_text(stmt, column++, dialplan,-1,SQLITE_STATIC);
|
switch_core_db_bind_text(stmt, column++, dialplan,-1,SWITCH_CORE_DB_STATIC);
|
||||||
switch_core_db_bind_text(stmt, column++, myuuid,36,SQLITE_STATIC);
|
switch_core_db_bind_text(stmt, column++, myuuid,36,SWITCH_CORE_DB_STATIC);
|
||||||
switch_core_db_bind_text(stmt, column++, destuuid,36,SQLITE_STATIC);
|
switch_core_db_bind_text(stmt, column++, destuuid,36,SWITCH_CORE_DB_STATIC);
|
||||||
switch_core_db_bind_text(stmt, column++, srcchannel,-1,SQLITE_STATIC);
|
switch_core_db_bind_text(stmt, column++, srcchannel,-1,SWITCH_CORE_DB_STATIC);
|
||||||
switch_core_db_bind_text(stmt, column++, dstchannel,-1,SQLITE_STATIC);
|
switch_core_db_bind_text(stmt, column++, dstchannel,-1,SWITCH_CORE_DB_STATIC);
|
||||||
switch_core_db_bind_text(stmt, column++, network_addr,-1,SQLITE_STATIC);
|
switch_core_db_bind_text(stmt, column++, network_addr,-1,SWITCH_CORE_DB_STATIC);
|
||||||
switch_core_db_bind_text(stmt, column++, lastapp,-1,SQLITE_STATIC);
|
switch_core_db_bind_text(stmt, column++, lastapp,-1,SWITCH_CORE_DB_STATIC);
|
||||||
switch_core_db_bind_text(stmt, column++, lastdata,-1,SQLITE_STATIC);
|
switch_core_db_bind_text(stmt, column++, lastdata,-1,SWITCH_CORE_DB_STATIC);
|
||||||
switch_core_db_bind_int64(stmt, column++, (sqlite_int64) billusec);
|
switch_core_db_bind_int64(stmt, column++, billusec);
|
||||||
switch_core_db_bind_int(stmt, column++, disposition);
|
switch_core_db_bind_int(stmt, column++, disposition);
|
||||||
switch_core_db_bind_int(stmt, column++, (int) hangupcause);
|
switch_core_db_bind_int(stmt, column++, (int) hangupcause);
|
||||||
switch_core_db_bind_int(stmt, column++, amaflags);
|
switch_core_db_bind_int(stmt, column++, amaflags);
|
||||||
@ -510,7 +510,7 @@ bool SqliteCDR::process_record()
|
|||||||
case CDR_DECIMAL:
|
case CDR_DECIMAL:
|
||||||
case CDR_STRING:
|
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;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@ -520,11 +520,11 @@ bool SqliteCDR::process_record()
|
|||||||
}
|
}
|
||||||
|
|
||||||
int sql_rc = switch_core_db_step(stmt);
|
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);
|
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));
|
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 @@ bool SqliteCDR::process_record()
|
|||||||
|
|
||||||
if(logchanvars && chanvars_supp.size())
|
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;
|
int column2 = 1;
|
||||||
std::map<std::string,std::string>::iterator iItr, iEnd;
|
std::map<std::string,std::string>::iterator iItr, iEnd;
|
||||||
for(iItr = chanvars_supp.begin(), iEnd = chanvars_supp.end(); iItr != iEnd; iItr++)
|
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_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->first.c_str(),-1,SWITCH_CORE_DB_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->second.c_str(),-1,SWITCH_CORE_DB_STATIC);
|
||||||
int sql_rc = switch_core_db_step(stmt_chanvars);
|
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);
|
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));
|
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));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,6 +91,46 @@ SWITCH_DECLARE(int) switch_core_db_step(switch_core_db_stmt_t *stmt)
|
|||||||
return sqlite3_step(stmt);
|
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)
|
SWITCH_DECLARE(void) switch_core_db_free(char *z)
|
||||||
{
|
{
|
||||||
sqlite3_free(z);
|
sqlite3_free(z);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user