示例#1
0
    def ejecutar(createDataBase, ts,consola,exceptions):
        if createDataBase.complemento is not None:
            if createDataBase.complemento.mode is not None:
                if createDataBase.complemento.mode > 5 or createDataBase.complemento.mode < 1:
                    consola.append(f"El modo para la base de datos {createDataBase.id} debe estar entre 1 y 5\n")
                    return
        lb = showDatabases()
        if createDataBase.id in lb:
            if createDataBase.exists:
                print("no pasa nada")
                return
            elif createDataBase.caso == 2:
                # se borra a nivel de memoria en disco
                dropDatabase(str(createDataBase.id))
                # se quita el id de la tabla de simbolos
                ts.eliminar_sim(str(createDataBase.id))
            else:
                consola.append(f"La Base de Datos {createDataBase.id} ya existe, error al crear\n")
                return

        createDatabase(str(createDataBase.id))
        entorno_bd = {}
        ts_local = TS.TablaDeSimbolos(entorno_bd)
        # simbolo (self, categoria,id, tipo, valor,Entorno):
        simbolo = TS.Simbolo(TS.TIPO_DATO.BASEDEDATOS, createDataBase.id, None, 0, ts_local)  # inicializamos con 0 como valor por defecto
        ts.agregar_sim(simbolo)
        if (createDataBase.id in lb) and createDataBase.caso == 2:
            consola.append(f"Replace, la base de datos {createDataBase.id} se ha creado exitosamente\n")
        else:
            consola.append(f"Se creo la base de datos {createDataBase.id} exitosamente\n")
        print(ts.simbolos)
示例#2
0
    def ejecutar(CreateFunction, ts, consola, exceptions):
        try:
            bdactual = ts.buscar_sim("usedatabase1234")
            BD = ts.buscar_sim(bdactual.valor)
            entornoBD = BD.Entorno
            paramcorrectos = True
            if entornoBD.validar_sim(CreateFunction.id) == -1:
                dicci = {}
                if CreateFunction.parametros is not None:
                    for parametro in CreateFunction.parametros:
                        existe = dicci.get(parametro.id, False)
                        if existe == False:
                            dicci[parametro.id] = parametro.tipo.tipo
                        else:
                            consola.append(
                                f"Existe parametros con el mismo nombre en la función: {CreateFunction.id}\n No se pudo crear la función."
                            )
                            paramcorrectos = False
                            break
                if paramcorrectos:
                    entornoFuncion = TS.TablaDeSimbolos({})
                    if CreateFunction.declare != None:
                        simdeclare = TS.Simbolo(TS.TIPO_DATO.DECLARE,
                                                "DECLARE", None,
                                                CreateFunction.declare, None)
                        entornoFuncion.agregar_sim(simdeclare)
                    #Esto siempre se realiza
                    simbegin = TS.Simbolo(TS.TIPO_DATO.BEGIN, "BEGIN", None,
                                          CreateFunction.begin, None)
                    entornoFuncion.agregar_sim(simbegin)
                    #Agregamos las variables de parametros al entorno de la función de una vez
                    for clave, valor in dicci.items():  #id,tipo
                        nuevaVariable = TS.Simbolo(TS.TIPO_DATO.PARAMETRO,
                                                   clave, valor, None, None)
                        entornoFuncion.agregar_sim(nuevaVariable)
                    #Creamos la nuevafuncion en el entorno global de la base de datos
                    nuevaFuncion = TS.Simbolo(TS.TIPO_DATO.FUNCTION,
                                              CreateFunction.id,
                                              CreateFunction.returns, None,
                                              entornoFuncion)
                    entornoBD.agregar_sim(nuevaFuncion)
                    consola.append(
                        f"Se añadio una nueva funcion llamada: {CreateFunction.id}"
                    )
            else:
                consola.append(f"Ya existe esta función en la base de datos")

        except:
            consola.append("XX000 : internal_error")
