2
0
Fork 0
mirror of git://git.savannah.gnu.org/guix/data-service.git synced 2023-12-14 03:23:03 +01:00
data-service/guix-data-service/model/lint-warning-message.scm
Christopher Baines d3913a14d5 Start handling ids as numbers, rather than strings
squee, returns all data as strings, and expects strings as inputs to
queries. So, keeping the ids as strings was easy initially, but it means that
you can't tell from the type whether it should be quoted, or not...

Therefore, handle ids as strings, converting them to numbers when they're
fetched from the database, and back to strings as part of the queries.
2019-09-05 16:07:23 +02:00

57 lines
1.8 KiB
Scheme

(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 message)
(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 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 (map number->string lint-warning-message-ids) ", ")
"]"))))
(string->number
(match lint-message-set-id
(((id)) id)
(()
(insert-lint-warning-message-set conn lint-warning-message-ids))))))