Esempio n. 1
0
    def ejecutar(use,ts,consola,exceptions):

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

                lb = showDatabases()
                for bd in lb:

                    if bd == str(use.id):
                        simbolo_use = TS.Simbolo(TS.TIPO_DATO.USE, "usedatabase1234", None, use.id, None)
                        ts.agregar_sim(simbolo_use)
                        consola.append(f"Seleccionando {simbolo_use.valor} base de datos\n")
                        return

                consola.append(f"La Base de Datos {use.id} no existe\n")
            else:

                lb = showDatabases()
                for bd in lb:
                    if bd == use.id:
                        use_anterior = ts.buscar_sim("usedatabase1234")
                        simbolo_use = TS.Simbolo(TS.TIPO_DATO.USE, "usedatabase1234", None, use.id, None)
                        ts.actualizar_sim(simbolo_use)
                        consola.append(f"Cambiando use de {use_anterior.valor} ahora el actual es: {simbolo_use.valor}\n")
                        return

                consola.append(f"La Base de Datos {use.id} no existe\n")
Esempio n. 2
0
    def ejecutar(alterdatabase, ts, consola, exceptions):

        #por el momemnto solo renombrar
        print("Estoy aqui")

        if ts.validar_sim(alterdatabase.name) == 1 and alterdatabase.caso == 1:

            anterior = ts.buscar_sim(alterdatabase.name)
            nuevo = TS.Simbolo(anterior.categoria, alterdatabase.newName,
                               anterior.tipo, anterior.valor, anterior.Entorno)
            ts.agregar_sim(nuevo)
            ts.eliminar_sim(alterdatabase.name)
            alterDatabase(alterdatabase.name, alterdatabase.newName)
            consola.append(
                f"BD {alterdatabase.name} renombrada a {alterdatabase.newName}"
            )
        else:

            consola.append(
                f"42P01	undefined_table, Error alter no existe la tabla {alterdatabase.name}"
            )
            exceptions.append(
                f"Error semantico-42P01- 42P01	undefined_table, no existe la tabla {alterdatabase.name}-fila-columna"
            )
        #caso 1
        print("")
Esempio n. 3
0
    def ejecutar(createType, ts, consola, exceptions):

        if ts.validar_sim(createType.id) == -1:

            datavalidada = []

            for data in createType.lista:
                resultado = Expresion.Resolver(data, ts, consola, exceptions)
                datavalidada.append(resultado)

            nuevo_tipo = TS.Simbolo(TS.TIPO_DATO.CLASEENUMERADA, createType.id,
                                    "Enum", datavalidada, None)
            ts.agregar_sim(nuevo_tipo)
            consola.append(
                f"Se añadio una clase enum llamada  {createType.id}")

        else:

            consola.append(f"Ya existe esta clase enumerada")
