예제 #1
0
 def execute(self, entorno: Tabla_de_simbolos, arbol: Arbol):
     # Se verifica que se este trabajando sobre una base de datos
     if entorno.BDisNull() is True:
         '''
           ______ _____  _____   ____  _____  
          |  ____|  __ \|  __ \ / __ \|  __ \ 
          | |__  | |__) | |__) | |  | | |__) |
          |  __| |  _  /|  _  /| |  | |  _  / 
          | |____| | \ \| | \ \| |__| | | \ \ 
          |______|_|  \_\_|  \_\\____/|_|  \_\
         Descripcion: No se ha seleccionado una base de datos para trabajar.
         '''
         Error: ErroresSemanticos = ErroresSemanticos(
             "XX00: no se a seleccionado base de datos", self.linea,
             self.columna, 'Update')
         arbol.ErroresSemanticos.append(Error)
         print('No se ha seleccionado una base de datos para trabajar')
         return
     # Se verifica que exista la tabla a actualizar
     else:
         # Si la tabla existe
         if Meta.existTable(entorno.getBD(), self.table_name) is True:
             # Se obtiene los encabezados de la tabla, las columnas y sus valores a actualizar
             header = dbms.extractTable(entorno.getBD(), self.table_name)[0]
             columns, values = [], []
             self.getdata(columns, values, entorno, arbol)
             # Si no hay condicional where
             if self.where is None:
                 pass
             # Si hay condicional where
             else:
                 self.whithwhere(columns, header, values, entorno, arbol)
예제 #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)
예제 #3
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)
예제 #4
0
    def execute(self, entorno: Tabla_de_simbolos, arbol: Arbol):
        databaseName       = entorno.getBD()
        Meta.tableName     = self.tableName
        Meta.databaseName  = databaseName
        Meta.arbol         = arbol
        self.arbol         = arbol
        Meta.entorno       = entorno


        if entorno.BDisNull():
            '''
              ______ _____  _____   ____  _____  
             |  ____|  __ \|  __ \ / __ \|  __ \ 
             | |__  | |__) | |__) | |  | | |__) |
             |  __| |  _  /|  _  /| |  | |  _  / 
             | |____| | \ \| | \ \| |__| | | \ \ 
             |______|_|  \_\_|  \_\\____/|_|  \_\
            borra el print de abajo o comentalo xd
            Descripcion: BD %databaseName% no existe ("BD " + databaseName + " no existe")
            '''
            Error: ErroresSemanticos = ErroresSemanticos("XX00: internal_error db is not exist",
                                                         self.linea,
                                                         self.columna,
                                                         'Insert')
            arbol.ErroresSemanticos.append(Error)
            print('BD' + databaseName + 'no existe')
            return

        if not self.listColumn:
            self.insertNormal(databaseName, entorno, arbol)
        else:
            self.insertWithListId(databaseName, entorno, arbol)
예제 #5
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)
예제 #6
0
파일: type.py 프로젝트: sandymerida/tytus
 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
예제 #7
0
    def execute(self, entorno: Tabla_de_simbolos, arbol:Arbol):

        entorno.NuevoAmbito()

        if self.listawhere == "N/A":
            self.ruta_SelectSimple(entorno, arbol)
            #arbol.console.append(self.consolaInterna)
            entorno.BorrarAmbito()
            return self.TablaSelect
        else:
            self.ruta_SelectComplejo(entorno, arbol)
            #arbol.console.append(self.consolaInterna)
            entorno.BorrarAmbito()
            return self.TablaSelect
