@@ -12,6 +12,7 @@ class DatabaseFeatures(BaseDatabaseFeatures):
12
12
supports_json_field_contains = False
13
13
# BSON Date type doesn't support microsecond precision.
14
14
supports_microsecond_precision = False
15
+ supports_temporal_subtraction = True
15
16
# MongoDB stores datetimes in UTC.
16
17
supports_timezones = False
17
18
# Not implemented: https://github.com/mongodb-labs/django-mongodb/issues/7
@@ -34,6 +35,8 @@ class DatabaseFeatures(BaseDatabaseFeatures):
34
35
"db_functions.tests.FunctionTests.test_nested_function_ordering" ,
35
36
"db_functions.text.test_length.LengthTests.test_ordering" ,
36
37
"db_functions.text.test_strindex.StrIndexTests.test_order_by" ,
38
+ "expressions.tests.BasicExpressionsTests.test_order_by_exists" ,
39
+ "expressions.tests.BasicExpressionsTests.test_order_by_multiline_sql" ,
37
40
"expressions_case.tests.CaseExpressionTests.test_order_by_conditional_explicit" ,
38
41
"lookup.tests.LookupQueryingTests.test_lookup_in_order_by" ,
39
42
"ordering.tests.OrderingTests.test_default_ordering_by_f_expression" ,
@@ -62,6 +65,9 @@ class DatabaseFeatures(BaseDatabaseFeatures):
62
65
# pk__in=queryset doesn't work because subqueries aren't a thing in
63
66
# MongoDB.
64
67
"annotations.tests.NonAggregateAnnotationTestCase.test_annotation_and_alias_filter_in_subquery" ,
68
+ "expressions.tests.BasicExpressionsTests.test_in_subquery" ,
69
+ "expressions.tests.BasicExpressionsTests.test_subquery_group_by_outerref_in_filter" ,
70
+ "expressions.tests.BasicExpressionsTests.test_uuid_pk_subquery" ,
65
71
"model_fields.test_jsonfield.TestQuerying.test_usage_in_subquery" ,
66
72
# Length of null considered zero rather than null.
67
73
"db_functions.text.test_length.LengthTests.test_basic" ,
@@ -70,7 +76,20 @@ class DatabaseFeatures(BaseDatabaseFeatures):
70
76
"model_fields.test_jsonfield.TestQuerying.test_order_grouping_custom_decoder" ,
71
77
"model_fields.test_jsonfield.TestQuerying.test_ordering_by_transform" ,
72
78
"model_fields.test_jsonfield.TestQuerying.test_ordering_grouping_by_key_transform" ,
79
+ # DatabaseOperations.convert_decimalfield_value() crash:
80
+ # 'int' object has no attribute 'to_decimal'.
81
+ "expressions.tests.ExpressionsNumericTests.test_filter_decimal_expression" ,
82
+ "expressions.tests.ValueTests.test_output_field_decimalfield" ,
83
+ # pymongo.errors.OperationFailure: $multiply only supports numeric
84
+ # types, not date. (should be wrapped in DatabaseError).
85
+ "expressions.tests.FTimeDeltaTests.test_invalid_operator" ,
86
+ # InvalidDocument: cannot encode object of type: <class 'datetime.time'>
87
+ "expressions.tests.FTimeDeltaTests.test_time_subtraction" ,
88
+ # crash in DatabaseOperations.convert_durationfield_value():
89
+ # unsupported type for timedelta milliseconds component: Decimal128
90
+ "expressions.tests.FTimeDeltaTests.test_durationfield_multiply_divide" ,
73
91
}
92
+
74
93
# $bitAnd, #bitOr, and $bitXor are new in MongoDB 6.3.
75
94
_django_test_expected_failures_bitwise = {
76
95
"expressions.tests.ExpressionOperatorTests.test_lefthand_bitwise_and" ,
@@ -93,6 +112,10 @@ def django_test_expected_failures(self):
93
112
"Insert expressions aren't supported." : {
94
113
"bulk_create.tests.BulkCreateTests.test_bulk_insert_now" ,
95
114
"bulk_create.tests.BulkCreateTests.test_bulk_insert_expressions" ,
115
+ "expressions.tests.BasicExpressionsTests.test_new_object_create" ,
116
+ "expressions.tests.BasicExpressionsTests.test_new_object_save" ,
117
+ "expressions.tests.BasicExpressionsTests.test_object_create_with_aggregate" ,
118
+ "expressions.tests.BasicExpressionsTests.test_object_create_with_f_expression_in_subquery" ,
96
119
# PI()
97
120
"db_functions.math.test_round.RoundTests.test_decimal_with_precision" ,
98
121
"db_functions.math.test_round.RoundTests.test_float_with_precision" ,
@@ -117,6 +140,21 @@ def django_test_expected_failures(self):
117
140
"db_functions.text.test_replace.ReplaceTests.test_update" ,
118
141
"db_functions.text.test_substr.SubstrTests.test_basic" ,
119
142
"db_functions.text.test_upper.UpperTests.test_basic" ,
143
+ "expressions.tests.BasicExpressionsTests.test_arithmetic" ,
144
+ "expressions.tests.BasicExpressionsTests.test_filter_with_join" ,
145
+ "expressions.tests.BasicExpressionsTests.test_object_update" ,
146
+ "expressions.tests.BasicExpressionsTests.test_object_update_unsaved_objects" ,
147
+ "expressions.tests.BasicExpressionsTests.test_order_of_operations" ,
148
+ "expressions.tests.BasicExpressionsTests.test_parenthesis_priority" ,
149
+ "expressions.tests.BasicExpressionsTests.test_update" ,
150
+ "expressions.tests.BasicExpressionsTests.test_update_with_fk" ,
151
+ "expressions.tests.BasicExpressionsTests.test_update_with_none" ,
152
+ "expressions.tests.ExpressionsNumericTests.test_decimal_expression" ,
153
+ "expressions.tests.ExpressionsNumericTests.test_increment_value" ,
154
+ "expressions.tests.FTimeDeltaTests.test_delta_update" ,
155
+ "expressions.tests.FTimeDeltaTests.test_negative_timedelta_update" ,
156
+ "expressions.tests.ValueTests.test_update_TimeField_using_Value" ,
157
+ "expressions.tests.ValueTests.test_update_UUIDField_using_Value" ,
120
158
"expressions_case.tests.CaseDocumentationExamples.test_conditional_update_example" ,
121
159
"expressions_case.tests.CaseExpressionTests.test_update" ,
122
160
"expressions_case.tests.CaseExpressionTests.test_update_big_integer" ,
@@ -215,13 +253,25 @@ def django_test_expected_failures(self):
215
253
"expressions_case.tests.CaseExpressionTests.test_aggregate_with_expression_as_value" ,
216
254
"expressions_case.tests.CaseExpressionTests.test_aggregation_empty_cases" ,
217
255
"lookup.tests.LookupQueryingTests.test_aggregate_combined_lookup" ,
256
+ "expressions.test_queryset_values.ValuesExpressionsTests.test_chained_values_with_expression" ,
257
+ "expressions.test_queryset_values.ValuesExpressionsTests.test_values_expression_group_by" ,
218
258
"from_db_value.tests.FromDBValueTest.test_aggregation" ,
219
259
"timezones.tests.LegacyDatabaseTests.test_query_aggregation" ,
220
260
"timezones.tests.NewDatabaseTests.test_query_aggregation" ,
221
261
},
222
262
"QuerySet.annotate() has some limitations." : {
223
263
# Exists not supported.
224
264
"annotations.tests.NonAggregateAnnotationTestCase.test_annotation_exists_none_query" ,
265
+ "expressions.tests.BasicExpressionsTests.test_annotation_with_deeply_nested_outerref" ,
266
+ "expressions.tests.BasicExpressionsTests.test_boolean_expression_combined" ,
267
+ "expressions.tests.BasicExpressionsTests.test_boolean_expression_combined_with_empty_Q" ,
268
+ "expressions.tests.BasicExpressionsTests.test_boolean_expression_in_Q" ,
269
+ "expressions.tests.BasicExpressionsTests.test_case_in_filter_if_boolean_output_field" ,
270
+ "expressions.tests.BasicExpressionsTests.test_exists_in_filter" ,
271
+ "expressions.tests.ExistsTests.test_filter_by_empty_exists" ,
272
+ "expressions.tests.ExistsTests.test_negated_empty_exists" ,
273
+ "expressions.tests.ExistsTests.test_optimizations" ,
274
+ "expressions.tests.ExistsTests.test_select_negated_empty_exists" ,
225
275
"lookup.tests.LookupTests.test_exact_exists" ,
226
276
"lookup.tests.LookupTests.test_nested_outerref_lhs" ,
227
277
"lookup.tests.LookupQueryingTests.test_filter_exists_lhs" ,
@@ -235,16 +285,35 @@ def django_test_expected_failures(self):
235
285
"db_functions.comparison.test_coalesce.CoalesceTests.test_empty_queryset" ,
236
286
"db_functions.datetime.test_extract_trunc.DateFunctionTests.test_extract_outerref" ,
237
287
"db_functions.datetime.test_extract_trunc.DateFunctionTests.test_trunc_subquery_with_parameters" ,
288
+ "expressions.tests.BasicExpressionsTests.test_aggregate_subquery_annotation" ,
289
+ "expressions.tests.BasicExpressionsTests.test_annotation_with_nested_outerref" ,
290
+ "expressions.tests.BasicExpressionsTests.test_annotation_with_outerref" ,
291
+ "expressions.tests.BasicExpressionsTests.test_annotations_within_subquery" ,
292
+ "expressions.tests.BasicExpressionsTests.test_nested_subquery" ,
293
+ "expressions.tests.BasicExpressionsTests.test_nested_subquery_join_outer_ref" ,
294
+ "expressions.tests.BasicExpressionsTests.test_nested_subquery_outer_ref_2" ,
295
+ "expressions.tests.BasicExpressionsTests.test_nested_subquery_outer_ref_with_autofield" ,
296
+ "expressions.tests.BasicExpressionsTests.test_nested_outerref_with_function" ,
297
+ "expressions.tests.BasicExpressionsTests.test_subquery" ,
298
+ "expressions.tests.BasicExpressionsTests.test_subquery_filter_by_aggregate" ,
299
+ "expressions.tests.BasicExpressionsTests.test_subquery_filter_by_lazy" ,
300
+ "expressions.tests.BasicExpressionsTests.test_subquery_in_filter" ,
301
+ "expressions.tests.BasicExpressionsTests.test_subquery_references_joined_table_twice" ,
238
302
"expressions_case.tests.CaseExpressionTests.test_in_subquery" ,
239
303
"lookup.tests.LookupQueryingTests.test_filter_subquery_lhs" ,
240
304
"model_fields.test_jsonfield.TestQuerying.test_nested_key_transform_on_subquery" ,
241
305
"model_fields.test_jsonfield.TestQuerying.test_obj_subquery_lookup" ,
306
+ # 'Query' object has no attribute 'as_mql'
307
+ "expressions.tests.FTimeDeltaTests.test_date_subquery_subtraction" ,
308
+ "expressions.tests.FTimeDeltaTests.test_datetime_subquery_subtraction" ,
309
+ "expressions.tests.FTimeDeltaTests.test_time_subquery_subtraction" ,
242
310
# Invalid $project :: caused by :: Unknown expression $count,
243
311
"annotations.tests.NonAggregateAnnotationTestCase.test_combined_expression_annotation_with_aggregation" ,
244
312
"annotations.tests.NonAggregateAnnotationTestCase.test_combined_f_expression_annotation_with_aggregation" ,
245
313
"annotations.tests.NonAggregateAnnotationTestCase.test_full_expression_annotation_with_aggregation" ,
246
314
"annotations.tests.NonAggregateAnnotationTestCase.test_grouping_by_q_expression_annotation" ,
247
315
"annotations.tests.NonAggregateAnnotationTestCase.test_q_expression_annotation_with_aggregation" ,
316
+ "expressions.tests.FieldTransformTests.test_month_aggregation" ,
248
317
"expressions_case.tests.CaseDocumentationExamples.test_conditional_aggregation_example" ,
249
318
# Func not implemented.
250
319
"annotations.tests.NonAggregateAnnotationTestCase.test_custom_functions" ,
@@ -322,6 +391,14 @@ def django_test_expected_failures(self):
322
391
"defer.tests.DeferTests.test_only_baseclass_when_subclass_has_no_added_fields" ,
323
392
"defer.tests.TestDefer2.test_defer_inheritance_pk_chaining" ,
324
393
"defer_regress.tests.DeferRegressionTest.test_ticket_16409" ,
394
+ "expressions.test_queryset_values.ValuesExpressionsTests.test_values_expression" ,
395
+ "expressions.test_queryset_values.ValuesExpressionsTests.test_values_list_expression" ,
396
+ "expressions.test_queryset_values.ValuesExpressionsTests.test_values_list_expression_flat" ,
397
+ "expressions.tests.BasicExpressionsTests.test_annotate_values_aggregate" ,
398
+ "expressions.tests.BasicExpressionsTests.test_outerref_mixed_case_table_name" ,
399
+ "expressions.tests.BasicExpressionsTests.test_outerref_with_operator" ,
400
+ "expressions.tests.IterableLookupInnerExpressionsTests.test_expressions_in_lookups_join_choice" ,
401
+ "expressions.tests.IterableLookupInnerExpressionsTests.test_in_lookup_allows_F_expressions_and_expressions_for_datetimes" ,
325
402
"expressions_case.tests.CaseExpressionTests.test_annotate_with_aggregation_in_condition" ,
326
403
"expressions_case.tests.CaseExpressionTests.test_annotate_with_aggregation_in_predicate" ,
327
404
"expressions_case.tests.CaseExpressionTests.test_annotate_with_aggregation_in_value" ,
@@ -378,6 +455,8 @@ def django_test_expected_failures(self):
378
455
},
379
456
"Test executes raw SQL." : {
380
457
"annotations.tests.NonAggregateAnnotationTestCase.test_raw_sql_with_inherited_field" ,
458
+ "expressions.tests.BasicExpressionsTests.test_annotate_values_filter" ,
459
+ "expressions.tests.BasicExpressionsTests.test_filtering_on_rawsql_that_is_boolean" ,
381
460
"model_fields.test_jsonfield.TestQuerying.test_key_sql_injection_escape" ,
382
461
"model_fields.test_jsonfield.TestQuerying.test_key_transform_raw_expression" ,
383
462
"model_fields.test_jsonfield.TestQuerying.test_nested_key_transform_raw_expression" ,
@@ -417,6 +496,7 @@ def django_test_expected_failures(self):
417
496
"db_functions.datetime.test_extract_trunc.DateFunctionTests.test_trunc_date_func" ,
418
497
"db_functions.datetime.test_extract_trunc.DateFunctionTests.test_trunc_date_none" ,
419
498
"db_functions.datetime.test_extract_trunc.DateFunctionTests.test_trunc_lookup_name_sql_injection" ,
499
+ "expressions.tests.FieldTransformTests.test_multiple_transforms_in_values" ,
420
500
"model_fields.test_datetimefield.DateTimeFieldTests.test_lookup_date_with_use_tz" ,
421
501
"model_fields.test_datetimefield.DateTimeFieldTests.test_lookup_date_without_use_tz" ,
422
502
"timezones.tests.NewDatabaseTests.test_query_convert_timezones" ,
0 commit comments