Skip to content

Commit 543b22f

Browse files
Added support for smallint and float data types in Oracle objects, as requested
(#4).
1 parent 2153ee6 commit 543b22f

File tree

4 files changed

+18
-6
lines changed

4 files changed

+18
-6
lines changed

doc/src/releasenotes.rst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@ Release notes
88
Version 5.next
99
--------------
1010

11+
Version 5.3.1 (TBD)
12+
-------------------
13+
14+
1) Added support for smallint and float data types in Oracle objects, as
15+
requested (https://github.com/oracle/python-cx_Oracle/issues/4).
16+
1117

1218
Version 5.3 (March 2017)
1319
------------------------

src/Object.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -425,9 +425,11 @@ static PyObject *Object_ConvertToPython(
425425
return cxString_FromEncodedString( (char*) stringValue,
426426
stringSize, environment->encoding);
427427
case OCI_TYPECODE_INTEGER:
428+
case OCI_TYPECODE_SMALLINT:
428429
return OracleNumberToPythonInteger(environment,
429430
(OCINumber*) value);
430431
case OCI_TYPECODE_NUMBER:
432+
case OCI_TYPECODE_FLOAT:
431433
return OracleNumberToPythonFloat(environment, (OCINumber*) value);
432434
case OCI_TYPECODE_DATE:
433435
return OracleDateToPythonDate(&vt_DateTime, (OCIDate*) value);

test/ObjectVar.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,14 +111,14 @@ def testFetchData(self):
111111
[ ('INTCOL', cx_Oracle.NUMBER, 10, None, 9, 0, 0),
112112
('OBJECTCOL', cx_Oracle.OBJECT, None, None, None, None, 1),
113113
('ARRAYCOL', cx_Oracle.OBJECT, None, None, None, None, 1) ])
114-
self.__TestData(1, (1, 'First row', 'First ',
114+
self.__TestData(1, (1, 'First row', 'First ', 2, 5, 12.5,
115115
cx_Oracle.Timestamp(2007, 3, 6, 0, 0, 0),
116116
cx_Oracle.Timestamp(2008, 9, 12, 16, 40),
117117
(11, 'Sub object 1'),
118118
[(5, 'first element'), (6, 'second element')]),
119119
[5, 10, None, 20])
120120
self.__TestData(2, None, [3, None, 9, 12, 15])
121-
self.__TestData(3, (3, 'Third row', 'Third ',
121+
self.__TestData(3, (3, 'Third row', 'Third ', 4, 10, 43.25,
122122
cx_Oracle.Timestamp(2007, 6, 21, 0, 0, 0),
123123
cx_Oracle.Timestamp(2007, 12, 13, 7, 30, 45),
124124
(13, 'Sub object 3'),
@@ -132,8 +132,9 @@ def testGetObjectType(self):
132132
self.assertEqual(typeObj.schema, self.connection.username.upper())
133133
self.assertEqual(typeObj.name, "UDT_OBJECT")
134134
expectedAttributeNames = ["NUMBERVALUE", "STRINGVALUE",
135-
"FIXEDCHARVALUE", "DATEVALUE", "TIMESTAMPVALUE",
136-
"SUBOBJECTVALUE", "SUBOBJECTARRAY"]
135+
"FIXEDCHARVALUE", "INTVALUE", "SMALLINTVALUE", "FLOATVALUE",
136+
"DATEVALUE", "TIMESTAMPVALUE", "SUBOBJECTVALUE",
137+
"SUBOBJECTARRAY"]
137138
actualAttributeNames = [a.name for a in typeObj.attributes]
138139
self.assertEqual(actualAttributeNames, expectedAttributeNames)
139140
typeObj = self.connection.gettype("UDT_OBJECTARRAY")

test/SetupTest.sql

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ create type cx_Oracle.udt_Object as object (
5656
NumberValue number,
5757
StringValue varchar2(60),
5858
FixedCharValue char(10),
59+
IntValue integer,
60+
SmallIntValue smallint,
61+
FloatValue float,
5962
DateValue date,
6063
TimestampValue timestamp,
6164
SubObjectValue cx_Oracle.udt_SubObject,
@@ -272,7 +275,7 @@ end;
272275
/
273276

274277
insert into cx_Oracle.TestObjects values (1,
275-
cx_Oracle.udt_Object(1, 'First row', 'First',
278+
cx_Oracle.udt_Object(1, 'First row', 'First', 2, 5, 12.5,
276279
to_date(20070306, 'YYYYMMDD'),
277280
to_timestamp('20080912 16:40:00', 'YYYYMMDD HH24:MI:SS'),
278281
cx_Oracle.udt_SubObject(11, 'Sub object 1'),
@@ -285,7 +288,7 @@ insert into cx_Oracle.TestObjects values (2, null,
285288
cx_Oracle.udt_Array(3, null, 9, 12, 15));
286289

287290
insert into cx_Oracle.TestObjects values (3,
288-
cx_Oracle.udt_Object(3, 'Third row', 'Third',
291+
cx_Oracle.udt_Object(3, 'Third row', 'Third', 4, 10, 43.25,
289292
to_date(20070621, 'YYYYMMDD'),
290293
to_timestamp('20071213 07:30:45', 'YYYYMMDD HH24:MI:SS'),
291294
cx_Oracle.udt_SubObject(13, 'Sub object 3'),

0 commit comments

Comments
 (0)