diff -r a8b7cd92f39f -r c2e6e24b83d9 pgtoolkit/pgbrowser.py --- a/pgtoolkit/pgbrowser.py Mon Feb 27 15:12:40 2012 +0100 +++ b/pgtoolkit/pgbrowser.py Mon Mar 05 18:36:46 2012 +0100 @@ -149,7 +149,7 @@ return self._schemas schemas = property(getschemas) - def _query(self, query, *args): + def _query(self, query, args): try: curs = self.conn.cursor() curs.execute(query, args) @@ -177,7 +177,7 @@ FROM pg_catalog.pg_database d JOIN pg_catalog.pg_tablespace t on d.dattablespace = t.oid ORDER BY 1; - ''') + ''', []) def list_schemas(self): return self._query(''' @@ -193,7 +193,7 @@ END AS "system" FROM pg_catalog.pg_namespace n ORDER BY 1; - ''') + ''', []) def list_tables(self, schema='public'): return self._query(''' @@ -206,7 +206,7 @@ LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = %s AND c.relkind IN ('r','s','') ORDER BY 1; - ''', schema) + ''', [schema]) def list_columns(self, table, schema='public', order=2): return self._query(''' @@ -223,7 +223,7 @@ LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace LEFT JOIN pg_catalog.pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum WHERE n.nspname = %s AND c.relname = %s AND a.attnum > 0 AND NOT a.attisdropped - ORDER BY ''' + str(order), schema, table) + ORDER BY ''' + str(order), [schema, table]) def list_constraints(self, table, schema='public'): return self._query(''' @@ -236,7 +236,7 @@ JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = %s AND c.relname = %s ORDER BY 1 - ''', schema, table) + ''', [schema, table]) def list_indexes(self, table, schema='public'): return self._query(''' @@ -246,13 +246,27 @@ i.indisunique as "unique", i.indisclustered as "clustered", i.indisvalid as "valid", - pg_catalog.pg_get_indexdef(i.indexrelid, 0, true) as "definition" + pg_catalog.pg_get_indexdef(i.indexrelid, 0, true) as "definition", + ARRAY(SELECT a.attname FROM pg_catalog.pg_attribute a WHERE a.attrelid = c2.oid ORDER BY attnum) AS "columns" --c2.reltablespace as "tablespace_oid" FROM pg_catalog.pg_class c JOIN pg_catalog.pg_index i ON c.oid = i.indrelid JOIN pg_catalog.pg_class c2 ON i.indexrelid = c2.oid JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace - WHERE n.nspname = %s AND c.relname = %s + WHERE n.nspname = %(schema)s AND c.relname = %(table)s ORDER BY i.indisprimary DESC, i.indisunique DESC, c2.relname - ''', schema, table) + ''', {'schema': schema, 'table': table}) + def list_column_usage(self, table, column, schema='public'): + '''List objects using the column. + + These objects may block alteration of column. Currently only views are listed. + + ''' + return self._query(''' + SELECT + 'view' AS type, view_schema AS schema, view_name AS name + FROM information_schema.view_column_usage + WHERE table_schema=%(schema)s AND table_name=%(table)s AND column_name=%(column)s + ''', {'schema':schema, 'table':table, 'column':column}) +