示例#1
0
    def getC3D(self, lista_optimizaciones_C3D):

        etiqueta = GeneradorTemporales.nuevo_temporal()
        temporal2 = GeneradorTemporales.nuevo_temporal()
        instruccion_quemada = 'drop procedure '
        instruccion_quemada += '%s ' % self.id
        instruccion_quemada += '();'
        c3d = '''
    # ---------Drop Procedure-----------
    top_stack = top_stack + 1
    %s = "%s"
    stack[top_stack] = %s
    try:
        del %s
    except:
        %s = "No existe para eliminar el stored procedure %s"
        salida = salida + %s
        salida = salida + '\\n'
    ''' % (etiqueta, instruccion_quemada, etiqueta, self.id, temporal2,
           self.id, temporal2)

        optimizacion1 = Reportes.ListaOptimizacion(
            "c3d original", "c3d que entra", Reportes.TipoOptimizacion.REGLA1)
        lista_optimizaciones_C3D.append(optimizacion1)

        return c3d
示例#2
0
 def f_generar3D(self, texto):
     self.T.delete(1.0, tk.END)
     salida = parser.crear_Codido3D(texto)
     c3d_generador.GeneradorFileC3D().escribir_archivo(salida)
     GeneradorEtiquetas.resetar_numero_etiqueta()
     GeneradorTemporales.resetar_numero_temporal()
     self.T.insert(tk.END, "\n" + salida)
示例#3
0
    def getC3D(self, lista_optimizaciones_C3D):
        GeneradorFileC3D.agregar_a_global_funciones_extra(self.id)
        temporal1 = GeneradorTemporales.nuevo_temporal()
        parametros_para_funcion = ''
        parametros_para_quemados = ''
        if self.parametros is not None:
            for param in self.parametros:
                parametro_id_tipo = param.getC3D(lista_optimizaciones_C3D)
                id_parametro = param.id
                if parametros_para_quemados == '':
                    parametros_para_quemados = parametro_id_tipo
                    parametros_para_funcion = id_parametro
                else:
                    parametros_para_quemados += ', %s' % parametro_id_tipo
                    parametros_para_funcion += ', %s' % id_parametro

        sentencias_funcion = ''
        for sentencia in self.sentencias:
            if isinstance(sentencia, InsertInto):
                sentencias_funcion += '''%s    funcion_intermedia()\n''' % sentencia.getC3D(
                    lista_optimizaciones_C3D)
            else:
                sentencias_funcion += sentencia.getC3D(
                    lista_optimizaciones_C3D)
        c3d_funcion = '''
def %s ( %s ):
    global stack
    global top_stack 
%s
''' % (self.id, parametros_para_funcion, sentencias_funcion)

        c3d = '''
    # ---------CREATE PROCEDURE----------
    top_stack = top_stack + 1
    %s = 'create procedure %s ( %s ) language plpgsql as $$\\n'
''' % (temporal1, self.id, parametros_para_quemados)

        if self.declare is not None:
            temporal2 = GeneradorTemporales.nuevo_temporal()
            declare_quemado = ''
            for declare in self.declare:
                if declare_quemado == '':
                    declare_quemado = 'declare %s' % declare.getC3D(
                        lista_optimizaciones_C3D)
                else:
                    declare_quemado += ' %s' % declare.getC3D(
                        lista_optimizaciones_C3D)
            c3d += '''    %s = '%s\\n'
    %s = %s + %s
    %s = %s
''' % (temporal2, declare_quemado, temporal2, temporal1, temporal2, temporal1,
            temporal2)
        temporal3 = GeneradorTemporales.nuevo_temporal()
        c3d += '''    %s = "BEGIN return 'quemado'; end; $$\\n"
    %s = %s + %s
    stack[top_stack] = %s
''' % (temporal3, temporal3, temporal1, temporal3, temporal3)

        GeneradorFileC3D.funciones_extra += c3d_funcion
        return c3d
