aboutsummaryrefslogtreecommitdiff
path: root/guix-data-service/model/lint-warning-message.scm
diff options
context:
space:
mode:
Diffstat (limited to 'guix-data-service/model/lint-warning-message.scm')
-rw-r--r--guix-data-service/model/lint-warning-message.scm57
1 files changed, 57 insertions, 0 deletions
diff --git a/guix-data-service/model/lint-warning-message.scm b/guix-data-service/model/lint-warning-message.scm
new file mode 100644
index 0000000..70851d9
--- /dev/null
+++ b/guix-data-service/model/lint-warning-message.scm
@@ -0,0 +1,57 @@
+(define-module (guix-data-service model lint-warning-message)
+ #:use-module (ice-9 match)
+ #:use-module (squee)
+ #:use-module (guix-data-service database)
+ #:use-module (guix-data-service model utils)
+ #:export (lint-warning-message-data->lint-warning-message-ids
+
+ lint-warning-message-data->lint-warning-message-set-id))
+
+(define (lint-warning-message-data->lint-warning-message-ids conn
+ messages-by-locale)
+ (insert-missing-data-and-return-all-ids
+ conn
+ "lint_warning_messages"
+ `((locale . ,quote-string)
+ (message . ,quote-string))
+ (map (match-lambda
+ ((locale . message)
+ (list locale message)))
+ messages-by-locale)))
+
+(define (insert-lint-warning-message-set conn lint-message-ids)
+ (let ((query
+ (string-append
+ "INSERT INTO lint_warning_message_sets (message_ids) VALUES "
+ (string-append
+ "('{"
+ (string-join
+ (map number->string
+ (sort (map string->number lint-message-ids) <))
+ ", ")
+ "}')")
+ " RETURNING id")))
+
+ (match (exec-query conn query)
+ (((id)) id))))
+
+(define (lint-warning-message-data->lint-warning-message-set-id
+ conn
+ messages-by-locale)
+
+ (let* ((lint-warning-message-ids
+ (lint-warning-message-data->lint-warning-message-ids
+ conn messages-by-locale))
+ (lint-message-set-id
+ (exec-query
+ conn
+ (string-append
+ "SELECT id FROM lint_warning_message_sets "
+ "WHERE message_ids = ARRAY["
+ (string-join lint-warning-message-ids ", ")
+ "]"))))
+
+ (match lint-message-set-id
+ (((id)) id)
+ (()
+ (insert-lint-warning-message-set conn lint-warning-message-ids)))))