예제 #8
0
 def execute(self, entorno: Tabla_de_simbolos, arbol: Arbol):
     # Se ejecuta el metodo para la eliminar la base de datos
     result = dbms.dropDatabase(self.database_name)
     # Si la operacion fue exitosa
     if result == 0:
         # Si la base de datos actual es la que se va a eliminar
         if entorno.getBD() == self.database_name:
             # Se coloca en nulo ls base de datos actual
             entorno.setBD("")
         cadena = 'tytus> Base de datos \'' + self.database_name + '\' fue eliminada exitosamente'
         print('tytus> Base de datos \'' + self.database_name +
               '\' fue eliminada exitosamente')
         arbol.console.append(cadena)
         return
     # Si hubo un error en la operacion
     elif result == 1:
         '''
           ______ _____  _____   ____  _____  
          |  ____|  __ \|  __ \ / __ \|  __ \ 
          | |__  | |__) | |__) | |  | | |__) |
          |  __| |  _  /|  _  /| |  | |  _  / 
          | |____| | \ \| | \ \| |__| | | \ \ 
          |______|_|  \_\_|  \_\\____/|_|  \_\
         Descripcion: XX000	internal_error (yo creo que seria ese)
         '''
         Error: ErroresSemanticos = ErroresSemanticos(
             "XX01: internal_error", self.linea, self.columna,
             'Drop Database')
         arbol.ErroresSemanticos.append(Error)
         print('XX00: internal_error')
         return
     # Si la base de datos no existe
     elif result == 2:
         '''
           ______ _____  _____   ____  _____  
          |  ____|  __ \|  __ \ / __ \|  __ \ 
          | |__  | |__) | |__) | |  | | |__) |
          |  __| |  _  /|  _  /| |  | |  _  / 
          | |____| | \ \| | \ \| |__| | | \ \ 
          |______|_|  \_\_|  \_\\____/|_|  \_\
         Descripcion: La base de datos no existe
         '''
         Error: ErroresSemanticos = ErroresSemanticos(
             "XX01: internal_error la db no existe", self.linea,
             self.columna, 'Drop Database')
         arbol.ErroresSemanticos.append(Error)
         print('La base de datos no existe')
         return
예제 #9
0
파일: Ventana.py 프로젝트: edgarJ91/tytus
def analizador():
    '''
        Se obtiene el texto del text area
        se pasa el parser y se ejecuta el patron interprete
    '''
    my_text1.delete("1.0", END)

    try:
        cadena = my_text.get("1.0", END)

        result: Arbol = AnaParse(cadena)

        entornoCero: Tabla_de_simbolos = Tabla_de_simbolos()
        entornoCero.NuevoAmbito()

        for item in result.instrucciones:
            item.execute(entornoCero, result)

        consola = ""
        for item in result.console:
            consola = consola + item

        my_text1.insert(END, consola)

        global arboAux_errores

        arboAux_errores = result

    except:
        print(traceback)
        my_text1.insert(END, 'Ocurrio un error al compilar')
예제 #10
0
 def obtener_columnas(self, index:indexador_auxiliar, entorno: Tabla_de_simbolos, arbol:Arbol):
     campo = self.definidorDeNombre_deTabla_basadoEnIndexador(index)
     tabla = index.origen
     if len(self.listatablas) == 1:
         tabla = self.definidorDeNombre_deTabla_basadoEnIndexador(self.listatablas[0])
     tablaVistualizada:Valor = entorno.obtener_varibale(tabla)
     columna:Valor = Valor(TIPO.LISTA, campo)
     columna.inicizalizar_lista(tablaVistualizada.obtenerColumna_enBase_aEncabezado(campo))
     return  columna.lista
예제 #11
0
    def execute(self, entorno: Tabla_de_simbolos, arbol: Arbol):
        if self.exist(self.id) is True:
            entorno.setBD(self.id)
            arbol.console.append('tytus> Trabajando en: \'' + self.id + '\'')
            print('tytus> Trabajando en: \'' + self.id + '\'')
        else:
            '''
            			  ______ _____  _____   ____  _____  
            			 |  ____|  __ \|  __ \ / __ \|  __ \ 
            			 | |__  | |__) | |__) | |  | | |__) |
            			 |  __| |  _  /|  _  /| |  | |  _  / 
            			 | |____| | \ \| | \ \| |__| | | \ \ 
            			 |______|_|  \_\_|  \_\\____/|_|  \_\

            			Descripcion: BD %databaseName% no existe ("BD " + databaseName + " no existe")
            			'''
            Error: ErroresSemanticos = ErroresSemanticos(
                "XX00: la base de datos no existe", self.linea, self.columna,
                'Use database')
            arbol.ErroresSemanticos.append(Error)
            print("error no existe la bd")
            return
