summaryrefslogtreecommitdiff
path: root/lib
Commit message (Collapse)AuthorAgeFilesLines
...
* | Merge "MSSQL 2014 OFFSET/FETCH syntax support"mike bayer2020-02-071-3/+45
|\ \ | |/ |/|
| * MSSQL 2014 OFFSET/FETCH syntax supportElkin2020-02-071-3/+45
| | | | | | | | | | | | | | | | | | | | | | | | | | | | SQL Server OFFSET and FETCH keywords are now used for limit/offset, rather than using a window function, for SQL Server versions 11 and higher. TOP is still used for a query that features only LIMIT. Pull request courtesy Elkin. Fixes: #5084 Closes: #5125 Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/5125 Pull-request-sha: a45b7f73090d2053e3a7020d4e3d7fabb0c5627d Change-Id: Id6a01ba30caac87d7d3d92c3903cdfd77fbcee5e
* | Document SQLite "mixed binary" behaviorMike Bayer2020-02-061-0/+38
|/ | | | | | | | | | | The Pysqlite driver can store a string value with or without an indicator that the value is to be retrieved as bytes or as a unicode string object. To suit the use case where a SQLite database has mixed values on a row by row basis, provide a recipe for a MixedBinary datatype. Change-Id: I9a166bd6fc673d8d46a53ab9697cb3d412e5fcee References: #5073
* Do away with pool._refsMike Bayer2020-02-014-57/+8
| | | | | | | | | | | | | This collection was added only for the benefit of unit tests and is unnecessary for the pool to function. As SQLAlchemy 2.0 will be removing the automatic handling of connections that are garbage collection, remove this collection so that we ultimately don't need a weakref handler to do anything within the pool. The handler will do nothing other than emit a warning that a connection was dereferenced without being explicitly returned to the pool, invalidated, or detached. Change-Id: I4ca196270d5714efbac44dbf6f034e8c7f0af58a
* Merge "Warn for runid changing in load events; add restore_load_context flag"mike bayer2020-01-314-28/+198
|\
| * Warn for runid changing in load events; add restore_load_context flagMike Bayer2020-01-314-28/+198
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Added a new flag :paramref:`.InstanceEvents.restore_load_context` and :paramref:`.SessionEvents.restore_load_context` which apply to the :meth:`.InstanceEvents.load`, :meth:`.InstanceEvents.refresh`, and :meth:`.SessionEvents.loaded_as_persistent` events, which when set will restore the "load context" of the object after the event hook has been called. This ensures that the object remains within the "loader context" of the load operation that is already ongoing, rather than the object being transferred to a new load context due to refresh operations which may have occurred in the event. A warning is now emitted when this condition occurs, which recommends use of the flag to resolve this case. The flag is "opt-in" so that there is no risk introduced to existing applications. The change additionally adds support for the ``raw=True`` flag to session lifecycle events. Fixes: #5129 Change-Id: I2912f48ac8c5636297d63ed383454930e8e9a6a3
* | Merge "Raise for unexpected polymorphic identity"mike bayer2020-01-302-11/+37
|\ \ | |/ |/|
| * Raise for unexpected polymorphic identityMike Bayer2020-01-292-11/+37
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A query that is against an mapped inheritance subclass which also uses :meth:`.Query.select_entity_from` or a similar technique in order to provide an existing subquery to SELECT from, will now raise an error if the given subquery returns entities that do not correspond to the given subclass, that is, they are sibling or superclasses in the same hierarchy. Previously, these would be returned without error. Additionally, if the inheritance mapping is a single-inheritance mapping, the given subquery must apply the appropriate filtering against the polymorphic discriminator column in order to avoid this error; previously, the :class:`.Query` would add this criteria to the outside query however this interferes with some kinds of query that return other kinds of entities as well. Fixes: #5122 Change-Id: I60cf8c1300d5bb279ad99f0f01fefe7e008a159b
* | Merge "Accommodate for base class when adjusting path for with_polymorphic"mike bayer2020-01-281-1/+0
|\ \
| * | Accommodate for base class when adjusting path for with_polymorphicMike Bayer2020-01-281-1/+0
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | Fixed an additional regression in the same area as that of :ticket:`5080` introduced in 1.3.0b3 via :ticket:`4468` where the ability to create a joined option across a :func:`.with_polymorphic` into a relationship against the base class of that with_polymorphic, and then further into regular mapped relationships would fail as the base class component would not add itself to the load path in a way that could be located by the loader strategy. The changes applied in :ticket:`5080` have been further refined to also accommodate this scenario. Fixes: #5121 Change-Id: I9753dbbcb7b7640c995ad983a6d04b36fa18cf54
* | Add pyprojectFederico Caselli2020-01-273-3/+4
|/ | | | | | | | | | | | | - Added pyproject.toml with black arguments - Updated black version in precommit hook - Reformatted the code Fixes: #5100 Closes: #5103 Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/5103 Pull-request-sha: 795fd5f896be4a07a2b18e6525674b815ac17593 Change-Id: I14eedbaa51fb531cbf90fcefe6a1e07c8a565625
* Merge "Refactor test provisioning to dialect-level files"mike bayer2020-01-2612-317/+423
|\
| * Refactor test provisioning to dialect-level filesGord Thompson2020-01-2612-317/+423
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes: #5085 <!-- Provide a general summary of your proposed changes in the Title field above --> Move dialect-specific provisioning code to dialect-level copies of provision.py. <!-- 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: #5092 Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/5092 Pull-request-sha: 25b9b7a9800549fb823576af8674e8d33ff4b2c1 Change-Id: Ie0b4a69aa472a60bdbd825e04c8595382bcc98e1
* | Deprecate empty or_() and and_()Federico Caselli2020-01-252-30/+103
|/ | | | | | | | | | | | | | | | | | | | | | | Creating an :func:`.and_` or :func:`.or_` construct with no arguments or empty ``*args`` will now emit a deprecation warning, as the SQL produced is a no-op (i.e. it renders as a blank string). This behavior is considered to be non-intuitive, so for empty or possibly empty :func:`.and_` or :func:`.or_` constructs, an appropriate default boolean should be included, such as ``and_(True, *args)`` or ``or_(False, *args)``. As has been the case for many major versions of SQLAlchemy, these particular boolean values will not render if the ``*args`` portion is non-empty. As there are some internal cases where an empty and_() construct is used in order to build an optional WHERE expression, a private utility function is added to suit this use case. Co-authored-by: Mike Bayer <mike_mp@zzzcomputing.com> Fixes: #5054 Closes: #5062 Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/5062 Pull-request-sha: 5ca2f27281977d74e390148c0fb8deaa0e0e4ad9 Change-Id: I599b9c8befa64d9a59a35ad7dd84ff400e3aa647
* Merge "Add keywords to MutableList.sort()"mike bayer2020-01-241-2/+2
|\
| * Add keywords to MutableList.sort()Mike Bayer2020-01-231-2/+2
| | | | | | | | | | | | | | | | Added keyword arguments to the :meth:`.MutableList.sort` function so that a key function as well as the "reverse" keyword argument can be provided. Fixes: #5114 Change-Id: Iefb29e1ccadfad6ecba558ce575029307001b88e
* | Merge "Add test requirement: indexes_with_ascdesc"mike bayer2020-01-242-2/+11
|\ \
| * | 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 "InstanceState default path is RootRegistry, not tuple"mike bayer2020-01-232-2/+19
|\ \ \
| * | | InstanceState default path is RootRegistry, not tupleMike Bayer2020-01-222-2/+19
| | |/ | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixed regression caused in 1.3.13 by :ticket:`5056` where a refactor of the ORM path registry system made it such that a path could no longer be compared to an empty tuple, which can occur in a particular kind of joined eager loading path. The "empty tuple" use case has been resolved so that the path registry is compared to a path registry in all cases; the :class:`.PathRegistry` object itself now implements ``__eq__()`` and ``__ne__()`` methods which will take place for all equality comparisons and continue to succeed in the not anticipated case that a non- :class:`.PathRegistry` object is compared, while emitting a warning that this object should not be the subject of the comparison. Fixes: #5110 Change-Id: I6cab6cd771c131d12b17939b369212f12c6bee16
* | | Query linter optionAlessio Bogon2020-01-227-23/+211
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Added "from linting" as a built-in feature to the SQL compiler. This allows the compiler to maintain graph of all the FROM clauses in a particular SELECT statement, linked by criteria in either the WHERE or in JOIN clauses that link these FROM clauses together. If any two FROM clauses have no path between them, a warning is emitted that the query may be producing a cartesian product. As the Core expression language as well as the ORM are built on an "implicit FROMs" model where a particular FROM clause is automatically added if any part of the query refers to it, it is easy for this to happen inadvertently and it is hoped that the new feature helps with this issue. The original recipe is from: https://github.com/sqlalchemy/sqlalchemy/wiki/FromLinter The linter is now enabled for all tests in the test suite as well. This has necessitated that a lot of the queries be adjusted to not include cartesian products. Part of the rationale for the linter to not be enabled for statement compilation only was to reduce the need for adjustment for the many test case statements throughout the test suite that are not real-world statements. This gerrit is adapted from Ib5946e57c9dba6da428c4d1dee6760b3e978dda0. Fixes: #4737 Change-Id: Ic91fd9774379f895d021c3ad564db6062299211c Closes: #4830 Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/4830 Pull-request-sha: f8a21aa6262d1bcc9ff0d11a2616e41fba97a47a
* | Merge "Reorganize core event modules to avoid import cycles"mike bayer2020-01-2210-1295/+1323
|\ \
| * | Reorganize core event modules to avoid import cyclesMike Bayer2020-01-2110-1295/+1323
| |/ | | | | | | | | | | | | | | | | sqlalchemy.sql.naming was causing a full import of engine due to the DDLEvents dependency. Break out pool, DDL and engine events into new modules specific to those packages; resolve some other import cycles in Core also. Change-Id: Ife8d217e58a26ab3605dd80ee70837968f957eaf
* | Clarify documentation for lazy_loaded_fromMike Bayer2020-01-221-3/+25
| | | | | | | | | | | | | | | | | | | | | | This attribute was never available in conjunction with mapper options, and additionally the use of baked queries in the lazy loader strategy prevent this attribute from being reliably available within the before_compile hook unless baked queries are turned off entirely. Fixes: #5109 Change-Id: I5fa12c68463d20475e7470647a784efe846b8af7
* | Adjust natural path to relationship's base mapper for aliased class alsoMike Bayer2020-01-201-43/+53
|/ | | | | | | | | | | | Fixed regression in loader options introduced in 1.3.0b3 via :ticket:`4468` where the ability to create a loader option using :meth:`.PropComparator.of_type` targeting an aliased entity that is an inheriting subclass of the entity which the preceding relationship refers to would fail to produce a matching path. See also :ticket:`5082` fixed in this same release which involves a similar kind of issue. Fixes: #5107 Change-Id: I5c6717b925060c3f8da42190d1f00d05248befd8
* Improve regex parsing of CHECK constraints for PostgreSQL.Gord Thompson2020-01-181-2/+3
| | | | | | | | | | | | | Fixed issue where the PostgreSQL dialect would fail to parse a reflected CHECK constraint that was a boolean-valued function (as opposed to a boolean-valued expression). Fixes: #5039 Closes: #5044 Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/5044 Pull-request-sha: b6903c656422abf658c4cc88b8cd03291d3a50f8 Change-Id: I7d39b104a8ce346cb593d541c1b4e5eab88867f9
* Merge "apply asbool reduction to the onclause in join()"mike bayer2020-01-182-1/+103
|\
| * apply asbool reduction to the onclause in join()Mike Bayer2020-01-172-1/+103
| | | | | | | | | | | | | | | | | | | | 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-1721-631/+25
|/ | | | | | | | | | | | | | | | | | | | | | 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-152-2/+2
|\ | | | | | | Change-Id: Ie8e0d631f7c6271bcd8173065506e85130b754c4
| * Remove return statement in __init__.Heckad2020-01-042-2/+2
| |
* | Establish that contains_eager()->alias can be replaced by of_typeMike Bayer2020-01-142-10/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | One test in test_of_type was creating a cartesian product because contains_eager() was used with "alias" to refer to a with_polymorphic(), but the wp was not used with of_type(), so the pathing did not know that additional entities were present. while the docs indicate that of_type() should be used, there is no reason to use "alias" when you are using of_type(). Attempts to make this automatic don't work as the current usage contract with "alias" is that the contains_eager() chain can continue along in terms of the base entities, which is another example of the implicit swapping of entities for an aliased version of themselves that really should be entirely marked as deprecated throughout 1.4 and removed in 2.0. So instead, add test coverage for the of_type() versions of things and begin to make the case that we can remove "alias" entirely, where previously we thought we would only deprecate the string form. Fixes: #5096 Change-Id: Ia7b021c4044332ab3282267815f208da64410e95
* | Adjust use_mapper_path rule for poly subclassesMike Bayer2020-01-132-7/+47
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We must change the approach from 2734439 as the information loss is breaking subquery eager loading. Move the adjustment into a deeper set of logic inside of path_regsitry. We can distinguish between a path that will "naturally" build from an aliased entity at the base, vs. one that will "naturally" build on all raw mappers, based on if when we observe that we are being given a with_polymorphic(), if the existing parent path is already in progress or not. In general, we prefer paths to have as much of the original information as possible, and the "natural path" is supposed to be where the loader lookup stuff happens. Fixes: #5082 Change-Id: I3c0ee72993bae8a6f067bdef3dc9a57d83f64950
* | Fixes for table-bound version_id_col against mapped selectableMike Bayer2020-01-111-1/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixed bug where a versioning column specified on a mapper against a :func:`.select` construct where the version_id_col itself were against the underlying table would incur additional loads when accessed, even if the value were locally persisted by the flush. The actual fix is a result of the changes in :ticket:`4617`, by fact that a :func:`.select` object no longer has a ``.c`` attribute and therefore does not confuse the mapper into thinking there's an unknown column value present. Fixed bug in ORM versioning feature where assignment of an explicit version_id for a counter configured against a mapped selectable where version_id_col is against the underlying table would fail if the previous value were expired; this was due to the fact that the mapped attribute would not be configured with active_history=True. Fixes: #4194 Fixes: #4195 Change-Id: I214879f441f905bdd85a7411f90352af7399051d
* | Alter unique bound parameter key on deserializeMike Bayer2020-01-101-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixed bug in sqlalchemy.ext.serializer where a unique :class:`.BindParameter` object could conflict with itself if it were present in the mapping itself, as well as the filter condition of the query, as one side would be used against the non-deserialized version and the other side would use the deserialized version. Logic is added to :class:`.BindParameter` similar to its "clone" method which will uniquify the parameter name upon deserialize so that it doesn't conflict with its original. Fixes: #5086 Change-Id: Ie1edce137e92ac496c822831d038999be5d1fc2d
* | Set use_mapper_path=True for with_poly subentitiesMike Bayer2020-01-073-2/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | Fixed regression in joined eager loading introduced in 1.3.0b3 via :ticket:`4468` where the ability to create a joined option across a :func:`.with_polymorphic` into a polymorphic subclass using :meth:`.RelationshipProperty.of_type` and then further along regular mapped relationships would fail as the polymorphic subclass would not add itself to the load path in a way that could be located by the loader strategy. A tweak has been made to resolve this scenario. Fixes: #5082 Change-Id: I1c7b8d70ed94436c655e433bf34394b13d384c35
* | Merge "Enable F821"mike bayer2020-01-0714-26/+88
|\ \
| * | Enable F821Mike Bayer2020-01-0414-26/+88
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* | | Merge "Fix QueryContext ref cycle on joinedload"mike bayer2020-01-072-2/+1
|\ \ \
| * | | Fix QueryContext ref cycle on joinedloadCarson Ip2020-01-042-2/+1
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Avoid storing a reference to itself when dealing with create_eager_joins. Also fix a cheating test. Fixes: #5071 Closes: #5072 Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/5072 Pull-request-sha: 75ebaf7c91e96d7567eb5760be713dc134c58763 Change-Id: I511ddc0979b46f7928217347199eca4b1d0b4a49
* | | Support GenericFunction.name passed as a quoted_nameMike Bayer2020-01-062-3/+29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A function created using :class:`.GenericFunction` can now specify that the name of the function should be rendered with or without quotes by assigning the :class:`.quoted_name` construct to the .name element of the object. Prior to 1.3.4, quoting was never applied to function names, and some quoting was introduced in :ticket:`4467` but no means to force quoting for a mixed case name was available. Additionally, the :class:`.quoted_name` construct when used as the name will properly register its lowercase name in the function registry so that the name continues to be available via the ``func.`` registry. Fixes: #5079 Change-Id: I0653ab8b16e75e628ce82dbbc3d0f77f8336c407
* | | Merge "Fix cext for Python 2; ensure C extensions build successfully"mike bayer2020-01-042-11/+28
|\ \ \ | |_|/ |/| |
| * | Fix cext for Python 2; ensure C extensions build successfullyMike Bayer2020-01-042-11/+28
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* | Merge "Implement explicit autobegin step for Session"mike bayer2020-01-031-59/+89
|\ \
| * | Implement explicit autobegin step for SessionMike Bayer2020-01-031-59/+89
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The :class:`.Session` object no longer initates a :class:`.SessionTransaction` object immediately upon construction or after the previous transaction is closed; instead, "autobegin" logic now initiates the new :class:`.SessionTransaction` on demand when it is next needed. Rationale includes to remove reference cycles from a :class:`.Session` that has been closed out, as well as to remove the overhead incurred by the creation of :class:`.SessionTransaction` objects that are often discarded immediately. This change affects the behavior of the :meth:`.SessionEvents.after_transaction_create` hook in that the event will be emitted when the :class:`.Session` first requires a :class:`.SessionTransaction` be present, rather than whenever the :class:`.Session` were created or the previous :class:`.SessionTransaction` were closed. Interactions with the :class:`.Engine` and the database itself remain unaffected. Fixes: #5074 Change-Id: I00b656eb5ee03d87104257a214214617aacae16c
* | Merge "Use context managers for threading.Lock()"mike bayer2020-01-037-52/+17
|\ \ | |/ |/|
| * Use context managers for threading.Lock()Heckad2020-01-037-52/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | (zzzeek:) For some reason I thought that threading.Lock() still did not support context managers, at least in Python 2, however this does not seem to be the case. Co-authored-by: Mike Bayer <mike_mp@zzzcomputing.com> Closes: #5069 Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/5069 Pull-request-sha: efeac06dda5afdbe33abcf9b27c8b5b5725c8444 Change-Id: Ic64fcd99cd587bc70b4ecc5b45d8205b5c76eff2
* | happy new yearMike Bayer2020-01-01178-178/+178
|/ | | | Change-Id: I08440dc25e40ea1ccea1778f6ee9e28a00808235
* Source base cleanupsMike Bayer2020-01-016-16/+14
| | | | | | | | | | | | | | | 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
* Merge "Fix DATETIMEOFFSET formatting to preserve fractional seconds."mike bayer2020-01-011-2/+2
|\