diff options
Diffstat (limited to 'guix-data-service/model/lint-warning-message.scm')
-rw-r--r-- | guix-data-service/model/lint-warning-message.scm | 57 |
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))))) |