Esempio n. 4
0
    def ejecutar(campo, ts, consola, exceptions):

        nombreCampo = campo.id
        valor = True

        if campo.caso == 1:
            # id con su tipo
            # verificamos tipo si viene
            print("1->>>>>>>>>>>>>>>>> ", campo.id)

            #if campo.tipo != None and ts.validar_sim(campo.id) == -1:
            if ts.validar_sim(campo.id) == -1:
                if str(campo.tipo.longitud) != None:
                    print("campo: ", str(campo.tipo.tipo))

                if "VARCHAR" in str(campo.tipo.tipo).upper(
                ) or "CHARACTER" in str(
                        campo.tipo.tipo).upper() or "CHARACTERVARYING" in str(
                            campo.tipo.tipo).upper() or "DECIMAL" in str(
                                campo.tipo.tipo).upper():
                    valores = []
                    if str(campo.acompaniamiento) != str(None):
                        for data in campo.acompaniamiento:
                            print(data.tipo, " - ", data.valorDefault)
                            if str(data.valorDefault) == str(None):
                                valores.append(data.tipo)
                            else:
                                valores.append(
                                    str(data.tipo) + ":" +
                                    str(data.valorDefault))

                    campo_nuevo = TS.Simbolo(TS.TIPO_DATO.CAMPO, campo.id,
                                             str(campo.tipo.tipo).upper(),
                                             valores, None)
                    ts.agregar_sim(campo_nuevo)
                    return valor
                elif str(campo.tipo.tipo).lower(
                ) in tipos_de_dato and ts.validar_sim(campo.id) == -1:
                    valores = []
                    check = []
                    if str(campo.acompaniamiento) != str(None):
                        for data in campo.acompaniamiento:
                            print(data.tipo, " - ", data.valorDefault)
                            if str(data.valorDefault) == str(None):
                                valores.append(data.tipo)
                            else:
                                if isinstance(data.valorDefault, Expresion):
                                    check.append(data.valorDefault)
                                    valores.append(
                                        str(data.tipo) + ":" + "expresion")
                                else:
                                    valores.append(
                                        str(data.tipo) + ":" +
                                        str(data.valorDefault))

                    print("campo-> ", str(campo.tipo.tipo), " ",
                          campo.acompaniamiento)
                    campo_nuevo = TS.Simbolo(TS.TIPO_DATO.CAMPO, campo.id,
                                             str(campo.tipo.tipo).upper(),
                                             valores, check)
                    ts.agregar_sim(campo_nuevo)
                    return valor

                else:
                    if ts.validar_sim(campo.id) == 1:
                        consola.append(f"Repeat identificador {campo.id}")
                    else:
                        consola.append(
                            f"42P18	indeterminate_datatype, Tipo de dato no valido para {campo.id}\n"
                        )
                        exceptions.append(
                            f"Error Semantico-NUMERO-info-fila-columna")
                    valor = False
            return valor
            # ts.agregar_sim()

        elif campo.caso == 2:
            # constraint
            print("")
            print("2->>>>>>>>>>>>>>>>> ", campo.id)
            for idcito in campo.idFk:
                print(idcito.id)
                if ts.validar_sim(idcito.id) == 1:
                    obtenerCampo = ts.buscar_sim(idcito.id)
                    print(
                        "ejecutando campos------------------------------------------!!!!!!1"
                    )
                    tablita = []
                    for dataReferencia in campo.idR:
                        tablita.append(dataReferencia.id)

                    obtenerCampo.valor.append(
                        f"CONSTRAINT:{campo.id}:FOREIGNKEY:{campo.tablaR}:{tablita}"
                    )
                    # para llegar antes debe validarse que existe la tabla y los campos a los cuales
                    # se referencia

                else:
                    consola.append(
                        f"42P10	invalid_column_reference, Campo{idcito.id} no encontrado"
                    )
                    exceptions.append(
                        "Error Semantico - 42P10- invalid_column_reference-fila-columna"
                    )
                    valor = False
            print("")

        elif campo.caso == 3:
            # foreing key
            print("3->>>>>>>>>>>>>>>>> ", campo.idFk)
            for idcito in campo.idFk:
                print(idcito.id)
                if ts.validar_sim(idcito.id) == 1:
                    obtenerCampo = ts.buscar_sim(idcito.id)
                    print(
                        "ejecutando campos------------------------------------------!!!!!!1"
                    )
                    tablita = []
                    for dataReferencia in campo.idR:
                        tablita.append(dataReferencia.id)

                    obtenerCampo.valor.append(
                        f"FOREIGNKEY:{campo.tablaR},{tablita}")
                    #para llegar antes debe validarse que existe la tabla y los campos a los cuales
                    #se referencia

                else:
                    consola.append(
                        f"42P10	invalid_column_reference, Campo{idcito.id} no encontrado"
                    )
                    exceptions.append(
                        "Error Semantico - 42P10- invalid_column_reference-fila-columna"
                    )
                    valor = False
            print("")

        elif campo.caso == 4:
            # primary key
            print("caso 4")
            for campito in nombreCampo:

                if ts.validar_sim(campito.id) == 1:

                    data = ts.buscar_sim(campito.id)
                    if str(data.valor) == str(None):
                        valores = []
                        campo_actualizado = TS.Simbolo(TS.TIPO_DATO.CAMPO,
                                                       data.id, data.tipo,
                                                       valores, data.Entorno)
                        ts.actualizar_sim(campo_actualizado)
                        valor = True
                    else:
                        data.valor.append('PRIMARYKEY')
                        campo_actualizado = TS.Simbolo(TS.TIPO_DATO.CAMPO,
                                                       data.id, data.tipo,
                                                       data.valor,
                                                       data.Entorno)
                        ts.actualizar_sim(campo_actualizado)
                        valor = True
                else:
                    valor = False
                    consola.append(
                        f"Error: el identificador {campito.id},no esta definido\n"
                    )
                    break
            print(valor)
        else:
            print("5->>>>>>>>>>>>>>>>> ", campo.id)
            # id con su tipo
            # verificamos tipo si viene
            print("1->>>>>>>>>>>>>>>>> ", campo.id)

            # if campo.tipo != None and ts.validar_sim(campo.id) == -1:
            if ts.validar_sim(campo.id) == -1:

                if ts.validar_sim(campo.id) == -1:
                    valores = []
                    check = []
                    if str(campo.acompaniamiento) != str(None):
                        for data in campo.acompaniamiento:
                            print(data.tipo, " - ", data.valorDefault)
                            if str(data.valorDefault) == str(None):
                                valores.append(data.tipo)
                            else:
                                if isinstance(data.valorDefault, Expresion):
                                    check.append(data.valorDefault)
                                    valores.append(
                                        str(data.tipo) + ":" + "expresion")
                                else:
                                    valores.append(
                                        str(data.tipo) + ":" +
                                        str(data.valorDefault))

                    campo_nuevo = TS.Simbolo(TS.TIPO_DATO.CAMPO, campo.id,
                                             campo.tipo.upper(), valores,
                                             check)
                    ts.agregar_sim(campo_nuevo)
                    return valor

                else:
                    if ts.validar_sim(campo.id) == 1:
                        consola.append(f"Repeat identificador {campo.id}")
                    else:
                        consola.append(
                            f"42P18	indeterminate_datatype, Tipo de dato no valido para {campo.id}\n"
                        )
                        exceptions.append(
                            f"Error Semantico-NUMERO-info-fila-columna")
                    valor = False
            return valor
            # ts.agregar_sim()

        print(valor)
        return valor
