diff options
author | Grail Finder <wohilas@gmail.com> | 2025-02-09 18:21:34 +0300 |
---|---|---|
committer | Grail Finder <wohilas@gmail.com> | 2025-02-09 18:21:34 +0300 |
commit | 54680539085d354ac9473fa451e284963e12000a (patch) | |
tree | 734ac816efdc504b95174f233d97b48f310bbfde /storage/memory.go | |
parent | c85766139371bb4324826fa8716b3478eea898c1 (diff) |
Enha: rewrite (upsert) memory
Diffstat (limited to 'storage/memory.go')
-rw-r--r-- | storage/memory.go | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/storage/memory.go b/storage/memory.go index 088ce1c..c9fc853 100644 --- a/storage/memory.go +++ b/storage/memory.go @@ -9,7 +9,13 @@ type Memories interface { } func (p ProviderSQL) Memorise(m *models.Memory) (*models.Memory, error) { - query := "INSERT INTO memories (agent, topic, mind) VALUES (:agent, :topic, :mind) RETURNING *;" + query := ` + INSERT INTO memories (agent, topic, mind) + VALUES (:agent, :topic, :mind) + ON CONFLICT (agent, topic) DO UPDATE + SET mind = excluded.mind, + updated_at = CURRENT_TIMESTAMP + RETURNING *;` stmt, err := p.db.PrepareNamed(query) if err != nil { p.logger.Error("failed to prepare stmt", "query", query, "error", err) @@ -19,7 +25,7 @@ func (p ProviderSQL) Memorise(m *models.Memory) (*models.Memory, error) { var memory models.Memory err = stmt.Get(&memory, m) if err != nil { - p.logger.Error("failed to insert memory", "query", query, "error", err) + p.logger.Error("failed to upsert memory", "query", query, "error", err) return nil, err } return &memory, nil |