diff options
| author | Shai Berger <shai@platonix.com> | 2014-05-28 18:57:40 +0300 |
|---|---|---|
| committer | Shai Berger <shai@platonix.com> | 2014-05-28 18:57:40 +0300 |
| commit | fd427f1fe3c563d5fe0badfec0a39d6cd43454da (patch) | |
| tree | 053f87a4388c19fc332597c51545e8949fb5bade | |
| parent | e97b7a26779054e7bb4326c688b0ed7823037dec (diff) | |
Fixed #22715: Corrected sql for defaults of BinaryField on Oracle with Python3
While at it, fixed a problem in returning empty values
(still with BinaryField/Oracle/Python3).
| -rw-r--r-- | django/db/backends/oracle/base.py | 5 | ||||
| -rw-r--r-- | django/db/backends/oracle/schema.py | 6 |
2 files changed, 8 insertions, 3 deletions
diff --git a/django/db/backends/oracle/base.py b/django/db/backends/oracle/base.py index 0184fa1cbe..20378fc2c1 100644 --- a/django/db/backends/oracle/base.py +++ b/django/db/backends/oracle/base.py @@ -259,7 +259,10 @@ WHEN (new.%(col_name)s IS NULL) # string instead of null, but only if the field accepts the # empty string. if value is None and field and field.empty_strings_allowed: - value = '' + if field.get_internal_type() == 'BinaryField': + value = bytes() # same as '' on PY2 but different on PY3 + else: + value = '' # Convert 1 or 0 to True or False elif value in (1, 0) and field and field.get_internal_type() in ('BooleanField', 'NullBooleanField'): value = bool(value) diff --git a/django/db/backends/oracle/schema.py b/django/db/backends/oracle/schema.py index 7843b96943..986cd95e75 100644 --- a/django/db/backends/oracle/schema.py +++ b/django/db/backends/oracle/schema.py @@ -3,6 +3,7 @@ import datetime import binascii from django.utils import six +from django.utils.text import force_text from django.db.backends.schema import BaseDatabaseSchemaEditor from django.db.utils import DatabaseError @@ -23,8 +24,9 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor): return "'%s'" % value elif isinstance(value, six.string_types): return "'%s'" % six.text_type(value).replace("\'", "\'\'") - elif isinstance(value, buffer): - return "'%s'" % binascii.hexlify(value) + elif (isinstance(value, six.memoryview) or + six.PY3 and isinstance(value, bytes)): + return "'%s'" % force_text(binascii.hexlify(value)) elif isinstance(value, bool): return "1" if value else "0" else: |