示例#4
0
 def getC3D(self, lista_Optim):
     etiqueta = GeneradorTemporales.nuevo_temporal()
     code = '\n     # ---------UPDATE----------- \n'
     code += '    top_stack = top_stack + 1 \n'
     code += '    %s = ' % etiqueta
     code += '\"update ' + self.id + ' set \" \n'
     asigs = ''
     tmps = []
     for asig in self.asignaciones[:-1]:
         etq = GeneradorTemporales.nuevo_temporal()
         asigs += '    %s = ' % etq
         tmp = '%s' % etq
         tmps.append(tmp)
         asigs += '\"' + str(asig.iz.id) + ' '
         asigs += str(asig.operador) + ' '
         if isinstance(asig.dr.valor, str):
             asigs += '\'' + str(asig.dr.valor) + '\''
         else:
             asigs += str(asig.dr.valor)
         asigs += ', \" \n'
     # ultimo elemento
     etq = GeneradorTemporales.nuevo_temporal()
     asigs += '    %s = ' % etq
     tmp = '%s' % etq
     tmps.append(tmp)
     asigs += '\"' + str(self.asignaciones[-1].iz.id) + ' '
     asigs += str(self.asignaciones[-1].operador) + ' '
     if isinstance(self.asignaciones[-1].dr.valor, str):
         asigs += '\'' + str(self.asignaciones[-1].dr.valor) + '\''
     else:
         asigs += str(self.asignaciones[-1].dr.valor)
     asigs += '\" \n'
     code += asigs
     tempos = ''
     for tmp in tmps:
         tempos += '    %s = %s + ' % (etiqueta, etiqueta)
         tempos += str(tmp) + '\n'
     code += tempos
     if self.where is not None:
         etq = GeneradorTemporales.nuevo_temporal()
         code += '    %s = \" where ' % etq
         code += str(self.where.iz.id) + str(self.where.operador)
         if isinstance(self.where.dr.valor, str):
             code += '\'' + str(self.where.dr.valor) + '\'\" \n'
         else:
             code += str(self.where.dr.valor) + '\" \n'
         code += '    %s = %s + ' % (etiqueta, etiqueta)
         code += etq + '\n'
     code += '    %s = %s + \";\" \n' % (etiqueta, etiqueta)
     code += '    stack[top_stack] = %s \n' % etiqueta
     return code
示例#5
0
文件: insert.py 项目: Sohanyuuu/tytus
 def getC3D(self, lista_Optim):
     etiqueta = GeneradorTemporales.nuevo_temporal()
     code = '\n     # ---------INSERT INTO----------- \n'
     code += '    top_stack = top_stack + 1 \n'
     code += '    %s = ' % etiqueta
     code += '\"insert into ' + self.id
     ides = ''
     if self.listaId is not None:
         code += '('
         for ide in self.listaId:
             ides += ide.id + ','
         ids = list(ides)
         size = len(ids) - 1
         del (ids[size])
         s = "".join(ids)
         code += s + ') values('
     else:
         code += ' values ('
     values = ''
     for val in self.values:
         if isinstance(val.valor, str):
             values += '\''+ str(val.valor) + '\','
         else:
             values += str(val.valor) + ','
     vals = list(values)
     size = len(vals) - 1
     del (vals[size])
     v = "".join(vals)
     code += v
     code += ')'
     code += ';\" \n'
     code += '    stack[top_stack] = %s \n' % etiqueta
     code += '    funcion_intermedia() \n'
     return code
