move from old repository
This commit is contained in:
78
Schema.php
Normal file
78
Schema.php
Normal file
@@ -0,0 +1,78 @@
|
||||
<?php
|
||||
namespace DatabaseHelper;
|
||||
|
||||
use DatabaseHelper\enums\Charset;
|
||||
use DatabaseHelper\enums\Collation;
|
||||
use DatabaseHelper\enums\Engine;
|
||||
use http\Exception\InvalidArgumentException;
|
||||
|
||||
class Schema
|
||||
{
|
||||
public string $name = '';
|
||||
|
||||
public array $columns = [];
|
||||
public array $primaryKey = [];
|
||||
public array $foreignKeys = [];
|
||||
|
||||
public Engine $engine = Engine::INNODB;
|
||||
public Charset $charset = Charset::UTF8;
|
||||
public Collation $collation = Collation::UTF8_GENERAL_CI;
|
||||
|
||||
public function __construct(string $name) {
|
||||
$this->name = $name;
|
||||
}
|
||||
|
||||
public function requireColumn(string $col): void {
|
||||
if (!$this->existsColumn($col))
|
||||
throw new InvalidArgumentException("Column '$col' is not defined.");
|
||||
}
|
||||
|
||||
public function existsColumn(string $col): bool {
|
||||
return isset($this->columns[$col]);
|
||||
}
|
||||
|
||||
public function existsReference(Schema $schema): bool {
|
||||
foreach ($this->foreignKeys as $foreignKey)
|
||||
if ($foreignKey['table'] == $schema->name)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
public function columnType(string $col) {
|
||||
return $this->columns[$col]['type'];
|
||||
}
|
||||
|
||||
public function primaryKey() {
|
||||
return $this->columns['primary']['name'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a deep copy of this instance.
|
||||
* @return Schema
|
||||
*/
|
||||
public function copy(): Schema {
|
||||
$copy = new Schema($this->name);
|
||||
$copy->columns = genericDeepCopy($this->columns);
|
||||
$copy->primaryKey = genericDeepCopy($this->primaryKey);
|
||||
$copy->foreignKeys = genericDeepCopy($this->foreignKeys);
|
||||
$copy->engine = $this->engine;
|
||||
$copy->charset = $this->charset;
|
||||
$copy->collation = $this->collation;
|
||||
return $copy;
|
||||
}
|
||||
|
||||
public function include(Schema $other): void {
|
||||
// Create a copy of the other schema.
|
||||
$otherCopy = $other->copy();
|
||||
|
||||
// Add any column that isn't already defined.
|
||||
foreach ($otherCopy->columns as $colName => $colDef)
|
||||
if (!isset($this->columns[$colName]))
|
||||
$this->columns[$colName] = $colDef;
|
||||
|
||||
// Add any foreign key that doesn't already exist.
|
||||
foreach ($other->foreignKeys as $colName => $foreignKey)
|
||||
if (!isset($this->foreignKeys[$colName]))
|
||||
$this->foreignKeys[$colName] = $foreignKey;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user