mirror of https://github.com/milvus-io/milvus.git
128 lines
3.8 KiB
Go
128 lines
3.8 KiB
Go
package dbmodel
|
|
|
|
import (
|
|
"encoding/json"
|
|
"time"
|
|
|
|
"go.uber.org/zap"
|
|
|
|
"github.com/milvus-io/milvus-proto/go-api/commonpb"
|
|
"github.com/milvus-io/milvus/internal/metastore/model"
|
|
"github.com/milvus-io/milvus/pkg/common"
|
|
"github.com/milvus-io/milvus/pkg/log"
|
|
"github.com/milvus-io/milvus/pkg/util/funcutil"
|
|
"github.com/milvus-io/milvus/pkg/util/typeutil"
|
|
)
|
|
|
|
type Index struct {
|
|
ID int64 `gorm:"id"`
|
|
TenantID string `gorm:"tenant_id"`
|
|
FieldID int64 `gorm:"field_id"`
|
|
CollectionID int64 `gorm:"collection_id"`
|
|
IndexID int64 `gorm:"index_id"`
|
|
IndexName string `gorm:"index_name"`
|
|
IndexParams string `gorm:"index_params"`
|
|
TypeParams string `gorm:"type_params"`
|
|
UserIndexParams string `gorm:"user_index_params"`
|
|
IsAutoIndex bool `gorm:"is_auto_index"`
|
|
CreateTime uint64 `gorm:"create_time"`
|
|
IsDeleted bool `gorm:"is_deleted"`
|
|
CreatedAt time.Time `gorm:"created_at"`
|
|
UpdatedAt time.Time `gorm:"updated_at"`
|
|
}
|
|
|
|
func (v Index) TableName() string {
|
|
return "indexes"
|
|
}
|
|
|
|
// ------------- search result -------------
|
|
|
|
type IndexResult struct {
|
|
FieldID int64
|
|
CollectionID int64
|
|
IndexID int64
|
|
IndexName string
|
|
TypeParams string
|
|
IndexParams string
|
|
CreateTime uint64
|
|
IsDeleted bool
|
|
IsAutoIndex bool
|
|
UserIndexParams string
|
|
}
|
|
|
|
//go:generate mockery --name=IIndexDb
|
|
type IIndexDb interface {
|
|
Get(tenantID string, collectionID typeutil.UniqueID) ([]*Index, error)
|
|
List(tenantID string) ([]*IndexResult, error)
|
|
Insert(in []*Index) error
|
|
Update(in *Index) error
|
|
MarkDeletedByCollectionID(tenantID string, collID typeutil.UniqueID) error
|
|
MarkDeletedByIndexID(tenantID string, idxID typeutil.UniqueID) error
|
|
}
|
|
|
|
// model <---> db
|
|
|
|
func UnmarshalIndexModel(inputs []*IndexResult) ([]*model.Index, error) {
|
|
result := make([]*model.Index, 0, len(inputs))
|
|
for _, ir := range inputs {
|
|
var indexParams []commonpb.KeyValuePair
|
|
if ir.IndexParams != "" {
|
|
err := json.Unmarshal([]byte(ir.IndexParams), &indexParams)
|
|
if err != nil {
|
|
log.Error("unmarshal IndexParams of index failed", zap.Int64("collID", ir.CollectionID),
|
|
zap.Int64("indexID", ir.IndexID), zap.String("indexName", ir.IndexName), zap.Error(err))
|
|
return nil, err
|
|
}
|
|
}
|
|
var userIndexParams []commonpb.KeyValuePair
|
|
if ir.UserIndexParams != "" {
|
|
err := json.Unmarshal([]byte(ir.UserIndexParams), &userIndexParams)
|
|
if err != nil {
|
|
log.Error("unmarshal UserIndexParams of index failed", zap.Int64("collID", ir.CollectionID),
|
|
zap.Int64("indexID", ir.IndexID), zap.String("indexName", ir.IndexName), zap.Error(err))
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
var typeParams []commonpb.KeyValuePair
|
|
if ir.TypeParams != "" {
|
|
err := json.Unmarshal([]byte(ir.TypeParams), &typeParams)
|
|
if err != nil {
|
|
log.Error("unmarshal TypeParams of index failed", zap.Int64("collID", ir.CollectionID),
|
|
zap.Int64("indexID", ir.IndexID), zap.String("indexName", ir.IndexName), zap.Error(err))
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
idx := &model.Index{
|
|
CollectionID: ir.CollectionID,
|
|
FieldID: ir.FieldID,
|
|
IndexID: ir.IndexID,
|
|
IndexName: ir.IndexName,
|
|
IndexParams: funcutil.ConvertToKeyValuePairPointer(indexParams),
|
|
TypeParams: funcutil.ConvertToKeyValuePairPointer(typeParams),
|
|
CreateTime: ir.CreateTime,
|
|
IsDeleted: ir.IsDeleted,
|
|
IsAutoIndex: ir.IsAutoIndex,
|
|
UserIndexParams: funcutil.ConvertToKeyValuePairPointer(userIndexParams),
|
|
}
|
|
result = append(result, idx)
|
|
}
|
|
|
|
return result, nil
|
|
}
|
|
|
|
func ConvertIndexDBToModel(indexes []*Index) []common.Int64Tuple {
|
|
r := make([]common.Int64Tuple, 0, len(indexes))
|
|
|
|
for _, idx := range indexes {
|
|
tuple := common.Int64Tuple{
|
|
Key: idx.FieldID,
|
|
Value: idx.IndexID,
|
|
}
|
|
r = append(r, tuple)
|
|
}
|
|
|
|
return r
|
|
}
|