107 lines
4.0 KiB
Python
107 lines
4.0 KiB
Python
#------------------------------------------------------------------------------
|
|
# Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
|
|
#
|
|
# Portions Copyright 2007-2015, Anthony Tuininga. All rights reserved.
|
|
#
|
|
# Portions Copyright 2001-2007, Computronix (Canada) Ltd., Edmonton, Alberta,
|
|
# Canada. All rights reserved.
|
|
#------------------------------------------------------------------------------
|
|
|
|
"""Module for testing long and long raw variables."""
|
|
|
|
import TestEnv
|
|
|
|
import cx_Oracle
|
|
import sys
|
|
|
|
class TestCase(TestEnv.BaseTestCase):
|
|
|
|
def __PerformTest(self, a_Type, a_InputType):
|
|
self.cursor.execute("truncate table Test%ss" % a_Type)
|
|
longString = ""
|
|
for i in range(1, 11):
|
|
char = chr(ord('A') + i - 1)
|
|
longString += char * 25000
|
|
self.cursor.setinputsizes(longString = a_InputType)
|
|
if a_Type == "LongRaw" and sys.version_info[0] >= 3:
|
|
bindValue = longString.encode("ascii")
|
|
else:
|
|
bindValue = longString
|
|
self.cursor.execute("""
|
|
insert into Test%ss (
|
|
IntCol,
|
|
%sCol
|
|
) values (
|
|
:integerValue,
|
|
:longString
|
|
)""" % (a_Type, a_Type),
|
|
integerValue = i,
|
|
longString = bindValue)
|
|
self.connection.commit()
|
|
self.cursor.execute("""
|
|
select *
|
|
from Test%ss
|
|
order by IntCol""" % a_Type)
|
|
longString = ""
|
|
while 1:
|
|
row = self.cursor.fetchone()
|
|
if row is None:
|
|
break
|
|
integerValue, fetchedValue = row
|
|
char = chr(ord('A') + integerValue - 1)
|
|
longString += char * 25000
|
|
if a_Type == "LongRaw" and sys.version_info[0] >= 3:
|
|
actualValue = longString.encode("ascii")
|
|
else:
|
|
actualValue = longString
|
|
self.assertEqual(len(fetchedValue), integerValue * 25000)
|
|
self.assertEqual(fetchedValue, actualValue)
|
|
|
|
def testLongs(self):
|
|
"test binding and fetching long data"
|
|
self.__PerformTest("Long", cx_Oracle.DB_TYPE_LONG)
|
|
|
|
def testLongWithExecuteMany(self):
|
|
"test binding long data with executemany()"
|
|
data = []
|
|
self.cursor.execute("truncate table TestLongs")
|
|
for i in range(5):
|
|
char = chr(ord('A') + i)
|
|
longStr = char * (32768 * (i + 1))
|
|
data.append((i + 1, longStr))
|
|
self.cursor.executemany("insert into TestLongs values (:1, :2)", data)
|
|
self.connection.commit()
|
|
self.cursor.execute("select * from TestLongs order by IntCol")
|
|
fetchedData = self.cursor.fetchall()
|
|
self.assertEqual(fetchedData, data)
|
|
|
|
def testLongRaws(self):
|
|
"test binding and fetching long raw data"
|
|
self.__PerformTest("LongRaw", cx_Oracle.DB_TYPE_LONG_RAW)
|
|
|
|
def testLongCursorDescription(self):
|
|
"test cursor description is accurate for longs"
|
|
self.cursor.execute("select * from TestLongs")
|
|
self.assertEqual(self.cursor.description,
|
|
[ ('INTCOL', cx_Oracle.DB_TYPE_NUMBER, 10, None, 9, 0, 0),
|
|
('LONGCOL', cx_Oracle.DB_TYPE_LONG, None, None, None, None,
|
|
0) ])
|
|
|
|
def testLongRawCursorDescription(self):
|
|
"test cursor description is accurate for long raws"
|
|
self.cursor.execute("select * from TestLongRaws")
|
|
self.assertEqual(self.cursor.description,
|
|
[ ('INTCOL', cx_Oracle.DB_TYPE_NUMBER, 10, None, 9, 0, 0),
|
|
('LONGRAWCOL', cx_Oracle.DB_TYPE_LONG_RAW, None, None, None,
|
|
None, 0) ])
|
|
|
|
def testArraySizeTooLarge(self):
|
|
"test array size too large generates an exception"
|
|
self.cursor.arraysize = 268435456
|
|
self.assertRaises(cx_Oracle.DatabaseError, self.cursor.execute,
|
|
"select * from TestLongRaws")
|
|
|
|
if __name__ == "__main__":
|
|
TestEnv.RunTestCases()
|
|
|