Example #1
0
 def virtualizar_tabla_subquery(self, index: indexador_auxiliar, entorno: Tabla_de_simbolos, arbol: Arbol):
     print("virtualiza subquery")
     tablaVirtualizada: Valor = index.origen.execute(entorno, arbol)
     nombreTabla = self.definidorDeNombre_deTabla_basadoEnIndexador(index)
     tablaVirtualizada.consola_imprimirMatriz_NERY()
     newSimbolo: Simbolo = Simbolo(nombreTabla, TIPO.MATRIZ, tablaVirtualizada)
     entorno.insertar_variable(newSimbolo)
Example #2
0
    def ruta_SelectComplejo(self, entorno: Tabla_de_simbolos, arbol: Arbol):
        print("[Select] ruta_SelectComplejo (Go on)")
        V_TablaSelect = Valor(TIPO.MATRIZ, "TablaSelect")
        for i in self.listatablas:
            self.virtualizar_tabla(i, entorno, arbol)

        # ------------------
        j = 0
        for i in self.listavalores:
            if self.obtener_multi(i, entorno, arbol, j):
                break
            j = j + 1
        # ------------------

        V_TablaSelect.inicializarMatrix_boring(self.tamFilaTablaSelect, len(self.listavalores))
        index = 0
        for i in self.listavalores:
            lista: list = self.obtener_columnas(i, entorno, arbol)
            for m in range(len(lista)):
                V_TablaSelect.matriz[m][index] = lista[m]
            index = index + 1
        self.TablaSelect = V_TablaSelect
        # ----------------------------------------------------------------------------------
        TablaSe:Simbolo = Simbolo("TablaResult", 0, self.TablaSelect)
        entorno.insertar_variable(TablaSe)
        for i in self.listawhere:
            i.execute(entorno, arbol)
Example #3
0
    def virtualizar_tabla(self, index:indexador_auxiliar, entorno: Tabla_de_simbolos, arbol:Arbol):
        # -----------------------------------------------
        # Codigo para acceder a estructuras de EDD (estan quemados por el momento)
        # basado en el index.origen
        body = j.extractTable(entorno.getBD(),index.origen)
        x = Meta.getNameColumns(body[0])
        body[0] = x
        # body = [['Cod', 'estado', 'ciudad', 'zona'], [1, 'Guatemala', 'Guatemala', 'GTM'], [2, 'Cuilapa', 'Santa Rosa', 'GTM'], [3, 'San Salvador', 'San Salvador', 'SLV']]
        tamFila = len(body)
        tamColumna = len(body[0])
        if tamFila > self.tamFilaTablaSelect:
            self.tamFilaTablaSelect = tamFila
        '''headers:list = ['C_1', 'C_2', 'C_3', 'C_4', 'C_5']
        body:list = [
            '1.1', '2.1', '3.1', '4.1', '5.1',
            '1.2', '2.2', '3.2', '4.2', '5.2',
            '1.3', '2.3', '3.3', '4.3', '5.3'
        ]'''
        # -----------------------------------------------

        nombreTabla = self. definidorDeNombre_deTabla_basadoEnIndexador(index)
        tablaVirtualizada:Valor = Valor(TIPO.MATRIZ, nombreTabla)
        tablaVirtualizada.inicializarMatrix_boring(tamFila, tamColumna)
        tablaVirtualizada.setearMatriz_byJespino(body)
        #tablaVirtualizada.establecer_encabezados(headers)
        #tablaVirtualizada.setear_body_byList_MATRIZ(body)
        # self.consolaInterna = tablaVirtualizada.consola_imprimirMatriz_NERY()
        tablaVirtualizada.consola_imprimirMatriz_NERY()
        newSimbolo:Simbolo = Simbolo(nombreTabla, TIPO.MATRIZ, tablaVirtualizada)
        entorno.insertar_variable(newSimbolo)

        TSreport = ReporteTS(
            nombreTabla, "Tabla", "Select", 1, 1
        )
        arbol.ReporteTS.append(TSreport)
Example #4
0
 def execute(self, entorno: Tabla_de_simbolos, arbol: Arbol):
     indentificador = self.indentificador
     value: Valor = Valor(TIPO.LISTA, indentificador)
     lista = []
     for i in self.ListaTipos:
         val: Valor = i.execute(entorno, arbol)
         value.insert_tipo_toType(str(val.data))
         lista.append(str(val.data))
     simbol: Simbolo = Simbolo(indentificador, TIPO.LISTA, value)
     entorno.insertar_variable(simbol)
     arbol.console.append("\n" + "Type: " + indentificador +
                          " --> Valores: " + str(lista) + "\n")
     return
Example #5
0
    def execute(self, entorno: Tabla_de_simbolos, arbol: Arbol):

        if self.tipocondicionante == "where":
            self.condicionante.execute(entorno, arbol)
            return
        if self.tipocondicionante == "ORDER":
            TablaResult: Valor = entorno.obtener_varibale("TablaResult")
            TablaResult.inicializarPrettybabe()
            consola = TablaResult.order(str(self.condicionante.referencia),
                                        str(self.extra1))
            simbol: Simbolo = Simbolo("TablaResult", 0, TablaResult)
            entorno.insertar_variable(simbol)
            arbol.console.append("\n" + consola + "\n")
        if self.tipocondicionante == "LIMIT":
            limitador = self.condicionante.execute(entorno, arbol)
            TablaResult: Valor = entorno.obtener_varibale("TablaResult")
            TablaResult.inicializarPrettybabe()
            consola = TablaResult.limit(int(limitador.data))
            simbol: Simbolo = Simbolo("TablaResult", 0, TablaResult)
            entorno.insertar_variable(simbol)
            arbol.console.append("\n" + consola + "\n")

        val: Valor = Valor(3, False)
        return val
Example #6
0
 def NuevoAmbito(self):
     nuevoAmito = [Simbolo("VACIO", 2, Valor(2, "VACIO"))]
     self.Pila_de_tablas.append(nuevoAmito)
Example #7
0
    def execute(self, entorno: Tabla_de_simbolos, arbol: Arbol):
        izquierdo: indexador_auxiliar = self.izq
        derecho: Valor = self.der.execute(entorno, arbol)

        if self.tipoOperaRelacional == "=":
            if entorno.varibaleExiste("TablaResult"):
                TablaResult: Valor = entorno.obtener_varibale("TablaResult")
                TablaResult.inicializarPrettybabe()
                TablaResult.filtrarWhere("=", izquierdo.referencia,
                                         derecho.data)
                simbol: Simbolo = Simbolo("TablaResult", 0, TablaResult)
                entorno.insertar_variable(simbol)
                retorno: bool = not (TablaResult.matriResult_isEmpty())
                arbol.console.append("\n" +
                                     TablaResult.inicializarPrettybabe() +
                                     "\n")
                print(str(retorno) + " <--------------")
                return Valor(3, retorno)
            else:
                # Codigo de Pablo
                # Se crea una lista que contendra o no las llaves primarias que cumplan la condicion
                registers = []
                '''
                    Se obtiene la tabla, el indice de la columna que especifica el lado izquierdo de la operacion 
                    relacional y las llaves primarias
                '''
                table = entorno.gettable()
                pks = Meta.getPksIndex(table[0])
                column = Meta.getNumberColumnByName(izquierdo.get_origen(),
                                                    table[0])
                # Si la columna existe
                if column != -1:
                    # Se recorre cada uno de los registros de la tabla
                    for row in range(len(table)):
                        # Si el registro coincide con el valor
                        if table[row][column] == derecho.data:
                            # Si no hay llaves primarias en la tabla
                            if not pks:
                                registers.append(str([row]))
                            # Si hay llaves primarias en la tabla
                            else:
                                inner = []
                                for pk in pks:
                                    inner.append(str(table[row][pk]) + '|')
                                registers.append(inner)
                # Se devuelven los valores de las llaves primarias de las filas que cumplen la condicion o es vacia
                    return registers
                # Si la columna no existe
                else:
                    '''
                      ______ _____  _____   ____  _____  
                     |  ____|  __ \|  __ \ / __ \|  __ \ 
                     | |__  | |__) | |__) | |  | | |__) |
                     |  __| |  _  /|  _  /| |  | |  _  / 
                     | |____| | \ \| | \ \| |__| | | \ \ 
                     |______|_|  \_\_|  \_\\____/|_|  \_\
                    Descripcion: La columna especificada izquierdo.get_origen() no existe.
                    '''
                    Error: ErroresSemanticos = ErroresSemanticos(
                        "XX01: La columna especificada izquierdo.get_origen() no existe",
                        self.linea, self.columna, 'Operaciones Relacionales')
                    arbol.ErroresSemanticos.append(Error)
                    print(
                        'La columna especificada izquierdo.get_origen() no existe'
                    )
                    return None

        elif self.tipoOperaRelacional == "u:=":
            return {izquierdo: self.der}