Fixed crash when using the deprecated parameter name keywordParameters

with Cursor.callproc(); add test cases to cover this and other similar
situations.
This commit is contained in:
Anthony Tuininga 2021-05-21 21:38:45 -06:00
parent ce4713c6f7
commit d585cf06df
6 changed files with 76 additions and 1 deletions

View File

@ -10,6 +10,10 @@ For any deprecations, see :ref:`Deprecations <deprecations>`.
Version 8.3 (TBD)
-----------------
#) Fixed crash when using the deprecated parameter name `keywordParameters`
with :meth:`Cursor.callproc()`.
#) Improved the test suite.
Version 8.2 (May 2021)
----------------------

View File

@ -1263,7 +1263,8 @@ static PyObject *cxoCursor_callProc(cxoCursor *cursor, PyObject *args,
// parse arguments
listOfArguments = keywordArguments = keywordArgumentsDeprecated = NULL;
if (!PyArg_ParseTupleAndKeywords(args, keywordArgs, "O|OOO", keywordList,
&name, &listOfArguments, &keywordArguments))
&name, &listOfArguments, &keywordArguments,
&keywordArgumentsDeprecated))
return NULL;
if (keywordArgumentsDeprecated) {
if (keywordArguments) {

View File

@ -1001,5 +1001,35 @@ class TestCase(test_env.BaseTestCase):
self.assertEqual(self.cursor.statement, sql)
self.assertEqual(self.cursor.description, None)
def test_1285_executemany_with_plsql_binds(self):
"1285 - test executing plsql statements multiple times (with binds)"
var = self.cursor.var(int, arraysize=5)
self.cursor.setinputsizes(var)
data = [[25], [30], [None], [35], [None]]
exepected_data = [25, 30, None, 35, None]
self.cursor.executemany("declare t number; begin t := :1; end;", data)
self.assertEqual(var.values, exepected_data)
def test_1286_encodingErrors_deprecation(self):
"1286 - test to verify encodingErrors is deprecated"
errors = 'strict'
self.assertRaises(oracledb.ProgrammingError, self.cursor.var,
oracledb.NUMBER, encoding_errors=errors,
encodingErrors=errors)
def test_1287_keywordParameters_deprecation(self):
"1287 - test to verify keywordParameters is deprecated"
out_value = self.cursor.var(oracledb.NUMBER)
kwargs = dict(a_OutValue=out_value)
self.assertRaises(oracledb.ProgrammingError, self.cursor.callproc,
"proc_Test", ("hi", 5), kwargs,
keywordParameters=kwargs)
extra_amount = self.cursor.var(oracledb.NUMBER)
extra_amount.setvalue(0, 5)
kwargs = dict(a_ExtraAmount=extra_amount, a_String="hi")
self.assertRaises(oracledb.ProgrammingError, self.cursor.callfunc,
"func_Test", oracledb.NUMBER, [], kwargs,
keywordParameters=kwargs)
if __name__ == "__main__":
test_env.run_test_cases()

View File

@ -441,5 +441,22 @@ class TestCase(test_env.BaseTestCase):
self.assertEqual(pool.stmtcachesize, 25, "stmtcachesize (25)")
self.assertEqual(pool.ping_interval, 25, "ping_interval (25)")
def test_2418_deprecations(self):
"2418 - test to verify deprecations"
callback = "pkg_SessionCallback.TheCallback"
self.assertRaises(oracledb.ProgrammingError, test_env.get_pool,
min=1, max=2, increment=1, wait_timeout=10,
waitTimeout=10)
self.assertRaises(oracledb.ProgrammingError, test_env.get_pool,
min=1, max=2, increment=1, max_lifetime_session=20,
maxLifetimeSession=20)
self.assertRaises(oracledb.ProgrammingError, test_env.get_pool,
min=1, max=2, increment=1, max_sessions_per_shard=1,
maxSessionsPerShard=1)
self.assertRaises(oracledb.ProgrammingError, test_env.get_pool,
min=2, max=8, increment=3,
getmode=oracledb.SPOOL_ATTRVAL_NOWAIT,
session_callback=callback, sessionCallback=callback)
if __name__ == "__main__":
test_env.run_test_cases()

View File

@ -371,5 +371,13 @@ class TestCase(test_env.BaseTestCase):
otherPrice = book.PRICE
self.assertEqual(otherPrice, expectedPrice)
def test_2716_payloadType_deprecation(self):
"2716 - test to verify payloadType is deprecated"
self.__clear_books_queue()
books_type = self.connection.gettype(self.book_type_name)
self.assertRaises(oracledb.ProgrammingError, self.connection.queue,
self.book_queue_name, books_type,
payloadType=books_type)
if __name__ == "__main__":
test_env.run_test_cases()

View File

@ -119,5 +119,20 @@ class TestCase(test_env.BaseTestCase):
(test_env.get_main_user(), test_env.get_connect_string())
self.assertEqual(str(sub), expected)
def test_3001_deprecations(self):
"3001 - test to verify deprecations"
connection = test_env.get_connection(threaded=True, events=True)
self.assertRaises(oracledb.ProgrammingError, connection.subscribe,
ip_address='www.oracle.in',
ipAddress='www.oracle.in')
self.assertRaises(oracledb.ProgrammingError, connection.subscribe,
grouping_class=1, groupingClass=1)
self.assertRaises(oracledb.ProgrammingError, connection.subscribe,
grouping_value=3, groupingValue=3)
self.assertRaises(oracledb.ProgrammingError, connection.subscribe,
grouping_type=2, groupingType=2)
self.assertRaises(oracledb.ProgrammingError, connection.subscribe,
client_initiated=True, clientInitiated=True)
if __name__ == "__main__":
test_env.run_test_cases()