summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/testing
Commit message (Collapse)AuthorAgeFilesLines
* Add test requirement: indexes_with_ascdescGord Thompson2020-01-232-2/+11
| | | | | | | | | | | | | There are some tests for indexes that include DESC in the columns. Firebird and maybe others don't support this concept, so put it under a requirement rule. Fixes: #5106 Closes: #5108 Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/5108 Pull-request-sha: 4b1560f28a52feb7d4a6c5d828f587a735d6a40b Change-Id: I4744246005f3af263ea1e028d8a46795b87de62c
* Merge "apply asbool reduction to the onclause in join()"mike bayer2020-01-181-0/+102
|\
| * apply asbool reduction to the onclause in join()Mike Bayer2020-01-171-0/+102
| | | | | | | | | | | | | | | | | | | | The :func:`.true` and :func:`.false` operators may now be applied as the "onclause" of a :func:`.sql.join` on a backend that does not support "native boolean" expressions, e.g. Oracle or SQL Server, and the expression will render as "1=1" for true and "1=0" false. This is the behavior that was introduced many years ago in :ticket:`2804` for and/or expressions. Change-Id: I85311c31c22d6e226c618f8840f6b95eca611153
* | Remove jython code, remove all jython / pypy symbolsMike Bayer2020-01-175-31/+13
|/ | | | | | | | | | | | | | | | | | | | | | Removed all dialect code related to support for Jython and zxJDBC. Jython has not been supported by SQLAlchemy for many years and it is not expected that the current zxJDBC code is at all functional; for the moment it just takes up space and adds confusion by showing up in documentation. At the moment, it appears that Jython has achieved Python 2.7 support in its releases but not Python 3. If Jython were to be supported again, the form it should take is against the Python 3 version of Jython, and the various zxJDBC stubs for various backends should be implemented as a third party dialect. Additionally modernized logic that distinguishes between "cpython" and "pypy" to instead look at platform.python_distribution() which reliably tells us if we are cPython or not; all booleans which previously checked for pypy and sometimes jython are now converted to be "not cpython", this impacts the test suite for tests that are cPython centric. Fixes: #5094 Change-Id: I226cb55827f997daf6b4f4a755c18e7f4eb8d9ad
* Merge remote-tracking branch 'origin/pr/5077'Mike Bayer2020-01-151-1/+1
|\ | | | | | | Change-Id: Ie8e0d631f7c6271bcd8173065506e85130b754c4
| * Remove return statement in __init__.Heckad2020-01-041-1/+1
| |
* | Merge "Enable F821"mike bayer2020-01-073-3/+28
|\ \
| * | Enable F821Mike Bayer2020-01-043-3/+28
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In Ia63a510f9c1d08b055eef62cf047f1f427f0450c we introduced "lambda combinations" which use a bit of function closure inspection in order to allow for testing combinations that make use of symbols that come from test fixtures, or from the test itself. Two problems. One is that we can't use F821 flake8 rule without either adding lots of noqas, skipping the file, or adding arguments to the lambdas themselves that are then populated, which makes for a very verbose system. The other is that the system is already verbose with all those lambdas and the magic in use is a non-explicit kind, hence F821 reminds us that if we can improve upon this, we should. So let's improve upon it by making it so that the "lambda" is just once and up front for the whole thing, and let it accept the arguments directly. This still requires magic, because these test cases need to resolve at test collection time, not test runtime. But we will instead substitute a namespace up front that can be coerced into its desired form within the tests. Additionally, there's a little bit of py2k compatible type annotations present; f821 is checking these, so we have to add those imports also using the TYPE_CHECKING boolean so they don't take place in py2k. Change-Id: Idb7e7a0c8af86d9ab133f548511306ef68cdba14
* | Fix cext for Python 2; ensure C extensions build successfullyMike Bayer2020-01-041-10/+13
|/ | | | | | | | | | | | | | | | | | | | The C extensions have been broken since cc718cccc0bf8a01abdf4068c however CI did not find this, because the build degraded to non-C extensions without failing. Ensure that if cext is set, there is no fallback to non-cext build if the C extension build fails. Repair C related issues introduced in cc718cccc0bf8a01abdf4068c. As C extensions have been silently failing on 2.7 for some commits, the callcounts also needed to be adjusted for recent performance-related changes. That in turn required a fix to the profiling decorator to use signature rewriting in order to support py.test's fixture mechanism under Python 2, usage introduced under profiling in 89bf6d80a9. Fixes: #5076 Change-Id: Id968f10c85d6bf489298b1c318a1f869ad3e7d80
* happy new yearMike Bayer2020-01-0116-16/+16
| | | | Change-Id: I08440dc25e40ea1ccea1778f6ee9e28a00808235
* Source base cleanupsMike Bayer2020-01-011-3/+1
| | | | | | | | | | | | | | | in trying to apply 2020 copyright to files, the pre-commit hooks complain about random file issues. - remove old corrections.py utility, this had something to do with repairing refs in the sphinx docs - run pre commit hooks on all files - formatting adjustments to work around code formatting collisions (long import lines that zimports can't rewrite correctly) Change-Id: I260744866f69e902eb93665c7c728ee94d3371a2
* Use expanding IN for all literal value IN expressionsMike Bayer2019-12-221-0/+22
| | | | | | | | | | | | | | | | | | | | | | | | The "expanding IN" feature, which generates IN expressions at query execution time which are based on the particular parameters associated with the statement execution, is now used for all IN expressions made against lists of literal values. This allows IN expressions to be fully cacheable independently of the list of values being passed, and also includes support for empty lists. For any scenario where the IN expression contains non-literal SQL expressions, the old behavior of pre-rendering for each position in the IN is maintained. The change also completes support for expanding IN with tuples, where previously type-specific bind processors weren't taking effect. As part of this change, a more explicit separation between "literal execute" and "post compile" bound parameters is being made; as the "ansi bind rules" feature is rendering bound parameters inline, as we now support "postcompile" generically, these should be used here, however we have to render literal values at execution time even for "expanding" parameters. new test fixtures etc. are added to assert everything goes to the right place. Fixes: #4645 Change-Id: Iaa2b7bfbfaaf5b80799ee17c9b8507293cba6ed1
* Implement random_choices for Python 2Mike Bayer2019-12-201-0/+15
| | | | | | | Apparently py2k has no random.choices, so make a quick one for the tests that use it. Change-Id: Iadc3442b35f400b5bab0f711b7d3ede5dbc28f52
* Don't apply aliasing + adaption for simple relationship joinsMike Bayer2019-12-191-2/+5
| | | | | | | | | | | Identified a performance issue in the system by which a join is constructed based on a mapped relationship. The clause adaption system would be used for the majority of join expressions including in the common case where no adaptation is needed. The conditions under which this adaptation occur have been refined so that average non-aliased joins along a simple relationship without a "secondary" table use about 70% less function calls. Change-Id: Ifbe04214576e5a9fac86ca80c1dc7145c27cd50a
* Introduce lambda combinationsMike Bayer2019-12-043-2/+26
| | | | | | | | | | | | As the ORM's combinatoric tests mostly use entities and table metadata that's defined in fixtures, we can't use @testing.combinations directly as it takes place at the module level. Instead we use lambdas, but to reduce verbosity we use a code replacement so that the namespace of the lambda can be provided at runtime rather than module import time. Change-Id: Ia63a510f9c1d08b055eef62cf047f1f427f0450c
* Gracefully degrade for SQLite JSON receiving direct numeric valueMike Bayer2019-11-291-0/+32
| | | | | | | | | | | | | | | | Fixed issue to workaround SQLite's behavior of assigning "numeric" affinity to JSON datatypes, first described at :ref:`change_3850`, which returns scalar numeric JSON values as a number and not as a string that can be JSON deserialized. The SQLite-specific JSON deserializer now gracefully degrades for this case as an exception and bypasses deserialization for single numeric values, as from a JSON perspective they are already deserialized. Also adds a combinatoric fixture for JSON single values within the dialect-general test suite. Fixes: #5014 Change-Id: Id38221dce1271fec527ca198b23908547b25d8a0
* Merge "Add sequence support for MariaDB 10.3+."mike bayer2019-11-261-0/+25
|\
| * Add sequence support for MariaDB 10.3+.Gord Thompson2019-11-262-5/+33
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* | Don't clear metadata in TablesTest setupMike Bayer2019-11-261-5/+8
| | | | | | | | | | | | | | | | | | Some upcoming commits will make use of @metadata_fixture within a TablesTest class. As the fixture takes place before setup, remove anything in setup that would interfere with it. Change-Id: I4f16889c4c02cb2835dcf4886eb09ece848d8109 References: I507bc405eee6cae2c5991345d0eac53a37fe7512
* | Generalize DescriptorProps.uses_objectsMike Bayer2019-11-231-1/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously, uses_objects was specific to the SynonymAttribute; generalize it so that it defaults to False for other DescriptorProps. Immediate fix is against CompositeProperty. Fixed regression introduced in 1.3.0 related to the association proxy refactor in :ticket:`4351` that prevented :func:`.composite` attributes from working in terms of an association proxy that references them. Add test coverage for association proxies that refer to Composite attributes as endpoints. Fixes: #5000 Change-Id: Iea6fb1bd3314d861a9bc22491b0ae1e6c5e6340d
* | Introduce flag combinations fixtureMike Bayer2019-11-222-0/+51
|/ | | | | | | A helper for @testing.combinations when we just have lots of true/false combinations as is the case with some ORM tests. Change-Id: I9f2de97ce5b2487411ed610b8d41169c1052bd8f
* Merge "Test fixture improvements"mike bayer2019-11-115-5/+25
|\
| * Test fixture improvementsMike Bayer2019-11-115-5/+25
| | | | | | | | | | | | | | | | | | | | - ensure we escape out percent signs when a CompiledSQL or RegexSQL has percent signs in the SQL or in the parameter repr - to support combinations, print out complete test name in skip messages, py.test environment gives us a way to do this Change-Id: Ia9e62f7c1026c1465986144c5757e35fc164a2b8
* | Add type accessors for JSON indexed/pathed element accessMike Bayer2019-11-112-87/+209
|/ | | | | | | | | | | | | | | Added new accessors to expressions of type :class:`.JSON` to allow for specific datatype access and comparison, covering strings, integers, numeric, boolean elements. This revises the documented approach of CASTing to string when comparing values, instead adding specific functionality into the PostgreSQL, SQlite, MySQL dialects to reliably deliver these basic types in all cases. The change also delivers a new feature to the test exclusions system so that combinations and exclusions can be used together. Fixes: #4276 Change-Id: Ica5a926c060feb40a0a7cd60b9d6e061d7825728
* Support exclusion rules in combinationsMike Bayer2019-11-092-12/+73
| | | | | | | | | | | Like py.test we need to be able to mark certain combination elements with exclusion rules. Add additional logic to pytestlplugin and exclusions so that the exclusion decorators can be added to the combination tuples, where they will be applied to the decorated function along with a qualifier that the test arguments need to match what's given. Change-Id: I15d2839954d77a252bab5aaf6e3fd9f388c99dd5
* Fix exclusions for multiple fails_onMike Bayer2019-11-091-11/+10
| | | | | | | | | | | | | | The fails_on decorator was not being interpreted correctly when multiple were present. Remove obsolete fails_on from test_types that no longer take place for MySQL, Oracle. Ensure test_types tests are using __backend__ mark currently failing Oracle interval tests Change-Id: If8db0c02b31a8008fd1673c2380f1f974c3806a6
* Support for generated columnsCaselIT2019-11-083-2/+54
| | | | | | | | | | | | | | | | | | | | | | | | | | Added DDL support for "computed columns"; these are DDL column specifications for columns that have a server-computed value, either upon SELECT (known as "virtual") or at the point of which they are INSERTed or UPDATEd (known as "stored"). Support is established for Postgresql, MySQL, Oracle SQL Server and Firebird. Thanks to Federico Caselli for lots of work on this one. ORM round trip tests included. The ORM makes use of existing FetchedValue support and no additional ORM logic is present for the basic feature. It has been observed that Oracle RETURNING does not return the new value of a computed column upon UPDATE; it returns the prior value. As this is very dangerous, a warning is emitted if a computed column is rendered into the RETURNING clause of an UPDATE statement. Fixes: #4894 Closes: #4928 Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/4928 Pull-request-sha: d39c521d5ac6ebfb4fb5b53846451de79752e64c Change-Id: I2610b2999a5b1b127ed927dcdaeee98b769643ce
* Disallow memory tests from running on WindowsMike Bayer2019-10-241-0/+11
| | | | | | | | | | These tests fail with multiprocess errors involving pickling of the profile file. The memory tests are not critical for windows development nor are the profiling tests overall as they are against platform independent measurements. Fixes: #4946 Change-Id: Iaeb3958e59ce7709ba6af3cf9d7baf2a4922bb9b
* Refactor dialect tests for combinationsMike Bayer2019-10-224-3/+28
| | | | | | | | | | | | | | Dialect tests tend to have a lot of lists of types, SQL constructs etc, convert as many of these to @combinations as possible. This is exposing that we don't have per-combination exclusion rules set up which is making things a little bit cumbersome. Also set up a fixture that does metadata + DDL. Change-Id: Ief820e48c9202982b0b1e181b87862490cd7b0c3
* Implement facade for pytest parametrize, fixtures, classlevelMike Bayer2019-10-204-18/+257
| | | | | | | | | | | | | | | | | | | Add factilities to implement pytest.mark.parametrize and pytest.fixtures patterns, which largely resemble things we are already doing. Ensure a facade is used, so that the test suite remains independent of py.test, but also tailors the functions to the more limited scope in which we are using them. Additionally, create a class-based version that works from the same facade. Several old polymorphic tests as well as two of the sql test are refactored to use the new features. Change-Id: I6ef8af1dafff92534313016944d447f9439856cf References: #4896
* - fix typoHeckad2019-10-191-1/+1
|
* pass executemany context to _repr_paramsMike Bayer2019-10-112-0/+15
| | | | | | | | | | | | | | | | | | Fixed bug where parameter repr as used in logging and error reporting needs additional context in order to distinguish between a list of parameters for a single statement and a list of parameter lists, as the "list of lists" structure could also indicate a single parameter list where the first parameter itself is a list, such as for an array parameter. The engine/connection now passes in an additional boolean indicating how the parameters should be considered. The only SQLAlchemy backend that expects arrays as parameters is that of psycopg2 which uses pyformat parameters, so this issue has not been too apparent, however as other drivers that use positional gain more features it is important that this be supported. It also eliminates the need for the parameter repr function to guess based on the parameter structure passed. Fixes: #4902 Change-Id: I086246ee0eb51484adbefd83e07295fa56576c5f
* Merge "Change Oracle max_identifier_length to 128"mike bayer2019-10-031-7/+0
|\
| * Change Oracle max_identifier_length to 128Mike Bayer2019-10-021-7/+0
| | | | | | | | | | | | | | | | | | | | | | | | The max_identifier_length for the Oracle dialect is now 128 characters by default, unless compatibility version less than 12.2 upon first connect, in which case the legacy length of 30 characters is used. This is a continuation of the issue as committed to the 1.3 series which adds max identifier length detection upon first connect as well as warns for the change in Oracle server. Fixes: #4857 Change-Id: I5b11edaebb54ec7f0e5456a785105838a1d752e5
* | call setinputsizes for cx_Oracle.DATETIMEMike Bayer2019-10-032-0/+37
|/ | | | | | | | | | | | | | | | | Restored adding cx_Oracle.DATETIME to the setinputsizes() call when a SQLAlchemy :class:`.Date`, :class:`.DateTime` or :class:`.Time` datatype is used, so that in the case where a bound parameter is passed as NULL in some complex queries (in particular this happens with some lazy load situations), the type is still present. This was removed in the 1.2 series for arbitrary reasons. Also adds a suite test for this generic situation. What's not clear is that do we really need setinputsizes() for all datatypes if we are supporting NULL in bound parameters. Fixes: #4886 Change-Id: If99215c31861f9ea6f60a30d47f2f320adc4797f
* Add max_identifier_length parameter; warn for OracleMike Bayer2019-10-021-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Added new :func:`.create_engine` parameter :paramref:`.create_engine.max_identifier_length`. This overrides the dialect-coded "max identifier length" in order to accommodate for databases that have recently changed this length and the SQLAlchemy dialect has not yet been adjusted to detect for that version. This parameter interacts with the existing :paramref:`.create_engine.label_length` parameter in that it establishes the maximum (and default) value for anonymously generated labels. The Oracle dialect now emits a warning if Oracle version 12.2 or greater is used, and the :paramref:`.create_engine.max_identifier_length` parameter is not set. The version in this specific case defaults to that of the "compatibility" version set in the Oracle server configuration, not the actual server version. In version 1.4, the default max_identifier_length for 12.2 or greater will move to 128 characters. In order to maintain forwards compatibility, applications should set :paramref:`.create_engine.max_identifier_length` to 30 in order to maintain the same length behavior, or to 128 in order to test the upcoming behavior. This length determines among other things how generated constraint names are truncated for statements like ``CREATE CONSTRAINT`` and ``DROP CONSTRAINT``, which means a the new length may produce a name-mismatch against a name that was generated with the old length, impacting database migrations. Fixes: #4857 Change-Id: Ib62efb00c6180c375869029b57353d90385d7950
* move pytest assert rewrite to conftest.pyMike Bayer2019-09-231-2/+0
| | | | | | | | | this seems to be the best place to put this as it is guaranteed before the module is imported. this is for the benefit of 3rd party dialects that also would have this in their conftest.py, so that they don't have to do the "bootstrap" loading hack. Change-Id: Ieae5324240e04a7919df46f4fca03f8db7a2af81
* Add req for nullable booleansMike Bayer2019-09-182-0/+7
| | | | | | | Access doesn't allow for Yes/No columns to store null, so add a rule for this. Change-Id: If9316cd05733e39fbd59a6f54024f6740b563041
* Add missing suite_level requirements "independent_connections"Mike Bayer2019-09-181-0/+7
| | | | | | | | In 14b1e6fe8e18d139846c1aba6761d4eea3dc25c3 we added suite-level requirements but did not add them to the base, causing failures in third party dialect test suites. Change-Id: I7edf0be86b814b508071c5c752fc2dd744a3d9ad
* Add missing suite level requirements from 2efd89d02941Mike Bayer2019-09-171-0/+10
| | | | | | | | In 2efd89d02941ab4267d6e2842963fd38b1539f6c we added suite-level requirements but did not add them to the base, causing failures in third party dialect test suites. Change-Id: Ic5f1a053f5c47166e1b12c613595823106c8736e
* Add missing suite level requirements from #4234Mike Bayer2019-09-171-0/+17
| | | | | | | | | In 9d5e117f6fcc38d8773bc943c615888dc8a3a819 we added suite-level requirements but did not add them to the base, causing failures in third party dialect test suites. Change-Id: I030b5d0fd957814dfce77a71b59babd9b5e3b1bc References: #4234
* Remove unnecessary util.callable usageSteven Loria2019-09-092-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes: #4850 <!-- Provide a general summary of your proposed changes in the Title field above --> ### Description <!-- Describe your changes in detail --> Removes usage of `util.callable`. ### Checklist <!-- go over following points. check them with an `x` if they do apply, (they turn into clickable checkboxes once the PR is submitted, so no need to do everything at once) --> This pull request is: - [ ] A documentation / typographical error fix - Good to go, no issue or tests are needed - [x] A short code fix - please include the issue number, and create an issue if none exists, which must include a complete example of the issue. one line code fixes without an issue and demonstration will not be accepted. - Please include: `Fixes: #<issue number>` in the commit message - please include tests. one line code fixes without tests will not be accepted. - [ ] A new feature implementation - please include the issue number, and create an issue if none exists, which must include a complete example of how the feature would look. - Please include: `Fixes: #<issue number>` in the commit message - please include tests. **Have a nice day!** Closes: #4851 Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/4851 Pull-request-sha: a0ccdff2cb74f5e944d8baccc269c382b591c8e2 Change-Id: I79918f44becbc5dbefdc7ff65128695c1cabed1d
* Render LIMIT/OFFSET conditions after compile on select dialectsMike Bayer2019-08-303-3/+212
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Added new "post compile parameters" feature. This feature allows a :func:`.bindparam` construct to have its value rendered into the SQL string before being passed to the DBAPI driver, but after the compilation step, using the "literal render" feature of the compiler. The immediate rationale for this feature is to support LIMIT/OFFSET schemes that don't work or perform well as bound parameters handled by the database driver, while still allowing for SQLAlchemy SQL constructs to be cacheable in their compiled form. The immediate targets for the new feature are the "TOP N" clause used by SQL Server (and Sybase) which does not support a bound parameter, as well as the "ROWNUM" and optional "FIRST_ROWS()" schemes used by the Oracle dialect, the former of which has been known to perform better without bound parameters and the latter of which does not support a bound parameter. The feature builds upon the mechanisms first developed to support "expanding" parameters for IN expressions. As part of this feature, the Oracle ``use_binds_for_limits`` feature is turned on unconditionally and this flag is now deprecated. - adds limited support for "unique" bound parameters within a text() construct. - adds an additional int() check within the literal render function of the Integer datatype and tests that non-int values raise ValueError. Fixes: #4808 Change-Id: Iace97d544d1a7351ee07db970c6bc06a19c712c6
* Remove mock dependencyMike Bayer2019-08-221-2/+1
| | | | | | | Mock is not needed over python 3.3, we need this tox requirement only for Python 2.7 right now. Change-Id: I06ae31f9fe6eaece0ec508e9431e4f8166a59684
* Use ternary when running conditional with Query._offsetMike Bayer2019-08-111-0/+9
| | | | | | | | | | Fixed bug where using :meth:`.Query.first` or a slice expression in conjunction with a query that has an expression based "offset" applied would raise TypeError, due to an "or" conditional against "offset" that did not expect it to be a SQL expression as opposed to an integer or None. Fixes: #4803 Change-Id: I56b97a5d23cb45427a27a90ab557fa1ac5c6739e
* Emit SET NAMES for all MySQL connections w charsetMike Bayer2019-08-111-1/+1
| | | | | | | | | | | | | | | | | The MySQL dialects will emit "SET NAMES" at the start of a connection when charset is given to the MySQL driver, to appease an apparent behavior observed in MySQL 8.0 that raises a collation error when a UNION includes string columns unioned against columns of the form CAST(NULL AS CHAR(..)), which is what SQLAlchemy's polymorphic_union function does. The issue seems to have affected PyMySQL for at least a year, however has recently appeared as of mysqlclient 1.4.4 based on changes in how this DBAPI creates a connection. As the presence of this directive impacts three separate MySQL charset settings which each have intricate effects based on their presense, SQLAlchemy will now emit the directive on new connections to ensure correct behavior. Fixes: #4804 Change-Id: If9d7ee00d0ccaf773972b564fe455e8e9edf6627
* Correct name for json_serializer / json_deserializer, document and testMike Bayer2019-08-081-0/+26
| | | | | | | | | | | | | The dialects that support json are supposed to take arguments ``json_serializer`` and ``json_deserializer`` at the create_engine() level, however the SQLite dialect calls them ``_json_serilizer`` and ``_json_deserilalizer``. The names have been corrected, the old names are accepted with a change warning, and these parameters are now documented as :paramref:`.create_engine.json_serializer` and :paramref:`.create_engine.json_deserializer`. Fixes: #4798 Change-Id: I1dbfe439b421fe9bb7ff3594ef455af8156f8851
* Implement checkfirst for Index.create(), Index.drop()Mike Bayer2019-08-061-1/+65
| | | | | | | | | | | The :meth:`.Index.create` and :meth:`.Index.drop` methods now have a parameter :paramref:`.Index.create.checkfirst`, in the same way as that of :class:`.Table` and :class:`.Sequence`, which when enabled will cause the operation to detect if the index exists (or not) before performing a create or drop operation. Fixes: #527 Change-Id: Idf994bc016359d0ae86cc64ccb20378115cb66d6
* Always include a schema name in SQLite PRAGMAMike Bayer2019-08-021-2/+32
| | | | | | | | | | | | | | Fixed bug where usage of "PRAGMA table_info" in SQLite dialect meant that reflection features to detect for table existence, list of table columns, and list of foreign keys, would default to any table in any attached database, when no schema name was given and the table did not exist in the base schema. The fix explicitly runs PRAGMA for the 'main' schema and then the 'temp' schema if the 'main' returned no rows, to maintain the behavior of tables + temp tables in the "no schema" namespace, attached tables only in the "schema" namespace. Fixes: #4793 Change-Id: I75bc03ef42581c46b98987510d2d2e701df07412
* Merge "Remove threadlocal engine strategy, engine strategies pool threadlocal"mike bayer2019-08-011-3/+3
|\