mirror of
https://gitee.com/milvus-io/milvus.git
synced 2025-12-06 17:18:35 +08:00
fix: [GoSDK] Pass only valid data for nullable column (#40328)
Related to #40327 Signed-off-by: Congqi Xia <congqi.xia@zilliz.com>
This commit is contained in:
parent
7d35d023a3
commit
c02763d49a
@ -32,6 +32,7 @@ func (c *columnArrayBase[T]) FieldData() *schemapb.FieldData {
|
|||||||
fd := &schemapb.FieldData{
|
fd := &schemapb.FieldData{
|
||||||
Type: schemapb.DataType_Array,
|
Type: schemapb.DataType_Array,
|
||||||
FieldName: c.name,
|
FieldName: c.name,
|
||||||
|
ValidData: c.validData,
|
||||||
}
|
}
|
||||||
|
|
||||||
data := make([]*schemapb.ScalarField, 0, c.Len())
|
data := make([]*schemapb.ScalarField, 0, c.Len())
|
||||||
|
|||||||
@ -49,6 +49,9 @@ func (c *genericColumnBase[T]) Type() entity.FieldType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *genericColumnBase[T]) Len() int {
|
func (c *genericColumnBase[T]) Len() int {
|
||||||
|
if c.validData != nil {
|
||||||
|
return len(c.validData)
|
||||||
|
}
|
||||||
return len(c.values)
|
return len(c.values)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -166,9 +169,9 @@ func (c *genericColumnBase[T]) AppendNull() error {
|
|||||||
if !c.nullable {
|
if !c.nullable {
|
||||||
return errors.New("append null to not nullable column")
|
return errors.New("append null to not nullable column")
|
||||||
}
|
}
|
||||||
var v T
|
// var v T
|
||||||
c.validData = append(c.validData, true)
|
c.validData = append(c.validData, true)
|
||||||
c.values = append(c.values, v)
|
// c.values = append(c.values, v)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -16,7 +16,10 @@
|
|||||||
|
|
||||||
package column
|
package column
|
||||||
|
|
||||||
import "github.com/cockroachdb/errors"
|
import (
|
||||||
|
"github.com/cockroachdb/errors"
|
||||||
|
"github.com/samber/lo"
|
||||||
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
// scalars
|
// scalars
|
||||||
@ -55,9 +58,13 @@ type NullableColumnCreator[col interface {
|
|||||||
|
|
||||||
func (c NullableColumnCreator[col, T]) New(name string, values []T, validData []bool) (col, error) {
|
func (c NullableColumnCreator[col, T]) New(name string, values []T, validData []bool) (col, error) {
|
||||||
var result col
|
var result col
|
||||||
if len(values) != len(validData) {
|
validCnt := lo.CountBy(validData, func(v bool) bool {
|
||||||
return result, errors.New("values & validData slice has different length")
|
return v
|
||||||
|
})
|
||||||
|
if validCnt != len(values) {
|
||||||
|
return result, errors.Newf("values number(%d) does not match valid count(%d)", len(values), validCnt)
|
||||||
}
|
}
|
||||||
|
|
||||||
result = c.base(name, values)
|
result = c.base(name, values)
|
||||||
result.withValidData(validData)
|
result.withValidData(validData)
|
||||||
|
|
||||||
|
|||||||
@ -33,7 +33,7 @@ type NullableScalarSuite struct {
|
|||||||
func (s *NullableScalarSuite) TestBasic() {
|
func (s *NullableScalarSuite) TestBasic() {
|
||||||
s.Run("nullable_bool", func() {
|
s.Run("nullable_bool", func() {
|
||||||
name := fmt.Sprintf("field_%d", rand.Intn(1000))
|
name := fmt.Sprintf("field_%d", rand.Intn(1000))
|
||||||
data := []bool{true, false}
|
data := []bool{false}
|
||||||
validData := []bool{true, false}
|
validData := []bool{true, false}
|
||||||
column, err := NewNullableColumnBool(name, data, validData)
|
column, err := NewNullableColumnBool(name, data, validData)
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
@ -63,7 +63,7 @@ func (s *NullableScalarSuite) TestBasic() {
|
|||||||
|
|
||||||
s.Run("nullable_int8", func() {
|
s.Run("nullable_int8", func() {
|
||||||
name := fmt.Sprintf("field_%d", rand.Intn(1000))
|
name := fmt.Sprintf("field_%d", rand.Intn(1000))
|
||||||
data := []int8{1, 2, 3}
|
data := []int8{1, 3}
|
||||||
validData := []bool{true, false, true}
|
validData := []bool{true, false, true}
|
||||||
column, err := NewNullableColumnInt8(name, data, validData)
|
column, err := NewNullableColumnInt8(name, data, validData)
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
@ -93,7 +93,7 @@ func (s *NullableScalarSuite) TestBasic() {
|
|||||||
|
|
||||||
s.Run("nullable_int16", func() {
|
s.Run("nullable_int16", func() {
|
||||||
name := fmt.Sprintf("field_%d", rand.Intn(1000))
|
name := fmt.Sprintf("field_%d", rand.Intn(1000))
|
||||||
data := []int16{1, 2, 3}
|
data := []int16{1, 3}
|
||||||
validData := []bool{true, false, true}
|
validData := []bool{true, false, true}
|
||||||
column, err := NewNullableColumnInt16(name, data, validData)
|
column, err := NewNullableColumnInt16(name, data, validData)
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
@ -123,7 +123,7 @@ func (s *NullableScalarSuite) TestBasic() {
|
|||||||
|
|
||||||
s.Run("nullable_int32", func() {
|
s.Run("nullable_int32", func() {
|
||||||
name := fmt.Sprintf("field_%d", rand.Intn(1000))
|
name := fmt.Sprintf("field_%d", rand.Intn(1000))
|
||||||
data := []int32{1, 2, 3}
|
data := []int32{1, 3}
|
||||||
validData := []bool{true, false, true}
|
validData := []bool{true, false, true}
|
||||||
column, err := NewNullableColumnInt32(name, data, validData)
|
column, err := NewNullableColumnInt32(name, data, validData)
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
@ -153,7 +153,7 @@ func (s *NullableScalarSuite) TestBasic() {
|
|||||||
|
|
||||||
s.Run("nullable_int64", func() {
|
s.Run("nullable_int64", func() {
|
||||||
name := fmt.Sprintf("field_%d", rand.Intn(1000))
|
name := fmt.Sprintf("field_%d", rand.Intn(1000))
|
||||||
data := []int64{1, 2, 3}
|
data := []int64{1, 3}
|
||||||
validData := []bool{true, false, true}
|
validData := []bool{true, false, true}
|
||||||
column, err := NewNullableColumnInt64(name, data, validData)
|
column, err := NewNullableColumnInt64(name, data, validData)
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
@ -183,7 +183,7 @@ func (s *NullableScalarSuite) TestBasic() {
|
|||||||
|
|
||||||
s.Run("nullable_float", func() {
|
s.Run("nullable_float", func() {
|
||||||
name := fmt.Sprintf("field_%d", rand.Intn(1000))
|
name := fmt.Sprintf("field_%d", rand.Intn(1000))
|
||||||
data := []float32{0.1, 0.2, 0.3}
|
data := []float32{0.1, 0.3}
|
||||||
validData := []bool{true, false, true}
|
validData := []bool{true, false, true}
|
||||||
column, err := NewNullableColumnFloat(name, data, validData)
|
column, err := NewNullableColumnFloat(name, data, validData)
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
@ -213,7 +213,7 @@ func (s *NullableScalarSuite) TestBasic() {
|
|||||||
|
|
||||||
s.Run("nullable_double", func() {
|
s.Run("nullable_double", func() {
|
||||||
name := fmt.Sprintf("field_%d", rand.Intn(1000))
|
name := fmt.Sprintf("field_%d", rand.Intn(1000))
|
||||||
data := []float64{0.1, 0.2, 0.3}
|
data := []float64{0.1, 0.3}
|
||||||
validData := []bool{true, false, true}
|
validData := []bool{true, false, true}
|
||||||
column, err := NewNullableColumnDouble(name, data, validData)
|
column, err := NewNullableColumnDouble(name, data, validData)
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
|
|||||||
@ -220,6 +220,7 @@ func (f *Field) ProtoMessage() *schemapb.FieldSchema {
|
|||||||
IsPartitionKey: f.IsPartitionKey,
|
IsPartitionKey: f.IsPartitionKey,
|
||||||
IsClusteringKey: f.IsClusteringKey,
|
IsClusteringKey: f.IsClusteringKey,
|
||||||
ElementType: schemapb.DataType(f.ElementType),
|
ElementType: schemapb.DataType(f.ElementType),
|
||||||
|
Nullable: f.Nullable,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user