/**
  * @param GetSchema\Schema $schema
  *
  * @return Query\CreateExpression
  * @throws Exception
  */
 private function getCreateQueryFromSchema(GetSchema\Schema $schema)
 {
     $definition = $schema->getTableDefinition($this->fromExpr);
     $defSchema = $definition->getSchema();
     $parser = new PHPSQLParser(false, false, [Options::CONSISTENT_SUB_TREES => true]);
     $query = new CreateQuery(new Query($defSchema, $parser->parse($defSchema)));
     return $query->getObjectExpression();
 }
 /**
  * @param array $data
  *
  * @return mixed
  * @throws Exception
  * @SuppressWarnings(PHPMD.UnusedLocalVariable)
  */
 protected function transform($data)
 {
     if (!$data instanceof GetSchema\Schema) {
         throw new Exception('Data is not a Schema.');
     }
     $definition = $data->getTableDefinition($this->fromExpr);
     $defSchema = $definition->getSchema();
     $parser = new PHPSQLParser(false, false, [Options::CONSISTENT_SUB_TREES => true]);
     $query = new CreateQuery(new Query($defSchema, $parser->parse($defSchema)));
     $createExpr = $query->getObjectExpression();
     $indices = $createExpr->getIndices();
     $returnData = [];
     /* @var  $index Query\IndexExpression */
     foreach ($indices as $index) {
         foreach ($index->getColumns() as $columnIndex => $column) {
             $row = self::$tplData;
             $row[self::KEY_TABLE] = $row[0] = $definition->getName();
             $row[self::KEY_NON_UNIQUE] = $row[1] = $index->getNonUnique();
             $row[self::KEY_NAME] = $row[2] = $index->getKeyName();
             $row[self::KEY_SEQ_IN_INDEX] = $row[3] = $columnIndex + 1;
             $row[self::KEY_COLUMN_NAME] = $row[4] = $column->getColumnName();
             $row[self::KEY_NULL] = $row[9] = $column->getColumnType()->isNullable() ? 'YES' : '';
             $returnData[] = $row;
         }
     }
     return $returnData;
 }