ElizabethU
54ea290e5b
Fixed #30651 -- Made __eq__() methods return NotImplemented for not implemented comparisons.
...
Changed __eq__ to return NotImplemented instead of False if compared to
an object of the same type, as is recommended by the Python data model
reference. Now these models can be compared to ANY (or other objects
with __eq__ overwritten) without returning False automatically.
2019-10-01 17:58:19 +02:00
Mariusz Felisiak
d275fd04f3
Refs #25367 -- Simplified OrderBy and Lookup by using Case() instead of RawSQL() on Oracle.
...
Follow up to efa1908f66
.
2019-08-29 11:56:12 +02:00
Matthew Schinckel
4137fc2efc
Fixed #25367 -- Allowed boolean expressions in QuerySet.filter() and exclude().
...
This allows using expressions that have an output_field that is a
BooleanField to be used directly in a queryset filters, or in the
When() clauses of a Case() expression.
Thanks Josh Smeaton, Tim Graham, Simon Charette, Mariusz Felisiak, and
Adam Johnson for reviews.
Co-Authored-By: NyanKiyoshi <hello@vanille.bid>
2019-08-29 09:45:29 +02:00
Andrew Brown
691def10a0
Fixed #30727 -- Made Subquery pickle without evaluating their QuerySet.
...
Subquery expression objects, when pickled, were evaluating the QuerySet
objects saved in its _constructor_args attribute.
2019-08-27 13:05:20 +02:00
Simon Charette
efa1908f66
Refs #25367 -- Moved Oracle Exists() handling to contextual methods.
...
Oracle requires the EXISTS expression to be wrapped in a CASE WHEN in
the following cases.
1. When part of a SELECT clause.
2. When part of a ORDER BY clause.
3. When compared against another expression in the WHERE clause.
This commit moves the systematic CASE WHEN wrapping of Exists.as_oracle
to contextual .select_format, Lookup.as_oracle, and OrderBy.as_oracle
methods in order to avoid unnecessary wrapping.
2019-08-13 06:48:14 +02:00
Simon Charette
fff5186d32
Refs #25367 -- Moved select_format hook to BaseExpression.
...
This will expose an intermediary hook for expressions that need special
formatting when used in a SELECT clause.
2019-08-13 06:48:14 +02:00
Simon Charette
088a6fab1c
Refs #24793 -- Removed bogus connection argument from SQLCompiler.compile() calls.
...
The method doesn't expect a connection object to be passed as its second
argument.
2019-08-12 07:47:55 +02:00
aaktsipetrov
4edad1ddf6
Fixed #30668 -- Made QuerySet.filter() raise NotSupportedError if any of source expressions is not filterable.
2019-08-02 15:06:00 +02:00
can
52545e788d
Fixed #28289 -- Fixed crash of RawSQL annotations on inherited model fields.
2019-07-11 08:27:15 +02:00
Simon Charette
ee6e93ec87
Fixed #30628 -- Adjusted expression identity to differentiate bound fields.
...
Expressions referring to different bound fields should not be
considered equal.
Thanks Julien Enselme for the detailed report.
Regression in bc7e288ca9
.
2019-07-10 07:46:08 +02:00
CruxBox
34f8eeea4a
Fixed #30548 -- Improved exception when expression contains mixed types.
2019-06-10 19:48:53 +02:00
Mariusz Felisiak
2a431db0f5
Fixed #28621 -- Fixed crash of annotations with OuterRef.
2019-03-27 08:24:05 +01:00
Simon Charette
5935a9aead
Removed obsolete Lookup hook to prepare rhs expressions.
...
After 3a505c70e7
, all _prepare() methods
return self.
2019-03-21 20:54:21 -04:00
Simon Charette
3a505c70e7
Refs #27149 , #29542 -- Simplified subquery parentheses wrapping logic.
2019-03-21 20:42:26 -04:00
Simon Charette
3543129822
Refs #27149 -- Moved subquery expression resolving to Query.
...
This makes Subquery a thin wrapper over Query and makes sure it respects
the Expression source expression API by accepting the same number of
expressions as it returns. Refs #30188 .
It also makes OuterRef usable in Query without Subquery wrapping. This
should allow Query's internals to more easily perform subquery push downs
during split_exclude(). Refs #21703 .
2019-03-21 20:36:31 -04:00
Simon Charette
96b6ad94d9
Refs #27149 -- Made Subquery store Query instead of Queryset.
...
Subquery only uses Query.
2019-03-21 20:02:51 -04:00
Simon Charette
fb3f034f1c
Fixed #30158 -- Avoided unnecessary subquery group by on aggregation.
...
Subquery annotations can be omitted from the GROUP BY clause on aggregation
as long as they are not explicitly grouped against.
Thanks Jonny Fuller for the report.
2019-03-21 18:48:41 -04:00
Simon Charette
9dc367dc10
Refs #30158 -- Added alias argument to Expression.get_group_by_cols().
2019-03-21 18:47:46 -04:00
Simon Charette
64d5bafbc6
Fixed #30027 -- Errored out on Window function usage if unsupported.
2019-02-09 08:47:41 -05:00
Sergey Fedoseev
eefc9550fd
Simplified Window.as_sql().
2019-02-09 08:41:35 -05:00
Nasir Hussain
f021c110d0
Fixed #30099 -- Fixed invalid SQL when filtering a Subquery by an aggregate.
2019-01-15 07:22:59 -05:00
Jon Dufresne
ad7aa02c1d
Removed unnecessary string formatting of strings.
2019-01-14 21:04:00 -05:00
Mariusz Felisiak
dd8ed64113
Fixed #29851 -- Fixed crash of annotations with window expressions in Subquery.
2018-12-27 20:21:57 +01:00
aspalding
834c4ec8e4
Moved make_hashable() to django.utils and added tests.
2018-10-17 11:17:23 -04:00
Simon Charette
bc7e288ca9
Fixed #29745 -- Based Expression equality on detailed initialization signature.
...
The old implementation considered objects initialized with an equivalent
signature different if some arguments were provided positionally instead of
as keyword arguments.
Refs #11964 , #26167 .
2018-10-02 19:15:20 -04:00
Sergey Fedoseev
8ef8bc0f64
Refs #28909 -- Simplifed code using unpacking generalizations.
2018-09-28 09:57:12 -04:00
Mariusz Felisiak
ac29fec111
Removed unused function argument from Window.as_sql().
...
Unused since its introduction in d549b88050
.
2018-08-20 22:16:27 +02:00
Ian Foote
952f05a6db
Fixed #11964 -- Added support for database check constraints.
2018-07-10 15:32:33 -04:00
Daniel Miller
60156750f6
Fixed #29330 -- Fixed crash when pickling BaseExpression.
...
Regression in cfff2af02b
.
2018-04-16 10:15:13 -04:00
Simon Charette
277ed07209
Fixed #29195 -- Fixed Exists.output_field resolution on single-valued queries.
...
The Subquery class which Exists inherits from defaulted to using single-valued
querie's field if no output_field was explicitly specified on initialization
which was bypassing the Exists.output_field defined at the class level.
Moving Subquery's dynamic output_field resolution to _resolve_output_field
should make sure the fallback logic is only performed if required.
Regression in 08654a99bb
.
Thanks Oli Warner for the detailed report.
2018-03-08 13:30:41 -05:00
Tomáš Ehrlich
fa352626c2
Fixed #29172 -- Fixed crash with Window expression in a subquery.
2018-03-01 10:24:14 -05:00
Mariusz Felisiak
54f80430be
Fixed #29166 -- Fixed crash in When() expression with a list argument.
...
Thanks Matthew Pava for the report and Tim Graham and Carlton Gibson for
reviews.
Regression in 19b2dfd1bf
.
2018-02-28 18:05:23 +01:00
Matthew Schinckel
c412926a2e
Fixed #29142 -- Fixed crash when OuterRef is used with an operator.
2018-02-23 09:38:16 -05:00
Raphael Gaschignard
bf26f66029
Fixed #29118 -- Fixed crash with QuerySet.order_by(Exists(...)).
2018-02-10 18:35:57 -05:00
priyanshsaxena
617d5f410f
Fixed #29066 -- Allowed negating query expressions.
2018-01-31 10:54:19 -05:00
Дилян Палаузов
4c599ece57
Fixed #28930 -- Simplified code with any() and all().
2017-12-26 17:11:15 -05:00
Tim Martin
5778b5701d
Fixed #28731 -- Added an error message when using an empty Q() in a When expression.
...
Otherwise it generates invalid SQL.
2017-12-26 10:39:47 -05:00
Nick Pope
d13a9e44de
Fixed #28909 -- Simplified code using tuple/list/set/dict unpacking.
2017-12-11 07:08:45 -05:00
Simon Charette
b43acf22df
Refs #27849 -- Removed empty Q() hack in filtered Aggregate.as_sql().
...
This required allowing WhereNode to be provided as When(condition).
This was made possible by cf12257db2
.
2017-12-08 10:59:49 -05:00
Дилян Палаузов
d2afa5eb23
Fixed #28860 -- Removed unnecessary len() calls.
2017-12-04 10:35:23 -05:00
Raphael Michel
616f468760
Fixed #28848 -- Fixed SQLite/MySQL crash when ordering by a filtered subquery that uses nulls_first/nulls_last.
2017-11-27 11:35:44 -05:00
Mariusz Felisiak
81e357a7e1
Fixed #28689 -- Fixed unquoted table names in Subquery SQL when using OuterRef.
...
Regression in f48bc7c3db
.
2017-10-25 21:52:38 +02:00
Tomer Chachamu
21a3a29dc9
Fixed #28722 -- Made QuerySet.reverse() affect nulls_first/nulls_last.
2017-10-21 20:55:45 -04:00
Mariusz Felisiak
2b5a511bd9
Merged hash() calls.
...
Thanks Simon Charette for the review.
2017-09-28 12:12:47 -04:00
Tim Graham
cfff2af02b
Fixed #27857 -- Dropped support for Python 3.4.
2017-09-25 17:11:03 -04:00
Mads Jensen
d549b88050
Fixed #26608 -- Added support for window expressions (OVER clause).
...
Thanks Josh Smeaton, Mariusz Felisiak, Sergey Fedoseev, Simon Charettes,
Adam Chainz/Johnson and Tim Graham for comments and reviews and Jamie
Cockburn for initial patch.
2017-09-18 09:42:29 -04:00
Simon Charette
08654a99bb
Fixed #28492 -- Defined default output_field of expressions at the class level.
...
This wasn't possible when settings were accessed during Field initialization
time as our test suite setup script was triggering imports of expressions
before settings were configured.
2017-09-11 12:22:39 -04:00
Tim Graham
6e4c6281db
Reverted "Fixed #27818 -- Replaced try/except/pass with contextlib.suppress()."
...
This reverts commit 550cb3a365
because try/except performs better.
2017-09-07 08:16:21 -04:00
Sergey Fedoseev
47ccefeada
Refs #28459 -- Improved performance of BaseExpression.convert_value().
2017-08-11 18:34:50 -04:00
Sergey Fedoseev
f3e350d631
Replaced typecast_decimal() with decimal.Decimal().
2017-08-11 09:22:40 -04:00
Sergey Fedoseev
c3c6c92d76
Refs #18247 -- Fixed filtering on CombinedExpression(output_field=DecimalField()) annotation on SQLite.
2017-08-10 17:42:30 -04:00
Mariusz Felisiak
7724879b52
Removed unused _combine() node argument from various combinable classes.
...
Unused since f59fd15c49
(Combinable) and
since its introduction in 2d877da855
(SearchVectorCombinable/SearchQueryCombinable/SearchQuery).
2017-08-02 21:21:32 -04:00
Simon Charette
76236f0db2
Stopped setting BaseExpression.copied on copy().
...
Unused since its introduction in f59fd15c49
.
2017-07-21 00:23:21 -04:00
orf
7dfe03f86d
Sorted display of options in Func.__repr__().
2017-07-20 20:51:07 -04:00
Tim Graham
487362fa8f
Fixed #28370 -- Deprecated the context arg of Field.from_db_value() and Expression.convert_value().
...
Unused since a0d166306f
.
2017-07-20 16:30:08 -04:00
Mariusz Felisiak
e5835a7cb8
Allowed Func subclasses to add kwargs to __repr__().
...
Thanks Tim Graham for the review.
2017-07-17 10:07:19 -04:00
Sergey Fedoseev
504ce3914f
Fixed #28394 -- Allowed setting BaseExpression.output_field (renamed from _output_field).
2017-07-14 21:56:01 -04:00
Sergey Fedoseev
29769a9942
Fixed #28382 -- Prevented BaseExpression._output_field from being set if _resolve_output_field() fails.
2017-07-11 08:29:08 -04:00
Mariusz Felisiak
df1106a40f
Fixed #28365 -- Unified DatabaseOperations.date_interval_sql() return value with similar methods.
2017-07-06 07:37:47 -04:00
Anssi Kääriäinen
f7f5edd50d
Removed obsolete Query.tables attribute.
...
Obsolete since Query.alias_map became an OrderedDict (refs #26522 ).
2017-06-29 11:09:11 -04:00
Mads Jensen
550cb3a365
Fixed #27818 -- Replaced try/except/pass with contextlib.suppress().
2017-06-28 14:07:55 -04:00
Tim Graham
f04495521a
Fixed #28199 -- Fixed Subquery generating unnecessary/invalid CAST.
...
Thanks Simon Charette for the fix.
2017-05-30 06:40:41 -04:00
Sergey Fedoseev
068d75688f
Refs #18247 -- Fixed SQLite QuerySet filtering on decimal result of Least and Greatest.
2017-03-29 13:29:53 -04:00
Matthew Schinckel
f48bc7c3db
Fixed #27862 -- Fixed incorrectly quoted table aliases in Subquery SQL.
...
Add aliases from resolved querysets to the parent query's external
aliases to prevent those aliases from being quoted.
Thanks to Vasily Stepanov for the report and Tim Graham for the review.
2017-03-01 07:56:37 -05:00
Anton Samarchyan
60e52a047e
Refs #27656 -- Updated django.db docstring verbs according to PEP 257.
2017-02-28 09:17:27 -05:00
Ian Foote
19b2dfd1bf
Refs #11964 , #26167 -- Made Expressions deconstructible.
2017-02-23 20:44:06 -05:00
Vytis Banaitis
3dcc351691
Refs #23919 -- Used yield from.
2017-02-23 20:06:01 -05:00
Vytis Banaitis
d5088f838d
Fixed #27828 -- Fixed a crash when subtracting Integer/DurationField from DateField on Oracle/PostgreSQL.
2017-02-16 11:46:32 -05:00
Vytis Banaitis
8838d4dd49
Refs #23919 -- Replaced kwargs.pop() with keyword-only arguments.
2017-02-01 11:41:56 -05:00
chillaranand
d6eaf7c018
Refs #23919 -- Replaced super(ClassName, self) with super().
2017-01-25 12:23:46 -05:00
Tim Graham
d170c63351
Refs #23919 -- Removed misc references to Python 2.
2017-01-21 20:02:00 -05:00
Simon Charette
cecc079168
Refs #23919 -- Stopped inheriting from object to define new style classes.
2017-01-19 08:39:46 +01:00
Claude Paroz
7b2f2e74ad
Refs #23919 -- Removed six.<various>_types usage
...
Thanks Tim Graham and Simon Charette for the reviews.
2017-01-18 20:18:46 +01:00
Matthew Schinckel
236ebe94bf
Fixed #27149 -- Added Subquery and Exists database expressions.
...
Thanks Josh Smeaton for Oracle fixes.
2017-01-14 09:12:24 -05:00
anabelensc
1c12df4aa6
Fixed #25912 -- Added binary left/right shift operators to F expressions.
...
Thanks Mariusz Felisiak for review and MySQL advice.
2017-01-03 14:15:46 -05:00
Mariusz Felisiak
7d14889aa3
Fixed #27615 -- Used timedeltas as arguments to Oracle database driver.
...
Removed unused DatabaseFeatures.driver_supports_timedeltas workaround.
2016-12-29 15:49:18 -05:00
Yohann Gabory
47ef8f31f3
Fixed #13312 -- Allowed specifying the order of null fields in queries.
...
Thanks Mariusz Felisiak for finishing the patch.
2016-12-08 09:54:07 -05:00
Sergey Fedoseev
f909fa84be
Fixed #25708 -- Fixed annotations with geometry values.
2016-12-07 14:16:29 -05:00
Johannes Dollinger
46509cf13d
Moved EmpytResultSet to django.core.exceptions.
...
This removes the need for some inner imports.
2016-08-08 10:43:34 -04:00
Johannes Dollinger
1410616e0e
Fixed #26433 -- Fixed Case expressions with empty When.
2016-08-08 10:43:33 -04:00
Josh Smeaton
2a4af0ea43
Fixed #25774 -- Refactor datetime expressions into public API
2016-05-18 20:14:58 +10:00
Claude Paroz
388bb5bd9a
Fixed #22936 -- Obsoleted Field.get_prep_lookup()/get_db_prep_lookup()
...
Thanks Tim Graham for completing the initial patch.
2016-05-04 20:02:01 +02:00
Ville Skyttä
575a9a791e
Normalized "an SQL" spelling.
2016-05-03 19:30:48 -04:00
Tim Graham
a755e0657e
Removed unused BaseExpression.refs_aggregate().
...
Unused since afe0bb7b13
.
2016-04-22 13:04:13 -04:00
Marc Tamlyn
2d877da855
Refs #3254 -- Added full text search to contrib.postgres.
...
Adds a reasonably feature complete implementation of full text search
using the built in PostgreSQL engine. It uses public APIs from
Expression and Lookup.
With thanks to Tim Graham, Simon Charettes, Josh Smeaton, Mikey Ariel
and many others for their advice and review. Particular thanks also go
to the supporters of the contrib.postgres kickstarter.
2016-04-22 10:44:37 +01:00
Tim Graham
2cd2d18851
Fixed W503 flake8 warnings.
2016-04-04 17:14:26 -04:00
Kai Feldhoff
5336158990
Fixed #25759 -- Added keyword arguments to customize Expressions' as_sql().
2016-03-29 08:09:58 -04:00
Tim Graham
fb84e877ce
Normalized Func.as_sqlite() signature.
2016-03-28 10:59:12 -04:00
Simon Charette
766afc22a1
Fixed #24793 -- Unified temporal difference support.
2016-02-26 12:25:12 -05:00
Anssi Kääriäinen
46ecfb9b3a
Fixed #26196 -- Made sure __in lookups use to_field as default.
...
Thanks Simon Charette for the test.
2016-02-11 11:09:08 -05:00
varunnaganathan
3eba9638ee
Fixed #25316 -- Fixed a crash with order_by() and values() after annotate().
2016-01-02 07:06:54 -05:00
Josh Soref
93452a70e8
Fixed many spelling mistakes in code, comments, and docs.
2015-12-03 12:48:24 -05:00
Dmitry Dygalo
917100eed7
Simplified dict initialization in two places.
2015-11-07 21:46:46 +01:00
Sergey Fedoseev
0a26121797
Refs #25629 -- Added `arity` class attribute to `Func` expressions
2015-11-02 20:09:21 +01:00
Alex Hill
134ca4d438
Fixed #24509 -- Added Expression support to SQLInsertCompiler
2015-09-22 23:35:24 +10:00
Adam Chainz
3fe3887a2e
Fixed #25377 -- Changed Count queries to execute COUNT(*) instead of COUNT('*').
2015-09-14 13:41:35 -04:00
Michael Tänzer
3bbaf84d65
Fixed #18247 -- Added cast to NUMERIC for Decimals on sqlite
...
On sqlite the SUM() of a decimal column doesn't have a NUMERIC type so
when comparing it to a string literal (which a Decimal gets converted to
in Django) it is not compared as expected.
2015-06-30 18:27:42 -04:00
Anssi Kääriäinen
7b05d2fdae
Fixed #24752 -- query crash when reusing Case expressions
...
Case expressions weren't copied deep enough (self.cases list was
reused resulting in an error).
2015-05-05 11:38:12 -04:00
Josh Smeaton
02a2943e4c
Fixed #24485 -- Allowed combined expressions to set output_field
2015-03-22 17:36:55 +11:00
Josh Smeaton
127b3873d0
Fixed #24508 -- Made annotations commutative
2015-03-22 17:28:42 +11:00