]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Introduce :class:`.IdentityOptions` to store common parameters for
authorFederico Caselli <cfederico87@gmail.com>
Thu, 14 May 2020 20:57:56 +0000 (22:57 +0200)
committerFederico Caselli <cfederico87@gmail.com>
Fri, 15 May 2020 21:57:28 +0000 (23:57 +0200)
sequences and identity columns.

References: #5324
Change-Id: I72f7fc1a003456206b004d3d26306940f9c36414

doc/build/changelog/unreleased_13/5324_identity_options.rst [new file with mode: 0644]
doc/build/core/defaults.rst
lib/sqlalchemy/__init__.py
lib/sqlalchemy/schema.py
lib/sqlalchemy/sql/schema.py

diff --git a/doc/build/changelog/unreleased_13/5324_identity_options.rst b/doc/build/changelog/unreleased_13/5324_identity_options.rst
new file mode 100644 (file)
index 0000000..44d78e0
--- /dev/null
@@ -0,0 +1,6 @@
+.. change::
+    :tags: sql, schema
+    :tickets: 5324
+
+    Introduce :class:`.IdentityOptions` to store common parameters for
+    sequences and identity columns.
index f87d78c1a5abd3235821d04571767e151b081e70..6898324b661650a2acc12e8e75020c67bdb81f34 100644 (file)
@@ -650,3 +650,6 @@ Default Objects API
 
 .. autoclass:: Sequence
     :members:
+
+
+.. autoclass:: IdentityOptions
index e7f08759986ef699d48fcb4d20cab7ff79e42ddc..27e9fd1c0bed01f05f4a11cec8b746b27f6dfc9d 100644 (file)
@@ -21,6 +21,7 @@ from .schema import DefaultClause  # noqa
 from .schema import FetchedValue  # noqa
 from .schema import ForeignKey  # noqa
 from .schema import ForeignKeyConstraint  # noqa
+from .schema import IdentityOptions  # noqa
 from .schema import Index  # noqa
 from .schema import MetaData  # noqa
 from .schema import PrimaryKeyConstraint  # noqa
index 8a1fb0c1715bc26d86801e2cdc225ac18cb57d64..d6490f020104bd208571f4dd2b283f56def77a2c 100644 (file)
@@ -49,6 +49,7 @@ from .sql.schema import FetchedValue  # noqa
 from .sql.schema import ForeignKey  # noqa
 from .sql.schema import ForeignKeyConstraint  # noqa
 from .sql.schema import Index  # noqa
+from .sql.schema import IdentityOptions  # noqa
 from .sql.schema import MetaData  # noqa
 from .sql.schema import PrimaryKeyConstraint  # noqa
 from .sql.schema import SchemaItem  # noqa
index 08dc487d498c3ab3206b7da19ec1a39f8e146f3f..7b7a555267c90c14b25d3c69385d7537b28b84ad 100644 (file)
@@ -2315,7 +2315,60 @@ class ColumnDefault(DefaultGenerator):
         return "ColumnDefault(%r)" % (self.arg,)
 
 
-class Sequence(roles.StatementRole, DefaultGenerator):
+class IdentityOptions(object):
+    """Defines options for a named database sequence or an identity column.
+
+    .. versionadded:: 1.3.18
+
+    .. seealso::
+
+        :class:`.Sequence`
+
+    """
+
+    def __init__(
+        self,
+        start=None,
+        increment=None,
+        minvalue=None,
+        maxvalue=None,
+        nominvalue=None,
+        nomaxvalue=None,
+        cycle=None,
+        cache=None,
+        order=None,
+    ):
+        """Construct a :class:`.IdentityOptions` object.
+
+        See the :class:`.Sequence` documentation for a complete description
+        of the parameters
+
+        :param start: the starting index of the sequence.
+        :param increment: the increment value of the sequence.
+        :param minvalue: the minimum value of the sequence.
+        :param maxvalue: the maximum value of the sequence.
+        :param nominvalue: no minimum value of the sequence.
+        :param nomaxvalue: no maximum value of the sequence.
+        :param cycle: allows the sequence to wrap around when the maxvalue
+         or minvalue has been reached.
+        :param cache: optional integer value; number of future values in the
+         sequence which are calculated in advance.
+        :param order: optional boolean value; if true, renders the
+         ORDER keyword.
+         name.
+        """
+        self.start = start
+        self.increment = increment
+        self.minvalue = minvalue
+        self.maxvalue = maxvalue
+        self.nominvalue = nominvalue
+        self.nomaxvalue = nomaxvalue
+        self.cycle = cycle
+        self.cache = cache
+        self.order = order
+
+
+class Sequence(IdentityOptions, roles.StatementRole, DefaultGenerator):
     """Represents a named database sequence.
 
     The :class:`.Sequence` object represents the name and configurational
@@ -2373,7 +2426,7 @@ class Sequence(roles.StatementRole, DefaultGenerator):
     ):
         """Construct a :class:`.Sequence` object.
 
-        :param name: The name of the sequence.
+        :param name: the name of the sequence.
         :param start: the starting index of the sequence.  This value is
          used when the CREATE SEQUENCE command is emitted to the database
          as the value of the "START WITH" clause.   If ``None``, the
@@ -2431,7 +2484,7 @@ class Sequence(roles.StatementRole, DefaultGenerator):
 
          .. versionadded:: 1.0.7
 
-        :param schema: Optional schema name for the sequence, if located
+        :param schema: optional schema name for the sequence, if located
          in a schema other than the default.  The rules for selecting the
          schema name when a :class:`_schema.MetaData`
          is also present are the same
@@ -2457,10 +2510,10 @@ class Sequence(roles.StatementRole, DefaultGenerator):
          this sequence on the PostgreSQL backend, where the SERIAL keyword
          creates a sequence for us automatically".
         :param quote: boolean value, when ``True`` or ``False``, explicitly
-         forces quoting of the schema name on or off.  When left at its
-         default of ``None``, normal quoting rules based on casing and
-         reserved words take place.
-        :param quote_schema: set the quoting preferences for the ``schema``
+         forces quoting of the :paramref:`_schema.Sequence.name` on or off.
+         When left at its default of ``None``, normal quoting rules based
+         on casing and reserved words take place.
+        :param quote_schema: Set the quoting preferences for the ``schema``
          name.
 
         :param metadata: optional :class:`_schema.MetaData` object which this
@@ -2502,17 +2555,20 @@ class Sequence(roles.StatementRole, DefaultGenerator):
          no value is otherwise present for that column in the statement.
 
         """
-        super(Sequence, self).__init__(for_update=for_update)
+        DefaultGenerator.__init__(self, for_update=for_update)
+        IdentityOptions.__init__(
+            self,
+            start=start,
+            increment=increment,
+            minvalue=minvalue,
+            maxvalue=maxvalue,
+            nominvalue=nominvalue,
+            nomaxvalue=nomaxvalue,
+            cycle=cycle,
+            cache=cache,
+            order=order,
+        )
         self.name = quoted_name(name, quote)
-        self.start = start
-        self.increment = increment
-        self.minvalue = minvalue
-        self.maxvalue = maxvalue
-        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