On Windows, sizeof(long) = 4 which means that integers between 10 and… · dataSyman/python-cx_Oracle@c2c8d54 · GitHub
Skip to content

Commit c2c8d54

Browse files
On Windows, sizeof(long) = 4 which means that integers between 10 and 18 digits
were not converted to Python correctly (oracle#70).
1 parent a48fcdf commit c2c8d54

3 files changed

Lines changed: 24 additions & 21 deletions

File tree

src/Variable.c

Lines changed: 2 additions & 1 deletion

test/NumberVar.py

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -25,20 +25,21 @@ def outputTypeHandlerDecimal(self, cursor, name, defaultType, size,
2525
arraysize = cursor.arraysize)
2626

2727
def setUp(self):
28-
BaseTestCase.setUp(self)
29-
self.rawData = []
30-
self.dataByKey = {}
31-
for i in range(1, 11):
32-
numberCol = i + i * 0.25
33-
floatCol = i + i * 0.75
34-
unconstrainedCol = i ** 3 + i * 0.5
35-
if i % 2:
36-
nullableCol = long(143) ** i
37-
else:
38-
nullableCol = None
39-
dataTuple = (i, numberCol, floatCol, unconstrainedCol, nullableCol)
40-
self.rawData.append(dataTuple)
41-
self.dataByKey[i] = dataTuple
28+
BaseTestCase.setUp(self)
29+
self.rawData = []
30+
self.dataByKey = {}
31+
for i in range(1, 11):
32+
numberCol = i + i * 0.25
33+
floatCol = i + i * 0.75
34+
unconstrainedCol = i ** 3 + i * 0.5
35+
if i % 2:
36+
nullableCol = long(143) ** i
37+
else:
38+
nullableCol = None
39+
dataTuple = (i, long(38) ** i, numberCol, floatCol,
40+
unconstrainedCol, nullableCol)
41+
self.rawData.append(dataTuple)
42+
self.dataByKey[i] = dataTuple
4243

4344
def testBindBoolean(self):
4445
"test binding in a boolean"
@@ -131,7 +132,7 @@ def testBindNull(self):
131132
def testBindNumberArrayDirect(self):
132133
"test binding in a number array"
133134
returnValue = self.cursor.var(cx_Oracle.NUMBER)
134-
array = [r[1] for r in self.rawData]
135+
array = [r[2] for r in self.rawData]
135136
statement = """
136137
begin
137138
:returnValue := pkg_TestNumberArrays.TestInArrays(
@@ -152,7 +153,7 @@ def testBindNumberArrayBySizes(self):
152153
"test binding in a number array (with setinputsizes)"
153154
returnValue = self.cursor.var(cx_Oracle.NUMBER)
154155
self.cursor.setinputsizes(array = [cx_Oracle.NUMBER, 10])
155-
array = [r[1] for r in self.rawData]
156+
array = [r[2] for r in self.rawData]
156157
self.cursor.execute("""
157158
begin
158159
:returnValue := pkg_TestNumberArrays.TestInArrays(
@@ -167,8 +168,7 @@ def testBindNumberArrayByVar(self):
167168
"test binding in a number array (with arrayvar)"
168169
returnValue = self.cursor.var(cx_Oracle.NUMBER)
169170
array = self.cursor.arrayvar(cx_Oracle.NUMBER,
170-
[r[1] for r in self.rawData])
171-
array.setvalue(0, [r[1] for r in self.rawData])
171+
[r[2] for r in self.rawData])
172172
self.cursor.execute("""
173173
begin
174174
:returnValue := pkg_TestNumberArrays.TestInArrays(
@@ -197,7 +197,7 @@ def testBindZeroLengthNumberArrayByVar(self):
197197
def testBindInOutNumberArrayByVar(self):
198198
"test binding in/out a number array (with arrayvar)"
199199
array = self.cursor.arrayvar(cx_Oracle.NUMBER, 10)
200-
originalData = [r[1] for r in self.rawData]
200+
originalData = [r[2] for r in self.rawData]
201201
expectedData = [originalData[i - 1] * 10 for i in range(1, 6)] + \
202202
originalData[5:]
203203
array.setvalue(0, originalData)
@@ -266,6 +266,7 @@ def testCursorDescription(self):
266266
self.cursor.execute("select * from TestNumbers")
267267
self.assertEqual(self.cursor.description,
268268
[ ('INTCOL', cx_Oracle.NUMBER, 10, None, 9, 0, 0),
269+
('LONGINTCOL', cx_Oracle.NUMBER, 17, None, 16, 0, 0),
269270
('NUMBERCOL', cx_Oracle.NUMBER, 13, None, 9, 2, 0),
270271
('FLOATCOL', cx_Oracle.NUMBER, 127, None, 126, -127, 0),
271272
('UNCONSTRAINEDCOL', cx_Oracle.NUMBER, 127, None, 0, -127, 0),

test/sql/SetupTest.sql

Lines changed: 2 additions & 1 deletion

0 commit comments

Comments
 (0)