%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/sale/lib/discount/index/ |
Current File : //home/bitrix/www/bitrix/modules/sale/lib/discount/index/indexsection.php |
<?php namespace Bitrix\Sale\Discount\Index; use Bitrix\Main\Application; use Bitrix\Main\DB\MssqlConnection; use Bitrix\Main\DB\MysqlCommonConnection; use Bitrix\Main\DB\OracleConnection; use Bitrix\Main\Entity\DataManager; final class IndexSectionTable extends DataManager { const MAX_LENGTH_BATCH_MYSQL_QUERY = 2048; /** * Returns DB table name for entity. * * @return string */ public static function getTableName() { return 'b_sale_d_ix_section'; } /** * Returns entity map definition. * * @return array */ public static function getMap() { return array( 'ID' => array( 'data_type' => 'integer', 'primary' => true, 'autocomplete' => true, ), 'DISCOUNT_ID' => array( 'data_type' => 'integer', 'required' => true, ), 'DISCOUNT' => array( 'data_type' => '\Bitrix\Sale\Internals\DiscountTable', 'reference' => array( '=this.DISCOUNT_ID' => 'ref.ID' ), 'join_type' => 'INNER', ), 'DISCOUNT_GROUP' => array( 'data_type' => '\Bitrix\Sale\Internals\DiscountGroupTable', 'reference' => array( '=this.DISCOUNT_ID' => 'ref.DISCOUNT_ID' ), 'join_type' => 'INNER', ), 'SECTION_ID' => array( 'data_type' => 'integer', 'required' => true, ), ); } /** * Deletes rows by discount id. * * @param int $discountId Id of discount. * @return void */ public static function deleteByDiscount($discountId) { $discountId = (int)$discountId; if($discountId <= 0) { return; } $connection = Application::getConnection(); $helper = $connection->getSqlHelper(); $connection->queryExecute( 'delete from ' . $helper->quote(self::getTableName()) . ' where ' . $helper->quote('DISCOUNT_ID') . ' = ' . $discountId ); } public static function fillByDiscount($discountId, array $indexData) { $items = array(); foreach($indexData as $sectionId) { $items[] = array( 'DISCOUNT_ID' => $discountId, 'SECTION_ID' => $sectionId, ); } static::insertBatch($items); } /** * Adds rows to table. * @param array $items Items. * @internal */ private static function insertBatch(array $items) { $tableName = static::getTableName(); $connection = Application::getConnection(); $sqlHelper = $connection->getSqlHelper(); $query = $prefix = ''; if($connection instanceof MysqlCommonConnection) { foreach($items as $item) { list($prefix, $values) = $sqlHelper->prepareInsert($tableName, $item); $query .= ($query ? ', ' : ' ') . '(' . $values . ')'; if(strlen($query) > self::MAX_LENGTH_BATCH_MYSQL_QUERY) { $connection->queryExecute("INSERT INTO {$tableName} ({$prefix}) VALUES {$query}"); $query = ''; } } unset($item); if($query && $prefix) { $connection->queryExecute("INSERT INTO {$tableName} ({$prefix}) VALUES {$query}"); } } elseif($connection instanceof MssqlConnection) { $valueData = array(); foreach($items as $item) { list($prefix, $values) = $sqlHelper->prepareInsert($tableName, $item); $valueData[] = "SELECT {$values}"; } unset($item); $valuesSql = implode(' UNION ALL ', $valueData); if($valuesSql && $prefix) { $connection->queryExecute("INSERT INTO {$tableName} ({$prefix}) $valuesSql"); } } elseif($connection instanceof OracleConnection) { $valueData = array(); foreach($items as $item) { list($prefix, $values) = $sqlHelper->prepareInsert($tableName, $item); $valueData[] = "SELECT {$values} FROM dual"; } unset($item); $valuesSql = implode(' UNION ALL ', $valueData); if($valuesSql && $prefix) { $connection->queryExecute("INSERT INTO {$tableName} ({$prefix}) $valuesSql"); } } } }