Files
greptimedb/tests/cases/standalone/common/promql/math.sql
dennis zhuang 086777d938 feat: impl some promql scalar functions (#6567)
* feat: impl some promql scalar functions

Signed-off-by: Dennis Zhuang <killme2008@gmail.com>

* feat: supports pi function

Signed-off-by: Dennis Zhuang <killme2008@gmail.com>

* chore: by cr comments

Signed-off-by: Dennis Zhuang <killme2008@gmail.com>

* fix: compile

Signed-off-by: Dennis Zhuang <killme2008@gmail.com>

---------

Signed-off-by: Dennis Zhuang <killme2008@gmail.com>
2025-07-29 03:29:00 +00:00

110 lines
2.8 KiB
SQL

CREATE TABLE angles (
ts timestamp(3) time index,
unit STRING PRIMARY KEY,
val DOUBLE,
);
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);
-- Test pi() function (returns constant π ≈ 3.141592653589793)
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 20, '5s') pi();
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 20, '5s') pi() + 1;
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 20, '5s') angles{unit="radians"} * pi();
-- Test rad() function (converts degrees to radians)
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 20, '5s') rad(angles{unit="degrees"});
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 20, '5s') rad(angles);
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 20, '5s') scalar(rad(angles{unit="degrees"}));
-- Test deg() function (converts radians to degrees)
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 20, '5s') deg(angles{unit="radians"});
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 20, '5s') deg(angles);
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 20, '5s') scalar(deg(angles{unit="radians"}));
-- Test conversions with pi()
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 20, '5s') rad(deg(pi()));
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 20, '5s') deg(rad(pi()));
-- 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);
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 20, '5s') rad(180 * angles{unit="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"});
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 35, '5s') sgn(angles{unit="negative"});
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 35, '5s') sgn(angles{unit="zero"});
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 35, '5s') sgn(angles{unit="small_pos"});
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 35, '5s') sgn(angles{unit="small_neg"});
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (25, 35, '5s') sgn(angles);
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (25, 35, '5s') scalar(sgn(angles{unit="positive"}));
-- FIXME: test sgn with arithmetic operations
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (25, 35, '5s') sgn(angles - 42.5);
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 35, '5s') sgn(angles{unit="radians"} - pi());
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (25, 35, '5s') sgn(angles) * angles;
Drop table angles;