summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMariusz Felisiak <felisiak.mariusz@gmail.com>2019-02-06 19:25:04 +0100
committerGitHub <noreply@github.com>2019-02-06 19:25:04 +0100
commit21bb71ef0dcb86798edb0d8b21138bcc4b947590 (patch)
tree4cb610f1c9e05f39f140bc2faf31e0f10270b0e4
parent10b0fd15763a8f4ac08633f7b4c091d6340faf3a (diff)
Fixed #30157 -- Dropped support for Oracle 12.1.
Thanks Tim Graham for the review.
-rw-r--r--django/db/backends/oracle/compiler.py60
-rw-r--r--django/db/backends/oracle/features.py14
-rw-r--r--django/db/backends/oracle/operations.py6
-rw-r--r--docs/ref/contrib/gis/install/index.txt2
-rw-r--r--docs/ref/databases.txt2
-rw-r--r--docs/releases/3.0.txt6
6 files changed, 9 insertions, 81 deletions
diff --git a/django/db/backends/oracle/compiler.py b/django/db/backends/oracle/compiler.py
deleted file mode 100644
index 819f241f80..0000000000
--- a/django/db/backends/oracle/compiler.py
+++ /dev/null
@@ -1,60 +0,0 @@
-from django.db import NotSupportedError
-from django.db.models.sql import compiler
-
-
-class SQLCompiler(compiler.SQLCompiler):
- def as_sql(self, with_limits=True, with_col_aliases=False):
- """
- Create the SQL for this query. Return the SQL string and list of
- parameters. This is overridden from the original Query class to handle
- the restriction in Oracle 12.1 and emulate LIMIT and OFFSET with
- a subquery.
-
- If 'with_limits' is False, any limit/offset information is not included
- in the query.
- """
- # Whether the query must be constructed using limit/offset.
- do_offset = with_limits and (self.query.high_mark is not None or self.query.low_mark)
- if not do_offset:
- sql, params = super().as_sql(with_limits=False, with_col_aliases=with_col_aliases)
- elif not self.connection.features.supports_select_for_update_with_limit and self.query.select_for_update:
- raise NotSupportedError(
- 'LIMIT/OFFSET is not supported with select_for_update on this '
- 'database backend.'
- )
- else:
- sql, params = super().as_sql(with_limits=False, with_col_aliases=True)
- # Wrap the base query in an outer SELECT * with boundaries on
- # the "_RN" column. This is the canonical way to emulate LIMIT
- # and OFFSET on Oracle.
- high_where = ''
- if self.query.high_mark is not None:
- high_where = 'WHERE ROWNUM <= %d' % (self.query.high_mark,)
-
- if self.query.low_mark:
- sql = (
- 'SELECT * FROM (SELECT "_SUB".*, ROWNUM AS "_RN" FROM (%s) '
- '"_SUB" %s) WHERE "_RN" > %d' % (sql, high_where, self.query.low_mark)
- )
- else:
- # Simplify the query to support subqueries if there's no offset.
- sql = (
- 'SELECT * FROM (SELECT "_SUB".* FROM (%s) "_SUB" %s)' % (sql, high_where)
- )
- return sql, params
-
-
-class SQLInsertCompiler(compiler.SQLInsertCompiler, SQLCompiler):
- pass
-
-
-class SQLDeleteCompiler(compiler.SQLDeleteCompiler, SQLCompiler):
- pass
-
-
-class SQLUpdateCompiler(compiler.SQLUpdateCompiler, SQLCompiler):
- pass
-
-
-class SQLAggregateCompiler(compiler.SQLAggregateCompiler, SQLCompiler):
- pass
diff --git a/django/db/backends/oracle/features.py b/django/db/backends/oracle/features.py
index 12894e65b4..bba1e3cb0d 100644
--- a/django/db/backends/oracle/features.py
+++ b/django/db/backends/oracle/features.py
@@ -1,6 +1,5 @@
from django.db.backends.base.features import BaseDatabaseFeatures
from django.db.utils import InterfaceError
-from django.utils.functional import cached_property
class DatabaseFeatures(BaseDatabaseFeatures):
@@ -56,15 +55,4 @@ class DatabaseFeatures(BaseDatabaseFeatures):
supports_ignore_conflicts = False
max_query_params = 2**16 - 1
supports_partial_indexes = False
-
- @cached_property
- def has_fetch_offset_support(self):
- return self.connection.oracle_version >= (12, 2)
-
- @cached_property
- def allow_sliced_subqueries_with_in(self):
- return self.has_fetch_offset_support
-
- @cached_property
- def supports_slicing_ordering_in_compound(self):
- return self.has_fetch_offset_support
+ supports_slicing_ordering_in_compound = True
diff --git a/django/db/backends/oracle/operations.py b/django/db/backends/oracle/operations.py
index 4d40614958..7ef56b3dc4 100644
--- a/django/db/backends/oracle/operations.py
+++ b/django/db/backends/oracle/operations.py
@@ -580,9 +580,3 @@ END;
if fields:
return self.connection.features.max_query_params // len(fields)
return len(objs)
-
- @cached_property
- def compiler_module(self):
- if self.connection.features.has_fetch_offset_support:
- return super().compiler_module
- return 'django.db.backends.oracle.compiler'
diff --git a/docs/ref/contrib/gis/install/index.txt b/docs/ref/contrib/gis/install/index.txt
index be4f036d40..7adf85c8ce 100644
--- a/docs/ref/contrib/gis/install/index.txt
+++ b/docs/ref/contrib/gis/install/index.txt
@@ -60,7 +60,7 @@ Database Library Requirements Supported Versions Notes
================== ============================== ================== =========================================
PostgreSQL GEOS, GDAL, PROJ.4, PostGIS 9.5+ Requires PostGIS.
MySQL GEOS, GDAL 5.6+ Not OGC-compliant; :ref:`limited functionality <mysql-spatial-limitations>`.
-Oracle GEOS, GDAL 12.1+ XE not supported.
+Oracle GEOS, GDAL 12.2+ XE not supported.
SQLite GEOS, GDAL, PROJ.4, SpatiaLite 3.8.3+ Requires SpatiaLite 4.3+
================== ============================== ================== =========================================
diff --git a/docs/ref/databases.txt b/docs/ref/databases.txt
index d8f0257617..97e354fad9 100644
--- a/docs/ref/databases.txt
+++ b/docs/ref/databases.txt
@@ -730,7 +730,7 @@ iterator. Your code must handle this.
Oracle notes
============
-Django supports `Oracle Database Server`_ versions 12.1 and higher. Version
+Django supports `Oracle Database Server`_ versions 12.2 and higher. Version
6.0 or higher of the `cx_Oracle`_ Python driver is required.
.. _`Oracle Database Server`: https://www.oracle.com/
diff --git a/docs/releases/3.0.txt b/docs/releases/3.0.txt
index a657a4b0a0..eb02f19121 100644
--- a/docs/releases/3.0.txt
+++ b/docs/releases/3.0.txt
@@ -235,6 +235,12 @@ Dropped support for PostgreSQL 9.4
Upstream support for PostgreSQL 9.4 ends in December 2019. Django 3.0 supports
PostgreSQL 9.5 and higher.
+Dropped support for Oracle 12.1
+-------------------------------
+
+Upstream support for Oracle 12.1 ends in July 2021. Django 2.2 will be
+supported until April 2022. Django 3.0 officially supports Oracle 12.2 and 18c.
+
Removed private Python 2 compatibility APIs
-------------------------------------------