mirror of https://github.com/milvus-io/milvus.git
enhance: forbid delete with always true expression (#32472)
Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>pull/32468/head
parent
d7ff1bbe5c
commit
d0ffb71a17
|
@ -305,11 +305,15 @@ func (dr *deleteRunner) Init(ctx context.Context) error {
|
|||
}
|
||||
|
||||
func (dr *deleteRunner) Run(ctx context.Context) error {
|
||||
plan, err := planparserv2.CreateRetrievePlan(dr.schema.schemaHelper, dr.req.Expr)
|
||||
plan, err := planparserv2.CreateRetrievePlan(dr.schema.schemaHelper, dr.req.GetExpr())
|
||||
if err != nil {
|
||||
return merr.WrapErrParameterInvalidMsg("failed to create delete plan: %v", err)
|
||||
}
|
||||
|
||||
if planparserv2.IsAlwaysTruePlan(plan) {
|
||||
return merr.WrapErrParameterInvalidMsg("delete plan can't be empty or always true : %s", dr.req.GetExpr())
|
||||
}
|
||||
|
||||
isSimple, pk, numRow := getPrimaryKeysFromPlan(dr.schema.CollectionSchema, plan)
|
||||
if isSimple {
|
||||
// if could get delete.primaryKeys from delete expr
|
||||
|
|
|
@ -522,6 +522,38 @@ func TestDeleteRunner_Run(t *testing.T) {
|
|||
assert.Equal(t, int64(0), dr.result.DeleteCnt)
|
||||
})
|
||||
|
||||
t.Run("delete with always true expression failed", func(t *testing.T) {
|
||||
mockMgr := NewMockChannelsMgr(t)
|
||||
lb := NewMockLBPolicy(t)
|
||||
|
||||
dr := deleteRunner{
|
||||
chMgr: mockMgr,
|
||||
schema: schema,
|
||||
collectionID: collectionID,
|
||||
partitionID: partitionID,
|
||||
vChannels: channels,
|
||||
tsoAllocatorIns: tsoAllocator,
|
||||
idAllocator: idAllocator,
|
||||
queue: queue.dmQueue,
|
||||
lb: lb,
|
||||
result: &milvuspb.MutationResult{
|
||||
Status: merr.Success(),
|
||||
IDs: &schemapb.IDs{
|
||||
IdField: nil,
|
||||
},
|
||||
},
|
||||
req: &milvuspb.DeleteRequest{
|
||||
CollectionName: collectionName,
|
||||
PartitionName: partitionName,
|
||||
DbName: dbName,
|
||||
Expr: " ",
|
||||
},
|
||||
}
|
||||
|
||||
assert.Error(t, dr.Run(context.Background()))
|
||||
assert.Equal(t, int64(0), dr.result.DeleteCnt)
|
||||
})
|
||||
|
||||
t.Run("complex delete query rpc failed", func(t *testing.T) {
|
||||
mockMgr := NewMockChannelsMgr(t)
|
||||
qn := mocks.NewMockQueryNodeClient(t)
|
||||
|
|
Loading…
Reference in New Issue