From 42446fcdcf9d752201414afc7e5c7bcb2fb2ee6e Mon Sep 17 00:00:00 2001
From: Paul Duncan <pabs@pablotron.org>
Date: Thu, 17 Feb 2022 23:19:55 -0500
Subject: dbstore/sql: add cpe and cpe-match subdirs

---
 dbstore/sql/cpe/search-title.sql | 44 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)
 create mode 100644 dbstore/sql/cpe/search-title.sql

(limited to 'dbstore/sql/cpe/search-title.sql')

diff --git a/dbstore/sql/cpe/search-title.sql b/dbstore/sql/cpe/search-title.sql
new file mode 100644
index 0000000..7421ffc
--- /dev/null
+++ b/dbstore/sql/cpe/search-title.sql
@@ -0,0 +1,44 @@
+SELECT a.cpe_id,
+       a.cpe23,
+       COALESCE(c.titles, '[]') AS titles,
+       COALESCE(d.refs, '[]') AS refs,
+       b.rank
+
+  -- find matching cpes
+  FROM cpes a
+  JOIN (
+    SELECT cpe_id,
+           MIN(rank) AS rank
+      FROM cpe_fts_titles
+     WHERE cpe_fts_titles MATCH :q
+     GROUP BY cpe_id
+  ) b ON (b.cpe_id = a.cpe_id)
+
+  -- get all titles, grouped by cpe
+  LEFT JOIN (
+    SELECT cpe_id,
+           json_group_array(json_object(
+             'lang', lang,
+             'text', val
+           )) AS titles
+
+      FROM cpe_titles
+
+     GROUP BY cpe_id
+  ) c ON (c.cpe_id = b.cpe_id)
+
+  -- get all refs, grouped by cpe
+  LEFT JOIN (
+    SELECT cpe_id,
+           json_group_array(json_object(
+             'href', href,
+             'text', val
+           )) AS refs
+
+      FROM cpe_refs
+
+     GROUP BY cpe_id
+  ) d ON (d.cpe_id = b.cpe_id)
+
+ -- order by rank
+ ORDER BY b.rank;
-- 
cgit v1.2.3

