summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/sql/expression.py
Commit message (Collapse)AuthorAgeFilesLines
...
* Changed behavior of Select.correlate() to ignore correlations to froms that ↵Luke Cyca2013-03-071-25/+34
| | | | don't exist in the superquery.
* - A clear error message is emitted if an event handlerMike Bayer2013-02-251-1/+8
| | | | | | | | | | attempts to emit SQL on a Session within the after_commit() handler, where there is not a viable transaction in progress. [ticket:2662] - rework how SessionTransaction maintains state, using symbols instead. - add lots of notes and cross-linking for session events. - add a link to :func:`.select()` within :meth:`.FromClause.select`.
* The :meth:`.ColumnOperators.in_` operator will now coerceMike Bayer2013-02-021-0/+2
| | | | | values of ``None`` to :func:`.null`. [ticket:2496]
* happy new year (see #2645)Diana Clarke2013-01-011-1/+1
|
* Fixed bug whereby using a label_length on dialect that was smallerMike Bayer2012-12-081-6/+11
| | | | | | than the size of actual column identifiers would fail to render the columns correctly in a SELECT statement. [ticket:2610]
* - multivalued inserts, [ticket:2623]Mike Bayer2012-12-081-55/+133
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - update "not supported" messages for empty inserts, mutlivalue inserts - rework the ValuesBase approach for multiple value sets so that stmt.parameters does store a list for multiple values; the _has_multiple_parameters flag now indicates which of the two modes the statement is within. it now raises exceptions if a subsequent call to values() attempts to call a ValuesBase with one mode in the style of the other mode; that is, you can't switch a single- or multi- valued ValuesBase to the other mode, and also if a multiple value is passed simultaneously with a kwargs set. Added tests for these error conditions - Calling values() multiple times in multivalue mode now extends the parameter list to include the new parameter sets. - add error/test if multiple *args were passed to ValuesBase.values() - rework the compiler approach for multivalue inserts, back to where _get_colparams() returns the same list of (column, value) as before, thereby maintaining the identical number of append() and other calls when multivalue is not enabled. In the case of multivalue, it makes a last-minute switch to return a list of lists instead of the single list. As it constructs the additional lists, the inline defaults and other calculated default parameters of the first parameter set are copied into the newly generated lists so that these features continue to function for a multivalue insert. Multivalue inserts now add no additional function calls to the compilation for regular insert constructs. - parameter lists for multivalue inserts now includes an integer index for all parameter sets. - add detailed documentation for ValuesBase.values(), including careful wording to describe the difference between multiple values and an executemany() call. - add a test for multivalue insert + returning - it works ! - remove the very old/never used "postgresql_returning"/"firebird_returning" flags.
* merge latest defaultMike Bayer2012-12-081-5/+6
|\
| * fixing broken links (see #2625)Diana Clarke2012-12-051-2/+2
| |
| * - BinaryExpression now keeps track of "left" and "right" as passed in,Mike Bayer2012-12-021-3/+4
| | | | | | | | | | so that they can be compared in ``__nonzero__`` prior to their self_group() step. [ticket:2621]
* | updatebase: add support for multi parametersIdan Kamara2012-12-061-9/+22
|/
* just a pep8 pass of lib/sqlalchemy/sql/Diana Clarke2012-11-191-28/+118
|
* Fixed bug in type_coerce() whereby typing informationMike Bayer2012-11-121-0/+2
| | | | | | | | could be lost if the statement were used as a subquery inside of another statement, as well as other similar situations. Among other things, would cause typing information to be lost when the Oracle/mssql dialects would apply limit/offset wrappings. [ticket:2603]
* Fixed bug whereby the ".key" of a Column wasn't beingMike Bayer2012-10-311-2/+4
| | | | | | | used when producing a "proxy" of the column against a selectable. This probably didn't occur in 0.7 since 0.7 doesn't respect the ".key" in a wider range of scenarios. [ticket:2597]
* - add class_ to AliasedInspMike Bayer2012-10-261-0/+17
| | | | | | - redefine inspect(Class.attrname).parent to be always an inspectable target; either Mapper or AliasedInsp - add most major features to 08 migration, document, link
* Added :meth:`.ColumnOperators.notin_`,Mike Bayer2012-10-241-0/+3
| | | | | | :meth:`.ColumnOperators.notlike`, :meth:`.ColumnOperators.notilike` to :class:`.ColumnOperators`. [ticket:2580]
* - [feature] "scalar" selects now have a WHERE methodMike Bayer2012-10-151-5/+9
| | | | | | | | | | | | | | | | | | | | to help with generative building. Also slight adjustment regarding how SS "correlates" columns; the new methodology no longer applies meaning to the underlying Table column being selected. This improves some fairly esoteric situations, and the logic that was there didn't seem to have any purpose. - [feature] Some support for auto-rendering of a relationship join condition based on the mapped attribute, with usage of core SQL constructs. E.g. select([SomeClass]).where(SomeClass.somerelationship) would render SELECT from "someclass" and use the primaryjoin of "somerelationship" as the WHERE clause. This changes the previous meaning of "SomeClass.somerelationship" when used in a core SQL context; previously, it would "resolve" to the parent selectable, which wasn't generally useful. Related to [ticket:2245].
* - use our new Cls.memoized_name._reset(self) method in place of all those ↵Mike Bayer2012-09-231-4/+4
| | | | | | __dict__.pop(), remove reset_memoized
* - aaand actually get is/isnot to be usable with None/NULLMike Bayer2012-09-221-2/+5
|
* - [bug] Added missing operators is_(), isnot()Mike Bayer2012-09-221-0/+2
| | | | | | to the ColumnOperators base, so that these long-available operators are present as methods like all the other operators. [ticket:2544]
* - [bug] CompileError is raised when VARCHAR withMike Bayer2012-09-101-1/+1
| | | | | no length is attempted to be emitted, same way as MySQL. [ticket:2505]
* - [feature] The cast() and extract() constructsMike Bayer2012-09-101-8/+12
| | | | | | | | | will now be produced via the func.* accessor as well, as users naturally try to access these names from func.* they might as well do what's expected, even though the returned object is not a FunctionElement. [ticket:2562]
* `lshift` (<<) and `rshift` (>>) are also supported as optional operators.Mike Bayer2012-09-041-0/+2
|
* - [bug] Fixed a regression since 0.6 regardingMike Bayer2012-08-311-4/+7
| | | | | | | | | | | | | | | | result-row targeting. It should be possible to use a select() statement with string based columns in it, that is select(['id', 'name']).select_from('mytable'), and have this statement be targetable by Column objects with those names; this is the mechanism by which query(MyClass).from_statement(some_statement) works. At some point the specific case of using select(['id']), which is equivalent to select([literal_column('id')]), stopped working here, so this has been re-instated and of course tested. [ticket:2558]
* - [feature] Reworked the startswith(), endswith(),Mike Bayer2012-08-271-34/+3
| | | | | | | | | | | | contains() operators to do a better job with negation (NOT LIKE), and also to assemble them at compilation time so that their rendered SQL can be altered, such as in the case for Firebird STARTING WITH [ticket:2470] - [feature] firebird - The "startswith()" operator renders as "STARTING WITH", "~startswith()" renders as "NOT STARTING WITH", using FB's more efficient operator. [ticket:2470]
* call this "_proxies" since it's not really a public consumption attributeMike Bayer2012-08-271-9/+9
|
* - [feature] The "required" flag is set toMike Bayer2012-08-271-2/+23
| | | | | | | | | | True by default, if not passed explicitly, on bindparam() if the "value" or "callable" parameters are not passed. This will cause statement execution to check for the parameter being present in the final collection of bound parameters, rather than implicitly assigning None. [ticket:2556]
* small tweaks to make insert() behavior more consistent, mostly tests, ↵Mike Bayer2012-08-231-0/+7
| | | | [ticket:2461]
* - [bug] Fixed cextension bug whereby theMike Bayer2012-08-221-1/+2
| | | | | | | | | | | | | | | | | | | "ambiguous column error" would fail to function properly if the given index were a Column object and not a string. Note there are still some column-targeting issues here which are fixed in 0.8. [ticket:2553] - find more cases where column targeting is being inaccurate, add more information to result_map to better differentiate "ambiguous" results from "present" or "not present". In particular, result_map is sensitive to dupes, even though no error is raised; the conflicting columns are added to the "obj" member of the tuple so that the two are both directly accessible in the result proxy - handwringing over the damn "name fallback" thing in results. can't really make it perfect yet - fix up oracle returning clause. not sure why its guarding against labels, remove that for now and see what the bot says.
* - [feature] Enhanced GenericFunction and func.*Mike Bayer2012-08-221-7/+38
| | | | | | | to allow for user-defined GenericFunction subclasses to be available via the func.* namespace automatically by classname, optionally using a package name as well.
* - [feature] The Core oeprator system now includesMike Bayer2012-08-201-4/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | the `getitem` operator, i.e. the bracket operator in Python. This is used at first to provide index and slice behavior to the Postgresql ARRAY type, and also provides a hook for end-user definition of custom __getitem__ schemes which can be applied at the type level as well as within ORM-level custom operator schemes. Note that this change has the effect that descriptor-based __getitem__ schemes used by the ORM in conjunction with synonym() or other "descriptor-wrapped" schemes will need to start using a custom comparator in order to maintain this behavior. - [feature] postgresql.ARRAY now supports indexing and slicing. The Python [] operator is available on all SQL expressions that are of type ARRAY; integer or simple slices can be passed. The slices can also be used on the assignment side in the SET clause of an UPDATE statement by passing them into Update.values(); see the docs for examples. - [feature] Added new "array literal" construct postgresql.array(). Basically a "tuple" that renders as ARRAY[1,2,3].
* - [feature] The prefix_with() method is now availableMike Bayer2012-08-191-70/+54
| | | | | | | | on each of select(), insert(), update(), delete(), all with the same API, accepting multiple prefix calls, as well as a "dialect name" so that the prefix can be limited to one kind of dialect. [ticket:2431]
* tighten this upMike Bayer2012-08-181-8/+8
|
* - aaaaand fix one more glitch I just thought ofMike Bayer2012-08-181-0/+1
|
* - fix the labeled column with column_expression() issue, finishes [ticket:1534]Mike Bayer2012-08-181-7/+12
| | | | | | | | | | | - epic documentation sweep for new operator system, making ORM links consistent and complete, full documentation and examples for type/SQL expression feature - type_coerce() explicitly accepts BindParamClause objects - change UserDefinedType to coerce the other side to itself by default as this is much more likely what's desired - make coerce_compared_type() fully public on all types - have profiling run the test no matter what so that the test_zoomarks don't fail when callcounts are missing
* _adapt_expression() moves fully to _DefaultColumnComparator which resumesMike Bayer2012-08-161-24/+57
| | | | | | its original role as stateful, forms the basis of TypeEngine.Comparator. lots of code goes back mostly as it was just with cleaner typing behavior, such as simple flow in _binary_operate now.
* -we move all the invocation of "_adapt_expression" into ↵Mike Bayer2012-08-161-59/+47
| | | | | | TypeEngine.Comparator. at this point the split of operator stuff is getting awkward and we might want to move _DefaultComparator.
* - we're going to attempt to get the type/operator system to eat its own ↵Mike Bayer2012-08-161-27/+25
| | | | | | | | dogfood and use the type-based comparator in all cases. will attempt to remove the _adapt_expression() method entirely as this represents an incomplete and redundant system (though it might be a lot faster)
* - [bug] Declarative can now propagate a columnMike Bayer2012-08-151-2/+88
| | | | | | | | declared on a single-table inheritance subclass up to the parent class' table, when the parent class is itself mapped to a join() or select() statement, directly or via joined inheritane, and not just a Table. [ticket:2549]
* - for the moment, the default comparisons don't need the ColumnOperator ↵Mike Bayer2012-08-141-15/+9
| | | | | | interface. Still a little concerned about the "self.expr" vs. "expr passed in" thing.
* - fix concat() operator, testsMike Bayer2012-08-141-0/+8
| | | | | | | | - [feature] Custom unary operators can now be used by combining operators.custom_op() with UnaryExpression(). - clean up the operator dispatch system and make it more consistent. This does change the compiler contract for custom ops.
* - all tests passMike Bayer2012-08-131-28/+30
|
* move the whole thing to TypeEngine. the feature is pretty much for free ↵Mike Bayer2012-08-131-41/+13
| | | | like this.
* - develop new system of applying custom operators to ColumnElement classes. ↵Mike Bayer2012-08-131-131/+164
| | | | | | resembles that of the ORM so far.
* - allow compatibility with string ops passed here from custom librariesMike Bayer2012-08-131-0/+4
|
* 2.5 ismMike Bayer2012-07-281-2/+2
|
* - [feature] Added reduce_columns() methodMike Bayer2012-07-281-15/+33
| | | | | | | | | | | | | | | to select() construct, replaces columns inline using the util.reduce_columns utility function to remove equivalent columns. reduce_columns() also adds "with_only_synonyms" to limit the reduction just to those columns which have the same name. The deprecated fold_equivalents() feature is removed [ticket:1729]. - [feature] Added with_labels and reduce_columns keyword arguments to Query.subquery(), to provide two alternate strategies for producing queries with uniquely- named columns. [ticket:1729].
* - we probably need to keep the __clause_element__() logic in, else we haveMike Bayer2012-07-241-35/+37
| | | | | a serious callcount problem. keeping the inspect() usage for those cases where we want to interpret ORM-level FROM objects only.
* - rework some more __clause_element__ methods to use inspection, but theres ↵Mike Bayer2012-07-231-57/+68
| | | | a ton more of these
* - some more interpret_as_fromsMike Bayer2012-07-231-3/+3
|
* - [feature] ORM entities can be passedMike Bayer2012-07-231-11/+43
| | | | | | | to select() as well as the select_from(), correlate(), and correlate_except() methods, where they will be unwrapped into selectables. [ticket:2245]