From fd427f1fe3c563d5fe0badfec0a39d6cd43454da Mon Sep 17 00:00:00 2001 From: Shai Berger Date: Wed, 28 May 2014 18:57:40 +0300 Subject: [PATCH] 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). --- django/db/backends/oracle/base.py | 5 ++++- 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: