Token('&'),
Keyword('intersection'),
most_greedy=False)
+ k_interval = Keyword('interval')
k_ip_support = Keyword('ip_support')
k_last = Keyword('last')
k_length = Keyword('length')
k_tag = Keyword('tag')
k_tags = Keyword('tags')
k_tee_pipe_name = Keyword('tee_pipe_name')
+ k_time_precision = Keyword('time_precision')
k_timeit = Keyword('timeit')
+ k_timeval = Keyword('timeval')
k_timezone = Keyword('timezone')
- k_time_precision = Keyword('time_precision')
k_to = Keyword('to')
k_true = Keyword('true')
k_type = Keyword('type')
f_last = Sequence(
k_last,
'(', Optional(time_expr), ')')
+ f_timeval = Sequence(
+ k_timeval,
+ '(', ')')
+ f_interval = Sequence(
+ k_interval,
+ '(', ')')
f_filter = Sequence(
k_filter,
f_stddev,
f_first,
f_last,
+ f_timeval,
+ f_interval,
f_difference,
f_derivative,
f_filter,
* should be used with the libcleri module.
*
* Source class: SiriGrammar
- * Created at: 2020-06-17 15:21:09
+ * Created at: 2020-09-15 15:01:47
*/
#ifndef CLERI_EXPORT_SIRI_GRAMMAR_GRAMMAR_H_
#define CLERI_EXPORT_SIRI_GRAMMAR_GRAMMAR_H_
CLERI_GID_F_DIFFERENCE,
CLERI_GID_F_FILTER,
CLERI_GID_F_FIRST,
+ CLERI_GID_F_INTERVAL,
CLERI_GID_F_LAST,
CLERI_GID_F_LIMIT,
CLERI_GID_F_MAX,
CLERI_GID_F_PVARIANCE,
CLERI_GID_F_STDDEV,
CLERI_GID_F_SUM,
+ CLERI_GID_F_TIMEVAL,
CLERI_GID_F_VARIANCE,
CLERI_GID_GRANT_STMT,
CLERI_GID_GRANT_USER,
CLERI_GID_K_INSERT,
CLERI_GID_K_INTEGER,
CLERI_GID_K_INTERSECTION,
+ CLERI_GID_K_INTERVAL,
CLERI_GID_K_IP_SUPPORT,
CLERI_GID_K_LAST,
CLERI_GID_K_LENGTH,
CLERI_GID_K_TAGS,
CLERI_GID_K_TEE_PIPE_NAME,
CLERI_GID_K_TIMEIT,
+ CLERI_GID_K_TIMEVAL,
CLERI_GID_K_TIMEZONE,
CLERI_GID_K_TIME_PRECISION,
CLERI_GID_K_TO,
* Note that debian alpha packages should use versions like this:
* 2.0.34-0alpha0
*/
-#define SIRIDB_VERSION_PRE_RELEASE "-alpha-1"
+#define SIRIDB_VERSION_PRE_RELEASE "-alpha-2"
#ifndef NDEBUG
#define SIRIDB_VERSION_BUILD_RELEASE "+debug"
'2-log': [[1471254712, 'log line two']]
})
+ self.assertEqual(
+ await self.client0.query('select timeval() from "aggr"'),
+ {'aggr': [
+ [1447249033, 1447249033],
+ [1447249337, 1447249337],
+ [1447249633, 1447249633],
+ [1447249937, 1447249937],
+ [1447250249, 1447250249],
+ [1447250549, 1447250549],
+ [1447250868, 1447250868],
+ [1447251168, 1447251168],
+ [1447251449, 1447251449],
+ [1447251749, 1447251749],
+ [1447252049, 1447252049],
+ [1447252349, 1447252349],
+ [1447252649, 1447252649],
+ [1447252968, 1447252968],
+ [1447253244, 1447253244],
+ [1447253549, 1447253549],
+ [1447253849, 1447253849],
+ [1447254149, 1447254149],
+ [1447254449, 1447254449],
+ [1447254748, 1447254748]]})
+
+ self.assertEqual(
+ await self.client0.query('select interval() from "aggr"'),
+ {'aggr': [
+ [1447249337, 304],
+ [1447249633, 296],
+ [1447249937, 304],
+ [1447250249, 312],
+ [1447250549, 300],
+ [1447250868, 319],
+ [1447251168, 300],
+ [1447251449, 281],
+ [1447251749, 300],
+ [1447252049, 300],
+ [1447252349, 300],
+ [1447252649, 300],
+ [1447252968, 319],
+ [1447253244, 276],
+ [1447253549, 305],
+ [1447253849, 300],
+ [1447254149, 300],
+ [1447254449, 300],
+ [1447254748, 299]]})
+
self.assertEqual(
await self.client0.query('select difference() from "one"'),
{'one': []})
static siridb_points_t * AGGREGATE_difference(
siridb_points_t * source,
char * err_msg);
+static siridb_points_t * AGGREGATE_timeval(
+ siridb_points_t * source,
+ char * err_msg);
+static siridb_points_t * AGGREGATE_interval(
+ siridb_points_t * source,
+ char * err_msg);
static siridb_points_t * AGGREGATE_filter(
siridb_points_t * source,
siridb_aggr_t * aggr,
aggr->gid = CLERI_GID_F_LAST;
break;
+ case CLERI_GID_K_TIMEVAL:
+ aggr->gid = CLERI_GID_F_TIMEVAL;
+ break;
+
+ case CLERI_GID_K_INTERVAL:
+ aggr->gid = CLERI_GID_F_INTERVAL;
+ break;
+
default:
assert (0);
break;
break;
+ case CLERI_GID_F_TIMEVAL:
+ case CLERI_GID_F_INTERVAL:
+ AGGR_NEW
+ {
+ aggr->timespan = 1;
+ aggr->group_by = 0;
+ }
+
+ VEC_APPEND
+
+ break;
case CLERI_GID_F_FILTER:
AGGR_NEW
{
case CLERI_GID_F_FILTER:
return AGGREGATE_filter(source, aggr, err_msg);
+ case CLERI_GID_F_INTERVAL:
+ return AGGREGATE_interval(source, err_msg);
+
+ case CLERI_GID_F_TIMEVAL:
+ return AGGREGATE_timeval(source, err_msg);
+
default:
return AGGREGATE_to_one(source, aggr, err_msg);
}
return points;
}
+static siridb_points_t * AGGREGATE_interval(
+ siridb_points_t * source,
+ char * err_msg)
+{
+ size_t len = source->len - 1;
+ siridb_points_t * points = siridb_points_new(len, TP_INT);
+
+ if (points == NULL)
+ {
+ sprintf(err_msg, "Memory allocation error.");
+ }
+ else
+ {
+ points->len = len;
+
+ if (len)
+ {
+ siridb_point_t * prev = source->data;
+ siridb_point_t * curr = prev + 1;
+ siridb_point_t * end = source->data + source->len;
+ siridb_point_t * dest = points->data;
+
+ for (; curr < end; ++prev, ++curr, ++dest)
+ {
+ uint64_t diff = curr->ts - prev->ts;
+ if (diff > LLONG_MAX)
+ {
+ sprintf(err_msg,
+ "Overflow detected while using difference().");
+ siridb_points_free(points);
+ return NULL;
+ }
+ dest->ts = curr->ts;
+ dest->val.int64 = (int64_t) diff;
+ }
+ }
+ }
+ return points;
+}
+
+static siridb_points_t * AGGREGATE_timeval(
+ siridb_points_t * source,
+ char * err_msg)
+{
+ siridb_points_t * points = siridb_points_new(source->len, TP_INT);
+
+ if (points == NULL)
+ {
+ sprintf(err_msg, "Memory allocation error.");
+ }
+ else
+ {
+ siridb_point_t * curr = source->data;
+ siridb_point_t * end = source->data + source->len;
+ siridb_point_t * dest = points->data;
+
+ points->len = source->len;
+
+ for (; curr < end; ++curr, ++dest)
+ {
+ if (curr->ts > LLONG_MAX)
+ {
+ sprintf(err_msg,
+ "Overflow detected while using difference().");
+ siridb_points_free(points);
+ return NULL;
+ }
+ dest->ts = curr->ts;
+ dest->val.int64 = (int64_t) curr->ts;
+ }
+ }
+ return points;
+}
+
static int AGGREGATE_regex_cmp(siridb_aggr_t * aggr, char * val)
{
int ret;
points = siridb_points_new(max_sz, TP_DOUBLE);
break;
case CLERI_GID_F_COUNT:
+ case CLERI_GID_F_TIMEVAL:
+ case CLERI_GID_F_INTERVAL:
points = siridb_points_new(max_sz, TP_INT);
break;
case CLERI_GID_F_MEDIAN_HIGH:
* should be used with the libcleri module.
*
* Source class: SiriGrammar
- * Created at: 2020-06-17 15:21:09
+ * Created at: 2020-09-15 15:01:47
*/
#include "siri/grammar/grammar.h"
cleri_token(CLERI_NONE, "&"),
cleri_keyword(CLERI_NONE, "intersection", CLERI_CASE_SENSITIVE)
);
+ cleri_t * k_interval = cleri_keyword(CLERI_GID_K_INTERVAL, "interval", CLERI_CASE_SENSITIVE);
cleri_t * k_ip_support = cleri_keyword(CLERI_GID_K_IP_SUPPORT, "ip_support", CLERI_CASE_SENSITIVE);
cleri_t * k_last = cleri_keyword(CLERI_GID_K_LAST, "last", CLERI_CASE_SENSITIVE);
cleri_t * k_length = cleri_keyword(CLERI_GID_K_LENGTH, "length", CLERI_CASE_SENSITIVE);
cleri_t * k_tag = cleri_keyword(CLERI_GID_K_TAG, "tag", CLERI_CASE_SENSITIVE);
cleri_t * k_tags = cleri_keyword(CLERI_GID_K_TAGS, "tags", CLERI_CASE_SENSITIVE);
cleri_t * k_tee_pipe_name = cleri_keyword(CLERI_GID_K_TEE_PIPE_NAME, "tee_pipe_name", CLERI_CASE_SENSITIVE);
+ cleri_t * k_time_precision = cleri_keyword(CLERI_GID_K_TIME_PRECISION, "time_precision", CLERI_CASE_SENSITIVE);
cleri_t * k_timeit = cleri_keyword(CLERI_GID_K_TIMEIT, "timeit", CLERI_CASE_SENSITIVE);
+ cleri_t * k_timeval = cleri_keyword(CLERI_GID_K_TIMEVAL, "timeval", CLERI_CASE_SENSITIVE);
cleri_t * k_timezone = cleri_keyword(CLERI_GID_K_TIMEZONE, "timezone", CLERI_CASE_SENSITIVE);
- cleri_t * k_time_precision = cleri_keyword(CLERI_GID_K_TIME_PRECISION, "time_precision", CLERI_CASE_SENSITIVE);
cleri_t * k_to = cleri_keyword(CLERI_GID_K_TO, "to", CLERI_CASE_SENSITIVE);
cleri_t * k_true = cleri_keyword(CLERI_GID_K_TRUE, "true", CLERI_CASE_SENSITIVE);
cleri_t * k_type = cleri_keyword(CLERI_GID_K_TYPE, "type", CLERI_CASE_SENSITIVE);
cleri_optional(CLERI_NONE, time_expr),
cleri_token(CLERI_NONE, ")")
);
+ cleri_t * f_timeval = cleri_sequence(
+ CLERI_GID_F_TIMEVAL,
+ 3,
+ k_timeval,
+ cleri_token(CLERI_NONE, "("),
+ cleri_token(CLERI_NONE, ")")
+ );
+ cleri_t * f_interval = cleri_sequence(
+ CLERI_GID_F_INTERVAL,
+ 3,
+ k_interval,
+ cleri_token(CLERI_NONE, "("),
+ cleri_token(CLERI_NONE, ")")
+ );
cleri_t * f_filter = cleri_sequence(
CLERI_GID_F_FILTER,
5,
cleri_t * aggregate_functions = cleri_list(CLERI_GID_AGGREGATE_FUNCTIONS, cleri_choice(
CLERI_NONE,
CLERI_FIRST_MATCH,
- 19,
+ 21,
f_all,
f_limit,
f_mean,
f_stddev,
f_first,
f_last,
+ f_timeval,
+ f_interval,
f_difference,
f_derivative,
f_filter,