Skip to content

Commit 4acae59

Browse files
committed
test: cover recursive CTE operators and errors
1 parent e7e0d8e commit 4acae59

2 files changed

Lines changed: 81 additions & 0 deletions

File tree

src/planner/operator/mod.rs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -921,6 +921,35 @@ mod tests {
921921
Ok(())
922922
}
923923

924+
#[cfg(feature = "spill")]
925+
#[test]
926+
fn recursive_operators_visit_display_and_build() -> Result<(), DatabaseError> {
927+
let table_arena = TableArenaCell::default();
928+
let mut arena = PlanArena::new(&table_arena);
929+
let value = column("value", &mut arena);
930+
let depth = column("depth", &mut arena);
931+
let schema = vec![value, depth];
932+
933+
let recursive_cte = Operator::RecursiveCte(RecursiveCteOperator {
934+
schema_ref: schema.clone(),
935+
});
936+
assert_eq!(referenced_columns(&recursive_cte, &mut arena)?, schema);
937+
assert_eq!(recursive_cte.to_string(), "Recursive CTE: [#0, #1]");
938+
939+
let recursive_scan = Operator::RecursiveScan(RecursiveScanOperator {
940+
schema_ref: schema.clone(),
941+
});
942+
assert_eq!(referenced_columns(&recursive_scan, &mut arena)?, schema);
943+
assert_eq!(recursive_scan.to_string(), "Recursive Scan: [#0, #1]");
944+
945+
let anchor = LogicalPlan::new(Operator::ShowTable, Childrens::None);
946+
let recursive = LogicalPlan::new(Operator::ShowView, Childrens::None);
947+
let plan = RecursiveCteOperator::build(schema, anchor, recursive);
948+
assert!(matches!(plan.operator, Operator::RecursiveCte(_)));
949+
assert!(matches!(*plan.childrens, Childrens::Twins { .. }));
950+
Ok(())
951+
}
952+
924953
#[test]
925954
fn mark_apply_constructors_and_accessors_cover_quantified_paths() {
926955
let left = LogicalPlan::new(Operator::ShowTable, Childrens::None);

tests/slt/cte.slt

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,3 +186,55 @@ WITH selected AS MATERIALIZED (
186186
SELECT id FROM cte_source
187187
)
188188
SELECT * FROM selected
189+
190+
statement error
191+
WITH RECURSIVE first(x) AS (
192+
SELECT 1 UNION ALL SELECT x FROM first
193+
), second(x) AS (
194+
SELECT 1 UNION ALL SELECT x FROM second
195+
)
196+
SELECT * FROM first
197+
198+
statement error
199+
WITH RECURSIVE recursive_cte(value) AS (
200+
SELECT 1
201+
UNION ALL
202+
SELECT value FROM recursive_cte ORDER BY value
203+
)
204+
SELECT * FROM recursive_cte
205+
206+
statement error
207+
WITH RECURSIVE cte_source(id, value) AS (
208+
SELECT id, value FROM cte_source
209+
UNION ALL
210+
SELECT id, value FROM cte_source
211+
)
212+
SELECT * FROM cte_source
213+
214+
statement error
215+
WITH RECURSIVE recursive_cte(value) AS (
216+
SELECT 1
217+
UNION ALL
218+
SELECT 2
219+
)
220+
SELECT * FROM recursive_cte
221+
222+
statement error
223+
WITH RECURSIVE recursive_cte(value) AS (
224+
SELECT 1
225+
UNION ALL
226+
SELECT value, value FROM recursive_cte
227+
)
228+
SELECT * FROM recursive_cte
229+
230+
statement error
231+
WITH RECURSIVE recursive_cte(value) AS (
232+
SELECT 1
233+
UNION ALL
234+
SELECT 'value' FROM recursive_cte
235+
)
236+
SELECT * FROM recursive_cte
237+
238+
statement error
239+
WITH selected AS (SELECT 1) FROM cte_source
240+
SELECT * FROM selected

0 commit comments

Comments
 (0)