diff options
| author | Gord Thompson <gord@gordthompson.com> | 2019-11-21 09:43:40 -0500 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2019-11-26 11:06:37 -0500 |
| commit | 6f99bdf013f3a0637f0544c4c3daeac0392553d6 (patch) | |
| tree | 806937a8f44eddd254e41ed7597371a87d2108fa /lib/sqlalchemy/testing/requirements.py | |
| parent | d933ddd503a1ca0a7c562c51c503139c541e707e (diff) | |
| download | sqlalchemy-6f99bdf013f3a0637f0544c4c3daeac0392553d6.tar.gz | |
Add sequence support for MariaDB 10.3+.
Added support for use of the :class:`.Sequence` construct with MariaDB 10.3
and greater, as this is now supported by this database. The construct
integrates with the :class:`.Table` object in the same way that it does for
other databases like PostrgreSQL and Oracle; if is present on the integer
primary key "autoincrement" column, it is used to generate defaults. For
backwards compatibility, to support a :class:`.Table` that has a
:class:`.Sequence` on it to support sequence only databases like Oracle,
while still not having the sequence fire off for MariaDB, the optional=True
flag should be set, which indicates the sequence should only be used to
generate the primary key if the target database offers no other option.
Fixes: #4976
Closes: #4996
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/4996
Pull-request-sha: cb2e1426ea0b6bc6c93dbe8f033a11df9d8c4915
Change-Id: I507bc405eee6cae2c5991345d0eac53a37fe7512
Diffstat (limited to 'lib/sqlalchemy/testing/requirements.py')
| -rw-r--r-- | lib/sqlalchemy/testing/requirements.py | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/lib/sqlalchemy/testing/requirements.py b/lib/sqlalchemy/testing/requirements.py index 5b26ac72e..8bbb7ec45 100644 --- a/lib/sqlalchemy/testing/requirements.py +++ b/lib/sqlalchemy/testing/requirements.py @@ -431,6 +431,13 @@ class SuiteRequirements(Requirements): ) @property + def no_sequences(self): + """the oppopsite of "sequences", DB does not support sequences at + all.""" + + return exclusions.NotPredicate(self.sequences) + + @property def sequences_optional(self): """Target database supports sequences, but also optionally as a means of generating new PK values.""" @@ -444,6 +451,24 @@ class SuiteRequirements(Requirements): ) @property + def supports_lastrowid(self): + """target database / driver supports cursor.lastrowid as a means + of retrieving the last inserted primary key value. + + note that if the target DB supports sequences also, this is still + assumed to work. This is a new use case brought on by MariaDB 10.3. + + """ + return exclusions.only_if( + [lambda config: config.db.dialect.postfetch_lastrowid] + ) + + @property + def no_lastrowid_support(self): + """the opposite of supports_lastrowid""" + return exclusions.NotPredicate(self.supports_lastrowid) + + @property def reflects_pk_names(self): return exclusions.closed() |
