mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-18 18:46:16 +00:00
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
This commit is contained in:
@@ -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);
|
||||
|
Reference in New Issue
Block a user