示例#3
0
    def ejecutar(self, ts, consola, exceptions):
        try:
            bdactual = ts.buscar_sim("usedatabase1234")
            BD = ts.buscar_sim(bdactual.valor)
            entornoBD = BD.Entorno

            if self.parametros == None:
                if entornoBD.validar_sim(self.id) == -1:
                    entornoP = TS.TablaDeSimbolos({})

                    if self.declare != None:

                        simdeclare = TS.Simbolo(TS.TIPO_DATO.DECLARE,
                                                "DECLARE", None, self.declare,
                                                None)
                        entornoP.agregar_sim(simdeclare)

                    print(self.sentencias)
                    simbegin = TS.Simbolo(TS.TIPO_DATO.BEGIN, "BEGIN", None,
                                          self.sentencias, None)
                    entornoP.agregar_sim(simbegin)

                    nuevoP = TS.Simbolo(TS.TIPO_DATO.PROCEDURE, self.id, None,
                                        None, entornoP)
                    entornoBD.agregar_sim(nuevoP)
                    consola.append(
                        f"Se añadio un nuevo procedimiento : {self.id}")

            else:
                paramcorrectos = True
                if entornoBD.validar_sim(self.id) == -1:
                    dicci = {}
                    for parametro in self.parametros:
                        existe = dicci.get(parametro.id, False)
                        if existe == False:
                            dicci[parametro.id] = parametro.tipo.tipo
                        else:
                            consola.append(
                                f"Existe parametros con el mismo nombre en la función: {self.id}\n No se pudo crear la función."
                            )
                            paramcorrectos = False
                            break
                    if paramcorrectos:
                        entornoP = TS.TablaDeSimbolos({})
                        if self.declare != None:
                            simdeclare = TS.Simbolo(TS.TIPO_DATO.DECLARE,
                                                    "DECLARE", None,
                                                    self.declare, None)
                            entornoP.agregar_sim(simdeclare)
                        simbegin = TS.Simbolo(TS.TIPO_DATO.BEGIN, "BEGIN",
                                              None, self.sentencias, None)
                        entornoP.agregar_sim(simbegin)
                        for clave, valor in dicci.items():  # id,tipo
                            nuevaVariable = TS.Simbolo(TS.TIPO_DATO.PARAMETRO,
                                                       clave, valor, None,
                                                       None)
                            entornoP.agregar_sim(nuevaVariable)

                        nuevoP = TS.Simbolo(TS.TIPO_DATO.PROCEDURE, self.id,
                                            None, None, entornoP)
                        entornoBD.agregar_sim(nuevoP)
                        consola.append(
                            f"Se añadio una nuevo procedimiento : {self.id}")
                else:
                    consola.append(f"Ya existe el procedimiento ")
        except:
            consola.append("XX000 : internal_error")
