k_ninf = Sequence('-', k_inf)
k_now = Keyword('now')
k_number = Keyword('number')
+ k_offset = Keyword('offset')
k_online = Keyword('online')
k_open_files = Keyword('open_files')
k_or = Keyword('or')
f_last = Sequence(
k_last,
'(', Optional(time_expr), ')')
+ f_offset = Sequence(
+ k_offset,
+ '(', Optional(time_expr), ')')
f_timeval = Sequence(
k_timeval,
'(', ')')
aggregate_functions = List(Choice(
f_all,
+ f_offset,
f_limit,
f_mean,
f_sum,
* should be used with the libcleri module.
*
* Source class: SiriGrammar
- * Created at: 2022-05-05 15:08:05
+ * Created at: 2023-10-24 14:29:56
*/
#ifndef CLERI_EXPORT_SIRI_GRAMMAR_GRAMMAR_H_
#define CLERI_EXPORT_SIRI_GRAMMAR_GRAMMAR_H_
CLERI_GID_F_MEDIAN_HIGH,
CLERI_GID_F_MEDIAN_LOW,
CLERI_GID_F_MIN,
+ CLERI_GID_F_OFFSET,
CLERI_GID_F_POINTS,
CLERI_GID_F_PVARIANCE,
CLERI_GID_F_STDDEV,
CLERI_GID_K_NINF,
CLERI_GID_K_NOW,
CLERI_GID_K_NUMBER,
+ CLERI_GID_K_OFFSET,
CLERI_GID_K_ONLINE,
CLERI_GID_K_OPEN_FILES,
CLERI_GID_K_OR,
#define SIRIDB_VERSION_MAJOR 2
#define SIRIDB_VERSION_MINOR 0
-#define SIRIDB_VERSION_PATCH 50
+#define SIRIDB_VERSION_PATCH 51
/*
* Use SIRIDB_VERSION_PRE_RELEASE for alpha release versions.
* Note that debian alpha packages should use versions like this:
* 2.0.34-0alpha0
*/
-#define SIRIDB_VERSION_PRE_RELEASE ""
+#define SIRIDB_VERSION_PRE_RELEASE "-alpha-0"
#ifndef NDEBUG
#define SIRIDB_VERSION_BUILD_RELEASE "+debug"
vec_t * siridb_aggregate_list(cleri_children_t * children, char * err_msg)
{
uint32_t gid;
- siridb_aggr_t * aggr;
+ siridb_aggr_t * aggr = NULL;
vec_t * vec = vec_new(VEC_DEFAULT_SIZE);
if (vec == NULL)
{
switch (gid)
{
+ case CLERI_GID_F_OFFSET:
+ if (aggr == NULL || aggr->group_by == 0)
+ {
+ sprintf(err_msg,
+ "Offset must be used after an aggregation method.");
+ siridb_aggregate_list_free(vec);
+ return NULL;
+ }
+ if (cleri_gn(cleri_gn(children)->children)
+ ->children->next->next->next != NULL)
+ {
+ /* result is always positive, checked earlier */
+ aggr->offset = CLERI_NODE_DATA(
+ cleri_gn(cleri_gn(cleri_gn(cleri_gn(children)
+ ->children)->children->next->next)->children));
+
+ if (aggr->offset >= aggr->group_by)
+ {
+ sprintf(err_msg, "Offset too large.");
+ siridb_aggregate_list_free(vec);
+ return NULL;
+ }
+ }
+ break;
case CLERI_GID_F_LIMIT:
AGGR_NEW
{
case CLERI_GID_F_TIMEVAL:
case CLERI_GID_F_INTERVAL:
AGGR_NEW
- {
- aggr->timespan = 1;
- aggr->group_by = 0;
- }
-
VEC_APPEND
break;
* should be used with the libcleri module.
*
* Source class: SiriGrammar
- * Created at: 2022-05-05 15:08:05
+ * Created at: 2023-10-24 14:29:56
*/
#include "siri/grammar/grammar.h"
);
cleri_t * k_now = cleri_keyword(CLERI_GID_K_NOW, "now", CLERI_CASE_SENSITIVE);
cleri_t * k_number = cleri_keyword(CLERI_GID_K_NUMBER, "number", CLERI_CASE_SENSITIVE);
+ cleri_t * k_offset = cleri_keyword(CLERI_GID_K_OFFSET, "offset", CLERI_CASE_SENSITIVE);
cleri_t * k_online = cleri_keyword(CLERI_GID_K_ONLINE, "online", CLERI_CASE_SENSITIVE);
cleri_t * k_open_files = cleri_keyword(CLERI_GID_K_OPEN_FILES, "open_files", CLERI_CASE_SENSITIVE);
cleri_t * k_or = cleri_keyword(CLERI_GID_K_OR, "or", CLERI_CASE_SENSITIVE);
cleri_optional(CLERI_NONE, time_expr),
cleri_token(CLERI_NONE, ")")
);
+ cleri_t * f_offset = cleri_sequence(
+ CLERI_GID_F_OFFSET,
+ 4,
+ k_offset,
+ cleri_token(CLERI_NONE, "("),
+ cleri_optional(CLERI_NONE, time_expr),
+ cleri_token(CLERI_NONE, ")")
+ );
cleri_t * f_timeval = cleri_sequence(
CLERI_GID_F_TIMEVAL,
3,
cleri_choice(
CLERI_NONE,
CLERI_FIRST_MATCH,
- 13,
+ 14,
+ k_offset,
k_mean,
k_median,
k_median_high,
cleri_t * aggregate_functions = cleri_list(CLERI_GID_AGGREGATE_FUNCTIONS, cleri_choice(
CLERI_NONE,
CLERI_FIRST_MATCH,
- 21,
+ 22,
f_all,
+ f_offset,
f_limit,
f_mean,
f_sum,