Skip to content

Commit d5a63bc

Browse files
committed
BUG25991574: Fix Collection.remove() and Table.delete() missing filters
This patch fixes the issue of removing the wrong contents of collections and tables when using filters in Collection.remove() and Table.delete() operations. Tests were modified for regression.
1 parent 1f05cb3 commit d5a63bc

File tree

2 files changed

+12
-5
lines changed

2 files changed

+12
-5
lines changed

lib/mysqlx/protocol.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@ def send_delete(self, stmt):
203203
schema=stmt.schema.name)
204204
msg = Message("Mysqlx.Crud.Delete", data_model=data_model,
205205
collection=collection)
206+
self._apply_filter(msg, stmt)
206207
self._writer.write_message(
207208
mysqlxpb_enum("Mysqlx.ClientMessages.Type.CRUD_DELETE"), msg)
208209

tests/test_mysqlx_crud.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -815,11 +815,13 @@ def test_get_document_ids(self):
815815
def test_remove(self):
816816
collection_name = "collection_test"
817817
collection = self.schema.create_collection(collection_name)
818-
collection.add({"name": "Fred", "age": 21}).execute()
819-
self.assertEqual(1, collection.count())
818+
collection.add({"name": "Fred", "age": 21},
819+
{"name": "Barney", "age": 45},
820+
{"name": "Wilma", "age": 42}).execute()
821+
self.assertEqual(3, collection.count())
820822
result = collection.remove("age == 21").execute()
821823
self.assertEqual(1, result.get_affected_items_count())
822-
self.assertEqual(0, collection.count())
824+
self.assertEqual(2, collection.count())
823825

824826
# Collection.remove() is not allowed without a condition
825827
result = collection.remove()
@@ -1279,11 +1281,15 @@ def test_delete(self):
12791281
self.schema_name, table_name)).execute()
12801282
self.session.sql(_INSERT_TEST_TABLE_QUERY.format(
12811283
self.schema_name, table_name, "1")).execute()
1284+
self.session.sql(_INSERT_TEST_TABLE_QUERY.format(
1285+
self.schema_name, table_name, "2")).execute()
1286+
self.session.sql(_INSERT_TEST_TABLE_QUERY.format(
1287+
self.schema_name, table_name, "3")).execute()
12821288
table = self.schema.get_table(table_name)
12831289
self.assertTrue(table.exists_in_database())
1284-
self.assertEqual(table.count(), 1)
1290+
self.assertEqual(table.count(), 3)
12851291
table.delete("id = 1").execute()
1286-
self.assertEqual(table.count(), 0)
1292+
self.assertEqual(table.count(), 2)
12871293

12881294
# Table.delete() is not allowed without a condition
12891295
result = table.delete()

0 commit comments

Comments
 (0)