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

Method scanMemoryFromRows

pkg/memory/logic/store_postgres.go:560–626  ·  view source on GitHub ↗

scanMemoryFromRows 从 rows 扫描 Memory

(rows *sql.Rows)

Source from the content-addressed store, hash-verified

558
559// scanMemoryFromRows 从 rows 扫描 Memory
560func (s *PostgreSQLStore) scanMemoryFromRows(rows *sql.Rows) (*LogicMemory, error) {
561 mem := &LogicMemory{}
562 var valueJSON, metadataJSON, sourcesJSON []byte
563 var sourceType sql.NullString
564 var confidence float64
565 var provenanceCreatedAt, provenanceUpdatedAt sql.NullTime
566 var provenanceVersion int
567 var category sql.NullString
568 var description sql.NullString
569 var lastAccessed sql.NullTime
570
571 err := rows.Scan(
572 &mem.ID, &mem.Namespace, &mem.Scope, &mem.Type, &category, &mem.Key, &valueJSON, &description,
573 &sourceType, &confidence, &sourcesJSON, &provenanceCreatedAt, &provenanceUpdatedAt, &provenanceVersion,
574 &mem.AccessCount, &lastAccessed, &metadataJSON, &mem.CreatedAt, &mem.UpdatedAt,
575 )
576
577 if err != nil {
578 return nil, NewStoreError("SCAN_ERROR", "failed to scan memory", err)
579 }
580
581 // 反序列化
582 if len(valueJSON) > 0 {
583 if err := json.Unmarshal(valueJSON, &mem.Value); err != nil {
584 return nil, NewStoreError("UNMARSHAL_ERROR", "failed to unmarshal value", err)
585 }
586 }
587 if len(metadataJSON) > 0 {
588 if err := json.Unmarshal(metadataJSON, &mem.Metadata); err != nil {
589 // metadata 反序列化失败不是致命错误,使用空 map
590 mem.Metadata = make(map[string]any)
591 }
592 }
593
594 if category.Valid {
595 mem.Category = category.String
596 }
597 if description.Valid {
598 mem.Description = description.String
599 }
600 if lastAccessed.Valid {
601 mem.LastAccessed = lastAccessed.Time
602 }
603
604 // 构建 Provenance
605 if sourceType.Valid {
606 var sources []string
607 if len(sourcesJSON) > 0 {
608 _ = json.Unmarshal(sourcesJSON, &sources) // sources 反序列化失败使用空切片
609 }
610
611 mem.Provenance = &memory.MemoryProvenance{
612 SourceType: memory.SourceType(sourceType.String),
613 Confidence: confidence,
614 Sources: sources,
615 Version: provenanceVersion,
616 }
617 if provenanceCreatedAt.Valid {

Callers 1

ListMethod · 0.95

Calls 2

SourceTypeTypeAlias · 0.92
NewStoreErrorFunction · 0.85

Tested by

no test coverage detected