![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/framework/Indexer/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Framework\Indexer; use Magento\Framework\App\ResourceConnection; use Magento\Framework\DB\Adapter\AdapterInterface; use Magento\Framework\DB\Ddl\Table; use Magento\Framework\Indexer\ScopeResolver\FlatScopeResolver; use Magento\Framework\Search\Request\Dimension; class GridStructure implements IndexStructureInterface { /** * @var Resource */ private $resource; /** * @var FlatScopeResolver */ private $flatScopeResolver; /** * @var array */ protected $columnTypesMap = [ 'varchar' => ['type' => Table::TYPE_TEXT, 'size' => 255], 'mediumtext' => ['type' => Table::TYPE_TEXT, 'size' => 16777216], 'text' => ['type' => Table::TYPE_TEXT, 'size' => 65536], 'int' => ['type' => Table::TYPE_INTEGER, 'size' => null], 'date' => ['type' => Table::TYPE_DATE, 'size' => null], 'datetime' => ['type' => Table::TYPE_DATETIME, 'size' => null], 'timestamp' => ['type' => Table::TYPE_TIMESTAMP, 'size' => null], ]; /** * @param ResourceConnection $resource * @param FlatScopeResolver $flatScopeResolver * @param array $columnTypesMap */ public function __construct( ResourceConnection $resource, FlatScopeResolver $flatScopeResolver, array $columnTypesMap = [] ) { $this->resource = $resource; $this->flatScopeResolver = $flatScopeResolver; $this->columnTypesMap = array_merge($this->columnTypesMap, $columnTypesMap); } /** * @inheritdoc */ public function delete($index, array $dimensions = []) { $adapter = $this->getAdapter(); $tableName = $this->flatScopeResolver->resolve($index, $dimensions); if ($adapter->isTableExists($tableName)) { $adapter->dropTable($tableName); } } /** * @inheritdoc */ public function create($index, array $fields, array $dimensions = []) { $this->createFlatTable($this->flatScopeResolver->resolve($index, $dimensions), $fields); } /** * Creates index table with provided fields configuration * * @param string $tableName * @param array $fields * @throws \Zend_Db_Exception * @return void */ protected function createFlatTable($tableName, array $fields) { $adapter = $this->getAdapter(); $table = $adapter->newTable($tableName); $table->addColumn( 'entity_id', Table::TYPE_INTEGER, 10, ['unsigned' => true, 'nullable' => false, 'primary' => true], 'Entity ID' ); $searchableFields = []; foreach ($fields as $field) { if ($field['type'] === 'searchable') { $searchableFields[] = $field['name']; } $columnMap = isset($field['dataType']) && isset($this->columnTypesMap[$field['dataType']]) ? $this->columnTypesMap[$field['dataType']] : ['type' => $field['dataType'], 'size' => isset($field['size']) ? $field['size'] : null]; $name = $field['name']; $type = $columnMap['type']; $size = $columnMap['size']; if ($field['type'] === 'filterable' || (isset($field['index']) && $field['index'] === true)) { $table->addIndex( $this->resource->getIdxName($tableName, $name, AdapterInterface::INDEX_TYPE_INDEX), $name, ['type' => AdapterInterface::INDEX_TYPE_INDEX] ); } $table->addColumn($name, $type, $size); } $table->addIndex( $this->resource->getIdxName( $tableName, $searchableFields, AdapterInterface::INDEX_TYPE_FULLTEXT ), $searchableFields, ['type' => AdapterInterface::INDEX_TYPE_FULLTEXT] ); $adapter->createTable($table); } /** * Returns an instance of the db connection * * @return false|AdapterInterface */ private function getAdapter() { $adapter = $this->resource->getConnection('write'); return $adapter; } }