Files
greptimedb/tests/cases/distributed/flow-tql/flow_tql_cte.result
discord9 d1151b665b feat: flow tql cte (#7702)
* feat: flow tql cte

Signed-off-by: discord9 <discord9@163.com>

* fix: creating flow TQL CTE source tables lose cte part in query

Signed-off-by: discord9 <discord9@163.com>

* test: update sqlness result

Signed-off-by: discord9 <discord9@163.com>

* chore

Signed-off-by: discord9 <discord9@163.com>

* fix: properly canonicalize ident

Signed-off-by: discord9 <discord9@163.com>

* feat: even stricter check

Signed-off-by: discord9 <discord9@163.com>

* chore: sqlness update

Signed-off-by: discord9 <discord9@163.com>

* chore: after rebase fix

Signed-off-by: discord9 <discord9@163.com>

---------

Signed-off-by: discord9 <discord9@163.com>
2026-03-06 03:36:42 +00:00

195 lines
6.4 KiB
Plaintext

CREATE TABLE metric_cte (
ts timestamp(3) time index,
val DOUBLE,
);
Affected Rows: 0
INSERT INTO TABLE metric_cte VALUES
(0::Timestamp, 0),
(5000::Timestamp, 1),
(10000::Timestamp, 2),
(15000::Timestamp, 3);
Affected Rows: 4
CREATE FLOW calc_cte SINK TO metric_cte_sink EVAL INTERVAL '1m' AS
WITH tql (ts, the_value) AS (
TQL EVAL (now() - now(), now() - (now() - '15s'::interval), '5s') metric_cte
)
SELECT * FROM tql;
Affected Rows: 0
CREATE TABLE tql (
ts timestamp(3) time index,
val DOUBLE,
);
Affected Rows: 0
INSERT INTO TABLE tql VALUES
(0::Timestamp, 10),
(5000::Timestamp, 20),
(10000::Timestamp, 30),
(15000::Timestamp, 40);
Affected Rows: 4
-- Fail due to case sensitivity of CTE name
CREATE FLOW calc_cte_case SINK TO metric_cte_join_sink EVAL INTERVAL '1m' AS
WITH "TQL"(ts, the_value) AS (
TQL EVAL (now() - now(), now() - (now() - '15s'::interval), '5s') metric_cte
)
SELECT * FROM TQL;
Error: 1004(InvalidArguments), Invalid flow query: WITH is only supported for the simplest TQL CTE in CREATE FLOW
CREATE FLOW calc_cte_non_star SINK TO metric_cte_non_star_sink EVAL INTERVAL '1m' AS
WITH tql(ts, the_value) AS (
TQL EVAL (now() - now(), now() - (now() - '15s'::interval), '5s') metric_cte
)
SELECT ts FROM tql;
Error: 1004(InvalidArguments), Invalid flow query: WITH is only supported for the simplest TQL CTE in CREATE FLOW
CREATE FLOW calc_cte_filter SINK TO metric_cte_filter_sink EVAL INTERVAL '1m' AS
WITH tql(ts, the_value) AS (
TQL EVAL (now() - now(), now() - (now() - '15s'::interval), '5s') metric_cte
)
SELECT * FROM tql WHERE ts > 0::timestamp;
Error: 1004(InvalidArguments), Invalid flow query: WITH is only supported for the simplest TQL CTE in CREATE FLOW
CREATE FLOW calc_cte_mixed SINK TO metric_cte_mixed_sink EVAL INTERVAL '1m' AS
WITH s1 AS (SELECT 1),
tql(ts, the_value) AS (
TQL EVAL (now() - now(), now() - (now() - '15s'::interval), '5s') metric_cte
)
SELECT * FROM tql;
Error: 1004(InvalidArguments), Invalid flow query: WITH is only supported for the simplest TQL CTE in CREATE FLOW
CREATE FLOW calc_cte_case SINK TO metric_cte_join_sink EVAL INTERVAL '1m' AS
WITH "TQL"(ts, the_value) AS (
TQL EVAL (now() - now(), now() - (now() - '15s'::interval), '5s') metric_cte
)
SELECT * FROM "TQL";
Affected Rows: 0
SHOW CREATE TABLE metric_cte_sink;
+-----------------+---------------------------------------------------+
| Table | Create Table |
+-----------------+---------------------------------------------------+
| metric_cte_sink | CREATE TABLE IF NOT EXISTS "metric_cte_sink" ( |
| | "ts" TIMESTAMP(3) NOT NULL, |
| | "the_value" DOUBLE NULL, |
| | TIME INDEX ("ts") |
| | ) |
| | |
| | ENGINE=mito |
| | WITH( |
| | 'comment' = 'Auto created table by flow engine' |
| | ) |
+-----------------+---------------------------------------------------+
SELECT source_table_names FROM information_schema.flows WHERE flow_name = 'calc_cte';
+----------------------------+
| source_table_names |
+----------------------------+
| greptime.public.metric_cte |
+----------------------------+
SHOW CREATE TABLE metric_cte_join_sink;
+----------------------+-----------------------------------------------------+
| Table | Create Table |
+----------------------+-----------------------------------------------------+
| metric_cte_join_sink | CREATE TABLE IF NOT EXISTS "metric_cte_join_sink" ( |
| | "ts" TIMESTAMP(3) NOT NULL, |
| | "the_value" DOUBLE NULL, |
| | TIME INDEX ("ts") |
| | ) |
| | |
| | ENGINE=mito |
| | WITH( |
| | 'comment' = 'Auto created table by flow engine' |
| | ) |
+----------------------+-----------------------------------------------------+
SELECT source_table_names FROM information_schema.flows WHERE flow_name = 'calc_cte_case';
+----------------------------+
| source_table_names |
+----------------------------+
| greptime.public.metric_cte |
+----------------------------+
-- SQLNESS REPLACE (ADMIN\sFLUSH_FLOW\('\w+'\)\s+\|\n\+-+\+\n\|\s+)[0-9]+\s+\| $1 FLOW_FLUSHED |
ADMIN FLUSH_FLOW('calc_cte');
+------------------------------+
| ADMIN FLUSH_FLOW('calc_cte') |
+------------------------------+
| FLOW_FLUSHED |
+------------------------------+
SELECT * FROM metric_cte_sink ORDER BY ts;
+---------------------+-----------+
| ts | the_value |
+---------------------+-----------+
| 1970-01-01T00:00:00 | 0.0 |
| 1970-01-01T00:00:05 | 1.0 |
| 1970-01-01T00:00:10 | 2.0 |
| 1970-01-01T00:00:15 | 3.0 |
+---------------------+-----------+
-- SQLNESS REPLACE (ADMIN\sFLUSH_FLOW\('\w+'\)\s+\|\n\+-+\+\n\|\s+)[0-9]+\s+\| $1 FLOW_FLUSHED |
ADMIN FLUSH_FLOW('calc_cte_case');
+-----------------------------------+
| ADMIN FLUSH_FLOW('calc_cte_case') |
+-----------------------------------+
| FLOW_FLUSHED |
+-----------------------------------+
SELECT * FROM metric_cte_join_sink ORDER BY ts;
+---------------------+-----------+
| ts | the_value |
+---------------------+-----------+
| 1970-01-01T00:00:00 | 0.0 |
| 1970-01-01T00:00:05 | 1.0 |
| 1970-01-01T00:00:10 | 2.0 |
| 1970-01-01T00:00:15 | 3.0 |
+---------------------+-----------+
DROP FLOW calc_cte;
Affected Rows: 0
DROP FLOW calc_cte_case;
Affected Rows: 0
DROP TABLE metric_cte;
Affected Rows: 0
DROP TABLE tql;
Affected Rows: 0
DROP TABLE metric_cte_sink;
Affected Rows: 0
DROP TABLE metric_cte_join_sink;
Affected Rows: 0