Adjust return value of cursor.callproc() to follow documentation so that only

positional arguments are returned
(https://github.com/oracle/python-cx_Oracle/pull/287).
This commit is contained in:
Anthony Tuininga 2019-04-17 15:31:40 -06:00
parent 511cd7a4cf
commit 983dfdab9f
2 changed files with 26 additions and 2 deletions

View File

@ -1326,8 +1326,8 @@ static PyObject *cxoCursor_callProc(cxoCursor *cursor, PyObject *args,
keywordArguments) < 0) keywordArguments) < 0)
return NULL; return NULL;
// create the return value // create the return value (only positional arguments are returned)
numArgs = PyList_GET_SIZE(cursor->bindVariables); numArgs = (listOfArguments) ? PySequence_Size(listOfArguments) : 0;
results = PyList_New(numArgs); results = PyList_New(numArgs);
if (!results) if (!results)
return NULL; return NULL;

View File

@ -86,6 +86,30 @@ class TestCase(TestEnv.BaseTestCase):
results = self.cursor.callproc("proc_Test", ("hi", 5, var)) results = self.cursor.callproc("proc_Test", ("hi", 5, var))
self.assertEqual(results, ["hi", 10, 2.0]) self.assertEqual(results, ["hi", 10, 2.0])
def testCallProcAllKeywords(self):
"test executing a stored procedure with args in keywordParameters"
kwargs = dict(a_InOutValue=self.cursor.var(cx_Oracle.NUMBER),
a_InValue="hi", a_OutValue=self.cursor.var(cx_Oracle.NUMBER))
kwargs['a_InOutValue'].setvalue(0, 5)
results = self.cursor.callproc("proc_Test", keywordParameters=kwargs)
self.assertEqual(results, [])
self.assertEqual(kwargs['a_InOutValue'].getvalue(), 10)
self.assertEqual(kwargs['a_OutValue'].getvalue(), 2.0)
def testCallProcOnlyLastKeyword(self):
"test executing a stored procedure with last arg in keywordParameters"
kwargs = dict(a_OutValue = self.cursor.var(cx_Oracle.NUMBER))
results = self.cursor.callproc("proc_Test", ("hi", 5), kwargs)
self.assertEqual(results, ["hi", 10])
self.assertEqual(kwargs['a_OutValue'].getvalue(), 2.0)
def testCallProcRepeatedKeywordParameters(self):
"test executing a stored procedure, repeated arg in keywordParameters"
kwargs = dict(a_InValue="hi",
a_OutValue=self.cursor.var(cx_Oracle.NUMBER))
self.assertRaises(cx_Oracle.DatabaseError, self.cursor.callproc,
"proc_Test", parameters=("hi", 5), keywordParameters=kwargs)
def testCallProcNoArgs(self): def testCallProcNoArgs(self):
"""test executing a stored procedure without any arguments""" """test executing a stored procedure without any arguments"""
results = self.cursor.callproc(u"proc_TestNoArgs") results = self.cursor.callproc(u"proc_TestNoArgs")