예제 #12
0
 def obtener_multi(self, index:indexador_auxiliar, entorno: Tabla_de_simbolos, arbol:Arbol, indiceListaValores):
     if index.referencia == "MULTI":
         self.listavalores.pop(indiceListaValores)
         tabla = index.origen
         if len(self.listatablas) == 1:
             tabla = self.definidorDeNombre_deTabla_basadoEnIndexador(self.listatablas[0])
         tablaVistualizada:Valor = entorno.obtener_varibale(tabla)
         encabezados:[] = tablaVistualizada.obtenerEncabezados_soloSTR()
         for i in encabezados:
             ind:indexador_auxiliar = indexador_auxiliar(str(tabla), str(i), 0)
             self.listavalores.append(ind)
         return True
     else:
         return False
예제 #13
0
파일: Ventana.py 프로젝트: edgarJ91/tytus
def Seleccionar():
    try:
        cadena = my_text.get(SEL_FIRST, SEL_LAST)
        print('>> ' + cadena)

        result: Arbol = AnaParse(cadena)
        entornoCero: Tabla_de_simbolos = Tabla_de_simbolos()
        entornoCero.NuevoAmbito()

        for item in result.instrucciones:
            item.execute(entornoCero, result)

        consola = ""
        for item in result.console:
            consola = consola + item

        my_text1.insert(END, consola)
    except:
        my_text1.insert(END, 'Ocurrio un error al compilar')
예제 #14
0
파일: Ventana.py 프로젝트: susanliss/tytus
def analizador():
    '''
        Se obtiene el texto del text area
        se pasa el parser y se ejecuta el patron interprete
    '''
    global cadena, dotString
    my_text1.delete("1.0", END)

    try:
        cadena = my_text.get("1.0", END)

        result: Arbol = AnaParse(cadena)
        entornoCero: Tabla_de_simbolos = Tabla_de_simbolos()
        entornoCero.NuevoAmbito()

        for item in result.instrucciones:
            item.execute(entornoCero, result)

        my_text1.insert(END, result)

    except:
        my_text1.insert(END, 'Ocurrio un error al compilar')
