def Create(self, db, modulename, dbname, tablename, *args): envars = { 'tablename': tablename, 'db': db, 'dbname': dbname, 'modulename': modulename } uargs = [argsparse.unquote(a) for a in args] if len(uargs) > 0 and uargs[-1] == autostring: auto = True uargs = uargs[:-1] TableVT = self.fobj() parsedArgs = list(TableVT.parse(*uargs)) iterFunc = lambda: TableVT.VTiter(*parsedArgs, **envars) openedIter = iterFunc() try: schema = openedIter.next() except (StopIteration, apsw.ExecutionCompleteError), e: try: if hasattr(openedIter, 'close'): openedIter.close() openedIter = None except: pass raise functions.DynamicSchemaWithEmptyResultError( envars['modulename'])
def getnewcursor(self): if self.keepcursor: self.keepcursor = False return self.q try: return self.envarsdb.cursor().execute(self.query) except apsw.ExecutionCompleteError: raise functions.DynamicSchemaWithEmptyResultError(__name__.rsplit('.')[-1])
class LTable: ####Init means setschema and execstatus autostring = 'automatic_vtable' @echocall def __init__(self, tblist, boolargs, nonstringargs, needsescape, *args, **envars): # envars tablename, auto , OPTIONAL [] self.delayedexception = None self.tblist = tblist self.auto = False self.first = True self.schema = "create table %s('Error')" % (envars['tablename']) self.tablename = envars['tablename'] self.description = None self.consdict = {} self.coldata = [] self.rowids = [] self.kdindex = None self.lastcalculatedidx = None self.ordered = False largs, kargs = [], dict() try: largs, kargs = argsparse.parse(args, boolargs, nonstringargs, needsescape) except Exception, e: raise functions.MadisError(e) try: q = envars['db'].cursor().execute(kargs['query']) self.description = q.getdescription() except apsw.ExecutionCompleteError: raise functions.DynamicSchemaWithEmptyResultError( __name__.rsplit('.')[-1]) self._setschema() self.data = [] ro = [] dedupl = {} for r in q: ro = [] for i in r: if i not in dedupl: dedupl[i] = i ro.append(i) else: ro.append(dedupl[i]) self.data.append(tuple(ro)) del (dedupl)
class LTable: ####Init means setschema and execstatus autostring = 'automatic_vtable' @echocall def __init__(self, tblist, boolargs, nonstringargs, needsescape, *args, **envars): # envars tablename, auto , OPTIONAL [] self.delayedexception = None self.tblist = tblist self.auto = False self.first = True self.schema = "create table %s('Error')" % (envars['tablename']) self.tablename = envars['tablename'] self.description = None self.consdict = {} self.coldata = [] self.rowids = [] self.kdindex = None self.lastcalculatedidx = None self.ordered = False self.envarsdb = envars['db'] self.innerjoin = True self.query = None self.keepcursor = True largs, kargs = [], dict() try: largs, kargs = argsparse.parse(args, boolargs, nonstringargs, needsescape) except Exception, e: raise functions.MadisError(e) if 'fullouterjoin' in kargs: if str(kargs['fullouterjoin']).lower() == 't' or str( kargs['fullouterjoin']).lower() == 'true': self.innerjoin = False try: self.query = kargs['query'] self.q = envars['db'].cursor().execute(kargs['query']) self.description = self.q.getdescription() except apsw.ExecutionCompleteError: raise functions.DynamicSchemaWithEmptyResultError( __name__.rsplit('.')[-1]) self._setschema() self.cache = Cache(self.q, self.query)
def run(self): c = self.connection.cursor() try: cexec = c.execute(self.query, parse=False) try: schema = c.getdescriptionsafe() except functions.ExecutionCompleteError: raise functions.DynamicSchemaWithEmptyResultError( "got empty input") if self.passconnection: try: self.func(cexec, schema, self.connection, *self.args, **self.kargs) except apsw.AbortError: cexec = c.execute(self.query, parse=False) self.func(cexec, schema, self.connection, *self.args, **self.kargs) else: try: self.func(cexec, schema, *self.args, **self.kargs) except apsw.AbortError: cexec = c.execute(self.query, parse=False) self.func(cexec, schema, *self.args, **self.kargs) ret = True except Exception as e: if functions.settings['logging']: lg = logging.LoggerAdapter( logging.getLogger(__name__), {"flowname": functions.variables.flowname}) lg.exception(e) if self.returnalways: return False else: if functions.settings['tracing']: import traceback print("---Deep Execution traceback--") print(traceback.print_exc()) raise functions.MadisError(e) finally: try: c.close() except: pass return ret
class LTable: ####Init means setschema and execstatus autostring = 'automatic_vtable' @echocall def __init__(self, vtable, tblist, boolargs, nonstringargs, needsescape, notsplit, staticschema, *args, **envars): # envars tablename, auto , OPTIONAL [] self.delayedexception = None self.tblist = tblist self.auto = False self.first = True self.staticschema = staticschema self.schema = "create table %s('Error')" % (envars['tablename']) self.tablename = envars['tablename'] self.envars = envars largs, kargs = [], dict() try: largs, kargs = argsparse.parse(args, boolargs, nonstringargs, needsescape, notsplit) except Exception, e: raise # functions.MadisError(e) if self.autostring in kargs: del kargs[self.autostring] self.auto = True ####init schema and set try: self.vtable = vtable(envars, largs, kargs) if not self.staticschema: self.iter = self.vtable.open() self._setschema() if not self.auto and not self.staticschema: if functions.settings['vtdebug']: print "Manual vtable creation:Closing Vtable iterator" self.iter.close() except (StopIteration, apsw.ExecutionCompleteError), e: ### try: raise functions.DynamicSchemaWithEmptyResultError( self.envars['modulename']) finally: try: self.iter.close() except: pass
def Create(self, db, modulename, dbname, tablename, *args): envars = { 'tablename': tablename, 'db': db, 'dbname': dbname, 'modulename': modulename } uargs = [argsparse.unquote(a) for a in args] if len(uargs) > 0 and uargs[-1] == autostring: auto = True uargs = uargs[:-1] TableVT = self.fobj() parsedArgs = list(TableVT.parse(*uargs)) iterFunc = lambda: TableVT.VTiter(*parsedArgs, **envars) openedIter = iterFunc() try: schema = openedIter.next() except (StopIteration, apsw.ExecutionCompleteError) as e: try: if hasattr(openedIter, 'close'): openedIter.close() openedIter = None except: pass raise functions.DynamicSchemaWithEmptyResultError( envars['modulename']) except apsw.AbortError: openedIter.close() openedIter = iterFunc() schema = openedIter.next() self.tableObjs[tablename] = (schemaUtils.CreateStatement( schema, tablename), LTable(self.tableObjs, envars, TableVT, iterFunc, openedIter)) if functions.settings['tracing']: print('VT_Schema: %s' % (self.tableObjs[tablename][0])) return self.tableObjs[tablename]