Skip to content

Commit 101fe23

Browse files
committed
Add subqueries, exists tests.
1 parent 9c50b3b commit 101fe23

File tree

1 file changed

+20
-99
lines changed

1 file changed

+20
-99
lines changed

django_mongodb/features.py

Lines changed: 20 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class DatabaseFeatures(BaseDatabaseFeatures):
3434
supports_transactions = False
3535
supports_unspecified_pk = True
3636
uses_savepoints = False
37+
supports_boolean_expr_in_select_clause = True
3738

3839
_django_test_expected_failures = {
3940
# 'NulledTransform' object has no attribute 'as_mql'.
@@ -91,6 +92,18 @@ class DatabaseFeatures(BaseDatabaseFeatures):
9192
"schema.tests.SchemaTests.test_composed_constraint_with_fk",
9293
"schema.tests.SchemaTests.test_remove_ignored_unique_constraint_not_create_fk_index",
9394
"schema.tests.SchemaTests.test_unique_constraint",
95+
# subclasses of BaseDatabaseIntrospection may require a get_constraints() method
96+
"migrations.test_operations.OperationTests.test_add_func_unique_constraint",
97+
"migrations.test_operations.OperationTests.test_remove_func_unique_constraint",
98+
# Delete does not support subqueries.
99+
"delete_regress.tests.DeleteTests.test_self_reference_with_through_m2m_at_second_level",
100+
# Handle column default value.
101+
"annotations.tests.NonAggregateAnnotationTestCase.test_empty_queryset_annotation",
102+
# Union as subquery is not mapping the parent parameter and collections.
103+
"queries.test_qs_combinators.QuerySetSetOperationTests.test_union_in_subquery_related_outerref",
104+
"queries.test_qs_combinators.QuerySetSetOperationTests.test_union_in_subquery",
105+
# Log with Decimal128 isn't working as expected.
106+
"db_functions.math.test_log.LogTests.test_decimal",
94107
}
95108
# $bitAnd, #bitOr, and $bitXor are new in MongoDB 6.3.
96109
_django_test_expected_failures_bitwise = {
@@ -206,106 +219,7 @@ def django_test_expected_failures(self):
206219
"db_functions.comparison.test_cast.CastTests.test_cast_to_integer_foreign_key",
207220
"model_fields.test_foreignkey.ForeignKeyTests.test_to_python",
208221
"queries.test_qs_combinators.QuerySetSetOperationTests.test_order_raises_on_non_selected_column",
209-
},
210-
"Exists is not supported on MongoDB.": {
211-
"aggregation.test_filter_argument.FilteredAggregateTests.test_filtered_aggregate_on_exists",
212-
"aggregation.test_filter_argument.FilteredAggregateTests.test_filtered_aggregate_ref_multiple_subquery_annotation",
213-
"aggregation.tests.AggregateTestCase.test_aggregation_exists_multivalued_outeref",
214-
"aggregation.tests.AggregateTestCase.test_group_by_exists_annotation",
215-
"aggregation.tests.AggregateTestCase.test_exists_none_with_aggregate",
216-
"aggregation.tests.AggregateTestCase.test_exists_extra_where_with_aggregate",
217-
"annotations.tests.NonAggregateAnnotationTestCase.test_annotation_exists_aggregate_values_chaining",
218-
"annotations.tests.NonAggregateAnnotationTestCase.test_annotation_exists_none_query",
219-
"aggregation_regress.tests.AggregationTests.test_annotate_and_join",
220-
"delete_regress.tests.DeleteTests.test_self_reference_with_through_m2m_at_second_level",
221-
"expressions.tests.BasicExpressionsTests.test_annotation_with_deeply_nested_outerref",
222-
"expressions.tests.BasicExpressionsTests.test_boolean_expression_combined",
223-
"expressions.tests.BasicExpressionsTests.test_boolean_expression_combined_with_empty_Q",
224-
"expressions.tests.BasicExpressionsTests.test_boolean_expression_in_Q",
225-
"expressions.tests.BasicExpressionsTests.test_case_in_filter_if_boolean_output_field",
226-
"expressions.tests.BasicExpressionsTests.test_exists_in_filter",
227-
"expressions.tests.BasicExpressionsTests.test_order_by_exists",
228-
"expressions.tests.BasicExpressionsTests.test_subquery",
229-
"expressions.tests.ExistsTests.test_filter_by_empty_exists",
230-
"expressions.tests.ExistsTests.test_negated_empty_exists",
231-
"expressions.tests.ExistsTests.test_optimizations",
232-
"expressions.tests.ExistsTests.test_select_negated_empty_exists",
233-
"lookup.tests.LookupTests.test_exact_exists",
234-
"lookup.tests.LookupTests.test_nested_outerref_lhs",
235-
"lookup.tests.LookupQueryingTests.test_filter_exists_lhs",
236-
"model_forms.tests.LimitChoicesToTests.test_fields_for_model_applies_limit_choices_to",
237-
"model_forms.tests.LimitChoicesToTests.test_limit_choices_to_callable_for_fk_rel",
238-
"model_forms.tests.LimitChoicesToTests.test_limit_choices_to_callable_for_m2m_rel",
239-
"model_forms.tests.LimitChoicesToTests.test_limit_choices_to_m2m_through",
240-
"model_forms.tests.LimitChoicesToTests.test_limit_choices_to_no_duplicates",
241-
"null_queries.tests.NullQueriesTests.test_reverse_relations",
242-
"queries.test_qs_combinators.QuerySetSetOperationTests.test_union_with_values_list_on_annotated_and_unannotated",
243-
"queries.tests.ExcludeTest17600.test_exclude_plain",
244-
"queries.tests.ExcludeTest17600.test_exclude_with_q_is_equal_to_plain_exclude_variation",
245-
"queries.tests.ExcludeTest17600.test_exclude_with_q_object_no_distinct",
246-
"queries.tests.ExcludeTests.test_exclude_multivalued_exists",
247-
"queries.tests.ExcludeTests.test_exclude_reverse_fk_field_ref",
248-
"queries.tests.ExcludeTests.test_exclude_with_circular_fk_relation",
249-
"queries.tests.ExcludeTests.test_subquery_exclude_outerref",
250-
"queries.tests.ExcludeTests.test_to_field",
251-
"queries.tests.ForeignKeyToBaseExcludeTests.test_ticket_21787",
252-
"queries.tests.JoinReuseTest.test_inverted_q_across_relations",
253-
"queries.tests.ManyToManyExcludeTest.test_exclude_many_to_many",
254-
"queries.tests.ManyToManyExcludeTest.test_ticket_12823",
255-
"queries.tests.Queries1Tests.test_double_exclude",
256-
"queries.tests.Queries1Tests.test_exclude",
257-
"queries.tests.Queries1Tests.test_exclude_in",
258-
"queries.tests.Queries1Tests.test_excluded_intermediary_m2m_table_joined",
259-
"queries.tests.Queries1Tests.test_nested_exclude",
260-
"queries.tests.Queries4Tests.test_join_reuse_order",
261-
"queries.tests.Queries4Tests.test_ticket24525",
262-
"queries.tests.Queries6Tests.test_tickets_8921_9188",
263-
"queries.tests.Queries6Tests.test_xor_subquery",
264-
"queries.tests.QuerySetBitwiseOperationTests.test_subquery_aliases",
265-
"queries.tests.TestTicket24605.test_ticket_24605",
266-
"queries.tests.Ticket20101Tests.test_ticket_20101",
267-
"queries.tests.Ticket20788Tests.test_ticket_20788",
268-
"queries.tests.Ticket22429Tests.test_ticket_22429",
269-
},
270-
"Subquery is not supported on MongoDB.": {
271-
"aggregation.test_filter_argument.FilteredAggregateTests.test_filtered_aggregate_ref_subquery_annotation",
272-
"aggregation.tests.AggregateAnnotationPruningTests.test_referenced_composed_subquery_requires_wrapping",
273-
"aggregation.tests.AggregateAnnotationPruningTests.test_referenced_subquery_requires_wrapping",
274-
"aggregation.tests.AggregateTestCase.test_aggregation_nested_subquery_outerref",
275-
"aggregation.tests.AggregateTestCase.test_aggregation_subquery_annotation",
276-
"aggregation.tests.AggregateTestCase.test_aggregation_subquery_annotation_multivalued",
277-
"aggregation.tests.AggregateTestCase.test_aggregation_subquery_annotation_related_field",
278-
"aggregation.tests.AggregateTestCase.test_aggregation_subquery_annotation_values",
279-
"aggregation.tests.AggregateTestCase.test_aggregation_subquery_annotation_values_collision",
280-
"annotations.tests.NonAggregateAnnotationTestCase.test_annotation_filter_with_subquery",
281-
"annotations.tests.NonAggregateAnnotationTestCase.test_annotation_subquery_and_aggregate_values_chaining",
282-
"annotations.tests.NonAggregateAnnotationTestCase.test_annotation_subquery_outerref_transform",
283-
"annotations.tests.NonAggregateAnnotationTestCase.test_empty_queryset_annotation",
284-
"db_functions.datetime.test_extract_trunc.DateFunctionTests.test_extract_outerref",
285-
"db_functions.datetime.test_extract_trunc.DateFunctionTests.test_trunc_subquery_with_parameters",
286-
"expressions.tests.BasicExpressionsTests.test_aggregate_subquery_annotation",
287-
"expressions.tests.BasicExpressionsTests.test_annotation_with_nested_outerref",
288-
"expressions.tests.BasicExpressionsTests.test_annotation_with_outerref",
289-
"expressions.tests.BasicExpressionsTests.test_annotations_within_subquery",
290-
"expressions.tests.BasicExpressionsTests.test_in_subquery",
291-
"expressions.tests.BasicExpressionsTests.test_nested_outerref_with_function",
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",
295222
"expressions.tests.BasicExpressionsTests.test_nested_subquery_outer_ref_with_autofield",
296-
"expressions.tests.BasicExpressionsTests.test_outerref_mixed_case_table_name",
297-
"expressions.tests.BasicExpressionsTests.test_outerref_with_operator",
298-
"expressions.tests.BasicExpressionsTests.test_subquery_filter_by_aggregate",
299-
"expressions.tests.BasicExpressionsTests.test_subquery_filter_by_lazy",
300-
"expressions.tests.BasicExpressionsTests.test_subquery_group_by_outerref_in_filter",
301-
"expressions.tests.BasicExpressionsTests.test_subquery_in_filter",
302-
"expressions.tests.BasicExpressionsTests.test_subquery_references_joined_table_twice",
303-
"expressions.tests.BasicExpressionsTests.test_uuid_pk_subquery",
304-
"lookup.tests.LookupQueryingTests.test_filter_subquery_lhs",
305-
"model_fields.test_jsonfield.TestQuerying.test_nested_key_transform_on_subquery",
306-
"model_fields.test_jsonfield.TestQuerying.test_obj_subquery_lookup",
307-
"queries.test_qs_combinators.QuerySetSetOperationTests.test_union_in_subquery",
308-
"queries.test_qs_combinators.QuerySetSetOperationTests.test_union_in_subquery_related_outerref",
309223
},
310224
"Using a QuerySet in annotate() is not supported on MongoDB.": {
311225
"aggregation.test_filter_argument.FilteredAggregateTests.test_filtered_reused_subquery",
@@ -417,6 +331,7 @@ def django_test_expected_failures(self):
417331
"ordering.tests.OrderingTests.test_orders_nulls_first_on_filtered_subquery",
418332
"queries.tests.ExcludeTest17600.test_exclude_plain_distinct",
419333
"queries.tests.ExcludeTest17600.test_exclude_with_q_is_equal_to_plain_exclude",
334+
"queries.tests.ExcludeTest17600.test_exclude_with_q_is_equal_to_plain_exclude_variation",
420335
"queries.tests.ExcludeTest17600.test_exclude_with_q_object_distinct",
421336
"queries.tests.ExcludeTests.test_exclude_m2m_through",
422337
"queries.tests.ExistsSql.test_distinct_exists",
@@ -433,6 +348,7 @@ def django_test_expected_failures(self):
433348
"update.tests.AdvancedTests.test_update_all",
434349
},
435350
"QuerySet.extra() is not supported.": {
351+
"aggregation.tests.AggregateTestCase.test_exists_extra_where_with_aggregate",
436352
"annotations.tests.NonAggregateAnnotationTestCase.test_column_field_ordering",
437353
"annotations.tests.NonAggregateAnnotationTestCase.test_column_field_ordering_with_deferred",
438354
"basic.tests.ModelTest.test_extra_method_select_argument_with_dashes",
@@ -467,6 +383,11 @@ def django_test_expected_failures(self):
467383
"aggregation.tests.AggregateAnnotationPruningTests.test_unused_aliased_aggregate_pruned",
468384
"aggregation.tests.AggregateAnnotationPruningTests.test_referenced_aggregate_annotation_kept",
469385
"aggregation.tests.AggregateTestCase.test_count_star",
386+
"aggregation.test_filter_argument.FilteredAggregateTests.test_filtered_aggregate_ref_subquery_annotation",
387+
"aggregation.tests.AggregateAnnotationPruningTests.test_referenced_composed_subquery_requires_wrapping",
388+
"aggregation.tests.AggregateAnnotationPruningTests.test_referenced_subquery_requires_wrapping",
389+
"aggregation.tests.AggregateTestCase.test_aggregation_subquery_annotation",
390+
"aggregation.tests.AggregateTestCase.test_aggregation_subquery_annotation_related_field",
470391
"delete.tests.DeletionTests.test_only_referenced_fields_selected",
471392
"lookup.tests.LookupTests.test_in_ignore_none",
472393
"lookup.tests.LookupTests.test_textfield_exact_null",

0 commit comments

Comments
 (0)