示例#6
0
    def getC3D(self, lista_optimizaciones_C3D):
        temporal = GeneradorTemporales.nuevo_temporal()
        parametros = ''
        if self.parametros is not None:
            for parametro in self.parametros:
                if isinstance(parametro, Primitivo):
                    if isinstance(parametro.valor, str):
                        parametro_texto = "'%s'" % parametro.valor
                    else:
                        parametro_texto = parametro.valor
                elif isinstance(parametro, Time):
                    parametro_texto = parametro.resolverTime()
                else:
                    parametro_texto = parametro
                if parametros == '':
                    parametros = parametro_texto
                else:
                    parametros += ', %s' % parametro_texto
        c3d = '''
    # --------- Execute -----------
    funcion_intermedia()
    try:
        %s(%s)
    except:
        %s = "El stored procedure %s, no existe"
        salida = salida + %s
        salida = salida + '\\n'
    ''' % (self.id, parametros, temporal, self.id, temporal)

        '''optimizacion1 = Reportes.ListaOptimizacion("c3d original", "c3d que entra", Reportes.TipoOptimizacion.REGLA1)
        lista_optimizaciones_C3D.append(optimizacion1)'''

        return c3d
示例#7
0
 def getC3D(self, lista_optimizaciones_C3D):
     etiqueta = GeneradorTemporales.nuevo_temporal()
     code3D = '    # ---------USE DB-------- \n'
     code3D += '    top_stack = top_stack + 1 \n'
     code3D += '    %s = ' % etiqueta
     code3D += '\"use ' + self.id + ';\" \n'
     code3D += '    stack[top_stack] = %s \n' % etiqueta
     return code3D
示例#8
0
 def getC3D(self, lista_Optim):
     etiqueta = GeneradorTemporales.nuevo_temporal()
     code = '\n     # ---------INSERT INTO----------- \n'
     code += '    top_stack = top_stack + 1 \n'
     code += '    %s = ' % etiqueta
     code += '\"insert into ' + self.id
     ides = ''
     if self.listaId is not None:
         code += '('
         for ide in self.listaId:
             ides += ide.id + ','
         ids = list(ides)
         size = len(ids) - 1
         del (ids[size])
         s = "".join(ids)
         code += s + ') values('
     else:
         code += ' values ('
     values = ''
     for val in self.values:
         if isinstance(val, Math_):
             if val.E1 == None and val.E2 == None:
                 values += '%s,' % val.nombre
             else:
                 if val.E2 == None:
                     val1 = ''
                     if isinstance(val.E1.valor, str):
                         val1 = "'%s'" % str(val.E1.valor)
                     else:
                         val1 = str(val.E1.valor)
                     values += '%s ( %s ),' % (val.nombre, val1)
                 else:
                     val1 = ''
                     if isinstance(val.E1.valor, str):
                         val1 = "'%s'" % str(val.E1.valor)
                     else:
                         val1 = str(val.E1.valor)
                     val2 = ''
                     if isinstance(val.E2.valor, str):
                         val2 = "'%s'" % str(val.E2.valor)
                     else:
                         val2 = str(val.E2.valor)
                     values += '%s ( %s , %s ),' % (val.nombre, val1, val2)
         elif isinstance(val, Time):
             values += '%s,' % val.getC3D()
         elif isinstance(val.valor, str):
             values += '\'' + str(val.valor) + '\','
         else:
             values += str(val.valor) + ','
     vals = list(values)
     size = len(vals) - 1
     del (vals[size])
     v = "".join(vals)
     code += v
     code += ')'
     code += ';\" \n'
     code += '    stack[top_stack] = %s \n' % etiqueta
     return code
示例#9
0
    def getC3D(self, lista_optimizaciones_C3D):
        temporal = GeneradorTemporales.nuevo_temporal()
        c3d = '''
    # ----------DROP FUNCTION-----------
    top_stack = top_stack + 1
    %s = "drop function %s ;"  
    stack[top_stack] = %s
''' % (temporal, self.id, temporal)
        return c3d
示例#10
0
 def getC3D(self,ts, lista_op):
     etiqueta = GeneradorTemporales.nuevo_temporal()
     code = '\n     # ---------SELECT----------- \n'
     code += '    top_stack = top_stack + 1 \n'
     code += '    %s = \"select ' % etiqueta
     code += self.time.getC3D()
     code += ';\" \n'
     code += '    stack[top_stack] = %s \n' % etiqueta
     return code
