Ejemplo n.º 1
0
    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'])
Ejemplo n.º 2
0
 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])
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
    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
Ejemplo n.º 6
0
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
Ejemplo n.º 7
0
    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]