diff options
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/dialects/firebird/base.py | 2 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/oracle/base.py | 2 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/postgresql/base.py | 2 | ||||
| -rw-r--r-- | lib/sqlalchemy/sql/compiler.py | 2 | ||||
| -rw-r--r-- | lib/sqlalchemy/testing/suite/test_sequence.py | 24 |
5 files changed, 27 insertions, 5 deletions
diff --git a/lib/sqlalchemy/dialects/firebird/base.py b/lib/sqlalchemy/dialects/firebird/base.py index 335163f15..7b470c189 100644 --- a/lib/sqlalchemy/dialects/firebird/base.py +++ b/lib/sqlalchemy/dialects/firebird/base.py @@ -291,7 +291,7 @@ class FBCompiler(sql.compiler.SQLCompiler): def default_from(self): return " FROM rdb$database" - def visit_sequence(self, seq): + def visit_sequence(self, seq, **kw): return "gen_id(%s, 1)" % self.preparer.format_sequence(seq) def get_select_precolumns(self, select, **kw): diff --git a/lib/sqlalchemy/dialects/oracle/base.py b/lib/sqlalchemy/dialects/oracle/base.py index 3970a181c..44ab9e3bb 100644 --- a/lib/sqlalchemy/dialects/oracle/base.py +++ b/lib/sqlalchemy/dialects/oracle/base.py @@ -767,7 +767,7 @@ class OracleCompiler(compiler.SQLCompiler): def visit_outer_join_column(self, vc, **kw): return self.process(vc.column, **kw) + "(+)" - def visit_sequence(self, seq): + def visit_sequence(self, seq, **kw): return (self.dialect.identifier_preparer.format_sequence(seq) + ".nextval") diff --git a/lib/sqlalchemy/dialects/postgresql/base.py b/lib/sqlalchemy/dialects/postgresql/base.py index c5b0db6ce..0160239b7 100644 --- a/lib/sqlalchemy/dialects/postgresql/base.py +++ b/lib/sqlalchemy/dialects/postgresql/base.py @@ -1489,7 +1489,7 @@ class PGCompiler(compiler.SQLCompiler): value = value.replace('\\', '\\\\') return value - def visit_sequence(self, seq): + def visit_sequence(self, seq, **kw): return "nextval('%s')" % self.preparer.format_sequence(seq) def limit_clause(self, select, **kw): diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py index 6c7e6145d..a442c65fd 100644 --- a/lib/sqlalchemy/sql/compiler.py +++ b/lib/sqlalchemy/sql/compiler.py @@ -934,7 +934,7 @@ class SQLCompiler(Compiled): def visit_next_value_func(self, next_value, **kw): return self.visit_sequence(next_value.sequence) - def visit_sequence(self, sequence): + def visit_sequence(self, sequence, **kw): raise NotImplementedError( "Dialect '%s' does not support sequence increments." % self.dialect.name diff --git a/lib/sqlalchemy/testing/suite/test_sequence.py b/lib/sqlalchemy/testing/suite/test_sequence.py index b2d52f27c..f1c00de6b 100644 --- a/lib/sqlalchemy/testing/suite/test_sequence.py +++ b/lib/sqlalchemy/testing/suite/test_sequence.py @@ -3,7 +3,7 @@ from ..config import requirements from ..assertions import eq_ from ... import testing -from ... import Integer, String, Sequence, schema +from ... import Integer, String, Sequence, schema, MetaData from ..schema import Table, Column @@ -71,6 +71,28 @@ class SequenceTest(fixtures.TablesTest): ) +class SequenceCompilerTest(testing.AssertsCompiledSQL, fixtures.TestBase): + __requires__ = ('sequences',) + __backend__ = True + + def test_literal_binds_inline_compile(self): + table = Table( + 'x', MetaData(), + Column('y', Integer, Sequence('y_seq')), + Column('q', Integer)) + + stmt = table.insert().values(q=5) + + seq_nextval = testing.db.dialect.statement_compiler( + statement=None, dialect=testing.db.dialect).visit_sequence( + Sequence("y_seq")) + self.assert_compile( + stmt, + "INSERT INTO x (y, q) VALUES (%s, 5)" % (seq_nextval, ), + literal_binds=True, + dialect=testing.db.dialect) + + class HasSequenceTest(fixtures.TestBase): __requires__ = 'sequences', __backend__ = True |
