summaryrefslogtreecommitdiff
path: root/lib
Commit message (Collapse)AuthorAgeFilesLines
* Merge "remove "aliased class pool" caching approach" into mainHEADmainmike bayer2023-05-171-45/+28
|\
| * remove "aliased class pool" caching approachMike Bayer2023-05-131-45/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Modified the ``JoinedLoader`` implementation to use a simpler approach in one particular area where it previously used a cached structure that would be shared among threads. The rationale is to avoid a potential race condition which is suspected of being the cause of a particular crash that's been reported multiple times. The cached structure in question is still ultimately "cached" via the compiled SQL cache, so a performance degradation is not anticipated. The change also modifies the tests for None in context.secondary to ensure no None values are in this list, as this is suspected as being the immediate cause of the issue in #9777. The cached AliasedClass thing is suspected as being the origination of the cause, as under high concurrency many threads might all access that AliasedClass immediately, which seems a reasonable place that the "adapter returning None" symptom might be originating. As of yet we don't have a self-contained reproducer for the issue, some initial attempts with threads are not showing any issue. Fixes: #9777 Change-Id: I967588f280796c413e629b55b8d97d40c1164248
* | fix link issue, add ref for pytest-xdist pinFederico Caselli2023-05-151-1/+1
| | | | | | | | Change-Id: If565b2b6b968457f221eb84f0270f617618d3319
* | Avoid unnecessary nested exceptionsFederico Caselli2023-05-151-1/+3
| | | | | | | | Change-Id: Ibca9dc93f541992105cd915e02a3d3e9a0dbd67e
* | limit joinedload exclusion rules to immediate mapped columnsMike Bayer2023-05-143-3/+49
|/ | | | | | | | | | | Fixed issue where using additional relationship criteria with the :func:`_orm.joinedload` loader option, where the additional criteria itself contained correlated subqueries that referred to the joined entities and therefore also required "adaption" to aliased entities, would be excluded from this adaption, producing the wrong ON clause for the joinedload. Fixes: #9779 Change-Id: Idcfec3e760057fbf6a09c10ad67a0bb4bf70f03a
* include create_type in pg.ENUM.adapt; test all attrsMike Bayer2023-05-122-0/+5
| | | | | | | | | | | Fixed apparently very old issue where the :paramref:`_postgresql.ENUM.create_type` parameter, when set to its non-default of ``False``, would not be propagated when the :class:`_schema.Column` which it's a part of were copied, as is common when using ORM Declarative mixins. Fixes: #9773 Change-Id: I79a7c6f052ec39b42400d92bf591c791feca573b
* substitute include_table param rather than addingMike Bayer2023-05-121-3/+2
| | | | | | | | Fixed issue in :func:`_sql.values` construct where an internal compilation error would occur if the construct were used inside of a scalar subquery. Fixes: #9772 Change-Id: I4b0f756977abafbd2aabaaa0064baa875249ebe1
* Merge "return empty MappedColumn() at early pep-593 step" into mainmike bayer2023-05-111-3/+7
|\
| * return empty MappedColumn() at early pep-593 stepMike Bayer2023-05-101-3/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | Fixed issue in new ORM Annotated Declarative where using a :class:`_schema.ForeignKey` (or other column-level constraint) inside of :func:`_orm.mapped_column` which is then copied out to models via pep-593 ``Annotated`` would apply duplicates of each constraint to the :class:`_schema.Column` as produced in the target :class:`_schema.Table`, leading to incorrect CREATE TABLE DDL as well as migration directives under Alembic. Fixes: #9766 Change-Id: I8a3b2716bf393d1d2b5894f9f72b45fa59df1e08
* | skip ORM loading setups for non-toplevel DMLMike Bayer2023-05-111-26/+40
|/ | | | | | | | | | Fixed regression where use of :func:`_dml.update` or :func:`_dml_delete` within a :class:`_sql.CTE` construct, then used in a :func:`_sql.select`, would raise a :class:`.CompileError` as a result of ORM related rules for performing ORM-level update/delete statements. Fixes: #9767 Change-Id: I4eae9af86752b2e5fd64f7998f8a68754c349e4c
* Version 2.0.14 placeholderMike Bayer2023-05-101-1/+1
|
* add missing docsMike Bayer2023-05-102-1/+5
| | | | | | | ColumnExpressionArgument, as well as Oracle datatypes mentioned in the changelog Change-Id: I9496de9a1092af21f84492ff9d91a0cefb1a8a5b
* Merge "add full parameter types for ORM with_for_update" into mainmike bayer2023-05-105-13/+17
|\
| * add full parameter types for ORM with_for_updateMike Bayer2023-05-105-13/+17
| | | | | | | | | | | | | | | | | | | | Fixed typing for the :paramref:`_orm.Session.get.with_for_update` parameter of :meth:`_orm.Session.get` and :meth:`_orm.Session.refresh` (as well as corresponding methods on :class:`_asyncio.AsyncSession`) to accept boolean ``True`` and all other argument forms accepted by the parameter at runtime. Fixes: #9762 Change-Id: Ied4d37a269906b3d9be5ab7d31a2fa863360cced
* | Merge "fix test suite warnings" into mainmike bayer2023-05-106-14/+79
|\ \ | |/ |/|
| * fix test suite warningsMike Bayer2023-05-096-14/+79
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | fix a handful of warnings that were emitting but not raising, usually because they were inside an "expect_warnings" block. modify "expect_warnings" to always use "raise_on_any_unexpected" behavior; remove this parameter. Fixed issue in semi-private ``await_only()`` and ``await_fallback()`` concurrency functions where the given awaitable would remain un-awaited if the function threw a ``GreenletError``, which could cause "was not awaited" warnings later on if the program continued. In this case, the given awaitable is now cancelled before the exception is thrown. Change-Id: I33668c5e8c670454a3d879e559096fb873b57244
* | Merge "guard against duplicate mutable event listeners" into mainmike bayer2023-05-091-8/+20
|\ \
| * | guard against duplicate mutable event listenersMike Bayer2023-05-091-8/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixed issue in :class:`_mutable.Mutable` where event registration for ORM mapped attributes would be called repeatedly for mapped inheritance subclasses, leading to duplicate events being invoked in inheritance hierarchies. Fixes: #9676 Change-Id: I91289141d7a5f5c86a9033596735ed6eba7071b0
* | | Merge "Ensure float are not implemented as numeric" into mainmike bayer2023-05-095-3/+20
|\ \ \
| * | | Ensure float are not implemented as numericFederico Caselli2023-05-095-3/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixed the base class for dialect-specific float/double types; Oracle :class:`_oracle.BINARY_DOUBLE` now subclasses :class:`_sqltypes.Double`, and internal types for :class:`_sqltypes.Float` for asyncpg and pg8000 now correctly subclass :class:`_sqltypes.Float`. Added suite tests to ensure that floating point types, such as class:`_types.Float` and :class:`_types.Double` are not resolved as class:`_types.Numeric` in the dialect, since it may not compatible in all cases, such as when casting a value. Change-Id: I20b814e8e029d57921d9728a55f2570f74c35c87
* | | | allow column named twice warning to take effectMike Bayer2023-05-091-1/+5
| |/ / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixed issue in :func:`_orm.mapped_column` construct where the correct warning for "column X named directly multiple times" would not be emitted when ORM mapped attributes referred to the same :class:`_schema.Column`, if the :func:`_orm.mapped_column` construct were involved, raising an internal assertion instead. Fixes: #9630 Change-Id: I5d9dfaaa225aefb487c9cd981ba3ad78507bb577
* | | Merge "implement FromLinter for UPDATE, DELETE statements" into mainmike bayer2023-05-094-16/+66
|\ \ \
| * | | implement FromLinter for UPDATE, DELETE statementsMike Bayer2023-05-094-16/+66
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Implemented the "cartesian product warning" for UPDATE and DELETE statements, those which include multiple tables that are not correlated together in some way. Fixed issue where :func:`_dml.update` construct that included multiple tables and no VALUES clause would raise with an internal error. Current behavior for :class:`_dml.Update` with no values is to generate a SQL UPDATE statement with an empty "set" clause, so this has been made consistent for this specific sub-case. Fixes: #9721 Change-Id: I556639811cc930d2e37532965d2ae751882af921
* | | Merge "Improve oracle index reflection" into mainmike bayer2023-05-096-31/+107
|\ \ \
| * | | Improve oracle index reflectionFederico Caselli2023-04-286-31/+107
| |/ / | | | | | | | | | | | | | | | | | | | | | Added reflection support in the Oracle dialect to expression based indexes and the ordering direction of index expressions. Fixes: #9597 Change-Id: I40e163496789774e9930f46823d2208c35eab6f8
* | | Merge "add bind casts for BYTEA on asyncpg" into mainmike bayer2023-05-093-0/+72
|\ \ \
| * | | add bind casts for BYTEA on asyncpgMike Bayer2023-05-043-0/+72
| | |/ | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixed another regression due to the "insertmanyvalues" change in 2.0.10 as part of :ticket:`9618`, in a similar way as regression :ticket:`9701`, where :class:`.LargeBinary` datatypes also need additional casts on when using the asyncpg driver specifically in order to work with the new bulk INSERT format. Fixes: #9739 Change-Id: I57370d269ea757f263c1f3a16c324ceae76fd4e8
* | | Merge "add AsyncAttrs" into mainmike bayer2023-05-092-1/+99
|\ \ \
| * | | add AsyncAttrsMike Bayer2023-05-082-1/+99
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Added a new helper mixin :class:`_asyncio.AsyncAttrs` that seeks to improve the use of lazy-loader and other expired or deferred ORM attributes with asyncio, providing a simple attribute accessor that provides an ``await`` interface to any ORM attribute, whether or not it needs to emit SQL. Change-Id: I1427b288dc28319c854372643066c491b9ee8dc0 References: #9731
* | | | Fix usage of `Annotated` in `DeclarativeBase` docstring (#9751)Viicos2023-05-081-1/+1
|/ / /
* | | add explicit step to set populate_existing for bulk insertMike Bayer2023-05-051-1/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixed issue in new :ref:`orm_queryguide_upsert_returning` feature where the ``populate_existing`` execution option was not being propagated to the loading option, preventing existing attributes from being refreshed in-place. Fixes: #9746 Change-Id: I3efcab644e2b5874c6b265d5313f353c051db629
* | | Merge "Add public alias of type _ColumnExpressionArgument" into mainmike bayer2023-05-043-3/+7
|\ \ \
| * | | Add public alias of type _ColumnExpressionArgumentFederico Caselli2023-04-273-3/+7
| | |/ | |/| | | | | | | | | | | | | | | | | | | | | | | | | Added type ``ColumnExpressionArgument`` as a public alias of an internal type. This type is useful since it's what' accepted by the sqlalchemy in many api calls, such as :meth:`_sql.Select.where`, :meth:`_sql.and` and many other. Fixes: #9656 Change-Id: I79a38a0c1417d0ed1b6efff00497dba5e2be4f79
* | | Merge "adjust fwd_ref logic" into mainmike bayer2023-05-041-1/+1
|\ \ \
| * | | adjust fwd_ref logicMike Bayer2023-04-281-1/+1
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixed issue where ORM Annotated Declarative would not resolve forward references correctly in all cases; in particular, when using ``from __future__ import annotations`` in combination with Pydantic dataclasses. Change-Id: If643c9a4ac7e217d4cb3a7d09b96cfd49432c44e References: #9717
* | | Merge "improve natural_path usage in two places" into mainmike bayer2023-05-044-40/+29
|\ \ \ | |_|/ |/| |
| * | improve natural_path usage in two placesMike Bayer2023-04-294-40/+29
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixed loader strategy pathing issues where eager loaders such as :func:`_orm.joinedload` / :func:`_orm.selectinload` would fail to traverse fully for many-levels deep following a load that had a :func:`_orm.with_polymorphic` or similar construct as an interim member. Here we can take advantage of 2.0's refactoring of strategy_options to identify the "chop_path" concept can be simplified to work with "natural" paths alone. In addition, identified existing logic in PropRegistry that works fine, but needed the "is_unnatural" attribute to be more accurate for a given path, so we set that up front to True if the ancestor is_unnatural. Fixes: #9715 Change-Id: Ie6b3f55b6a23d0d32628afd22437094263745114
* | Version 2.0.13 placeholderMike Bayer2023-04-301-1/+1
| |
* | Merge "do not allow non-cache-key entity objects in annotations" into mainmike bayer2023-04-301-6/+20
|\ \
| * | do not allow non-cache-key entity objects in annotationsMike Bayer2023-04-301-6/+20
| |/ | | | | | | | | | | | | | | | | | | | | Fixed critical caching issue where combination of :func:`_orm.aliased()` :func:`_sql.case` and :func:`_hybrid.hybrid_property` expressions would cause a cache key mismatch, leading to cache keys that held onto the actual :func:`_orm.aliased` object while also not matching each other, filling up the cache. Fixes: #9728 Change-Id: I700645b5629a81a0104cf923db72a7421fa43ff4
* | Support control char reflection in mysql mariadbFederico Caselli2023-04-304-13/+82
|/ | | | | | | | | | | | Fixed issues regarding reflection of comments for :class:`_schema.Table` and :class:`_schema.Column` objects, where the comments contained control characters such as newlines. Additional testing support for these characters as well as extended Unicode characters in table and column comments (the latter of which aren't supported by MySQL/MariaDB) added to testing overall. Fixes: #9722 Change-Id: Id18bf758fdb6231eb705c61eeaf74bb9fa472601
* Version 2.0.12 placeholderMike Bayer2023-04-261-1/+1
|
* changelog updatesMike Bayer2023-04-261-0/+1
| | | | | | Additionally add mssql DOUBLE_PRECISION to mssql.__all__ Change-Id: I93f2db85feeff116278c5c6d0678e20d039a3e1f
* Merge "Performance improvement in Row" into mainmike bayer2023-04-276-60/+86
|\
| * Performance improvement in RowFederico Caselli2023-04-266-60/+86
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Various performance improvements to Row instanciation - avoid passing processors if they are all None - improve processor logic in cython - improve tuplegetter using slices when contiguous indexes are used Some timing follow. In particular [base_]row_new_proc that tests using processors has a 25% improvement compared to before in cython. Looking at the [b]row_new_proc_none that test a list of processors all None, this has 50% improvement in cython when passing the none list, but in this patch it would usually be disabled by passing None, so the performance gain is actually 90%, since it would run the case [base_]row_new. Tuplegetter is a bit faster in the single item get and when getting sequential indexes (like indexes 1,2,3,4) at the cost of a bit longer creation time in python, cython is mostly the same. Current times | python | cython | cy / py | base_row_new | 0.639817400 | 0.118265500 | 0.184842582 | row_new | 0.680355100 | 0.129714600 | 0.190657202 | base_row_new_proc | 3.076538900 | 1.488428600 | 0.483799701 | row_new_proc | 3.119700100 | 1.532197500 | 0.491136151 | brow_new_proc_none | 1.917702300 | 0.475511500 | 0.247958977 | row_new_proc_none | 1.956253300 | 0.497803100 | 0.254467609 | tuplegetter_one | 0.152512600 | 0.148523900 | 0.973846751 | tuplegetter_many | 0.184394100 | 0.184511500 | 1.000636680 | tuplegetter_seq | 0.154832800 | 0.156270100 | 1.009282917 | tuplegetter_new_one | 0.523730000 | 0.343402200 | 0.655685563 | tuplegetter_new_many| 0.738924400 | 0.420961400 | 0.569694816 | tuplegetter_new_seq | 1.062036900 | 0.495462000 | 0.466520514 | Parent commit times | python | cython | cy / py | base_row_new | 0.643890800 | 0.113548300 | 0.176347138 | row_new | 0.674885900 | 0.124391800 | 0.184315304 | base_row_new_proc | 3.072020400 | 2.017367000 | 0.656690626 | row_new_proc | 3.109943400 | 2.048359400 | 0.658648450 | brow_new_proc_none | 1.967133700 | 1.006326000 | 0.511569702 | row_new_proc_none | 1.960814900 | 1.025217800 | 0.522852922 | tuplegetter_one | 0.197359900 | 0.205999000 | 1.043773330 | tuplegetter_many | 0.196575900 | 0.194888500 | 0.991416038 | tuplegetter_seq | 0.192723900 | 0.205635000 | 1.066992729 | tuplegetter_new_one | 0.534644500 | 0.414311700 | 0.774929322 | tuplegetter_new_many| 0.479376500 | 0.417448100 | 0.870814694 | tuplegetter_new_seq | 0.481580200 | 0.412697900 | 0.856966088 | Change-Id: I2ca1f49dca2beff625c283f1363c29c8ccc0c3f7
* | Merge "support parameters in all ORM insert modes" into mainmike bayer2023-04-273-23/+107
|\ \
| * | support parameters in all ORM insert modesMike Bayer2023-04-263-23/+107
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixed 2.0 regression where use of :func:`_sql.bindparam()` inside of :meth:`_dml.Insert.values` would fail to be interpreted correctly when executing the :class:`_dml.Insert` statement using the ORM :class:`_orm.Session`, due to the new ORM-enabled insert feature not implementing this use case. In addition, the bulk INSERT and UPDATE features now add these capabilities: * The requirement that extra parameters aren't passed when using ORM INSERT using the "orm" dml_strategy setting is lifted. * The requirement that additional WHERE criteria is not passed when using ORM UPDATE using the "bulk" dml_strategy setting is lifted. Note that in this case, the check for expected row count is turned off. Fixes: #9583 Change-Id: I539c18893b697caeab5a5f0195a27d4f0487e728
* | | Merge "ensure correct cast for floats vs. numeric; other fixes" into mainmike bayer2023-04-276-1/+150
|\ \ \
| * | | ensure correct cast for floats vs. numeric; other fixesMike Bayer2023-04-266-1/+150
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixed regression caused by the fix for :ticket:`9618` where floating point values would lose precision being inserted in bulk, using either the psycopg2 or psycopg drivers. Implemented the :class:`_sqltypes.Double` type for SQL Server, having it resolve to ``REAL``, or :class:`_mssql.REAL`, at DDL rendering time. Fixed issue in Oracle dialects where ``Decimal`` returning types such as :class:`_sqltypes.Numeric` would return floating point values, rather than ``Decimal`` objects, when these columns were used in the :meth:`_dml.Insert.returning` clause to return INSERTed values. Fixes: #9701 Change-Id: I8865496a6ccac6d44c19d0ca2a642b63c6172da9
* | | | Merge "disable "bytes" handler for all drivers other than psycopg2" into mainmike bayer2023-04-2610-5/+29
|\ \ \ \