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