Code

Ticket #10224: django-oracle-binary.diff

File django-oracle-binary.diff, 3.4 KB (added by aprilmay, 5 years ago)
Line 
1Index: django-trunk/django/db/backends/oracle/base.py
2===================================================================
3--- django-trunk/django/db/backends/oracle/base.py      (revision 9820)
4+++ django-trunk/django/db/backends/oracle/base.py      (working copy)
5@@ -421,35 +421,36 @@
6         # cursor description, and convert strings to unicode.
7         casted = []
8         for value, desc in zip(row, self.cursor.description):
9-            if value is not None and desc[1] is Database.NUMBER:
10-                precision, scale = desc[4:6]
11-                if scale == -127:
12-                    if precision == 0:
13-                        # NUMBER column: decimal-precision floating point
14-                        # This will normally be an integer from a sequence,
15-                        # but it could be a decimal value.
16-                        if '.' in value:
17-                            value = Decimal(value)
18+            if value is not None:
19+                if desc[1] is Database.NUMBER:
20+                    precision, scale = desc[4:6]
21+                    if scale == -127:
22+                        if precision == 0:
23+                            # NUMBER column: decimal-precision floating point
24+                            # This will normally be an integer from a sequence,
25+                            # but it could be a decimal value.
26+                            if '.' in value:
27+                                value = Decimal(value)
28+                            else:
29+                                value = int(value)
30                         else:
31+                            # FLOAT column: binary-precision floating point.
32+                            # This comes from FloatField columns.
33+                            value = float(value)
34+                    elif precision > 0:
35+                        # NUMBER(p,s) column: decimal-precision fixed point.
36+                        # This comes from IntField and DecimalField columns.
37+                        if scale == 0:
38                             value = int(value)
39+                        else:
40+                            value = Decimal(value)
41+                    elif '.' in value:
42+                        # No type information. This normally comes from a
43+                        # mathematical expression in the SELECT list. Guess int
44+                        # or Decimal based on whether it has a decimal point.
45+                        value = Decimal(value)
46                     else:
47-                        # FLOAT column: binary-precision floating point.
48-                        # This comes from FloatField columns.
49-                        value = float(value)
50-                elif precision > 0:
51-                    # NUMBER(p,s) column: decimal-precision fixed point.
52-                    # This comes from IntField and DecimalField columns.
53-                    if scale == 0:
54                         value = int(value)
55-                    else:
56-                        value = Decimal(value)
57-                elif '.' in value:
58-                    # No type information. This normally comes from a
59-                    # mathematical expression in the SELECT list. Guess int
60-                    # or Decimal based on whether it has a decimal point.
61-                    value = Decimal(value)
62-                else:
63-                    value = int(value)
64             else:
65                 value = to_unicode(value)
66             casted.append(value)
67