MCPcopy Create free account
hub / github.com/astercloud/aster / Save

Method Save

pkg/memory/logic/store_postgres.go:107–199  ·  view source on GitHub ↗

Save 保存或更新 Memory

(ctx context.Context, mem *LogicMemory)

Source from the content-addressed store, hash-verified

105
106// Save 保存或更新 Memory
107func (s *PostgreSQLStore) Save(ctx context.Context, mem *LogicMemory) error {
108 if s.closed {
109 return ErrStoreClosed
110 }
111
112 if mem.Namespace == "" {
113 return ErrInvalidNamespace
114 }
115
116 // 序列化 Value
117 valueJSON, err := json.Marshal(mem.Value)
118 if err != nil {
119 return NewStoreError("MARSHAL_ERROR", "failed to marshal value", err)
120 }
121
122 // 序列化 Metadata
123 metadataJSON, err := json.Marshal(mem.Metadata)
124 if err != nil {
125 metadataJSON = []byte("{}")
126 }
127
128 // 处理 Provenance
129 var sourceType string
130 var confidence float64
131 var sourcesJSON []byte
132 var provenanceCreatedAt, provenanceUpdatedAt sql.NullTime
133 var provenanceVersion int
134
135 if mem.Provenance != nil {
136 sourceType = string(mem.Provenance.SourceType)
137 confidence = mem.Provenance.Confidence
138 sourcesJSON, _ = json.Marshal(mem.Provenance.Sources)
139 if !mem.Provenance.CreatedAt.IsZero() {
140 provenanceCreatedAt = sql.NullTime{Time: mem.Provenance.CreatedAt, Valid: true}
141 }
142 if !mem.Provenance.UpdatedAt.IsZero() {
143 provenanceUpdatedAt = sql.NullTime{Time: mem.Provenance.UpdatedAt, Valid: true}
144 }
145 provenanceVersion = mem.Provenance.Version
146 } else {
147 sourcesJSON = []byte("[]")
148 }
149
150 // 处理时间
151 now := time.Now()
152 if mem.CreatedAt.IsZero() {
153 mem.CreatedAt = now
154 }
155 mem.UpdatedAt = now
156 if mem.LastAccessed.IsZero() {
157 mem.LastAccessed = now
158 }
159
160 query := fmt.Sprintf(`
161 INSERT INTO %s (
162 id, namespace, scope, type, category, key, value, description,
163 source_type, confidence, sources, provenance_created_at, provenance_updated_at, provenance_version,
164 access_count, last_accessed, metadata, created_at, updated_at

Callers

nothing calls this directly

Calls 1

NewStoreErrorFunction · 0.85

Tested by

no test coverage detected