summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2007-09-01 21:25:46 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2007-09-01 21:25:46 +0000
commite04535a79a7528440960575e3623fa620290e026 (patch)
tree379de9e1e69d2f17653929edbefff22c9bf96763 /lib/sqlalchemy
parent5df1759e151274594ca4691419f6be7e91257635 (diff)
downloadsqlalchemy-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.py4
-rw-r--r--lib/sqlalchemy/databases/oracle.py4
-rw-r--r--lib/sqlalchemy/databases/postgres.py4
-rw-r--r--lib/sqlalchemy/engine/base.py3
-rw-r--r--lib/sqlalchemy/engine/default.py1
-rw-r--r--lib/sqlalchemy/sql/compiler.py5
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):