diff --git a/reader/collection.go b/reader/collection.go new file mode 100644 index 0000000000..5af0ebbbab --- /dev/null +++ b/reader/collection.go @@ -0,0 +1,56 @@ +package reader + +import "C" +import ( + "errors" +) + +type Collection struct { + CollectionPtr *C.Collection + CollectionName string +} + +// TODO: Schema +type CollectionSchema string + +func NewCollection(collectionName string, schema CollectionSchema) (*Collection, error) { + cName := C.CString(collectionName) + cSchema := C.CString(schema) + collection, status := C.NewCollection(cName, cSchema) + + if status != 0 { + return nil, errors.New("create collection failed") + } + + return &Collection{CollectionPtr: collection, CollectionName: collectionName}, nil +} + +func DeleteCollection(collection *Collection) error { + status := C.DeleteCollection(collection.CollectionPtr) + + if status != 0 { + return errors.New("delete collection failed") + } + + return nil +} + +func (c *Collection) GetSegments() ([]*Segment, error) { + segments, status := C.GetSegments(c.CollectionPtr) + + if status != 0 { + return nil, errors.New("get segments failed") + } + + return segments, nil +} + +func (c *Collection) CreateSegment() error { + status := C.CreateSegment(c.CollectionPtr) + + if status != 0 { + return errors.New("create segment failed") + } + + return nil +} diff --git a/reader/query_node.go b/reader/query_node.go new file mode 100644 index 0000000000..7982881b7a --- /dev/null +++ b/reader/query_node.go @@ -0,0 +1,37 @@ +package reader + +import "C" +import ( + "context" +) + +type QueryNodeTimeSync struct { + deleteTimeSync uint64 + insertTimeSync uint64 + searchTimeSync uint64 +} + +type QueryNode struct { + Collections []*Collection + queryNodeTimeSync *QueryNodeTimeSync +} + +func NewQueryNode(ctx context.Context, timeSync uint64) *QueryNode { + ctx = context.Background() + queryNodeTimeSync := &QueryNodeTimeSync { + deleteTimeSync: timeSync, + insertTimeSync: timeSync, + searchTimeSync: timeSync, + } + + return &QueryNode{ + Collections: nil, + queryNodeTimeSync: queryNodeTimeSync, + } +} + +func (node *QueryNode) AddNewCollection(collectionName string, schema CollectionSchema) error { + var collection, err = NewCollection(collectionName, schema) + node.Collections = append(node.Collections, collection) + return err +} diff --git a/reader/segment.go b/reader/segment.go new file mode 100644 index 0000000000..68dec2741f --- /dev/null +++ b/reader/segment.go @@ -0,0 +1,39 @@ +package reader + +import "C" + +type Segment struct { + Id string + Status int + SegmentCloseTime uint64 +} + +func (s *Segment) GetRowCount() int64 { + // TODO: C type to go type + return C.GetRowCount(s) +} + +func (s *Segment) GetStatus() int { + // TODO: C type to go type + return C.GetStatus(s) +} + +func (s *Segment) GetMaxTimestamp() uint64 { + // TODO: C type to go type + return C.GetMaxTimestamp(s) +} + +func (s *Segment) GetMinTimestamp() uint64 { + // TODO: C type to go type + return C.GetMinTimestamp(s) +} + +func (s *Segment) GetDeletedCount() uint64 { + // TODO: C type to go type + return C.GetDeletedCount(s) +} + +func (s *Segment) Close() { + // TODO: C type to go type + C.CloseSegment(s) +}