/** * Export default value from column schema into scalar form (which we can store in cache). * * @param AbstractColumn $column * @return mixed|null */ private function exportDefault(AbstractColumn $column) { if (in_array($column->getName(), $this->tableSchema->getPrimaryKeys())) { //Column declared as primary key, nothing to do with default values return null; } $defaultValue = $column->getDefaultValue(); if ($defaultValue instanceof FragmentInterface) { //We can't cache values like that return null; } if (is_null($defaultValue) && !$column->isNullable()) { return $this->castDefault($column); } return $defaultValue; }
/** * Set column as big primary key and register it in parent table primary key list. * * @see TableSchema::setPrimaryKeys() * @return $this */ public function bigPrimary() { if (!in_array($this->name, $this->table->getPrimaryKeys())) { $this->table->setPrimaryKeys([$this->name]); } return $this->setType('bigPrimary'); }
/** * Get statement needed to create table. * * @param AbstractTable $table * @return string */ protected function createStatement(AbstractTable $table) { $statement = ["CREATE TABLE {$table->getName(true)} ("]; $innerStatement = []; //Columns foreach ($table->getColumns() as $column) { $innerStatement[] = $column->sqlStatement(); } //Primary key if (!empty($table->getPrimaryKeys())) { $primaryKeys = array_map([$this, 'quote'], $table->getPrimaryKeys()); $innerStatement[] = 'PRIMARY KEY (' . join(', ', $primaryKeys) . ')'; } //Constraints and foreign keys foreach ($table->getForeigns() as $reference) { $innerStatement[] = $reference->sqlStatement(); } $statement[] = " " . join(",\n ", $innerStatement); $statement[] = ')'; return join("\n", $statement); }