]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
engine.table_names()
authorJonathan Ellis <jbellis@gmail.com>
Sun, 29 Jul 2007 04:15:14 +0000 (04:15 +0000)
committerJonathan Ellis <jbellis@gmail.com>
Sun, 29 Jul 2007 04:15:14 +0000 (04:15 +0000)
tested vs sqlite and pg.  mssql should also be ok (uses ischema like pg.)  others are best-guess based on has_table code.

lib/sqlalchemy/databases/firebird.py
lib/sqlalchemy/databases/information_schema.py
lib/sqlalchemy/databases/informix.py
lib/sqlalchemy/databases/mssql.py
lib/sqlalchemy/databases/oracle.py
lib/sqlalchemy/databases/postgres.py
lib/sqlalchemy/databases/sqlite.py
lib/sqlalchemy/engine/base.py

index 07f07644f2ff042ac17246da21f6a8f35d7ea0c8..065894437c46d99e62a033fc22c8a91303f5f004 100644 (file)
@@ -152,6 +152,10 @@ class FBDialect(ansisql.ANSIDialect):
 
     def max_identifier_length(self):
         return 31
+    
+    def table_names(self, connection, schema):
+        s = "SELECT R.RDB$RELATION_NAME FROM RDB$RELATIONS R"
+        return [row[0] for row in connection.execute(s)]
 
     def has_table(self, connection, table_name, schema=None):
         tblqry = """
index 93f47de15eb52181d626d45edd1a779688d5f667..48f33cb963a6a979705f3c4caa8a1a1bd0a9c105 100644 (file)
@@ -98,6 +98,11 @@ class ISchema(object):
         return self.cache[name]
 
 
+def table_names(connection, schema):
+    s = select([tables.c.table_name], tables.c.table_schema==schema)
+    return [row[0] for row in connection.execute(s)]
+
+
 def reflecttable(connection, table, include_columns, ischema_names):
     key_constraints = pg_key_constraints
         
index f3a6cf60e7127ae55b0132e438ba8fe4f75ffdb8..b4471df58cb4ac59d0ecd946d4e8706281dcaeb7 100644 (file)
@@ -249,6 +249,10 @@ class InfoDialect(ansisql.ANSIDialect):
     def schemadropper(self, *args, **params):
         return InfoSchemaDroper( self , *args , **params)
     
+    def table_names(self, connection, schema):
+        s = "select tabname from systables"
+        return [row[0] for row in connection.execute(s)]
+
     def has_table(self, connection, table_name,schema=None):
         cursor = connection.execute("""select tabname from systables where tabname=?""", table_name.lower() )
         return bool( cursor.fetchone() is not None )
index 20629140411116c09a5c7235d10d2fe98f781076..52963794c7df34bac955741fc4f30c6757b95b19 100644 (file)
@@ -462,6 +462,10 @@ class MSSQLDialect(ansisql.ANSIDialect):
         except Exception, e:
             raise exceptions.SQLError(statement, parameters, e)
 
+    def table_names(self, connection, schema):
+        from sqlalchemy.databases import information_schema as ischema
+        return ischema.table_names(connection, schema)
+
     def raw_connection(self, connection):
         """Pull the raw pymmsql connection out--sensative to "pool.ConnectionFairy" and pymssql.pymssqlCnx Classes"""
         try:
@@ -495,6 +499,10 @@ class MSSQLDialect(ansisql.ANSIDialect):
         row  = c.fetchone()
         return row is not None
         
+    def table_names(self, connection):
+        sql = "SELECT tablename FROM pg_tables WHERE schemaname = 'public'"
+        return [row[0] for row in connection.execute(s)]
+
     def reflecttable(self, connection, table, include_columns):
         import sqlalchemy.databases.information_schema as ischema
         
index eb7c559a8412a2e1d00835b3b77a61d02b7c295c..e5411481f464ffc150ea5af5e5d0564e04e04031 100644 (file)
@@ -364,6 +364,11 @@ class OracleDialect(ansisql.ANSIDialect):
                     dblink = ''
                 return name, owner, dblink
             raise
+        
+    def table_names(self, connection, schema):
+        # sorry, I have no idea what that dblink stuff is about :)
+        s = "select table_name from all_tables"
+        return [row[0] for row in connection.execute(s)]
 
     def reflecttable(self, connection, table, include_columns):
         preparer = self.identifier_preparer
index b192c47788738a4e0211cd71a812fe140f3a1895..697ca8d15a5796a08aee0d38a6501f4601c39354 100644 (file)
@@ -334,6 +334,9 @@ class PGDialect(ansisql.ANSIDialect):
             return "losed the connection unexpectedly" in str(e)
         else:
             return False
+        
+    def table_names(self, connection, schema):
+        return ischema.table_names(connection, schema)
 
     def reflecttable(self, connection, table, include_columns):
         if self.use_information_schema:
index 725ea23e2f4aa90dae54ccbeb406fee09af5d9a3..9492de8da9701e9c59c3e10da50d36378e06abbd 100644 (file)
@@ -224,6 +224,10 @@ class SQLiteDialect(ansisql.ANSIDialect):
 
     def oid_column_name(self, column):
         return "oid"
+    
+    def table_names(self, connection, schema):
+        s = "SELECT name FROM sqlite_master WHERE type='table'"
+        return [row[0] for row in connection.execute(s)]
 
     def has_table(self, connection, table_name, schema=None):
         cursor = connection.execute("PRAGMA table_info(%s)" %
index 2d82e3342de333d5b4a38222c5512d2f77e26353..deeb7ec4e4ea6328d8e64d59405772c63dcc4bcc 100644 (file)
@@ -1026,6 +1026,18 @@ class Engine(Connectable):
         """
 
         return Connection(self, close_with_result=close_with_result, **kwargs)
+    
+    def table_names(self, schema=None):
+        conn = self.contextual_connect()
+        if not schema:
+            try:
+                schema =  self.dialect.get_default_schema_name(conn)
+            except NotImplementedError:
+                pass
+        try:
+            return self.dialect.table_names(conn, schema)
+        finally:
+            conn.close()
 
     def reflecttable(self, table, connection=None, include_columns=None):
         """Given a Table object, reflects its columns and properties from the database."""