From c63b1dc5db6b311a8a3497ba27f57a42b0630b29 Mon Sep 17 00:00:00 2001 From: lionsoul2014 Date: Thu, 12 Mar 2026 11:23:43 +0800 Subject: [PATCH] empty source and auto append supports --- maker/golang/xdb/maker.go | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/maker/golang/xdb/maker.go b/maker/golang/xdb/maker.go index 6f0ce7f..be48407 100644 --- a/maker/golang/xdb/maker.go +++ b/maker/golang/xdb/maker.go @@ -89,9 +89,15 @@ type Maker struct { func NewMaker(version *Version, policy IndexPolicy, srcFile string, dstFile string, fields []int) (*Maker, error) { // open the source file with READONLY mode - srcHandle, err := os.OpenFile(srcFile, os.O_RDONLY, 0600) - if err != nil { - return nil, fmt.Errorf("open source file `%s`: %w", srcFile, err) + var err error + var srcHandle *os.File + if srcFile == "" { + srcHandle = nil + } else { + srcHandle, err = os.OpenFile(srcFile, os.O_RDONLY, 0600) + if err != nil { + return nil, fmt.Errorf("open source file `%s`: %w", srcFile, err) + } } // open the destination file with Read/Write mode @@ -224,14 +230,23 @@ func (m *Maker) Init() error { } // load all the segments - err = m.loadSegments() - if err != nil { - return fmt.Errorf("load segments: %w", err) + if m.srcHandle == nil { + // do nothing here + } else { + err = m.loadSegments() + if err != nil { + return fmt.Errorf("load segments: %w", err) + } } return nil } +// Append a new segment +func (m *Maker) Append(seg *Segment) { + m.segments = append(m.segments, seg) +} + // refresh the vector index of the specified ip func (m *Maker) setVectorIndex(ip []byte, ptr uint32) { var segIdxSize = uint32(m.version.SegmentIndexSize)