Example #1
0
 /**
  * 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;
 }
Example #2
0
 /**
  * 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;
     }
 }