示例#4
0
    def ejecutar(CreateTable, ts, consola, exceptions):

        if ts.validar_sim("usedatabase1234") == 1:

            # nombre de la bd
            bdactual = ts.buscar_sim("usedatabase1234")
            # se busca el simbolo y por lo tanto se pide el entorno de la bd
            BD = ts.buscar_sim(bdactual.valor)
            entornoBD = BD.Entorno

            if entornoBD.validar_sim(CreateTable.id) == 1:
                consola.append("42P07	duplicate_table\n")
                consola.append(
                    f"22005	error_in_assignment,No se creo la tabla {CreateTable.id}\n"
                )

                return

            # creo el entorno de la tabla
            print("Creando entorno tabla")
            nuevo_entorno_tabla = {}
            tsTabla = TS.TablaDeSimbolos(nuevo_entorno_tabla)
            # recorrer campos y le mando el entorno de la tabla quien es el que adentro de este
            # existaran los campos

            banderaTodoBien = True
            cantidad_columnas = len(CreateTable.campos)
            for campo in CreateTable.campos:

                if campo.caso == 2 or campo.caso == 3:
                    if entornoBD.validar_sim(campo.tablaR) == 1:
                        #referencia la tabla a cual se desea hacer la llave foranea
                        obtener_simbolo = entornoBD.buscar_sim(campo.tablaR)

                        entornoTablarefrencia = obtener_simbolo.Entorno

                        for campito in campo.idR:
                            if entornoTablarefrencia.validar_sim(
                                    campito.id) == 1:
                                print("todo bien")
                            else:
                                banderaTodoBien = False
                                break

                        if banderaTodoBien:
                            print("todo esta bien")
                            banderaTodoBien = Campo.ejecutar(
                                campo, tsTabla, consola, exceptions)
                            print(banderaTodoBien)
                            if campo.caso == 2 or campo.caso == 3 or campo.caso == 4:
                                cantidad_columnas = cantidad_columnas - 1
                            if not banderaTodoBien:
                                break

                    else:
                        banderaTodoBien = False

                else:
                    banderaTodoBien = Campo.ejecutar(campo, tsTabla, consola,
                                                     exceptions)
                    print(banderaTodoBien)
                    if campo.caso == 2 or campo.caso == 3 or campo.caso == 4:
                        cantidad_columnas = cantidad_columnas - 1
                    if not banderaTodoBien:
                        break

            if banderaTodoBien:

                if str(CreateTable.idInherits) != str(None):
                    print("---------", CreateTable.idInherits)
                    print(entornoBD.validar_sim(CreateTable.idInherits))
                    if entornoBD.validar_sim(CreateTable.idInherits) == 1:

                        simboloTabla = entornoBD.buscar_sim(
                            CreateTable.idInherits)
                        entornoTablaPadre = simboloTabla.Entorno
                        lista_campos = entornoTablaPadre.simbolos
                        contador = 0
                        for item in lista_campos:
                            simbolo_nuevo = TS.Simbolo(
                                lista_campos.get(item).categoria,
                                lista_campos.get(item).id,
                                lista_campos.get(item).tipo,
                                lista_campos.get(item).valor,
                                lista_campos.get(item).Entorno)
                            tsTabla.agregar_sim(simbolo_nuevo)
                            contador = contador + 1

                        nueva_tabla = TS.Simbolo(TS.TIPO_DATO.TABLA,
                                                 CreateTable.id, None,
                                                 cantidad_columnas + contador,
                                                 tsTabla)
                        entornoBD.agregar_sim(nueva_tabla)
                        createTable(bdactual.valor, CreateTable.id,
                                    cantidad_columnas + contador)
                        columnas = tsTabla.simbolos
                        print("Agregando llaves primarias")
                        i = 0
                        pks = []
                        for columna in columnas:
                            print(columnas.get(columna).id)

                            for data in columnas.get(columna).valor:
                                print("     data: ", data)
                                if 'PRIMARYKEY' in data:
                                    pks.append(i)

                            i = i + 1
                        alterAddPK(BD.id, CreateTable.id, pks)
                        consola.append(
                            f"Se creo la tabla {CreateTable.id}, exitosamente\n"
                        )

                    else:
                        consola.append(
                            f"f42P16	invalid_table_definition, no se creo la tabla {CreateTable.id}"
                        )

                else:
                    nueva_tabla = TS.Simbolo(TS.TIPO_DATO.TABLA,
                                             CreateTable.id, None,
                                             cantidad_columnas, tsTabla)
                    entornoBD.agregar_sim(nueva_tabla)

                    createTable(bdactual.valor, CreateTable.id,
                                cantidad_columnas)
                    columnas = tsTabla.simbolos
                    print("Agregando llaves primarias")
                    i = 0
                    pks = []
                    for columna in columnas:
                        print(columnas.get(columna).id)

                        for data in columnas.get(columna).valor:
                            print("     data: ", data)
                            if 'PRIMARYKEY' in data:
                                pks.append(i)

                        i = i + 1
                    alterAddPK(BD.id, CreateTable.id, pks)
                    consola.append(
                        f"Se creo la tabla {CreateTable.id}, exitosamente\n")

            else:
                consola.append(
                    f"22005	error_in_assignment,No se creo la tabla {CreateTable.id} campos incosistente \n"
                )
                exceptions.append(
                    "Error semantico-22005	error_in_assignment-Columnas check-fila-columna"
                )

        else:

            consola.append(
                "22005	error_in_assignment, No se ha seleccionado una BD\n")
            exceptions.append(
                "Error semantico-22005	error_in_assignment-No se ha seleccionado DB-fila-columna"
            )
