From: Mike Bayer Date: Sat, 1 Sep 2007 21:25:46 +0000 (+0000) Subject: factored out uses_sequences_for_inserts() into X-Git-Tag: rel_0_4beta6~63 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e04535a79a7528440960575e3623fa620290e026;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git factored out uses_sequences_for_inserts() into preexecute_sequence dialect attribute --- diff --git a/lib/sqlalchemy/databases/firebird.py b/lib/sqlalchemy/databases/firebird.py index d520046d06..b25a8de022 100644 --- a/lib/sqlalchemy/databases/firebird.py +++ b/lib/sqlalchemy/databases/firebird.py @@ -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)" diff --git a/lib/sqlalchemy/databases/oracle.py b/lib/sqlalchemy/databases/oracle.py index d0122c7a41..fb5b512e23 100644 --- a/lib/sqlalchemy/databases/oracle.py +++ b/lib/sqlalchemy/databases/oracle.py @@ -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" diff --git a/lib/sqlalchemy/databases/postgres.py b/lib/sqlalchemy/databases/postgres.py index a5c77f206a..701114b17e 100644 --- a/lib/sqlalchemy/databases/postgres.py +++ b/lib/sqlalchemy/databases/postgres.py @@ -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 diff --git a/lib/sqlalchemy/engine/base.py b/lib/sqlalchemy/engine/base.py index c7364721f4..1ab05fe036 100644 --- a/lib/sqlalchemy/engine/base.py +++ b/lib/sqlalchemy/engine/base.py @@ -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): diff --git a/lib/sqlalchemy/engine/default.py b/lib/sqlalchemy/engine/default.py index 09d17f9238..578b19d166 100644 --- a/lib/sqlalchemy/engine/default.py +++ b/lib/sqlalchemy/engine/default.py @@ -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 diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py index 7f9d0e31b4..1cfebdc276 100644 --- a/lib/sqlalchemy/sql/compiler.py +++ b/lib/sqlalchemy/sql/compiler.py @@ -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):