protected function findConstraints(&$table)
    {
        $tableName = $this->quoteValue($table->name);
        $tableSchema = $this->quoteValue($table->schemaName);

        //We need to extract the constraints de hard way since:
        //http://www.postgresql.org/message-id/26677.1086673982@sss.pgh.pa.us

        $sql = <<<SQL
select
    ct.conname as constraint_name,
    a.attname as column_name,
    fc.relname as foreign_table_name,
    fns.nspname as foreign_table_schema,
    fa.attname as foreign_column_name
from
    (SELECT ct.conname, ct.conrelid, ct.confrelid, ct.conkey, ct.contype, ct.confkey, generate_subscripts(ct.conkey, 1) AS s
       FROM pg_constraint ct
    ) AS ct
    inner join pg_class c on c.oid=ct.conrelid
    inner join pg_namespace ns on c.relnamespace=ns.oid
    inner join pg_attribute a on a.attrelid=ct.conrelid and a.attnum = ct.conkey[ct.s]
    left join pg_class fc on fc.oid=ct.confrelid
    left join pg_namespace fns on fc.relnamespace=fns.oid
    left join pg_attribute fa on fa.attrelid=ct.confrelid and fa.attnum = ct.confkey[ct.s]
where
    ct.contype='f'
    and c.relname={$tableName}
    and ns.nspname={$tableSchema}
order by
    fns.nspname, fc.relname, a.attnum
SQL;

        return $this->db->createCommand($sql)->queryAll()->then(
            function($_constraints) use (&$table) {
                $constraints = [];
                foreach ($_constraints as $constraint) {
                    if ($constraint['foreign_table_schema'] !== $this->defaultSchema) {
                        $foreignTable = $constraint['foreign_table_schema'] . '.' . $constraint['foreign_table_name'];
                    } else {
                        $foreignTable = $constraint['foreign_table_name'];
                    }
                    $name = $constraint['constraint_name'];
                    if (!isset($constraints[$name])) {
                        $constraints[$name] = [
                            'tableName' => $foreignTable,
                            'columns' => [],
                        ];
                    }
                    $constraints[$name]['columns'][$constraint['column_name']] = $constraint['foreign_column_name'];
                }

                foreach ($constraints as $name => $constraint) {
                    $table->foreignKeys[$name] = array_merge([$constraint['tableName']], $constraint['columns']);
                }
                return $table;
            }
        );
    }
protected function findConstraints(&$table)
    {
        $tableName = $this->quoteValue($table->name);
        $tableSchema = $this->quoteValue($table->schemaName);

        //We need to extract the constraints de hard way since:
        //http://www.postgresql.org/message-id/26677.1086673982@sss.pgh.pa.us

        $sql = <<<SQL
select
    ct.conname as constraint_name,
    a.attname as column_name,
    fc.relname as foreign_table_name,
    fns.nspname as foreign_table_schema,
    fa.attname as foreign_column_name
from
    (SELECT ct.conname, ct.conrelid, ct.confrelid, ct.conkey, ct.contype, ct.confkey, generate_subscripts(ct.conkey, 1) AS s
       FROM pg_constraint ct
    ) AS ct
    inner join pg_class c on c.oid=ct.conrelid
    inner join pg_namespace ns on c.relnamespace=ns.oid
    inner join pg_attribute a on a.attrelid=ct.conrelid and a.attnum = ct.conkey[ct.s]
    left join pg_class fc on fc.oid=ct.confrelid
    left join pg_namespace fns on fc.relnamespace=fns.oid
    left join pg_attribute fa on fa.attrelid=ct.confrelid and fa.attnum = ct.confkey[ct.s]
where
    ct.contype='f'
    and c.relname={$tableName}
    and ns.nspname={$tableSchema}
order by
    fns.nspname, fc.relname, a.attnum
SQL;

        return $this->db->createCommand($sql)->queryAll()->then(
            function($_constraints) use (&$table) {
                $constraints = [];
                foreach ($_constraints as $constraint) {
                    if ($constraint['foreign_table_schema'] !== $this->defaultSchema) {
                        $foreignTable = $constraint['foreign_table_schema'] . '.' . $constraint['foreign_table_name'];
                    } else {
                        $foreignTable = $constraint['foreign_table_name'];
                    }
                    $name = $constraint['constraint_name'];
                    if (!isset($constraints[$name])) {
                        $constraints[$name] = [
                            'tableName' => $foreignTable,
                            'columns' => [],
                        ];
                    }
                    $constraints[$name]['columns'][$constraint['column_name']] = $constraint['foreign_column_name'];
                }

                foreach ($constraints as $name => $constraint) {
                    $table->foreignKeys[$name] = array_merge([$constraint['tableName']], $constraint['columns']);
                }
                return $table;
            }
        );
    }
protected function findConstraints ( & $ table ) { $ tableName = $ this -> quoteValue ( $ table -> name ) ; $ tableSchema = $ this -> quoteValue ( $ table -> schemaName ) ; //We need to extract the constraints de hard way since: //http://www.postgresql.org/message-id/26677.1086673982@sss.pgh.pa.us $ sql =  <<<SQL
select
    ct.conname as constraint_name,
    a.attname as column_name,
    fc.relname as foreign_table_name,
    fns.nspname as foreign_table_schema,
    fa.attname as foreign_column_name
from
    (SELECT ct.conname, ct.conrelid, ct.confrelid, ct.conkey, ct.contype, ct.confkey, generate_subscripts(ct.conkey, 1) AS s
       FROM pg_constraint ct
    ) AS ct
    inner join pg_class c on c.oid=ct.conrelid
    inner join pg_namespace ns on c.relnamespace=ns.oid
    inner join pg_attribute a on a.attrelid=ct.conrelid and a.attnum = ct.conkey[ct.s]
    left join pg_class fc on fc.oid=ct.confrelid
    left join pg_namespace fns on fc.relnamespace=fns.oid
    left join pg_attribute fa on fa.attrelid=ct.confrelid and fa.attnum = ct.confkey[ct.s]
where
    ct.contype='f'
    and c.relname={$tableName}
    and ns.nspname={$tableSchema}
order by
    fns.nspname, fc.relname, a.attnum
SQL ; return $ this -> db -> createCommand ( $ sql ) -> queryAll ( ) -> then ( function ( $ _constraints ) use ( & $ table ) { $ constraints = [ ] ; foreach ( $ _constraints as $ constraint ) { if ( $ constraint [ 'foreign_table_schema' ] !== $ this -> defaultSchema ) { $ foreignTable = $ constraint [ 'foreign_table_schema' ] . '.' . $ constraint [ 'foreign_table_name' ] ; } else { $ foreignTable = $ constraint [ 'foreign_table_name' ] ; } $ name = $ constraint [ 'constraint_name' ] ; if ( ! isset ( $ constraints [ $ name ] ) ) { $ constraints [ $ name ] = [ 'tableName' => $ foreignTable , 'columns' => [ ] , ] ; } $ constraints [ $ name ] [ 'columns' ] [ $ constraint [ 'column_name' ] ] = $ constraint [ 'foreign_column_name' ] ; } foreach ( $ constraints as $ name => $ constraint ) { $ table -> foreignKeys [ $ name ] = array_merge ( [ $ constraint [ 'tableName' ] ] , $ constraint [ 'columns' ] ) ; } return $ table ; } ) ; }
Collects the foreign key column details for the given table.
@param TableSchema $table the table metadata
@return ExtendedPromiseInterface with TableSchema
Collects the foreign key column details for the given table .