summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/build/changelog/unreleased_14/5738.rst8
-rw-r--r--lib/sqlalchemy/dialects/oracle/base.py8
-rw-r--r--lib/sqlalchemy/sql/compiler.py6
-rw-r--r--test/dialect/oracle/test_compiler.py5
-rw-r--r--test/sql/test_identity_column.py13
5 files changed, 29 insertions, 11 deletions
diff --git a/doc/build/changelog/unreleased_14/5738.rst b/doc/build/changelog/unreleased_14/5738.rst
new file mode 100644
index 000000000..653a6218b
--- /dev/null
+++ b/doc/build/changelog/unreleased_14/5738.rst
@@ -0,0 +1,8 @@
+.. change::
+ :tags: bug, sql
+ :tickets: 5722
+ :versions: 1.4.0b2
+
+ Properly render ``cycle=False`` and ``order=False`` as ``NO CYCLE`` and
+ ``NO ORDER`` in :class:`_sql.Sequence` and :class:`_sql.Identity`
+ objects. \ No newline at end of file
diff --git a/lib/sqlalchemy/dialects/oracle/base.py b/lib/sqlalchemy/dialects/oracle/base.py
index c0f7aa5ce..223c1db98 100644
--- a/lib/sqlalchemy/dialects/oracle/base.py
+++ b/lib/sqlalchemy/dialects/oracle/base.py
@@ -1329,9 +1329,11 @@ class OracleDDLCompiler(compiler.DDLCompiler):
text = super(OracleDDLCompiler, self).get_identity_options(
identity_options
)
- return text.replace("NO MINVALUE", "NOMINVALUE").replace(
- "NO MAXVALUE", "NOMAXVALUE"
- )
+ text = text.replace("NO MINVALUE", "NOMINVALUE")
+ text = text.replace("NO MAXVALUE", "NOMAXVALUE")
+ text = text.replace("NO CYCLE", "NOCYCLE")
+ text = text.replace("NO ORDER", "NOORDER")
+ return text
def visit_computed_column(self, generated):
text = "GENERATED ALWAYS AS (%s)" % self.sql_compiler.process(
diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py
index 9b90bf868..d53fe01c2 100644
--- a/lib/sqlalchemy/sql/compiler.py
+++ b/lib/sqlalchemy/sql/compiler.py
@@ -4050,10 +4050,10 @@ class DDLCompiler(Compiled):
text.append("NO MAXVALUE")
if identity_options.cache is not None:
text.append("CACHE %d" % identity_options.cache)
- if identity_options.order is True:
- text.append("ORDER")
+ if identity_options.order is not None:
+ text.append("ORDER" if identity_options.order else "NO ORDER")
if identity_options.cycle is not None:
- text.append("CYCLE")
+ text.append("CYCLE" if identity_options.cycle else "NO CYCLE")
return " ".join(text)
def visit_create_sequence(self, create, prefix=None, **kw):
diff --git a/test/dialect/oracle/test_compiler.py b/test/dialect/oracle/test_compiler.py
index 20c579f64..1b8b3fb89 100644
--- a/test/dialect/oracle/test_compiler.py
+++ b/test/dialect/oracle/test_compiler.py
@@ -1286,13 +1286,16 @@ class CompileTest(fixtures.TestBase, AssertsCompiledSQL):
increment=7,
nominvalue=True,
nomaxvalue=True,
+ cycle=False,
+ order=False,
),
),
)
self.assert_compile(
schema.CreateTable(t),
"CREATE TABLE t (y INTEGER GENERATED ALWAYS AS IDENTITY "
- "(INCREMENT BY 7 START WITH 4 NOMINVALUE NOMAXVALUE))",
+ "(INCREMENT BY 7 START WITH 4 NOMINVALUE NOMAXVALUE "
+ "NOORDER NOCYCLE))",
)
def test_column_identity_no_generated(self):
diff --git a/test/sql/test_identity_column.py b/test/sql/test_identity_column.py
index f99054d62..3ac97db92 100644
--- a/test/sql/test_identity_column.py
+++ b/test/sql/test_identity_column.py
@@ -55,16 +55,21 @@ class _IdentityDDLFixture(testing.AssertsCompiledSQL):
dict(always=False, cache=1000, order=True),
"BY DEFAULT AS IDENTITY (CACHE 1000 ORDER)",
),
- (dict(order=True), "BY DEFAULT AS IDENTITY (ORDER)"),
+ (dict(order=True, cycle=True), "BY DEFAULT AS IDENTITY (ORDER CYCLE)"),
+ (
+ dict(order=False, cycle=False),
+ "BY DEFAULT AS IDENTITY (NO ORDER NO CYCLE)",
+ ),
)
def test_create_ddl(self, identity_args, text):
if getattr(self, "__dialect__", None) != "default" and testing.against(
"oracle"
):
- text = text.replace("NO MINVALUE", "NOMINVALUE").replace(
- "NO MAXVALUE", "NOMAXVALUE"
- )
+ text = text.replace("NO MINVALUE", "NOMINVALUE")
+ text = text.replace("NO MAXVALUE", "NOMAXVALUE")
+ text = text.replace("NO CYCLE", "NOCYCLE")
+ text = text.replace("NO ORDER", "NOORDER")
t = Table(
"foo_table",