mirror of
https://gitee.com/milvus-io/milvus.git
synced 2025-12-28 14:35:27 +08:00
fix: restfulv2 parsing fixes and schema defaults support with timestamptz (#46057)
issue: https://github.com/milvus-io/milvus/issues/44585 Signed-off-by: zhenshan.cao <zhenshan.cao@zilliz.com>
This commit is contained in:
parent
624147740b
commit
765768b0e4
@ -586,7 +586,7 @@ func (field *FieldSchema) GetProto(ctx context.Context) (*schemapb.FieldSchema,
|
||||
var err error
|
||||
fieldSchema.DefaultValue, err = convertDefaultValue(field.DefaultValue, dataType)
|
||||
if err != nil {
|
||||
log.Ctx(ctx).Warn("convert defaultValue fail", zap.Any("defaultValue", field.DefaultValue))
|
||||
log.Ctx(ctx).Warn("convert defaultValue fail", zap.Any("defaultValue", field.DefaultValue), zap.Error(err))
|
||||
return nil, merr.WrapErrParameterInvalidMsg("convert defaultValue fail, err: %s", err.Error())
|
||||
}
|
||||
if dataType == schemapb.DataType_Array {
|
||||
|
||||
@ -439,7 +439,7 @@ func checkAndSetData(body []byte, collSchema *schemapb.CollectionSchema, partial
|
||||
return merr.WrapErrParameterInvalid(schemapb.DataType_name[int32(fieldType)], dataString, err.Error()), reallyDataArray, validDataMap
|
||||
}
|
||||
reallyData[fieldName] = result
|
||||
case schemapb.DataType_Int64, schemapb.DataType_Timestamptz:
|
||||
case schemapb.DataType_Int64:
|
||||
result, err := json.Number(dataString).Int64()
|
||||
if err != nil {
|
||||
return merr.WrapErrParameterInvalid(schemapb.DataType_name[int32(fieldType)], dataString, err.Error()), reallyDataArray, validDataMap
|
||||
@ -576,6 +576,8 @@ func checkAndSetData(body []byte, collSchema *schemapb.CollectionSchema, partial
|
||||
return merr.WrapErrParameterInvalid(schemapb.DataType_name[int32(fieldType)], dataString, err.Error()), reallyDataArray, validDataMap
|
||||
}
|
||||
reallyData[fieldName] = result
|
||||
case schemapb.DataType_Timestamptz:
|
||||
reallyData[fieldName] = dataString
|
||||
case schemapb.DataType_VarChar:
|
||||
reallyData[fieldName] = dataString
|
||||
case schemapb.DataType_String:
|
||||
@ -778,7 +780,7 @@ func anyToColumns(rows []map[string]interface{}, validDataMap map[string][]bool,
|
||||
case schemapb.DataType_Double:
|
||||
data = make([]float64, 0, rowsLen)
|
||||
case schemapb.DataType_Timestamptz:
|
||||
data = make([]int64, 0, rowsLen)
|
||||
data = make([]string, 0, rowsLen)
|
||||
case schemapb.DataType_String:
|
||||
data = make([]string, 0, rowsLen)
|
||||
case schemapb.DataType_VarChar:
|
||||
@ -878,7 +880,7 @@ func anyToColumns(rows []map[string]interface{}, validDataMap map[string][]bool,
|
||||
case schemapb.DataType_Float:
|
||||
nameColumns[field.Name] = append(nameColumns[field.Name].([]float32), candi.v.Interface().(float32))
|
||||
case schemapb.DataType_Timestamptz:
|
||||
nameColumns[field.Name] = append(nameColumns[field.Name].([]int64), candi.v.Interface().(int64))
|
||||
nameColumns[field.Name] = append(nameColumns[field.Name].([]string), candi.v.Interface().(string))
|
||||
case schemapb.DataType_Double:
|
||||
nameColumns[field.Name] = append(nameColumns[field.Name].([]float64), candi.v.Interface().(float64))
|
||||
case schemapb.DataType_String:
|
||||
@ -1036,9 +1038,9 @@ func anyToColumns(rows []map[string]interface{}, validDataMap map[string][]bool,
|
||||
case schemapb.DataType_Timestamptz:
|
||||
colData.Field = &schemapb.FieldData_Scalars{
|
||||
Scalars: &schemapb.ScalarField{
|
||||
Data: &schemapb.ScalarField_TimestamptzData{
|
||||
TimestamptzData: &schemapb.TimestamptzArray{
|
||||
Data: column.([]int64),
|
||||
Data: &schemapb.ScalarField_StringData{
|
||||
StringData: &schemapb.StringArray{
|
||||
Data: column.([]string),
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -1389,7 +1391,7 @@ func buildQueryResp(rowsNum int64, needFields []string, fieldDataList []*schemap
|
||||
case schemapb.DataType_Double:
|
||||
rowsNum = int64(len(fieldDataList[0].GetScalars().GetDoubleData().GetData()))
|
||||
case schemapb.DataType_Timestamptz:
|
||||
rowsNum = int64(len(fieldDataList[0].GetScalars().GetTimestamptzData().GetData()))
|
||||
rowsNum = int64(len(fieldDataList[0].GetScalars().GetStringData().GetData()))
|
||||
case schemapb.DataType_String:
|
||||
rowsNum = int64(len(fieldDataList[0].GetScalars().GetStringData().GetData()))
|
||||
case schemapb.DataType_VarChar:
|
||||
@ -1500,7 +1502,7 @@ func buildQueryResp(rowsNum int64, needFields []string, fieldDataList []*schemap
|
||||
row[fieldDataList[j].GetFieldName()] = nil
|
||||
continue
|
||||
}
|
||||
row[fieldDataList[j].FieldName] = fieldDataList[j].GetScalars().GetTimestamptzData().GetData()[i]
|
||||
row[fieldDataList[j].FieldName] = fieldDataList[j].GetScalars().GetStringData().GetData()[i]
|
||||
case schemapb.DataType_String:
|
||||
if len(fieldDataList[j].GetValidData()) != 0 && !fieldDataList[j].GetValidData()[i] {
|
||||
row[fieldDataList[j].GetFieldName()] = nil
|
||||
@ -1714,13 +1716,13 @@ func convertDefaultValue(value interface{}, dataType schemapb.DataType) (*schema
|
||||
return data, nil
|
||||
|
||||
case schemapb.DataType_Timestamptz:
|
||||
v, ok := value.(float64)
|
||||
v, ok := value.(string)
|
||||
if !ok {
|
||||
return nil, merr.WrapErrParameterInvalid("string", value, "Wrong defaultValue type")
|
||||
}
|
||||
data := &schemapb.ValueField{
|
||||
Data: &schemapb.ValueField_TimestamptzData{
|
||||
TimestamptzData: int64(v),
|
||||
Data: &schemapb.ValueField_StringData{
|
||||
StringData: v,
|
||||
},
|
||||
}
|
||||
return data, nil
|
||||
|
||||
@ -1163,7 +1163,7 @@ func (v *validateUtil) checkTimestamptzFieldData(field *schemapb.FieldData, time
|
||||
// Use the centralized parser (timestamptz.ParseTimeTz) for validation and parsing.
|
||||
t, err := timestamptz.ParseTimeTz(isoStr, timezone)
|
||||
if err != nil {
|
||||
log.Warn("cannot parse timestamptz string", zap.String("timestamp_string", isoStr), zap.Error(err))
|
||||
log.Info("cannot parse timestamptz string", zap.String("timestamp_string", isoStr), zap.String("timezone", timezone), zap.Error(err))
|
||||
// Use the recommended refined error message structure
|
||||
const invalidMsg = "invalid timezone name; must be a valid IANA Time Zone ID (e.g., 'Asia/Shanghai' or 'UTC')"
|
||||
return merr.WrapErrParameterInvalidMsg("got invalid timestamptz string '%s': %s", isoStr, invalidMsg)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user