示例#11
0
    def getC3D(self, lista_optimizaciones_C3D):
        temporal = GeneradorTemporales.nuevo_temporal()
        c3d = '''
    # ----------SHOW DATABASES-----------
    top_stack = top_stack + 1
    %s = "show databases;"
    stack[top_stack] = %s
''' % (temporal, temporal)
        return c3d
示例#12
0
    def getC3D(self, lista_optimizaciones_C3D):
        codigo_quemado1 = "create table %s ( \\n" % self.id
        temporal1 = GeneradorTemporales.nuevo_temporal()
        c3d = '''
    # -----------CREATE TABLE------------
    top_stack = top_stack + 1 
    %s = "%s"
''' % (temporal1, codigo_quemado1)

        codigo_quemado2 = []
        for campo in self.campos:
            codigo_quemado2.append(campo.getC3D(lista_optimizaciones_C3D))
        temporal2 = GeneradorTemporales.nuevo_temporal()
        temporal2Anterior = None
        for i, codigo_quemado in enumerate(codigo_quemado2):
            if (i + 1) == len(codigo_quemado2):  #Es el ultimo elemento
                c3d += '    %s = "%s\\n"\n' % (temporal2, codigo_quemado)
                if temporal2Anterior is not None:
                    c3d += '    %s = %s + %s\n' % (
                        temporal2, temporal2Anterior, temporal2)
            else:
                c3d += '    %s = "%s,\\n"\n' % (temporal2, codigo_quemado)
                if temporal2Anterior is not None:
                    c3d += '    %s = %s + %s\n' % (
                        temporal2, temporal2Anterior, temporal2)
                temporal2Anterior = temporal2
                temporal2 = GeneradorTemporales.nuevo_temporal()
        c3d += '    %s = %s + %s\n' % (temporal2, temporal1, temporal2)
        codigo_quemado3 = ''
        temporal3 = GeneradorTemporales.nuevo_temporal()
        if self.idInherits is not None:
            codigo_quemado3 = ') inherits ( %s ) ;' % self.idInherits
        else:
            codigo_quemado3 = ') ;'
        c3d += '''    %s = "%s"
    %s = %s + %s 
    stack[top_stack] = %s 
    funcion_intermedia() 
''' % (temporal3, codigo_quemado3, temporal3, temporal2, temporal3, temporal3)
        return c3d
示例#13
0
    def getC3D(self, lista_optimizaciones_C3D):

        etiqueta = GeneradorTemporales.nuevo_temporal()
        instruccion_quemada = 'create '
        if self.caso == 2:
            instruccion_quemada += 'or replace '
        instruccion_quemada += 'database '
        if self.exists:
            instruccion_quemada += 'if not exists '
        instruccion_quemada += '%s ' % self.id
        if self.complemento is not None:
            instruccion_quemada += self.complemento.getC3D()
        instruccion_quemada += ';'
        c3d = '''
    # ---------CREATE DATABASE-----------
    top_stack = top_stack + 1
    %s = "%s"
    stack[top_stack] = %s
    funcion_intermedia()
 
''' % (etiqueta, instruccion_quemada, etiqueta)

        GeneradorTemporales.resetar_numero_temporal()

        optimizacion1 = Reportes.ListaOptimizacion(
            "algo", "prueba1", Reportes.TipoOptimizacion.REGLA1)
        lista_optimizaciones_C3D.append(optimizacion1)

        optimizacion2 = Reportes.ListaOptimizacion(
            "otro", "prueba2", Reportes.TipoOptimizacion.REGLA6)
        lista_optimizaciones_C3D.append(optimizacion1)

        optimizacion3 = Reportes.ListaOptimizacion(
            "uno mas", "prueba3", Reportes.TipoOptimizacion.REGLA18)
        lista_optimizaciones_C3D.append(optimizacion1)

        return c3d
示例#14
0
    def getC3D(self, lista_optimizaciones_C3D):
        temporal1 = GeneradorTemporales.nuevo_temporal()
        codigo_quemado1 = 'alter table %s ' % self.id
        c3d = '''
    # ------------ALTER TABLE------------
    top_stack = top_stack + 1
    %s = "%s \\n"
''' % (temporal1, codigo_quemado1)
        temporal2 = GeneradorTemporales.nuevo_temporal()
        temporal2_anterior = temporal1
        for i, elemento_lista in enumerate(self.alter):
            c3d += '    %s = "%s \\n"\n' % (
                temporal2, elemento_lista.getC3D(lista_optimizaciones_C3D))
            c3d += '    %s = %s + %s\n' % (temporal2, temporal2_anterior,
                                           temporal2)
            if (i + 1) != len(self.alter):
                temporal2_anterior = temporal2
                temporal2 = GeneradorTemporales.nuevo_temporal()
        temporal3 = GeneradorTemporales.nuevo_temporal()
        c3d += '''    %s = ";"
    %s = %s + %s 
    stack[top_stack] = %s 
''' % (temporal3, temporal3, temporal2, temporal3, temporal3)
        return c3d
示例#15
0
    def getC3D(self, lista_optimizaciones_C3D):

        etiqueta = GeneradorTemporales.nuevo_temporal()
        instruccion_quemada = 'drop index '
        instruccion_quemada += '%s ' % self.id
        instruccion_quemada += ';'
        c3d = '''
    # ---------Drop Index-----------
    top_stack = top_stack + 1
    %s = "%s"
    stack[top_stack] = %s

    ''' % (etiqueta, instruccion_quemada, etiqueta)

        '''optimizacion1 = Reportes.ListaOptimizacion("c3d original", "c3d que entra", Reportes.TipoOptimizacion.REGLA1)
        lista_optimizaciones_C3D.append(optimizacion1)'''

        return c3d
示例#16
0
    def getC3D(self, lista_optimizaciones_C3D):
        temporal = GeneradorTemporales.nuevo_temporal()
        codigo_quemado = ''
        if self.caso == 2:  #Drop table
            codigo_quemado = 'drop table '
        else:  #Drop database
            codigo_quemado = 'drop database '
            if self.exists:
                codigo_quemado += 'if exists '
        codigo_quemado += '%s ;' % self.id
        c3d = '''
    # ----------DROP %s-----------
    top_stack = top_stack + 1
    %s = "%s"
    stack[top_stack] = %s
''' % ('DATABASE' if self.caso == 2 else 'TABLE---', temporal, codigo_quemado,
        temporal)
        return c3d
