Handle conflicts when inserting lint warning message sets

This commit is contained in:
Christopher Baines 2024-11-29 13:48:10 +00:00
parent 9a38374e7c
commit 930169751c

View file

@ -35,22 +35,6 @@
(list locale message))) (list locale message)))
messages-by-locale))) 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 (define (lint-warning-message-data->lint-warning-message-set-id
conn conn
messages-by-locale) messages-by-locale)
@ -58,21 +42,36 @@
(let* ((lint-warning-message-ids (let* ((lint-warning-message-ids
(lint-warning-message-data->lint-warning-message-ids (lint-warning-message-data->lint-warning-message-ids
conn messages-by-locale)) conn messages-by-locale))
(lint-message-set-id (select-query
(exec-query
conn
(string-append (string-append
"SELECT id FROM lint_warning_message_sets " "SELECT id FROM lint_warning_message_sets "
"WHERE message_ids = ARRAY[" "WHERE message_ids = ARRAY["
(string-join (map number->string (string-join (map number->string
(sort lint-warning-message-ids <)) ", ") (sort lint-warning-message-ids <)) ", ")
"]")))) "]")))
(string->number (string->number
(match lint-message-set-id (match (exec-query conn select-query)
(((id)) id) (((id)) id)
(() (()
(insert-lint-warning-message-set conn lint-warning-message-ids)))))) (match (exec-query
conn
(string-append
"
INSERT INTO lint_warning_message_sets (message_ids) VALUES "
(string-append
"('{"
(string-join
(map number->string
(sort lint-warning-message-ids <))
", ")
"}')") "
ON CONFLICT DO NOTHING RETURNING id"))
(((id)) id)
(()
(match (exec-query conn select-query)
(((id)) id)))))))))
(define (lint-warning-message-locales-for-revision conn commit-hash) (define (lint-warning-message-locales-for-revision conn commit-hash)
(exec-query (exec-query