public function convertIndexDescription(Table $table, $row)
 {
     $type = null;
     $columns = $length = [];
     $name = $row['CONSTRAINT_NAME'];
     switch ($row['CONSTRAINT_TYPE']) {
         case 'P':
             $name = $type = Table::CONSTRAINT_PRIMARY;
             break;
         case 'U':
             $type = Table::CONSTRAINT_UNIQUE;
             break;
         default:
             return;
             //Not doing anything here with Oracle "Check" constraints or "Reference" constraints
     }
     $columns[] = strtolower($row['COLUMN_NAME']);
     $isIndex = $type === Table::INDEX_INDEX || $type === Table::INDEX_FULLTEXT;
     if ($isIndex) {
         $existing = $table->index($name);
     } else {
         $existing = $table->constraint($name);
     }
     if (!empty($existing)) {
         $columns = array_merge($existing['columns'], $columns);
         $length = array_merge($existing['length'], $length);
     }
     if ($isIndex) {
         $table->addIndex($name, ['type' => $type, 'columns' => $columns, 'length' => $length]);
     } else {
         $table->addConstraint($name, ['type' => $type, 'columns' => $columns, 'length' => $length]);
     }
 }
Example #2
0
 /**
  * {@inheritDoc}
  */
 public function indexSql(Table $table, $name)
 {
     $data = $table->index($name);
     $columns = array_map([$this->_driver, 'quoteIdentifier'], $data['columns']);
     return sprintf('CREATE INDEX %s ON %s (%s)', $this->_driver->quoteIdentifier($name), $this->_driver->quoteIdentifier($table->name()), implode(', ', $columns));
 }
Example #3
0
 /**
  * Generates a string representation of a schema.
  *
  * @param \Cake\Database\Schema\Table $table Table schema
  * @return string fields definitions
  */
 protected function _generateSchema(Table $table)
 {
     $cols = $indexes = $constraints = [];
     foreach ($table->columns() as $field) {
         $fieldData = $table->column($field);
         $properties = implode(', ', $this->_values($fieldData));
         $cols[] = "        '{$field}' => [{$properties}],";
     }
     foreach ($table->indexes() as $index) {
         $fieldData = $table->index($index);
         $properties = implode(', ', $this->_values($fieldData));
         $indexes[] = "            '{$index}' => [{$properties}],";
     }
     foreach ($table->constraints() as $index) {
         $fieldData = $table->constraint($index);
         $properties = implode(', ', $this->_values($fieldData));
         $constraints[] = "            '{$index}' => [{$properties}],";
     }
     $options = $this->_values($table->options());
     $content = implode("\n", $cols) . "\n";
     if (!empty($indexes)) {
         $content .= "        '_indexes' => [\n" . implode("\n", $indexes) . "\n        ],\n";
     }
     if (!empty($constraints)) {
         $content .= "        '_constraints' => [\n" . implode("\n", $constraints) . "\n        ],\n";
     }
     if (!empty($options)) {
         foreach ($options as &$option) {
             $option = '            ' . $option;
         }
         $content .= "        '_options' => [\n" . implode(",\n", $options) . "\n        ],\n";
     }
     return "[\n{$content}    ]";
 }
Example #4
0
 /**
  * {@inheritDoc}
  */
 public function indexSql(Table $table, $name)
 {
     $data = $table->index($name);
     if ($data['type'] === Table::INDEX_INDEX) {
         $out = 'KEY ';
     }
     if ($data['type'] === Table::INDEX_FULLTEXT) {
         $out = 'FULLTEXT KEY ';
     }
     $out .= $this->_driver->quoteIdentifier($name);
     return $this->_keySql($out, $data);
 }