summaryrefslogtreecommitdiff
path: root/lib
Commit message (Collapse)AuthorAgeFilesLines
...
* | | | | use concat() directly for contains, startswith, endswithMike Bayer2022-07-172-7/+22
|/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Adjusted the SQL compilation for string containment functions ``.contains()``, ``.startswith()``, ``.endswith()`` to force the use of the string concatenation operator, rather than relying upon the overload of the addition operator, so that non-standard use of these operators with for example bytestrings still produces string concatenation operators. To accommodate this, needed to add a new _rconcat operator function, which is private, as well as a fallback in concat_op() that works similarly to Python builtin ops. Fixes: #8253 Change-Id: I2b7f56492f765742d88cb2a7834ded6a2892bd7e
* | | | Merge "implement column._merge()" into mainmike bayer2022-07-173-26/+127
|\ \ \ \
| * | | | implement column._merge()Mike Bayer2022-07-163-26/+127
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | this takes the user-defined args of one Column and merges them into the not-user-defined args of another Column. Implemented within the pep-593 column transfer operation to begin to make this new feature more robust. work may still be needed for constraints etc. but in theory everything from the left side annotated column should take effect for the right side if not otherwise specified on the right. Change-Id: I57eb37ed6ceb4b60979a35cfc4b63731d990911d
* | | | | update ORM declarative docs for new featuresMike Bayer2022-07-169-453/+476
|/ / / / | | | | | | | | | | | | | | | | | | | | | | | | I screwed up a rebase or something so this was temporarily in Ic51a12de3358f3a451bd7cf3542b375569499fc1 Change-Id: I847ee1336381221c0112b67854df022edf596b25
* | | | make anno-only Mapped[] column available for mixinsMike Bayer2022-07-152-22/+36
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Documentation is relying on the recently improved behavior of produce_column_copies() to make sure everything is available on cls for a declared_attr. therefore for anno-only attribute, we also need to generate the mapped_column() up front before scan is called. noticed in pylance, allow @declared_attr to recognize @classmethod also which allows letting typing tools know something is explicitly a classmethod Change-Id: I07ff1a642a75679f685914a33c674807929f4918
* | | | Minor cleanupFederico Caselli2022-07-132-6/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | - remove unnecessary postgresql visit that's equal to the default compiler - clarify type_annotation_map documentation Change-Id: I0c1fa212d06f6af799a5894802574250622c855e
* | | | support dataclasses with MutableCompositeMike Bayer2022-07-131-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | basically a one line change Change-Id: If6a70d49777e77f86e2b6936dd4aece20b00708e
* | | | Merge "implement comparison ops for composites" into mainmike bayer2022-07-131-6/+33
|\ \ \ \
| * | | | implement comparison ops for compositesMike Bayer2022-07-131-6/+33
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | classes mapped by :class:`_orm.composite` now support ordering comparison operations, e.g. ``<``, ``>=``, etc. Change-Id: I44938b9ca2935b2f63c70e930768487ddc6b7669
* | | | | document create_engine.isolation_level for PGMike Bayer2022-07-133-7/+18
|/ / / / | | | | | | | | | | | | | | | | Change-Id: I06eaede9e021eb0790929168e9bedb0c8b58140a References: #8252
* | | | support "SELECT *" for ORM queriesMike Bayer2022-07-102-0/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A :func:`_sql.select` construct that is passed a sole '*' argument for ``SELECT *``, either via string, :func:`_sql.text`, or :func:`_sql.literal_column`, will be interpreted as a Core-level SQL statement rather than as an ORM level statement. This is so that the ``*``, when expanded to match any number of columns, will result in all columns returned in the result. the ORM- level interpretation of :func:`_sql.select` needs to know the names and types of all ORM columns up front which can't be achieved when ``'*'`` is used. If ``'*`` is used amongst other expressions simultaneously with an ORM statement, an error is raised as this can't be interpreted correctly by the ORM. Fixes: #8235 Change-Id: Ic8e84491e14acdc8570704eadeaeaf6e16b1e870
* | | | document using fetch() with OracleMike Bayer2022-07-071-20/+32
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We implemented working FETCH support, but it's not yet implied by limit/offset. The docs make no mention that this is available which is very misleading including to maintainers. Make it clear that fetch() support is there right now, it's just not yet implicit with limit/offset. Change-Id: Ib2231dcdd80a8bf3ac4bbf590e1a8dfeac31e9da References: #8221
* | | | generalize sql server check for id col to accommodate ORM casesMike Bayer2022-07-064-9/+45
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixed issues that prevented the new usage patterns for using DML with ORM objects presented at :ref:`orm_dml_returning_objects` from working correctly with the SQL Server pyodbc dialect. Here we add a step to look in compile_state._dict_values more thoroughly for the keys we need to determine "identity insert" or not, and also add a new compiler variable dml_compile_state so that we can skip the ORM's compile_state if present. Fixes: #8210 Change-Id: Idbd76bb3eb075c647dc6c1cb78f7315c821e15f7
* | | | Merge "move backref to "legacy"" into mainmike bayer2022-07-041-26/+41
|\ \ \ \
| * | | | move backref to "legacy"Mike Bayer2022-07-041-26/+41
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | in the interests of consistency as well as new typing features, backref should be considered legacy and is fully superseded by back_populates. this commit is for 2.0 /1.4, in 2.0 further updates will be made for new ORM syntaxes. Change-Id: Idd3b7a3b07843b73304df69e476dc4239c60b3f8
* | | | | Merge "Support lambda expression in mypy plugin" into mainmike bayer2022-07-041-0/+5
|\ \ \ \ \ | |/ / / / |/| | | |
| * | | | Support lambda expression in mypy pluginCyril Chapellier2022-07-021-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Avoid `error: INTERNAL ERROR` when the default is a lambda Fixes: #8196 Change-Id: I7346c693519b024c56156db6f4ffc9a45bb748d3
* | | | | runtime annotation fixes for relationshipMike Bayer2022-07-035-10/+42
| |_|/ / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * derive uselist=False when fwd ref passed to relationship This case needs to work whether or not the class name is a forward ref. we dont allow the colleciton to be a forward ref so this will work. * fix issues with MappedCollection When using string annotations or __future__.annotations, we need to do more parsing in order to get the target collection properly Change-Id: I9e5a1358b62d060a8815826f98190801a9cc0b68
* | | | fix formatting problemsMike Bayer2022-07-031-4/+5
| | | | | | | | | | | | | | | | Change-Id: Ib55fe1c60130a45bfbf28de5c74cfe7a30418bb3
* | | | call toinstance() on type arguments passed to mapped_column()Mike Bayer2022-07-023-4/+7
| | | | | | | | | | | | | | | | Change-Id: I875cfbd925cb08e0a5235f87d13341d319c955bc
* | | | repair yield_per for non-SS dialects and add new optionsMike Bayer2022-07-019-33/+170
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Implemented new :paramref:`_engine.Connection.execution_options.yield_per` execution option for :class:`_engine.Connection` in Core, to mirror that of the same :ref:`yield_per <orm_queryguide_yield_per>` option available in the ORM. The option sets both the :paramref:`_engine.Connection.execution_options.stream_results` option at the same time as invoking :meth:`_engine.Result.yield_per`, to provide the most common streaming result configuration which also mirrors that of the ORM use case in its usage pattern. Fixed bug in :class:`_engine.Result` where the usage of a buffered result strategy would not be used if the dialect in use did not support an explicit "server side cursor" setting, when using :paramref:`_engine.Connection.execution_options.stream_results`. This is in error as DBAPIs such as that of SQLite and Oracle already use a non-buffered result fetching scheme, which still benefits from usage of partial result fetching. The "buffered" strategy is now used in all cases where :paramref:`_engine.Connection.execution_options.stream_results` is set. Added :meth:`.FilterResult.yield_per` so that result implementations such as :class:`.MappingResult`, :class:`.ScalarResult` and :class:`.AsyncResult` have access to this method. Fixes: #8199 Change-Id: I6dde3cbe483a1bf81e945561b60f4b7d1c434750
* | | | Improve reflection method docsFederico Caselli2022-06-302-162/+84
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Point to the typed dict for the documentation instead of duplicating it in the mothod text. Change-Id: I041abee7dc27b95409950741e702d69101c22c6d
* | | | add more cross-linking / notes for yield_per, partitionsMike Bayer2022-06-301-0/+20
|/ / / | | | | | | | | | | | | Change-Id: I0f8db2532827c76a2751186638d22104230db843 references: #8198
* | | Merge "Change setinputsizes behavior for mssql+pyodbc" into mainmike bayer2022-06-293-8/+67
|\ \ \
| * | | Change setinputsizes behavior for mssql+pyodbcGord Thompson2022-06-293-8/+67
| | |/ | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The ``use_setinputsizes`` parameter for the ``mssql+pyodbc`` dialect now defaults to ``True``; this is so that non-unicode string comparisons are bound by pyodbc to pyodbc.SQL_VARCHAR rather than pyodbc.SQL_WVARCHAR, allowing indexes against VARCHAR columns to take effect. In order for the ``fast_executemany=True`` parameter to continue functioning, the ``use_setinputsizes`` mode now skips the ``cursor.setinputsizes()`` call specifically when ``fast_executemany`` is True and the specific method in use is ``cursor.executemany()``, which doesn't support setinputsizes. The change also adds appropriate pyodbc DBAPI typing to values that are typed as :class:`_types.Unicode` or :class:`_types.UnicodeText`, as well as altered the base :class:`_types.JSON` datatype to consider JSON string values as :class:`_types.Unicode` rather than :class:`_types.String`. Fixes: #8177 Change-Id: I6c8886663254ae55cf904ad256c906e8f5e11f48
* | | Merge "produce column copies up the whole hierarchy first" into mainmike bayer2022-06-291-4/+37
|\ \ \
| * | | produce column copies up the whole hierarchy firstMike Bayer2022-06-291-4/+37
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixed issue where a hierarchy of classes set up as an abstract or mixin declarative classes could not declare standalone columns on a superclass that would then be copied correctly to a :class:`_orm.declared_attr` callable that wanted to make use of them on a descendant class. Originally it looked like this would produce an ordering change, however an adjustment to the flow for produce_column_copies has avoided that for now. Fixes: #8190 Change-Id: I4e2ee74edb110793eb42691c3e4a0e0535fba7e9
* | | | Comments on (named) constraintscheremnov2022-06-2912-77/+260
| |/ / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Adds support for comments on named constraints, including `ForeignKeyConstraint`, `PrimaryKeyConstraint`, `CheckConstraint`, `UniqueConstraint`, solving the [Issue 5667](https://github.com/sqlalchemy/sqlalchemy/issues/5667). Supports only PostgreSQL backend. ### Description Following the example of [Issue 1546](https://github.com/sqlalchemy/sqlalchemy/issues/1546), supports comments on constraints. Specifically, enables comments on _named_ ones — as I get it, PostgreSQL prohibits comments on unnamed constraints. Enables setting the comments for named constraints like this: ``` Table( 'example', metadata, Column('id', Integer), Column('data', sa.String(30)), PrimaryKeyConstraint( "id", name="id_pk", comment="id_pk comment" ), CheckConstraint('id < 100', name="cc1", comment="Id value can't exceed 100"), UniqueConstraint(['data'], name="uc1", comment="Must have unique data field"), ) ``` Provides the DDL representation for constraint comments and routines to create and drop them. Class `.Inspector` reflects constraint comments via methods like `get_check_constraints` . ### 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 - [ ] A short code fix - [x] A new feature implementation - Solves the issue 5667. - The commit message includes `Fixes: 5667`. - Includes tests based on comment reflection. **Have a nice day!** Fixes: #5667 Closes: #7742 Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/7742 Pull-request-sha: 42a5d3c3e9ccf9a9d5397fd007aeab0854f66130 Change-Id: Ia60f578595afdbd6089541c9a00e37997ef78ad3
* | | Merge "8152: add documentation for postgresql dialect time and timestamp ↵mike bayer2022-06-291-0/+26
|\ \ \ | | | | | | | | | | | | types" into main
| * | | 8152: add documentation for postgresql dialect time and timestamp typesDaniel Hall2022-06-281-0/+26
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | add documentation for postgresql dialect time and timestamp types This pull request is: - [ X] A documentation / typographical error fix - Good to go, no issue or tests are needed **Have a nice day!** Closes: #8185 Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/8185 Pull-request-sha: 2b76fe080babd72f8e5615b34cb544abbc446a28 Change-Id: Ib71b35d106d0d0686e5551f07b88486b6c59624d
* | | merge column args from Annotated left sideMike Bayer2022-06-284-16/+77
|/ / | | | | | | | | | | | | | | | | | | | | | | because we are forced by pep-681 to use the argument "default", we need a way to have client Column default separate from a dataclasses level default. Also, pep-681 does not support deriving the descriptor function from Annotated, so allow a brief right side mapped_column() to be present that will have more column-centric arguments from the left side Annotated to be merged. Change-Id: I039be1628d498486ba013b2798e1392ed1cd7f9f
* | Merge "Ensure type lengths are int in oracle" into mainmike bayer2022-06-261-5/+10
|\ \
| * | Ensure type lengths are int in oracleFederico Caselli2022-06-261-5/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Repair change introduced by the multi reflection that caused char length of varchar like types or precisions in numberic like types to be set as float. This will fix the test errors in alembic that are currently broken, as shown in I9ad803df1d3ccf2a5111266b781061936717b8c8 Change-Id: Idd5975efaeadfe6327a1cd3b6667d82e836a2cb1
* | | Merge "require at least one dialect name for variant" into mainFederico Caselli2022-06-261-5/+6
|\ \ \
| * | | require at least one dialect name for variantMike Bayer2022-06-261-5/+6
| |/ / | | | | | | | | | | | | | | | | | | the call doesn't make sense otherwise Fixes: #8179 Change-Id: I0e5dd584dc7090b536f9732cbfc6f3a5c8846dc5
* | | always use typing_extensionFederico Caselli2022-06-251-53/+17
|/ / | | | | | | | | | | always use typing_extensions to import missing types in old python version Change-Id: Ied03e8597e10bfae06f0e37d8624fbad90e74bcf
* | add fallback for old mutable formatMike Bayer2022-06-241-2/+8
| | | | | | | | | | | | | | | | | | | | | | Fixed regression caused by :ticket:`8133` where the pickle format for mutable attributes was changed, without a fallback to recognize the old format, causing in-place upgrades of SQLAlchemy to no longer be able to read pickled data from previous versions. A check plus a fallback for the old format is now in place. Fixes: #8133 Change-Id: I9029729b4bc56c8b3145797869229eeff48a3b3b
* | refine _include_fn to not include sibling mappersMike Bayer2022-06-231-1/+2
| | | | | | | | | | | | | | | | | | | | | | Fixed regression caused by :ticket:`8064` where a particular check for column correspondence was made too liberal, resulting in incorrect rendering for some ORM subqueries such as those using :meth:`.PropComparator.has` or :meth:`.PropComparator.any` in conjunction with joined-inheritance queries that also use legacy aliasing features. Fixes: #8162 Change-Id: Ib1fff33aa219aadf178348dd571bec1e691e606d
* | use metadata.reflect() for DeferredReflectionMike Bayer2022-06-211-32/+55
| | | | | | | | | | | | | | | | | | as metadata.reflect() now has a signficant performance gain over indivdual Table reflection, rework DeferredReflection to use this Fixes: #8155 Change-Id: I98d55fae83f0cf06a8ca8b89112c85655424d73a
* | Merge "rework ORM mapping docs" into mainmike bayer2022-06-214-7/+52
|\ \
| * | rework ORM mapping docsMike Bayer2022-06-214-7/+52
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | prepare docs for newly incoming mapper styles, including new dataclass mapping. move the existing dataclass/attrs docs all into their own section and try to improve organization and wording into the relatively recent "mapping styles" document. Change-Id: I0b5e2a5b6a70db65ab19b5bb0a2bb7df20e0b498
* | | Merge "Add ability to test using thick mode with oracledb" into mainmike bayer2022-06-214-14/+43
|\ \ \ | |/ / |/| |
| * | Add ability to test using thick mode with oracledbFederico Caselli2022-06-204-14/+43
| | | | | | | | | | | | | | | Change-Id: Iee14750ba20422931bde4d61eaa570af482c7d8b References: #8147
* | | Domain typeDavid Baumgold2022-06-215-361/+734
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Added a new Postgresql :class:`_postgresql.DOMAIN` datatype, which follows the same CREATE TYPE / DROP TYPE behaviors as that of PostgreSQL :class:`_postgresql.ENUM`. Much thanks to David Baumgold for the efforts on this. Fixes: #7316 Closes: #7317 Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/7317 Pull-request-sha: bc9a82f010e6ca2f70a6e8a7620b748e483c26c3 Change-Id: Id8d7e48843a896de17d20cc466b115b3cc065132
* | | remove warnings for index/unique skipped due to exclude_colsMike Bayer2022-06-201-8/+0
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The warnings that are emitted regarding reflection of indexes or unique constraints, when the :paramref:`.Table.include_columns` parameter is used to exclude columns that are then found to be part of those constraints, have been removed. When the :paramref:`.Table.include_columns` parameter is used it should be expected that the resulting :class:`.Table` construct will not include constraints that rely upon omitted columns. This change was made in response to :ticket:`8100` which repaired :paramref:`.Table.include_columns` in conjunction with foreign key constraints that rely upon omitted columns, where the use case became clear that omitting such constraints should be expected. Fixes: #8102 Change-Id: Id32f628def2d12499cd49d0b436ed345fe49dc6b
* | Merge "create new approach for deeply nested post loader options" into mainmike bayer2022-06-186-73/+394
|\ \
| * | create new approach for deeply nested post loader optionsMike Bayer2022-06-186-73/+394
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Added very experimental feature to the :func:`_orm.selectinload` and :func:`_orm.immediateload` loader options called :paramref:`_orm.selectinload.recursion_depth` / :paramref:`_orm.immediateload.recursion_depth` , which allows a single loader option to automatically recurse into self-referential relationships. Is set to an integer indicating depth, and may also be set to -1 to indicate to continue loading until no more levels deep are found. Major internal changes to :func:`_orm.selectinload` and :func:`_orm.immediateload` allow this feature to work while continuing to make correct use of the compilation cache, as well as not using arbitrary recursion, so any level of depth is supported (though would emit that many queries). This may be useful for self-referential structures that must be loaded fully eagerly, such as when using asyncio. A warning is also emitted when loader options are connected together with arbitrary lengths (that is, without using the new ``recursion_depth`` option) when excessive recursion depth is detected in related object loading. This operation continues to use huge amounts of memory and performs extremely poorly; the cache is disabled when this condition is detected to protect the cache from being flooded with arbitrary statements. Fixes: #8126 Change-Id: I9f162e0a09c1ed327dd19498aac193f649333a01
* | Merge "rearchitect reflection for batched performance" into mainFederico Caselli2022-06-1832-3012/+7768
|\ \
| * | rearchitect reflection for batched performanceFederico Caselli2022-06-1832-3012/+7768
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Rearchitected the schema reflection API to allow some dialects to make use of high performing batch queries to reflect the schemas of many tables at once using much fewer queries. The new performance features are targeted first at the PostgreSQL and Oracle backends, and may be applied to any dialect that makes use of SELECT queries against system catalog tables to reflect tables (currently this omits the MySQL and SQLite dialects which instead make use of parsing the "CREATE TABLE" statement, however these dialects do not have a pre-existing performance issue with reflection. MS SQL Server is still a TODO). The new API is backwards compatible with the previous system, and should require no changes to third party dialects to retain compatibility; third party dialects can also opt into the new system by implementing batched queries for schema reflection. Along with this change is an updated reflection API that is fully :pep:`484` typed, features many new methods and some changes. Fixes: #4379 Change-Id: I897ec09843543aa7012bcdce758792ed3d415d08
* | | Merge "Normalize postgresql docs links to point to current" into mainmike bayer2022-06-187-19/+19
|\ \ \