Spaces:
Running
Running
print("This module depends on the dbapi20 compliance tests created by Stuart Bishop") | |
print("(see db-sig mailing list history for info)") | |
import platform | |
import sys | |
import unittest | |
import dbapi20 | |
import setuptestframework | |
testfolder = setuptestframework.maketemp() | |
if "--package" in sys.argv: | |
pth = setuptestframework.makeadopackage(testfolder) | |
sys.argv.remove("--package") | |
else: | |
pth = setuptestframework.find_ado_path() | |
if pth not in sys.path: | |
sys.path.insert(1, pth) | |
# function to clean up the temporary folder -- calling program must run this function before exit. | |
cleanup = setuptestframework.getcleanupfunction() | |
import adodbapi | |
import adodbapi.is64bit as is64bit | |
db = adodbapi | |
if "--verbose" in sys.argv: | |
db.adodbapi.verbose = 3 | |
print(adodbapi.version) | |
print("Tested with dbapi20 %s" % dbapi20.__version__) | |
try: | |
onWindows = bool(sys.getwindowsversion()) # seems to work on all versions of Python | |
except: | |
onWindows = False | |
node = platform.node() | |
conn_kws = {} | |
host = "testsql.2txt.us,1430" # if None, will use macro to fill in node name | |
instance = r"%s\SQLEXPRESS" | |
conn_kws["name"] = "adotest" | |
conn_kws["user"] = "adotestuser" # None implies Windows security | |
conn_kws["password"] = "Sq1234567" | |
# macro definition for keyword "security" using macro "auto_security" | |
conn_kws["macro_auto_security"] = "security" | |
if host is None: | |
conn_kws["macro_getnode"] = ["host", instance] | |
else: | |
conn_kws["host"] = host | |
conn_kws[ | |
"provider" | |
] = "Provider=MSOLEDBSQL;DataTypeCompatibility=80;MARS Connection=True;" | |
connStr = "%(provider)s; %(security)s; Initial Catalog=%(name)s;Data Source=%(host)s" | |
if onWindows and node != "z-PC": | |
pass # default should make a local SQL Server connection | |
elif node == "xxx": # try Postgres database | |
_computername = "25.223.161.222" | |
_databasename = "adotest" | |
_username = "adotestuser" | |
_password = "12345678" | |
_driver = "PostgreSQL Unicode" | |
_provider = "" | |
connStr = "%sDriver={%s};Server=%s;Database=%s;uid=%s;pwd=%s;" % ( | |
_provider, | |
_driver, | |
_computername, | |
_databasename, | |
_username, | |
_password, | |
) | |
elif node == "yyy": # ACCESS data base is known to fail some tests. | |
if is64bit.Python(): | |
driver = "Microsoft.ACE.OLEDB.12.0" | |
else: | |
driver = "Microsoft.Jet.OLEDB.4.0" | |
testmdb = setuptestframework.makemdb(testfolder) | |
connStr = r"Provider=%s;Data Source=%s" % (driver, testmdb) | |
else: # try a remote connection to an SQL server | |
conn_kws["proxy_host"] = "25.44.77.176" | |
import adodbapi.remote | |
db = adodbapi.remote | |
print("Using Connection String like=%s" % connStr) | |
print("Keywords=%s" % repr(conn_kws)) | |
class test_adodbapi(dbapi20.DatabaseAPI20Test): | |
driver = db | |
connect_args = (connStr,) | |
connect_kw_args = conn_kws | |
def __init__(self, arg): | |
dbapi20.DatabaseAPI20Test.__init__(self, arg) | |
def getTestMethodName(self): | |
return self.id().split(".")[-1] | |
def setUp(self): | |
# Call superclass setUp In case this does something in the | |
# future | |
dbapi20.DatabaseAPI20Test.setUp(self) | |
if self.getTestMethodName() == "test_callproc": | |
con = self._connect() | |
engine = con.dbms_name | |
## print('Using database Engine=%s' % engine) ## | |
if engine != "MS Jet": | |
sql = """ | |
create procedure templower | |
@theData varchar(50) | |
as | |
select lower(@theData) | |
""" | |
else: # Jet | |
sql = """ | |
create procedure templower | |
(theData varchar(50)) | |
as | |
select lower(theData); | |
""" | |
cur = con.cursor() | |
try: | |
cur.execute(sql) | |
con.commit() | |
except: | |
pass | |
cur.close() | |
con.close() | |
self.lower_func = "templower" | |
def tearDown(self): | |
if self.getTestMethodName() == "test_callproc": | |
con = self._connect() | |
cur = con.cursor() | |
try: | |
cur.execute("drop procedure templower") | |
except: | |
pass | |
con.commit() | |
dbapi20.DatabaseAPI20Test.tearDown(self) | |
def help_nextset_setUp(self, cur): | |
"Should create a procedure called deleteme" | |
'that returns two result sets, first the number of rows in booze then "name from booze"' | |
sql = """ | |
create procedure deleteme as | |
begin | |
select count(*) from %sbooze | |
select name from %sbooze | |
end | |
""" % ( | |
self.table_prefix, | |
self.table_prefix, | |
) | |
cur.execute(sql) | |
def help_nextset_tearDown(self, cur): | |
"If cleaning up is needed after nextSetTest" | |
try: | |
cur.execute("drop procedure deleteme") | |
except: | |
pass | |
def test_nextset(self): | |
con = self._connect() | |
try: | |
cur = con.cursor() | |
stmts = [self.ddl1] + self._populate() | |
for sql in stmts: | |
cur.execute(sql) | |
self.help_nextset_setUp(cur) | |
cur.callproc("deleteme") | |
numberofrows = cur.fetchone() | |
assert numberofrows[0] == 6 | |
assert cur.nextset() | |
names = cur.fetchall() | |
assert len(names) == len(self.samples) | |
s = cur.nextset() | |
assert s == None, "No more return sets, should return None" | |
finally: | |
try: | |
self.help_nextset_tearDown(cur) | |
finally: | |
con.close() | |
def test_setoutputsize(self): | |
pass | |
if __name__ == "__main__": | |
unittest.main() | |
cleanup(testfolder, None) | |