]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
factored out uses_sequences_for_inserts() into
authorMike Bayer <mike_mp@zzzcomputing.com>
Sat, 1 Sep 2007 21:25:46 +0000 (21:25 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 1 Sep 2007 21:25:46 +0000 (21:25 +0000)
preexecute_sequence dialect attribute

lib/sqlalchemy/databases/firebird.py
lib/sqlalchemy/databases/oracle.py
lib/sqlalchemy/databases/postgres.py
lib/sqlalchemy/engine/base.py
lib/sqlalchemy/engine/default.py
lib/sqlalchemy/sql/compiler.py

index d520046d062883295e18905e8c347e8a02f9f1fc..b25a8de0224de81db5174a53032bb42dadda6093 100644 (file)
@@ -103,6 +103,7 @@ class FBExecutionContext(default.DefaultExecutionContext):
 class FBDialect(default.DefaultDialect):
     supports_sane_rowcount = False
     max_identifier_length = 31
+    preexecute_sequences = True
 
     def __init__(self, type_conv=200, concurrency_level=1, **kwargs):
         default.DefaultDialect.__init__(self, **kwargs)
@@ -306,9 +307,6 @@ class FBCompiler(compiler.DefaultCompiler):
         else:
             return func.name
 
-    def uses_sequences_for_inserts(self):
-        return True
-        
     def visit_sequence(self, seq):
         return "gen_id(" + seq.name + ", 1)"
         
index d0122c7a419151309b185922cb16736ccbfd6482..fb5b512e236efc1666c3c08068a4282493366b76 100644 (file)
@@ -237,6 +237,7 @@ class OracleDialect(default.DefaultDialect):
     max_identifier_length = 30
     supports_sane_rowcount = True
     supports_sane_multi_rowcount = False
+    preexecute_sequences = True
 
     def __init__(self, use_ansi=True, auto_setinputsizes=True, auto_convert_lobs=True, threaded=True, allow_twophase=True, **kwargs):
         default.DefaultDialect.__init__(self, default_paramstyle='named', **kwargs)
@@ -594,9 +595,6 @@ class OracleCompiler(compiler.DefaultCompiler):
     def visit_outer_join_column(self, vc):
         return self.process(vc.column) + "(+)"
         
-    def uses_sequences_for_inserts(self):
-        return True
-
     def visit_sequence(self, seq):
         return self.dialect.identifier_preparer.format_sequence(seq) + ".nextval"
         
index a5c77f206acc2ead43d205f4acb9a06c67f9e61c..701114b17e9752a7c485542f6d24a79594f2b4bd 100644 (file)
@@ -228,6 +228,7 @@ class PGDialect(default.DefaultDialect):
     max_identifier_length = 63
     supports_sane_rowcount = True
     supports_sane_multi_rowcount = False
+    preexecute_sequences = True
 
     def __init__(self, use_oids=False, server_side_cursors=False, **kwargs):
         default.DefaultDialect.__init__(self, default_paramstyle='pyformat', **kwargs)
@@ -543,9 +544,6 @@ class PGCompiler(compiler.DefaultCompiler):
         }
     )
 
-    def uses_sequences_for_inserts(self):
-        return True
-
     def visit_sequence(self, seq):
         if seq.optional:
             return None
index c7364721f4ea951c94ec28e7a38a19da96d31e38..1ab05fe036eb3a3d70c26fdb3bbeea158b539f5c 100644 (file)
@@ -79,6 +79,9 @@ class Dialect(object):
       Indicate whether the dialect properly implements rowcount for ``UPDATE`` and ``DELETE`` statements
       when executed via executemany.
 
+    preexecute_sequences
+      Indicate if the dialect should pre-execute sequences on primary key columns during an INSERT,
+      if it's desired that the new row's primary key be available after execution.
     """
 
     def create_connect_args(self, url):
index 09d17f92382682b6aebf48440a432a72dc25db91..578b19d166a59719c41c5eb42e5437eb8a4cb4dc 100644 (file)
@@ -31,6 +31,7 @@ class DefaultDialect(base.Dialect):
     max_identifier_length = 9999
     supports_sane_rowcount = True
     supports_sane_multi_rowcount = True
+    preexecute_sequences = False
 
     def __init__(self, convert_unicode=False, encoding='utf-8', default_paramstyle='named', paramstyle=None, dbapi=None, **kwargs):
         self.convert_unicode = convert_unicode
index 7f9d0e31b4b68471f514422704ecf31f7e9d8066..1cfebdc276059a46e152373df54c7dd738062593 100644 (file)
@@ -610,9 +610,6 @@ class DefaultCompiler(engine.Compiled, visitors.ClauseVisitor):
         return (self.process(join.left, asfrom=True) + (join.isouter and " LEFT OUTER JOIN " or " JOIN ") + \
             self.process(join.right, asfrom=True) + " ON " + self.process(join.onclause))
 
-    def uses_sequences_for_inserts(self):
-        return False
-
     def visit_sequence(self, seq):
         return None
 
@@ -688,7 +685,7 @@ class DefaultCompiler(engine.Compiled, visitors.ClauseVisitor):
                 values.append((c, value))
             elif isinstance(c, schema.Column):
                 if self.isinsert:
-                    if c.primary_key and self.uses_sequences_for_inserts() and not self.inline:
+                    if c.primary_key and self.dialect.preexecute_sequences and not self.inline:
                         values.append((c, create_bind_param(c, None)))
                         self.prefetch.add(c)
                     elif isinstance(c.default, schema.ColumnDefault):