]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- Fixed SQLite reflection methods so that non-present rel_0_4
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 17 Mar 2009 15:15:10 +0000 (15:15 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 17 Mar 2009 15:15:10 +0000 (15:15 +0000)
      cursor.description, which triggers an auto-cursor
      close, will be detected so that no results doesn't
      fail on recent versions of pysqlite which raise
      an error when fetchone() called with no rows present.

CHANGES
lib/sqlalchemy/databases/sqlite.py

diff --git a/CHANGES b/CHANGES
index 8a1beede358d69a24648d4dd2ba021d2d3891c46..7873ac1b52ec8b580fe494053a6d3b2610407097 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -44,6 +44,13 @@ CHANGES
       creates an arbitrarily large number of engines
       or dialects.   There is a small performance penalty
       which will be resolved in 0.6.  [ticket:1299]
+
+-sqlite
+    - Fixed SQLite reflection methods so that non-present
+      cursor.description, which triggers an auto-cursor
+      close, will be detected so that no results doesn't
+      fail on recent versions of pysqlite which raise 
+      an error when fetchone() called with no rows present.
       
 - postgres
     - Added Index reflection support to Postgres, using a
index 04f59a8398a2a64d682ca7bb9d8cf88df4de03b3..d7d6d7a1f5ba329d33251dadb21cc669c87b221c 100644 (file)
@@ -333,7 +333,8 @@ class SQLiteDialect(default.DefaultDialect):
         else:
             pragma = "PRAGMA "
         qtable = quote(table_name)
-        cursor = connection.execute("%stable_info(%s)" % (pragma, qtable))
+        cursor = _pragma_cursor(connection.execute("%stable_info(%s)" % (pragma, qtable)))
+            
         row = cursor.fetchone()
 
         # consume remaining rows, to work around
@@ -351,7 +352,7 @@ class SQLiteDialect(default.DefaultDialect):
             pragma = "PRAGMA %s." % preparer.quote_identifier(table.schema)
         qtable = preparer.format_table(table, False)
 
-        c = connection.execute("%stable_info(%s)" % (pragma, qtable))
+        c = _pragma_cursor(connection.execute("%stable_info(%s)" % (pragma, qtable)))
         found_table = False
         while True:
             row = c.fetchone()
@@ -390,7 +391,7 @@ class SQLiteDialect(default.DefaultDialect):
         if not found_table:
             raise exceptions.NoSuchTableError(table.name)
 
-        c = connection.execute("%sforeign_key_list(%s)" % (pragma, qtable))
+        c = _pragma_cursor(connection.execute("%sforeign_key_list(%s)" % (pragma, qtable)))
         fks = {}
         while True:
             row = c.fetchone()
@@ -418,7 +419,7 @@ class SQLiteDialect(default.DefaultDialect):
         for name, value in fks.iteritems():
             table.append_constraint(schema.ForeignKeyConstraint(value[0], value[1]))
         # check for UNIQUE indexes
-        c = connection.execute("%sindex_list(%s)" % (pragma, qtable))
+        c = _pragma_cursor(connection.execute("%sindex_list(%s)" % (pragma, qtable)))
         unique_indexes = []
         while True:
             row = c.fetchone()
@@ -436,7 +437,11 @@ class SQLiteDialect(default.DefaultDialect):
                     break
                 cols.append(row[2])
 
-
+def _pragma_cursor(cursor):
+    if cursor.closed or not cursor.cursor.description:
+        cursor._fetchone_impl = lambda: None
+    return cursor
+        
 class SQLiteCompiler(compiler.DefaultCompiler):
     functions = compiler.DefaultCompiler.functions.copy()
     functions.update (