]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Add support for CACHE and ORDER to sequences
authorDavid Moore <davidm@j5int.com>
Wed, 5 Jul 2017 19:06:49 +0000 (15:06 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Wed, 5 Jul 2017 20:21:44 +0000 (16:21 -0400)
Added new keywords :paramref:`.Sequence.cache` and
:paramref:`.Sequence.order` to :class:`.Sequence`, to allow rendering
of the CACHE parameter understood by Oracle and PostgreSQL, and the
ORDER parameter understood by Oracle.  Pull request
courtesy David Moore.

Change-Id: I082c3f8ef56ef89dbaad5da9d5695be5313b0614
Pull-request: https://bitbucket.org/zzzeek/sqlalchemy/pull-requests/96

doc/build/changelog/changelog_11.rst
lib/sqlalchemy/engine/interfaces.py
lib/sqlalchemy/sql/compiler.py
lib/sqlalchemy/sql/schema.py
test/sql/test_defaults.py

index d02beef6a6dcfcbf34cbd2f7926f45e33bf250e4..602be13d24eaffd5efa87645ad6d9f48b314fac5 100644 (file)
 .. changelog::
     :version: 1.1.12
 
+    .. change:: cache_order_sequence
+        :tags: feature, oracle, posgresql
+        :versions: 1.2.0b1
+
+        Added new keywords :paramref:`.Sequence.cache` and
+        :paramref:`.Sequence.order` to :class:`.Sequence`, to allow rendering
+        of the CACHE parameter understood by Oracle and PostgreSQL, and the
+        ORDER parameter understood by Oracle.  Pull request
+        courtesy David Moore.
+
 .. changelog::
     :version: 1.1.11
     :released: Monday, June 19, 2017
index 57f8b8dda464b2a74b32d9949255cfc42f18c5af..3e09e49713bd792a693bb2ee96e1b1e3947010b9 100644 (file)
@@ -254,7 +254,7 @@ class Dialect(object):
           a dictionary of the form
               {'name' : str, 'start' :int, 'increment': int, 'minvalue': int,
                'maxvalue': int, 'nominvalue': bool, 'nomaxvalue': bool,
-               'cycle': bool}
+               'cycle': bool, 'cache': int, 'order': bool}
 
         Additional column attributes may be present.
         """
index 6da0647970e4acf47993509e38d17cb4e2e4b0d1..53009e2df18cd3d81543d9430dfda7748882d589 100644 (file)
@@ -2560,6 +2560,10 @@ class DDLCompiler(Compiled):
             text += " NO MINVALUE"
         if create.element.nomaxvalue is not None:
             text += " NO MAXVALUE"
+        if create.element.cache is not None:
+            text += " CACHE %d" % create.element.cache
+        if create.element.order is True:
+            text += " ORDER"
         if create.element.cycle is not None:
             text += " CYCLE"
         return text
index 3ba36e714de923465d7f7b39f0f719fa79136e26..9b73eca633aa869067f7181271064b2841ef1aff 100644 (file)
@@ -2148,8 +2148,8 @@ class Sequence(DefaultGenerator):
 
     def __init__(self, name, start=None, increment=None, minvalue=None,
                  maxvalue=None, nominvalue=None, nomaxvalue=None, cycle=None,
-                 schema=None, optional=False, quote=None, metadata=None,
-                 quote_schema=None,
+                 schema=None, cache=None, order=None, optional=False,
+                 quote=None, metadata=None, quote_schema=None,
                  for_update=False):
         """Construct a :class:`.Sequence` object.
 
@@ -2216,6 +2216,19 @@ class Sequence(DefaultGenerator):
          schema name when a :class:`.MetaData` is also present are the same
          as that of :paramref:`.Table.schema`.
 
+        :param cache: optional integer value; number of future values in the
+         sequence which are calculated in advance.  Renders the CACHE keyword
+         understood by Oracle and PostgreSQL.
+
+         .. versionadded:: 1.1.12
+
+        :param order: optional boolean value; if true, renders the
+         ORDER keyword, understood by Oracle, indicating the sequence is
+         definitively ordered.   May be necessary to provide deterministic
+         ordering using Oracle RAC.
+
+         .. versionadded:: 1.1.12
+
         :param optional: boolean value, when ``True``, indicates that this
          :class:`.Sequence` object only needs to be explicitly generated
          on backends that don't provide another way to generate primary
@@ -2271,6 +2284,8 @@ class Sequence(DefaultGenerator):
         self.nominvalue = nominvalue
         self.nomaxvalue = nomaxvalue
         self.cycle = cycle
+        self.cache = cache
+        self.order = order
         self.optional = optional
         if schema is BLANK_SCHEMA:
             self.schema = schema = None
index 3cc7e715d2851bdf263250989b95dec05cdd17f9..3c4ccc0502b05792dca30c7fedfff9c91cfe9ff6 100644 (file)
@@ -962,6 +962,18 @@ class SequenceDDLTest(fixtures.TestBase, testing.AssertsCompiledSQL):
             "CREATE SEQUENCE foo_seq START WITH 1 MAXVALUE 10 CYCLE",
         )
 
+        self.assert_compile(
+            CreateSequence(Sequence(
+                            'foo_seq', cache=1000, order=True)),
+            "CREATE SEQUENCE foo_seq CACHE 1000 ORDER",
+        )
+
+        self.assert_compile(
+            CreateSequence(Sequence(
+                            'foo_seq', order=True)),
+            "CREATE SEQUENCE foo_seq ORDER",
+        )
+
         self.assert_compile(
             DropSequence(Sequence('foo_seq')),
             "DROP SEQUENCE foo_seq",