Esempio n. 5
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"
            )
Esempio n. 6
0
    def ejecutar(alterTable, 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(alterTable.id) == 1:

                simbolo_tabla = entornoBD.buscar_sim(alterTable.id)
                entornoTabla = simbolo_tabla.Entorno

                banderaTodoBien = True

                for altirto in alterTable.alter:

                    if altirto.caso == 1:
                        print("caso 1")
                        #alter table add column ( listaids)
                        for idcito in altirto.id:
                            if entornoTabla.validar_sim(idcito.id) == -1:
                                print(idcito.id, "<-----------------------------------")
                                valores = []
                                columna_nueva = TS.Simbolo(TS.TIPO_DATO.CAMPO,idcito.id,altirto.tipo.tipo,valores,None)
                                simbolo_tabla.valor = simbolo_tabla.valor + 1
                                entornoTabla.agregar_sim(columna_nueva)
                                alterAddColumn(BD.id,simbolo_tabla.id,1)
                                consola.append(f"Alter ejecutado correctamente en tabla , {alterTable.id}, add column {idcito.id}")

                            else:
                                consola.append(f"42701 Duplicate column, No se puede agregar la columna {idcito}")
                                exceptions.append(f"Error semantico-42701 - Duplicate column, No se puede agregar la columna {idcito} -fila-columna")





                    elif altirto.caso == 2:
                        print("caso 2")
                        #alter table drop column ( listaids)
                        for idcito in altirto.id:
                            if entornoTabla.validar_sim(idcito.id) == 1:
                                print(idcito.id, "<-----------------------------------")
                                valores = []
                                #columna_nueva = TS.Simbolo(TS.TIPO_DATO.CAMPO,idcito.id,altirto.tipo.tipo,valores,None)
                                entornoTabla.eliminar_sim(idcito.id)
                                simbolo_tabla.valor = simbolo_tabla.valor-1;


                                alterDropColumn(BD.id,simbolo_tabla.id,len(entornoTabla.simbolos)-1)
                                consola.append(f"Alter ejecutado correctamente en tabla , {alterTable.id}, drop column {idcito.id}")

                            else:
                                consola.append(f"42703 Undefined column, No se puede eliminar la columna {idcito.id}")
                                exceptions.append(f"Error semantico-42701 - Duplicate column, No se puede agregar la columna  {idcito.id} - fila - columna")




                    elif altirto.caso == 3:
                        print("caso 3")
                        print(altirto.check)
                        datos = altirto.check



                        campo = datos.iz
                        print(campo.id)
                        data2 = datos.dr
                        print(data2)
                        #print(data2.valor)
                        operador= datos.operador
                        print(operador)

                        if entornoTabla.validar_sim(campo.id) == 1:

                            #
                            if isinstance(data2,Id):

                                if entornoTabla.validar_sim(data2.id) == 1:
                                    simbolo = entornoTabla.buscar_sim(campo.id)
                                    simbolo.valor.append(f"CHECK:{campo.id}:{operador}:{data2.id}")
                                    simbolo.Entorno = altirto.check
                                    nueva_Data = TS.Simbolo(simbolo.categoria, simbolo.id, simbolo.tipo, simbolo.valor,
                                                            simbolo.Entorno)
                                    entornoTabla.actualizar_sim(nueva_Data)
                                    # en los checks va el entorno de expresion
                                    consola.append(
                                        f"Add check hacia la tabla {alterTable.id}, en la columna {campo.id}\n")

                                else:
                                    consola.append(
                                        f"42703 Undefined column, No se puede agregar check a la columna {campo.id}")
                                    exceptions.append(
                                        f"Error semantico-42703 - Undefined, No se puede agregar la columna  {campo.id} - fila - columna")



                            else:
                                simbolo = entornoTabla.buscar_sim(campo.id)
                                simbolo.valor.append(f"CHECK:{campo.id}:{operador}:{data2.valor}")
                                simbolo.Entorno = altirto.check
                                nueva_Data = TS.Simbolo(simbolo.categoria,simbolo.id,simbolo.tipo,simbolo.valor,simbolo.Entorno)
                                entornoTabla.actualizar_sim(nueva_Data)
                                #en los checks va el entorno de expresion
                                consola.append(f"Add check hacia la tabla {alterTable.id}, en la columna {campo.id}\n")

                        else:
                            consola.append(f"42703 Undefined column, No se puede agregar check a la columna {campo.id}")
                            exceptions.append(
                                f"Error semantico-42703 - Undefined, No se puede agregar la columna  {campo.id} - fila - columna")




                    elif altirto.caso == 4:
                        print("caso 4")

                        data_borrar = altirto.id

                        lista = entornoTabla.simbolos
                        for columna  in lista:
                            print(columna)
                            indice = 0
                            banderaBorrar = False
                            for valor in lista.get(columna).valor:
                                print(" ->",valor)
                                if "CONSTRAINT" in valor:
                                    nombre=str(valor).split(":")[1]
                                    print("-- ",nombre, data_borrar)
                                    if nombre == data_borrar:
                                        banderaBorrar = True
                                        break
                                indice = indice + 1
                            if banderaBorrar:
                                break


                        print(banderaBorrar, indice)
                        if banderaBorrar:
                            lista.get(columna).valor.pop(indice)
                            consola.append(f"Drop constraint eliminada de la tabla {alterTable.id}")
                        else:
                            consola.append(f"23000 integrity_constraint_violation, no se encontro el constraint{data_borrar} de la tabla {alterTable.id}")
                            exceptions.append(f"Error semantico- 23000-integrity_constraint_violation- fila - columna ")

                    elif altirto.caso == 5:
                        print("caso 5")
                        # constraint
                        print("")
                        banderaTodoBien = True
                        if entornoBD.validar_sim(altirto.id2) == 1:
                            # referencia la tabla a cual se desea hacer la llave foranea
                            obtener_simbolo = entornoBD.buscar_sim(altirto.id2)

                            entornoTablarefrencia = obtener_simbolo.Entorno

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

                        if banderaTodoBien:

                            for idcito in altirto.id:

                                print(idcito.id)
                                if entornoTabla.validar_sim(idcito.id) == 1:
                                    obtenerCampo = entornoTabla.buscar_sim(idcito.id)
                                    print("ejecutando campos------------------------------------------!!!!!!1")
                                    tablita = []
                                    for dataReferencia in altirto.id3:
                                        tablita.append(dataReferencia.id)

                                    obtenerCampo.valor.append(f"FOREIGNKEY:{altirto.id2}:{tablita}")
                                    # para llegar antes debe validarse que existe la tabla y los campos a los cuales
                                    # se referencia
                                    consola.append(f"Add foreing key exitoso en la tabla {alterTable.id}\n")


                                else:
                                    consola.append(f"42P10	invalid_column_reference, Campo {idcito.id} no encontrado")
                                    exceptions.append("Error Semantico - 42P10- invalid_column_reference-fila-columna")
                                    valor = False
                            print("")

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



                    elif altirto.caso == 6:
                        print("caso 6")

                        if entornoTabla.validar_sim(altirto.id) == 1:
                            data = entornoTabla.buscar_sim(altirto.id)
                            nueva_Data = TS.Simbolo(data.categoria, altirto.id, altirto.tipo.tipo, data.valor, data.Entorno)

                            entornoTabla.actualizar_sim(nueva_Data)
                            print(altirto.tipo.tipo)
                            consola.append(f"Alter column realizado con exito en {altirto.id}\n")
                        else:
                            consola.append(f"No existe el campo {altirto.id}, Error alter columna")
                            exceptions.append(
                                f"Error semantico-22005	error_in_assignment-No se ha encontrado la columna {altirto.id}-fila-columna")


                    elif altirto.caso == 7:
                        print("caso 6")

                        if entornoTabla.validar_sim(altirto.id) == 1:
                            data = entornoTabla.buscar_sim(altirto.id)
                            data.valor.append("NOTNULL")
                            nueva_Data = TS.Simbolo(data.categoria, altirto.id, data.tipo, data.valor,
                                                    data.Entorno)

                            entornoTabla.actualizar_sim(nueva_Data)

                            consola.append(f"Alter column realizado con exito en {altirto.id}\n")
                        else:
                            consola.append(f"No existe el campo {altirto.id}, Error alter columna")
                            exceptions.append(
                                f"Error semantico-22005	error_in_assignment-No se ha encontrado la columna {altirto.id}-fila-columna")

                    elif altirto.caso == 8:
                        print("caso 8")
                        # constraint
                        print("")
                        banderaTodoBien = True
                        valor=True
                        if banderaTodoBien:
                            pks = []
                            for idcito in altirto.id:

                                print(idcito.id)

                                if entornoTabla.validar_sim(idcito.id) == 1:
                                    obtenerCampo = entornoTabla.buscar_sim(idcito.id)
                                    print("ejecutando campos------------------------------------------!!!!!!1")



                                    obtenerCampo.valor.append(f"PRIMARYKEY")
                                    # para llegar antes debe validarse que existe la tabla y los campos a los cuales
                                    # se referencia
                                    consola.append(f"Add Constraint PRIMARY key exitoso en la tabla {alterTable.id}\n")
                                    i = 0
                                    for columna in entornoTabla.simbolos:
                                        if entornoTabla.simbolos.get(columna).id == idcito.id:
                                            pks.append(i)
                                        i = i+1

                                else:

                                    consola.append(
                                        f"42P10	invalid_column_reference, Campo {idcito.id} no encontrado")
                                    exceptions.append("Error Semantico - 42P10- invalid_column_reference-fila-columna")
                                    valor = False

                            if valor:
                                print(pks)
                                print(BD.id, simbolo_tabla.id, pks)
                                print(alterAddPK(BD.id, simbolo_tabla.id, pks))
                                print("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")




                    elif altirto.caso == 9:
                        print("caso 9")
                        # constraint
                        print("")
                        valor=True
                        if banderaTodoBien:
                            pks = []
                            for idcito in altirto.id:

                                print(idcito.id)
                                if entornoTabla.validar_sim(idcito.id) == 1:
                                    obtenerCampo = entornoTabla.buscar_sim(idcito.id)
                                    print("ejecutando campos------------------------------------------!!!!!!1")
                                    tablita = []
                                    for dataReferencia in altirto.id:
                                        tablita.append(dataReferencia.id)
                                        if str(altirto.ccc+":PRIMARYKEY") not in obtenerCampo.valor:
                                            obtenerCampo.valor.append(f"{altirto.ccc}:PRIMARYKEY")
                                    # para llegar antes debe validarse que existe la tabla y los campos a los cuales
                                    # se referencia
                                    consola.append(f"Add Constraint PRIMARY key exitoso en la tabla {alterTable.id}\n")
                                    i = 0
                                    for columna in entornoTabla.simbolos:
                                        if entornoTabla.simbolos.get(columna).id == idcito.id:
                                            pks.append(i)
                                        i = i+1


                                else:
                                    consola.append(
                                        f"42P10	invalid_column_reference, Campo {idcito.id} no encontrado")
                                    exceptions.append("Error Semantico - 42P10- invalid_column_reference-fila-columna")
                                    valor = False
                            if valor:
                                print(pks)
                                print(BD.id, simbolo_tabla.id, pks)
                                print(alterAddPK(BD.id, simbolo_tabla.id, pks))
                                print("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")



                    elif altirto.caso == 10:
                        print("caso 10")
                        # constraint
                        print("")
                        banderaTodoBien = True
                        if entornoBD.validar_sim(altirto.id2) == 1:
                            # referencia la tabla a cual se desea hacer la llave foranea
                            obtener_simbolo = entornoBD.buscar_sim(altirto.id2)

                            entornoTablarefrencia = obtener_simbolo.Entorno

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

                        if banderaTodoBien:

                            for idcito in altirto.id:

                                print(idcito.id)
                                if entornoTabla.validar_sim(idcito.id) == 1:
                                    obtenerCampo = entornoTabla.buscar_sim(idcito.id)
                                    print("ejecutando campos------------------------------------------!!!!!!1")
                                    tablita = []
                                    for dataReferencia in altirto.id3:
                                        tablita.append(dataReferencia.id)

                                    obtenerCampo.valor.append(f"{altirto.ccc}:FOREIGNKEY:{altirto.id2}:{tablita}")
                                    # para llegar antes debe validarse que existe la tabla y los campos a los cuales
                                    # se referencia
                                    consola.append(f"Add Constraint foreing key exitoso en la tabla {alterTable.id}\n")


                                else:
                                    consola.append(f"42P10	invalid_column_reference, Campo {idcito.id} no encontrado")
                                    exceptions.append("Error Semantico - 42P10- invalid_column_reference-fila-columna")
                                    valor = False
                            print("")

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



                    elif altirto.caso == 11:
                        print("caso 8")
                        # constraint
                        print("")
                        banderaTodoBien = True
                        if banderaTodoBien:

                            for idcito in altirto.id:

                                print(idcito.id)
                                if entornoTabla.validar_sim(idcito.id) == 1:
                                    obtenerCampo = entornoTabla.buscar_sim(idcito.id)
                                    print("ejecutando campos------------------------------------------!!!!!!1")
                                    tablita = []
                                    for dataReferencia in altirto.id:
                                        tablita.append(dataReferencia.id)
                                        obtenerCampo.valor.append(f"{altirto.ccc}:UNIQUE")
                                    # para llegar antes debe validarse que existe la tabla y los campos a los cuales
                                    # se referencia
                                    consola.append(f"Add UNIQUE constraint exitoso en la tabla {alterTable.id}\n")


                                else:
                                    consola.append(
                                        f"42P10	invalid_column_reference, Campo {idcito.id} no encontrado")
                                    exceptions.append("Error Semantico - 42P10- invalid_column_reference-fila-columna")
                                    valor = False

                if banderaTodoBien:
                    print("todo correcto")
                else:
                    print("todo mal")
            else:
                consola.append(f"42P01	undefined_table, no existe la tabla {alterTable.id}")
                exceptions.append(f"Error semantico-42P01- 42P01	undefined_table, no existe la tabla {alterTable.id}-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")
Esempio n. 7
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)