示例#17
0
文件: Index.py 项目: Shock-Dart/tytus
    def getC3D(self, lista_optimizaciones_C3D):

            etiqueta = GeneradorTemporales.nuevo_temporal()
            instruccion_quemada = 'create'
            if self.caso == 1:
                instruccion_quemada += ' index %s ' % self.id + 'on %s ' % self.tabla
                instruccion_quemada += '( '
                for idcito in self.columnref:
                    instruccion_quemada += '%s ' % idcito.id + ','
                instruccion_quemada = instruccion_quemada[:-1]
                instruccion_quemada += ');'
            elif self.caso == 2:
                instruccion_quemada += ' index %s ' % self.id + 'on %s ' % self.tabla
                instruccion_quemada += ' using hash ( '
                for idcito in self.columnref:
                    instruccion_quemada += '%s ' % idcito.id + ','
                instruccion_quemada = instruccion_quemada[:-1]
                instruccion_quemada += ');'
            elif self.caso == 3:
                instruccion_quemada += ' unique index %s ' % self.id + 'on %s ' % self.tabla + '('
                for idcito in self.columnref:
                    instruccion_quemada += '%s ' % idcito.id + ','
                instruccion_quemada = instruccion_quemada[:-1]
                instruccion_quemada += ');'
            elif self.caso == 4:
                instruccion_quemada += ' index %s ' % self.id + 'on %s ' % self.tabla + '( %s ' % self.columnref + ' %s' % self.order +  ');'
            elif self.caso == 5 :
                instruccion_quemada += ' index %s ' % self.id + 'on %s ' % self.tabla + '( lower ( %s ' % self.columnref + ') );'

            c3d = '''
    # --------- INDEX -----------
    top_stack = top_stack + 1
    %s = "%s"
    stack[top_stack] = %s
    funcion_intermedia() 

    ''' % (etiqueta, instruccion_quemada, etiqueta)

            optimizacion1 = Reportes.ListaOptimizacion("c3d original", "c3d que entra",
                                                       Reportes.TipoOptimizacion.REGLA1)
            lista_optimizaciones_C3D.append(optimizacion1)

            return c3d
示例#18
0
    def getC3D(self, lista_optimizaciones_C3D):
        etiqueta = GeneradorTemporales.nuevo_temporal()
        listado = None
        for data in self.lista:
            id = Expresion.Resolver(data, None, None, None)
            if listado is None:
                listado = "'%s'" % id
            else:
                listado += ", '%s'" % id
        instruccion_quemada = 'CREATE TYPE %s AS ENUM (%s);' % (self.id,
                                                                listado)
        c3d = '''
    # ---------CREATE TYPE---------------
    top_stack = top_stack + 1
    %s = "%s"
    stack[top_stack] = %s

        ''' % (etiqueta, instruccion_quemada, etiqueta)

        return c3d
示例#19
0
 def getC3D(self, lista_Optim):
     etiqueta = GeneradorTemporales.nuevo_temporal()
     code = '\n     # ---------DELETE----------- \n'
     code += '    top_stack = top_stack + 1 \n'
     code += '    %s = ' % etiqueta
     code += '\"delete from ' + self.id + ' '
     cont = 0
     if self.where is not None:
         code += 'where '
         nodo = self.where
         while isinstance(nodo, Expresion):
             if isinstance(nodo.iz, Id):
                 code += nodo.iz.id + ' ' + nodo.operador + ' '
             if isinstance(nodo.dr, Primitivo):
                 code += str(nodo.dr.valor)
             cont = cont + 1
             nodo = nodo.dr
     code += ';\" \n'
     code += '    stack[top_stack] = %s \n' % etiqueta
     return code
示例#20
0
    def getC3D(self, lista_optimizaciones_C3D):
        temporal = GeneradorTemporales.nuevo_temporal()
        codigo_quemado = "alter database %s " % self.name
        if self.caso == 1:
            codigo_quemado += 'rename to %s ;' % self.newName
        else:
            codigo_quemado += 'owner to '
            nombre = ''
            if isinstance(self.newName, Primitivo):
                nombre = self.newName.valor
            else:
                nombre = Time.resolverTime(self.newName)
            codigo_quemado += '\'%s\' ;' % nombre

        c3d = '''
    # ----------ALTER DATABASE-----------
    top_stack = top_stack + 1
    %s = "%s"
    stack[top_stack] = %s
''' % (temporal, codigo_quemado, temporal)

        return c3d
示例#21
0
    def getC3D(self, lista_optimizaciones_C3D):

        etiqueta = GeneradorTemporales.nuevo_temporal()
        instruccion_quemada = 'create '
        if self.caso == 2:
            instruccion_quemada += 'or replace '
        instruccion_quemada += 'database '
        if self.exists:
            instruccion_quemada += 'if not exists '
        instruccion_quemada += '%s ' % self.id
        if self.complemento is not None:
            instruccion_quemada += self.complemento.getC3D()
        instruccion_quemada += ';'
        c3d = '''
    # ---------CREATE DATABASE-----------
    top_stack = top_stack + 1
    %s = "%s"
    stack[top_stack] = %s
 
''' % (etiqueta, instruccion_quemada, etiqueta)

        return c3d
