aboutsummaryrefslogtreecommitdiffstats
path: root/cdr
diff options
context:
space:
mode:
authortilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2007-12-13 17:46:04 +0000
committertilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2007-12-13 17:46:04 +0000
commit958387bc2e4fde5282131c92475209940bb7c46e (patch)
tree740a89c1046a59e416ac2abecb4ce986330bfc16 /cdr
parent10fce374f200e44fffa3aefa4ed6e693b168ae44 (diff)
Don't use backslash as an escape character, unless it really is an escape character.
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@92779 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'cdr')
-rw-r--r--cdr/cdr_adaptive_odbc.c31
1 files changed, 16 insertions, 15 deletions
diff --git a/cdr/cdr_adaptive_odbc.c b/cdr/cdr_adaptive_odbc.c
index f6086468a..98706076d 100644
--- a/cdr/cdr_adaptive_odbc.c
+++ b/cdr/cdr_adaptive_odbc.c
@@ -327,6 +327,12 @@ static int odbc_log(struct ast_cdr *cdr)
lensql = snprintf(sql, sizesql, "INSERT INTO %s (", tableptr->table);
lensql2 = snprintf(sql2, sizesql2, " VALUES (");
+ /* No need to check the connection now; we'll handle any failure in prepare_and_execute */
+ if (!(obj = ast_odbc_request_obj(tableptr->connection, 0))) {
+ ast_log(LOG_WARNING, "cdr_adaptive_odbc: Unable to retrieve database handle for '%s:%s'. CDR failed: %s\n", tableptr->connection, tableptr->table, sql);
+ continue;
+ }
+
AST_LIST_TRAVERSE(&(tableptr->columns), entry, list) {
/* Check if we have a similarly named variable */
ast_cdr_getvar(cdr, entry->cdrname, &colptr, colbuf, sizeof(colbuf), 0,
@@ -369,7 +375,7 @@ static int odbc_log(struct ast_cdr *cdr)
if (*tmp == '\'') {
strcpy(sql2 + lensql2, "''");
lensql2 += 2;
- } else if (*tmp == '\\') {
+ } else if (*tmp == '\\' && ast_odbc_backslash_is_escape(obj)) {
strcpy(sql2 + lensql2, "\\\\");
lensql2 += 2;
} else {
@@ -552,21 +558,16 @@ static int odbc_log(struct ast_cdr *cdr)
strcat(sql + lensql, sql2);
ast_verb(11, "[%s]\n", sql);
- /* No need to check the connection now; we'll handle any failure in prepare_and_execute */
- obj = ast_odbc_request_obj(tableptr->connection, 0);
- if (obj) {
- stmt = ast_odbc_prepare_and_execute(obj, generic_prepare, sql);
- if (stmt) {
- SQLRowCount(stmt, &rows);
- SQLFreeHandle(SQL_HANDLE_STMT, stmt);
- }
- if (rows == 0) {
- ast_log(LOG_WARNING, "cdr_adaptive_odbc: Insert failed on '%s:%s'. CDR failed: %s\n", tableptr->connection, tableptr->table, sql);
- }
- ast_odbc_release_obj(obj);
- } else {
- ast_log(LOG_WARNING, "cdr_adaptive_odbc: Unable to retrieve database handle for '%s:%s'. CDR failed: %s\n", tableptr->connection, tableptr->table, sql);
+
+ stmt = ast_odbc_prepare_and_execute(obj, generic_prepare, sql);
+ if (stmt) {
+ SQLRowCount(stmt, &rows);
+ SQLFreeHandle(SQL_HANDLE_STMT, stmt);
+ }
+ if (rows == 0) {
+ ast_log(LOG_WARNING, "cdr_adaptive_odbc: Insert failed on '%s:%s'. CDR failed: %s\n", tableptr->connection, tableptr->table, sql);
}
+ ast_odbc_release_obj(obj);
}
AST_RWLIST_UNLOCK(&odbc_tables);