[-] Project : #PSCFI-519 - Blocklayered installation optimization

// Blocklayered: Adding missing prefix on SQL request
This commit is contained in:
mDeflotte
2012-04-06 14:18:25 +00:00
parent bc310b252d
commit 9ba5a00ca1
4 changed files with 25 additions and 12 deletions
+2
View File
@@ -0,0 +1,2 @@
SET NAMES 'utf8';
+2
View File
@@ -0,0 +1,2 @@
SET NAMES 'utf8';
+3
View File
@@ -0,0 +1,3 @@
SET NAMES 'utf8';
ALTER TABLE `PREFIX_feature_product` ADD INDEX `id_product`(`id_product`);
+18 -12
View File
@@ -20,7 +20,7 @@
* *
* @author PrestaShop SA <contact@prestashop.com> * @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2012 PrestaShop SA * @copyright 2007-2012 PrestaShop SA
* @version Release: $Revision: 13512 $ * @version Release: $Revision: 14437 $
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registred Trademark & Property of PrestaShop SA * International Registred Trademark & Property of PrestaShop SA
*/ */
@@ -76,14 +76,14 @@ class BlockLayered extends Module
$products_count = Db::getInstance()->getValue('SELECT COUNT(*) FROM `'._DB_PREFIX_.'product`'); $products_count = Db::getInstance()->getValue('SELECT COUNT(*) FROM `'._DB_PREFIX_.'product`');
if ($products_count < 10000) // Lock price indexation if too many products if ($products_count < 20000) // Lock template filter creation if too many products
$this->rebuildLayeredCache(); $this->rebuildLayeredCache();
self::installPriceIndexTable(); self::installPriceIndexTable();
$this->installFriendlyUrlTable(); $this->installFriendlyUrlTable();
$this->installIndexableAttributeTable(); $this->installIndexableAttributeTable();
$this->installProductAttributeTable(); $this->installProductAttributeTable();
if ($products_count < 10000) // Lock indexation if too many products if ($products_count < 5000) // Lock indexation if too many products
{ {
$this->indexUrl(); $this->indexUrl();
$this->indexAttribute(); $this->indexAttribute();
@@ -1422,7 +1422,7 @@ class BlockLayered extends Module
Db::getInstance()->execute('DELETE FROM '._DB_PREFIX_.'layered_filter_shop WHERE `id_layered_filter` = '.(int)$id_layered_filter); Db::getInstance()->execute('DELETE FROM '._DB_PREFIX_.'layered_filter_shop WHERE `id_layered_filter` = '.(int)$id_layered_filter);
if (isset($assos)) if (isset($assos))
foreach ($assos as $asso) foreach ($assos as $asso)
Db::getInstance()->execute('INSERT INTO '._DB_PREFIX_.'layered_filter_shop (`id_layered_filter`, `id_shop`) Db::getInstance()->execute('INSERT INTO '._DB_PREFIX_.'layered_filter_shop (`id_layered_filter`, `id_shop`)
VALUES('.$id_layered_filter.', '.(int)$asso['id_shop'].')'); VALUES('.$id_layered_filter.', '.(int)$asso['id_shop'].')');
} }
@@ -3902,7 +3902,10 @@ class BlockLayered extends Module
$features_by_id[(int)$row['id_feature_value']] = (int)$row['id_feature']; $features_by_id[(int)$row['id_feature_value']] = (int)$row['id_feature'];
$result = self::query(' $result = self::query('
SELECT p.id_product, GROUP_CONCAT(DISTINCT fv.id_feature_value) features, GROUP_CONCAT(DISTINCT cp.id_category) categories, GROUP_CONCAT(DISTINCT pac.id_attribute) attributes SELECT p.id_product,
GROUP_CONCAT(DISTINCT fv.id_feature_value) features,
GROUP_CONCAT(DISTINCT cp.id_category) categories,
GROUP_CONCAT(DISTINCT pac.id_attribute) attributes
FROM '._DB_PREFIX_.'product p FROM '._DB_PREFIX_.'product p
LEFT JOIN '._DB_PREFIX_.'category_product cp ON (cp.id_product = p.id_product) LEFT JOIN '._DB_PREFIX_.'category_product cp ON (cp.id_product = p.id_product)
LEFT JOIN '._DB_PREFIX_.'category c ON (c.id_category = cp.id_category) LEFT JOIN '._DB_PREFIX_.'category c ON (c.id_category = cp.id_category)
@@ -3914,6 +3917,12 @@ class BlockLayered extends Module
AND p.id_product IN ('.implode(',', $products_ids).')' : '').' AND (fv.custom IS NULL OR fv.custom = 0) AND p.id_product IN ('.implode(',', $products_ids).')' : '').' AND (fv.custom IS NULL OR fv.custom = 0)
GROUP BY p.id_product'); GROUP BY p.id_product');
if (version_compare(_PS_VERSION_,'1.5','>'))
$shop_list = Shop::getShops(false, null, true);
else
$shop_list = array(0);
$to_insert = false; $to_insert = false;
while ($product = $db->nextRow($result)) while ($product = $db->nextRow($result))
{ {
@@ -3924,15 +3933,11 @@ class BlockLayered extends Module
$c = array_flip(explode(',', $product['categories'])); $c = array_flip(explode(',', $product['categories']));
if (!empty($product['features'])) if (!empty($product['features']))
$f = array_flip(explode(',', $product['features'])); $f = array_flip(explode(',', $product['features']));
if (version_compare(_PS_VERSION_,'1.5','>'))
$shop_list = Shop::getShops(false, null, true);
else
$shop_list = array(0);
$filter_data['shop_list'] = $shop_list; $filter_data['shop_list'] = $shop_list;
foreach ($shop_list as $id_shop) foreach ($shop_list as $id_shop)
{
foreach ($c as $id_category => $category) foreach ($c as $id_category => $category)
{ {
if (!in_array($id_category, $filter_data['categories'])) if (!in_array($id_category, $filter_data['categories']))
@@ -3991,6 +3996,7 @@ class BlockLayered extends Module
$to_insert = true; $to_insert = true;
} }
} }
}
} }
if ($to_insert) if ($to_insert)
{ {
@@ -4002,7 +4008,7 @@ class BlockLayered extends Module
$last_id = Db::getInstance()->Insert_ID(); $last_id = Db::getInstance()->Insert_ID();
Db::getInstance()->execute('DELETE FROM '._DB_PREFIX_.'layered_filter_shop WHERE `id_layered_filter` = '.$last_id); Db::getInstance()->execute('DELETE FROM '._DB_PREFIX_.'layered_filter_shop WHERE `id_layered_filter` = '.$last_id);
foreach ($shop_list as $id_shop) foreach ($shop_list as $id_shop)
Db::getInstance()->execute('INSERT INTO layered_filter_shop (`id_layered_filter`, `id_shop`) Db::getInstance()->execute('INSERT INTO '._DB_PREFIX_.'layered_filter_shop (`id_layered_filter`, `id_shop`)
VALUES('.$last_id.', '.(int)$id_shop.')'); VALUES('.$last_id.', '.(int)$id_shop.')');
} }