From e0dc3726bcef7b6deca8b063e26ae695ba4cc9e8 Mon Sep 17 00:00:00 2001 From: Ralph Slooten Date: Tue, 2 Jan 2024 13:14:21 +1300 Subject: [PATCH] Chore: Use memory pointer for internal message parsing & storage --- internal/storage/database.go | 10 +++++----- internal/storage/database_test.go | 12 ++++++------ internal/storage/search_test.go | 10 ++++++---- internal/storage/tags_test.go | 4 ++-- server/server_test.go | 4 +++- 5 files changed, 22 insertions(+), 18 deletions(-) diff --git a/internal/storage/database.go b/internal/storage/database.go index a8c0779..b3e3478 100644 --- a/internal/storage/database.go +++ b/internal/storage/database.go @@ -124,9 +124,9 @@ func Close() { // Store will save an email to the database tables. // Returns the database ID of the saved message. -func Store(body []byte) (string, error) { +func Store(body *[]byte) (string, error) { // Parse message body with enmime - env, err := enmime.ReadEnvelope(bytes.NewReader(body)) + env, err := enmime.ReadEnvelope(bytes.NewReader(*body)) if err != nil { logger.Log().Warningf("[db] %s", err.Error()) return "", nil @@ -170,7 +170,7 @@ func Store(body []byte) (string, error) { } // extract tags from body matches based on --tag - tagStr := findTagsInRawMessage(&body) + tagStr := findTagsInRawMessage(body) // extract tags from X-Tags header headerTags := strings.TrimSpace(env.Root.Header.Get("X-Tags")) @@ -192,7 +192,7 @@ func Store(body []byte) (string, error) { defer tx.Rollback() subject := env.GetHeader("Subject") - size := len(body) + size := len(*body) inline := len(env.Inlines) attachments := len(env.Attachments) snippet := tools.CreateSnippet(env.Text, env.HTML) @@ -205,7 +205,7 @@ func Store(body []byte) (string, error) { } // insert compressed raw message - compressed := dbEncoder.EncodeAll(body, make([]byte, 0, len(body))) + compressed := dbEncoder.EncodeAll(*body, make([]byte, 0, size)) _, err = tx.Exec("INSERT INTO mailbox_data(ID, Email) values(?,?)", id, string(compressed)) if err != nil { return "", err diff --git a/internal/storage/database_test.go b/internal/storage/database_test.go index c6fc33e..07dd10b 100644 --- a/internal/storage/database_test.go +++ b/internal/storage/database_test.go @@ -16,7 +16,7 @@ func TestTextEmailInserts(t *testing.T) { assertEqualStats(t, 0, 0) for i := 0; i < testRuns; i++ { - if _, err := Store(testTextEmail); err != nil { + if _, err := Store(&testTextEmail); err != nil { t.Log("error ", err) t.Fail() } @@ -50,7 +50,7 @@ func TestMimeEmailInserts(t *testing.T) { start := time.Now() for i := 0; i < testRuns; i++ { - if _, err := Store(testMimeEmail); err != nil { + if _, err := Store(&testMimeEmail); err != nil { t.Log("error ", err) t.Fail() } @@ -79,7 +79,7 @@ func TestRetrieveMimeEmail(t *testing.T) { t.Log("Testing mime email retrieval") - id, err := Store(testMimeEmail) + id, err := Store(&testMimeEmail) if err != nil { t.Log("error ", err) t.Fail() @@ -123,7 +123,7 @@ func TestMessageSummary(t *testing.T) { t.Log("Testing message summary") - if _, err := Store(testMimeEmail); err != nil { + if _, err := Store(&testMimeEmail); err != nil { t.Log("error ", err) t.Fail() } @@ -154,7 +154,7 @@ func BenchmarkImportText(b *testing.B) { defer Close() for i := 0; i < b.N; i++ { - if _, err := Store(testTextEmail); err != nil { + if _, err := Store(&testTextEmail); err != nil { b.Log("error ", err) b.Fail() } @@ -166,7 +166,7 @@ func BenchmarkImportMime(b *testing.B) { defer Close() for i := 0; i < b.N; i++ { - if _, err := Store(testMimeEmail); err != nil { + if _, err := Store(&testMimeEmail); err != nil { b.Log("error ", err) b.Fail() } diff --git a/internal/storage/search_test.go b/internal/storage/search_test.go index 30861c7..4646b9e 100644 --- a/internal/storage/search_test.go +++ b/internal/storage/search_test.go @@ -34,7 +34,9 @@ func TestSearch(t *testing.T) { t.Fail() } - if _, err := Store(buf.Bytes()); err != nil { + bufBytes := buf.Bytes() + + if _, err := Store(&bufBytes); err != nil { t.Log("error ", err) t.Fail() } @@ -85,11 +87,11 @@ func TestSearchDelete100(t *testing.T) { t.Log("Testing search delete of 100 messages") for i := 0; i < 100; i++ { - if _, err := Store(testTextEmail); err != nil { + if _, err := Store(&testTextEmail); err != nil { t.Log("error ", err) t.Fail() } - if _, err := Store(testMimeEmail); err != nil { + if _, err := Store(&testMimeEmail); err != nil { t.Log("error ", err) t.Fail() } @@ -123,7 +125,7 @@ func TestSearchDelete1100(t *testing.T) { t.Log("Testing search delete of 1100 messages") for i := 0; i < 1100; i++ { - if _, err := Store(testTextEmail); err != nil { + if _, err := Store(&testTextEmail); err != nil { t.Log("error ", err) t.Fail() } diff --git a/internal/storage/tags_test.go b/internal/storage/tags_test.go index 414ffdb..d020971 100644 --- a/internal/storage/tags_test.go +++ b/internal/storage/tags_test.go @@ -15,7 +15,7 @@ func TestTags(t *testing.T) { ids := []string{} for i := 0; i < 10; i++ { - id, err := Store(testMimeEmail) + id, err := Store(&testMimeEmail) if err != nil { t.Log("error ", err) t.Fail() @@ -48,7 +48,7 @@ func TestTags(t *testing.T) { } // test 20 tags - id, err := Store(testMimeEmail) + id, err := Store(&testMimeEmail) if err != nil { t.Log("error ", err) t.Fail() diff --git a/server/server_test.go b/server/server_test.go index fe31b73..58faebf 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -274,7 +274,9 @@ func insertEmailData(t *testing.T) { t.Fail() } - id, err := storage.Store(buf.Bytes()) + bufBytes := buf.Bytes() + + id, err := storage.Store(&bufBytes) if err != nil { t.Log("error ", err) t.Fail()