From b271dd889363992514d1555ab9bd21ddfdb7b41d Mon Sep 17 00:00:00 2001 From: Rik Willems Date: Wed, 21 Nov 2018 16:28:44 +0100 Subject: [PATCH 1/7] CLA force push commit --- app/code/Magento/Sales/Setup/UpgradeData.php | 125 ++++++++++++------- 1 file changed, 81 insertions(+), 44 deletions(-) diff --git a/app/code/Magento/Sales/Setup/UpgradeData.php b/app/code/Magento/Sales/Setup/UpgradeData.php index 77b96791e8cea..83f239546960e 100644 --- a/app/code/Magento/Sales/Setup/UpgradeData.php +++ b/app/code/Magento/Sales/Setup/UpgradeData.php @@ -14,9 +14,7 @@ use Magento\Framework\Setup\ModuleContextInterface; use Magento\Framework\Setup\ModuleDataSetupInterface; use Magento\Framework\Setup\UpgradeDataInterface; -use Magento\Quote\Model\QuoteFactory; -use Magento\Sales\Model\OrderFactory; -use Magento\Sales\Model\ResourceModel\Order\Address\CollectionFactory as AddressCollectionFactory; +use Magento\Sales\Model\Order\Address; /** * Data upgrade script @@ -42,21 +40,6 @@ class UpgradeData implements UpgradeDataInterface */ private $aggregatedFieldConverter; - /** - * @var AddressCollectionFactory - */ - private $addressCollectionFactory; - - /** - * @var OrderFactory - */ - private $orderFactory; - - /** - * @var QuoteFactory - */ - private $quoteFactory; - /** * @var State */ @@ -66,26 +49,17 @@ class UpgradeData implements UpgradeDataInterface * @param SalesSetupFactory $salesSetupFactory * @param Config $eavConfig * @param AggregatedFieldDataConverter $aggregatedFieldConverter - * @param AddressCollectionFactory $addressCollFactory - * @param OrderFactory $orderFactory - * @param QuoteFactory $quoteFactory * @param State $state */ public function __construct( SalesSetupFactory $salesSetupFactory, Config $eavConfig, AggregatedFieldDataConverter $aggregatedFieldConverter, - AddressCollectionFactory $addressCollFactory, - OrderFactory $orderFactory, - QuoteFactory $quoteFactory, State $state ) { $this->salesSetupFactory = $salesSetupFactory; $this->eavConfig = $eavConfig; $this->aggregatedFieldConverter = $aggregatedFieldConverter; - $this->addressCollectionFactory = $addressCollFactory; - $this->orderFactory = $orderFactory; - $this->quoteFactory = $quoteFactory; $this->state = $state; } @@ -125,6 +99,7 @@ public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface * @param string $setupVersion * @param SalesSetup $salesSetup * @return void + * @throws \Magento\Framework\DB\FieldDataConversionException */ private function convertSerializedDataToJson($setupVersion, SalesSetup $salesSetup) { @@ -173,32 +148,94 @@ private function convertSerializedDataToJson($setupVersion, SalesSetup $salesSet /** * Fill quote_address_id in table sales_order_address if it is empty. - * * @param ModuleDataSetupInterface $setup */ public function fillQuoteAddressIdInSalesOrderAddress(ModuleDataSetupInterface $setup) { - $addressTable = $setup->getTable('sales_order_address'); - $updateOrderAddress = $setup->getConnection() + $this->fillQuoteAddressIdInSalesOrderAddressByType($setup, Address::TYPE_SHIPPING); + $this->fillQuoteAddressIdInSalesOrderAddressByType($setup, Address::TYPE_BILLING); + } + + /** + * @param ModuleDataSetupInterface $setup + * @param string $addressType + */ + public function fillQuoteAddressIdInSalesOrderAddressByType(ModuleDataSetupInterface $setup, $addressType) + { + $salesConnection = $setup->getConnection('sales'); + + $orderTable = $setup->getTable('sales_order', 'sales'); + $orderAddressTable = $setup->getTable('sales_order_address', 'sales'); + + $query = $salesConnection ->select() + ->from( + ['sales_order_address' => $orderAddressTable], + ['entity_id', 'address_type'] + ) ->joinInner( - ['sales_order' => $setup->getTable('sales_order')], - $addressTable . '.parent_id = sales_order.entity_id', - ['quote_address_id' => 'quote_address.address_id'] + ['sales_order' => $orderTable], + 'sales_order_address.parent_id = sales_order.entity_id', + ['quote_id' => 'sales_order.quote_id'] + ) + ->where('sales_order_address.quote_address_id IS NULL') + ->where('sales_order_address.address_type = ?', $addressType) + ->order('sales_order_address.entity_id'); + + $batchSize = 5000; + $result = $salesConnection->query($query); + $count = $result->rowCount(); + $batches = ceil($count / $batchSize); + + for ($batch = $batches; $batch > 0; $batch--) { + $query->limitPage($batch, $batchSize); + $result = $salesConnection->fetchAssoc($query); + + $this->fillQuoteAddressIdInSalesOrderAddressProcessBatch($setup, $result, $addressType); + } + } + /** + * @param ModuleDataSetupInterface $setup + * @param array $orderAddresses + * @param string $addressType + */ + public function fillQuoteAddressIdInSalesOrderAddressProcessBatch( + ModuleDataSetupInterface $setup, + array $orderAddresses, + $addressType + ) { + $salesConnection = $setup->getConnection('sales'); + $quoteConnection = $setup->getConnection('checkout'); + + $quoteAddressTable = $setup->getTable('quote_address', 'checkout'); + $quoteTable = $setup->getTable('quote', 'checkout'); + $salesOrderAddressTable = $setup->getTable('sales_order_address', 'sales'); + + $query = $quoteConnection + ->select() + ->from( + ['quote_address' => $quoteAddressTable], + ['quote_id', 'address_id'] ) ->joinInner( - ['quote_address' => $setup->getTable('quote_address')], - 'sales_order.quote_id = quote_address.quote_id - AND ' . $addressTable . '.address_type = quote_address.address_type', + ['quote' => $quoteTable], + 'quote_address.quote_id = quote.entity_id', [] ) - ->where( - $addressTable . '.quote_address_id IS NULL' - ); - $updateOrderAddress = $setup->getConnection()->updateFromSelect( - $updateOrderAddress, - $addressTable - ); - $setup->getConnection()->query($updateOrderAddress); + ->where('quote.entity_id in (?)', array_column($orderAddresses, 'quote_id')) + ->where('address_type = ?', $addressType); + + $quoteAddresses = $quoteConnection->fetchAssoc($query); + + foreach ($orderAddresses as $orderAddress) { + $bind = [ + 'quote_address_id' => $quoteAddresses[$orderAddress['quote_id']]['address_id'] ?? null, + ]; + $where = [ + 'orderAddressId' => $orderAddress['entity_id'] + ]; + + $salesConnection->update($salesOrderAddressTable, $bind, $where); + } } } From 0b0dcfb9c7a943045d7724ee1832da2cbd3e04ff Mon Sep 17 00:00:00 2001 From: Ihor Sviziev Date: Tue, 22 Jan 2019 16:25:51 +0200 Subject: [PATCH 2/7] magento/magento2#19098 2.2.6 Use batches and direct queries to fix sales address upgrade Revert not needed changes --- app/code/Magento/Sales/Setup/UpgradeData.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/code/Magento/Sales/Setup/UpgradeData.php b/app/code/Magento/Sales/Setup/UpgradeData.php index 83f239546960e..b35632d6e12d2 100644 --- a/app/code/Magento/Sales/Setup/UpgradeData.php +++ b/app/code/Magento/Sales/Setup/UpgradeData.php @@ -14,7 +14,10 @@ use Magento\Framework\Setup\ModuleContextInterface; use Magento\Framework\Setup\ModuleDataSetupInterface; use Magento\Framework\Setup\UpgradeDataInterface; +use Magento\Quote\Model\QuoteFactory; use Magento\Sales\Model\Order\Address; +use Magento\Sales\Model\OrderFactory; +use Magento\Sales\Model\ResourceModel\Order\Address\CollectionFactory as AddressCollectionFactory; /** * Data upgrade script @@ -49,12 +52,18 @@ class UpgradeData implements UpgradeDataInterface * @param SalesSetupFactory $salesSetupFactory * @param Config $eavConfig * @param AggregatedFieldDataConverter $aggregatedFieldConverter + * @param AddressCollectionFactory $addressCollFactory + * @param OrderFactory $orderFactory + * @param QuoteFactory $quoteFactory * @param State $state */ public function __construct( SalesSetupFactory $salesSetupFactory, Config $eavConfig, AggregatedFieldDataConverter $aggregatedFieldConverter, + AddressCollectionFactory $addressCollFactory, + OrderFactory $orderFactory, + QuoteFactory $quoteFactory, State $state ) { $this->salesSetupFactory = $salesSetupFactory; From 4a9a98a9b6548cecb4c479e7cfb567faa51825d7 Mon Sep 17 00:00:00 2001 From: Ihor Sviziev Date: Wed, 30 Jan 2019 08:30:56 +0200 Subject: [PATCH 3/7] magento/magento2#19098 2.2.6 Use batches and direct queries to fix sales address upgrade Fix static test failures --- app/code/Magento/Sales/Setup/UpgradeData.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/code/Magento/Sales/Setup/UpgradeData.php b/app/code/Magento/Sales/Setup/UpgradeData.php index b35632d6e12d2..0b69458b7656c 100644 --- a/app/code/Magento/Sales/Setup/UpgradeData.php +++ b/app/code/Magento/Sales/Setup/UpgradeData.php @@ -49,6 +49,8 @@ class UpgradeData implements UpgradeDataInterface private $state; /** + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + * * @param SalesSetupFactory $salesSetupFactory * @param Config $eavConfig * @param AggregatedFieldDataConverter $aggregatedFieldConverter From 7c6026e2f62e5edd35b0f75877b556b07801e598 Mon Sep 17 00:00:00 2001 From: Ihor Sviziev Date: Wed, 30 Jan 2019 09:13:37 +0200 Subject: [PATCH 4/7] magento/magento2#19098 2.2.6 Use batches and direct queries to fix sales address upgrade Fix statis test failures --- app/code/Magento/Sales/Setup/UpgradeData.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Sales/Setup/UpgradeData.php b/app/code/Magento/Sales/Setup/UpgradeData.php index 0b69458b7656c..56cbf31c3d695 100644 --- a/app/code/Magento/Sales/Setup/UpgradeData.php +++ b/app/code/Magento/Sales/Setup/UpgradeData.php @@ -171,7 +171,7 @@ public function fillQuoteAddressIdInSalesOrderAddress(ModuleDataSetupInterface $ * @param ModuleDataSetupInterface $setup * @param string $addressType */ - public function fillQuoteAddressIdInSalesOrderAddressByType(ModuleDataSetupInterface $setup, $addressType) + private function fillQuoteAddressIdInSalesOrderAddressByType(ModuleDataSetupInterface $setup, $addressType) { $salesConnection = $setup->getConnection('sales'); @@ -205,12 +205,13 @@ public function fillQuoteAddressIdInSalesOrderAddressByType(ModuleDataSetupInter $this->fillQuoteAddressIdInSalesOrderAddressProcessBatch($setup, $result, $addressType); } } + /** * @param ModuleDataSetupInterface $setup * @param array $orderAddresses * @param string $addressType */ - public function fillQuoteAddressIdInSalesOrderAddressProcessBatch( + private function fillQuoteAddressIdInSalesOrderAddressProcessBatch( ModuleDataSetupInterface $setup, array $orderAddresses, $addressType From c60d395347569dd4feb3be07dab5b8a5738b6e85 Mon Sep 17 00:00:00 2001 From: Ihor Sviziev Date: Fri, 1 Feb 2019 09:22:04 +0200 Subject: [PATCH 5/7] magento/magento2#19098 2.2.6 Use batches and direct queries to fix sales address upgrade Fix static test failure --- app/code/Magento/Sales/Setup/UpgradeData.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Sales/Setup/UpgradeData.php b/app/code/Magento/Sales/Setup/UpgradeData.php index 56cbf31c3d695..0f9833ed8f7f2 100644 --- a/app/code/Magento/Sales/Setup/UpgradeData.php +++ b/app/code/Magento/Sales/Setup/UpgradeData.php @@ -50,7 +50,7 @@ class UpgradeData implements UpgradeDataInterface /** * @SuppressWarnings(PHPMD.UnusedFormalParameter) - * + * * @param SalesSetupFactory $salesSetupFactory * @param Config $eavConfig * @param AggregatedFieldDataConverter $aggregatedFieldConverter From 8b8a46c4beb8cf3c4c0d881660f442d4df545782 Mon Sep 17 00:00:00 2001 From: Ihor Sviziev Date: Tue, 12 Mar 2019 11:41:14 +0200 Subject: [PATCH 6/7] magento/magento2#19098 2.2.6 Use batches and direct queries to fix sales address upgrade Fix field name --- app/code/Magento/Sales/Setup/UpgradeData.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Sales/Setup/UpgradeData.php b/app/code/Magento/Sales/Setup/UpgradeData.php index 0f9833ed8f7f2..ee60eef03726d 100644 --- a/app/code/Magento/Sales/Setup/UpgradeData.php +++ b/app/code/Magento/Sales/Setup/UpgradeData.php @@ -244,7 +244,7 @@ private function fillQuoteAddressIdInSalesOrderAddressProcessBatch( 'quote_address_id' => $quoteAddresses[$orderAddress['quote_id']]['address_id'] ?? null, ]; $where = [ - 'orderAddressId' => $orderAddress['entity_id'] + 'entity_id' => $orderAddress['entity_id'] ]; $salesConnection->update($salesOrderAddressTable, $bind, $where); From df364432458bc551964a14cc1c1aaa50110c72e3 Mon Sep 17 00:00:00 2001 From: Ihor Sviziev Date: Tue, 12 Mar 2019 20:08:59 +0200 Subject: [PATCH 7/7] magento/magento2#19098 Use batches and direct queries to fix sales address upgrade --- app/code/Magento/Sales/Setup/UpgradeData.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Sales/Setup/UpgradeData.php b/app/code/Magento/Sales/Setup/UpgradeData.php index ee60eef03726d..2e5a454e62fdd 100644 --- a/app/code/Magento/Sales/Setup/UpgradeData.php +++ b/app/code/Magento/Sales/Setup/UpgradeData.php @@ -244,7 +244,7 @@ private function fillQuoteAddressIdInSalesOrderAddressProcessBatch( 'quote_address_id' => $quoteAddresses[$orderAddress['quote_id']]['address_id'] ?? null, ]; $where = [ - 'entity_id' => $orderAddress['entity_id'] + 'entity_id = ?' => $orderAddress['entity_id'] ]; $salesConnection->update($salesOrderAddressTable, $bind, $where);