1
0
mirror of https://github.com/axllent/mailpit.git synced 2025-08-13 20:04:49 +02:00

Chore: Handle BLOB storage for default database differently to rqlite to reduce memory overhead (#447)

This commit is contained in:
Ralph Slooten
2025-02-21 16:58:20 +13:00
parent 8401ffff22
commit 8995cddfa5

View File

@@ -104,8 +104,15 @@ func Store(body *[]byte) (string, error) {
// insert compressed raw message
encoded := dbEncoder.EncodeAll(*body, make([]byte, 0, int(size)))
hexStr := hex.EncodeToString(encoded)
_, err = tx.Exec(fmt.Sprintf(`INSERT INTO %s (ID, Email) VALUES(?, x'%s')`, tenant("mailbox_data"), hexStr), id) // #nosec
if sqlDriver == "rqlite" {
// rqlite does not support binary data in query, so we need to encode the compressed message into hexadecimal
// string and then generate the SQL query, which is more memory intensive especially with large messages
hexStr := hex.EncodeToString(encoded)
_, err = tx.Exec(fmt.Sprintf(`INSERT INTO %s (ID, Email) VALUES(?, x'%s')`, tenant("mailbox_data"), hexStr), id) // #nosec
} else {
_, err = tx.Exec(fmt.Sprintf(`INSERT INTO %s (ID, Email) VALUES(?, ?)`, tenant("mailbox_data")), id, encoded) // #nosec
}
if err != nil {
return "", err
}
@@ -114,6 +121,8 @@ func Store(body *[]byte) (string, error) {
return "", err
}
encoded = nil
// extract tags using pre-set tag filters, empty slice if not set
tags := findTagsInRawMessage(body)