summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/sql/expression.py
Commit message (Collapse)AuthorAgeFilesLines
* - [bug] Added support for using the .keyMike Bayer2012-02-051-6/+23
| | | | | | | | | | | | of a Column as a string identifier in a result set row. The .key is currently listed as an "alternate" name for a column, and is superseded by the name of a column which has that key value as its regular name. For the next major release of SQLAlchemy we may reverse this precedence so that .key takes precedence, but this is not decided on yet. [ticket:2392]
* - [bug] A significant change to how labelingMike Bayer2012-02-051-20/+54
| | | | | | | | | | | | | | is applied to columns in SELECT statements allows "truncated" labels, that is label names that are generated in Python which exceed the maximum identifier length (note this is configurable via label_length on create_engine()), to be properly referenced when rendered inside of a subquery, as well as to be present in a result set row using their original in-Python names. [ticket:2396] - apply pep8 to test_labels
* - add a warning regarding tuple.in_(), [ticket:2395]Mike Bayer2012-02-041-0/+8
| | | | - cleanup of exc.DBAPIError docstrings
* - [bug] Fixed bug whereby a table-bound ColumnMike Bayer2012-01-221-0/+14
| | | | | | | | | | | object named "<a>_<b>" which matched a column labeled as "<tablename>_<colname>" could match inappropriately when targeting in a result set row. [ticket:2377] - requires that we change the tuple format in RowProxy. Makes an improvement to the cases tested against an unpickled RowProxy as well though doesn't solve the problem there entirely.
* - Fixed regression from 0.6 whereby ifMike Bayer2012-01-101-0/+15
| | | | | | | "load_on_pending" relationship() flag were used where a non-"get()" lazy clause needed to be emitted on a pending object, it would fail to load.
* happy new yearMike Bayer2012-01-041-1/+1
|
* fix a whole bunch of note:: / warning:: that were inline,Mike Bayer2011-12-251-4/+8
| | | | no longer compatible with docutils 0.8
* - [bug] Fixed bug whereby column_property() createdMike Bayer2011-12-031-11/+10
| | | | | | | | | | | | | | | | | | | | | | | | | against ORM-level column could be treated as a distinct entity when producing certain kinds of joined-inh joins. [ticket:2316] - [bug] related to [ticket:2316], made some adjustments to the change from [ticket:2261] regarding the "from" list on a select(). The _froms collection is no longer memoized, as this simplifies various use cases and removes the need for a "warning" if a column is attached to a table after it was already used in an expression - the select() construct will now always produce the correct expression. There's probably no real-world performance hit here; select() objects are almost always made ad-hoc, and systems that wish to optimize the re-use of a select() would be using the "compiled_cache" feature. A hit which would occur when calling select.bind has been reduced, but the vast majority of users shouldn't be using "bound metadata" anyway :).
* merge tipMike Bayer2011-11-221-1/+1
|\
| * typoMike Bayer2011-11-221-1/+1
| |
* | fixes to actually get tests to passMike Bayer2011-11-221-0/+14
| |
* | - commit the unit testsMike Bayer2011-11-221-41/+144
|/ | | | - lots of doc updates to all three of update/insert/delete
* - [bug] further tweak to the fix from [ticket:2261],Mike Bayer2011-11-191-16/+108
| | | | | | | | | | | | so that generative methods work a bit better off of cloned (this is almost a non-use case though). In particular this allows with_only_columns() to behave more consistently. Added additional documentation to with_only_columns() to clarify expected behavior, which changed as a result of [ticket:2261]. [ticket:2319] - document the crap out of with_only_columns, include caveats about the change, etc.
* improved docs on select_from() [ticket:2274]Mike Bayer2011-09-261-4/+13
|
* - Fixed bug whereby with_only_columns() method ofMike Bayer2011-09-211-5/+7
| | | | | Select would fail if a selectable were passed. [ticket:2270]. Also in 0.6.9.
* - Changed the update() method on association proxyMike Bayer2011-09-141-1/+1
| | | | | | | | dictionary to use a duck typing approach, i.e. checks for "keys", to discern between update({}) and update((a, b)). Previously, passing a dictionary that had tuples as keys would be misinterpreted as a sequence. [ticket:2275]
* - Behavioral improvement: emptyMike Bayer2011-09-091-0/+6
| | | | | | | conjunctions such as and_() and or_() will be flattened in the context of an enclosing conjunction, i.e. and_(x, or_()) will produce 'X' and not 'X AND ()'. [ticket:2257].
* - Fixed bug regarding calculation of "from" listMike Bayer2011-09-051-181/+241
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | for a select() element. The "from" calc is now delayed, so that if the construct uses a Column object that is not yet attached to a Table, but is later associated with a Table, it generates SQL using the table as a FROM. This change impacted fairly deeply the mechanics of how the FROM list as well as the "correlates" collection is calculated, as some "clause adaption" schemes (these are used very heavily in the ORM) were relying upon the fact that the "froms" collection would typically be cached before the adaption completed. The rework allows it such that the "froms" collection can be cleared and re-generated at any time. [ticket:2261] - RelationshipProperty.Comparator._criterion_exists() adds an "_orm_adapt" annotation to the correlates target, to work with the change in [ticket:2261]. It's not clear if the change to correlation+adaption mechanics will affect end user code yet. - FromClause now uses group_expirable_memoized_property for late-generated values like primary key, _columns, etc. The Select class adds some tokens to this object and has the nice effect that FromClause doesn't need to know about Select's names anymore. An additional change might be to have Select use a different group_expirable_memoized_property so that it's collection of attribute names are specific to Select though this isn't really necessary right now.
* document autocommit when using the compiler extension, update the ↵Mike Bayer2011-08-181-1/+14
| | | | "understanding autocommit" section
* some core cross linkageMike Bayer2011-08-071-12/+35
|
* - rewrite cloned_traverse() and replacement_traverse() to use a straightMike Bayer2011-07-241-54/+62
| | | | | | | | | | | | | | | | recursive descent with clone() + _copy_internals(). This is essentially what it was doing anyway with lots of unnecessary steps. Fix Alias() to honor the given clone() function which may have been the reason the traversal hadn't been fixed sooner. Alias._copy_internals() will specifically skip an alias of a Table as a more specific form of what it was doing before. This may need to be further improved such that ClauseAdapter or replacement_traverse() send it some specific hints what not to dig into; **kw has been added to all _copy_internals() to support this. replacement/clone traversal is at least clear now. - apply new no_replacement_traverse annotation to join created by _create_joins(), fixes [ticket:2195] - can replace orm.query "_halt_adapt" with "no_replacement_traverse"
* - The join condition produced by with_parentMike Bayer2011-07-061-0/+9
| | | | | | | | as well as when using a "dynamic" relationship against a parent will generate unique bindparams, rather than incorrectly repeating the same bindparam. [ticket:2207]. Also in 0.6.9.
* - Fixed subtle bug that caused SQL to blowMike Bayer2011-06-271-1/+1
| | | | | | | up if: column_property() against subquery + joinedload + LIMIT + order by the column property() occurred. [ticket:2188]. Also in 0.6.9
* - Fixed a subtle bug involving columnMike Bayer2011-06-271-1/+5
| | | | | correspondence in a selectable with the same column repeated. Affects [ticket:2188].
* - Fixed bug whereby comparison of columnMike Bayer2011-06-121-1/+4
| | | | | | | | | expression to a Query() would not call as_scalar() on the underlying SELECT statement to produce a scalar subquery, in the way that occurs if you called it on Query().subquery(). [ticket:2190] - some cleanup to test.orm.test_query
* - Added the same "columns-only" check toMike Bayer2011-06-081-2/+9
| | | | | | mapper.polymorphic_on as used in relationship.order_by, foreign_keys, remote_side, etc.
* - Adjusted the __contains__() method ofMike Bayer2011-06-041-0/+9
| | | | | | | | | a RowProxy result row such that no exception throw is generated internally; NoSuchColumnError() also will generate its message regardless of whether or not the column construct can be coerced to a string. [ticket:2178]. Also in 0.6.8.
* fix some testsMike Bayer2011-06-021-1/+16
|
* - move Operators and ColumnOperators into sqlalchemy.sql.operators - since thisMike Bayer2011-05-281-424/+1
| | | | | is strictly a system of routing Python operators into functions. Keep the references available in expression.py for the near future.
* - Streamlined the process by which a SelectMike Bayer2011-05-281-11/+3
| | | | | | | | | determines what's in it's '.c' collection. Behaves identically, except that a raw ClauseList() passed to select([]) (which is not a documented case anyway) will now be expanded into its individual column elements instead of being ignored.
* - get all comparison operators to document with sphinx - column based, ↵Mike Bayer2011-05-261-79/+321
| | | | | | relationship based. Should fix misunderstandings like [ticket:2177]
* - add some docs to hybrid comparators, operators/comparator logic at the baseMike Bayer2011-05-221-1/+62
|
* - Fixed bug whereby nesting a label of a select()Mike Bayer2011-05-181-5/+7
| | | | | | | | | | | | with another label in it would produce incorrect exported columns. Among other things this would break an ORM column_property() mapping against another column_property(). [ticket:2167]. Also in 0.6.8 - _Label() is always against a column or selectable. remove uncovered case of label against something else. - start taking notes to clean up some of this labeling stuff, which will be [ticket:2168]
* - move documentation of available execution options to Connection - this is ↵Mike Bayer2011-04-171-46/+24
| | | | | | | | | | the main place these should be used - Executable disallows "compiled_cache" option for now which was previously being ignored [ticket:2131] - Query now passes execution options to the Connection rather than the statement so that all options are allowed including compiled cache.
* - Added explicit true()/false() constructs to expressionMike Bayer2011-04-171-3/+51
| | | | | | | lib - coercion rules will intercept "False"/"True" into these constructs. In 0.6, the constructs were typically converted straight to string, which was no longer accepted in 0.7. [ticket:2117]
* a crapload of doc tweaks including [ticket:1666], thanks Toby !Mike Bayer2011-04-161-42/+108
|
* - fixed bug where "from" clause gathering from anMike Bayer2011-04-141-2/+2
| | | | | | over() clause would be an itertools.chain() and not a list, causing "can only concatenate list" TypeError when combined with other clauses.
* - The limit/offset keywords to select() as wellMike Bayer2011-04-071-4/+8
| | | | | | | | | | | as the value passed to select.limit()/offset() will be coerced to integer. [ticket:2116] (also in 0.6.7) - Oracle dialect adds use_binds_for_limits=False create_engine() flag, will render the LIMIT/OFFSET values inline instead of as binds, reported to modify the execution plan used by Oracle. [ticket:2116] (Also in 0.6.7)
* - add some function examples, [ticket:2107]Mike Bayer2011-04-021-0/+2
| | | | | | - have "packagenames" be present on FunctionElement by default so that compiler.visit_function() can be called - add a test for that
* - Added new generic function "next_value()", acceptsMike Bayer2011-03-201-4/+6
| | | | | | | | | | | | | | | | | | | | a Sequence object as its argument and renders the appropriate "next value" generation string on the target platform, if supported. Also provides ".next_value()" method on Sequence itself. [ticket:2085] - added tests for all the conditions described in [ticket:2085] - postgresql dialect will exec/compile a Sequence that has "optional=True". the optional flag is now only checked specifically in the context of a Table primary key evaulation. - func.next_value() or other SQL expression can be embedded directly into an insert() construct, and if implicit or explicit "returning" is used in conjunction with a primary key column, the newly generated value will be present in result.inserted_primary_key. [ticket:2084]
* - some doc reorgMike Bayer2011-03-171-114/+114
| | | | | | | | | | - change engine.Connection to _connection_cls so sphinx doesn't get upset - globally add "." to all :class:`Foo` - start naming sections that are mostly docstrings "API Documentation - blah blah" - move some ad-hoc docstrings into "API" sections, there is some inconsistency here and it may be that we just have to leave it that way - add "internals" rsts to core, orm, I'm not super thrilled how these look but they are targeted by some of the public api docs, users typically become aware of these anyway
* corrected a bunch of spelling typosDiana Clarke2011-02-281-3/+3
|
* Fixed doc problem. Thanks Toby Ho.Michael Trier2011-03-141-1/+1
|
* - The concept of associating a ".bind" directly with aMike Bayer2011-02-101-39/+34
| | | | | | | | ClauseElement has been explicitly moved to Executable, i.e. the mixin that describes ClauseElements which represent engine-executable constructs. This change is an improvement to internal organization and is unlikely to affect any real-world usage. [ticket:2048]
* - Added over() function, method to FunctionElementMike Bayer2011-02-101-4/+160
| | | | | | | | classes, produces the _Over() construct which in turn generates "window functions", i.e. "<window function> OVER (PARTITION BY <partition by>, ORDER BY <order by>)". [ticket:1844]
* - Query.distinct() now accepts column expressionsMike Bayer2011-02-101-41/+100
| | | | | | | | | | | | | | | | | | | as *args, interpreted by the Postgresql dialect as DISTINCT ON (<expr>). [ticket:1069] - select.distinct() now accepts column expressions as *args, interpreted by the Postgresql dialect as DISTINCT ON (<expr>). Note this was already available via passing a list to the `distinct` keyword argument to select(). [ticket:1069] - select.prefix_with() accepts multiple expressions (i.e. *expr), 'prefix' keyword argument to select() accepts a list or tuple. - Passing a string to the `distinct` keyword argument of `select()` for the purpose of emitting special MySQL keywords (DISTINCTROW etc.) is deprecated - use `prefix_with()` for this. - put kw arguments to select() in order - restore docs for _SelectBase, renamed from _SelectBaseMixin
* - figured out the ::autodata directive, can move the docstring forMike Bayer2011-02-091-0/+35
| | | | | | | expression.func into the .py module - added a note about logging only being checked on new connections, as one user had this issue awhile back, and I suspect it for a current ML user issue
* yikes, change that name on the Alias class tooMike Bayer2011-01-301-6/+6
|
* - Added a `name` argument to `Query.subquery()`, to allowMike Bayer2011-01-301-33/+79
| | | | | | | | a fixed name to be assigned to the alias object. [ticket:2030] - changed the kw name 'alias' to 'name' on the alias() standalone function. - fixed up some alias/join docstrings
* rename 'frozendict' to 'immutabledict', since 'frozen' implies hashabilityMike Bayer2011-01-201-3/+3
| | | | | like frozenset which isn't really the purpose of 'immutabledict' (could be someday, in which case, we'd change the name back :) )