diff --git a/DataStorage/Database/Schema/Grammar/MysqlGrammar.php b/DataStorage/Database/Schema/Grammar/MysqlGrammar.php index 0fc862872..be2dd0a63 100644 --- a/DataStorage/Database/Schema/Grammar/MysqlGrammar.php +++ b/DataStorage/Database/Schema/Grammar/MysqlGrammar.php @@ -94,7 +94,7 @@ class MysqlGrammar extends Grammar foreach ($fields as $name => $field) { $fieldQuery .= ' ' . $this->expressionizeTableColumn([$name], '') . ' ' . $field['type']; - if (isset($field['default'])) { + if (isset($field['default']) || ($field['default'] === null && isset($field['null']) && $field['null'])) { $fieldQuery .= ' DEFAULT ' . $this->compileValue($query, $field['default']); } diff --git a/DataStorage/Database/tableDefinition.json b/DataStorage/Database/tableDefinition.json new file mode 100644 index 000000000..146fc36ad --- /dev/null +++ b/DataStorage/Database/tableDefinition.json @@ -0,0 +1,16 @@ +{ + "name": "[a-z]+", + "fields": { + ".*": { + "name": "[a-z]+", + "type": ".+", + ".*?default": "1|0", + ".*?null": "1|0", + ".*?primary": "1|0", + ".*?unique": "1|0", + ".*?autoincrement": "1|0", + ".*?foreignTable": "[a-z]+", + ".*?foreignKey": "[a-z]+" + } + } +} \ No newline at end of file diff --git a/Module/InstallerAbstract.php b/Module/InstallerAbstract.php index 3b11ce440..287fc8010 100644 --- a/Module/InstallerAbstract.php +++ b/Module/InstallerAbstract.php @@ -104,7 +104,7 @@ class InstallerAbstract * * @since 1.0.0 */ - public static function createTables(DatabasePool $dbPool, InfoManager $info) : void + private static function createTables(DatabasePool $dbPool, InfoManager $info) : void { $path = \dirname($info->getPath()) . '/Admin/Install/db.json'; @@ -118,7 +118,6 @@ class InstallerAbstract } $definitions = \json_decode($content, true); - foreach ($definitions as $definition) { self::createTable($definition, $dbPool); } @@ -134,22 +133,21 @@ class InstallerAbstract * * @since 1.0.0 */ - public static function createTable(array $definition, DatabasePool $dbPool) : void + private static function createTable(array $definition, DatabasePool $dbPool) : void { $builder = new SchemaBuilder($dbPool->get('schema')); $builder->prefix($dbPool->get('schema')->prefix); - $builder->createTable($definition['table'] ?? ''); + $builder->createTable($definition['name'] ?? ''); foreach ($definition['fields'] as $name => $def) { $builder->field( - $name, $def['type'], $def['default'], - $def['null'], $def['primary'], $def['autoincrement'], - $def['foreign']['table'], $def['foreign']['field'] + $name, $def['type'], $def['default'] ?? null, + $def['null'] ?? true, $def['primary'] ?? false, $def['autoincrement'] ?? false, + $def['foreignTable'] ?? null, $def['foreignKey'] ?? null ); - } - + } + $builder->execute(); - } /** diff --git a/tests/Bootstrap.php b/tests/Bootstrap.php index dcb88440c..ff8ec56d3 100644 --- a/tests/Bootstrap.php +++ b/tests/Bootstrap.php @@ -323,5 +323,6 @@ $GLOBALS['dbpool']->create('admin', $CONFIG['db']['core']['masters']['admin']); $GLOBALS['dbpool']->create('select', $CONFIG['db']['core']['masters']['select']); $GLOBALS['dbpool']->create('insert', $CONFIG['db']['core']['masters']['insert']); $GLOBALS['dbpool']->create('update', $CONFIG['db']['core']['masters']['update']); +$GLOBALS['dbpool']->create('schema', $CONFIG['db']['core']['masters']['schema']); DataMapperAbstract::setConnection($GLOBALS['dbpool']->get());