summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/orm
Commit message (Collapse)AuthorAgeFilesLines
* 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.
* - 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
* - Fixed 1.0 regression where the enhanced behavior of single-inheritanceMike Bayer2015-06-191-3/+4
| | | | | | | | joins of :ticket:`3222` takes place inappropriately for a JOIN along explicit join criteria with a single-inheritance subclass that does not make use of any discriminator, resulting in an additional "AND NULL" clause. fixes #3462
* Merge branch 'pr182'Mike Bayer2015-06-141-1/+2
|\
| * Added max_row_buffer attribute to the context execution options and usepr/182Morgan McClure2015-06-131-1/+2
| | | | | | | | it to prevent excess memory usage with yield_per
* | - restore the approach we have for pk_params, but in orderMike Bayer2015-06-131-6/+8
| | | | | | | | | | to suit #3451 exclude these columns from the "params" dictionary in the first place, revises pr github:181
* | Fix primary key behaviour in bulk_updatepr/181Patrick Hayes2015-06-131-6/+5
|/ | | | | | | | | | | | | | | | | | | | | | | Suppose you have a model class with a primary key. Base = declarative_base() class User(Base): id = Column(BigInteger, primary_key=True) name = Column(String) Previously, running `bulk_update_mappings(User, {'id': 1, 'name': 'hello'})` would emit the following: ```UPDATE users SET id=1, name='hello' WHERE id=1``` This is contrary to the stated behaviour, where primary keys are omitted from the SET clause. Furthermore, this behaviour is harmful, as it can cause the db engine to lock over-aggresively (at least in Postgres). With this change, the emitted SQL is: ```UPDATE users SET name='hello' WHERE id=1```
* - Fixed an unexpected-use regression whereby custom :class:`.Comparator`Mike Bayer2015-06-111-2/+6
| | | | | | | | | | objects that made use of the ``__clause_element__()`` method and returned an object that was an ORM-mapped :class:`.InstrumentedAttribute` and not explicitly a :class:`.ColumnElement` would fail to be correctly handled when passed as an expression to :meth:`.Session.query`. The logic in 0.9 happened to succeed on this, so this use case is now supported. fixes #3448
* - Fixed regression in the :mod:`sqlalchemy.ext.mutable` extensionMike Bayer2015-05-212-2/+37
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | as a result of the bugfix for :ticket:`3167`, where attribute and validation events are no longer called within the flush process. The mutable extension was relying upon this behavior in the case where a column level Python-side default were responsible for generating the new value on INSERT or UPDATE, or when a value were fetched from the RETURNING clause for "eager defaults" mode. The new value would not be subject to any event when populated and the mutable extension could not establish proper coercion or history listening. A new event :meth:`.InstanceEvents.refresh_flush` is added which the mutable extension now makes use of for this use case. fixes #3427 - Added new event :meth:`.InstanceEvents.refresh_flush`, invoked when an INSERT or UPDATE level default value fetched via RETURNING or Python-side default is invoked within the flush process. This is to provide a hook that is no longer present as a result of :ticket:`3167`, where attribute and validation events are no longer called within the flush process. - Added a new semi-public method to :class:`.MutableBase` :meth:`.MutableBase._get_listen_keys`. Overriding this method is needed in the case where a :class:`.MutableBase` subclass needs events to propagate for attribute keys other than the key to which the mutable type is associated with, when intercepting the :meth:`.InstanceEvents.refresh` or :meth:`.InstanceEvents.refresh_flush` events. The current example of this is composites using :class:`.MutableComposite`.
* - Fixed unexpected-use regression where in the odd case that theMike Bayer2015-05-061-3/+5
| | | | | | | | | | primaryjoin of a relationship involved comparison to an unhashable type such as an HSTORE, lazy loads would fail due to a hash-oriented check on the statement parameters, modified in 1.0 as a result of :ticket:`3061` to use hashing and modified in :ticket:`3368` to occur in cases more common than "load on pending". The values are now checked for the ``__hash__`` attribute beforehand. fixes #3416
* - Liberalized an assertion that was added as part of :ticket:`3347`Mike Bayer2015-05-021-1/+5
| | | | | | | | to protect against unknown conditions when splicing inner joins together within joined eager loads with ``innerjoin=True``; if some of the joins use a "secondary" table, the assertion needs to unwrap further joins in order to pass. fixes #3412
* - Repaired / added to tests yet more expressions that were reportedMike Bayer2015-05-011-4/+13
| | | | | | | | | as failing with the new 'entity' key value added to :attr:`.Query.column_descriptions`, the logic to discover the "from" clause is again reworked to accommodate columns from aliased classes, as well as to report the correct value for the "aliased" flag in these cases. fixes #3409
* - Fixed regression from 0.9.10 prior to release due to :ticket:`3349`Mike Bayer2015-04-301-8/+8
| | | | | | | | where the check for query state on :meth:`.Query.update` or :meth:`.Query.delete` compared the empty tuple to itself using ``is``, which fails on Pypy to produce ``True`` in this case; this would erronously emit a warning in 0.9 and raise an exception in 1.0. fixes #3405
* - Fixed regression from as yet unreleased 0.9.10 where the new additionMike Bayer2015-04-301-1/+1
| | | | | | | of ``entity`` to the :attr:`.Query.column_descriptions` accessor would fail if the target entity was produced from a core selectable such as a :class:`.Table` or :class:`.CTE` object. fixes #3403 references #3320
* - Fixed regression within the flush process when an attribute wereMike Bayer2015-04-291-5/+4
| | | | | | | | | set to a SQL expression for an UPDATE, and the SQL expression when compared to the previous value of the attribute would produce a SQL comparison other than ``==`` or ``!=``, the exception "Boolean value of this clause is not defined" would raise. The fix ensures that the unit of work will not interpret the SQL expression in this way. fixes #3402