diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-09-01 21:25:46 +0000 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-09-01 21:25:46 +0000 |
| commit | e04535a79a7528440960575e3623fa620290e026 (patch) | |
| tree | 379de9e1e69d2f17653929edbefff22c9bf96763 /lib/sqlalchemy | |
| parent | 5df1759e151274594ca4691419f6be7e91257635 (diff) | |
| download | sqlalchemy-e04535a79a7528440960575e3623fa620290e026.tar.gz | |
factored out uses_sequences_for_inserts() into
preexecute_sequence dialect attribute
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/databases/firebird.py | 4 | ||||
| -rw-r--r-- | lib/sqlalchemy/databases/oracle.py | 4 | ||||
| -rw-r--r-- | lib/sqlalchemy/databases/postgres.py | 4 | ||||
| -rw-r--r-- | lib/sqlalchemy/engine/base.py | 3 | ||||
| -rw-r--r-- | lib/sqlalchemy/engine/default.py | 1 | ||||
| -rw-r--r-- | lib/sqlalchemy/sql/compiler.py | 5 |
6 files changed, 8 insertions, 13 deletions
diff --git a/lib/sqlalchemy/databases/firebird.py b/lib/sqlalchemy/databases/firebird.py index d520046d0..b25a8de02 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 d0122c7a4..fb5b512e2 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 a5c77f206..701114b17 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 c7364721f..1ab05fe03 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 09d17f923..578b19d16 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 7f9d0e31b..1cfebdc27 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): |
