summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMariusz Felisiak <felisiak.mariusz@gmail.com>2017-08-23 10:01:49 +0200
committerGitHub <noreply@github.com>2017-08-23 10:01:49 +0200
commit0d21bdd3805f5d3a37a02062a170cabe377aa8fe (patch)
tree4028288ca47eab302092925fb663b89ee9dc8cd8
parente6dd785bb7dd7e02ee338786f73f7fdcdc6f60ec (diff)
[1.11.x] Fixed #28498 -- Added support for cx_Oracle 6.
- Fixed implicit Decimal to float conversion when input_size is not specified for Decimal parameters. - Used encoding, nencoding parameters of cx_Oracle.connect() to support unicode in DSN. Thanks Tim Graham for the review.
-rw-r--r--django/db/backends/oracle/base.py11
-rw-r--r--docs/releases/1.11.5.txt2
-rw-r--r--tests/backends/tests.py8
3 files changed, 17 insertions, 4 deletions
diff --git a/django/db/backends/oracle/base.py b/django/db/backends/oracle/base.py
index 65b5e10909..2de74da5f8 100644
--- a/django/db/backends/oracle/base.py
+++ b/django/db/backends/oracle/base.py
@@ -200,9 +200,12 @@ class DatabaseWrapper(BaseDatabaseWrapper):
settings_dict['PASSWORD'], dsn)
def get_connection_params(self):
- conn_params = self.settings_dict['OPTIONS'].copy()
- if 'use_returning_into' in conn_params:
- del conn_params['use_returning_into']
+ # Specify encoding to support unicode in DSN.
+ conn_params = {'encoding': 'UTF-8', 'nencoding': 'UTF-8'}
+ user_params = self.settings_dict['OPTIONS'].copy()
+ if 'use_returning_into' in user_params:
+ del user_params['use_returning_into']
+ conn_params.update(user_params)
return conn_params
def get_new_connection(self, conn_params):
@@ -359,6 +362,8 @@ class OracleParam(object):
elif string_size > 4000:
# Mark any string param greater than 4000 characters as a CLOB.
self.input_size = Database.CLOB
+ elif isinstance(param, decimal.Decimal):
+ self.input_size = Database.NUMBER
else:
self.input_size = None
diff --git a/docs/releases/1.11.5.txt b/docs/releases/1.11.5.txt
index 78279d5aa3..f650fe4b5a 100644
--- a/docs/releases/1.11.5.txt
+++ b/docs/releases/1.11.5.txt
@@ -12,7 +12,7 @@ Bugfixes
* Fixed GEOS version parsing if the version has a commit hash at the end (new
in GEOS 3.6.2) (:ticket:`28441`).
-* Fixed test database creation with ``cx_Oracle`` 6 (:ticket:`28498`).
+* Added compatibility for ``cx_Oracle`` 6 (:ticket:`28498`).
* Fixed select widget rendering when option values are tuples (:ticket:`28502`).
diff --git a/tests/backends/tests.py b/tests/backends/tests.py
index 83d6b05b5e..16a20de40d 100644
--- a/tests/backends/tests.py
+++ b/tests/backends/tests.py
@@ -117,6 +117,14 @@ class OracleTests(unittest.TestCase):
connection.ensure_connection()
self.assertEqual(connection.connection.encoding, "UTF-8")
self.assertEqual(connection.connection.nencoding, "UTF-8")
+ # Client encoding may be changed in OPTIONS.
+ new_connection = connection.copy()
+ new_connection.settings_dict['OPTIONS']['encoding'] = 'ISO-8859-2'
+ new_connection.settings_dict['OPTIONS']['nencoding'] = 'ASCII'
+ new_connection.ensure_connection()
+ self.assertEqual(new_connection.connection.encoding, 'ISO-8859-2')
+ self.assertEqual(new_connection.connection.nencoding, 'ASCII')
+ new_connection.close()
def test_order_of_nls_parameters(self):
# an 'almost right' datetime should work with configured