mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2026-01-09 23:02:55 +00:00
* 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>
110 lines
2.8 KiB
SQL
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;
|