Example #1
0
 /**
  * @param Table $table
  */
 public function parseIndexes(Table $table)
 {
     preg_match_all(RegExpPattern::index(), $table->getDefinition(), $matches);
     for ($i = 0; $i < count($matches[0]); $i++) {
         $indexName = $matches['name'][$i];
         $indexColumnNames = explode(',', str_replace('`', '', $matches['columns'][$i]));
         $indexOptions = $matches['options'][$i];
         $spatial = $matches['spatial'][$i];
         $unique = $matches['unique'][$i];
         $fullText = $matches['fullText'][$i];
         $index = new Index($indexName);
         foreach ($indexColumnNames as $indexColumnDefinition) {
             preg_match(RegExpPattern::indexColumn(), $indexColumnDefinition, $definitionMatch);
             $indexColumnName = $definitionMatch['columnName'];
             $indexFirstCharacters = null;
             if (isset($definitionMatch['firstCharacters']) && !empty($definitionMatch['firstCharacters'])) {
                 $indexFirstCharacters = (int) $definitionMatch['firstCharacters'];
             }
             $column = $table->getColumnByName(trim($indexColumnName));
             $index->addIndexColumn(new IndexColumn($column, $indexFirstCharacters));
         }
         $index->setUnique(!empty($unique));
         $index->setSpatial(!empty($spatial));
         $index->setFulltext(!empty($fullText));
         if (!empty($indexOptions)) {
             $index->setOptions(trim($indexOptions));
         }
         $table->addIndex($index);
     }
 }