Ejemplo n.º 1
0
def AlterAddColumn(nodo, tablaSimbolos):
    global consola
    global useActual
    base = tablaSimbolos.get(useActual)
    tabla = base.getTabla(nodo.idtabla)
    for col in nodo.listaColumnas:
        auxcol = TS.SimboloColumna(col.idcolumna, col.tipo, False, None, None,
                                   None, True, None)
        if tabla.crearColumna(col.idcolumna, auxcol):
            b = jBase.alterAddColumn(useActual, nodo.idtabla, col.idcolumna)
            if b == 0:
                consola += "La columna " + col.idcolumna + " se agregó a la tabla " + nodo.idtabla + " \n"
            elif b == 1:
                listaSemanticos.append(
                    Error.ErrorS("Error Semantico", "Error en la operacion."))
            elif b == 2:
                listaSemanticos.append(
                    Error.ErrorS("Error Semantico",
                                 "Error la base " + useActual + "no existe"))
            elif b == 3:
                listaSemanticos.append(
                    Error.ErrorS(
                        "Error Semantico",
                        "Error la tabla " + nodo.idtabla + "no existe"))
        else:
            consola += "Error al crear la columna " + col.idcolumna + " \n"
Ejemplo n.º 2
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"