Files
greptimedb/tests/cases/standalone/common/promql/math.result
yihong 56f5ccf823 fix: support unknown for timestamp function (#6708)
* fix: support unknown for timestamp function

Signed-off-by: yihong0618 <zouzou0208@gmail.com>

* fix: some sqlness now no error

Signed-off-by: yihong0618 <zouzou0208@gmail.com>

* fix: make clippy happy

Signed-off-by: yihong0618 <zouzou0208@gmail.com>

* fix: address comments

Signed-off-by: yihong0618 <zouzou0208@gmail.com>

* fix: address comments

Signed-off-by: yihong0618 <zouzou0208@gmail.com>

---------

Signed-off-by: yihong0618 <zouzou0208@gmail.com>
2025-08-14 02:56:33 +00:00

353 lines
14 KiB
Plaintext

CREATE TABLE angles (
ts timestamp(3) time index,
unit STRING PRIMARY KEY,
val DOUBLE,
);
Affected Rows: 0
INSERT INTO TABLE angles VALUES
(0, 'radians', 0),
(0, 'degrees', 0),
(5000, 'radians', 1.5708), -- π/2
(5000, 'degrees', 90),
(10000, 'radians', 3.1416), -- π
(10000, 'degrees', 180),
(15000, 'radians', 4.7124), -- 3π/2
(15000, 'degrees', 270),
(20000, 'radians', 6.2832), -- 2π
(20000, 'degrees', 360),
(25000, 'positive', 42.5),
(25000, 'negative', -17.3),
(30000, 'zero', 0),
(30000, 'small_pos', 0.001),
(35000, 'small_neg', -0.001);
Affected Rows: 15
-- Test pi() function (returns constant π ≈ 3.141592653589793)
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 20, '5s') pi();
+---------------------+-------------------+
| time | pi() |
+---------------------+-------------------+
| 1970-01-01T00:00:00 | 3.141592653589793 |
| 1970-01-01T00:00:05 | 3.141592653589793 |
| 1970-01-01T00:00:10 | 3.141592653589793 |
| 1970-01-01T00:00:15 | 3.141592653589793 |
| 1970-01-01T00:00:20 | 3.141592653589793 |
+---------------------+-------------------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 20, '5s') pi() + 1;
+---------------------+-------------------+
| time | pi() + Float64(1) |
+---------------------+-------------------+
| 1970-01-01T00:00:00 | 4.141592653589793 |
| 1970-01-01T00:00:05 | 4.141592653589793 |
| 1970-01-01T00:00:10 | 4.141592653589793 |
| 1970-01-01T00:00:15 | 4.141592653589793 |
| 1970-01-01T00:00:20 | 4.141592653589793 |
+---------------------+-------------------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 20, '5s') angles{unit="radians"} * pi();
+---------------------+--------------------+
| time | angles.val * .pi() |
+---------------------+--------------------+
| 1970-01-01T00:00:00 | 0.0 |
| 1970-01-01T00:00:05 | 4.934813740258847 |
| 1970-01-01T00:00:10 | 9.869627480517694 |
| 1970-01-01T00:00:15 | 14.80444122077654 |
| 1970-01-01T00:00:20 | 19.73925496103539 |
+---------------------+--------------------+
-- Test rad() function (converts degrees to radians)
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 20, '5s') rad(angles{unit="degrees"});
+---------------------+--------------------+---------+
| ts | radians(val) | unit |
+---------------------+--------------------+---------+
| 1970-01-01T00:00:00 | 0.0 | degrees |
| 1970-01-01T00:00:05 | 1.5707963267948966 | degrees |
| 1970-01-01T00:00:10 | 3.141592653589793 | degrees |
| 1970-01-01T00:00:15 | 4.71238898038469 | degrees |
| 1970-01-01T00:00:20 | 6.283185307179586 | degrees |
+---------------------+--------------------+---------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 20, '5s') rad(angles);
+---------------------+---------------------+---------+
| ts | radians(val) | unit |
+---------------------+---------------------+---------+
| 1970-01-01T00:00:00 | 0.0 | degrees |
| 1970-01-01T00:00:00 | 0.0 | radians |
| 1970-01-01T00:00:05 | 0.02741563189032693 | radians |
| 1970-01-01T00:00:05 | 1.5707963267948966 | degrees |
| 1970-01-01T00:00:10 | 0.05483126378065386 | radians |
| 1970-01-01T00:00:10 | 3.141592653589793 | degrees |
| 1970-01-01T00:00:15 | 0.08224689567098079 | radians |
| 1970-01-01T00:00:15 | 4.71238898038469 | degrees |
| 1970-01-01T00:00:20 | 0.10966252756130772 | radians |
| 1970-01-01T00:00:20 | 6.283185307179586 | degrees |
+---------------------+---------------------+---------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 20, '5s') scalar(rad(angles{unit="degrees"}));
+---------------------+----------------------+
| ts | scalar(radians(val)) |
+---------------------+----------------------+
| 1970-01-01T00:00:00 | 0.0 |
| 1970-01-01T00:00:05 | 1.5707963267948966 |
| 1970-01-01T00:00:10 | 3.141592653589793 |
| 1970-01-01T00:00:15 | 4.71238898038469 |
| 1970-01-01T00:00:20 | 6.283185307179586 |
+---------------------+----------------------+
-- Test deg() function (converts radians to degrees)
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 20, '5s') deg(angles{unit="radians"});
+---------------------+--------------------+---------+
| ts | degrees(val) | unit |
+---------------------+--------------------+---------+
| 1970-01-01T00:00:00 | 0.0 | radians |
| 1970-01-01T00:00:05 | 90.00021045914971 | radians |
| 1970-01-01T00:00:10 | 180.00042091829943 | radians |
| 1970-01-01T00:00:15 | 270.0006313774491 | radians |
| 1970-01-01T00:00:20 | 360.00084183659885 | radians |
+---------------------+--------------------+---------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 20, '5s') deg(angles);
+---------------------+--------------------+---------+
| ts | degrees(val) | unit |
+---------------------+--------------------+---------+
| 1970-01-01T00:00:00 | 0.0 | degrees |
| 1970-01-01T00:00:00 | 0.0 | radians |
| 1970-01-01T00:00:05 | 5156.620156177409 | degrees |
| 1970-01-01T00:00:05 | 90.00021045914971 | radians |
| 1970-01-01T00:00:10 | 10313.240312354817 | degrees |
| 1970-01-01T00:00:10 | 180.00042091829943 | radians |
| 1970-01-01T00:00:15 | 15469.860468532228 | degrees |
| 1970-01-01T00:00:15 | 270.0006313774491 | radians |
| 1970-01-01T00:00:20 | 20626.480624709635 | degrees |
| 1970-01-01T00:00:20 | 360.00084183659885 | radians |
+---------------------+--------------------+---------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 20, '5s') scalar(deg(angles{unit="radians"}));
+---------------------+----------------------+
| ts | scalar(degrees(val)) |
+---------------------+----------------------+
| 1970-01-01T00:00:00 | 0.0 |
| 1970-01-01T00:00:05 | 90.00021045914971 |
| 1970-01-01T00:00:10 | 180.00042091829943 |
| 1970-01-01T00:00:15 | 270.0006313774491 |
| 1970-01-01T00:00:20 | 360.00084183659885 |
+---------------------+----------------------+
-- Test conversions with pi()
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 20, '5s') rad(deg(pi()));
Error: 2000(InvalidSyntax), expected type vector in call to function 'deg', got scalar
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 20, '5s') deg(rad(pi()));
Error: 2000(InvalidSyntax), expected type vector in call to function 'rad', got scalar
-- Test with arithmetic operations
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 20, '5s') deg(angles{unit="radians"}) + rad(angles{unit="degrees"});
++
++
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 20, '5s') deg(pi() * 2);
Error: 2000(InvalidSyntax), expected type vector in call to function 'deg', got scalar
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 20, '5s') rad(180 * angles{unit="radians"});
+---------------------+-----------------------------+---------+
| ts | radians(Float64(180) * val) | unit |
+---------------------+-----------------------------+---------+
| 1970-01-01T00:00:00 | 0.0 | radians |
| 1970-01-01T00:00:05 | 4.934813740258846 | radians |
| 1970-01-01T00:00:10 | 9.869627480517693 | radians |
| 1970-01-01T00:00:15 | 14.80444122077654 | radians |
| 1970-01-01T00:00:20 | 19.739254961035385 | radians |
+---------------------+-----------------------------+---------+
-- Test sgn() function (returns sign of values: -1, 0, or 1)
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 35, '5s') sgn(angles{unit="positive"});
+---------------------+-------------+----------+
| ts | signum(val) | unit |
+---------------------+-------------+----------+
| 1970-01-01T00:00:25 | 1.0 | positive |
| 1970-01-01T00:00:30 | 1.0 | positive |
| 1970-01-01T00:00:35 | 1.0 | positive |
+---------------------+-------------+----------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 35, '5s') sgn(angles{unit="negative"});
+---------------------+-------------+----------+
| ts | signum(val) | unit |
+---------------------+-------------+----------+
| 1970-01-01T00:00:25 | -1.0 | negative |
| 1970-01-01T00:00:30 | -1.0 | negative |
| 1970-01-01T00:00:35 | -1.0 | negative |
+---------------------+-------------+----------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 35, '5s') sgn(angles{unit="zero"});
+---------------------+-------------+------+
| ts | signum(val) | unit |
+---------------------+-------------+------+
| 1970-01-01T00:00:30 | 0.0 | zero |
| 1970-01-01T00:00:35 | 0.0 | zero |
+---------------------+-------------+------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 35, '5s') sgn(angles{unit="small_pos"});
+---------------------+-------------+-----------+
| ts | signum(val) | unit |
+---------------------+-------------+-----------+
| 1970-01-01T00:00:30 | 1.0 | small_pos |
| 1970-01-01T00:00:35 | 1.0 | small_pos |
+---------------------+-------------+-----------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 35, '5s') sgn(angles{unit="small_neg"});
+---------------------+-------------+-----------+
| ts | signum(val) | unit |
+---------------------+-------------+-----------+
| 1970-01-01T00:00:35 | -1.0 | small_neg |
+---------------------+-------------+-----------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (25, 35, '5s') sgn(angles);
+---------------------+-------------+-----------+
| ts | signum(val) | unit |
+---------------------+-------------+-----------+
| 1970-01-01T00:00:25 | -1.0 | negative |
| 1970-01-01T00:00:25 | 1.0 | degrees |
| 1970-01-01T00:00:25 | 1.0 | positive |
| 1970-01-01T00:00:25 | 1.0 | radians |
| 1970-01-01T00:00:30 | -1.0 | negative |
| 1970-01-01T00:00:30 | 0.0 | zero |
| 1970-01-01T00:00:30 | 1.0 | degrees |
| 1970-01-01T00:00:30 | 1.0 | positive |
| 1970-01-01T00:00:30 | 1.0 | radians |
| 1970-01-01T00:00:30 | 1.0 | small_pos |
| 1970-01-01T00:00:35 | -1.0 | negative |
| 1970-01-01T00:00:35 | -1.0 | small_neg |
| 1970-01-01T00:00:35 | 0.0 | zero |
| 1970-01-01T00:00:35 | 1.0 | degrees |
| 1970-01-01T00:00:35 | 1.0 | positive |
| 1970-01-01T00:00:35 | 1.0 | radians |
| 1970-01-01T00:00:35 | 1.0 | small_pos |
+---------------------+-------------+-----------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (25, 35, '5s') scalar(sgn(angles{unit="positive"}));
+---------------------+---------------------+
| ts | scalar(signum(val)) |
+---------------------+---------------------+
| 1970-01-01T00:00:25 | 1.0 |
| 1970-01-01T00:00:30 | 1.0 |
| 1970-01-01T00:00:35 | 1.0 |
+---------------------+---------------------+
-- FIXME: test sgn with arithmetic operations
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (25, 35, '5s') sgn(angles - 42.5);
+---------------------+-----------------------------+-----------+
| ts | signum(val - Float64(42.5)) | unit |
+---------------------+-----------------------------+-----------+
| 1970-01-01T00:00:25 | -1.0 | negative |
| 1970-01-01T00:00:25 | -1.0 | radians |
| 1970-01-01T00:00:25 | 0.0 | positive |
| 1970-01-01T00:00:25 | 1.0 | degrees |
| 1970-01-01T00:00:30 | -1.0 | negative |
| 1970-01-01T00:00:30 | -1.0 | radians |
| 1970-01-01T00:00:30 | -1.0 | small_pos |
| 1970-01-01T00:00:30 | -1.0 | zero |
| 1970-01-01T00:00:30 | 0.0 | positive |
| 1970-01-01T00:00:30 | 1.0 | degrees |
| 1970-01-01T00:00:35 | -1.0 | negative |
| 1970-01-01T00:00:35 | -1.0 | radians |
| 1970-01-01T00:00:35 | -1.0 | small_neg |
| 1970-01-01T00:00:35 | -1.0 | small_pos |
| 1970-01-01T00:00:35 | -1.0 | zero |
| 1970-01-01T00:00:35 | 0.0 | positive |
| 1970-01-01T00:00:35 | 1.0 | degrees |
+---------------------+-----------------------------+-----------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 35, '5s') sgn(angles{unit="radians"} - pi());
+---------------------+----------------------------+
| time | signum(angles.val - .pi()) |
+---------------------+----------------------------+
| 1970-01-01T00:00:00 | -1.0 |
| 1970-01-01T00:00:05 | -1.0 |
| 1970-01-01T00:00:10 | 1.0 |
| 1970-01-01T00:00:15 | 1.0 |
| 1970-01-01T00:00:20 | 1.0 |
| 1970-01-01T00:00:25 | 1.0 |
| 1970-01-01T00:00:30 | 1.0 |
| 1970-01-01T00:00:35 | 1.0 |
+---------------------+----------------------------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (25, 35, '5s') sgn(angles) * angles;
+-----------+---------------------+---------------------------+
| unit | ts | lhs.signum(val) * rhs.val |
+-----------+---------------------+---------------------------+
| degrees | 1970-01-01T00:00:25 | 360.0 |
| degrees | 1970-01-01T00:00:30 | 360.0 |
| degrees | 1970-01-01T00:00:35 | 360.0 |
| negative | 1970-01-01T00:00:25 | 17.3 |
| negative | 1970-01-01T00:00:30 | 17.3 |
| negative | 1970-01-01T00:00:35 | 17.3 |
| positive | 1970-01-01T00:00:25 | 42.5 |
| positive | 1970-01-01T00:00:30 | 42.5 |
| positive | 1970-01-01T00:00:35 | 42.5 |
| radians | 1970-01-01T00:00:25 | 6.2832 |
| radians | 1970-01-01T00:00:30 | 6.2832 |
| radians | 1970-01-01T00:00:35 | 6.2832 |
| small_neg | 1970-01-01T00:00:35 | 0.001 |
| small_pos | 1970-01-01T00:00:30 | 0.001 |
| small_pos | 1970-01-01T00:00:35 | 0.001 |
| zero | 1970-01-01T00:00:30 | 0.0 |
| zero | 1970-01-01T00:00:35 | 0.0 |
+-----------+---------------------+---------------------------+
Drop table angles;
Affected Rows: 0