summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/build/changelog/unreleased_13/4144.rst10
-rw-r--r--lib/sqlalchemy/sql/compiler.py3
-rw-r--r--test/sql/test_compiler.py12
3 files changed, 25 insertions, 0 deletions
diff --git a/doc/build/changelog/unreleased_13/4144.rst b/doc/build/changelog/unreleased_13/4144.rst
new file mode 100644
index 000000000..08fcb6102
--- /dev/null
+++ b/doc/build/changelog/unreleased_13/4144.rst
@@ -0,0 +1,10 @@
+.. change::
+ :tags: feature, sql
+ :tickets: 4144
+
+ Added :class:`.Sequence` to the "string SQL" system that will render a
+ meaningful string expression (``"<next sequence value: my_sequence>"``)
+ when stringifying without a dialect a statement that includes a "sequence
+ nextvalue" expression, rather than raising a compilation error.
+
+
diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py
index 459e0ba2c..c2a23a758 100644
--- a/lib/sqlalchemy/sql/compiler.py
+++ b/lib/sqlalchemy/sql/compiler.py
@@ -2407,6 +2407,9 @@ class StrSQLCompiler(SQLCompiler):
def visit_json_path_getitem_op_binary(self, binary, operator, **kw):
return self.visit_getitem_binary(binary, operator, **kw)
+ def visit_sequence(self, seq, **kw):
+ return "<next sequence value: %s>" % self.preparer.format_sequence(seq)
+
def returning_clause(self, stmt, returning_cols):
columns = [
self._label_select_column(None, c, True, False, {})
diff --git a/test/sql/test_compiler.py b/test/sql/test_compiler.py
index 993008c07..22b46cc46 100644
--- a/test/sql/test_compiler.py
+++ b/test/sql/test_compiler.py
@@ -2898,6 +2898,18 @@ class StringifySpecialTest(fixtures.TestBase):
"SELECT anon_1.myid FROM anon_1"
)
+ def test_next_sequence_value(self):
+ # using descriptive text that is intentionally not compatible
+ # with any particular backend, since all backends have different
+ # syntax
+
+ seq = Sequence("my_sequence")
+
+ eq_ignore_whitespace(
+ str(seq.next_value()),
+ "<next sequence value: my_sequence>"
+ )
+
def test_returning(self):
stmt = table1.insert().returning(table1.c.myid)