33
44
55class DatabaseFeatures (BaseDatabaseFeatures ):
6+ allow_sliced_subqueries_with_in = False
67 greatest_least_ignores_nulls = True
78 has_json_object_function = False
89 has_native_json_field = True
@@ -12,6 +13,10 @@ class DatabaseFeatures(BaseDatabaseFeatures):
1213 supports_json_field_contains = False
1314 # BSON Date type doesn't support microsecond precision.
1415 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
1520 supports_temporal_subtraction = True
1621 # MongoDB stores datetimes in UTC.
1722 supports_timezones = False
@@ -60,6 +65,7 @@ class DatabaseFeatures(BaseDatabaseFeatures):
6065 "update.tests.AdvancedTests.test_update_ordered_by_m2m_annotation_desc" ,
6166 # 'ManyToOneRel' object has no attribute 'column'
6267 "m2m_through.tests.M2mThroughTests.test_order_by_relational_field_through_model" ,
68+ "queries.tests.Queries4Tests.test_order_by_reverse_fk" ,
6369 # pymongo: ValueError: update cannot be empty
6470 "update.tests.SimpleTest.test_empty_update_with_inheritance" ,
6571 "update.tests.SimpleTest.test_nonempty_update_with_inheritance" ,
@@ -99,6 +105,25 @@ class DatabaseFeatures(BaseDatabaseFeatures):
99105 "ordering.tests.OrderingTests.test_order_by_grandparent_fk_with_expression_in_default_ordering" ,
100106 "ordering.tests.OrderingTests.test_order_by_parent_fk_with_expression_in_default_ordering" ,
101107 "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" ,
102127 # alias().order_by() doesn't work.
103128 "annotations.tests.AliasTests.test_order_by_alias" ,
104129 "annotations.tests.AliasTests.test_order_by_alias_aggregate" ,
@@ -107,6 +132,11 @@ class DatabaseFeatures(BaseDatabaseFeatures):
107132 # Querying the reverse side of a foreign key for None returns no
108133 # results: https://github.com/mongodb-labs/django-mongodb/issues/76
109134 "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" ,
110140 }
111141 # $bitAnd, #bitOr, and $bitXor are new in MongoDB 6.3.
112142 _django_test_expected_failures_bitwise = {
@@ -208,6 +238,8 @@ def django_test_expected_failures(self):
208238 "expressions_case.tests.CaseExpressionTests.test_update_with_expression_as_value" ,
209239 "expressions_case.tests.CaseExpressionTests.test_update_without_default" ,
210240 "model_fields.test_integerfield.PositiveIntegerFieldTests.test_negative_values" ,
241+ "queries.test_bulk_update.BulkUpdateNoteTests" ,
242+ "queries.test_bulk_update.BulkUpdateTests" ,
211243 "timezones.tests.NewDatabaseTests.test_update_with_timedelta" ,
212244 "update.tests.AdvancedTests.test_update_annotated_queryset" ,
213245 "update.tests.AdvancedTests.test_update_negated_f" ,
@@ -296,6 +328,31 @@ def django_test_expected_failures(self):
296328 "lookup.tests.LookupTests.test_exact_exists" ,
297329 "lookup.tests.LookupTests.test_nested_outerref_lhs" ,
298330 "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" ,
299356 },
300357 "Subquery is not supported on MongoDB." : {
301358 "annotations.tests.NonAggregateAnnotationTestCase.test_annotation_filter_with_subquery" ,
@@ -340,6 +397,26 @@ def django_test_expected_failures(self):
340397 "model_fields.test_jsonfield.TestQuerying.test_usage_in_subquery" ,
341398 "one_to_one.tests.OneToOneTests.test_get_prefetch_queryset_warning" ,
342399 "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" ,
343420 },
344421 # Invalid $project :: caused by :: Unknown expression $count
345422 # https://github.com/mongodb-labs/django-mongodb/issues/79
@@ -361,6 +438,8 @@ def django_test_expected_failures(self):
361438 "expressions.tests.FieldTransformTests.test_month_aggregation" ,
362439 "expressions_case.tests.CaseDocumentationExamples.test_conditional_aggregation_example" ,
363440 "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" ,
364443 },
365444 "Cannot use QuerySet.delete() when querying across multiple collections on MongoDB." : {
366445 "delete.tests.FastDeleteTests.test_fast_delete_aggregation" ,
@@ -384,12 +463,29 @@ def django_test_expected_failures(self):
384463 "datetimes.tests.DateTimesTests.test_datetimes_has_lazy_iterator" ,
385464 "datetimes.tests.DateTimesTests.test_datetimes_returns_available_dates_for_given_scope_and_given_field" ,
386465 "datetimes.tests.DateTimesTests.test_related_model_traverse" ,
466+ "queries.tests.Queries1Tests.test_ticket7155" ,
467+ "queries.tests.Queries1Tests.test_tickets_7087_12242" ,
387468 "timezones.tests.LegacyDatabaseTests.test_query_datetimes" ,
388469 "timezones.tests.NewDatabaseTests.test_query_datetimes" ,
389470 "timezones.tests.NewDatabaseTests.test_query_datetimes_in_other_timezone" ,
390471 },
391472 "QuerySet.distinct() is not supported." : {
392473 "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" ,
393489 "update.tests.AdvancedTests.test_update_all" ,
394490 },
395491 "QuerySet.extra() is not supported." : {
@@ -404,6 +500,18 @@ def django_test_expected_failures(self):
404500 "ordering.tests.OrderingTests.test_extra_ordering" ,
405501 "ordering.tests.OrderingTests.test_extra_ordering_quoting" ,
406502 "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" ,
407515 "select_related.tests.SelectRelatedTests.test_select_related_with_extra" ,
408516 },
409517 "QuerySet.update() crash: Unrecognized expression '$count'" : {
@@ -413,6 +521,8 @@ def django_test_expected_failures(self):
413521 "delete.tests.DeletionTests.test_only_referenced_fields_selected" ,
414522 "lookup.tests.LookupTests.test_in_ignore_none" ,
415523 "lookup.tests.LookupTests.test_textfield_exact_null" ,
524+ "queries.tests.ExistsSql.test_exists" ,
525+ "queries.tests.Queries6Tests.test_col_alias_quoted" ,
416526 },
417527 "Test executes raw SQL." : {
418528 "annotations.tests.NonAggregateAnnotationTestCase.test_raw_sql_with_inherited_field" ,
@@ -422,6 +532,7 @@ def django_test_expected_failures(self):
422532 "model_fields.test_jsonfield.TestQuerying.test_key_sql_injection_escape" ,
423533 "model_fields.test_jsonfield.TestQuerying.test_key_transform_raw_expression" ,
424534 "model_fields.test_jsonfield.TestQuerying.test_nested_key_transform_raw_expression" ,
535+ "queries.tests.Queries1Tests.test_order_by_rawsql" ,
425536 "timezones.tests.LegacyDatabaseTests.test_cursor_execute_accepts_naive_datetime" ,
426537 "timezones.tests.LegacyDatabaseTests.test_cursor_execute_returns_naive_datetime" ,
427538 "timezones.tests.LegacyDatabaseTests.test_raw_sql" ,
@@ -506,6 +617,25 @@ def django_test_expected_failures(self):
506617 "Randomized ordering isn't supported by MongoDB." : {
507618 "ordering.tests.OrderingTests.test_random_ordering" ,
508619 },
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+ },
509639 }
510640
511641 @cached_property
0 commit comments