summaryrefslogtreecommitdiff
path: root/doc/build/core
Commit message (Collapse)AuthorAgeFilesLines
* add missing docsMike Bayer2023-05-102-3/+12
| | | | | | | ColumnExpressionArgument, as well as Oracle datatypes mentioned in the changelog Change-Id: I9496de9a1092af21f84492ff9d91a0cefb1a8a5b
* Add public alias of type _ColumnExpressionArgumentFederico Caselli2023-04-271-0/+3
| | | | | | | | | | 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
* changelog fixes; editsMike Bayer2023-04-211-1/+1
| | | | Change-Id: I6bbef2416f864d1414d56f9bf39026156aed5e67
* add deterministic imv returning ordering using sentinel columnsMike Bayer2023-04-212-57/+383
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Repaired a major shortcoming which was identified in the :ref:`engine_insertmanyvalues` performance optimization feature first introduced in the 2.0 series. This was a continuation of the change in 2.0.9 which disabled the SQL Server version of the feature due to a reliance in the ORM on apparent row ordering that is not guaranteed to take place. The fix applies new logic to all "insertmanyvalues" operations, which takes effect when a new parameter :paramref:`_dml.Insert.returning.sort_by_parameter_order` on the :meth:`_dml.Insert.returning` or :meth:`_dml.UpdateBase.return_defaults` methods, that through a combination of alternate SQL forms, direct correspondence of client side parameters, and in some cases downgrading to running row-at-a-time, will apply sorting to each batch of returned rows using correspondence to primary key or other unique values in each row which can be correlated to the input data. Performance impact is expected to be minimal as nearly all common primary key scenarios are suitable for parameter-ordered batching to be achieved for all backends other than SQLite, while "row-at-a-time" mode operates with a bare minimum of Python overhead compared to the very heavyweight approaches used in the 1.x series. For SQLite, there is no difference in performance when "row-at-a-time" mode is used. It's anticipated that with an efficient "row-at-a-time" INSERT with RETURNING batching capability, the "insertmanyvalues" feature can be later be more easily generalized to third party backends that include RETURNING support but not necessarily easy ways to guarantee a correspondence with parameter order. Fixes: #9618 References: #9603 Change-Id: I1d79353f5f19638f752936ba1c35e4dc235a8b7c
* Merge "Add pool creation functions" into mainmike bayer2023-04-132-0/+30
|\
| * Add pool creation functionsFederico Caselli2023-04-122-0/+30
| | | | | | | | | | | | | | | | | | | | Added :func:`_sa.create_pool_from_url` and :func:`_asyncio.create_async_pool_from_url` to create a :class:`_pool.Pool` instance from an input url passed as string or :class:`_sa.URL`. Fixes: #9613 Change-Id: Icd8aa3f2849e6fd1bc5341114f3ef8d216a2c543
* | Remove old versionadded and versionchangedFederico Caselli2023-04-123-24/+0
|/ | | | | | | Removed versionadded and versionchanged for version prior to 1.2 since they are no longer useful. Change-Id: I5c53d1188bc5fec3ab4be39ef761650ed8fa6d3e
* turn off use_insertmanyvalues for SQL ServerMike Bayer2023-04-051-9/+6
| | | | | | | | | | | | | | | | | | we will keep trying to find workarounds, however this patch is the "turn it off" patch Due to a critical bug identified in SQL Server, the SQLAlchemy "insertmanyvalues" feature which allows fast INSERT of many rows while also supporting RETURNING unfortunately needs to be disabled for SQL Server. SQL Server is apparently unable to guarantee that the order of rows inserted matches the order in which they are sent back by OUTPUT inserted when table-valued rows are used with INSERT in conjunction with OUTPUT inserted. We are trying to see if Microsoft is able to confirm this undocumented behavior however there is no known workaround, other than it's not safe to use table-valued expressions with OUTPUT inserted for now. Fixes: #9603 Change-Id: I4b932fb8774390bbdf4e870a1f6cfe9a78c4b105
* Restore export for nullslast/nullfirstFederico Caselli2023-02-281-0/+12
| | | | | | | | Previously only the snake case versions nulls_last/nulls_first were exported in the toplevel namespace. Fixes: #9390 Change-Id: I9088e858ae108a5c9106b9d8d82655ad605417cc
* Dedicated bitwise operatorsjazzthief2023-02-062-0/+69
| | | | | | | | | | | | | Added a full suite of new SQL bitwise operators, for performing database-side bitwise expressions on appropriate data values such as integers, bit-strings, and similar. Pull request courtesy Yegor Statkevich. Fixes: #8780 Closes: #9204 Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/9204 Pull-request-sha: a4541772a6a784f9161ad78ef84d2ea7a62fa8de Change-Id: I4c70e80f9548dcc1b4e3dccd71bd59d51d3ed46e
* Make the custom type map more discoverableFederico Caselli2023-01-131-0/+31
| | | | Change-Id: Id6cdaddad83aa93508e256e54010a6c53218b717
* Merge "Remove old file and missing doc section" into mainmike bayer2023-01-131-8/+0
|\
| * Remove old file and missing doc sectionFederico Caselli2023-01-121-8/+0
| | | | | | | | Change-Id: Ic6dda7f32a7561a0c0a92b8a7c08e44cb174eec1
* | Fixes related to improved sql formattingFederico Caselli2023-01-124-80/+90
|/ | | | | | Follow up of I07b72e6620bb64e329d6b641afa27631e91c4f16 Change-Id: I1f61974bf9cdc3da5317e546d4f9b649c2029e4d
* Improve sql formattingFederico Caselli2023-01-118-27/+27
| | | | | | change {opensql} to {printsql} in prints, add missing markers Change-Id: I07b72e6620bb64e329d6b641afa27631e91c4f16
* link to with_variant() narrative from API docMike Bayer2023-01-031-0/+2
| | | | Change-Id: I5d8e4d7cb7871bedebe0fe89758be441e64b94c6
* Rectify reference to class LambdaElement, misnamed as LamdaElement (#9037)Lele Gaifax2022-12-291-1/+1
| | | | | | Fixes #9034. (cherry picked from commit 532373b18f2e77910bb642a27a2cca3179499389)
* Improve v2 documentationFederico Caselli2022-12-141-1/+2
| | | | | Fixes: #7659 Change-Id: Ic9b758c7eed568f33dd0a745031f96de7666baf1
* Better syncronize async result docs with plain ones.Federico Caselli2022-12-091-1/+2
| | | | | | | | | | Removed non-functional method ``merge`` from :class:`_asyncio.AsyncResult`. This method was non-functional and non-testes since the first introduction of asyncio in SQLAlchemy. Fixes: #7158 Fixes: #8952 Change-Id: Ibc3d17be8a8b7cab9bf2074f0408f74b4c4b161d
* fix construct_params() for render_postcompile; add new APIMike Bayer2022-12-081-0/+3
| | | | | | | | | | | | | | | | | | | | | The :meth:`.SQLCompiler.construct_params` method, as well as the :attr:`.SQLCompiler.params` accessor, will now return the exact parameters that correspond to a compiled statement that used the ``render_postcompile`` parameter to compile. Previously, the method returned a parameter structure that by itself didn't correspond to either the original parameters or the expanded ones. Passing a new dictionary of parameters to :meth:`.SQLCompiler.construct_params` for a :class:`.SQLCompiler` that was constructed with ``render_postcompile`` is now disallowed; instead, to make a new SQL string and parameter set for an alternate set of parameters, a new method :meth:`.SQLCompiler.construct_expanded_state` is added which will produce a new expanded form for the given parameter set, using the :class:`.ExpandedState` container which includes a new SQL statement and new parameter dictionary, as well as a positional parameter tuple. Fixes: #6114 Change-Id: I9874905bb90f86799b82b244d57369558b18fd93
* Fixed an invalid syntax in an except statementwiseaidev2022-12-051-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ### Description As the title suggests, I have fixed an invalid syntax in the docs for an `except` statement while reading the unusual. ### 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: - [x] A documentation / typographical error fix - Good to go, no issue or tests are needed - [ ] 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: #8715 Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/8715 Pull-request-sha: e8be2bc4a5401ab2a5a0fc1d2e50d41fa437ae80 Change-Id: If8512bf1853f7cdb1ae655f0945cd922fff6fbce
* Merge "Add recommendation for URL.create() re: escaping" into mainmike bayer2022-11-271-1/+49
|\
| * Add recommendation for URL.create() re: escapingGord Thompson2022-11-271-1/+49
| | | | | | | | | | | | | | | | | | | | | | Let users know that URL.create() can build the whole connection URL instead of making them escape things like passwords ad-hoc. includes some general cleanup of URL docstring by mike Change-Id: Ic71bb0201fecf30e1db11e006c269f2d041b5439
* | Implement ScalarValueFederico Caselli2022-11-261-0/+3
|/ | | | | | | | | | | | | | Added :class:`_expression.ScalarValues` that can be used as a column element allowing using :class:`_expression.Values` inside IN clauses or in conjunction with ``ANY`` or ``ALL`` collection aggregates. This new class is generated using the method :meth:`_expression.Values.scalar_values`. The :class:`_expression.Values` instance is now coerced to a :class:`_expression.ScalarValues` when used in a ``IN`` or ``NOT IN`` operation. Fixes: #6289 Change-Id: Iac22487ccb01553684b908e54d01c0687fa739f1
* add common base class for all SQL col expression objectsMike Bayer2022-11-211-0/+2
| | | | | | | | | | | Added a new type :class:`.SQLColumnExpression` which may be indicated in user code to represent any SQL column oriented expression, including both those based on :class:`.ColumnElement` as well as on ORM :class:`.QueryableAttribute`. This type is a real class, not an alias, so can also be used as the foundation for other objects. Fixes: #8847 Change-Id: I3161bdff1c9f447793fce87864e1774a90cd4146
* Support result.close() for all iterator patternsMike Bayer2022-11-031-47/+56
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This change contains new features for 2.0 only as well as some behaviors that will be backported to 1.4. For 1.4 and 2.0: Fixed issue where the underlying DBAPI cursor would not be closed when using :class:`_orm.Query` with :meth:`_orm.Query.yield_per` and direct iteration, if a user-defined exception case were raised within the iteration process, interrupting the iterator. This would lead to the usual MySQL-related issues with server side cursors out of sync. For 1.4 only: A similar scenario can occur when using :term:`2.x` executions with direct use of :class:`.Result`, in that case the end-user code has access to the :class:`.Result` itself and should call :meth:`.Result.close` directly. Version 2.0 will feature context-manager calling patterns to address this use case. However within the 1.4 scope, ensured that ``.close()`` methods are available on all :class:`.Result` implementations including :class:`.ScalarResult`, :class:`.MappingResult`. For 2.0 only: To better support the use case of iterating :class:`.Result` and :class:`.AsyncResult` objects where user-defined exceptions may interrupt the iteration, both objects as well as variants such as :class:`.ScalarResult`, :class:`.MappingResult`, :class:`.AsyncScalarResult`, :class:`.AsyncMappingResult` now support context manager usage, where the result will be closed at the end of iteration. Corrected various typing issues within the engine and async engine packages. Fixes: #8710 Change-Id: I3166328bfd3900957eb33cbf1061d0495c9df670
* ensure pool.reset event always called for resetMike Bayer2022-10-302-51/+125
| | | | | | | | | | | | | | | | | | | | | | Added new parameter :paramref:`.PoolEvents.reset.reset_state` parameter to the :meth:`.PoolEvents.reset` event, with deprecation logic in place that will continue to accept event hooks using the previous set of arguments. This indicates various state information about how the reset is taking place and is used to allow custom reset schemes to take place with full context given. Within this change a fix that's also backported to 1.4 is included which re-enables the :meth:`.PoolEvents.reset` event to continue to take place under all circumstances, including when :class:`.Connection` has already "reset" the connection. The two changes together allow custom reset schemes to be implemented using the :meth:`.PoolEvents.reset` event, instead of the :meth:`.PoolEvents.checkin` event (which continues to function as it always has). Change-Id: Ie17c4f55d02beb6f570b9de6b3044baffa7d6df6 Fixes: #8717
* fix missing pool __init__ documentationMike Bayer2022-10-211-0/+7
| | | | Change-Id: Ic3e7fb3cc4995372646822e40d914b83a7fa78c8
* doc link fixesMike Bayer2022-10-201-2/+2
| | | | Change-Id: I7f5f6b8070c01066a64f23542f644ad67db70d38
* move API docs downwardsMike Bayer2022-10-201-1/+1
| | | | | | | | | | | Sphinx 5.3 (compared to 5.1.1) is now putting all the autodoc names into the TOC. So we have to start being more careful to make sure API docs are well below narrative docs, because this new style is a wall of text. i dont yet see any options to turn it off, but it does seem like a good improvement, just makes doc organization a more difficult endeavor. Change-Id: I49428076fef9b96ef1544621de9a9dfca1699dab
* Revert automatic set of sequence start to 1Federico Caselli2022-10-171-7/+10
| | | | | | | | | | | | | | | | | The :class:`.Sequence` construct restores itself to the DDL behavior it had prior to the 1.4 series, where creating a :class:`.Sequence` with no additional arguments will emit a simple ``CREATE SEQUENCE`` instruction **without** any additional parameters for "start value". For most backends, this is how things worked previously in any case; **however**, for MS SQL Server, the default value on this database is ``-2**63``; to prevent this generally impractical default from taking effect on SQL Server, the :paramref:`.Sequence.start` parameter should be provided. As usage of :class:`.Sequence` is unusual for SQL Server which for many years has standardized on ``IDENTITY``, it is hoped that this change has minimal impact. Fixes: #7211 Change-Id: I1207ea10c8cb1528a1519a0fb3581d9621c27b31
* update SEQUENCE docs ahead of default changeMike Bayer2022-10-171-61/+103
| | | | | | | | | for backport to 1.4 as well, remove references to Firebird, and also revert "associate Sequence with MetaData" step as this is not needed usually, just note that schema is not shared. encourage users to use IDENTITY instead. Change-Id: I5d25357042127c9cd1274c9de7abb44a525b0195
* further 2.0 modernizationsMike Bayer2022-10-136-30/+26
| | | | | | | biggest change here is the old tutorials were removed from the TOC and some additional links to them have been corrected. Change-Id: I79b878a946422eac24ed2449b440fc5d556576c4
* fixes for doc buildsMike Bayer2022-10-131-1/+1
| | | | | | | * requirements needs typing_extensions * update all "future=True" references to be appropriate to 2.0 Change-Id: I2eeb0ae65afdb587f21aeb0020f1d8a292f67c21
* implement write-only colletions, typing for dynamicMike Bayer2022-10-061-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For 2.0, we provide a truly "larger than memory collection" implementation, a write-only collection that will never under any circumstances implicitly load the entire collection, even during flush. This is essentially a much more "strict" version of the "dynamic" loader, which in fact has a lot of scenarios that it loads the full backing collection into memory, mostly defeating its purpose. Typing constructs are added that support both the new feature WriteOnlyMapping as well as the legacy feature DynamicMapping. These have been integrated with "annotion based mapping" so that relationship() uses these annotations to configure the loader strategy as well. additional changes: * the docs triggered a conflict in hybrid's "transformers" section, this section is hard-coded to Query using a pattern that doesnt seem to have any use and isn't part of the current select() interface, so just removed this section * As the docs for WriteOnlyMapping are very long, collections.rst is broken up into two pages now. Fixes: #6229 Fixes: #7123 Change-Id: I6929f3da6e441cad92285e7309030a9bac4e429d
* Remove all formatting errorsFederico Caselli2022-10-036-29/+38
| | | | | | Improve format docs script, replace {sql} with {opensql} Change-Id: Ie1aaa8f3d8ff8f8e89b7b5149a1876d9f8a211ed
* detect {opensql} and {stop} sectionsMike Bayer2022-10-023-45/+51
| | | | | | | | | | | | | this so that I can still have {opensql} and {stop} sections in non-console python. this isn't the norm but I would prefer if I dont have to be 100% strict about it also maintaining {sql} / {stop} being at the start of a code line. this is more prevalent in 1.4. Change-Id: Iaf748b7ff1120e21f729c2fd794d9b8a33d83170
* Add proper code block formattingFederico Caselli2022-10-027-30/+74
| | | | Change-Id: I63585eeae0b0bc78109da64520696928dfb3982c
* Improvements to code formatterFederico Caselli2022-10-023-27/+38
| | | | Change-Id: I75cf7143f3ed3bbc09aa8bc18edbce5c8af0f0be
* interim adjustment to code that's not staying formattedMike Bayer2022-09-301-6/+6
| | | | | | | @caselit is fixing this but i just need the build to pass for the moment Change-Id: I1c39304c5541ac6f09a80fc157f86f1c86421235
* fix "entry points"Mike Bayer2022-09-301-2/+2
| | | | | | | | | the formatting here wasn't round tripping without manually adjusting the indentation. this suggests that "check" mode is not doing the exact same thing as "write". maybe file.write_text() is changing something. Change-Id: Ic320800eea7d3333b8a76ede85293c2832c619ed
* this is python code, we can formatMike Bayer2022-09-301-13/+8
| | | | Change-Id: I01aee8b50afe84b8df6154fa73a4375d746cbc02
* Format code in the rst docs fileFederico Caselli2022-09-3014-630/+748
| | | | | | | | Added script to format code in the rst documentation using black. This is also added to the lint tox job to ensure that the code in the docs is properly formatted. Change-Id: I799444f22da153484ca5f095d57755762348da40
* New ORM Query Guide featuring DML supportMike Bayer2022-09-252-7/+3
| | | | | | | | | | | | | | | | | reviewers: these docs publish periodically at: https://docs.sqlalchemy.org/en/gerrit/4042/orm/queryguide/index.html See the "last generated" timestamp near the bottom of the page to ensure the latest version is up Change includes some other adjustments: * small typing fixes for end-user benefit * removal of a bunch of old examples for patterns that nobody uses or aren't really what we promote now * modernization of some examples, including inheritance Change-Id: I9929daab7797be9515f71c888b28af1209e789ff
* implement batched INSERT..VALUES () () for executemanyMike Bayer2022-09-241-0/+226
| | | | | | | | | | | | | | | | | | | | the feature is enabled for all built in backends when RETURNING is used, except for Oracle that doesn't need it, and on psycopg2 and mssql+pyodbc it is used for all INSERT statements, not just those that use RETURNING. third party dialects would need to opt in to the new feature by setting use_insertmanyvalues to True. Also adds dialect-level guards against using returning with executemany where we dont have an implementation to suit it. execute single w/ returning still defers to the server without us checking. Fixes: #6047 Fixes: #7907 Change-Id: I3936d3c00003f02e322f2e43fb949d0e6e568304
* change verbiage stating exact compliance with RFC-1738Mike Bayer2022-09-171-6/+8
| | | | | | | | | | | | | | As long as we aren't using urlparse() to parse URLs, we are not RFC-1738 compliant. As we accept underscores in the scheme and not dashes or dots, we are not RFC-1738 compliant, so emulate language like that of PostgreSQL [1] that we "generally follow" this scheme but include some exceptions. [1] https://www.postgresql.org/docs/current/libpq-connect.html#id-1.7.3.8.3.6 Fixes: #8519 Change-Id: I2d7e55d9df17aed122cebb2c4c315f56c06a3da5
* Fix doc snippet (#8414)Daniel Dương2022-08-301-1/+1
|
* more function adjustmentsMike Bayer2022-08-221-3/+0
| | | | | | | | the inherited-members feature works very poorly and inconsistently in sphinx. just dont use it here as it refuses to exclude ColumnOperators methods Change-Id: Ic50865c9901e7225a99ff7f33454da15ff91b12f
* reformat functions.rst; document coalsceMike Bayer2022-08-221-11/+127
| | | | | | | | | | | | | this file was all over the place autodocumenting all the contents of functions.py with no regards to the heading paragraph which seemed to be introducing the generic functions. Use specific autoclass/autofunc docs as automodule is generally unworkable. Add missing docstring for coalesce function. Fixes: #8415 Change-Id: I4c37e6153282ce99b9f5d674f6e802c25ef536e1
* fix some inaccuracies in with_variant docMike Bayer2022-08-191-4/+5
| | | | | | | | | | | | | | * the table wont create on mysql/mariadb b.c. user_name had no length * "utf-8" is not recognized by mysql/mariadb, use "utf8" * mysql or mariadb name match is determined by the URL, not the actual DB that is detected (I know I made it work that way but I forgot) * for the 1.4 backport only, will remove the "mariadb" part as we dont support that API, #8408 Fixes: #8408 Change-Id: I5b0a58a3f94a3450631e2405bd07d0a77599ae26