示例#22
0
 def get3D(self, Select, ts, lista_optimizaciones_C3D):
     etiqueta = GeneradorTemporales.nuevo_temporal()
     code3d = '\n     # ---------SELECT----------- \n'
     code3d += '    top_stack = top_stack + 1 \n'
     code3d += '    %s = \"select ' % etiqueta
     bdactual = ts.buscar_sim("usedatabase1234")
     if bdactual is not None:
         BD = ts.buscar_sim(bdactual.valor)
         entornoBD = BD.Entorno
         listaTablas = entornoBD.simbolos
     if Select.columnas == '*':
         code3d += '* from '
     else:
         columnitas = ''
         for col in Select.columnas:
             if isinstance(col, IdAsId):
                 columnitas += col.id1.id + ' as ' + col.id2.id + ','
             elif isinstance(col, IdId):
                 columnitas += col.id1.id + '.' + col.id2.id + ','
             else:
                 columnitas += str(col.id) + ','
         columnitas2 = list(columnitas)
         size = len(columnitas2) - 1
         del (columnitas2[size])
         s = "".join(columnitas2)
         code3d += s + ' from '
     tablas = ''
     for tables in Select.inner:
         tablas += str(tables.id) + ','
     tablitas = list(tablas)
     siz = len(tablitas) - 1
     del (tablitas[siz])
     t = "".join(tablitas)
     code3d += t
     code3d += ';\" \n'
     code3d += '    stack[top_stack] = %s \n' % etiqueta
     return code3d
示例#23
0
 def getC3D(self, listop):
     codigo = {}
     etq = GeneradorTemporales.nuevo_temporal()
     code = '    %s = ' % etq
     nodo = self
     while isinstance(nodo, Expresion):
         if isinstance(nodo.iz, Id):
             code += nodo.iz.id + ' '
             if nodo.operador == '+':
                 if isinstance(nodo.dr, Primitivo):
                     if nodo.dr.valor == 0:
                         optimizacion1 = Reportes.ListaOptimizacion(nodo.iz.id + nodo.operador + '0', "Se elimino la instrucción",
                                 Reportes.TipoOptimizacion.REGLA8)
                         listop.append(optimizacion1)
                         break
             elif nodo.operador == '-':
                 if isinstance(nodo.dr, Primitivo):
                     if nodo.dr.valor == 0:
                         optimizacion1 = Reportes.ListaOptimizacion(nodo.iz.id + nodo.operador + '0', "Se elimino la instrucción",
                                 Reportes.TipoOptimizacion.REGLA9)
                         listop.append(optimizacion1)
                         break
             elif nodo.operador == '/':
                 if isinstance(nodo.dr, Primitivo):
                     if nodo.dr.valor == 1:
                         optimizacion1 = Reportes.ListaOptimizacion(nodo.iz.id + nodo.operador + '1', "Se elimino la instrucción",
                                 Reportes.TipoOptimizacion.REGLA10)
                         listop.append(optimizacion1)
                         break
             elif nodo.operador == '-':
                 if isinstance(nodo.dr, Primitivo):
                     if nodo.dr.valor == 1:
                         optimizacion1 = Reportes.ListaOptimizacion(nodo.iz.id + nodo.operador + '1', "Se elimino la instrucción",
                                 Reportes.TipoOptimizacion.REGLA11)
                         listop.append(optimizacion1)
                         break
             else:
                 code += nodo.operador + ''
         elif isinstance(nodo.iz, Primitivo):
             if isinstance(nodo.iz.valor, str):
                 code += '\''+nodo.dr.valor + '\' '
             else:
                 code += str(nodo.iz.valor)
             code += nodo.operador + ' '
         elif isinstance(nodo.iz, Expresion):
             dicto = nodo.iz.getC3D(listop)
             code = '\n'+dicto["code"] + '\n'
         if isinstance(nodo.dr, Primitivo):
             if isinstance(nodo.dr.valor, str):
                 code += '\''+nodo.dr.valor + '\''
             else:
                 code += str(nodo.dr.valor)
         elif isinstance(nodo.dr, Time):
             code += nodo.dr.getC3D()
         elif isinstance(nodo.dr, Trigonometrica.Trigonometrica):
             code += nodo.dr.getC3D()
         elif isinstance(nodo.dr, Math.Math_):
             code += nodo.dr.getC3D()
         elif isinstance(nodo.dr, Expresion):
             dicto = nodo.dr.getC3D(listop)
             code += '\n'+dicto["code"] + '\n'
         nodo = nodo.dr
     code += ''
     codigo = {
         "code": code,
         "tmp": etq
     }
     return codigo
