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 = {
@@ -208,6 +238,8 @@ def django_test_expected_failures(self):
208
238
"expressions_case.tests.CaseExpressionTests.test_update_with_expression_as_value" ,
209
239
"expressions_case.tests.CaseExpressionTests.test_update_without_default" ,
210
240
"model_fields.test_integerfield.PositiveIntegerFieldTests.test_negative_values" ,
241
+ "queries.test_bulk_update.BulkUpdateNoteTests" ,
242
+ "queries.test_bulk_update.BulkUpdateTests" ,
211
243
"timezones.tests.NewDatabaseTests.test_update_with_timedelta" ,
212
244
"update.tests.AdvancedTests.test_update_annotated_queryset" ,
213
245
"update.tests.AdvancedTests.test_update_negated_f" ,
@@ -296,6 +328,31 @@ def django_test_expected_failures(self):
296
328
"lookup.tests.LookupTests.test_exact_exists" ,
297
329
"lookup.tests.LookupTests.test_nested_outerref_lhs" ,
298
330
"lookup.tests.LookupQueryingTests.test_filter_exists_lhs" ,
331
+ "queries.tests.ExcludeTest17600.test_exclude_plain" ,
332
+ "queries.tests.ExcludeTest17600.test_exclude_with_q_is_equal_to_plain_exclude_variation" ,
333
+ "queries.tests.ExcludeTest17600.test_exclude_with_q_object_no_distinct" ,
334
+ "queries.tests.ExcludeTests.test_exclude_multivalued_exists" ,
335
+ "queries.tests.ExcludeTests.test_exclude_reverse_fk_field_ref" ,
336
+ "queries.tests.ExcludeTests.test_exclude_with_circular_fk_relation" ,
337
+ "queries.tests.ExcludeTests.test_subquery_exclude_outerref" ,
338
+ "queries.tests.ExcludeTests.test_to_field" ,
339
+ "queries.tests.ForeignKeyToBaseExcludeTests.test_ticket_21787" ,
340
+ "queries.tests.JoinReuseTest.test_inverted_q_across_relations" ,
341
+ "queries.tests.ManyToManyExcludeTest.test_exclude_many_to_many" ,
342
+ "queries.tests.ManyToManyExcludeTest.test_ticket_12823" ,
343
+ "queries.tests.Queries1Tests.test_double_exclude" ,
344
+ "queries.tests.Queries1Tests.test_exclude" ,
345
+ "queries.tests.Queries1Tests.test_exclude_in" ,
346
+ "queries.tests.Queries1Tests.test_excluded_intermediary_m2m_table_joined" ,
347
+ "queries.tests.Queries1Tests.test_nested_exclude" ,
348
+ "queries.tests.Queries4Tests.test_join_reuse_order" ,
349
+ "queries.tests.Queries4Tests.test_ticket24525" ,
350
+ "queries.tests.Queries6Tests.test_tickets_8921_9188" ,
351
+ "queries.tests.Queries6Tests.test_xor_subquery" ,
352
+ "queries.tests.QuerySetBitwiseOperationTests.test_subquery_aliases" ,
353
+ "queries.tests.Ticket20101Tests.test_ticket_20101" ,
354
+ "queries.tests.Ticket20788Tests.test_ticket_20788" ,
355
+ "queries.tests.Ticket22429Tests.test_ticket_22429" ,
299
356
},
300
357
"Subquery is not supported on MongoDB." : {
301
358
"annotations.tests.NonAggregateAnnotationTestCase.test_annotation_filter_with_subquery" ,
@@ -340,6 +397,26 @@ def django_test_expected_failures(self):
340
397
"model_fields.test_jsonfield.TestQuerying.test_usage_in_subquery" ,
341
398
"one_to_one.tests.OneToOneTests.test_get_prefetch_queryset_warning" ,
342
399
"one_to_one.tests.OneToOneTests.test_rel_pk_subquery" ,
400
+ "queries.tests.CloneTests.test_evaluated_queryset_as_argument" ,
401
+ "queries.tests.DoubleInSubqueryTests.test_double_subquery_in" ,
402
+ "queries.tests.EmptyQuerySetTests.test_values_subquery" ,
403
+ "queries.tests.ExcludeTests.test_exclude_subquery" ,
404
+ "queries.tests.NullInExcludeTest.test_null_in_exclude_qs" ,
405
+ "queries.tests.Queries1Tests.test_ticket9985" ,
406
+ "queries.tests.Queries1Tests.test_ticket9997" ,
407
+ "queries.tests.Queries1Tests.test_ticket10742" ,
408
+ "queries.tests.Queries4Tests.test_ticket10181" ,
409
+ "queries.tests.Queries5Tests.test_queryset_reuse" ,
410
+ "queries.tests.QuerySetBitwiseOperationTests.test_conflicting_aliases_during_combine" ,
411
+ "queries.tests.RelabelCloneTest.test_ticket_19964" ,
412
+ "queries.tests.RelatedLookupTypeTests.test_correct_lookup" ,
413
+ "queries.tests.RelatedLookupTypeTests.test_values_queryset_lookup" ,
414
+ "queries.tests.Ticket23605Tests.test_ticket_23605" ,
415
+ "queries.tests.ToFieldTests.test_in_subquery" ,
416
+ "queries.tests.ToFieldTests.test_nested_in_subquery" ,
417
+ "queries.tests.ValuesSubqueryTests.test_values_in_subquery" ,
418
+ "queries.tests.WeirdQuerysetSlicingTests.test_empty_sliced_subquery" ,
419
+ "queries.tests.WeirdQuerysetSlicingTests.test_empty_sliced_subquery_exclude" ,
343
420
},
344
421
# Invalid $project :: caused by :: Unknown expression $count
345
422
# https://github.com/mongodb-labs/django-mongodb/issues/79
@@ -361,6 +438,8 @@ def django_test_expected_failures(self):
361
438
"expressions.tests.FieldTransformTests.test_month_aggregation" ,
362
439
"expressions_case.tests.CaseDocumentationExamples.test_conditional_aggregation_example" ,
363
440
"model_fields.test_jsonfield.TestQuerying.test_ordering_grouping_by_count" ,
441
+ "queries.tests.Queries1Tests.test_ticket_20250" ,
442
+ "queries.tests.ValuesQuerysetTests.test_named_values_list_expression_with_default_alias" ,
364
443
},
365
444
"Cannot use QuerySet.delete() when querying across multiple collections on MongoDB." : {
366
445
"delete.tests.FastDeleteTests.test_fast_delete_aggregation" ,
@@ -384,12 +463,29 @@ def django_test_expected_failures(self):
384
463
"datetimes.tests.DateTimesTests.test_datetimes_has_lazy_iterator" ,
385
464
"datetimes.tests.DateTimesTests.test_datetimes_returns_available_dates_for_given_scope_and_given_field" ,
386
465
"datetimes.tests.DateTimesTests.test_related_model_traverse" ,
466
+ "queries.tests.Queries1Tests.test_ticket7155" ,
467
+ "queries.tests.Queries1Tests.test_tickets_7087_12242" ,
387
468
"timezones.tests.LegacyDatabaseTests.test_query_datetimes" ,
388
469
"timezones.tests.NewDatabaseTests.test_query_datetimes" ,
389
470
"timezones.tests.NewDatabaseTests.test_query_datetimes_in_other_timezone" ,
390
471
},
391
472
"QuerySet.distinct() is not supported." : {
392
473
"lookup.tests.LookupTests.test_lookup_collision_distinct" ,
474
+ "queries.tests.ExcludeTest17600.test_exclude_plain_distinct" ,
475
+ "queries.tests.ExcludeTest17600.test_exclude_with_q_is_equal_to_plain_exclude" ,
476
+ "queries.tests.ExcludeTest17600.test_exclude_with_q_object_distinct" ,
477
+ "queries.tests.ExcludeTests.test_exclude_m2m_through" ,
478
+ "queries.tests.ExistsSql.test_distinct_exists" ,
479
+ "queries.tests.ExistsSql.test_sliced_distinct_exists" ,
480
+ "queries.tests.ExistsSql.test_ticket_18414" ,
481
+ "queries.tests.Queries1Tests.test_ticket4464" ,
482
+ "queries.tests.Queries1Tests.test_ticket7096" ,
483
+ "queries.tests.Queries1Tests.test_ticket7791" ,
484
+ "queries.tests.Queries1Tests.test_tickets_1878_2939" ,
485
+ "queries.tests.Queries1Tests.test_tickets_5321_7070" ,
486
+ "queries.tests.Queries1Tests.test_tickets_5324_6704" ,
487
+ "queries.tests.Queries1Tests.test_tickets_6180_6203" ,
488
+ "queries.tests.Queries6Tests.test_distinct_ordered_sliced_subquery_aggregation" ,
393
489
"update.tests.AdvancedTests.test_update_all" ,
394
490
},
395
491
"QuerySet.extra() is not supported." : {
@@ -404,6 +500,18 @@ def django_test_expected_failures(self):
404
500
"ordering.tests.OrderingTests.test_extra_ordering" ,
405
501
"ordering.tests.OrderingTests.test_extra_ordering_quoting" ,
406
502
"ordering.tests.OrderingTests.test_extra_ordering_with_table_name" ,
503
+ "queries.tests.EscapingTests.test_ticket_7302" ,
504
+ "queries.tests.Queries5Tests.test_extra_select_literal_percent_s" ,
505
+ "queries.tests.Queries5Tests.test_ticket7256" ,
506
+ "queries.tests.ValuesQuerysetTests.test_extra_multiple_select_params_values_order_by" ,
507
+ "queries.tests.ValuesQuerysetTests.test_extra_select_params_values_order_in_extra" ,
508
+ "queries.tests.ValuesQuerysetTests.test_extra_values" ,
509
+ "queries.tests.ValuesQuerysetTests.test_extra_values_list" ,
510
+ "queries.tests.ValuesQuerysetTests.test_extra_values_order_multiple" ,
511
+ "queries.tests.ValuesQuerysetTests.test_extra_values_order_twice" ,
512
+ "queries.tests.ValuesQuerysetTests.test_flat_extra_values_list" ,
513
+ "queries.tests.ValuesQuerysetTests.test_named_values_list_with_fields" ,
514
+ "queries.tests.ValuesQuerysetTests.test_named_values_list_without_fields" ,
407
515
"select_related.tests.SelectRelatedTests.test_select_related_with_extra" ,
408
516
},
409
517
"QuerySet.update() crash: Unrecognized expression '$count'" : {
@@ -413,6 +521,8 @@ def django_test_expected_failures(self):
413
521
"delete.tests.DeletionTests.test_only_referenced_fields_selected" ,
414
522
"lookup.tests.LookupTests.test_in_ignore_none" ,
415
523
"lookup.tests.LookupTests.test_textfield_exact_null" ,
524
+ "queries.tests.ExistsSql.test_exists" ,
525
+ "queries.tests.Queries6Tests.test_col_alias_quoted" ,
416
526
},
417
527
"Test executes raw SQL." : {
418
528
"annotations.tests.NonAggregateAnnotationTestCase.test_raw_sql_with_inherited_field" ,
@@ -422,6 +532,7 @@ def django_test_expected_failures(self):
422
532
"model_fields.test_jsonfield.TestQuerying.test_key_sql_injection_escape" ,
423
533
"model_fields.test_jsonfield.TestQuerying.test_key_transform_raw_expression" ,
424
534
"model_fields.test_jsonfield.TestQuerying.test_nested_key_transform_raw_expression" ,
535
+ "queries.tests.Queries1Tests.test_order_by_rawsql" ,
425
536
"timezones.tests.LegacyDatabaseTests.test_cursor_execute_accepts_naive_datetime" ,
426
537
"timezones.tests.LegacyDatabaseTests.test_cursor_execute_returns_naive_datetime" ,
427
538
"timezones.tests.LegacyDatabaseTests.test_raw_sql" ,
@@ -506,6 +617,25 @@ def django_test_expected_failures(self):
506
617
"Randomized ordering isn't supported by MongoDB." : {
507
618
"ordering.tests.OrderingTests.test_random_ordering" ,
508
619
},
620
+ # https://github.com/mongodb-labs/django-mongodb/issues/34
621
+ "Ordering can't span tables on MongoDB" : {
622
+ "queries.tests.ConditionalTests.test_infinite_loop" ,
623
+ "queries.tests.NullableRelOrderingTests.test_join_already_in_query" ,
624
+ "queries.tests.Queries1Tests.test_order_by_related_field_transform" ,
625
+ "queries.tests.Queries1Tests.test_ticket7181" ,
626
+ "queries.tests.Queries1Tests.test_tickets_2076_7256" ,
627
+ "queries.tests.Queries1Tests.test_tickets_2874_3002" ,
628
+ "queries.tests.Queries5Tests.test_ordering" ,
629
+ "queries.tests.Queries5Tests.test_ticket9848" ,
630
+ "queries.tests.Ticket14056Tests.test_ticket_14056" ,
631
+ },
632
+ "Queries without a collection aren't supported on MongoDB." : {
633
+ "queries.test_q.QCheckTests" ,
634
+ "queries.test_query.TestQueryNoModel" ,
635
+ },
636
+ "Test not applicable for MongoDB's SQLCompiler." : {
637
+ "queries.test_iterator.QuerySetIteratorTests" ,
638
+ },
509
639
}
510
640
511
641
@cached_property
0 commit comments