From 0b2195aa64bbf364ca07ec43f21f5f36d9a73edc Mon Sep 17 00:00:00 2001
From: Denis Smirnov <sd@picodata.io>
Date: Tue, 23 Apr 2024 19:12:49 +0700
Subject: [PATCH] test: add cte test

---
 .../test_app/test/integration/cte_test.lua    | 30 +++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/sbroad-cartridge/test_app/test/integration/cte_test.lua b/sbroad-cartridge/test_app/test/integration/cte_test.lua
index 7ab607bde..cad5167b8 100644
--- a/sbroad-cartridge/test_app/test/integration/cte_test.lua
+++ b/sbroad-cartridge/test_app/test/integration/cte_test.lua
@@ -129,5 +129,35 @@ g.test_cte = function ()
     t.assert_equals(err, nil)
     t.assert_items_equals(r["metadata"], { {name = "CTE.B", type = "number"} })
     t.assert_items_equals(r["rows"], { {5}, {4} })
+
+    -- randomly distributed cte, used multiple times
+    r, err = api:call("sbroad.execute", { [[
+        WITH cte (b) AS (SELECT "a" FROM "t" WHERE "id" > 3)
+        SELECT t.c FROM (SELECT count(*) as c FROM cte c1 JOIN cte c2 ON true) t
+        JOIN cte ON true
+    ]], })
+    t.assert_equals(err, nil)
+    t.assert_items_equals(r["metadata"], { {name = "T.C", type = "integer"} })
+    t.assert_items_equals(r["rows"], { {4}, {4} })
+
+    -- cte with segment distributed, used multiple times
+    r, err = api:call("sbroad.execute", { [[
+        WITH cte (b) AS (SELECT "id" FROM "t" WHERE "id" = 1)
+        SELECT t.c FROM (SELECT count(*) as c FROM cte c1 JOIN cte c2 ON true) t
+        JOIN cte ON true
+    ]], })
+    t.assert_equals(err, nil)
+    t.assert_items_equals(r["metadata"], { {name = "T.C", type = "integer"} })
+    t.assert_items_equals(r["rows"], { {1} })
+
+    -- globally distributed cte, used multiple times
+    r, err = api:call("sbroad.execute", { [[
+        WITH cte (b) AS (VALUES (1))
+        SELECT t.c FROM (SELECT count(*) as c FROM cte c1 JOIN cte c2 ON true) t
+        JOIN cte ON true
+    ]], })
+    t.assert_equals(err, nil)
+    t.assert_items_equals(r["metadata"], { {name = "T.C", type = "integer"} })
+    t.assert_items_equals(r["rows"], { {1} })
 end
 
-- 
GitLab