From b8c48d06fab3f1c9d52c28422a4a1b8350f5537f Mon Sep 17 00:00:00 2001 From: Simon Charette Date: Tue, 15 Jan 2019 22:23:50 -0600 Subject: [PATCH] Refs #26608 -- Added a database feature for fixed frame range distance support. --- django/db/backends/base/features.py | 1 + django/db/backends/oracle/features.py | 1 + tests/expressions_window/tests.py | 3 +-- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/django/db/backends/base/features.py b/django/db/backends/base/features.py index 9d74d071d2a..31e969a95c3 100644 --- a/django/db/backends/base/features.py +++ b/django/db/backends/base/features.py @@ -239,6 +239,7 @@ class BaseDatabaseFeatures: # Does the backend support window expressions (expression OVER (...))? supports_over_clause = False + supports_frame_range_fixed_distance = False # Does the backend support CAST with precision? supports_cast_with_precision = True diff --git a/django/db/backends/oracle/features.py b/django/db/backends/oracle/features.py index bba1e3cb0de..6c0fa6266d2 100644 --- a/django/db/backends/oracle/features.py +++ b/django/db/backends/oracle/features.py @@ -52,6 +52,7 @@ class DatabaseFeatures(BaseDatabaseFeatures): """ supports_callproc_kwargs = True supports_over_clause = True + supports_frame_range_fixed_distance = True supports_ignore_conflicts = False max_query_params = 2**16 - 1 supports_partial_indexes = False diff --git a/tests/expressions_window/tests.py b/tests/expressions_window/tests.py index a993a5e5757..d9a4a4fa6c5 100644 --- a/tests/expressions_window/tests.py +++ b/tests/expressions_window/tests.py @@ -536,8 +536,7 @@ class WindowFunctionTests(TestCase): ('Brown', 53000, 'Sales', datetime.date(2009, 9, 1), 108000), ], transform=lambda row: (row.name, row.salary, row.department, row.hire_date, row.sum)) - @skipIf(connection.vendor == 'postgresql', 'n following/preceding not supported by PostgreSQL') - @skipIf(connection.vendor == 'sqlite', 'n following/preceding not supported by SQLite') + @skipUnlessDBFeature('supports_frame_range_fixed_distance') def test_range_n_preceding_and_following(self): qs = Employee.objects.annotate(sum=Window( expression=Sum('salary'),