guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

02/04: Update the package_metadata_tsvectors with new entries


From: Christopher Baines
Subject: 02/04: Update the package_metadata_tsvectors with new entries
Date: Wed, 12 Aug 2020 03:55:07 -0400 (EDT)

cbaines pushed a commit to branch master
in repository data-service.

commit 5b3e5d9441948fe621c495a36556ec1011f65b41
Author: Danjela Lura <danielaluraa@gmail.com>
AuthorDate: Fri Aug 7 17:16:44 2020 +0200

    Update the package_metadata_tsvectors with new entries
    
    Signed-off-by: Christopher Baines <mail@cbaines.net>
---
 guix-data-service/jobs/load-new-guix-revision.scm | 30 ++++++-----
 guix-data-service/model/package-metadata.scm      | 64 +++++++++++++++++++++++
 guix-data-service/model/utils.scm                 | 52 +++++++++---------
 3 files changed, 109 insertions(+), 37 deletions(-)

diff --git a/guix-data-service/jobs/load-new-guix-revision.scm 
b/guix-data-service/jobs/load-new-guix-revision.scm
index 65fa705..258568e 100644
--- a/guix-data-service/jobs/load-new-guix-revision.scm
+++ b/guix-data-service/jobs/load-new-guix-revision.scm
@@ -17,6 +17,7 @@
 
 (define-module (guix-data-service jobs load-new-guix-revision)
   #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-11)
   #:use-module (ice-9 match)
   #:use-module (ice-9 threads)
   #:use-module (ice-9 textual-ports)
@@ -732,18 +733,23 @@ WHERE job_id = $1"
              conn
              (inferior-packages->license-id-lists
               conn
-              (inferior-packages->license-data inf packages)))))
-         (packages-metadata-ids
-          (with-time-logging "fetching inferior package metadata"
-            (inferior-packages->package-metadata-ids
-             conn inf packages package-license-set-ids))))
-
-    (with-time-logging "getting package-ids"
-      (inferior-packages->package-ids
-       conn
-       (zip (map inferior-package-name packages)
-            (map inferior-package-version packages)
-            packages-metadata-ids)))))
+              (inferior-packages->license-data inf packages))))))
+    (let*-values
+        (((all-package-metadata-ids new-package-metadata-ids)
+           (with-time-logging "fetching inferior package metadata"
+             (inferior-packages->package-metadata-ids
+              conn inf packages package-license-set-ids))))
+
+      (with-time-logging "fetching package metadata tsvector entries"
+        (insert-package-metadata-tsvector-entries
+         conn new-package-metadata-ids))
+
+      (with-time-logging "getting package-ids"
+        (inferior-packages->package-ids
+         conn
+         (zip (map inferior-package-name packages)
+              (map inferior-package-version packages)
+              all-package-metadata-ids))))))
 
 (define (insert-lint-warnings conn inferior-package-id->package-database-id
                               lint-checker-ids
diff --git a/guix-data-service/model/package-metadata.scm 
b/guix-data-service/model/package-metadata.scm
index c906fa4..0598fc7 100644
--- a/guix-data-service/model/package-metadata.scm
+++ b/guix-data-service/model/package-metadata.scm
@@ -17,6 +17,7 @@
 
 (define-module (guix-data-service model package-metadata)
   #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-11)
   #:use-module (ice-9 vlist)
   #:use-module (ice-9 match)
   #:use-module (squee)
@@ -33,6 +34,7 @@
   #:export (select-package-metadata-by-revision-name-and-version
             inferior-packages->package-metadata-ids
             inferior-packages->translated-package-descriptions-and-synopsis
+            insert-package-metadata-tsvector-entries
 
             package-description-and-synopsis-locale-options-guix-revision
 
@@ -493,3 +495,65 @@ GROUP BY package_descriptions.locale;
       `(,locale . ,(string->number description-counts))))
    (exec-query conn description-counts
                (list revision-id))))
+
+(define (insert-package-metadata-tsvector-entries conn
+                                                  package-metadata-ids)
+  (define query
+    (string-append
+     "
+INSERT INTO package_metadata_tsvectors (package_metadata_id, locale,
+            synopsis_and_description, package_synopsis_id, 
package_description_id)
+SELECT DISTINCT ON (package_metadata.id, locale)
+         package_metadata.id,
+         CASE WHEN translated_package_synopsis.locale != 'en_US.utf8'
+              THEN translated_package_synopsis.locale
+              ELSE translated_package_descriptions.locale
+         END AS locale,
+         (
+            setweight(to_tsvector(translated_package_synopsis.synopsis), 'B') 
||
+            
setweight(to_tsvector(translated_package_descriptions.description), 'C')
+         ),
+         translated_package_synopsis.id,
+         translated_package_descriptions.id
+FROM package_metadata
+INNER JOIN (
+  SELECT package_description_sets.id AS package_description_set_id,
+         package_descriptions.id, package_descriptions.description,
+         package_descriptions.locale
+  FROM package_description_sets
+  INNER JOIN package_descriptions
+    ON package_descriptions.id = ANY (package_description_sets.description_ids)
+  ORDER BY package_description_sets.id,
+           CASE WHEN package_descriptions.locale = 'en_US.utf8' THEN 1
+                ELSE 2
+           END DESC
+) AS translated_package_descriptions
+  ON package_metadata.package_description_set_id =
+     translated_package_descriptions.package_description_set_id
+INNER JOIN (
+  SELECT package_synopsis_sets.id AS package_synopsis_set_id,
+         package_synopsis.id, package_synopsis.synopsis, 
package_synopsis.locale
+  FROM package_synopsis_sets
+  INNER JOIN package_synopsis
+    ON package_synopsis.id = ANY (package_synopsis_sets.synopsis_ids)
+  ORDER BY package_synopsis_sets.id,
+           CASE WHEN package_synopsis.locale = 'en_US.utf8' THEN 1
+                ELSE 2
+           END DESC
+) AS translated_package_synopsis
+  ON package_metadata.package_synopsis_set_id =
+     translated_package_synopsis.package_synopsis_set_id
+  AND (translated_package_descriptions.locale =
+       translated_package_synopsis.locale
+       OR translated_package_descriptions.locale = 'en_US.utf8')
+WHERE package_metadata.id IN ("
+         (string-join
+          (map number->string
+               package-metadata-ids) ", ") ")"
+"
+ORDER BY package_metadata.id, locale,
+         CASE WHEN translated_package_synopsis.locale =
+                   translated_package_descriptions.locale THEN 1
+              ELSE 0
+         END DESC;"))
+  (exec-query conn query))
diff --git a/guix-data-service/model/utils.scm 
b/guix-data-service/model/utils.scm
index 79aa7da..e6c4a2b 100644
--- a/guix-data-service/model/utils.scm
+++ b/guix-data-service/model/utils.scm
@@ -365,28 +365,30 @@ WHERE table_name = $1"
                    (exec-query conn (insert-sql missing-entries)))))
          (new-entries-lookup-vhash
           (two-lists->vhash missing-entries
-                            new-entries)))
-
-    (if sets-of-data?
-        (map (lambda (field-value-lists)
-               ;; Normalise the result at this point, ensuring that the id's
-               ;; in the set are sorted
-               (sort
-                (map (lambda (field-values)
-                       (cdr
-                        (or (vhash-assoc (normalise-values field-values)
-                                         existing-entries)
-                            (vhash-assoc field-values
-                                         new-entries-lookup-vhash)
-                            (error "missing entry" field-values))))
-                     field-value-lists)
-                <))
-             data)
-        (map (lambda (field-values)
-               (cdr
-                (or (vhash-assoc (normalise-values field-values)
-                                 existing-entries)
-                    (vhash-assoc field-values
-                                 new-entries-lookup-vhash)
-                    (error "missing entry" field-values))))
-             data))))
+                            new-entries))
+         (all-ids
+          (if sets-of-data?
+              (map (lambda (field-value-lists)
+                     ;; Normalise the result at this point, ensuring that the 
id's
+                     ;; in the set are sorted
+                     (sort
+                      (map (lambda (field-values)
+                             (cdr
+                              (or (vhash-assoc (normalise-values field-values)
+                                               existing-entries)
+                                  (vhash-assoc field-values
+                                               new-entries-lookup-vhash)
+                                  (error "missing entry" field-values))))
+                           field-value-lists)
+                      <))
+                   data)
+              (map (lambda (field-values)
+                     (cdr
+                      (or (vhash-assoc (normalise-values field-values)
+                                       existing-entries)
+                          (vhash-assoc field-values
+                                       new-entries-lookup-vhash)
+                          (error "missing entry" field-values))))
+                   data))))
+    (values all-ids
+            new-entries)))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]