Ticket #10224: django-oracle-binary.diff

File django-oracle-binary.diff, 3.4 KB (added by aprilmay, 7 years ago)
  • django-trunk/django/db/backends/oracle/base.py

     
    421421        # cursor description, and convert strings to unicode.
    422422        casted = []
    423423        for value, desc in zip(row, self.cursor.description):
    424             if value is not None and desc[1] is Database.NUMBER:
    425                 precision, scale = desc[4:6]
    426                 if scale == -127:
    427                     if precision == 0:
    428                         # NUMBER column: decimal-precision floating point
    429                         # This will normally be an integer from a sequence,
    430                         # but it could be a decimal value.
    431                         if '.' in value:
    432                             value = Decimal(value)
     424            if value is not None:
     425                if desc[1] is Database.NUMBER:
     426                    precision, scale = desc[4:6]
     427                    if scale == -127:
     428                        if precision == 0:
     429                            # NUMBER column: decimal-precision floating point
     430                            # This will normally be an integer from a sequence,
     431                            # but it could be a decimal value.
     432                            if '.' in value:
     433                                value = Decimal(value)
     434                            else:
     435                                value = int(value)
    433436                        else:
     437                            # FLOAT column: binary-precision floating point.
     438                            # This comes from FloatField columns.
     439                            value = float(value)
     440                    elif precision > 0:
     441                        # NUMBER(p,s) column: decimal-precision fixed point.
     442                        # This comes from IntField and DecimalField columns.
     443                        if scale == 0:
    434444                            value = int(value)
     445                        else:
     446                            value = Decimal(value)
     447                    elif '.' in value:
     448                        # No type information. This normally comes from a
     449                        # mathematical expression in the SELECT list. Guess int
     450                        # or Decimal based on whether it has a decimal point.
     451                        value = Decimal(value)
    435452                    else:
    436                         # FLOAT column: binary-precision floating point.
    437                         # This comes from FloatField columns.
    438                         value = float(value)
    439                 elif precision > 0:
    440                     # NUMBER(p,s) column: decimal-precision fixed point.
    441                     # This comes from IntField and DecimalField columns.
    442                     if scale == 0:
    443453                        value = int(value)
    444                     else:
    445                         value = Decimal(value)
    446                 elif '.' in value:
    447                     # No type information. This normally comes from a
    448                     # mathematical expression in the SELECT list. Guess int
    449                     # or Decimal based on whether it has a decimal point.
    450                     value = Decimal(value)
    451                 else:
    452                     value = int(value)
    453454            else:
    454455                value = to_unicode(value)
    455456            casted.append(value)
Back to Top