示例#24
0
    def getC3D(self, lista_optimizaciones_C3D):
        GeneradorFileC3D.agregar_a_global_funciones_extra(self.id)
        temporal1 = GeneradorTemporales.nuevo_temporal()
        parametros_para_funcion = ''
        parametros_para_quemados = ''
        if self.parametros is not None:
            for param in self.parametros:
                parametro_id_tipo = param.getC3D(lista_optimizaciones_C3D)
                id_parametro = param.id
                if parametros_para_quemados == '':
                    parametros_para_quemados = parametro_id_tipo
                    parametros_para_funcion = id_parametro
                else:
                    parametros_para_quemados += ', %s' % parametro_id_tipo
                    parametros_para_funcion += ', %s' % id_parametro
        returns = ''
        lista_tipo = self.returns.split('-')
        if len(lista_tipo) == 1:
            returns = self.returns
        elif len(lista_tipo) == 2:
            if lista_tipo[0] == 'CHARACTERVARYING':
                returns = 'CHARACTER VARYING ( %s )' % lista_tipo[1]
            else:
                returns = '%s ( %s )' % (lista_tipo[0], lista_tipo[1])
        else:
            returns = '%s ( %s, %s )' % (lista_tipo[0], lista_tipo[1],
                                         lista_tipo[2])

        c3d_funcion = '''
def %s ( %s ):
    pass
''' % (self.id, parametros_para_funcion)

        c3d = '''
    # ---------CREATE FUNCTION-----------
    top_stack = top_stack + 1
    %s = 'create function %s ( %s ) returns %s as $$\\n'
''' % (temporal1, self.id, parametros_para_quemados, returns)

        if self.declare is not None:
            temporal2 = GeneradorTemporales.nuevo_temporal()
            declare_quemado = ''
            for declare in self.declare:
                if declare_quemado == '':
                    declare_quemado = 'declare %s' % declare.getC3D(
                        lista_optimizaciones_C3D)
                else:
                    declare_quemado += ' %s' % declare.getC3D(
                        lista_optimizaciones_C3D)
            c3d += '''    %s = '%s\\n'
    %s = %s + %s
    %s = %s
''' % (temporal2, declare_quemado, temporal2, temporal1, temporal2, temporal1,
            temporal2)
        temporal3 = GeneradorTemporales.nuevo_temporal()
        sentencias_quemados = ''
        for sentencia in self.begin:
            sentencias_quemados += sentencia.get_quemado() + ';\n'
        c3d += '''    %s = \'\'\'BEGIN 
%s 
end; 
$$ language plpgsql;\\n\'\'\'
    %s = %s + %s
    stack[top_stack] = %s
''' % (temporal3, sentencias_quemados, temporal3, temporal1, temporal3,
        temporal3)

        GeneradorFileC3D.funciones_extra += c3d_funcion
        return c3d