From de020a870f3c7afec5a537d3d52993e779168c87 Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Tue, 22 Aug 2023 04:36:42 +0000 Subject: [PATCH 1/6] copy internalId when running createDocuments --- src/Database/Adapter/MariaDB.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Database/Adapter/MariaDB.php b/src/Database/Adapter/MariaDB.php index 23cce605a..60d465a7f 100644 --- a/src/Database/Adapter/MariaDB.php +++ b/src/Database/Adapter/MariaDB.php @@ -561,7 +561,7 @@ public function createDocument(string $collection, Document $document): Document /** * @throws Duplicate */ - public function createDocuments(string $collection, array $documents, int $batchSize = Database::INSERT_BATCH_SIZE): array + public function createDocuments(string $collection, array $documents, int $batchSize = Database::INSERT_BATCH_SIZE, bool $copyInternalId = false): array { if (empty($documents)) { return $documents; @@ -585,6 +585,9 @@ public function createDocuments(string $collection, array $documents, int $batch $attributes['_createdAt'] = $document->getCreatedAt(); $attributes['_updatedAt'] = $document->getUpdatedAt(); $attributes['_permissions'] = \json_encode($document->getPermissions()); + if($copyInternalId) { + $attributes['_id'] = $document->getInternalId(); + } $columns = []; foreach (\array_keys($attributes) as $key => $attribute) { From c2146e133a418b1a14e661023e6c1ab414397186 Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Tue, 22 Aug 2023 04:38:00 +0000 Subject: [PATCH 2/6] mongo and adapter update --- src/Database/Adapter.php | 3 ++- src/Database/Adapter/Mongo/MongoDBAdapter.php | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/Database/Adapter.php b/src/Database/Adapter.php index c9002ddf8..200884583 100644 --- a/src/Database/Adapter.php +++ b/src/Database/Adapter.php @@ -301,10 +301,11 @@ abstract public function createDocument(string $collection, Document $document): * @param string $collection * @param Document[] $documents * @param int $batchSize + * @paran bool $copyInternalId * * @return Document[] */ - abstract public function createDocuments(string $collection, array $documents, int $batchSize): array; + abstract public function createDocuments(string $collection, array $documents, int $batchSize, bool $copyInternalId): array; /** * Update Document diff --git a/src/Database/Adapter/Mongo/MongoDBAdapter.php b/src/Database/Adapter/Mongo/MongoDBAdapter.php index dcca8023b..d15cfa878 100644 --- a/src/Database/Adapter/Mongo/MongoDBAdapter.php +++ b/src/Database/Adapter/Mongo/MongoDBAdapter.php @@ -391,13 +391,15 @@ public function createDocument(string $collection, Document $document): Document return $document; } - public function createDocuments(string $collection, array $documents, int $batchSize): array + public function createDocuments(string $collection, array $documents, int $batchSize, bool $copyInternalId = false): array { $name = $this->getNamespace() . '_' . $this->filter($collection); $records = []; foreach ($documents as $document) { - $document->removeAttribute('$internalId'); + if(!$copyInternalId) { + $document->removeAttribute('$internalId'); + } $records[] = $this->replaceChars('$', '_', (array)$document); } From a03ba116d08dcd7aadd418c4ba7fba0011d6b9ad Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Tue, 22 Aug 2023 04:41:34 +0000 Subject: [PATCH 3/6] make default behavior to copy internal ID --- src/Database/Adapter.php | 3 +-- src/Database/Adapter/MariaDB.php | 6 ++---- src/Database/Adapter/Mongo/MongoDBAdapter.php | 6 +----- 3 files changed, 4 insertions(+), 11 deletions(-) diff --git a/src/Database/Adapter.php b/src/Database/Adapter.php index 200884583..c9002ddf8 100644 --- a/src/Database/Adapter.php +++ b/src/Database/Adapter.php @@ -301,11 +301,10 @@ abstract public function createDocument(string $collection, Document $document): * @param string $collection * @param Document[] $documents * @param int $batchSize - * @paran bool $copyInternalId * * @return Document[] */ - abstract public function createDocuments(string $collection, array $documents, int $batchSize, bool $copyInternalId): array; + abstract public function createDocuments(string $collection, array $documents, int $batchSize): array; /** * Update Document diff --git a/src/Database/Adapter/MariaDB.php b/src/Database/Adapter/MariaDB.php index 60d465a7f..20a59fbcb 100644 --- a/src/Database/Adapter/MariaDB.php +++ b/src/Database/Adapter/MariaDB.php @@ -561,7 +561,7 @@ public function createDocument(string $collection, Document $document): Document /** * @throws Duplicate */ - public function createDocuments(string $collection, array $documents, int $batchSize = Database::INSERT_BATCH_SIZE, bool $copyInternalId = false): array + public function createDocuments(string $collection, array $documents, int $batchSize = Database::INSERT_BATCH_SIZE): array { if (empty($documents)) { return $documents; @@ -585,9 +585,7 @@ public function createDocuments(string $collection, array $documents, int $batch $attributes['_createdAt'] = $document->getCreatedAt(); $attributes['_updatedAt'] = $document->getUpdatedAt(); $attributes['_permissions'] = \json_encode($document->getPermissions()); - if($copyInternalId) { - $attributes['_id'] = $document->getInternalId(); - } + $attributes['_id'] = $document->getInternalId(); $columns = []; foreach (\array_keys($attributes) as $key => $attribute) { diff --git a/src/Database/Adapter/Mongo/MongoDBAdapter.php b/src/Database/Adapter/Mongo/MongoDBAdapter.php index d15cfa878..91d704bbf 100644 --- a/src/Database/Adapter/Mongo/MongoDBAdapter.php +++ b/src/Database/Adapter/Mongo/MongoDBAdapter.php @@ -391,16 +391,12 @@ public function createDocument(string $collection, Document $document): Document return $document; } - public function createDocuments(string $collection, array $documents, int $batchSize, bool $copyInternalId = false): array + public function createDocuments(string $collection, array $documents, int $batchSize): array { $name = $this->getNamespace() . '_' . $this->filter($collection); $records = []; foreach ($documents as $document) { - if(!$copyInternalId) { - $document->removeAttribute('$internalId'); - } - $records[] = $this->replaceChars('$', '_', (array)$document); } From a49d9ecbde5454bc401793ad15adb022ddc50b21 Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Tue, 22 Aug 2023 04:43:21 +0000 Subject: [PATCH 4/6] fix mongo --- src/Database/Adapter/Mongo/MongoDBAdapter.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Database/Adapter/Mongo/MongoDBAdapter.php b/src/Database/Adapter/Mongo/MongoDBAdapter.php index 91d704bbf..1d3b09597 100644 --- a/src/Database/Adapter/Mongo/MongoDBAdapter.php +++ b/src/Database/Adapter/Mongo/MongoDBAdapter.php @@ -397,6 +397,9 @@ public function createDocuments(string $collection, array $documents, int $batch $records = []; foreach ($documents as $document) { + $document->setAttribute('_id', $document->getInternalId()); + $document->removeAttribute('$internalId'); + $records[] = $this->replaceChars('$', '_', (array)$document); } From 41802d48f2f44977162579eb810599d279d811dc Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Tue, 22 Aug 2023 05:44:34 +0000 Subject: [PATCH 5/6] fix mongo empty internalId --- src/Database/Adapter/Mongo/MongoDBAdapter.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Database/Adapter/Mongo/MongoDBAdapter.php b/src/Database/Adapter/Mongo/MongoDBAdapter.php index 1d3b09597..690be6bd8 100644 --- a/src/Database/Adapter/Mongo/MongoDBAdapter.php +++ b/src/Database/Adapter/Mongo/MongoDBAdapter.php @@ -397,7 +397,9 @@ public function createDocuments(string $collection, array $documents, int $batch $records = []; foreach ($documents as $document) { - $document->setAttribute('_id', $document->getInternalId()); + if(!empty($document->getInternalId())) { + $document->setAttribute('_id', $document->getInternalId()); + } $document->removeAttribute('$internalId'); $records[] = $this->replaceChars('$', '_', (array)$document); From 54dac448fc4108675863f4d50865186e53542ca4 Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Sun, 27 Aug 2023 07:35:04 +0000 Subject: [PATCH 6/6] mariadb check if internalId is not empty --- src/Database/Adapter/MariaDB.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Database/Adapter/MariaDB.php b/src/Database/Adapter/MariaDB.php index 20a59fbcb..ddb72d5a8 100644 --- a/src/Database/Adapter/MariaDB.php +++ b/src/Database/Adapter/MariaDB.php @@ -585,7 +585,9 @@ public function createDocuments(string $collection, array $documents, int $batch $attributes['_createdAt'] = $document->getCreatedAt(); $attributes['_updatedAt'] = $document->getUpdatedAt(); $attributes['_permissions'] = \json_encode($document->getPermissions()); - $attributes['_id'] = $document->getInternalId(); + if(!empty($document->getInternalId())) { + $attributes['_id'] = $document->getInternalId(); + } $columns = []; foreach (\array_keys($attributes) as $key => $attribute) {