Skip to content

Commit 293308c

Browse files
author
Reggie Burnett
committed
implement get_document_id/get_document_ids
1 parent e10aacb commit 293308c

File tree

5 files changed

+30
-4
lines changed

5 files changed

+30
-4
lines changed

lib/mysqlx/connection.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
from .crud import Schema
3131
from .protocol import Protocol, MessageReaderWriter
3232
from .result import Result, RowResult, DocResult
33-
from .statement import SqlStatement
33+
from .statement import SqlStatement, AddStatement
3434

3535
_DROP_DATABASE_QUERY = "DROP DATABASE IF EXISTS `{0}`"
3636
_CREATE_DATABASE_QUERY = "CREATE DATABASE IF NOT EXISTS `{0}`"
@@ -95,7 +95,10 @@ def send_sql(self, sql, *args):
9595

9696
def send_insert(self, statement):
9797
self.protocol.send_insert(statement)
98-
return Result(self)
98+
ids = None
99+
if isinstance(statement, AddStatement):
100+
ids = statement._ids
101+
return Result(self, ids)
99102

100103
def find(self, statement):
101104
self.protocol.send_find(statement)

lib/mysqlx/dbdoc.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ def keys(self):
5454
def ensure_id(self):
5555
if "_id" not in self.__dict__:
5656
self.__dict__["_id"] = str(uuid.uuid4())
57+
return self.__dict__["_id"]
5758

5859
def __str__(self):
5960
return json.dumps(self.__dict__)

lib/mysqlx/result.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -533,8 +533,9 @@ def get_warnings_count(self):
533533

534534

535535
class Result(BaseResult):
536-
def __init__(self, connection):
536+
def __init__(self, connection, ids=None):
537537
super(Result, self).__init__(connection)
538+
self._ids = ids
538539
self._protocol.close_result(self)
539540

540541
@property
@@ -544,6 +545,14 @@ def get_affected_items_count(self):
544545
def get_autoincrement_value(self):
545546
return self._generated_id
546547

548+
def get_document_id(self):
549+
if self._ids == None: return None
550+
if len(self._ids) == 0: return None
551+
return self._ids[0]
552+
553+
def get_document_ids(self):
554+
return self._ids
555+
547556

548557
class BufferingResult(BaseResult):
549558
def __init__(self, connection):

lib/mysqlx/statement.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@ class AddStatement(Statement):
204204
def __init__(self, collection):
205205
super(AddStatement, self).__init__(target=collection)
206206
self._values = []
207+
self._ids = []
207208

208209
"""Adds a list of documents into a collection.
209210
@@ -228,7 +229,8 @@ def execute(self):
228229
mysqlx.Result: Result object.
229230
"""
230231
for doc in self._values:
231-
doc.ensure_id()
232+
self._ids.append(doc.ensure_id())
233+
232234
return self._connection.send_insert(self)
233235

234236

tests/test_mysqlx_crud.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,17 @@ def test_add(self):
181181
self.assertEqual(result.get_affected_items_count, 2)
182182
self.assertEqual(5, collection.count())
183183

184+
def test_get_document_ids(self):
185+
collection_name = "collection_test"
186+
collection = self.schema.create_collection(collection_name)
187+
result = collection.add({"name": "Fred", "age": 21}).execute()
188+
self.assertTrue(result.get_document_id() != None)
189+
190+
result = collection.add(
191+
{"name": "Fred", "age": 21},
192+
{"name": "Barney", "age":45}).execute()
193+
self.assertEqual(2, len(result.get_document_ids()))
194+
184195
def test_remove(self):
185196
collection_name = "collection_test"
186197
collection = self.schema.create_collection(collection_name)

0 commit comments

Comments
 (0)