summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRodrigo Ramírez Norambuena <decipher.hk@gmail.com>2015-05-06 22:18:28 -0400
committerRodrigo Ramírez Norambuena <decipher.hk@gmail.com>2015-05-20 12:08:18 -0400
commit9c3c7797e5f1fead0d489b7cdaa41b6be5349898 (patch)
treea3e69d53aed6ce55250f1632523ced9d3c1489cc
parent2bbfcfc647dc69089236cde0003ba88c3161d1ec (diff)
cel, cdr: Assigned separator for column name and values.
Use a separator string between column names and values for SQL sentences instead of evaluating the separator to use each time. This change adds a space after the comma in constructing SQL sentences. Before the SQL was created like "INSERT INTO cdr(calldate,clid,dst" without spaces between column name and values. The files applied this change are cdr/cdr_adaptive_odbc.c, cdr/cdr_pgsql.c, cel/cel_odbc.c ASTERISK-25109 #close Reported By: Rodrigo Ramírez Norambuena <decipher.hk@gmail.com> Change-Id: Ia5a1a161f5e26e1643703b30f8cc9cf0860cc7ea
-rw-r--r--cdr/cdr_adaptive_odbc.c33
-rw-r--r--cdr/cdr_pgsql.c50
-rw-r--r--cel/cel_odbc.c48
3 files changed, 66 insertions, 65 deletions
diff --git a/cdr/cdr_adaptive_odbc.c b/cdr/cdr_adaptive_odbc.c
index e6b60dc10..f276959a0 100644
--- a/cdr/cdr_adaptive_odbc.c
+++ b/cdr/cdr_adaptive_odbc.c
@@ -395,6 +395,8 @@ static int odbc_log(struct ast_cdr *cdr)
char colbuf[1024], *colptr;
SQLHSTMT stmt = NULL;
SQLLEN rows = 0;
+ char *separator;
+ int quoted = 0;
if (!sql || !sql2) {
if (sql)
@@ -412,8 +414,7 @@ static int odbc_log(struct ast_cdr *cdr)
}
AST_LIST_TRAVERSE(&odbc_tables, tableptr, list) {
- int first = 1;
- int quoted = 0;
+ separator = "";
if (tableptr->quoted_identifiers != '\0'){
quoted = 1;
@@ -517,7 +518,7 @@ static int odbc_log(struct ast_cdr *cdr)
LENGTHEN_BUF2(strlen(colptr));
/* Encode value, with escaping */
- ast_str_append(&sql2, 0, "%s'", first ? "" : ",");
+ ast_str_append(&sql2, 0, "%s'", separator);
for (tmp = colptr; *tmp; tmp++) {
if (*tmp == '\'') {
ast_str_append(&sql2, 0, "''");
@@ -550,7 +551,7 @@ static int odbc_log(struct ast_cdr *cdr)
}
LENGTHEN_BUF2(17);
- ast_str_append(&sql2, 0, "%s{ d '%04d-%02d-%02d' }", first ? "" : ",", year, month, day);
+ ast_str_append(&sql2, 0, "%s{ d '%04d-%02d-%02d' }", separator, year, month, day);
}
break;
case SQL_TYPE_TIME:
@@ -566,7 +567,7 @@ static int odbc_log(struct ast_cdr *cdr)
}
LENGTHEN_BUF2(15);
- ast_str_append(&sql2, 0, "%s{ t '%02d:%02d:%02d' }", first ? "" : ",", hour, minute, second);
+ ast_str_append(&sql2, 0, "%s{ t '%02d:%02d:%02d' }", separator, hour, minute, second);
}
break;
case SQL_TYPE_TIMESTAMP:
@@ -594,7 +595,7 @@ static int odbc_log(struct ast_cdr *cdr)
}
LENGTHEN_BUF2(26);
- ast_str_append(&sql2, 0, "%s{ ts '%04d-%02d-%02d %02d:%02d:%02d' }", first ? "" : ",", year, month, day, hour, minute, second);
+ ast_str_append(&sql2, 0, "%s{ ts '%04d-%02d-%02d %02d:%02d:%02d' }", separator, year, month, day, hour, minute, second);
}
break;
case SQL_INTEGER:
@@ -608,7 +609,7 @@ static int odbc_log(struct ast_cdr *cdr)
}
LENGTHEN_BUF2(12);
- ast_str_append(&sql2, 0, "%s%d", first ? "" : ",", integer);
+ ast_str_append(&sql2, 0, "%s%d", separator, integer);
}
break;
case SQL_BIGINT:
@@ -622,7 +623,7 @@ static int odbc_log(struct ast_cdr *cdr)
}
LENGTHEN_BUF2(24);
- ast_str_append(&sql2, 0, "%s%lld", first ? "" : ",", integer);
+ ast_str_append(&sql2, 0, "%s%lld", separator, integer);
}
break;
case SQL_SMALLINT:
@@ -636,7 +637,7 @@ static int odbc_log(struct ast_cdr *cdr)
}
LENGTHEN_BUF2(6);
- ast_str_append(&sql2, 0, "%s%d", first ? "" : ",", integer);
+ ast_str_append(&sql2, 0, "%s%d", separator, integer);
}
break;
case SQL_TINYINT:
@@ -650,7 +651,7 @@ static int odbc_log(struct ast_cdr *cdr)
}
LENGTHEN_BUF2(4);
- ast_str_append(&sql2, 0, "%s%d", first ? "" : ",", integer);
+ ast_str_append(&sql2, 0, "%s%d", separator, integer);
}
break;
case SQL_BIT:
@@ -666,7 +667,7 @@ static int odbc_log(struct ast_cdr *cdr)
integer = 1;
LENGTHEN_BUF2(2);
- ast_str_append(&sql2, 0, "%s%d", first ? "" : ",", integer);
+ ast_str_append(&sql2, 0, "%s%d", separator, integer);
}
break;
case SQL_NUMERIC:
@@ -698,7 +699,7 @@ static int odbc_log(struct ast_cdr *cdr)
}
LENGTHEN_BUF2(entry->decimals);
- ast_str_append(&sql2, 0, "%s%*.*lf", first ? "" : ",", entry->decimals, entry->radix, number);
+ ast_str_append(&sql2, 0, "%s%*.*lf", separator, entry->decimals, entry->radix, number);
}
break;
case SQL_FLOAT:
@@ -731,7 +732,7 @@ static int odbc_log(struct ast_cdr *cdr)
}
LENGTHEN_BUF2(entry->decimals);
- ast_str_append(&sql2, 0, "%s%lf", first ? "" : ",", number);
+ ast_str_append(&sql2, 0, "%s%lf", separator, number);
}
break;
default:
@@ -739,11 +740,11 @@ static int odbc_log(struct ast_cdr *cdr)
continue;
}
if (quoted) {
- ast_str_append(&sql, 0, "%s%s", first ? "" : ",", entry->name);
+ ast_str_append(&sql, 0, "%s%s", separator, entry->name);
} else {
- ast_str_append(&sql, 0, "%s%c%s%c", first ? "" : ",", tableptr->quoted_identifiers, entry->name, tableptr->quoted_identifiers);
+ ast_str_append(&sql, 0, "%s%c%s%c", separator, tableptr->quoted_identifiers, entry->name, tableptr->quoted_identifiers);
}
- first = 0;
+ separator = ", ";
} else if (entry->filtervalue
&& ((!entry->negatefiltervalue && entry->filtervalue[0] != '\0')
|| (entry->negatefiltervalue && entry->filtervalue[0] == '\0'))) {
diff --git a/cdr/cdr_pgsql.c b/cdr/cdr_pgsql.c
index 37bc08406..8dc49e107 100644
--- a/cdr/cdr_pgsql.c
+++ b/cdr/cdr_pgsql.c
@@ -248,7 +248,7 @@ static int pgsql_log(struct ast_cdr *cdr)
struct columns *cur;
struct ast_str *sql = ast_str_create(maxsize), *sql2 = ast_str_create(maxsize2);
char buf[257], escapebuf[513], *value;
- int first = 1;
+ char *separator = "";
if (!sql || !sql2) {
ast_free(sql);
@@ -270,86 +270,86 @@ static int pgsql_log(struct ast_cdr *cdr)
if (cur->notnull && !cur->hasdefault) {
/* Field is NOT NULL (but no default), must include it anyway */
LENGTHEN_BUF1(strlen(cur->name) + 2);
- ast_str_append(&sql, 0, "%s\"%s\"", first ? "" : ",", cur->name);
+ ast_str_append(&sql, 0, "%s\"%s\"", separator, cur->name);
LENGTHEN_BUF2(3);
- ast_str_append(&sql2, 0, "%s''", first ? "" : ",");
- first = 0;
+ ast_str_append(&sql2, 0, "%s''", separator);
+ separator = ", ";
}
continue;
}
LENGTHEN_BUF1(strlen(cur->name) + 2);
- ast_str_append(&sql, 0, "%s\"%s\"", first ? "" : ",", cur->name);
+ ast_str_append(&sql, 0, "%s\"%s\"", separator, cur->name);
if (strcmp(cur->name, "start") == 0 || strcmp(cur->name, "calldate") == 0) {
if (strncmp(cur->type, "int", 3) == 0) {
LENGTHEN_BUF2(13);
- ast_str_append(&sql2, 0, "%s%ld", first ? "" : ",", (long) cdr->start.tv_sec);
+ ast_str_append(&sql2, 0, "%s%ld", separator, (long) cdr->start.tv_sec);
} else if (strncmp(cur->type, "float", 5) == 0) {
LENGTHEN_BUF2(31);
- ast_str_append(&sql2, 0, "%s%f", first ? "" : ",", (double)cdr->start.tv_sec + (double)cdr->start.tv_usec / 1000000.0);
+ ast_str_append(&sql2, 0, "%s%f", separator, (double)cdr->start.tv_sec + (double)cdr->start.tv_usec / 1000000.0);
} else {
/* char, hopefully */
LENGTHEN_BUF2(31);
ast_localtime(&cdr->start, &tm, tz);
ast_strftime(buf, sizeof(buf), DATE_FORMAT, &tm);
- ast_str_append(&sql2, 0, "%s%s", first ? "" : ",", buf);
+ ast_str_append(&sql2, 0, "%s%s", separator, buf);
}
} else if (strcmp(cur->name, "answer") == 0) {
if (strncmp(cur->type, "int", 3) == 0) {
LENGTHEN_BUF2(13);
- ast_str_append(&sql2, 0, "%s%ld", first ? "" : ",", (long) cdr->answer.tv_sec);
+ ast_str_append(&sql2, 0, "%s%ld", separator, (long) cdr->answer.tv_sec);
} else if (strncmp(cur->type, "float", 5) == 0) {
LENGTHEN_BUF2(31);
- ast_str_append(&sql2, 0, "%s%f", first ? "" : ",", (double)cdr->answer.tv_sec + (double)cdr->answer.tv_usec / 1000000.0);
+ ast_str_append(&sql2, 0, "%s%f", separator, (double)cdr->answer.tv_sec + (double)cdr->answer.tv_usec / 1000000.0);
} else {
/* char, hopefully */
LENGTHEN_BUF2(31);
ast_localtime(&cdr->answer, &tm, tz);
ast_strftime(buf, sizeof(buf), DATE_FORMAT, &tm);
- ast_str_append(&sql2, 0, "%s%s", first ? "" : ",", buf);
+ ast_str_append(&sql2, 0, "%s%s", separator, buf);
}
} else if (strcmp(cur->name, "end") == 0) {
if (strncmp(cur->type, "int", 3) == 0) {
LENGTHEN_BUF2(13);
- ast_str_append(&sql2, 0, "%s%ld", first ? "" : ",", (long) cdr->end.tv_sec);
+ ast_str_append(&sql2, 0, "%s%ld", separator, (long) cdr->end.tv_sec);
} else if (strncmp(cur->type, "float", 5) == 0) {
LENGTHEN_BUF2(31);
- ast_str_append(&sql2, 0, "%s%f", first ? "" : ",", (double)cdr->end.tv_sec + (double)cdr->end.tv_usec / 1000000.0);
+ ast_str_append(&sql2, 0, "%s%f", separator, (double)cdr->end.tv_sec + (double)cdr->end.tv_usec / 1000000.0);
} else {
/* char, hopefully */
LENGTHEN_BUF2(31);
ast_localtime(&cdr->end, &tm, tz);
ast_strftime(buf, sizeof(buf), DATE_FORMAT, &tm);
- ast_str_append(&sql2, 0, "%s%s", first ? "" : ",", buf);
+ ast_str_append(&sql2, 0, "%s%s", separator, buf);
}
} else if (strcmp(cur->name, "duration") == 0 || strcmp(cur->name, "billsec") == 0) {
if (cur->type[0] == 'i') {
/* Get integer, no need to escape anything */
ast_cdr_format_var(cdr, cur->name, &value, buf, sizeof(buf), 0);
LENGTHEN_BUF2(13);
- ast_str_append(&sql2, 0, "%s%s", first ? "" : ",", value);
+ ast_str_append(&sql2, 0, "%s%s", separator, value);
} else if (strncmp(cur->type, "float", 5) == 0) {
struct timeval *when = cur->name[0] == 'd' ? &cdr->start : ast_tvzero(cdr->answer) ? &cdr->end : &cdr->answer;
LENGTHEN_BUF2(31);
- ast_str_append(&sql2, 0, "%s%f", first ? "" : ",", (double) (ast_tvdiff_us(cdr->end, *when) / 1000000.0));
+ ast_str_append(&sql2, 0, "%s%f", separator, (double) (ast_tvdiff_us(cdr->end, *when) / 1000000.0));
} else {
/* Char field, probably */
struct timeval *when = cur->name[0] == 'd' ? &cdr->start : ast_tvzero(cdr->answer) ? &cdr->end : &cdr->answer;
LENGTHEN_BUF2(31);
- ast_str_append(&sql2, 0, "%s'%f'", first ? "" : ",", (double) (ast_tvdiff_us(cdr->end, *when) / 1000000.0));
+ ast_str_append(&sql2, 0, "%s'%f'", separator, (double) (ast_tvdiff_us(cdr->end, *when) / 1000000.0));
}
} else if (strcmp(cur->name, "disposition") == 0 || strcmp(cur->name, "amaflags") == 0) {
if (strncmp(cur->type, "int", 3) == 0) {
/* Integer, no need to escape anything */
ast_cdr_format_var(cdr, cur->name, &value, buf, sizeof(buf), 1);
LENGTHEN_BUF2(13);
- ast_str_append(&sql2, 0, "%s%s", first ? "" : ",", value);
+ ast_str_append(&sql2, 0, "%s%s", separator, value);
} else {
/* Although this is a char field, there are no special characters in the values for these fields */
ast_cdr_format_var(cdr, cur->name, &value, buf, sizeof(buf), 0);
LENGTHEN_BUF2(31);
- ast_str_append(&sql2, 0, "%s'%s'", first ? "" : ",", value);
+ ast_str_append(&sql2, 0, "%s'%s'", separator, value);
}
} else {
/* Arbitrary field, could be anything */
@@ -358,19 +358,19 @@ static int pgsql_log(struct ast_cdr *cdr)
long long whatever;
if (value && sscanf(value, "%30lld", &whatever) == 1) {
LENGTHEN_BUF2(26);
- ast_str_append(&sql2, 0, "%s%lld", first ? "" : ",", whatever);
+ ast_str_append(&sql2, 0, "%s%lld", separator, whatever);
} else {
LENGTHEN_BUF2(2);
- ast_str_append(&sql2, 0, "%s0", first ? "" : ",");
+ ast_str_append(&sql2, 0, "%s0", separator);
}
} else if (strncmp(cur->type, "float", 5) == 0) {
long double whatever;
if (value && sscanf(value, "%30Lf", &whatever) == 1) {
LENGTHEN_BUF2(51);
- ast_str_append(&sql2, 0, "%s%30Lf", first ? "" : ",", whatever);
+ ast_str_append(&sql2, 0, "%s%30Lf", separator, whatever);
} else {
LENGTHEN_BUF2(2);
- ast_str_append(&sql2, 0, "%s0", first ? "" : ",");
+ ast_str_append(&sql2, 0, "%s0", separator);
}
/* XXX Might want to handle dates, times, and other misc fields here XXX */
} else {
@@ -379,10 +379,10 @@ static int pgsql_log(struct ast_cdr *cdr)
else
escapebuf[0] = '\0';
LENGTHEN_BUF2(strlen(escapebuf) + 3);
- ast_str_append(&sql2, 0, "%s'%s'", first ? "" : ",", escapebuf);
+ ast_str_append(&sql2, 0, "%s'%s'", separator, escapebuf);
}
}
- first = 0;
+ separator = ", ";
}
LENGTHEN_BUF1(ast_str_strlen(sql2) + 2);
diff --git a/cel/cel_odbc.c b/cel/cel_odbc.c
index 480344499..2d8408baa 100644
--- a/cel/cel_odbc.c
+++ b/cel/cel_odbc.c
@@ -402,7 +402,7 @@ static void odbc_log(struct ast_event *event)
}
AST_LIST_TRAVERSE(&odbc_tables, tableptr, list) {
- int first = 1;
+ char *separator = "";
ast_str_set(&sql, 0, "INSERT INTO %s (", tableptr->table);
ast_str_set(&sql2, 0, " VALUES (");
@@ -536,11 +536,11 @@ static void odbc_log(struct ast_event *event)
}
}
- ast_str_append(&sql, 0, "%s%s", first ? "" : ",", entry->name);
+ ast_str_append(&sql, 0, "%s%s", separator, entry->name);
LENGTHEN_BUF2(strlen(colptr));
/* Encode value, with escaping */
- ast_str_append(&sql2, 0, "%s'", first ? "" : ",");
+ ast_str_append(&sql2, 0, "%s'", separator);
for (tmp = colptr; *tmp; tmp++) {
if (*tmp == '\'') {
ast_str_append(&sql2, 0, "''");
@@ -580,9 +580,9 @@ static void odbc_log(struct ast_event *event)
}
}
- ast_str_append(&sql, 0, "%s%s", first ? "" : ",", entry->name);
+ ast_str_append(&sql, 0, "%s%s", separator, entry->name);
LENGTHEN_BUF2(17);
- ast_str_append(&sql2, 0, "%s{d '%04d-%02d-%02d'}", first ? "" : ",", year, month, day);
+ ast_str_append(&sql2, 0, "%s{d '%04d-%02d-%02d'}", separator, year, month, day);
}
break;
case SQL_TYPE_TIME:
@@ -605,9 +605,9 @@ static void odbc_log(struct ast_event *event)
}
}
- ast_str_append(&sql, 0, "%s%s", first ? "" : ",", entry->name);
+ ast_str_append(&sql, 0, "%s%s", separator, entry->name);
LENGTHEN_BUF2(15);
- ast_str_append(&sql2, 0, "%s{t '%02d:%02d:%02d'}", first ? "" : ",", hour, minute, second);
+ ast_str_append(&sql2, 0, "%s{t '%02d:%02d:%02d'}", separator, hour, minute, second);
}
break;
case SQL_TYPE_TIMESTAMP:
@@ -646,9 +646,9 @@ static void odbc_log(struct ast_event *event)
}
}
- ast_str_append(&sql, 0, "%s%s", first ? "" : ",", entry->name);
+ ast_str_append(&sql, 0, "%s%s", separator, entry->name);
LENGTHEN_BUF2(27);
- ast_str_append(&sql2, 0, "%s{ts '%04d-%02d-%02d %02d:%02d:%02d.%d'}", first ? "" : ",", year, month, day, hour, minute, second, fraction);
+ ast_str_append(&sql2, 0, "%s{ts '%04d-%02d-%02d %02d:%02d:%02d.%d'}", separator, year, month, day, hour, minute, second, fraction);
}
break;
case SQL_INTEGER:
@@ -659,9 +659,9 @@ static void odbc_log(struct ast_event *event)
continue;
}
- ast_str_append(&sql, 0, "%s%s", first ? "" : ",", entry->name);
+ ast_str_append(&sql, 0, "%s%s", separator, entry->name);
LENGTHEN_BUF2(12);
- ast_str_append(&sql2, 0, "%s%d", first ? "" : ",", integer);
+ ast_str_append(&sql2, 0, "%s%d", separator, integer);
}
break;
case SQL_BIGINT:
@@ -673,9 +673,9 @@ static void odbc_log(struct ast_event *event)
continue;
}
- ast_str_append(&sql, 0, "%s%s", first ? "" : ",", entry->name);
+ ast_str_append(&sql, 0, "%s%s", separator, entry->name);
LENGTHEN_BUF2(24);
- ast_str_append(&sql2, 0, "%s%lld", first ? "" : ",", integer);
+ ast_str_append(&sql2, 0, "%s%lld", separator, integer);
}
break;
case SQL_SMALLINT:
@@ -686,9 +686,9 @@ static void odbc_log(struct ast_event *event)
continue;
}
- ast_str_append(&sql, 0, "%s%s", first ? "" : ",", entry->name);
+ ast_str_append(&sql, 0, "%s%s", separator, entry->name);
LENGTHEN_BUF2(7);
- ast_str_append(&sql2, 0, "%s%d", first ? "" : ",", integer);
+ ast_str_append(&sql2, 0, "%s%d", separator, integer);
}
break;
case SQL_TINYINT:
@@ -699,9 +699,9 @@ static void odbc_log(struct ast_event *event)
continue;
}
- ast_str_append(&sql, 0, "%s%s", first ? "" : ",", entry->name);
+ ast_str_append(&sql, 0, "%s%s", separator, entry->name);
LENGTHEN_BUF2(4);
- ast_str_append(&sql2, 0, "%s%d", first ? "" : ",", integer);
+ ast_str_append(&sql2, 0, "%s%d", separator, integer);
}
break;
case SQL_BIT:
@@ -714,9 +714,9 @@ static void odbc_log(struct ast_event *event)
if (integer != 0)
integer = 1;
- ast_str_append(&sql, 0, "%s%s", first ? "" : ",", entry->name);
+ ast_str_append(&sql, 0, "%s%s", separator, entry->name);
LENGTHEN_BUF2(2);
- ast_str_append(&sql2, 0, "%s%d", first ? "" : ",", integer);
+ ast_str_append(&sql2, 0, "%s%d", separator, integer);
}
break;
case SQL_NUMERIC:
@@ -728,9 +728,9 @@ static void odbc_log(struct ast_event *event)
continue;
}
- ast_str_append(&sql, 0, "%s%s", first ? "" : ",", entry->name);
+ ast_str_append(&sql, 0, "%s%s", separator, entry->name);
LENGTHEN_BUF2(entry->decimals + 2);
- ast_str_append(&sql2, 0, "%s%*.*lf", first ? "" : ",", entry->decimals, entry->radix, number);
+ ast_str_append(&sql2, 0, "%s%*.*lf", separator, entry->decimals, entry->radix, number);
}
break;
case SQL_FLOAT:
@@ -743,16 +743,16 @@ static void odbc_log(struct ast_event *event)
continue;
}
- ast_str_append(&sql, 0, "%s%s", first ? "" : ",", entry->name);
+ ast_str_append(&sql, 0, "%s%s", separator, entry->name);
LENGTHEN_BUF2(entry->decimals);
- ast_str_append(&sql2, 0, "%s%lf", first ? "" : ",", number);
+ ast_str_append(&sql2, 0, "%s%lf", separator, number);
}
break;
default:
ast_log(LOG_WARNING, "Column type %d (field '%s:%s:%s') is unsupported at this time.\n", entry->type, tableptr->connection, tableptr->table, entry->name);
continue;
}
- first = 0;
+ separator = ", ";
}
}