Skip to content

Commit

Permalink
gh #8160 : @markstory, Updating query to allow for multi column const…
Browse files Browse the repository at this point in the history
…raints and composite keys
  • Loading branch information
David Binney committed Mar 8, 2016
1 parent 1b72331 commit 0fc6549
Showing 1 changed file with 19 additions and 21 deletions.
40 changes: 19 additions & 21 deletions src/Database/Schema/PostgresSchema.php
Expand Up @@ -191,27 +191,25 @@ protected function _defaultValue($default)
*/
public function describeIndexSql($tableName, $config)
{
$sql = 'SELECT
c2.relname,
a.attname,
i.indisprimary,
i.indisunique
FROM pg_catalog.pg_class AS c,
pg_catalog.pg_class AS c2,
pg_catalog.pg_index AS i,
pg_catalog.pg_attribute AS a
WHERE c.oid = (
SELECT c.oid
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace AS n ON n.oid = c.relnamespace
WHERE c.relname = ?
AND n.nspname = ?
)
AND c.oid = i.indrelid
AND c.oid = a.attrelid
AND a.attnum = ANY(i.indkey)
AND i.indexrelid = c2.oid
ORDER BY i.indisprimary DESC, i.indisunique DESC, c2.relname, a.attnum';
$sql = "SELECT
c.conname AS name,
c.contype AS type,
a.attname AS column_name,
c.confmatchtype AS match_type,
c.confupdtype AS on_update,
c.confdeltype AS on_delete,
c.confrelid::regclass AS references_table,
ab.attname AS references_field
FROM pg_catalog.pg_namespace n
INNER JOIN pg_catalog.pg_constraint c ON (n.oid = c.connamespace)
INNER JOIN pg_catalog.pg_class cl ON (cl.oid = c.conrelid)
INNER JOIN pg_catalog.pg_attribute a ON (a.attrelid = cl.oid AND c.conrelid::regclass = a.attrelid::regclass)
INNER JOIN pg_catalog.pg_attribute ab ON (ab.attrelid = cl.oid AND a.attrelid = ab.attrelid AND a.attnum = ab.attnum)
WHERE n.nspname = ?
AND a.attnum = any(c.conkey)
AND c.conrelid = ?::regclass
AND c.contype='f'
ORDER BY c.conname, a.attnum";

$schema = 'public';
if (!empty($config['schema'])) {
Expand Down

0 comments on commit 0fc6549

Please sign in to comment.