Esempio n. 1
0
 def cmd_alterDropColumn(self, database, table, nombreColumna):
     numeroColumna = self.tabla.devolverPosicionCampos(
         database, table, nombreColumna)
     if numeroColumna > 1:
         if existeCampo(nombreColumna, table, database) == 1:
             self.tabla.eliminarCampo_TS(database, table, nombreColumna)
             condb.alterDropColumn(database, table, numeroColumna)
         print('verificar MEtodo plox')
Esempio n. 2
0
    def createColumnTable(self, database: Database, table: Table,
                          column: Column, noLine, noColumn):
        """
        Method to create a column in table

        :param database: Table database
        :param table: The name of table
        :param column: Number of columns
        :param noLine: The instruction line
        :param noColumn: The instruction column
        :return: Returns nothing
        """
        dbStatement = jsonMode.alterAddColumn(database.name, table.name,
                                              column.default)

        if dbStatement == 0:
            if not self.searchColumn(table, column.name):
                if len(table.columns) > 0:
                    column.number = table.columns[-1].number + 1

                table.columns.append(column)
                self.writeFile()
                print('Table updated successfully')
                return

            jsonMode.alterDropColumn(database.name, table.name, column.number)
            desc = f": Column {column.name} already exists"
            ErrorController().addExecutionError(29, 'Execution', desc, noLine,
                                                noColumn)

        elif dbStatement == 1:
            desc = f": Can't update table {table.name}"
            ErrorController().addExecutionError(34, 'Execution', desc, noLine,
                                                noColumn)

        elif dbStatement == 2:
            desc = f": Database {database.name} does not exist"
            ErrorController().addExecutionError(35, 'Execution', desc, noLine,
                                                noColumn)

        elif dbStatement == 3:
            desc = f": Table {table.name} does not exist"
            ErrorController().addExecutionError(27, 'Execution', desc, noLine,
                                                noColumn)
Esempio n. 3
0
def EAltTbAlterDropCol():
    cargarMemoria()
    #llamar la funcion de EDD
    if (len(listaMemoria) > 0):
        res = EDD.alterDropColumn(listaMemoria[0][0], listaMemoria[0][1],
                                  listaMemoria[0][3])
        print("Eliminando en Tabla:" + listaMemoria[0][1])
        print("\tDROP COLUMN:" + listaMemoria[0][2])
        print("\tResultado de la eliminacion de la columna:" + str(res))
        listaMemoria.pop(0)
Esempio n. 4
0
    def execute(self, environment,tableName):
        if not isinstance(self.columnName,str):
            return {'Error': 'El nombre indicado de la columna no es una cadena.', 'Fila':self.row, 'Columna': self.column }
        if not isinstance(tableName,str):
            return {'Error': 'El nombre indicado de la tabla no es una cadena.', 'Fila':self.row, 'Columna': self.column }
        
        db_name = environment.getActualDataBase()
        database = environment.readDataBase(db_name)
        table = database.getTable(tableName)
        
        if table == None:
            return {'Error': 'la tabla: '+ tableName +'no existe en la base de datos: '+db_name, 'Fila':self.row, 'Columna': self.column }
        
        index = -1
        for i in range(len(table.columns)):
            if table.columns[i].name == self.columnName:
                index = i
                break
        if index == -1:
             return {'Error': 'la columna: '+ self.columnName +'no existe en la tabla: '+tableName, 'Fila':self.row, 'Columna': self.column }
        
        result = admin.alterDropColumn(db_name, tableName, index)

        if result == 0:
            for item in table.constraint:
                if item['type'] == 'primary':
                    if item['value'] == self.columnName:
                        return {'Error': 'la columna: '+ self.columnName +'no puede eliminarse ya que es una llave primaria de la tabla', 'Fila':self.row, 'Columna': self.column }
              
            columnDelete = table.deleteConstraint(self.columnName)      
            while columnDelete == True:
                columnDelete = table.deleteConstraint(self.columnName)              

            table.deleteColumn(self.columnName)
            #falta borrar los checks
            return 'se elimino correctamente la columna: '+self.columnName+' en la tabla: '+tableName
        elif result == 1:
            return {'Error': 'Error al ejecutar la operacion drop column', 'Fila':self.row, 'Columna': self.column }
        elif result == 2:
            return {'Error': 'La base de datos a la que hace referencia no existe', 'Fila':self.row, 'Columna': self.column }
        elif result == 3:
            return {'Error': 'La tabla: '+tableName+' no existe', 'Fila':self.row, 'Columna': self.column }
        elif result == 4:
             return {'Error': 'Llave no puede eliminarse o tabla quedarse sin columnas', 'Fila':self.row, 'Columna': self.column }
        elif result == 5:
            return {'Error': 'Columna fuera de limites', 'Fila':self.row, 'Columna': self.column }
        else:
            return {'Error': 'Error desconocido en el drop column', 'Fila':self.row, 'Columna': self.column }
Esempio n. 5
0
    def deleteColumn(self, database: Database, table: Table, column: Column,
                     noLine, noColumn):
        """
        Method to remove a column in table

        :param database: Table database
        :param table: The name of table
        :param column: Number of columns
        :param noLine: The instruction line
        :param noColumn: The instruction column
        :return: Returns nothing
        """
        dbStatement = jsonMode.alterDropColumn(database.name, table.name,
                                               column.number)

        if dbStatement == 0:
            if column:
                table.remove(column)
                self.writeFile()
                print('Column deleted successfully')
                return

            desc = f": Column {column.name} does not exist"
            ErrorController().addExecutionError(26, 'Execution', desc, noLine,
                                                noColumn)

        elif dbStatement == 1:
            desc = f": Can't update Table {table.name}"
            ErrorController().addExecutionError(34, 'Execution', desc, noLine,
                                                noColumn)

        elif dbStatement == 2:
            desc = f": Database {database.name} does not exist"
            ErrorController().addExecutionError(35, 'Execution', desc, noLine,
                                                noColumn)

        elif dbStatement == 3:
            desc = f": Table {table.name} does not exist"
            ErrorController().addExecutionError(27, 'Execution', desc, noLine,
                                                noColumn)

        elif dbStatement == 4:
            print('Out of range column')
Esempio n. 6
0
    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)