3
3
4
4
5
5
class DatabaseFeatures (BaseDatabaseFeatures ):
6
+ allow_sliced_subqueries_with_in = False
6
7
greatest_least_ignores_nulls = True
7
8
has_json_object_function = False
8
9
has_native_json_field = True
@@ -12,6 +13,10 @@ class DatabaseFeatures(BaseDatabaseFeatures):
12
13
supports_json_field_contains = False
13
14
# BSON Date type doesn't support microsecond precision.
14
15
supports_microsecond_precision = False
16
+ supports_select_difference = False
17
+ supports_select_intersection = False
18
+ # Not implemented: https://github.com/mongodb-labs/django-mongodb/issues/72
19
+ supports_select_union = False
15
20
supports_temporal_subtraction = True
16
21
# MongoDB stores datetimes in UTC.
17
22
supports_timezones = False
@@ -60,6 +65,7 @@ class DatabaseFeatures(BaseDatabaseFeatures):
60
65
"update.tests.AdvancedTests.test_update_ordered_by_m2m_annotation_desc" ,
61
66
# 'ManyToOneRel' object has no attribute 'column'
62
67
"m2m_through.tests.M2mThroughTests.test_order_by_relational_field_through_model" ,
68
+ "queries.tests.Queries4Tests.test_order_by_reverse_fk" ,
63
69
# pymongo: ValueError: update cannot be empty
64
70
"update.tests.SimpleTest.test_empty_update_with_inheritance" ,
65
71
"update.tests.SimpleTest.test_nonempty_update_with_inheritance" ,
@@ -99,6 +105,25 @@ class DatabaseFeatures(BaseDatabaseFeatures):
99
105
"ordering.tests.OrderingTests.test_order_by_grandparent_fk_with_expression_in_default_ordering" ,
100
106
"ordering.tests.OrderingTests.test_order_by_parent_fk_with_expression_in_default_ordering" ,
101
107
"ordering.tests.OrderingTests.test_order_by_ptr_field_with_default_ordering_by_expression" ,
108
+ "queries.tests.NullJoinPromotionOrTest.test_isnull_filter_promotion" ,
109
+ "queries.tests.NullJoinPromotionOrTest.test_ticket_21366" ,
110
+ "queries.tests.NullJoinPromotionOrTest.test_ticket_21748" ,
111
+ "queries.tests.Queries1Tests.test_order_by_tables" ,
112
+ "queries.tests.Queries1Tests.test_ticket1050" ,
113
+ "queries.tests.Queries1Tests.test_ticket2400" ,
114
+ "queries.tests.Queries1Tests.test_ticket4358" ,
115
+ "queries.tests.Queries1Tests.test_ticket_10790_1" ,
116
+ "queries.tests.Queries1Tests.test_ticket_10790_4" ,
117
+ "queries.tests.Queries1Tests.test_ticket_10790_6" ,
118
+ "queries.tests.Queries1Tests.test_ticket_10790_7" ,
119
+ "queries.tests.Queries4Tests.test_filter_reverse_non_integer_pk" ,
120
+ "queries.tests.Queries4Tests.test_ticket15316_exclude_false" ,
121
+ "queries.tests.Queries4Tests.test_ticket15316_filter_true" ,
122
+ "queries.tests.Queries4Tests.test_ticket15316_one2one_exclude_false" ,
123
+ "queries.tests.Queries4Tests.test_ticket15316_one2one_filter_true" ,
124
+ "queries.tests.Queries4Tests.test_ticket7095" ,
125
+ "queries.tests.TestTicket24605.test_ticket_24605" ,
126
+ "queries.tests.TestInvalidValuesRelation.test_invalid_values" ,
102
127
# alias().order_by() doesn't work.
103
128
"annotations.tests.AliasTests.test_order_by_alias" ,
104
129
"annotations.tests.AliasTests.test_order_by_alias_aggregate" ,
@@ -107,6 +132,11 @@ class DatabaseFeatures(BaseDatabaseFeatures):
107
132
# Querying the reverse side of a foreign key for None returns no
108
133
# results: https://github.com/mongodb-labs/django-mongodb/issues/76
109
134
"one_to_one.tests.OneToOneTests.test_filter_one_to_one_relations" ,
135
+ # pymongo.errors.OperationFailure: the limit must be positive
136
+ "queries.tests.WeirdQuerysetSlicingTests.test_tickets_7698_10202" ,
137
+ # QuerySet.explain() not implemented:
138
+ # https://github.com/mongodb-labs/django-mongodb/issues/28
139
+ "queries.test_explain.ExplainUnsupportedTests.test_message" ,
110
140
}
111
141
# $bitAnd, #bitOr, and $bitXor are new in MongoDB 6.3.
112
142
_django_test_expected_failures_bitwise = {
@@ -204,6 +234,8 @@ def django_test_expected_failures(self):
204
234
"expressions_case.tests.CaseExpressionTests.test_update_with_expression_as_value" ,
205
235
"expressions_case.tests.CaseExpressionTests.test_update_without_default" ,
206
236
"model_fields.test_integerfield.PositiveIntegerFieldTests.test_negative_values" ,
237
+ "queries.test_bulk_update.BulkUpdateNoteTests" ,
238
+ "queries.test_bulk_update.BulkUpdateTests" ,
207
239
"timezones.tests.NewDatabaseTests.test_update_with_timedelta" ,
208
240
"update.tests.AdvancedTests.test_update_annotated_queryset" ,
209
241
"update.tests.AdvancedTests.test_update_negated_f" ,
@@ -269,6 +301,7 @@ def django_test_expected_failures(self):
269
301
"lookup.test_decimalfield.DecimalFieldLookupTests" ,
270
302
"lookup.tests.LookupQueryingTests.test_aggregate_combined_lookup" ,
271
303
"from_db_value.tests.FromDBValueTest.test_aggregation" ,
304
+ "queries.tests.Queries6Tests.test_col_alias_quoted" ,
272
305
"timezones.tests.LegacyDatabaseTests.test_query_aggregation" ,
273
306
"timezones.tests.LegacyDatabaseTests.test_query_annotation" ,
274
307
"timezones.tests.NewDatabaseTests.test_query_aggregation" ,
@@ -291,6 +324,31 @@ def django_test_expected_failures(self):
291
324
"lookup.tests.LookupTests.test_exact_exists" ,
292
325
"lookup.tests.LookupTests.test_nested_outerref_lhs" ,
293
326
"lookup.tests.LookupQueryingTests.test_filter_exists_lhs" ,
327
+ "queries.tests.ExcludeTest17600.test_exclude_plain" ,
328
+ "queries.tests.ExcludeTest17600.test_exclude_with_q_is_equal_to_plain_exclude_variation" ,
329
+ "queries.tests.ExcludeTest17600.test_exclude_with_q_object_no_distinct" ,
330
+ "queries.tests.ExcludeTests.test_exclude_multivalued_exists" ,
331
+ "queries.tests.ExcludeTests.test_exclude_reverse_fk_field_ref" ,
332
+ "queries.tests.ExcludeTests.test_exclude_with_circular_fk_relation" ,
333
+ "queries.tests.ExcludeTests.test_subquery_exclude_outerref" ,
334
+ "queries.tests.ExcludeTests.test_to_field" ,
335
+ "queries.tests.ForeignKeyToBaseExcludeTests.test_ticket_21787" ,
336
+ "queries.tests.JoinReuseTest.test_inverted_q_across_relations" ,
337
+ "queries.tests.ManyToManyExcludeTest.test_exclude_many_to_many" ,
338
+ "queries.tests.ManyToManyExcludeTest.test_ticket_12823" ,
339
+ "queries.tests.Queries1Tests.test_double_exclude" ,
340
+ "queries.tests.Queries1Tests.test_exclude" ,
341
+ "queries.tests.Queries1Tests.test_exclude_in" ,
342
+ "queries.tests.Queries1Tests.test_excluded_intermediary_m2m_table_joined" ,
343
+ "queries.tests.Queries1Tests.test_nested_exclude" ,
344
+ "queries.tests.Queries4Tests.test_join_reuse_order" ,
345
+ "queries.tests.Queries4Tests.test_ticket24525" ,
346
+ "queries.tests.Queries6Tests.test_tickets_8921_9188" ,
347
+ "queries.tests.Queries6Tests.test_xor_subquery" ,
348
+ "queries.tests.QuerySetBitwiseOperationTests.test_subquery_aliases" ,
349
+ "queries.tests.Ticket20101Tests.test_ticket_20101" ,
350
+ "queries.tests.Ticket20788Tests.test_ticket_20788" ,
351
+ "queries.tests.Ticket22429Tests.test_ticket_22429" ,
294
352
},
295
353
"Subquery is not supported on MongoDB." : {
296
354
"annotations.tests.NonAggregateAnnotationTestCase.test_annotation_filter_with_subquery" ,
@@ -335,6 +393,23 @@ def django_test_expected_failures(self):
335
393
"model_fields.test_jsonfield.TestQuerying.test_usage_in_subquery" ,
336
394
"one_to_one.tests.OneToOneTests.test_get_prefetch_queryset_warning" ,
337
395
"one_to_one.tests.OneToOneTests.test_rel_pk_subquery" ,
396
+ "queries.tests.CloneTests.test_evaluated_queryset_as_argument" ,
397
+ "queries.tests.DoubleInSubqueryTests.test_double_subquery_in" ,
398
+ "queries.tests.ExcludeTests.test_exclude_subquery" ,
399
+ "queries.tests.NullInExcludeTest.test_null_in_exclude_qs" ,
400
+ "queries.tests.Queries1Tests.test_ticket9985" ,
401
+ "queries.tests.Queries1Tests.test_ticket9997" ,
402
+ "queries.tests.Queries1Tests.test_ticket10742" ,
403
+ "queries.tests.Queries4Tests.test_ticket10181" ,
404
+ "queries.tests.Queries5Tests.test_queryset_reuse" ,
405
+ "queries.tests.QuerySetBitwiseOperationTests.test_conflicting_aliases_during_combine" ,
406
+ "queries.tests.RelabelCloneTest.test_ticket_19964" ,
407
+ "queries.tests.RelatedLookupTypeTests.test_correct_lookup" ,
408
+ "queries.tests.RelatedLookupTypeTests.test_values_queryset_lookup" ,
409
+ "queries.tests.Ticket23605Tests.test_ticket_23605" ,
410
+ "queries.tests.ToFieldTests.test_in_subquery" ,
411
+ "queries.tests.ToFieldTests.test_nested_in_subquery" ,
412
+ "queries.tests.ValuesSubqueryTests.test_values_in_subquery" ,
338
413
},
339
414
# Invalid $project :: caused by :: Unknown expression $count
340
415
# https://github.com/mongodb-labs/django-mongodb/issues/79
@@ -356,6 +431,11 @@ def django_test_expected_failures(self):
356
431
"expressions.tests.FieldTransformTests.test_month_aggregation" ,
357
432
"expressions_case.tests.CaseDocumentationExamples.test_conditional_aggregation_example" ,
358
433
"model_fields.test_jsonfield.TestQuerying.test_ordering_grouping_by_count" ,
434
+ "queries.tests.EmptyQuerySetTests.test_values_subquery" ,
435
+ "queries.tests.Queries1Tests.test_ticket_20250" ,
436
+ "queries.tests.ValuesQuerysetTests.test_named_values_list_expression_with_default_alias" ,
437
+ "queries.tests.WeirdQuerysetSlicingTests.test_empty_sliced_subquery" ,
438
+ "queries.tests.WeirdQuerysetSlicingTests.test_empty_sliced_subquery_exclude" ,
359
439
},
360
440
"Cannot use QuerySet.delete() when querying across multiple collections on MongoDB." : {
361
441
"delete.tests.FastDeleteTests.test_fast_delete_aggregation" ,
@@ -379,12 +459,29 @@ def django_test_expected_failures(self):
379
459
"datetimes.tests.DateTimesTests.test_datetimes_has_lazy_iterator" ,
380
460
"datetimes.tests.DateTimesTests.test_datetimes_returns_available_dates_for_given_scope_and_given_field" ,
381
461
"datetimes.tests.DateTimesTests.test_related_model_traverse" ,
462
+ "queries.tests.Queries1Tests.test_ticket7155" ,
463
+ "queries.tests.Queries1Tests.test_tickets_7087_12242" ,
382
464
"timezones.tests.LegacyDatabaseTests.test_query_datetimes" ,
383
465
"timezones.tests.NewDatabaseTests.test_query_datetimes" ,
384
466
"timezones.tests.NewDatabaseTests.test_query_datetimes_in_other_timezone" ,
385
467
},
386
468
"QuerySet.distinct() is not supported." : {
387
469
"lookup.tests.LookupTests.test_lookup_collision_distinct" ,
470
+ "queries.tests.ExcludeTest17600.test_exclude_plain_distinct" ,
471
+ "queries.tests.ExcludeTest17600.test_exclude_with_q_is_equal_to_plain_exclude" ,
472
+ "queries.tests.ExcludeTest17600.test_exclude_with_q_object_distinct" ,
473
+ "queries.tests.ExcludeTests.test_exclude_m2m_through" ,
474
+ "queries.tests.ExistsSql.test_distinct_exists" ,
475
+ "queries.tests.ExistsSql.test_sliced_distinct_exists" ,
476
+ "queries.tests.ExistsSql.test_ticket_18414" ,
477
+ "queries.tests.Queries1Tests.test_ticket4464" ,
478
+ "queries.tests.Queries1Tests.test_ticket7096" ,
479
+ "queries.tests.Queries1Tests.test_ticket7791" ,
480
+ "queries.tests.Queries1Tests.test_tickets_1878_2939" ,
481
+ "queries.tests.Queries1Tests.test_tickets_5321_7070" ,
482
+ "queries.tests.Queries1Tests.test_tickets_5324_6704" ,
483
+ "queries.tests.Queries1Tests.test_tickets_6180_6203" ,
484
+ "queries.tests.Queries6Tests.test_distinct_ordered_sliced_subquery_aggregation" ,
388
485
"update.tests.AdvancedTests.test_update_all" ,
389
486
},
390
487
"QuerySet.extra() is not supported." : {
@@ -399,6 +496,18 @@ def django_test_expected_failures(self):
399
496
"ordering.tests.OrderingTests.test_extra_ordering" ,
400
497
"ordering.tests.OrderingTests.test_extra_ordering_quoting" ,
401
498
"ordering.tests.OrderingTests.test_extra_ordering_with_table_name" ,
499
+ "queries.tests.EscapingTests.test_ticket_7302" ,
500
+ "queries.tests.Queries5Tests.test_extra_select_literal_percent_s" ,
501
+ "queries.tests.Queries5Tests.test_ticket7256" ,
502
+ "queries.tests.ValuesQuerysetTests.test_extra_multiple_select_params_values_order_by" ,
503
+ "queries.tests.ValuesQuerysetTests.test_extra_select_params_values_order_in_extra" ,
504
+ "queries.tests.ValuesQuerysetTests.test_extra_values" ,
505
+ "queries.tests.ValuesQuerysetTests.test_extra_values_list" ,
506
+ "queries.tests.ValuesQuerysetTests.test_extra_values_order_multiple" ,
507
+ "queries.tests.ValuesQuerysetTests.test_extra_values_order_twice" ,
508
+ "queries.tests.ValuesQuerysetTests.test_flat_extra_values_list" ,
509
+ "queries.tests.ValuesQuerysetTests.test_named_values_list_with_fields" ,
510
+ "queries.tests.ValuesQuerysetTests.test_named_values_list_without_fields" ,
402
511
"select_related.tests.SelectRelatedTests.test_select_related_with_extra" ,
403
512
},
404
513
"QuerySet.update() crash: Unrecognized expression '$count'" : {
@@ -408,6 +517,7 @@ def django_test_expected_failures(self):
408
517
"delete.tests.DeletionTests.test_only_referenced_fields_selected" ,
409
518
"lookup.tests.LookupTests.test_in_ignore_none" ,
410
519
"lookup.tests.LookupTests.test_textfield_exact_null" ,
520
+ "queries.tests.ExistsSql.test_exists" ,
411
521
},
412
522
"Test executes raw SQL." : {
413
523
"annotations.tests.NonAggregateAnnotationTestCase.test_raw_sql_with_inherited_field" ,
@@ -417,6 +527,7 @@ def django_test_expected_failures(self):
417
527
"model_fields.test_jsonfield.TestQuerying.test_key_sql_injection_escape" ,
418
528
"model_fields.test_jsonfield.TestQuerying.test_key_transform_raw_expression" ,
419
529
"model_fields.test_jsonfield.TestQuerying.test_nested_key_transform_raw_expression" ,
530
+ "queries.tests.Queries1Tests.test_order_by_rawsql" ,
420
531
"timezones.tests.LegacyDatabaseTests.test_cursor_execute_accepts_naive_datetime" ,
421
532
"timezones.tests.LegacyDatabaseTests.test_cursor_execute_returns_naive_datetime" ,
422
533
"timezones.tests.LegacyDatabaseTests.test_raw_sql" ,
@@ -501,6 +612,25 @@ def django_test_expected_failures(self):
501
612
"Randomized ordering isn't supported by MongoDB." : {
502
613
"ordering.tests.OrderingTests.test_random_ordering" ,
503
614
},
615
+ # https://github.com/mongodb-labs/django-mongodb/issues/34
616
+ "Ordering can't span tables on MongoDB" : {
617
+ "queries.tests.ConditionalTests.test_infinite_loop" ,
618
+ "queries.tests.NullableRelOrderingTests.test_join_already_in_query" ,
619
+ "queries.tests.Queries1Tests.test_order_by_related_field_transform" ,
620
+ "queries.tests.Queries1Tests.test_ticket7181" ,
621
+ "queries.tests.Queries1Tests.test_tickets_2076_7256" ,
622
+ "queries.tests.Queries1Tests.test_tickets_2874_3002" ,
623
+ "queries.tests.Queries5Tests.test_ordering" ,
624
+ "queries.tests.Queries5Tests.test_ticket9848" ,
625
+ "queries.tests.Ticket14056Tests.test_ticket_14056" ,
626
+ },
627
+ "Queries without a collection aren't supported on MongoDB." : {
628
+ "queries.test_q.QCheckTests" ,
629
+ "queries.test_query.TestQueryNoModel" ,
630
+ },
631
+ "Test not applicable for custom SQL compiler." : {
632
+ "queries.test_iterator.QuerySetIteratorTests" ,
633
+ },
504
634
}
505
635
506
636
@cached_property
0 commit comments