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(index, ts, consola, exceptions):

        if ts.validar_sim(index.id1) == -1:
            if index.caso == 1:
                concatena = "["
                for data in index.listaId:
                    concatena += " " + data.id + " "
                concatena += "]"
                simbolo = TS.Simbolo(TS.TIPO_DATO.INDEX, index.id1,
                                     "SIMPLE INDEX",
                                     str(index.id2) + concatena, None)
                ts.agregar_sim(simbolo)
                consola.append(f"\nIndex {index.id1} creado exitosamente")
            elif index.caso == 2:
                concatena = "["
                for data in index.listaId:
                    concatena += " " + data.id + " "
                concatena += "]"
                simbolo = TS.Simbolo(TS.TIPO_DATO.INDEX, index.id1,
                                     "USING HASH",
                                     str(index.id2) + concatena, None)
                ts.agregar_sim(simbolo)
                consola.append(f"\nIndex {index.id1} creado exitosamente")
            elif index.caso == 3:
                concatena = "["
                for data in index.listaId:
                    concatena += " " + data.id + " "
                concatena += "]"
                simbolo = TS.Simbolo(TS.TIPO_DATO.INDEX, index.id1, "UNIQUE",
                                     str(index.id2) + concatena, None)
                ts.agregar_sim(simbolo)
                consola.append(f"\nIndex {index.id1} creado exitosamente")
            elif index.caso == 4:
                concatena = "["

                concatena += str(index.listaId[0])

                concatena += "]"
                simbolo = TS.Simbolo(TS.TIPO_DATO.INDEX, index.id1, "NULLS",
                                     str(index.id2) + concatena, None)
                ts.agregar_sim(simbolo)
                consola.append(f"\nIndex {index.id1} creado exitosamente")
            elif index.caso == 5:
                concatena = "["
                concatena += str(index.listaId)

                concatena += "]"
                simbolo = TS.Simbolo(TS.TIPO_DATO.INDEX, index.id1, "NULLS",
                                     str(index.id2) + concatena, None)
                ts.agregar_sim(simbolo)
                consola.append(f"\nIndex {index.id1} creado exitosamente")
        else:
            consola.append(f"\nYa existe el indice {index.id1} ")
            exceptions.append(
                f"Error Semantico-fdw_invalid_option_index-HV00C-{index.fila},{index.columna}"
            )
Esempio n. 3
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. 4
0
    def ejecutar(elemento, ts, consola, exceptions):

        if ts.validar_sim(elemento.idindex) == 1:

            anterior = ts.buscar_sim(elemento.idindex)

            print(anterior.id, "simon")
            datos = anterior.valor
            print("holahola", datos)
            bandera = False
            i = 0
            concatena = []
            for data in datos:
                if data == elemento.idantiguo:
                    print("sisi ", data)
                    bandera = True
                    break

                i = i + 1

            if not bandera:
                consola.append(
                    f"22005	error_in_assignment,No existe la columna en {elemento.idantiguo} index {elemento.idindex}\n"
                )
                exceptions.append(
                    f"Error semantico-22005-	error_in_assignment-ALTER {elemento.idindex}-{elemento.fila}-{elemento.columna}\n"
                )
            else:
                consola.append(
                    f"\nAlter-{elemento.idindex} ejecutado exitosamente")
                print("aqui elemento nuevo ", elemento.idnuevo)
                print("aqui anterior valor [i] ", anterior.valor[i])

                anterior.valor[i] = elemento.idnuevo

                print("anterior valor :", anterior.valor)
                nueva = anterior.valor
                print("nueva ,", nueva)
                ts.eliminar_sim(elemento.idindex)
                nuevo = TS.Simbolo(anterior.categoria, anterior.id,
                                   anterior.tipo, nueva, anterior.Entorno)
                ts.agregar_sim(nuevo)
                print("agregada")
        else:

            consola.append(
                f"22005	error_in_assignment,No existe {elemento.idindex}\n")
            exceptions.append(
                f"Error semantico-22005-	error_in_assignment-ALTER {elemento.idindex}-{elemento.fila}-{elemento.columna}\n"
            )
Esempio n. 5
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. 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)
Esempio n. 8
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. 9
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. 10
0
    def ejecutar (func,ts):

        entorno = {}
        nuevo = TS.Simbolo(TS.TIPO_DATO.FUNCION,"nombrefuncion","",func,entorno)
        ts.agregar_sim(nuevo)