mirror of https://github.com/milvus-io/milvus.git
92 lines
2.8 KiB
Go
92 lines
2.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-proto/go-api/schemapb"
|
|
"github.com/milvus-io/milvus/internal/metastore/model"
|
|
"github.com/milvus-io/milvus/pkg/log"
|
|
"github.com/milvus-io/milvus/pkg/util/funcutil"
|
|
"github.com/milvus-io/milvus/pkg/util/typeutil"
|
|
)
|
|
|
|
type Field struct {
|
|
ID int64 `gorm:"id"`
|
|
TenantID string `gorm:"tenant_id"`
|
|
FieldID int64 `gorm:"field_id"`
|
|
FieldName string `gorm:"field_name"`
|
|
IsPrimaryKey bool `gorm:"is_primary_key"`
|
|
Description string `gorm:"description"`
|
|
DataType schemapb.DataType `gorm:"data_type"`
|
|
TypeParams string `gorm:"type_params"`
|
|
IndexParams string `gorm:"index_params"`
|
|
AutoID bool `gorm:"auto_id"`
|
|
CollectionID int64 `gorm:"collection_id"`
|
|
Ts typeutil.Timestamp `gorm:"ts"`
|
|
IsDeleted bool `gorm:"is_deleted"`
|
|
CreatedAt time.Time `gorm:"created_at"`
|
|
UpdatedAt time.Time `gorm:"updated_at"`
|
|
}
|
|
|
|
func (v Field) TableName() string {
|
|
return "field_schemas"
|
|
}
|
|
|
|
//go:generate mockery --name=IFieldDb
|
|
type IFieldDb interface {
|
|
GetByCollectionID(tenantID string, collectionID typeutil.UniqueID, ts typeutil.Timestamp) ([]*Field, error)
|
|
Insert(in []*Field) error
|
|
}
|
|
|
|
// model <---> db
|
|
|
|
func UnmarshalFieldModel(fields []*Field) ([]*model.Field, error) {
|
|
r := make([]*model.Field, 0, len(fields))
|
|
for _, f := range fields {
|
|
fd, err := ConvertFieldDBToModel(f)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
r = append(r, fd)
|
|
}
|
|
|
|
return r, nil
|
|
}
|
|
|
|
func ConvertFieldDBToModel(field *Field) (*model.Field, error) {
|
|
var typeParams []commonpb.KeyValuePair
|
|
if field.TypeParams != "" {
|
|
err := json.Unmarshal([]byte(field.TypeParams), &typeParams)
|
|
if err != nil {
|
|
log.Error("unmarshal TypeParams of field failed", zap.Int64("collID", field.CollectionID),
|
|
zap.Int64("fieldID", field.FieldID), zap.String("fieldName", field.FieldName), zap.Error(err))
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
var indexParams []commonpb.KeyValuePair
|
|
if field.IndexParams != "" {
|
|
err := json.Unmarshal([]byte(field.IndexParams), &indexParams)
|
|
if err != nil {
|
|
log.Error("unmarshal IndexParams of field failed", zap.Int64("collID", field.CollectionID),
|
|
zap.Int64("fieldID", field.FieldID), zap.String("fieldName", field.FieldName), zap.Error(err))
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
return &model.Field{
|
|
FieldID: field.FieldID,
|
|
Name: field.FieldName,
|
|
IsPrimaryKey: field.IsPrimaryKey,
|
|
Description: field.Description,
|
|
DataType: field.DataType,
|
|
TypeParams: funcutil.ConvertToKeyValuePairPointer(typeParams),
|
|
IndexParams: funcutil.ConvertToKeyValuePairPointer(indexParams),
|
|
AutoID: field.AutoID,
|
|
}, nil
|
|
}
|