Code

data: Use a predefined format for sdb_strftime().
[sysdb.git] / src / parser / analyzer.c
index e03cbdbc3d2e9ff259e9d18f6729bf9751e920b7..9bbd9ba7c9fe31c1575a1160f3ffd218c6ba04fa 100644 (file)
@@ -155,6 +155,8 @@ analyze_logical(int context, sdb_ast_op_t *op, sdb_strbuf_t *errbuf)
                break;
 
        case SDB_AST_ISNULL:
+       case SDB_AST_ISTRUE:
+       case SDB_AST_ISFALSE:
                if (analyze_node(context, op->right, errbuf))
                        return -1;
                break;
@@ -317,10 +319,20 @@ analyze_value(int context, sdb_ast_value_t *v, sdb_strbuf_t *errbuf)
                return -1;
        }
 
-       if ((context != SDB_ATTRIBUTE) && (v->type == SDB_FIELD_VALUE)) {
-               sdb_strbuf_sprintf(errbuf, "Invalid expression %s.value",
-                               SDB_FIELD_TO_NAME(v->type));
-               return -1;
+       if (context != UNSPEC_CONTEXT) {
+               /* skip these checks if we don't know the context; it's up to the
+                * caller to check again once the right context information is
+                * available */
+               if ((context != SDB_ATTRIBUTE) && (v->type == SDB_FIELD_VALUE)) {
+                       sdb_strbuf_sprintf(errbuf, "Invalid expression %s.value",
+                                       SDB_FIELD_TO_NAME(context));
+                       return -1;
+               }
+               if ((context != SDB_METRIC) && (v->type == SDB_FIELD_TIMESERIES)) {
+                       sdb_strbuf_sprintf(errbuf, "Invalid expression %s.timeseries",
+                                       SDB_FIELD_TO_NAME(context));
+                       return -1;
+               }
        }
        return 0;
 } /* analyze_value */
@@ -556,8 +568,8 @@ analyze_timeseries(sdb_ast_timeseries_t *ts, sdb_strbuf_t *errbuf)
        }
        if (ts->end <= ts->start) {
                char start_str[64], end_str[64];
-               sdb_strftime(start_str, sizeof(start_str), "%F %T Tz", ts->start);
-               sdb_strftime(end_str, sizeof(end_str), "%F %T Tz", ts->end);
+               sdb_strftime(start_str, sizeof(start_str), ts->start);
+               sdb_strftime(end_str, sizeof(end_str), ts->end);
                sdb_strbuf_sprintf(errbuf, "Start time (%s) greater than "
                                "end time (%s) in STORE command", start_str, end_str);
                return -1;