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

Method Save

pkg/memory/logic/store_mysql.go:101–193  ·  view source on GitHub ↗

Save 保存或更新 Memory

(ctx context.Context, mem *LogicMemory)

Source from the content-addressed store, hash-verified

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