def ejecutar(self, ent: Entorno): if (ent.getDataBase() == None): variables.consola.insert( INSERT, "ERROR >> En la instrucción Drop Table " + self.id + ", actualmente no hay ninguna base de datos en uso\n") reporteerrores.append( Lerrores( "Error Semántico", "En la instrucción Drop Table " + self.id + ", actualmente no hay ninguna base de datos en uso", "", "")) else: resultado = DBMS.dropTable(ent.getDataBase(), self.id) if (resultado == 0): ent.eliminarSimbolo(self.id + "_" + ent.getDataBase()) ent.eliminarSymTabla(self.id) variables.consola.insert( INSERT, "La tabla: (" + self.id + ") ha sido eliminada con exito\n") else: variables.consola.insert( INSERT, "ERROR >> En la instrucción Drop Table " + self.id + ", La tabla a eliminar NO EXISTE\n") reporteerrores.append( Lerrores( "Error Semántico", "En la instrucción Drop Table " + self.id + ", La tabla a eliminar NO EXISTE", "", ""))
def ejecutar(self, ent:Entorno): if (ent.getDataBase()==None): return "ERROR >> En la instrucción Drop Table "+self.id+", actualmente no hay ninguna base de datos en uso" else: resultado = DBMS.dropTable(ent.getDataBase(),self.id) if (resultado==0): ent.eliminarSimbolo(self.id+"_"+ent.getDataBase()) return "La tabla: ("+self.id+") ha sido eliminada con exito" else: return "ERROR >> En la instrucción Drop Table "+self.id+", La tabla a eliminar NO EXISTE"
def ejecutar(self, ent: Entorno): dbActual = ent.getDataBase() if dbActual != None: tablaAlterada: Simbolo = ent.buscarSimbolo(self.tabla + "_" + dbActual) if tablaAlterada != None: for opcionX in self.opciones: if opcionX.tipoAlter == TipoAlter.ADDCOLUMNA: addColumna: AddColumn = opcionX res = DBMS.alterAddColumn(dbActual, self.tabla, None) if res == 0: nuevaCol: Simbolo = Simbolo( addColumna.tipo, addColumna.id) nuevaCol.tabla = self.tabla nuevaCol.baseDatos = dbActual tablaAlterada.valor.append(nuevaCol) e = ent.editarSimbolo(self.tabla + "_" + dbActual, tablaAlterada) if e == "ok": variables.consola.insert( INSERT, "Se agregó nueva columna '" + str(addColumna.id) + "' a la tabla '" + str(self.tabla) + "'\n") else: reporteerrores.append( Lerrores( "Error Semantico", "No se ha podido agregar la columna '" + addColumna.id + "' a la tabla " + self.tabla, 0, 0)) variables.consola.insert( INSERT, "No se ha podido agregar la columna '" + addColumna.id + "' a la tabla ") elif opcionX.tipoAlter == TipoAlter.ADDCHECK: #formato: C_database_tabla_nombreColumna addCheck: AddCheck = opcionX nombreColCheck: str = str( addCheck.condicion.exp1.valor) for col in tablaAlterada.valor: if col.nombre == nombreColCheck: idCheck: str = str("C_" + dbActual + "_" + self.tabla + "_" + col.nombre) if addCheck.constraint != None: idCheck += "_" + str(addCheck.constraint) col.atributos.update({'check': idCheck}) nuevoSym: Simbolo = Simbolo( TipoSimbolo.CONSTRAINT_CHECK, idCheck, addCheck.condicion) nuevoSym.baseDatos = dbActual nuevoSym.tabla = self.tabla ent.nuevoSimbolo(nuevoSym) variables.consola.insert( INSERT, "Condición check agegada en columna '" + str(col.nombre) + "' en la tabla '" + str(self.tabla) + "'\n") break elif opcionX.tipoAlter == TipoAlter.ADDUNIQUE: addUnique: AddUnique = opcionX for add in addUnique.columnas: for col in tablaAlterada.valor: if col.nombre == add.valor: idUnique: str = str("U_" + dbActual + "_" + self.tabla + "_" + col.nombre) if addUnique.constraint != None: idUnique += "_" + str( addUnique.constraint) col.atributos.update({'unique': idUnique}) nuevoSym: Simbolo = Simbolo( TipoSimbolo.CONSTRAINT_UNIQUE, idUnique, col.nombre) nuevoSym.baseDatos = dbActual nuevoSym.tabla = self.tabla ent.nuevoSimbolo(nuevoSym) variables.consola.insert( INSERT, "Condición Unique agregada en columna '" + str(col.nombre) + "' en la tabla '" + str(self.tabla) + "'\n") elif opcionX.tipoAlter == TipoAlter.ADDFOREIGN: addForeign: AddForeign = opcionX tablaReferenciada: Simbolo = ent.buscarSimbolo( addForeign.referenceTable + "_" + dbActual) if tablaReferenciada != None: if len(addForeign.colAddForeign) == len( addForeign.colReferences): idFk: str = str("FK_" + dbActual + "_" + self.tabla + "_" + addForeign.referenceTable) if addForeign.constraint != None: idFk += "_" + addForeign.constraint n: Simbolo = Simbolo( TipoSimbolo.CONSTRAINT_FOREIGN, idFk) n.baseDatos = dbActual n.tabla = self.tabla ent.nuevoSimbolo(n) variables.consola.insert( INSERT, "Llave Foránea referenciando a tabla '" + str(addForeign.referenceTable) + "' en la tabla '" + str(self.tabla) + "'\n") else: variables.consola.insert( INSERT, "La cantidad de columnas no coinciden en llave foránea de la tabla '" + str(self.tabla) + "'\n") reporteerrores.append( Lerrores( "Error Semántico", "La cantidad de columnas no coinciden en llave foránea de tabla '" + self.tabla + "'", "", "")) elif opcionX.tipoAlter == TipoAlter.ADDNULL: addNulo: AddNull = opcionX for col in tablaAlterada.valor: if col.nombre == addNulo.columna: if addNulo.nulo: #setea a nulos col.atributos.update({'null': True}) else: col.atributos.update({'not null': True}) break elif opcionX.tipoAlter == TipoAlter.DROPCONSTRAINT: #formato : CONSTRAINT_database_tabla_nombreCol_idConstraint dropConstr: DropConstraint = opcionX opcConstraint = ["C", "U", "F", "P"] constr = ['check', 'unique', 'foreign', 'primary'] encontrado = False concat: str = "_" + dbActual + "_" + self.tabla + "_" for col in tablaAlterada.valor: for x in range(len(opcConstraint)): idCo: str = opcConstraint[ x] + concat + col.nombre + "_" + dropConstr.constraint r: Simbolo = ent.buscarSimbolo(idCo) if r != None: encontrado = True ent.eliminarSimbolo(idCo) del col.atributos[constr[x]] variables.consola.insert( INSERT, "El constraint '" + str(dropConstr.constraint) + "' ha sido eliminado\n") break if not encontrado: variables.consola.insert( INSERT, "El constraint '" + str(dropConstr.constraint) + "' no existe'\n") reporteerrores.append( Lerrores( "Error Semántico", "El constraint '" + str(dropConstr.constraint) + "' no existe", "", "")) elif opcionX.tipoAlter == TipoAlter.ALTERTYPE: alterTipo: AlterType = opcionX for col in tablaAlterada.valor: if col.nombre == alterTipo.columna: col.tipo = alterTipo.nuevoTipo variables.consola.insert( INSERT, "El tipo de la columna '" + str(col.nombre) + "' de la tabla '" + self.tabla + "' cambió a '" + col.tipo.tipo + "'\n") return elif opcionX.tipoAlter == TipoAlter.RENAMECOLUMN: rCol: RenameColumn = opcionX for col in tablaAlterada.valor: if col.nombre == rCol.oldColumn: col.nombre = rCol.newColumn variables.consola.insert( INSERT, "El nombre de la columna '" + str(rCol.oldColumn) + "' de la tabla '" + self.tabla + "' cambió a '" + str(rCol.newColumn) + "'\n") return elif opcionX.tipoAlter == TipoAlter.DROPCHECK: dChe: DropCheck = opcionX for col in tablaAlterada.valor: idd = "C_" + dbActual + "_" + self.tabla + "_" + str( col.nombre) + "_" + dChe.iden r: Simbolo = ent.buscarSimbolo(idd) if r != None: ent.eliminarSimbolo(idd) variables.consola.insert( INSERT, "Se ha eliminado la condición check '" + str(dChe.iden) + "'\n") break elif opcionX.tipoAlter == TipoAlter.DROPCOLUMN: index = [] dropC: DropColumns = opcionX for drop in dropC.columnas: for x in range(len(tablaAlterada.valor)): if tablaAlterada.valor[x].nombre == drop.valor: r = DBMS.alterDropColumn( dbActual, self.tabla, x) if r == 0: for z in tablaAlterada.valor[ x].atributos.values(): ent.eliminarSimbolo(z) variables.consola.insert( INSERT, "Se ha eliminado la columna '" + str(drop.valor) + "' de la tabla '" + str(self.tabla) + "'\n") index.append(x) for g in index: tablaAlterada.valor.pop(g) ent.editarSimbolo(self.tabla + "_" + dbActual, tablaAlterada)