app/django/db/backends/postgresql_psycopg2/introspection.py
author Madhusudan.C.S <madhusudancs@gmail.com>
Thu, 27 Aug 2009 11:13:52 +0200
changeset 2817 c31428f08daa
parent 323 ff1a9aa48cfd
permissions -rw-r--r--
Added GAE tasks that are related to updating GHOP Tasks. Several TODO's have been added. Also note that some functionality that is being used here is under construction and is being integrated asap. That's the price to pay for cleaner integration commits I guess :). Reviewed by: Lennard de Rijk

from django.db.backends.postgresql.introspection import DatabaseIntrospection as PostgresDatabaseIntrospection

class DatabaseIntrospection(PostgresDatabaseIntrospection):

    def get_relations(self, cursor, table_name):
        """
        Returns a dictionary of {field_index: (field_index_other_table, other_table)}
        representing all relationships to the given table. Indexes are 0-based.
        """
        cursor.execute("""
            SELECT con.conkey, con.confkey, c2.relname
            FROM pg_constraint con, pg_class c1, pg_class c2
            WHERE c1.oid = con.conrelid
                AND c2.oid = con.confrelid
                AND c1.relname = %s
                AND con.contype = 'f'""", [table_name])
        relations = {}
        for row in cursor.fetchall():
            # row[0] and row[1] are single-item lists, so grab the single item.
            relations[row[0][0] - 1] = (row[1][0] - 1, row[2])
        return relations