#! /usr/bin/env python
import sys
sys.path.append('/usr/src/sqlrelay/swig')
import PySQLRClient
from time import localtime, time, mktime
import string
import exceptions
apilevel = '2.0'
threadsafety = 0
paramstyle = 'pyformat'
class Error(exceptions.StandardError):
pass
class Warning(exceptions.StandardError):
pass
class InterfaceError(Error):
pass
class DatabaseError(Error):
pass
class InternalError(DatabaseError):
pass
class OperationalError(DatabaseError):
pass
class ProgrammingError(DatabaseError):
pass
class IntegrityError(DatabaseError):
pass
class DataError(DatabaseError):
pass
class NotSupportedError(DatabaseError):
pass
def connect(host, port, user, password):
"takes host, port, user, password"
return SQLR(host, port, user, password)
class SQLR:
def __init__(self, host, port, user, password):
self.host = host
self.port = port
self.user = user
self.password = password
self.cur_con = PySQLRClient.sqlrclient(host, port, user, password)
self.arraysize = 1
def close(self):
self.cur_con.sendEndOfSession()
del(self.cur_con)
def commit(self):
try:
self.cur_con.sendQuery('commit')
except AttributeError:
self.cur_con = PySQLRClient.sqlrclient(self.host, self.port, self.user, self.password)
self.commit()
def rollback(self):
pass
def cursor(self):
return SQLR_Cursor(self.cur_con, self.host, self.port, self.user, self.password)
class SQLR_Cursor:
def __init__(self, con, host, port, user, password):
self.cur_con = con
self.host = host
self.port = port
self.user = user
self.password = password
self.cur_row = 0
self.arraysize = 1
def execute(self, operation):
self.cur_row = 0
self.cur_operation = operation
#ssql = string.join(string.split(string.strip(operation)), ' ')
try:
self.cur_con.sendQuery(operation)
except AttributeError:
self.cur_con = PySQLRClient.sqlrclient(self.host, self.port, self.user, self.password)
self.cur_con.sendQuery(operation)
the_error = self.cur_con.errorMessage()
if the_error:
raise DatabaseError, '<pre>%s</pre>' % the_error
self.__set_description()
def fetchone(self):
rc = self.__get_row()
return rc
def fetchmany(self, size=None):
if not size:
size = self.arraysize
num_rows = self.cur_con.rowCount()
if size >= num_rows:
size = num_rows -1
rc = self.cur_con.getRowRange(self.cur_row, size)
self.cur_row = size
return rc
def fetchall(self):
rc = []
num_rows = self.cur_con.rowCount()
for row in range(self.cur_row, num_rows):
rc.append(self.__get_row())
return rc
def setinputsizes(self):
pass
def close(self):
pass
def __get_row(self):
row = self.cur_con.getRow(self.cur_row)
self.cur_row = self.cur_row + 1
return row
def __set_description(self):
desc = []
for field in range(self.cur_con.colCount()):
row = []
row.append(self.cur_con.getColumnName(field),)
row.append(self.cur_con.getColumnType(field),)
row.append(self.cur_con.getColumnLength(field))
desc.append(tuple(row))
self.description = tuple(desc)
return tuple(desc)
if __name__ == "__main__":
a = connect(host="somehost", port=8000, user="someuser", password="somepassword")
cursor = a.cursor()
for q in range(230):
cursor.execute(sys.argv[1])
print cursor.fetchmany(99999)
print cursor.description