1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134:
<?php
namespace Inlm\SchemaGenerator\Integrations;
use Inlm\SchemaGenerator;
use LeanMapper;
abstract class AbstractIntegration implements SchemaGenerator\IIntegration
{
public function createMigration($description = NULL, $testMode = FALSE)
{
$generator = new SchemaGenerator\SchemaGenerator(
$this->createExtractor(),
$this->createAdapter(),
$this->createSqlDumper(),
$this->createLogger()
);
$this->applyOptions($generator);
$this->applyCustomTypes($generator);
$generator->setTestMode($testMode);
$generator->generate($description);
}
public function updateDevelopmentDatabase($testMode = FALSE)
{
$generator = new SchemaGenerator\SchemaGenerator(
$this->createExtractor(),
$this->createDatabaseAdapter(),
$this->createDatabaseDumper(),
$this->createLogger()
);
$this->applyOptions($generator);
$this->applyCustomTypes($generator);
$generator->setTestMode($testMode);
$generator->generate();
}
public function showDiff()
{
$generator = new SchemaGenerator\SchemaGenerator(
$this->createExtractor(),
$this->createAdapter(),
new SchemaGenerator\Dumpers\NullDumper,
$this->createLogger()
);
$this->applyOptions($generator);
$this->applyCustomTypes($generator);
$generator->setTestMode(TRUE);
$generator->generate();
}
public function initFromDatabase()
{
$generator = new SchemaGenerator\SchemaGenerator(
$this->createDatabaseExtractor(),
$this->createAdapter(),
$this->createSqlDumper(),
$this->createLogger()
);
$this->applyOptions($generator);
$this->applyCustomTypes($generator);
$generator->setTestMode(FALSE);
$generator->generate('init');
}
protected function applyOptions(SchemaGenerator\SchemaGenerator $generator)
{
$options = $this->getOptions();
if ($options === NULL) {
return;
}
foreach ($options as $option => $value) {
$generator->setOption($option, $value);
}
}
protected function applyCustomTypes(SchemaGenerator\SchemaGenerator $generator)
{
$customTypes = $this->getCustomTypes();
if ($customTypes === NULL) {
return;
}
foreach ($customTypes as $name => $definition) {
$type = SchemaGenerator\Utils\DataTypeParser::parse($definition);
$generator->setCustomType($name, $type->getType(), $type->getParameters(), $type->getOptions());
}
}
abstract protected function getOptions();
abstract protected function getCustomTypes();
abstract protected function createExtractor();
abstract protected function createAdapter();
abstract protected function createDatabaseExtractor();
abstract protected function createDatabaseAdapter();
abstract protected function createDatabaseDumper();
abstract protected function createSqlDumper();
abstract protected function createLogger();
}