예제 #15
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
예제 #16
0
    def execute(self, entorno: Tabla_de_simbolos, arbol: Arbol):
        # Se obtiene la base de datos actual, la tabla a crear y el numero de colúmnas
        bdactual = entorno.getBD()
        self.bd_actual = bdactual
        nuevatabla = self.id
        nocolumnas = len(self.columnas)
        if self.herencia is not None:
            self.inh = self.definir_inherits(self.herencia.tabla)
            if self.inh is not None:
                self.ifinh = True
                nocolumnas = nocolumnas + len(self.inh)
            else:
                '''
                                            			  ______ _____  _____   ____  _____  
                                            			 |  ____|  __ \|  __ \ / __ \|  __ \ 
                                            			 | |__  | |__) | |__) | |  | | |__) |
                                            			 |  __| |  _  /|  _  /| |  | |  _  / 
                                            			 | |____| | \ \| | \ \| |__| | | \ \ 
                                            			 |______|_|  \_\_|  \_\\____/|_|  \_\

                                            			Descripcion: ocurrio un error o no existe la base de datos
                                            			'''
                Error: ErroresSemanticos = ErroresSemanticos(
                    "XX00: internal_error db is not exist", self.linea,
                    self.columna, 'Create Table')
                arbol.ErroresSemanticos.append(Error)

                print("error")
                #return
        # Se utiliza el paquete de almacenamiento para enviar a crear una nueva tabla y se obtiene un retorno
        retorno = dbms.createTable(bdactual, nuevatabla, nocolumnas)
        if retorno == 0:  # Si la operacion exitosa
            primarykeys = self.crear_pks(
            )  # Se verifican si existen llaves primarias
            if len(primarykeys) != 0:
                pks = self.obtenerindice(primarykeys)
                dbms.alterAddPK(bdactual, nuevatabla,
                                pks)  # Se crean las llaves primarias
                cadena = "tytus> La tabla '" + self.id + "' fue creada exitosamente"
                print("tytus> La tabla '" + self.id +
                      "' fue creada exitosamente")
                arbol.console.append(cadena)
            else:
                pks = self.obtenerindice(primarykeys)
                if len(pks) != 0:
                    dbms.alterAddPK(bdactual, nuevatabla,
                                    pks)  # Se crean las llaves primarias
            self.crear_encabezados(
                bdactual, entorno,
                arbol)  # Se crean los encabezados de las columnas
        elif retorno == 1:  # Error en la operacion
            '''
                                        			  ______ _____  _____   ____  _____  
                                        			 |  ____|  __ \|  __ \ / __ \|  __ \ 
                                        			 | |__  | |__) | |__) | |  | | |__) |
                                        			 |  __| |  _  /|  _  /| |  | |  _  / 
                                        			 | |____| | \ \| | \ \| |__| | | \ \ 
                                        			 |______|_|  \_\_|  \_\\____/|_|  \_\

                                        			Descripcion: error en la operacion
                                        			'''
            Error: ErroresSemanticos = ErroresSemanticos(
                "XX00: internal_error error en la operacion", self.linea,
                self.columna, 'Create Table')
            arbol.ErroresSemanticos.append(Error)
            print("Nel error")
        elif retorno == 2:  # La base de datos no existe
            '''
                                        			  ______ _____  _____   ____  _____  
                                        			 |  ____|  __ \|  __ \ / __ \|  __ \ 
                                        			 | |__  | |__) | |__) | |  | | |__) |
                                        			 |  __| |  _  /|  _  /| |  | |  _  / 
                                        			 | |____| | \ \| | \ \| |__| | | \ \ 
                                        			 |______|_|  \_\_|  \_\\____/|_|  \_\

                                        			Descripcion: no existe la base de datos
                                        			'''
            Error: ErroresSemanticos = ErroresSemanticos(
                "XX00: internal_error db is not exist", self.linea,
                self.columna, 'Create Table')
            arbol.ErroresSemanticos.append(Error)
            print("Nel no existe la bd")

        elif retorno == 3:  # La tabla ya existe
            '''
                                        			  ______ _____  _____   ____  _____  
                                        			 |  ____|  __ \|  __ \ / __ \|  __ \ 
                                        			 | |__  | |__) | |__) | |  | | |__) |
                                        			 |  __| |  _  /|  _  /| |  | |  _  / 
                                        			 | |____| | \ \| | \ \| |__| | | \ \ 
                                        			 |______|_|  \_\_|  \_\\____/|_|  \_\

                                        			Descripcion: la tabla 'self.id' ya existe
                                        			'''
            Error: ErroresSemanticos = ErroresSemanticos(
                "XX01: internal_error id ya existe", self.linea, self.columna,
                'Create Table')
            arbol.ErroresSemanticos.append(Error)
            print("Nel ya existe la tabla")
예제 #17
0
파일: test.py 프로젝트: sandymerida/tytus
import traceback
from Parser.Ascendente.gramatica import parse
from Interprete.Arbol import Arbol
from Interprete.Tabla_de_simbolos import Tabla_de_simbolos

if __name__ == '__main__':
    f = open("entrada.sql", "r")

    try:
        input = f.read()
        print('====================ENTRADAInicio====================')
        print(input)
        print('====================ENTRADAFIN====================')
        result: Arbol = parse(input)
        print('====================RESULT====================')
        print('Analisis Sintactico realizado con exito')

        entornoCero: Tabla_de_simbolos = Tabla_de_simbolos()
        entornoCero.NuevoAmbito()

        try:
            for item in result.instrucciones:
                item.execute(entornoCero, result)
        except:
            traceback.print_exc()
            print('Error En el analisis Semantico')

    except:
        print('Ocurrion un error en el analisis Sintactico')
예제 #18
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}