Exemple #1
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
Exemple #2
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
Exemple #3
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
Exemple #4
0
    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
Exemple #5
0
    def getC3D(self, lista_optimizaciones_C3D):

        etiqueta = GeneradorTemporales.nuevo_temporal()
        instruccion_quemada = 'Alter index '
        instruccion_quemada += '%s ' % self.id
        instruccion_quemada += ';'
        c3d = '''
    # ---------Alter 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
Exemple #6
0
    def getC3D(self, lista_optimizaciones_C3D):
        etiqueta_if = GeneradorEtiquetas.nueva_etiqueta()
        etiqueta_else = GeneradorEtiquetas.nueva_etiqueta()
        etiqueta_salida = GeneradorEtiquetas.nueva_etiqueta()
        e_if = self.e_if.getC3D(lista_optimizaciones_C3D)
        noOptimizado = '''if %s: goto .%s <br>
goto .%s<br>
label .%s<br>
&lt;instrucciones&gt;<br>
label .%s''' % (e_if['tmp'], etiqueta_if, etiqueta_else, etiqueta_if, etiqueta_else)
        optimizado = '''if not %s: goto .%s <br>
&lt;instrucciones&gt;<br>
label .%s''' % (e_if['tmp'], etiqueta_else, etiqueta_else)
        optimizacion1 = Reportes.ListaOptimizacion(noOptimizado, optimizado, Reportes.TipoOptimizacion.REGLA3)
        lista_optimizaciones_C3D.append(optimizacion1)

        sentencias_if = ''
        for sentencias in self.s_if:
            sentencias_if += sentencias.getC3D(lista_optimizaciones_C3D)
        c3d = '''
%s
    if not %s: goto .%s
%s
    goto .%s
''' % (e_if['code'], e_if['tmp'], etiqueta_else, sentencias_if, etiqueta_salida)

        if self.s_else is not None:
            sentencias_else = ''
            for sentencias in self.s_else:
                sentencias_else += sentencias.getC3D(lista_optimizaciones_C3D)
            c3d += '''    label .%s
%s
    label .%s''' % (etiqueta_else, sentencias_else, etiqueta_salida)
        else:
            c3d += '''    label .%s
    label .%s
''' % (etiqueta_else, etiqueta_salida)
        return c3d
Exemple #7
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