Files
Notes/notes-service/vendor/sea-schema/tests/sakila/index.php
T
2026-08-01 16:11:49 +03:00

88 lines
2.6 KiB
PHP

<?php
require_once 'vendor/autoload.php';
$connectionParams = array(
'url' => 'mysql://sea:sea@localhost/sakila',
// 'url' => 'postgres://sea:sea@localhost/sakila',
);
$conn = \Doctrine\DBAL\DriverManager::getConnection($connectionParams);
$sm = $conn->getSchemaManager();
$sm->getDatabasePlatform()->registerDoctrineTypeMapping('geometry', 'string');
$sm->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string');
$sm->getDatabasePlatform()->registerDoctrineTypeMapping('mpaa_rating', 'string');
$sm->getDatabasePlatform()->registerDoctrineTypeMapping('_text', 'string');
echo json_encode(getSchema($sm), JSON_PRETTY_PRINT)."\n";
function getSchema($sm)
{
return [
'tables' => array_map('getTable', $sm->listTables()),
];
}
function getTable($table)
{
return [
'name' => $table->getName(),
'columns' => array_map('getColumn', array_values($table->getColumns())),
'indexes' => array_map('getIndex', array_values($table->getIndexes())),
'foreignKeys' => array_map('getForeignKey', array_values($table->getForeignKeys())),
];
}
function getColumn($column)
{
return [
'name' => $column->getName(),
'type' => $column->getType()->getName(),
'notNull' => $column->getNotNull(),
'default' => $column->getDefault(),
'length' => $column->getLength(),
'fixed' => $column->getFixed(),
'precision' => $column->getPrecision(),
'scale' => $column->getScale(),
'unsigned' => $column->getUnsigned(),
'platformOptions' => $column->getPlatformOptions(),
'autoincrement' => $column->getAutoincrement(),
'definition' => $column->getColumnDefinition(),
'comment' => $column->getComment(),
];
}
function getIndex($index)
{
return [
'name' => $index->getName(),
'columns' => $index->getColumns(),
'isUnique' => $index->isUnique(),
'isPrimary' => $index->isPrimary(),
'flags' => $index->getFlags(),
'options' => $index->getOptions(),
];
}
function getForeignKey($key)
{
return [
'name' => $key->getName(),
'localTable' => $key->getLocalTableName(),
'foreignTable' => $key->getForeignTableName(),
'localColumns' => $key->getLocalColumns(),
'foreignColumns' => $key->getForeignColumns(),
'onUpdate' => $key->onUpdate(),
'onDelete' => $key->onDelete(),
'options' => removeKeys($key->getOptions(), ['onUpdate', 'onDelete']),
];
}
function removeKeys($arr, $keys)
{
foreach ($keys as $key) {
unset($arr[$key]);
}
return $arr;
}