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
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
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
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
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
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> <instrucciones><br> label .%s''' % (e_if['tmp'], etiqueta_if, etiqueta_else, etiqueta_if, etiqueta_else) optimizado = '''if not %s: goto .%s <br> <instrucciones><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
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