diff --git a/internal/distributed/proxy/httpserver/utils.go b/internal/distributed/proxy/httpserver/utils.go index 8d951301be..bb44c20e06 100644 --- a/internal/distributed/proxy/httpserver/utils.go +++ b/internal/distributed/proxy/httpserver/utils.go @@ -19,7 +19,6 @@ package httpserver import ( "bytes" "context" - "encoding/base64" "fmt" "math" "reflect" @@ -31,8 +30,6 @@ import ( "github.com/gin-gonic/gin" "github.com/spf13/cast" "github.com/tidwall/gjson" - "github.com/twpayne/go-geom/encoding/wkb" - "github.com/twpayne/go-geom/encoding/wkt" "go.uber.org/zap" "google.golang.org/protobuf/proto" @@ -549,24 +546,7 @@ func checkAndSetData(body []byte, collSchema *schemapb.CollectionSchema) (error, case schemapb.DataType_JSON: reallyData[fieldName] = []byte(dataString) case schemapb.DataType_Geometry: - // treat as string(wkt) data,the string data must be valid - WktString, err := base64.StdEncoding.DecodeString(dataString) - if err != nil { - log.Warn("proxy can not decode datastring with base64", zap.String("WktString:", dataString)) - return merr.WrapErrParameterInvalid(schemapb.DataType_name[int32(fieldType)], dataString, err.Error()), reallyDataArray, validDataMap - } - geomT, err := wkt.Unmarshal(string(WktString)) - if err != nil { - log.Warn("proxy change wkt to geomtyr failed!!", zap.String("WktString:", dataString)) - return merr.WrapErrParameterInvalid(schemapb.DataType_name[int32(fieldType)], dataString, err.Error()), reallyDataArray, validDataMap - } - // translate the wkt bytes to wkb bytes ,store the bytes in LittleEndian which cpp core used as well - dataWkbBytes, err := wkb.Marshal(geomT, wkb.NDR) - if err != nil { - log.Warn("proxy change geomtry to wkb failed!!", zap.String("WktString:", dataString)) - return merr.WrapErrParameterInvalid(schemapb.DataType_name[int32(fieldType)], dataString, err.Error()), reallyDataArray, validDataMap - } - reallyData[fieldName] = dataWkbBytes + reallyData[fieldName] = dataString case schemapb.DataType_Float: result, err := cast.ToFloat32E(dataString) if err != nil { @@ -775,7 +755,7 @@ func anyToColumns(rows []map[string]interface{}, validDataMap map[string][]bool, case schemapb.DataType_JSON: data = make([][]byte, 0, rowsLen) case schemapb.DataType_Geometry: - data = make([][]byte, 0, rowsLen) + data = make([]string, 0, rowsLen) case schemapb.DataType_FloatVector: data = make([][]float32, 0, rowsLen) dim, _ := getDim(field) @@ -866,7 +846,7 @@ func anyToColumns(rows []map[string]interface{}, validDataMap map[string][]bool, case schemapb.DataType_JSON: nameColumns[field.Name] = append(nameColumns[field.Name].([][]byte), candi.v.Interface().([]byte)) case schemapb.DataType_Geometry: - nameColumns[field.Name] = append(nameColumns[field.Name].([][]byte), candi.v.Interface().([]byte)) + nameColumns[field.Name] = append(nameColumns[field.Name].([]string), candi.v.Interface().(string)) case schemapb.DataType_FloatVector: nameColumns[field.Name] = append(nameColumns[field.Name].([][]float32), candi.v.Interface().([]float32)) case schemapb.DataType_BinaryVector: @@ -1034,9 +1014,9 @@ func anyToColumns(rows []map[string]interface{}, validDataMap map[string][]bool, case schemapb.DataType_Geometry: colData.Field = &schemapb.FieldData_Scalars{ Scalars: &schemapb.ScalarField{ - Data: &schemapb.ScalarField_GeometryData{ - GeometryData: &schemapb.GeometryArray{ - Data: column.([][]byte), + Data: &schemapb.ScalarField_GeometryWktData{ + GeometryWktData: &schemapb.GeometryWktArray{ + Data: column.([]string), }, }, }, @@ -1310,7 +1290,7 @@ func buildQueryResp(rowsNum int64, needFields []string, fieldDataList []*schemap case schemapb.DataType_JSON: rowsNum = int64(len(fieldDataList[0].GetScalars().GetJsonData().Data)) case schemapb.DataType_Geometry: - rowsNum = int64(len(fieldDataList[0].GetScalars().GetGeometryData().Data)) + rowsNum = int64(len(fieldDataList[0].GetScalars().GetGeometryWktData().Data)) case schemapb.DataType_BinaryVector: rowsNum = int64(len(fieldDataList[0].GetVectors().GetBinaryVector())*8) / fieldDataList[0].GetVectors().GetDim() case schemapb.DataType_FloatVector: @@ -1466,7 +1446,7 @@ func buildQueryResp(rowsNum int64, needFields []string, fieldDataList []*schemap row[fieldDataList[j].FieldName] = nil continue } - row[fieldDataList[j].FieldName] = fieldDataList[j].GetScalars().GetGeometryData().Data[i] + row[fieldDataList[j].FieldName] = fieldDataList[j].GetScalars().GetGeometryWktData().Data[i] default: row[fieldDataList[j].FieldName] = "" } diff --git a/internal/distributed/proxy/httpserver/utils_test.go b/internal/distributed/proxy/httpserver/utils_test.go index 7216099e77..c08ee838f4 100644 --- a/internal/distributed/proxy/httpserver/utils_test.go +++ b/internal/distributed/proxy/httpserver/utils_test.go @@ -1230,9 +1230,9 @@ func compareRow(m1 map[string]interface{}, m2 map[string]interface{}) bool { return false } } else if key == "field-geometry" { - arr1 := value.([]uint8) - arr2 := string(m2[key].([]byte)) - if arr2 != (string)(arr1) { + arr1 := value.(string) + arr2 := m2[key].(string) + if arr2 != arr1 { return false } } else if strings.HasPrefix(key, "array-") { @@ -1600,13 +1600,12 @@ func newFieldData(fieldDatas []*schemapb.FieldData, firstFieldType schemapb.Data FieldName: "field-geometry", Field: &schemapb.FieldData_Scalars{ Scalars: &schemapb.ScalarField{ - Data: &schemapb.ScalarField_GeometryData{ - GeometryData: &schemapb.GeometryArray{ - // WKT: POINT (30.123 -10.456) - Data: [][]byte{ - []byte(`POINT (30.123 -10.456)`), - []byte(`POINT (30.123 -10.456)`), - []byte(`POINT (30.123 -10.456)`), + Data: &schemapb.ScalarField_GeometryWktData{ + GeometryWktData: &schemapb.GeometryWktArray{ + Data: []string{ + `POINT (30.123 -10.456)`, + `POINT (30.123 -10.456)`, + `POINT (30.123 -10.456)`, // wkb:{0x01, 0x01, 0x00, 0x00, 0x00, 0xD2, 0x4A, 0x4D, 0x6A, 0x8B, 0x3C, 0x5C, 0x0A, 0x0D, 0x1B, 0x4F, 0x4F, 0x9A, 0x3D, 0x4}, }, }, @@ -1919,7 +1918,7 @@ func newSearchResult(results []map[string]interface{}) []map[string]interface{} result["field-varchar"] = strconv.Itoa(i) result["field-string"] = strconv.Itoa(i) result["field-json"] = []byte(`{"XXX": 0}`) - result["field-geometry"] = []byte(`POINT (30.123 -10.456)`) + result["field-geometry"] = `POINT (30.123 -10.456)` result["field-array"] = []bool{true} result["array-bool"] = []bool{true} result["array-int8"] = []int32{0}