Changeset 319 for trunk/module/pg.py


Ignore:
Timestamp:
Feb 24, 2007, 2:53:06 AM (13 years ago)
Author:
cito
Message:

Added _join_parts to pkey() and get_relations() again, in a slightly more efficient way. That function must be used consistently, or some methods like get_attnames() will be broken, as test_pg.py reveals.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/module/pg.py

    r315 r319  
    66# Improved by Christoph Zwerschke
    77#
    8 # $Id: pg.py,v 1.51 2007-01-06 16:45:41 darcy Exp $
     8# $Id: pg.py,v 1.52 2007-02-24 07:53:06 cito Exp $
    99#
    1010
     
    232232                                else:
    233233                                        self.__pkeys[x] = newpkey[x]
    234 
    235234                        return self.__pkeys
    236235
     
    243242                if self.__pkeys == {} or not self.__pkeys.has_key(qcl):
    244243                        # if not found, check again in case it was added after we started
    245                         self.__pkeys = dict(self.db.query(
    246                                 "SELECT pg_namespace.nspname||'.'||pg_class.relname"
     244                        self.__pkeys = dict([
     245                                (_join_parts(r[:2]), r[2]) for r in self.db.query(
     246                                "SELECT pg_namespace.nspname, pg_class.relname"
    247247                                        ",pg_attribute.attname FROM pg_class"
    248248                                " JOIN pg_namespace ON pg_namespace.oid=pg_class.relnamespace"
     
    252252                                " JOIN pg_index ON pg_index.indrelid=pg_class.oid"
    253253                                        " AND pg_index.indisprimary='t'"
    254                                         " AND pg_index.indkey[0]=pg_attribute.attnum").getresult())
     254                                        " AND pg_index.indkey[0]=pg_attribute.attnum"
     255                                ).getresult()])
    255256                        self._do_debug(self.__pkeys)
    256257                # will raise an exception if primary key doesn't exist
     
    270271
    271272                """
    272                 if kinds:
    273                         where = "pg_class.relkind IN (%s) AND" % \
    274                                                         ','.join(["'%s'" % x for x in kinds])
    275                 else:
    276                         where = ''
    277 
    278                 return [s[0] for s in
    279                         self.db.query(
    280                                 "SELECT pg_namespace.nspname || '.' || pg_class.relname "
    281                                 "FROM pg_class "
    282                                 "JOIN pg_namespace ON pg_namespace.oid=pg_class.relnamespace "
    283                                 "WHERE %s pg_class.relname !~ '^Inv' AND "
    284                                         "pg_class.relname !~ '^pg_' "
    285                                 "ORDER BY 1" % where).getresult()]
     273                where = kinds and "pg_class.relkind IN (%s) AND" % ','.join(
     274                        ["'%s'" % x for x in kinds]) or ''
     275                return map(_join_parts, self.db.query(
     276                        "SELECT pg_namespace.nspname, pg_class.relname "
     277                        "FROM pg_class "
     278                        "JOIN pg_namespace ON pg_namespace.oid=pg_class.relnamespace "
     279                        "WHERE %s pg_class.relname !~ '^Inv' AND "
     280                                "pg_class.relname !~ '^pg_' "
     281                        "ORDER BY 1, 2" % where).getresult())
    286282
    287283        def get_tables(self):
Note: See TracChangeset for help on using the changeset viewer.