Kaydet (Commit) fd427f1f authored tarafından Shai Berger's avatar Shai Berger

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).
üst e97b7a26
...@@ -259,7 +259,10 @@ WHEN (new.%(col_name)s IS NULL) ...@@ -259,7 +259,10 @@ WHEN (new.%(col_name)s IS NULL)
# string instead of null, but only if the field accepts the # string instead of null, but only if the field accepts the
# empty string. # empty string.
if value is None and field and field.empty_strings_allowed: 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 # Convert 1 or 0 to True or False
elif value in (1, 0) and field and field.get_internal_type() in ('BooleanField', 'NullBooleanField'): elif value in (1, 0) and field and field.get_internal_type() in ('BooleanField', 'NullBooleanField'):
value = bool(value) value = bool(value)
......
...@@ -3,6 +3,7 @@ import datetime ...@@ -3,6 +3,7 @@ import datetime
import binascii import binascii
from django.utils import six from django.utils import six
from django.utils.text import force_text
from django.db.backends.schema import BaseDatabaseSchemaEditor from django.db.backends.schema import BaseDatabaseSchemaEditor
from django.db.utils import DatabaseError from django.db.utils import DatabaseError
...@@ -23,8 +24,9 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor): ...@@ -23,8 +24,9 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
return "'%s'" % value return "'%s'" % value
elif isinstance(value, six.string_types): elif isinstance(value, six.string_types):
return "'%s'" % six.text_type(value).replace("\'", "\'\'") return "'%s'" % six.text_type(value).replace("\'", "\'\'")
elif isinstance(value, buffer): elif (isinstance(value, six.memoryview) or
return "'%s'" % binascii.hexlify(value) six.PY3 and isinstance(value, bytes)):
return "'%s'" % force_text(binascii.hexlify(value))
elif isinstance(value, bool): elif isinstance(value, bool):
return "1" if value else "0" return "1" if value else "0"
else: else:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment