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 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)
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
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
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
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() 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
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
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
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
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
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
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): 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
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
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
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() 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
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
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
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
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
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
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