# Path: hecatoncheir/DbDriverBase.py
# class DbDriverBase:
#     __metaclass__ = ABCMeta
# 
#     @abstractmethod
#     def __init__(self, connstr, dbuser, dbpass):
#         raise NotImplementedError
# 
#     @abstractmethod
#     def connect(self):
#         raise NotImplementedError
# 
#     @abstractmethod
#     def query_to_resultset(self, label, query, max_rows=10000, timeout=None):
#         raise NotImplementedError
# 
#     def q2rs(self, query, max_rows=10000, timeout=None):
#         return self.query_to_resultset(query, max_rows, timeout)
# 
#     @abstractmethod
#     def disconnect(self):
#         raise NotImplementedError
# 
# Path: hecatoncheir/logger.py
# def to_unicode(s):
# def str2unicode(s):
# def setup():
# def ts():
# def trace(msg):
# def debug(msg):
# def info(msg):
# def info_cont(msg):
# def info_end(msg):
# def warning(msg):
# def error(msg, detail=None, query=None):
# def dump_datetime_default(o):
# def dump(msg, obj):
# 
# Path: hecatoncheir/QueryResult.py
# class QueryResult():
#     query = None
#     column_names = None
#     resultset = None
# 
#     def __init__(self, query):
#         self.query = query
#         self.column_names = []
#         self.resultset = []
# 
#     def __repr__(self):
#         return u'QueryResult:' + repr({'query': self.query,
#                                        'column': self.column_names,
#                                        'result': self.resultset})
# 
# Path: hecatoncheir/exception.py
# class DriverError(Exception):
#     source = None
# 
#     def __init__(self, value, source=None):
#         self.value = value
#         self.source = source
# 
#     def __str__(self):
#         return self.value
# 
# class InternalError(Exception):
#     source = None
#     query = None
# 
#     def __init__(self, value, query=None, source=None):
#         self.value = value
#         self.query = query
#         self.source = source
# 
#     def __str__(self):
#         return self.value
# 
# class QueryError(Exception):
#     source = None
#     query = None
# 
#     def __init__(self, value, query, source=None):
#         self.value = value
#         self.query = query
#         self.source = source
# 
#     def __str__(self):
#         return self.value
# 
# class QueryTimeout(Exception):
#     source = None
#     query = None
# 
#     def __init__(self, value, query, source=None):
#         self.value = value
#         self.query = query
#         self.source = source
# 
#     def __str__(self):
#         return self.value


from copy import deepcopy
from hecatoncheir import DbDriverBase, logger as log
from hecatoncheir.QueryResult import QueryResult
from hecatoncheir.exception import (DriverError, InternalError, QueryError,
                                    QueryTimeout)
import threading
            QueryResult: an object holding query, column names and result set.
        """
        assert query
        assert isinstance(query, unicode)
        log.trace('query_to_resultset: start query=%s' % query)

        res = QueryResult(query)
        monitor = None
        try:
            if self.conn is None:
                self.connect()

            if timeout and int(timeout) > 0:
                monitor = threading.Timer(timeout, self.cancel_callback)
                monitor.start()

            cur = self.conn.cursor()
            cur.execute(res.query)

            desc = []
            if cur.description:
                for d in cur.description:
                    desc.append(d[0])
                res.column_names = deepcopy(tuple(desc))

                for i, r in enumerate(cur.fetchall()):
                    # let's consider the memory size.
                    if i > max_rows:
                        msg = (u'Exceeded the record limit (%d) '
                               'for QueryResult.' % max_rows)

# Path: hecatoncheir/DbDriverBase.py
# class DbDriverBase:
#     __metaclass__ = ABCMeta
# 
#     @abstractmethod
#     def __init__(self, connstr, dbuser, dbpass):
#         raise NotImplementedError
# 
#     @abstractmethod
#     def connect(self):
#         raise NotImplementedError
# 
#     @abstractmethod
#     def query_to_resultset(self, label, query, max_rows=10000, timeout=None):
#         raise NotImplementedError
# 
#     def q2rs(self, query, max_rows=10000, timeout=None):
#         return self.query_to_resultset(query, max_rows, timeout)
# 
#     @abstractmethod
#     def disconnect(self):
#         raise NotImplementedError
# 
# Path: hecatoncheir/logger.py
# def to_unicode(s):
# def str2unicode(s):
# def setup():
# def ts():
# def trace(msg):
# def debug(msg):
# def info(msg):
# def info_cont(msg):
# def info_end(msg):
# def warning(msg):
# def error(msg, detail=None, query=None):
# def dump_datetime_default(o):
# def dump(msg, obj):
# 
# Path: hecatoncheir/QueryResult.py
# class QueryResult():
#     query = None
#     column_names = None
#     resultset = None
# 
#     def __init__(self, query):
#         self.query = query
#         self.column_names = []
#         self.resultset = []
# 
#     def __repr__(self):
#         return u'QueryResult:' + repr({'query': self.query,
#                                        'column': self.column_names,
#                                        'result': self.resultset})
# 
# Path: hecatoncheir/exception.py
# class DriverError(Exception):
#     source = None
# 
#     def __init__(self, value, source=None):
#         self.value = value
#         self.source = source
# 
#     def __str__(self):
#         return self.value
# 
# class InternalError(Exception):
#     source = None
#     query = None
# 
#     def __init__(self, value, query=None, source=None):
#         self.value = value
#         self.query = query
#         self.source = source
# 
#     def __str__(self):
#         return self.value
# 
# class QueryError(Exception):
#     source = None
#     query = None
# 
#     def __init__(self, value, query, source=None):
#         self.value = value
#         self.query = query
#         self.source = source
# 
#     def __str__(self):
#         return self.value
# 
# class QueryTimeout(Exception):
#     source = None
#     query = None
# 
#     def __init__(self, value, query, source=None):
#         self.value = value
#         self.query = query
#         self.source = source
# 
#     def __str__(self):
#         return self.value


# Path: hecatoncheir/oracle/OraDriver.py
from copy import deepcopy
from hecatoncheir import DbDriverBase, logger as log
from hecatoncheir.QueryResult import QueryResult
from hecatoncheir.exception import (DriverError, InternalError, QueryError,
                                    QueryTimeout)
import threading

            QueryResult: an object holding query, column names and result set.
        """
        assert query
        assert isinstance(query, unicode)
        log.trace('query_to_resultset: start query=%s' % query)

        res = QueryResult(query)
        monitor = None
        try:
            if self.conn is None:
                self.connect()

            if timeout and int(timeout) > 0:
                monitor = threading.Timer(timeout, self.cancel_callback)
                monitor.start()

            cur = self.conn.cursor()
            cur.execute(res.query)

            desc = []
            if cur.description:
                for d in cur.description:
                    desc.append(d[0])
                res.column_names = deepcopy(tuple(desc))

                for i, r in enumerate(cur.fetchall()):
                    # let's consider the memory size.
                    if i > max_rows:
                        msg = (u'Exceeded the record limit (%d) '
                               'for QueryResult.' % max_rows)

                        raise InternalError(msg, query=query)