scanMemoryFromRows 从 rows 扫描 Memory
(rows *sql.Rows)
| 558 | |
| 559 | // scanMemoryFromRows 从 rows 扫描 Memory |
| 560 | func (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 { |
no test coverage detected