Commit fd427f1f authored by Shai Berger's avatar Shai Berger
Browse files

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).
parent e97b7a26
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -259,6 +259,9 @@ 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:
            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'):
+4 −2
Original line number Diff line number Diff line
@@ -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: