Skip to content

Commit 6ed7965

Browse files
committed
remove LIMIT from EXISTS queries
1 parent 0f01efb commit 6ed7965

File tree

3 files changed

+16
-65
lines changed

3 files changed

+16
-65
lines changed

django_snowflake/__init__.py

+2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@
66

77
check_django_compatability()
88

9+
from .expressions import register_expressions # noqa
910
from .functions import register_functions # noqa
1011
from .lookups import register_lookups # noqa
1112

13+
register_expressions()
1214
register_functions()
1315
register_lookups()

django_snowflake/expressions.py

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from django.db.models.expressions import Exists
2+
3+
4+
def exists(self, compiler, connection):
5+
# Snowflake doesn't support LIMIT in EXISTS()
6+
# https://docs.snowflake.com/en/user-guide/querying-subqueries#limitations
7+
self.query.clear_limits()
8+
return self.as_sql(compiler, connection)
9+
10+
11+
def register_expressions():
12+
Exists.as_snowflake = exists

django_snowflake/features.py

+2-65
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ class DatabaseFeatures(BaseDatabaseFeatures):
4343
supports_indexes = False
4444
supports_index_column_ordering = False
4545
supports_json_field_contains = False
46+
# This feature is specific to the Django fork used for testing.
47+
supports_limit_in_exists = False
4648
supports_over_clause = True
4749
supports_partial_indexes = False
4850
# https://docs.snowflake.com/en/sql-reference/functions-regexp.html#backreferences
@@ -209,105 +211,40 @@ class DatabaseFeatures(BaseDatabaseFeatures):
209211
'model_fields.test_integerfield.PositiveIntegerFieldTests.test_negative_values',
210212
},
211213
'Snowflake: Unsupported subquery type cannot be evaluated.': {
212-
'admin_changelist.tests.ChangeListTests.test_multiple_search_fields',
213-
'admin_filters.tests.ListFiltersTests.test_emptylistfieldfilter_genericrelation',
214-
'admin_filters.tests.ListFiltersTests.test_emptylistfieldfilter_reverse_relationships',
215-
'admin_filters.tests.ListFiltersTests.test_listfilter_genericrelation',
216-
'admin_filters.tests.ListFiltersTests.test_relatedfieldlistfilter_manytomany',
217-
'admin_filters.tests.ListFiltersTests.test_relatedfieldlistfilter_reverse_relationships',
218-
'admin_views.tests.AdminSearchTest.test_exact_matches',
219-
'admin_views.tests.AdminSearchTest.test_no_total_count',
220-
'admin_views.tests.AdminSearchTest.test_search_on_sibling_models',
221-
'admin_views.tests.AdminViewBasicTest.test_relation_spanning_filters',
222-
'admin_views.tests.LimitChoicesToInAdminTest.test_limit_choices_to_as_callable',
223-
'aggregation.test_filter_argument.FilteredAggregateTests.test_filtered_aggregate_on_exists',
224214
'aggregation.test_filter_argument.FilteredAggregateTests.test_filtered_aggregate_ref_multiple_subquery_annotation', # noqa
225215
'aggregation.test_filter_argument.FilteredAggregateTests.test_filtered_aggregate_ref_subquery_annotation',
226216
'aggregation.tests.AggregateAnnotationPruningTests.test_referenced_composed_subquery_requires_wrapping',
227217
'aggregation.tests.AggregateAnnotationPruningTests.test_referenced_subquery_requires_wrapping',
228-
'aggregation.tests.AggregateTestCase.test_aggregation_exists_multivalued_outeref',
229218
'aggregation.tests.AggregateTestCase.test_aggregation_subquery_annotation',
230219
'aggregation.tests.AggregateTestCase.test_aggregation_subquery_annotation_values',
231-
'aggregation.tests.AggregateTestCase.test_aggregation_subquery_annotation_values_collision',
232-
'aggregation_regress.tests.AggregationTests.test_annotate_and_join',
233-
'annotations.tests.NonAggregateAnnotationTestCase.test_annotation_exists_aggregate_values_chaining',
234220
'annotations.tests.NonAggregateAnnotationTestCase.test_annotation_filter_with_subquery',
235221
'annotations.tests.NonAggregateAnnotationTestCase.test_annotation_subquery_outerref_transform',
236-
'auth_tests.test_models.UserWithPermTestCase.test_basic',
237-
'auth_tests.test_models.UserWithPermTestCase.test_nonexistent_permission',
238222
'db_functions.datetime.test_extract_trunc.DateFunctionTests.test_extract_outerref',
239223
'db_functions.datetime.test_extract_trunc.DateFunctionTests.test_trunc_subquery_with_parameters',
240-
'db_functions.datetime.test_extract_trunc.DateFunctionWithTimeZoneTests.test_extract_outerref',
241224
'expressions.tests.BasicExpressionsTests.test_aggregate_subquery_annotation',
242225
'expressions.tests.BasicExpressionsTests.test_annotation_with_deeply_nested_outerref',
243226
'expressions.tests.BasicExpressionsTests.test_annotation_with_nested_outerref',
244227
'expressions.tests.BasicExpressionsTests.test_annotation_with_outerref',
245228
'expressions.tests.BasicExpressionsTests.test_annotations_within_subquery',
246-
'expressions.tests.BasicExpressionsTests.test_boolean_expression_combined',
247-
'expressions.tests.BasicExpressionsTests.test_boolean_expression_combined_with_empty_Q',
248-
'expressions.tests.BasicExpressionsTests.test_boolean_expression_in_Q',
249-
'expressions.tests.BasicExpressionsTests.test_case_in_filter_if_boolean_output_field',
250-
'expressions.tests.BasicExpressionsTests.test_exists_in_filter',
251229
'expressions.tests.BasicExpressionsTests.test_nested_outerref_with_function',
252230
'expressions.tests.BasicExpressionsTests.test_nested_subquery',
253231
'expressions.tests.BasicExpressionsTests.test_nested_subquery_join_outer_ref',
254232
'expressions.tests.BasicExpressionsTests.test_nested_subquery_outer_ref_2',
255233
'expressions.tests.BasicExpressionsTests.test_nested_subquery_outer_ref_with_autofield',
256-
'expressions.tests.BasicExpressionsTests.test_order_by_exists',
257-
'expressions.tests.BasicExpressionsTests.test_slicing_of_outerref',
258234
'expressions.tests.BasicExpressionsTests.test_subquery',
259235
'expressions.tests.BasicExpressionsTests.test_subquery_filter_by_lazy',
260236
'expressions.tests.BasicExpressionsTests.test_subquery_in_filter',
261237
'expressions.tests.FTimeDeltaTests.test_date_subquery_subtraction',
262238
'expressions.tests.FTimeDeltaTests.test_datetime_subquery_subtraction',
263239
'expressions_window.tests.WindowFunctionTests.test_subquery_row_range_rank',
264-
'filtered_relation.tests.FilteredRelationTests.test_with_exclude',
265-
'generic_relations.tests.GenericRelationsTests.test_queries_content_type_restriction',
266-
'generic_relations_regress.tests.GenericRelationTests.test_ticket_20378',
267-
'generic_relations_regress.tests.GenericRelationTests.test_ticket_20564',
268-
'generic_relations_regress.tests.GenericRelationTests.test_ticket_20564_nullable_fk',
269240
'lookup.tests.LookupQueryingTests.test_filter_subquery_lhs',
270241
'lookup.tests.LookupTests.test_nested_outerref_lhs',
271-
'many_to_many.tests.ManyToManyTests.test_selects',
272242
'model_fields.test_jsonfield.TestQuerying.test_nested_key_transform_on_subquery',
273243
'model_fields.test_jsonfield.TestQuerying.test_obj_subquery_lookup',
274-
'model_forms.tests.LimitChoicesToTests.test_fields_for_model_applies_limit_choices_to',
275-
'model_forms.tests.LimitChoicesToTests.test_limit_choices_to_callable_for_fk_rel',
276-
'model_forms.tests.LimitChoicesToTests.test_limit_choices_to_callable_for_m2m_rel',
277-
'model_forms.tests.LimitChoicesToTests.test_limit_choices_to_m2m_through',
278-
'model_forms.tests.LimitChoicesToTests.test_limit_choices_to_no_duplicates',
279244
'queries.test_qs_combinators.QuerySetSetOperationTests.test_union_in_subquery',
280245
'queries.test_qs_combinators.QuerySetSetOperationTests.test_union_in_subquery_related_outerref',
281-
'queries.test_qs_combinators.QuerySetSetOperationTests.test_union_with_values_list_on_annotated_and_unannotated', # noqa
282-
'queries.tests.ExcludeTest17600.test_exclude_plain',
283-
'queries.tests.ExcludeTest17600.test_exclude_plain_distinct',
284-
'queries.tests.ExcludeTest17600.test_exclude_with_q_is_equal_to_plain_exclude',
285-
'queries.tests.ExcludeTest17600.test_exclude_with_q_is_equal_to_plain_exclude_variation',
286-
'queries.tests.ExcludeTest17600.test_exclude_with_q_object_distinct',
287-
'queries.tests.ExcludeTest17600.test_exclude_with_q_object_no_distinct',
288-
'queries.tests.ExcludeTests.test_exclude_multivalued_exists',
289246
'queries.tests.ExcludeTests.test_exclude_subquery',
290247
'queries.tests.ExcludeTests.test_subquery_exclude_outerref',
291-
'queries.tests.ExcludeTests.test_exclude_m2m_through',
292-
'queries.tests.ExcludeTests.test_to_field',
293-
'queries.tests.ForeignKeyToBaseExcludeTests.test_ticket_21787',
294-
'queries.tests.JoinReuseTest.test_inverted_q_across_relations',
295-
'queries.tests.ManyToManyExcludeTest.test_exclude_many_to_many',
296-
'queries.tests.ManyToManyExcludeTest.test_ticket_12823',
297-
'queries.tests.Queries1Tests.test_combining_does_not_mutate',
298-
'queries.tests.Queries1Tests.test_double_exclude',
299-
'queries.tests.Queries1Tests.test_exclude',
300-
'queries.tests.Queries1Tests.test_exclude_in',
301-
'queries.tests.Queries1Tests.test_nested_exclude',
302-
'queries.tests.Queries1Tests.test_ticket7096',
303-
'queries.tests.Queries1Tests.test_tickets_5324_6704',
304-
'queries.tests.Queries4Tests.test_ticket24525',
305-
'queries.tests.Queries6Tests.test_tickets_8921_9188',
306-
'queries.tests.Queries6Tests.test_xor_subquery',
307-
'queries.tests.TestTicket24605.test_ticket_24605',
308-
'queries.tests.Ticket20788Tests.test_ticket_20788',
309-
'queries.tests.Ticket22429Tests.test_ticket_22429',
310-
'queries.tests.Ticket23605Tests.test_ticket_23605',
311248
},
312249
'Snowflake: Window function type [ROW_NUMBER] requires ORDER BY in '
313250
'window specification.': {

0 commit comments

Comments
 (0)