diff options
author | Matthew Jordan <mjordan@digium.com> | 2014-11-15 16:56:57 +0000 |
---|---|---|
committer | Matthew Jordan <mjordan@digium.com> | 2014-11-15 16:56:57 +0000 |
commit | 5e09dd3c75411ee8f53a1415e3ee69d67274cedb (patch) | |
tree | 75513d286a39ffae10d2b609ee08737d7fd80a07 /cel | |
parent | 6b7a2dc7b9da026acc5b2ffce6eee5014e606656 (diff) |
cel/cel_odbc: Provide microsecond precision in 'eventtime' column when possible
This patch adds microsecond precision when inserting a CEL record into a table
with an "eventtime" column of type timestamp, instead of second precision. The
documentation (configs/cel_odbc.conf.sample) was already saying that the
eventtime column included microseconds precision, but that was not the case.
Also, without this patch, if you had a table with an "eventtime" column of
type varchar, you had millisecond precision. With this patch, you also get
microsecond precision in this case.
Review: https://reviewboard.asterisk.org/r/3980
ASTERISK-24283 #close
Reported by: Etienne Lessard
patches:
cel_odbc_time_precision.patch uploaded by Etienne Lessard (License 6394)
........
Merged revisions 427952 from http://svn.asterisk.org/svn/asterisk/branches/11
........
Merged revisions 427953 from http://svn.asterisk.org/svn/asterisk/branches/12
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427954 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'cel')
-rw-r--r-- | cel/cel_odbc.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/cel/cel_odbc.c b/cel/cel_odbc.c index 8b99da1ea..11e333097 100644 --- a/cel/cel_odbc.c +++ b/cel/cel_odbc.c @@ -436,7 +436,7 @@ static void odbc_log(struct ast_event *event) This should be ok, however, as nobody is going to store just event date or just time for CDR purposes. */ - ast_strftime(colbuf, sizeof(colbuf), "%Y-%m-%d %H:%M:%S.%q", &tm); + ast_strftime(colbuf, sizeof(colbuf), "%Y-%m-%d %H:%M:%S.%6q", &tm); colptr = colbuf; } else { if (strcmp(entry->celname, "userdeftype") == 0) { @@ -615,7 +615,7 @@ static void odbc_log(struct ast_event *event) if (ast_strlen_zero(colptr)) { continue; } else { - int year = 0, month = 0, day = 0, hour = 0, minute = 0, second = 0; + int year = 0, month = 0, day = 0, hour = 0, minute = 0, second = 0, fraction = 0; if (strcasecmp(entry->name, "eventdate") == 0) { struct ast_tm tm; ast_localtime(&record.event_time, &tm, tableptr->usegmtime ? "UTC" : NULL); @@ -625,17 +625,18 @@ static void odbc_log(struct ast_event *event) hour = tm.tm_hour; minute = tm.tm_min; second = (tableptr->allowleapsec || tm.tm_sec < 60) ? tm.tm_sec : 59; + fraction = tm.tm_usec; } else { - int count = sscanf(colptr, "%4d-%2d-%2d %2d:%2d:%2d", &year, &month, &day, &hour, &minute, &second); + int count = sscanf(colptr, "%4d-%2d-%2d %2d:%2d:%2d.%6d", &year, &month, &day, &hour, &minute, &second, &fraction); - if ((count != 3 && count != 5 && count != 6) || year <= 0 || + if ((count != 3 && count != 5 && count != 6 && count != 7) || year <= 0 || month <= 0 || month > 12 || day < 0 || day > 31 || ((month == 4 || month == 6 || month == 9 || month == 11) && day == 31) || (month == 2 && year % 400 == 0 && day > 29) || (month == 2 && year % 100 == 0 && day > 28) || (month == 2 && year % 4 == 0 && day > 29) || (month == 2 && year % 4 != 0 && day > 28) || - hour > 23 || minute > 59 || second > (tableptr->allowleapsec ? 60 : 59) || hour < 0 || minute < 0 || second < 0) { + hour > 23 || minute > 59 || second > (tableptr->allowleapsec ? 60 : 59) || hour < 0 || minute < 0 || second < 0 || fraction < 0) { ast_log(LOG_WARNING, "CEL variable %s is not a valid timestamp ('%s').\n", entry->name, colptr); continue; } @@ -647,7 +648,7 @@ static void odbc_log(struct ast_event *event) ast_str_append(&sql, 0, "%s%s", first ? "" : ",", entry->name); LENGTHEN_BUF2(27); - 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.%d'}", first ? "" : ",", year, month, day, hour, minute, second, fraction); } break; case SQL_INTEGER: |