Skip to content

Commit e158512

Browse files
Correct the handling of ANSI types REAL and DOUBLE PRECISION as implemented by
Oracle. These types are just subtypes of NUMBER and are not actually stored as native floating point numbers. Native floating point numbers are used with Oracle types BINARY_FLOAT and BINARY_DOUBLE (oracle#163).
1 parent 4f42099 commit e158512

3 files changed

Lines changed: 12 additions & 7 deletions

File tree

odpi

test/ObjectVar.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ def testFetchData(self):
123123
('OBJECTCOL', cx_Oracle.OBJECT, None, None, None, None, 1),
124124
('ARRAYCOL', cx_Oracle.OBJECT, None, None, None, None, 1) ])
125125
self.__TestData(1, (1, 'First row', 'First ', 'N First Row',
126-
'N First ', 2, 5, 12.5, 25.25, 50.125,
126+
'N First ', 2, 5, 12.125, 0.5, 12.5, 25.25, 50.125,
127127
cx_Oracle.Timestamp(2007, 3, 6, 0, 0, 0),
128128
cx_Oracle.Timestamp(2008, 9, 12, 16, 40),
129129
cx_Oracle.Timestamp(2009, 10, 13, 17, 50),
@@ -134,7 +134,7 @@ def testFetchData(self):
134134
[5, 10, None, 20])
135135
self.__TestData(2, None, [3, None, 9, 12, 15])
136136
self.__TestData(3, (3, 'Third row', 'Third ', 'N Third Row',
137-
'N Third ', 4, 10, 43.25, 86.5, 192.125,
137+
'N Third ', 4, 10, 6.5, 0.75, 43.25, 86.5, 192.125,
138138
cx_Oracle.Timestamp(2007, 6, 21, 0, 0, 0),
139139
cx_Oracle.Timestamp(2007, 12, 13, 7, 30, 45),
140140
cx_Oracle.Timestamp(2017, 6, 21, 23, 18, 45),
@@ -153,7 +153,8 @@ def testGetObjectType(self):
153153
self.assertEqual(typeObj.name, "UDT_OBJECT")
154154
expectedAttributeNames = ["NUMBERVALUE", "STRINGVALUE",
155155
"FIXEDCHARVALUE", "NSTRINGVALUE", "NFIXEDCHARVALUE",
156-
"INTVALUE", "SMALLINTVALUE", "FLOATVALUE", "BINARYFLOATVALUE",
156+
"INTVALUE", "SMALLINTVALUE", "REALVALUE",
157+
"DOUBLEPRECISIONVALUE", "FLOATVALUE", "BINARYFLOATVALUE",
157158
"BINARYDOUBLEVALUE", "DATEVALUE", "TIMESTAMPVALUE",
158159
"TIMESTAMPTZVALUE", "TIMESTAMPLTZVALUE", "CLOBVALUE",
159160
"NCLOBVALUE", "BLOBVALUE", "SUBOBJECTVALUE", "SUBOBJECTARRAY"]
@@ -203,6 +204,8 @@ def testRoundTripObject(self):
203204
obj.NFIXEDCHARVALUE = "Fixed N"
204205
obj.INTVALUE = 27
205206
obj.SMALLINTVALUE = 13
207+
obj.REALVALUE = 184.875
208+
obj.DOUBLEPRECISIONVALUE = 1.375
206209
obj.FLOATVALUE = 23.75
207210
obj.DATEVALUE = datetime.date(2017, 5, 9)
208211
obj.TIMESTAMPVALUE = datetime.datetime(2017, 5, 9, 9, 41, 13)
@@ -225,7 +228,7 @@ def testRoundTripObject(self):
225228
from TestObjects
226229
where IntCol = 4""")
227230
self.__TestData(4, (5, 'A string', 'Fixed str ', 'A NCHAR string',
228-
'Fixed N ', 27, 13, 23.75, 14.25, 29.1625,
231+
'Fixed N ', 27, 13, 184.875, 1.375, 23.75, 14.25, 29.1625,
229232
cx_Oracle.Timestamp(2017, 5, 9, 0, 0, 0),
230233
cx_Oracle.Timestamp(2017, 5, 9, 9, 41, 13),
231234
cx_Oracle.Timestamp(1986, 8, 2, 15, 27, 38),

test/sql/SetupTest.sql

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ create type &main_user..udt_Object as object (
6666
NFixedCharValue nchar(10),
6767
IntValue integer,
6868
SmallIntValue smallint,
69+
RealValue real,
70+
DoublePrecisionValue double precision,
6971
FloatValue float,
7072
BinaryFloatValue binary_float,
7173
BinaryDoubleValue binary_double,
@@ -321,7 +323,7 @@ end;
321323

322324
insert into &main_user..TestObjects values (1,
323325
&main_user..udt_Object(1, 'First row', 'First', 'N First Row', 'N First',
324-
2, 5, 12.5, 25.25, 50.125, to_date(20070306, 'YYYYMMDD'),
326+
2, 5, 12.125, 0.5, 12.5, 25.25, 50.125, to_date(20070306, 'YYYYMMDD'),
325327
to_timestamp('20080912 16:40:00', 'YYYYMMDD HH24:MI:SS'),
326328
to_timestamp_tz('20091013 17:50:00 00:00',
327329
'YYYYMMDD HH24:MI:SS TZH:TZM'),
@@ -340,7 +342,7 @@ insert into &main_user..TestObjects values (2, null,
340342

341343
insert into &main_user..TestObjects values (3,
342344
&main_user..udt_Object(3, 'Third row', 'Third', 'N Third Row', 'N Third',
343-
4, 10, 43.25, 86.5, 192.125, to_date(20070621, 'YYYYMMDD'),
345+
4, 10, 6.5, 0.75, 43.25, 86.5, 192.125, to_date(20070621, 'YYYYMMDD'),
344346
to_timestamp('20071213 07:30:45', 'YYYYMMDD HH24:MI:SS'),
345347
to_timestamp_tz('20170621 23:18:45 00:00',
346348
'YYYYMMDD HH24:MI:SS TZH:TZM'),

0 commit comments

Comments
 (0)