@@ -33,6 +33,9 @@ var vectorValueType = reflect.TypeOf([]float32{})
3333// VectorType represents the VECTOR(N) type.
3434// It stores a fixed-length array of N floating point numbers.
3535type VectorType struct {
36+ // The number of floats in the vector.
37+ // If Dimensions is 0, then the type can hold a variable number of floats, but this is only used
38+ // as the return type of some functions, and in values sent over the wire.
3639 Dimensions int
3740}
3841
@@ -99,15 +102,15 @@ func (t VectorType) Convert(ctx context.Context, v interface{}) (interface{}, sq
99102 }
100103 return result , sql .InRange , nil
101104 case []float32 :
102- if len (val ) != t .Dimensions {
105+ if t . Dimensions != 0 && len (val ) != t .Dimensions {
103106 return nil , sql .OutOfRange , fmt .Errorf ("VECTOR dimension mismatch: expected %d, got %d" , t .Dimensions , len (val ))
104107 }
105108 return val , sql .InRange , nil
106109 case []interface {}:
107- if len (val ) != t .Dimensions {
110+ if t . Dimensions != 0 && len (val ) != t .Dimensions {
108111 return nil , sql .OutOfRange , fmt .Errorf ("VECTOR dimension mismatch: expected %d, got %d" , t .Dimensions , len (val ))
109112 }
110- result := make ([]float32 , t . Dimensions )
113+ result := make ([]float32 , len ( val ) )
111114 for i , elem := range val {
112115 switch e := elem .(type ) {
113116 case float64 :
@@ -182,7 +185,7 @@ func (t VectorType) String() string {
182185
183186// Type implements Type interface.
184187func (t VectorType ) Type () query.Type {
185- return sqltypes .TypeJSON
188+ return sqltypes .Vector
186189}
187190
188191// ValueType implements Type interface.
0 commit comments