# 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 sys
            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)
        try:
            if not self.conn:
                self.connect()

            query_job = self.conn.query(res.query)
            assert query_job
            res_iter = query_job.result(timeout=timeout)
            assert query_job.state == 'DONE'

            desc = []
            for f in query_job.query_results().schema:
                desc.append(f.name)
            res.column_names = deepcopy(tuple(desc))

            for row in res_iter:
                # let's consider the memory size.
                if len(res.resultset) > max_rows:
                    raise InternalError(
                        u'Exceeded the record limit (%d) for QueryResult.' %
                        max_rows, query=query)
                res.resultset.append(deepcopy(list(row)))
        except InternalError as ex:
            raise ex

# 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/bigquery/BigQueryDriver.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 sys

            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)
        try:
            if not self.conn:
                self.connect()

            query_job = self.conn.query(res.query)
            assert query_job
            res_iter = query_job.result(timeout=timeout)
            assert query_job.state == 'DONE'

            desc = []
            for f in query_job.query_results().schema:
                desc.append(f.name)
            res.column_names = deepcopy(tuple(desc))

            for row in res_iter:
                # let's consider the memory size.
                if len(res.resultset) > max_rows:
                    raise InternalError(
                        u'Exceeded the record limit (%d) for QueryResult.' %
                        max_rows, query=query)
                res.resultset.append(deepcopy(list(row)))
        except InternalError as ex:
            raise ex

        except DriverError as ex: