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"
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"