/** * Retrieve table indexes definition array for create table * * @param Table $table * @return string[] */ protected function _getIndexesDefinition(Table $table) { $definition = []; $indexes = $table->getIndexes(); foreach ($indexes as $indexData) { if (!empty($indexData['TYPE'])) { //Skipping not supported fulltext indexes for NDB if ($indexData['TYPE'] == AdapterInterface::INDEX_TYPE_FULLTEXT && $this->isNdb($table)) { continue; } switch ($indexData['TYPE']) { case AdapterInterface::INDEX_TYPE_PRIMARY: $indexType = 'PRIMARY KEY'; unset($indexData['INDEX_NAME']); break; default: $indexType = strtoupper($indexData['TYPE']); break; } } else { $indexType = 'KEY'; } $columns = []; foreach ($indexData['COLUMNS'] as $columnData) { $column = $this->quoteIdentifier($columnData['NAME']); if (!empty($columnData['SIZE'])) { $column .= sprintf('(%d)', $columnData['SIZE']); } $columns[] = $column; } $indexName = isset($indexData['INDEX_NAME']) ? $this->quoteIdentifier($indexData['INDEX_NAME']) : ''; $definition[] = sprintf(' %s %s (%s)', $indexType, $indexName, implode(', ', $columns)); } return $definition; }
/** * Retrieve table indexes definition array for create table * * @param Table $table * @return string[] */ protected function _getIndexesDefinition(Table $table) { $definition = array(); $indexes = $table->getIndexes(); if (!empty($indexes)) { foreach ($indexes as $indexData) { if (!empty($indexData['TYPE'])) { switch ($indexData['TYPE']) { case 'primary': $indexType = 'PRIMARY KEY'; unset($indexData['INDEX_NAME']); break; default: $indexType = strtoupper($indexData['TYPE']); break; } } else { $indexType = 'KEY'; } $columns = array(); foreach ($indexData['COLUMNS'] as $columnData) { $column = $this->quoteIdentifier($columnData['NAME']); if (!empty($columnData['SIZE'])) { $column .= sprintf('(%d)', $columnData['SIZE']); } $columns[] = $column; } $indexName = isset($indexData['INDEX_NAME']) ? $this->getPlatform()->quoteIdentifier($indexData['INDEX_NAME']) : ''; $definition[] = sprintf(' %s %s (%s)', $indexType, $indexName, implode(', ', $columns)); } } return $definition; }
/** * drops all keys and then recreates them * * @param string $mode * @param Table $table * @throws \Zend_Db_Exception */ private function migrateKeys($mode, Table $table) { switch ($mode) { case 'refresh_idx': foreach ($this->getIndexList($table->getName()) as $index) { if ($index['KEY_NAME'] !== 'PRIMARY') { $this->dropIndex($table->getName(), $index['KEY_NAME']); } } foreach ($table->getIndexes() as $index) { $ic = []; foreach ($index['COLUMNS'] as $c) { $ic[] = $c['NAME']; } $this->addIndex($table->getName(), $index['INDEX_NAME'], $ic, $index['TYPE']); } break; case 'refresh_fk': foreach ($this->getForeignKeys($table->getName()) as $fk) { $this->dropForeignKey($table->getName(), $fk['FK_NAME']); } foreach ($table->getForeignKeys() as $fk) { $this->addForeignKey($fk['FK_NAME'], $table->getName(), $fk['COLUMN_NAME'], $fk['REF_TABLE_NAME'], $fk['REF_COLUMN_NAME'], $fk['ON_DELETE'], $fk['ON_UPDATE']); } break; } }