Exemplo n.º 1
0
def AlterTableCheck(nodo, tablaSimbolos):
    global useActual
    base = tablaSimbolos.get(useActual)
    tabla = base.getTabla(nodo.idtabla)
    condicion = nodo.expresion
    opIzq = condicion.opIzq
    idcol = opIzq.valor
    result = False
    global consola
    if nodo.idcons == None:
        result = tabla.modificarCheck(idcol, condicion, idcol + "_check")
        listaConstraint.append(
            TS.Constraints(useActual, nodo.idtabla, idcol + "_check", idcol,
                           "check"))
        consola += "Se agrego el check a la columna " + idcol + " exitosamente \n"
    else:
        result = tabla.modificarCheck(idcol, condicion, nodo.idcons)
        listaConstraint.append(
            TS.Constraints(useActual, nodo.idtabla, nodo.idcons, idcol,
                           "check"))
        consola += "Se agrego el check a la columna " + idcol + " exitosamente \n"
    if result != True:
        listaSemanticos.append(
            Error.ErrorS("Error Semantico",
                         "No se encontró la columna con id " + idcol))
Exemplo n.º 2
0
def AlterTableUnique(nodo, tablaSimbolos):
    global consola
    global useActual
    base = tablaSimbolos.get(useActual)
    tabla = base.getTabla(nodo.idtabla)
    if tabla.modificarUnique(nodo.idcolumna, True, nodo.idconstraint):
        listaConstraint.append(
            TS.Constraints(useActual, nodo.idtabla, nodo.idconstraint,
                           nodo.idcolumna, "unique"))
        consola += "Se agrego el unique a la columna " + nodo.idcolumna + " exitosamente \n"
    else:
        listaSemanticos.append(
            Error.ErrorS("Error Semantico",
                         "No se encontró la columna con id " + nodo.idcolumna))
Exemplo n.º 3
0
def crearTabla(nodo, tablaSimbolos):
    val = nodo.id
    global consola
    if nodo.herencia == False:
        contador = 0
        nueva = TS.SimboloTabla(val, None)

        for col in nodo.columnas:
            pk = False
            default_ = None
            check = None
            null = True
            unique = False

            if isinstance(col, SColumna):
                if col.opcionales != None:
                    for opc in col.opcionales:
                        if isinstance(opc, SOpcionales):
                            if opc.tipo == TipoOpcionales.PRIMARYKEY:
                                pk = True
                            elif opc.tipo == TipoOpcionales.DEFAULT:
                                default_ = opc.valor
                            elif opc.tipo == TipoOpcionales.CHECK:
                                if opc.id == None:
                                    check = {
                                        "id": col.id + "_check",
                                        "condicion": opc.valor
                                    }
                                    listaConstraint.append(
                                        TS.Constraints(useActual, val,
                                                       col.id + "_check",
                                                       col.id, "check"))
                                else:
                                    check = {
                                        "id": opc.id,
                                        "condicion": opc.valor
                                    }
                                    listaConstraint.append(
                                        TS.Constraints(useActual, val, opc.id,
                                                       col.id, "check"))
                            elif opc.tipo == TipoOpcionales.NULL:
                                null = True
                            elif opc.tipo == TipoOpcionales.NOTNULL:
                                null = False
                            elif opc.tipo == TipoOpcionales.UNIQUE:
                                if opc.id == None:
                                    unique = col.id + "_unique"
                                    listaConstraint.append(
                                        TS.Constraints(useActual, val,
                                                       col.id + "_unique",
                                                       col.id, "unique"))
                                else:
                                    unique = opc.id
                                    listaConstraint.append(
                                        TS.Constraints(useActual, val, opc.id,
                                                       col.id, "unique"))
                            colnueva = TS.SimboloColumna(
                                col.id, col.tipo, pk, None, unique, default_,
                                null, check)
                            nueva.crearColumna(col.id, colnueva)
                            if colnueva == None:
                                listaSemanticos.append(
                                    Error.ErrorS(
                                        "Error Semantico",
                                        "Ya existe una columna con el nombre "
                                        + col.id))
                else:
                    auxc = TS.SimboloColumna(col.id, col.tipo, False, False,
                                             False, False, False, False)
                    nueva.crearColumna(col.id, auxc)

            elif isinstance(col, SColumnaUnique):
                for id in col.id:
                    if nueva.modificarUnique(id.valor, True,
                                             id.valor + "_unique") == None:
                        listaSemanticos.append(
                            Error.ErrorS(
                                "Error Semantico",
                                "No se encontró la columna con id " +
                                id.valor))
                    else:
                        listaConstraint.append(
                            TS.Constraints(useActual, val,
                                           id.valor + "_unique", id.valor,
                                           "unique"))
            elif isinstance(col, SColumnaCheck):
                condicion = col.condicion
                opIzq = condicion.opIzq
                idcol = opIzq.valor
                result = False
                if col.id == None:
                    result = nueva.modificarCheck(idcol, col.condicion,
                                                  idcol + "_check")
                    listaConstraint.append(
                        TS.Constraints(useActual, val, idcol + "_check", idcol,
                                       "check"))
                else:
                    result = nueva.modificarCheck(idcol, condicion, col.id)
                    listaConstraint.append(
                        TS.Constraints(useActual, val, col.id, idcol, "check"))
                if result != True:
                    listaSemanticos.append(
                        Error.ErrorS(
                            "Error Semantico",
                            "No se encontró la columna con id " + idcol))
            elif isinstance(col, SColumnaFk):
                for i in range(len(col.idlocal)):
                    idlocal = col.idlocal[i].valor
                    idfk = col.idfk[i].valor
                    columnafk = tablaSimbolos.getColumna(
                        useActual, col.id, idfk)
                    columnalocal = nueva.getColumna(idlocal)

                    if columnafk != None and columnalocal != None:
                        if columnafk.tipo.tipo == columnalocal.tipo.tipo:
                            nueva.modificarFk(idlocal, col.id, idfk)
                            listaFK.append(
                                TS.llaveForanea(useActual, val, col.id,
                                                idlocal, idfk))
                        else:
                            listaSemanticos.append(
                                Error.ErrorS(
                                    "Error Semantico",
                                    "La columna %s y la columna %s no tienen el mismo tipo"
                                    % (idlocal, idfk)))
                    else:
                        listaSemanticos.append(
                            Error.ErrorS("Error Semantico",
                                         "No se encontró la columna"))

            elif isinstance(col, SColumnaPk):
                for id in col.id:
                    if nueva.modificarPk(id.valor) == None:
                        listaSemanticos.append(
                            Error.ErrorS(
                                "Error Semantico",
                                "No se encontró la columna " + id.valor))
            contador += 1

        base = tablaSimbolos.get(useActual)
        base.crearTabla(val, nueva)
        tt = jBase.createTable(useActual, nodo.id, contador)
        if tt == 0:
            consola += "La tabla " + nodo.id + " se creó con éxito. \n"
        elif tt == 1:
            consola += "Error en la operación al crear la tabla " + nodo.id + "\n"
        elif tt == 2:
            consola += "La base de datos " + useActual + " no existe. \n"
        else:
            consola += "La tabla " + nodo.id + " ya existe. \n"