scanMemoryFromRows 从 rows 扫描 Memory
(rows *sql.Rows)
| 537 | |
| 538 | // scanMemoryFromRows 从 rows 扫描 Memory |
| 539 | func (s *MySQLStore) scanMemoryFromRows(rows *sql.Rows) (*LogicMemory, error) { |
| 540 | mem := &LogicMemory{} |
| 541 | var valueJSON, metadataJSON, sourcesJSON []byte |
| 542 | var sourceType sql.NullString |
| 543 | var confidence float64 |
| 544 | var provenanceCreatedAt, provenanceUpdatedAt sql.NullTime |
| 545 | var provenanceVersion int |
| 546 | var category sql.NullString |
| 547 | var description sql.NullString |
| 548 | var lastAccessed sql.NullTime |
| 549 | |
| 550 | err := rows.Scan( |
| 551 | &mem.ID, &mem.Namespace, &mem.Scope, &mem.Type, &category, &mem.Key, &valueJSON, &description, |
| 552 | &sourceType, &confidence, &sourcesJSON, &provenanceCreatedAt, &provenanceUpdatedAt, &provenanceVersion, |
| 553 | &mem.AccessCount, &lastAccessed, &metadataJSON, &mem.CreatedAt, &mem.UpdatedAt, |
| 554 | ) |
| 555 | |
| 556 | if err != nil { |
| 557 | return nil, NewStoreError("SCAN_ERROR", "failed to scan memory", err) |
| 558 | } |
| 559 | |
| 560 | // 反序列化 |
| 561 | if len(valueJSON) > 0 { |
| 562 | if err := json.Unmarshal(valueJSON, &mem.Value); err != nil { |
| 563 | return nil, NewStoreError("UNMARSHAL_ERROR", "failed to unmarshal value", err) |
| 564 | } |
| 565 | } |
| 566 | if len(metadataJSON) > 0 { |
| 567 | if err := json.Unmarshal(metadataJSON, &mem.Metadata); err != nil { |
| 568 | // metadata 反序列化失败不是致命错误,使用空 map |
| 569 | mem.Metadata = make(map[string]any) |
| 570 | } |
| 571 | } |
| 572 | |
| 573 | if category.Valid { |
| 574 | mem.Category = category.String |
| 575 | } |
| 576 | if description.Valid { |
| 577 | mem.Description = description.String |
| 578 | } |
| 579 | if lastAccessed.Valid { |
| 580 | mem.LastAccessed = lastAccessed.Time |
| 581 | } |
| 582 | |
| 583 | // 构建 Provenance |
| 584 | if sourceType.Valid { |
| 585 | var sources []string |
| 586 | if len(sourcesJSON) > 0 { |
| 587 | _ = json.Unmarshal(sourcesJSON, &sources) // sources 反序列化失败使用空切片 |
| 588 | } |
| 589 | |
| 590 | mem.Provenance = &memory.MemoryProvenance{ |
| 591 | SourceType: memory.SourceType(sourceType.String), |
| 592 | Confidence: confidence, |
| 593 | Sources: sources, |
| 594 | Version: provenanceVersion, |
| 595 | } |
| 596 | if provenanceCreatedAt.Valid { |
no test coverage detected