From 585768bc30d330ac80a678cf7daec44d524fb585 Mon Sep 17 00:00:00 2001
From: s j <sj@1729.be>
Date: Tue, 29 Mar 2022 20:38:07 +0200
Subject: [PATCH] imp: post_update performance
---
shareholder_register.post_update.php | 37 +++++++++++++++++-----------
1 file changed, 22 insertions(+), 15 deletions(-)
diff --git a/shareholder_register.post_update.php b/shareholder_register.post_update.php
index 7e0b0ec3..6fd15113 100644
--- a/shareholder_register.post_update.php
+++ b/shareholder_register.post_update.php
@@ -119,11 +119,15 @@ function shareholder_register_post_update_indexes(&$sandbox) {
* Update current holder for shares.
*/
function shareholder_register_post_update_current_holder(&$sandbox) {
- $share_ids = \Drupal::entityQuery('share')->execute();
- foreach (array_chunk($share_ids, 250) as $current_share_ids_chunk) {
- foreach (Share::loadMultiple($current_share_ids_chunk) as $share) {
- $share->save();
- }
+ \Drupal::database()->query(
+ "update {share} " .
+ "inner join {share__share_transaction_ids} on {share}.id = {share__share_transaction_ids}.entity_id " .
+ "inner join {share_transaction} on share_transaction_ids_target_id = {share_transaction}.id " .
+ "set {share}.shareholder_id = {share_transaction}.shareholder_id ".
+ "where {share_transaction}.state = 'valid' and {share}.state in ('issued', 'redeemed');"
+ );
+ foreach (\Drupal::database()->query("select entity_id from share__share_transaction_ids group by entity_id having count(*) > 1") as $row) {
+ Share::load($row->entity_id)->save();
}
}
@@ -131,16 +135,19 @@ function shareholder_register_post_update_current_holder(&$sandbox) {
* Update share issue for shares.
*/
function shareholder_register_post_update_share_issue(&$sandbox) {
- $share_ids = \Drupal::entityQuery('share')
- ->condition('state', ['issued', 'redeemed'], 'IN')
- ->execute();
- foreach (array_chunk($share_ids, 250) as $current_share_ids_chunk) {
- foreach (Share::loadMultiple($current_share_ids_chunk) as $share) {
- $share->set(
- 'share_issue_id',
- $share->getIssuingTransaction()->getShareIssue()->id()
- )->save();
- }
+ \Drupal::database()->query(
+ "update {share} " .
+ "inner join {share__share_transaction_ids} on {share}.id = {share__share_transaction_ids}.entity_id " .
+ "inner join {share_transaction} on share_transaction_ids_target_id = {share_transaction}.id " .
+ "set {share}.share_issue_id = {share_transaction}.share_issue_id ".
+ "where {share_transaction}.state = 'valid' and {share}.state in ('issued', 'redeemed');"
+ );
+ foreach (\Drupal::database()->query("select entity_id from share__share_transaction_ids group by entity_id having count(*) > 1") as $row) {
+ $share = Share::load($row->entity_id);
+ $share->set(
+ 'share_issue_id',
+ $share->getIssuingTransaction()->getShareIssue()->id()
+ )->save();
}
}
--
GitLab