Skip to content

Commit

Permalink
Postgres-ify
Browse files Browse the repository at this point in the history
  • Loading branch information
Will Tinsdeall committed Dec 22, 2014
1 parent f0c0a48 commit 2a17b59
Showing 1 changed file with 56 additions and 28 deletions.
84 changes: 56 additions & 28 deletions build/generation/common.php
Expand Up @@ -32,47 +32,75 @@ function getClassNamePlural($table) {
}

function getModels() {
$d = new mysqli(\Core\Router::$settings['database']['server'], \Core\Router::$settings['database']['user'], \Core\Router::$settings['database']['passwd'], \Core\Router::$settings['database']['db'], \Core\Router::$settings['database']['port']);
$settings = \Core\Router::$settings;
$d = pg_connect("host={$settings['database']['server']} port={$settings['database']['port']} dbname={$settings['database']['db']} user={$settings['database']['user']} password={$settings['database']['passwd']}");

$q = $d->query("SHOW FULL TABLES WHERE Table_Type != 'VIEW'");
$q = pg_query("SELECT * FROM information_schema.tables WHERE table_catalog='{$settings['database']['passwd']}' AND table_schema='public' AND table_type != 'VIEW'");
$models = array();
while ($data = $q->fetch_array()) {
$models[$data[0]] = array("columns"=>array(), "multi"=>array(), "single"=>array(), "key"=>array());
while ($data = $q->fetch_assoc()) {
$models[$data['table_name']] = array("columns"=>array(), "multi"=>array(), "single"=>array(), "key"=>array());
}

foreach ($models as $table=>$model) {
$q = $d->query("SHOW COLUMNS IN `$table`");
while ($data = $q->fetch_assoc()) {
$models[$table]['columns'][$data['Field']] = $data['Type'];
if ($data['Key'] == "PRI") {
$models[$table]['key'][] = $data['Field'];
}
$q = pg_query("SELECT * FROM information_schema.columns WHERE table_name='{$table}'");
while ($data = pg_fetch_assoc($q)) {
$models[$table]['columns'][$data['column_name']] = $data['data_type'];
}


$q = pg_query("");

$q = pg_query("SELECT
pg_attribute.attname,
format_type(pg_attribute.atttypid, pg_attribute.atttypmod)
FROM pg_index, pg_class, pg_attribute
WHERE
pg_class.oid = '{$table}'::regclass AND
indrelid = pg_class.oid AND
pg_attribute.attrelid = pg_class.oid AND
pg_attribute.attnum = any(pg_index.indkey)
AND indisprimary");


while ($data = pg_fetch_assoc($q)) {
$models[$table]['key'][] = $data['attname'];
}
}

foreach ($models as $table=>$model) {
$sQuery = <<<EOF
SELECT i.TABLE_NAME, k.COLUMN_NAME, i.CONSTRAINT_TYPE, i.CONSTRAINT_NAME, k.REFERENCED_TABLE_NAME, k.REFERENCED_COLUMN_NAME
FROM information_schema.TABLE_CONSTRAINTS i
LEFT JOIN information_schema.KEY_COLUMN_USAGE k ON i.CONSTRAINT_NAME = k.CONSTRAINT_NAME
WHERE i.CONSTRAINT_TYPE = 'FOREIGN KEY'
AND i.TABLE_SCHEMA = DATABASE()
AND i.TABLE_NAME = '$table'
EOF;
$q = $d->query($sQuery);
while ($data = $q->fetch_assoc()) {
$models[$data['TABLE_NAME']]['multi'][$data['CONSTRAINT_NAME']] = array($data['COLUMN_NAME'], $data['REFERENCED_TABLE_NAME'], $data['REFERENCED_COLUMN_NAME']);
$models[$data['REFERENCED_TABLE_NAME']]['single'][$data['CONSTRAINT_NAME']] = array($data['REFERENCED_COLUMN_NAME'], $data['TABLE_NAME'], $data['COLUMN_NAME']);
SELECT
tc.constraint_name, tc.table_name, kcu.column_name,
ccu.table_name AS foreign_table_name,
ccu.column_name AS foreign_column_name
FROM
information_schema.table_constraints AS tc
JOIN information_schema.key_column_usage AS kcu
ON tc.constraint_name = kcu.constraint_name
JOIN information_schema.constraint_column_usage AS ccu
ON ccu.constraint_name = tc.constraint_name
WHERE constraint_type = 'FOREIGN KEY' AND tc.table_name='{$table}';
EOF;
//FIXME FK doesn't work
if (false) {
$q = $d->query($sQuery);
while ($data = $q->fetch_assoc()) {
$models[$data['TABLE_NAME']]['multi'][$data['CONSTRAINT_NAME']] = array($data['COLUMN_NAME'], $data['REFERENCED_TABLE_NAME'], $data['REFERENCED_COLUMN_NAME']);
$models[$data['REFERENCED_TABLE_NAME']]['single'][$data['CONSTRAINT_NAME']] = array($data['REFERENCED_COLUMN_NAME'], $data['TABLE_NAME'], $data['COLUMN_NAME']);
}
}


}

foreach ($models as $table=>$model) {
if (count($model['multi']) == 2 && count($model['columns']) == 2) {
$models[$table]['link_table'] = true;
} else {
$models[$table]['link_table'] = false;
}

if (false) {
foreach ($models as $table=>$model) {
if (count($model['multi']) == 2 && count($model['columns']) == 2) {
$models[$table]['link_table'] = true;
} else {
$models[$table]['link_table'] = false;
}
}
}
return $models;
}

0 comments on commit 2a17b59

Please sign in to comment.