You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix cargo fmt
Merge branch 'v0.54.x' into v0.54.x
Merge pull request #20 from kemingy/calc_overflow
fix lint
Merge branch 'v0.54.x' into v0.54.x
Merge pull request #19 from kemingy/lint
add test for statement convertion
fix: overflow in the calculation expr
fix the test in another pr
fix overflow
fix: lint and test
fix: add recursive protection to Convert
assert_sql("SELECT rate(metrics) RANGE '5m', sum(metrics) RANGE '10m' FILL MAX, sum(metrics) RANGE '10m' FROM t ALIGN '1h' by ((a+1)/2, b) FILL NULL;",
17220
+
"SELECT range_fn(rate(metrics), '5m', 'NULL', '2', (a + 1) / 2, b, '1h', ''), range_fn(sum(metrics), '10m', 'MAX', '2', (a + 1) / 2, b, '1h', ''), range_fn(sum(metrics), '10m', 'NULL', '2', (a + 1) / 2, b, '1h', '') FROM t GROUP BY a, b");
17221
+
17222
+
// explicit empty by
17223
+
assert_sql("SELECT rate(metrics) RANGE '5m', sum(metrics) RANGE '10m' FILL MAX, sum(metrics) RANGE '10m' FROM t ALIGN '1h' by () FILL NULL;",
assert_sql("SELECT (rate(a) RANGE '6m' + rate(a) RANGE '5m')/b + b * rate(a) RANGE '5m' FROM t ALIGN '1h' FILL NULL;",
17357
+
"SELECT (range_fn(rate(a), '6m', 'NULL', '0', '1h', '') + range_fn(rate(a), '5m', 'NULL', '0', '1h', '')) / b + b * range_fn(rate(a), '5m', 'NULL', '0', '1h', '') FROM t GROUP BY b");
17358
+
17359
+
assert_sql("SELECT round(max(a+1) Range '5m' FILL NULL), sin((max(a) + 1) Range '5m' FILL NULL) from t ALIGN '1h' by (b) FILL NULL;",
17360
+
"SELECT round(range_fn(max(a + 1), '5m', 'NULL', '1', b, '1h', '')), sin((range_fn(max(a), '5m', 'NULL', '1', b, '1h', '') + 1)) FROM t GROUP BY b");
17361
+
17362
+
assert_sql(
17363
+
"SELECT floor(ceil((min(a * 2) + max(a *2)) RANGE '20s' + 1.0)) FROM t ALIGN '1h';",
"SELECT gcd(CAST(max(a + 1) Range '5m' FILL NULL AS INT64), CAST(b AS INT64)) + round(max(c+1) Range '6m' FILL NULL + 1) + max(d+3) Range '10m' FILL NULL * CAST(e AS FLOAT64) + 1 FROM test ALIGN '1h' by (f, g);",
17369
+
"SELECT gcd(CAST(range_fn(max(a + 1), '5m', 'NULL', '2', f, g, '1h', '') AS INT64), CAST(b AS INT64)) + round(range_fn(max(c + 1), '6m', 'NULL', '2', f, g, '1h', '') + 1) + range_fn(max(d + 3), '10m', 'NULL', '2', f, g, '1h', '') * CAST(e AS FLOAT64) + 1 FROM test GROUP BY b, e, f, g",
17370
+
);
17371
+
17372
+
// Legal syntax but illegal semantic, nested range semantics are problematic, leave semantic problem to greptimedb
17373
+
assert_sql(
17374
+
"SELECT rate(max(a) RANGE '6m') RANGE '6m' + 1 FROM t ALIGN '1h' FILL NULL;",
"SELECT sin(count(distinct a) RANGE (INTERVAL '1 year 2 hours 3 minutes') + 1) FROM t ALIGN (INTERVAL '1 year 2 hours 3 minutes') FILL NULL;",
17406
+
"SELECT sin(range_fn(count(DISTINCT a), INTERVAL '1 year 2 hours 3 minutes', 'NULL', '0', INTERVAL '1 year 2 hours 3 minutes', '') + 1) FROM t",
17407
+
);
17408
+
assert_sql(
17409
+
"SELECT rate(a) RANGE (INTERVAL '1' YEAR) FROM t ALIGN (INTERVAL '1' YEAR) TO '1970-01-01T00:00:00+08:00' BY (b, c) FILL NULL;",
17410
+
"SELECT range_fn(rate(a), INTERVAL '1' YEAR, 'NULL', '2', b, c, INTERVAL '1' YEAR, '1970-01-01T00:00:00+08:00') FROM t GROUP BY b, c",
17411
+
);
17412
+
assert_sql_err(
17413
+
"SELECT rate(a) RANGE INTERVAL '1 year 2 hours 3 minutes' FROM t ALIGN '1h' FILL NULL;",
17414
+
"Expected: end of statement, found: RANGE",
17415
+
);
17416
+
}
17417
+
17418
+
#[test]
17419
+
fn parse_range_to() {
17420
+
assert_sql(
17421
+
"SELECT rate(a) RANGE '6m' FROM t ALIGN '1h' TO NOW FILL NULL;",
17422
+
"SELECT range_fn(rate(a), '6m', 'NULL', '0', '1h', 'NOW') FROM t",
17423
+
);
17424
+
assert_sql(
17425
+
"SELECT rate(a) RANGE '6m' FROM t ALIGN '1h' TO CALENDAR FILL NULL;",
17426
+
"SELECT range_fn(rate(a), '6m', 'NULL', '0', '1h', 'CALENDAR') FROM t",
17427
+
);
17428
+
assert_sql(
17429
+
"SELECT rate(a) RANGE '6m' FROM t ALIGN '1h' TO '2021-07-01 00:00:00' FILL NULL;",
17430
+
"SELECT range_fn(rate(a), '6m', 'NULL', '0', '1h', '2021-07-01 00:00:00') FROM t",
17431
+
);
17432
+
}
17433
+
17434
+
#[test]
17435
+
fn parse_range_range_align_to_calculate() {
17436
+
assert_sql(
17437
+
"SELECT ts, min(val) RANGE (INTERVAL '1' day + INTERVAL '1 year 2 hours 3 minutes') FROM host ALIGN (INTERVAL '1' day + INTERVAL '1 year 2 hours 3 minutes') TO (now() - INTERVAL '1' day) by (1);",
17438
+
"SELECT ts, range_fn(min(val), INTERVAL '1' DAY + INTERVAL '1 year 2 hours 3 minutes', '', '1', 1, INTERVAL '1' DAY + INTERVAL '1 year 2 hours 3 minutes', now() - INTERVAL '1' DAY) FROM host GROUP BY ts",
17439
+
);
17440
+
assert_sql(
17441
+
"SELECT rate(a) RANGE '6m' FROM t ALIGN '1h' TO (( (now()) - ((INTERVAL '1' day)) )) FILL NULL;",
0 commit comments