示例#5
0
    def ejecutar(createDataBase, ts, consola, exceptions):

        if createDataBase.caso == 1 and createDataBase.exists == False or createDataBase.exists == True:
            #create database
            lb = showDatabases()
            for bd in lb:
                if bd == createDataBase.id:
                    if createDataBase.exists:
                        print("no pasa nada")
                    else:
                        consola.append(
                            f"La Base de Datos {createDataBase.id} ya existe, error al crear\n"
                        )
                    return

            createDatabase(str(createDataBase.id))
            entorno_bd = {}
            ts_local = TS.TablaDeSimbolos(entorno_bd)
            # simbolo (self, categoria,id, tipo, valor,Entorno):
            simbolo = TS.Simbolo(
                TS.TIPO_DATO.BASEDEDATOS, createDataBase.id, None, 0,
                ts_local)  # inicializamos con 0 como valor por defecto
            ts.agregar_sim(simbolo)
            consola.append(
                f"Se creo la base de datos {createDataBase.id} exitosamente\n")
            print(ts.simbolos)

        elif createDataBase.caso == 2 and createDataBase.exists == False:
            #create or replace
            lb = showDatabases()
            for bd in lb:
                if bd == createDataBase.id:

                    # se borra a nivel de memoria en disco
                    dropDatabase(str(createDataBase.id))
                    # se quita el id de la tabla de simbolos
                    ts.eliminar_sim(str(createDataBase.id))
                    # simbolo (self, categoria,id, tipo, valor,Entorno):
                    # se vuelve a crear un entorno para agregar de nuevo la base de datos
                    createDatabase(str(createDataBase.id))
                    entorno = {}
                    ts_local = TS.TablaDeSimbolos(entorno)
                    simbolo = TS.Simbolo(
                        None, createDataBase.id, TS.TIPO_DATO.BASEDEDATOS, 0,
                        ts_local)  # inicializamos con 0 como valor por defecto
                    ts.agregar_sim(simbolo)
                    consola.append(
                        f"Replace, la base de datos {createDataBase.id} se ha creado exitosamente\n"
                    )
                    print(ts.simbolos)
                    return

            createDatabase(str(createDataBase.id))
            ts_local = TS.TablaDeSimbolos(ts.simbolos)
            # simbolo (self, categoria,id, tipo, valor,Entorno):
            simbolo = TS.Simbolo(
                None, createDataBase.id, TS.TIPO_DATO.BASEDEDATOS, 0,
                ts_local)  # inicializamos con 0 como valor por defecto
            ts.agregar_sim(simbolo)
            consola.append(
                f"Se creo la base de datos {createDataBase.id} exitosamente\n")
            print(ts.simbolos)

        elif createDataBase.caso == 2 and createDataBase.exists == True:
            #create or replace if not exists
            lb = showDatabases()
            for bd in lb:
                if bd == createDataBase.id:

                    if createDataBase.exists:
                        print("no pasa nada")
                    else:
                        consola.append(
                            "La Base de Datos ya existe no se puede reemplazar"
                        )

                    return

            createDatabase(str(createDataBase.id))
            ts_local = TS.TablaDeSimbolos(ts.simbolos)
            # simbolo (self, categoria,id, tipo, valor,Entorno):
            simbolo = TS.Simbolo(
                None, createDataBase.id, TS.TIPO_DATO.BASEDEDATOS, 0,
                ts_local)  # inicializamos con 0 como valor por defecto
            ts.agregar_sim(simbolo)
            consola.append(
                f"Se creo la base de datos {createDataBase.id} exitosamente\n")
            print(ts.simbolos)