19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
# File 'lib/treeify.rb', line 19
def query
"WITH RECURSIVE cte (id, #{self.cols.join(',')}, path, parent_id, depth) AS (
SELECT id,
#{self.cols.join(',')}
array[id] AS path,
parent_id,
1 AS depth
FROM #{self.table_name}
WHERE parent_id IS NULL
UNION ALL
SELECT #{self.table_name}.id,
#{self.cols.map{ |c| self.table_name << '.' << c }.join(',')},
#{self.table_name}.author,
cte.path || #{self.table_name}.id,
#{self.table_name}.parent_id,
cte.depth + 1 AS depth
FROM #{self.table_name}
JOIN cte ON #{self.table_name}.parent_id = cte.id
)
SELECT id, #{self.cols.join(',')}, path, depth FROM cte
ORDER BY path;"
end
|