Files
greptimedb/tests/cases/standalone/common/promql/scalar.result
LFC cbe0cf4a74 refactor: rewrite some UDFs to DataFusion style (part 2) (#6967)
* refactor: rewrite some UDFs to DataFusion style (part 2)

Signed-off-by: luofucong <luofc@foxmail.com>

* deal with vector UDFs `(scalar, scalar)` situation, and try getting the scalar value reference everytime

Signed-off-by: luofucong <luofc@foxmail.com>

* reduce some vector literal parsing

Signed-off-by: luofucong <luofc@foxmail.com>

* fix ci

Signed-off-by: luofucong <luofc@foxmail.com>

---------

Signed-off-by: luofucong <luofc@foxmail.com>
2025-09-18 06:37:27 +00:00

523 lines
23 KiB
Plaintext

CREATE TABLE host (
ts timestamp(3) time index,
host STRING PRIMARY KEY,
val BIGINT,
);
Affected Rows: 0
INSERT INTO TABLE host VALUES
(0, 'host1', 1),
(0, 'host2', 2),
(5000, 'host1', 3),
(5000, 'host2', 4),
(10000, 'host1', 5),
(10000, 'host2', 6),
(15000, 'host1', 7),
(15000, 'host2', 8);
Affected Rows: 8
-- case only have one time series, scalar return value
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') scalar(host{host="host1"});
+---------------------+-------------+
| ts | scalar(val) |
+---------------------+-------------+
| 1970-01-01T00:00:00 | 1.0 |
| 1970-01-01T00:00:05 | 3.0 |
| 1970-01-01T00:00:10 | 5.0 |
| 1970-01-01T00:00:15 | 7.0 |
+---------------------+-------------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') scalar(host{host="host1"}) + 1;
+---------------------+--------------------------+
| ts | scalar(val) + Float64(1) |
+---------------------+--------------------------+
| 1970-01-01T00:00:00 | 2.0 |
| 1970-01-01T00:00:05 | 4.0 |
| 1970-01-01T00:00:10 | 6.0 |
| 1970-01-01T00:00:15 | 8.0 |
+---------------------+--------------------------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') 1 + scalar(host{host="host1"});
+---------------------+--------------------------+
| ts | Float64(1) + scalar(val) |
+---------------------+--------------------------+
| 1970-01-01T00:00:00 | 2.0 |
| 1970-01-01T00:00:05 | 4.0 |
| 1970-01-01T00:00:10 | 6.0 |
| 1970-01-01T00:00:15 | 8.0 |
+---------------------+--------------------------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') scalar(host{host="host1"}) + scalar(host{host="host2"});
+---------------------+-----------------------------------+
| ts | lhs.scalar(val) + rhs.scalar(val) |
+---------------------+-----------------------------------+
| 1970-01-01T00:00:00 | 3.0 |
| 1970-01-01T00:00:05 | 7.0 |
| 1970-01-01T00:00:10 | 11.0 |
| 1970-01-01T00:00:15 | 15.0 |
+---------------------+-----------------------------------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') host{host="host1"} + scalar(host{host="host2"});
+-------+---------------------+---------------------------+
| host | ts | lhs.val + rhs.scalar(val) |
+-------+---------------------+---------------------------+
| host1 | 1970-01-01T00:00:00 | 3.0 |
| host1 | 1970-01-01T00:00:05 | 7.0 |
| host1 | 1970-01-01T00:00:10 | 11.0 |
| host1 | 1970-01-01T00:00:15 | 15.0 |
+-------+---------------------+---------------------------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') scalar(host{host="host1"}) + host{host="host2"};
+-------+---------------------+---------------------------+
| host | ts | lhs.scalar(val) + rhs.val |
+-------+---------------------+---------------------------+
| host2 | 1970-01-01T00:00:00 | 3.0 |
| host2 | 1970-01-01T00:00:05 | 7.0 |
| host2 | 1970-01-01T00:00:10 | 11.0 |
| host2 | 1970-01-01T00:00:15 | 15.0 |
+-------+---------------------+---------------------------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') host + scalar(host{host="host2"});
+-------+---------------------+---------------------------+
| host | ts | lhs.val + rhs.scalar(val) |
+-------+---------------------+---------------------------+
| host1 | 1970-01-01T00:00:00 | 3.0 |
| host1 | 1970-01-01T00:00:05 | 7.0 |
| host1 | 1970-01-01T00:00:10 | 11.0 |
| host1 | 1970-01-01T00:00:15 | 15.0 |
| host2 | 1970-01-01T00:00:00 | 4.0 |
| host2 | 1970-01-01T00:00:05 | 8.0 |
| host2 | 1970-01-01T00:00:10 | 12.0 |
| host2 | 1970-01-01T00:00:15 | 16.0 |
+-------+---------------------+---------------------------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') scalar(host{host="host1"}) + host;
+-------+---------------------+---------------------------+
| host | ts | lhs.scalar(val) + rhs.val |
+-------+---------------------+---------------------------+
| host1 | 1970-01-01T00:00:00 | 2.0 |
| host1 | 1970-01-01T00:00:05 | 6.0 |
| host1 | 1970-01-01T00:00:10 | 10.0 |
| host1 | 1970-01-01T00:00:15 | 14.0 |
| host2 | 1970-01-01T00:00:00 | 3.0 |
| host2 | 1970-01-01T00:00:05 | 7.0 |
| host2 | 1970-01-01T00:00:10 | 11.0 |
| host2 | 1970-01-01T00:00:15 | 15.0 |
+-------+---------------------+---------------------------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') scalar(count(count(host) by (host)));
+---------------------+--------------------------------+
| ts | scalar(count(count(host.val))) |
+---------------------+--------------------------------+
| 1970-01-01T00:00:00 | 2.0 |
| 1970-01-01T00:00:05 | 2.0 |
| 1970-01-01T00:00:10 | 2.0 |
| 1970-01-01T00:00:15 | 2.0 |
+---------------------+--------------------------------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') scalar(host{host="host1"} + scalar(host{host="host2"}));
+---------------------+-----------------------------------+
| ts | scalar(lhs.val + rhs.scalar(val)) |
+---------------------+-----------------------------------+
| 1970-01-01T00:00:00 | 3.0 |
| 1970-01-01T00:00:05 | 7.0 |
| 1970-01-01T00:00:10 | 11.0 |
| 1970-01-01T00:00:15 | 15.0 |
+---------------------+-----------------------------------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') scalar(scalar(host{host="host2"}) + host{host="host1"});
+---------------------+-----------------------------------+
| ts | scalar(lhs.scalar(val) + rhs.val) |
+---------------------+-----------------------------------+
| 1970-01-01T00:00:00 | 3.0 |
| 1970-01-01T00:00:05 | 7.0 |
| 1970-01-01T00:00:10 | 11.0 |
| 1970-01-01T00:00:15 | 15.0 |
+---------------------+-----------------------------------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') scalar(host + scalar(host{host="host2"}));
+---------------------+-----------------------------------+
| ts | scalar(lhs.val + rhs.scalar(val)) |
+---------------------+-----------------------------------+
| 1970-01-01T00:00:00 | NaN |
| 1970-01-01T00:00:05 | NaN |
| 1970-01-01T00:00:10 | NaN |
| 1970-01-01T00:00:15 | NaN |
+---------------------+-----------------------------------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') scalar(scalar(host{host="host2"}) + host);
+---------------------+-----------------------------------+
| ts | scalar(lhs.scalar(val) + rhs.val) |
+---------------------+-----------------------------------+
| 1970-01-01T00:00:00 | NaN |
| 1970-01-01T00:00:05 | NaN |
| 1970-01-01T00:00:10 | NaN |
| 1970-01-01T00:00:15 | NaN |
+---------------------+-----------------------------------+
-- case have multiple time series, scalar return NaN
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') scalar(host);
+---------------------+-------------+
| ts | scalar(val) |
+---------------------+-------------+
| 1970-01-01T00:00:00 | NaN |
| 1970-01-01T00:00:05 | NaN |
| 1970-01-01T00:00:10 | NaN |
| 1970-01-01T00:00:15 | NaN |
+---------------------+-------------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') scalar(host) + 1;
+---------------------+--------------------------+
| ts | scalar(val) + Float64(1) |
+---------------------+--------------------------+
| 1970-01-01T00:00:00 | NaN |
| 1970-01-01T00:00:05 | NaN |
| 1970-01-01T00:00:10 | NaN |
| 1970-01-01T00:00:15 | NaN |
+---------------------+--------------------------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') 1 + scalar(host);
+---------------------+--------------------------+
| ts | Float64(1) + scalar(val) |
+---------------------+--------------------------+
| 1970-01-01T00:00:00 | NaN |
| 1970-01-01T00:00:05 | NaN |
| 1970-01-01T00:00:10 | NaN |
| 1970-01-01T00:00:15 | NaN |
+---------------------+--------------------------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') scalar(host) + scalar(host);
+---------------------+-----------------------------------+
| ts | lhs.scalar(val) + rhs.scalar(val) |
+---------------------+-----------------------------------+
| 1970-01-01T00:00:00 | NaN |
| 1970-01-01T00:00:05 | NaN |
| 1970-01-01T00:00:10 | NaN |
| 1970-01-01T00:00:15 | NaN |
+---------------------+-----------------------------------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') host + scalar(host);
+-------+---------------------+---------------------------+
| host | ts | lhs.val + rhs.scalar(val) |
+-------+---------------------+---------------------------+
| host1 | 1970-01-01T00:00:00 | NaN |
| host1 | 1970-01-01T00:00:05 | NaN |
| host1 | 1970-01-01T00:00:10 | NaN |
| host1 | 1970-01-01T00:00:15 | NaN |
| host2 | 1970-01-01T00:00:00 | NaN |
| host2 | 1970-01-01T00:00:05 | NaN |
| host2 | 1970-01-01T00:00:10 | NaN |
| host2 | 1970-01-01T00:00:15 | NaN |
+-------+---------------------+---------------------------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') scalar(host) + host;
+-------+---------------------+---------------------------+
| host | ts | lhs.scalar(val) + rhs.val |
+-------+---------------------+---------------------------+
| host1 | 1970-01-01T00:00:00 | NaN |
| host1 | 1970-01-01T00:00:05 | NaN |
| host1 | 1970-01-01T00:00:10 | NaN |
| host1 | 1970-01-01T00:00:15 | NaN |
| host2 | 1970-01-01T00:00:00 | NaN |
| host2 | 1970-01-01T00:00:05 | NaN |
| host2 | 1970-01-01T00:00:10 | NaN |
| host2 | 1970-01-01T00:00:15 | NaN |
+-------+---------------------+---------------------------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') host{host="host2"} + scalar(host);
+-------+---------------------+---------------------------+
| host | ts | lhs.val + rhs.scalar(val) |
+-------+---------------------+---------------------------+
| host2 | 1970-01-01T00:00:00 | NaN |
| host2 | 1970-01-01T00:00:05 | NaN |
| host2 | 1970-01-01T00:00:10 | NaN |
| host2 | 1970-01-01T00:00:15 | NaN |
+-------+---------------------+---------------------------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') scalar(host) + host{host="host2"};
+-------+---------------------+---------------------------+
| host | ts | lhs.scalar(val) + rhs.val |
+-------+---------------------+---------------------------+
| host2 | 1970-01-01T00:00:00 | NaN |
| host2 | 1970-01-01T00:00:05 | NaN |
| host2 | 1970-01-01T00:00:10 | NaN |
| host2 | 1970-01-01T00:00:15 | NaN |
+-------+---------------------+---------------------------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') scalar(host{host="host1"} + scalar(host));
+---------------------+-----------------------------------+
| ts | scalar(lhs.val + rhs.scalar(val)) |
+---------------------+-----------------------------------+
| 1970-01-01T00:00:00 | NaN |
| 1970-01-01T00:00:05 | NaN |
| 1970-01-01T00:00:10 | NaN |
| 1970-01-01T00:00:15 | NaN |
+---------------------+-----------------------------------+
-- No data input in scalar
TQL EVAL (350, 360, '5s') scalar(host{host="host1"});
+---------------------+-------------+
| ts | scalar(val) |
+---------------------+-------------+
| 1970-01-01T00:05:50 | NaN |
| 1970-01-01T00:05:55 | NaN |
| 1970-01-01T00:06:00 | NaN |
+---------------------+-------------+
DELETE from host where ts = 0;
Affected Rows: 2
-- Under this case, InstantManipulate will input a valid record batch but output a empty record batch (because no data will be selected in this batch)
-- Test input a empty record batch to ScalarCalculate plan
TQL EVAL (0, 1600, '6m40s') scalar(host{host="host1"});
+---------------------+-------------+
| ts | scalar(val) |
+---------------------+-------------+
| 1970-01-01T00:00:00 | NaN |
| 1970-01-01T00:06:40 | NaN |
| 1970-01-01T00:13:20 | NaN |
| 1970-01-01T00:20:00 | NaN |
| 1970-01-01T00:26:40 | NaN |
+---------------------+-------------+
-- error case
TQL EVAL (0, 15, '5s') scalar(1 + scalar(host{host="host2"}));
Error: 2000(InvalidSyntax), expected type vector in call to function 'scalar', got scalar
TQL EVAL (0, 15, '5s') scalar(scalar(host{host="host2"}) + 1);
Error: 2000(InvalidSyntax), expected type vector in call to function 'scalar', got scalar
TQL EVAL (0, 15, '5s') scalar(scalar(host{host="host1"}) + scalar(host{host="host2"}));
Error: 2000(InvalidSyntax), expected type vector in call to function 'scalar', got scalar
-- Test clamp functions with vector input and scalar bounds
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') clamp(host, 0, 12);
+---------------------+-----------------------------------+-------+
| ts | clamp(val,Float64(0),Float64(12)) | host |
+---------------------+-----------------------------------+-------+
| 1970-01-01T00:00:05 | 3.0 | host1 |
| 1970-01-01T00:00:05 | 4.0 | host2 |
| 1970-01-01T00:00:10 | 5.0 | host1 |
| 1970-01-01T00:00:10 | 6.0 | host2 |
| 1970-01-01T00:00:15 | 7.0 | host1 |
| 1970-01-01T00:00:15 | 8.0 | host2 |
+---------------------+-----------------------------------+-------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') clamp(host, 6 - 6, 6 + 6);
+---------------------+------------------------------------------------------------+-------+
| ts | clamp(val,Float64(6) - Float64(6),Float64(6) + Float64(6)) | host |
+---------------------+------------------------------------------------------------+-------+
| 1970-01-01T00:00:05 | 3.0 | host1 |
| 1970-01-01T00:00:05 | 4.0 | host2 |
| 1970-01-01T00:00:10 | 5.0 | host1 |
| 1970-01-01T00:00:10 | 6.0 | host2 |
| 1970-01-01T00:00:15 | 7.0 | host1 |
| 1970-01-01T00:00:15 | 8.0 | host2 |
+---------------------+------------------------------------------------------------+-------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') clamp(host, 12, 0);
Error: 3001(EngineExecuteQuery), Execution error: min '12' > max '0'
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') clamp(host{host="host1"}, -1, 6);
+---------------------+-----------------------------------+-------+
| ts | clamp(val,Float64(-1),Float64(6)) | host |
+---------------------+-----------------------------------+-------+
| 1970-01-01T00:00:05 | 3.0 | host1 |
| 1970-01-01T00:00:10 | 5.0 | host1 |
| 1970-01-01T00:00:15 | 6.0 | host1 |
+---------------------+-----------------------------------+-------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') clamp_min(host{host="host1"}, 10);
+---------------------+----------------------------+-------+
| ts | clamp_min(val,Float64(10)) | host |
+---------------------+----------------------------+-------+
| 1970-01-01T00:00:05 | 10.0 | host1 |
| 1970-01-01T00:00:10 | 10.0 | host1 |
| 1970-01-01T00:00:15 | 10.0 | host1 |
+---------------------+----------------------------+-------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') clamp_min(host{host="host1"}, 1);
+---------------------+---------------------------+-------+
| ts | clamp_min(val,Float64(1)) | host |
+---------------------+---------------------------+-------+
| 1970-01-01T00:00:05 | 3.0 | host1 |
| 1970-01-01T00:00:10 | 5.0 | host1 |
| 1970-01-01T00:00:15 | 7.0 | host1 |
+---------------------+---------------------------+-------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') clamp_max(host{host="host1"}, 1);
+---------------------+---------------------------+-------+
| ts | clamp_max(val,Float64(1)) | host |
+---------------------+---------------------------+-------+
| 1970-01-01T00:00:05 | 1.0 | host1 |
| 1970-01-01T00:00:10 | 1.0 | host1 |
| 1970-01-01T00:00:15 | 1.0 | host1 |
+---------------------+---------------------------+-------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') clamp_max(host{host="host1"}, 10);
+---------------------+----------------------------+-------+
| ts | clamp_max(val,Float64(10)) | host |
+---------------------+----------------------------+-------+
| 1970-01-01T00:00:05 | 3.0 | host1 |
| 1970-01-01T00:00:10 | 5.0 | host1 |
| 1970-01-01T00:00:15 | 7.0 | host1 |
+---------------------+----------------------------+-------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') clamp_min(host, 1);
+---------------------+---------------------------+-------+
| ts | clamp_min(val,Float64(1)) | host |
+---------------------+---------------------------+-------+
| 1970-01-01T00:00:05 | 3.0 | host1 |
| 1970-01-01T00:00:05 | 4.0 | host2 |
| 1970-01-01T00:00:10 | 5.0 | host1 |
| 1970-01-01T00:00:10 | 6.0 | host2 |
| 1970-01-01T00:00:15 | 7.0 | host1 |
| 1970-01-01T00:00:15 | 8.0 | host2 |
+---------------------+---------------------------+-------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') clamp_max(host, 10);
+---------------------+----------------------------+-------+
| ts | clamp_max(val,Float64(10)) | host |
+---------------------+----------------------------+-------+
| 1970-01-01T00:00:05 | 3.0 | host1 |
| 1970-01-01T00:00:05 | 4.0 | host2 |
| 1970-01-01T00:00:10 | 5.0 | host1 |
| 1970-01-01T00:00:10 | 6.0 | host2 |
| 1970-01-01T00:00:15 | 7.0 | host1 |
| 1970-01-01T00:00:15 | 8.0 | host2 |
+---------------------+----------------------------+-------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') scalar(clamp(host{host="host1"}, 0, 6));
+---------------------+------------------------------------------+
| ts | scalar(clamp(val,Float64(0),Float64(6))) |
+---------------------+------------------------------------------+
| 1970-01-01T00:00:05 | 3.0 |
| 1970-01-01T00:00:10 | 5.0 |
| 1970-01-01T00:00:15 | 6.0 |
+---------------------+------------------------------------------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') scalar(clamp_min(host{host="host1"}, 1));
+---------------------+-----------------------------------+
| ts | scalar(clamp_min(val,Float64(1))) |
+---------------------+-----------------------------------+
| 1970-01-01T00:00:05 | 3.0 |
| 1970-01-01T00:00:10 | 5.0 |
| 1970-01-01T00:00:15 | 7.0 |
+---------------------+-----------------------------------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') scalar(clamp_max(host{host="host1"}, 10));
+---------------------+------------------------------------+
| ts | scalar(clamp_max(val,Float64(10))) |
+---------------------+------------------------------------+
| 1970-01-01T00:00:05 | 3.0 |
| 1970-01-01T00:00:10 | 5.0 |
| 1970-01-01T00:00:15 | 7.0 |
+---------------------+------------------------------------+
-- Test nested clamp functions
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') clamp(clamp_min(host{host="host1"}, 1), 0, 12);
+---------------------+---------------------------------------------------------+-------+
| ts | clamp(clamp_min(val,Float64(1)),Float64(0),Float64(12)) | host |
+---------------------+---------------------------------------------------------+-------+
| 1970-01-01T00:00:05 | 3.0 | host1 |
| 1970-01-01T00:00:10 | 5.0 | host1 |
| 1970-01-01T00:00:15 | 7.0 | host1 |
+---------------------+---------------------------------------------------------+-------+
-- SQLNESS SORT_RESULT 3 1
TQL EVAL (0, 15, '5s') clamp_max(clamp(host{host="host1"}, 0, 15), 6);
+---------------------+---------------------------------------------------------+-------+
| ts | clamp_max(clamp(val,Float64(0),Float64(15)),Float64(6)) | host |
+---------------------+---------------------------------------------------------+-------+
| 1970-01-01T00:00:05 | 3.0 | host1 |
| 1970-01-01T00:00:10 | 5.0 | host1 |
| 1970-01-01T00:00:15 | 6.0 | host1 |
+---------------------+---------------------------------------------------------+-------+
Drop table host;
Affected Rows: 0