aboutsummaryrefslogtreecommitdiff
path: root/sql/queries/groups.sql
diff options
context:
space:
mode:
authorRunxi Yu <me@runxiyu.org>2025-08-18 01:18:48 +0800
committerRunxi Yu <me@runxiyu.org>2025-08-18 01:18:48 +0800
commita85d1d8d6b25e13500b0895209b6343f0b2bc435 (patch)
tree43d41aa7009bbc39f01b0becd0a7acd588cdf262 /sql/queries/groups.sql
parentTIMESTAMPTZ, not TIMESTAMPZ (diff)
downloadforge-a85d1d8d6b25e13500b0895209b6343f0b2bc435.tar.gz
forge-a85d1d8d6b25e13500b0895209b6343f0b2bc435.tar.zst
forge-a85d1d8d6b25e13500b0895209b6343f0b2bc435.zip
Add sqlc
Diffstat (limited to 'sql/queries/groups.sql')
-rw-r--r--sql/queries/groups.sql27
1 files changed, 27 insertions, 0 deletions
diff --git a/sql/queries/groups.sql b/sql/queries/groups.sql
new file mode 100644
index 0000000..07fe5e7
--- /dev/null
+++ b/sql/queries/groups.sql
@@ -0,0 +1,27 @@
+-- name: GetGroupIDDescByPath :one
+WITH RECURSIVE group_path_cte AS (
+ SELECT
+ id,
+ parent_group,
+ name,
+ 1 AS depth
+ FROM groups
+ WHERE name = ($1::text[])[1]
+ AND parent_group IS NULL
+
+ UNION ALL
+
+ SELECT
+ g.id,
+ g.parent_group,
+ g.name,
+ group_path_cte.depth + 1
+ FROM groups g
+ JOIN group_path_cte ON g.parent_group = group_path_cte.id
+ WHERE g.name = ($1::text[])[group_path_cte.depth + 1]
+ AND group_path_cte.depth + 1 <= cardinality($1::text[])
+)
+SELECT c.id, COALESCE(g.description, '')
+FROM group_path_cte c
+JOIN groups g ON g.id = c.id
+WHERE c.depth = cardinality($1::text[]);