summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/orm
Commit message (Collapse)AuthorAgeFilesLines
* fix some typospr/220Nils Philippsen2015-12-082-2/+2
|
* - write a real inline documentation section for from_self(),Mike Bayer2015-12-071-2/+163
| | | | | building on the example of query.join(). Ideally all the methods in Query would have this kind of thing. fixes #3544
* - fix loading.py merge_result for new _merge() argumentMike Bayer2015-12-041-2/+2
|
* - The :meth:`.Session.merge` method now tracks pending objects byMike Bayer2015-12-044-10/+28
| | | | | | | | primary key before emitting an INSERT, and merges distinct objects with duplicate primary keys together as they are encountered, which is essentially semi-deterministic at best. This behavior matches what happens already with persistent objects. fixes #3601
* - Fixed issue where post_update on a many-to-one relationship wouldMike Bayer2015-12-021-3/+5
| | | | | | fail to emit an UPDATE in the case where the attribute were set to None and not previously loaded. fixes #3599
* Merge remote-tracking branch 'origin/pr/210'Mike Bayer2015-11-302-2/+4
|\
| * Update usages of getargspec to compat version.pr/210Jacob MacDonald2015-10-292-2/+4
| | | | | | | | | | The places inspect.getargspec was being used were causing problems for newer Python versions.
* | - Added support for parameter-ordered SET clauses in an UPDATEMike Bayer2015-11-282-6/+20
| | | | | | | | | | | | | | | | | | | | statement. This feature is available by passing the :paramref:`~.sqlalchemy.sql.expression.update.preserve_parameter_order` flag either to the core :class:`.Update` construct or alternatively adding it to the :paramref:`.Query.update.update_args` dictionary at the ORM-level, also passing the parameters themselves as a list of 2-tuples. Thanks to Gorka Eguileor for implementation and tests. adapted from pullreq github:200
* | - Fixed bug which is actually a regression that occurred betweenMike Bayer2015-11-252-2/+15
| | | | | | | | | | | | | | | | versions 0.8.0 and 0.8.1, due :ticket:`2714`. The case where joined eager loading needs to join out over a subclass-bound relationship when "with_polymorphic" were also used would fail to join from the correct entity. fixes #3593
* | - Change "expr" to "entity" for example illustrating an eventBas van den Heuvel2015-11-241-1/+1
| | | | | | | | that intercepts a query and adds entity-oriented criteria
* | - Fixed joinedload bug which would occur when a. the query includesMike Bayer2015-11-211-2/+1
| | | | | | | | | | | | | | | | | | | | | | | | limit/offset criteria that forces a subquery b. the relationship uses "secondary" c. the primaryjoin of the relationship refers to a column that is either not part of the primary key, or is a PK col in a joined-inheritance subclass table that is under a different attribute name than the parent table's primary key column d. the query defers the columns that are present in the primaryjoin, typically via not being included in load_only(); the necessary column(s) would not be present in the subquery and produce invalid SQL. fixes #3592
* | - A rare case which occurs when a :meth:`.Session.rollback` fails in theMike Bayer2015-11-191-2/+14
| | | | | | | | | | | | | | | | | | | | | | | | scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696
* | - rewrite the docs and add a test for the bake_queries=TrueMike Bayer2015-11-191-5/+21
| | | | | | | | | | | | | | relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572
* | - Fixed bug where the "single table inheritance" criteria would beMike Bayer2015-11-111-1/+1
|/ | | | | | | added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. fixes #3582
* - try to make this language more succinct and fix linksMike Bayer2015-10-201-24/+8
| | | | (cherry picked from commit 3ffe8569fbaa72c2d844604b600c4661097339eb)
* - adjust 4f54607923a11669961b53f where we still allow_multirow as longMike Bayer2015-10-191-1/+1
| | | | as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount
* - Fixed regression in 1.0 where new feature of using "executemany"Mike Bayer2015-10-191-1/+1
| | | | | | | | | for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556
* Merge remote-tracking branch 'origin/pr/203'Mike Bayer2015-10-091-8/+7
|\
| * Remplement Query.one() in terms of .one_or_none()pr/203Eric Siegerman2015-09-281-8/+7
| | | | | | Thanks to Mike Bayer for suggesting a simpler refactoring.
* | Merge remote-tracking branch 'origin/pr/205'Mike Bayer2015-10-091-0/+12
|\ \
| * | Doc fixpr/205Eric Siegerman2015-09-281-0/+12
| |/
* | - remove ambiguous use of the phrase "joined together by AND" as thisMike Bayer2015-10-011-5/+6
|/ | | | | | | may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545
* - replicate Query.one_or_none to BakedQueryMike Bayer2015-09-241-2/+10
| | | | - changelog / version note finishing
* Add Query.one_or_none()pr/201Eric Siegerman2015-09-241-0/+32
|
* - Fixed rare TypeError which could occur when stringifying certainMike Bayer2015-09-231-1/+1
| | | | | kinds of internal column loader options within internal logging. fixes #3539
* - Added a new type-level modifier :meth:`.TypeEngine.evaluates_none`Mike Bayer2015-09-191-2/+2
| | | | | | | | | | | | | which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method.
* - add a new FAQ recipe for "walk all objects", replacing the needMike Bayer2015-09-101-4/+13
| | | | | | to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498
* - Internal calls to "bookkeeping" functions withinMike Bayer2015-09-081-48/+56
| | | | | | | | :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526
* - Fixed bug in :meth:`.Session.bulk_save_objects` where a mappedMike Bayer2015-09-081-1/+7
| | | | | | | column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525
* - reduce some callcounts within the new eventsMike Bayer2015-09-032-32/+30
|
* Merge branch 'ticket_2677'Mike Bayer2015-09-026-281/+593
|\
| * - The :class:`.SessionEvents` suite now includes events to allowticket_2677Mike Bayer2015-09-026-141/+510
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517
| * - add new documentation that applies to all modern SQLA versions,ticket_2677_preMike Bayer2015-09-021-140/+83
| | | | | | | | detailing ORM event recipes across the board.
* | - add a note about DISTINCT in query w/ ORDER BY, references #3518Mike Bayer2015-08-311-0/+13
|/
* - use consistent and descriptive language in all casesMike Bayer2015-08-272-3/+26
| | | | | | where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517
* - reword and update documentation on passive_updates=False; as virtuallyMike Bayer2015-08-271-21/+17
| | | | | | | all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666
* - re-document and fully cross link all of configure_mappers(),Mike Bayer2015-08-242-20/+111
| | | | mapper_configured(), after_configured(), and before_configured().
* - repair the inspection hook in sqltypes to not be fooledMike Bayer2015-08-221-0/+2
| | | | by mock and other __getattr__ impostors
* - merge of ticket_3514 None-handling branchMike Bayer2015-08-172-2/+18
| | | | | | | | | | | | | | | | - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514
* - merge of ticket_3499 indexed access branchMike Bayer2015-08-172-13/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use.
* - add tests for InstanceEvents.init, InstanceEvents.init_failureMike Bayer2015-08-142-5/+68
| | | | | | | - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place.
* - Fixed 1.0 regression where the "noload" loader strategy would failMike Bayer2015-08-113-7/+9
| | | | | | | | | to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9
* fix typo int->intopr/192halfcrazy2015-08-091-1/+1
|
* - add a note clarifying query.with_labels(), fixes #3506Mike Bayer2015-08-031-0/+10
|
* - Fixed an issue where a particular base class within utilsMike Bayer2015-07-202-2/+3
| | | | | | | | | didn't implement ``__slots__``, and therefore meant all subclasses of that class didn't either, negating the rationale for ``__slots__`` to be in use. Didn't cause any issue except on IronPython which apparently does not implement ``__slots__`` behavior compatibly with cPython. Fixes #3494
* - add a warning suggesting to use the dictionary form of accessMike Bayer2015-07-051-0/+33
| | | | | | if the name of the attribute being accessed is non-specific, thereby avoiding collisions on names like items, values, keys. fixes #3475
* - Fixed 1.0 regression where value objects that overrideMike Bayer2015-07-011-2/+4
| | | | | | | | | ``__eq__()`` to return a non-boolean-capable object, such as some geoalchemy types as well as numpy types, were being tested for ``bool()`` during a unit of work update operation, where in 0.9 the return value of ``__eq__()`` was tested against "is True" to guard against this. fixes #3469
* - Fixed 1.0 regression where a "deferred" attribute would not populateMike Bayer2015-06-291-1/+10
| | | | | | | | | | correctly if it were loaded within the "optimized inheritance load", which is a special SELECT emitted in the case of joined table inheritance used to populate expired or unloaded attributes against a joined table without loading the base table. This is related to the fact that SQLA 1.0 no longer guesses about loading deferred columns and must be directed explicitly. fixes #3468
* - Fixed 1.0 regression where the "parent entity" of a synonym-Mike Bayer2015-06-273-2/+4
| | | | | | | | | | | | | mapped attribute on top of an :func:`.aliased` object would resolve to the original mapper, not the :func:`.aliased` version of it, thereby causing problems for a :class:`.Query` that relies on this attribute (e.g. it's the only representative attribute given in the constructor) to figure out the correct FROM clause for the query. fixes #3466 - apply consitency to ._parententity vs. __clause_element__()._annotations['parententity'] in terms of aliased class, test it all.
* - Fixed a major regression in the 1.0 series where the version_id_counterMike Bayer2015-06-241-1/+18
| | | | | | | | | | | | | feature would cause an object's version counter to be incremented when there was no net change to the object's row, but instead an object related to it via relationship (e.g. typically many-to-one) were associated or de-associated with it, resulting in an UPDATE statement that updates the object's version counter and nothing else. In the use case where the relatively recent "server side" and/or "programmatic/conditional" version counter feature were used (e.g. setting version_id_generator to False), the bug could cause an UPDATE without a valid SET clause to be emitted. fixes #3465