]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Regarding reflection for this case, reflection of an int PK col
authorMike Bayer <mike_mp@zzzcomputing.com>
Sat, 15 Jan 2011 21:50:52 +0000 (16:50 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 15 Jan 2011 21:50:52 +0000 (16:50 -0500)
with a server_default sets the "autoincrement" flag to False,
except in the case of a PG SERIAL col where we detected a
sequence default. [ticket:2020] [ticket:2021]

CHANGES
lib/sqlalchemy/dialects/firebird/base.py
lib/sqlalchemy/dialects/oracle/base.py
lib/sqlalchemy/dialects/sqlite/base.py
test/sql/test_defaults.py

diff --git a/CHANGES b/CHANGES
index 788fff57e606ab18da969b9fa44bfed3f10dd79d..2670b4dea5a1be95694f479d27075d735432bb0f 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -25,6 +25,16 @@ CHANGES
     the underlying database type as being Integer-based.
     [ticket:2005]
 
+  - Established consistency when server_default is present
+    on an Integer PK column.  SQLA doesn't pre-fetch these,
+    nor do they come back in cursor.lastrowid (DBAPI).  
+    Ensured all backends consistently return None 
+    in result.inserted_primary_key for these. Regarding
+    reflection for this case, reflection of an int PK col 
+    with a server_default sets the "autoincrement" flag to False, 
+    except in the case of a PG SERIAL col where we detected a 
+    sequence default. [ticket:2020] [ticket:2021]
+
   - Result-row processors are applied to pre-executed SQL 
     defaults, as well as cursor.lastrowid, when determining
     the contents of result.inserted_primary_key.
index feca46bceeb4785a0a76c4e0f4abb65a4ee439bd..32ffbfd69b37cca553de7749858c4cd4859da7fc 100644 (file)
@@ -586,7 +586,8 @@ class FBDialect(default.DefaultDialect):
                 'name' : name,
                 'type' : coltype,
                 'nullable' :  not bool(row['null_flag']),
-                'default' : defvalue
+                'default' : defvalue,
+                'autoincrement':default is None
             }
 
             if orig_colname.lower() == orig_colname:
index 63ad37ce973a7d805fa0f48ecc509045add31064..8065861c126f7187b09a51f041819ed0039fa3fb 100644 (file)
@@ -857,6 +857,7 @@ class OracleDialect(default.DefaultDialect):
                 'type': coltype,
                 'nullable': nullable,
                 'default': default,
+                'autoincrement':default is None
             }
             if orig_colname.lower() == orig_colname:
                 cdict['quote'] = True
index 2fadda68c193fe49cb4211e4e12db1a56061ec78..f732f1f44856fe3b2f7092dddb46c43f45a15714 100644 (file)
@@ -538,6 +538,7 @@ class SQLiteDialect(default.DefaultDialect):
                 'type' : coltype,
                 'nullable' : nullable,
                 'default' : default,
+                'autoincrement':default is None,
                 'primary_key': primary_key
             })
         return columns
index 0d099a78686fc82a1a585b9650dbdcb21edf6a13..1f2226842032a8406ba523c4f7b401fa46095f56 100644 (file)
@@ -836,9 +836,6 @@ class ServerDefaultsOnPKTest(testing.TestBase):
                 t.select().execute().fetchall(),
                 [(5, 'data')]
             )
-    @testing.fails_on('firebird', "col comes back as autoincrement")
-    @testing.fails_on('sqlite', "col comes back as autoincrement")
-    @testing.fails_on('oracle', "col comes back as autoincrement")
     @testing.provide_metadata
     def test_autoincrement_reflected_from_server_default(self):
         t = Table('x', metadata, 
@@ -854,8 +851,6 @@ class ServerDefaultsOnPKTest(testing.TestBase):
         t2 = Table('x', m2, autoload=True, implicit_returning=False)
         assert t2._autoincrement_column is None
 
-    @testing.fails_on('firebird', "attempts to insert None")
-    @testing.fails_on('sqlite', "returns a value")
     @testing.provide_metadata
     def test_int_default_none_on_insert_reflected(self):
         t = Table('x', metadata,