Exemplo 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"
Exemplo n.º 2
0
def EAltTbAlterAddCol():
    cargarMemoria()
    #llamar la funcion de EDD
    if (len(listaMemoria) > 0):
        res = EDD.alterAddColumn(listaMemoria[0][0], listaMemoria[0][1], "")
        print("Agregando en Tabla:" + listaMemoria[0][1])
        print("\tADD COLUMN:" + listaMemoria[0][2])
        print("\tResultado de la creacion de la columna:" + str(res))
        listaMemoria.pop(0)
Exemplo n.º 3
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)
Exemplo n.º 4
0
 def cmd_alterAddColumn(self, database, table, default, tipo,
                        listaAtributos):
     if existeTabla(table, database) == 1 and existeBase(database) == 1:
         if verificarColumnaDuplicada(default, table, database) == 1:
             self.tabla.agregaraTS('0', default, tipo, table, database, '')
             condb.alterAddColumn(database, table, default)
Exemplo n.º 5
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)
Exemplo n.º 6
0
def procesar_altertable(instr,ts,tc):
    if instr.etiqueta == TIPO_ALTER_TABLE.ADD_CHECK:
        global salida
        if instr.expresionlogica.operador == OPERACION_LOGICA.AND or instr.expresionlogica.operador == OPERACION_LOGICA.OR: 
            print(instr.identificador)
            print(instr.expresionlogica.exp1.exp1.id)
            print(instr.expresionlogica.exp1.exp2.val)
            print(instr.expresionlogica.operador)
            print(instr.expresionlogica.exp2.exp1.id)
            print(instr.expresionlogica.exp2.exp2.val)
        else:
            print(instr.identificador)
            if isinstance(instr.expresionlogica.exp1,ExpresionIdentificador):
                print(instr.expresionlogica.exp1.id)
                buscar = tc.obtenerReturn(useCurrentDatabase,instr.identificador,instr.expresionlogica.exp1.id)
                if buscar == False:
                    print('No Encontrado')
                else:
                    tempA = buscar.listaCons
                    tempA.append(OPCIONES_CONSTRAINT.CHECK)
                    tipo = TC.Tipo(useCurrentDatabase,instr.identificador,instr.expresionlogica.exp1.id,buscar.tipo,buscar.tamanio,"","",tempA)
                    tc.actualizar(tipo,useCurrentDatabase,instr.identificador,instr.expresionlogica.exp1.id)
                    
                    salida = "\nALTER TABLE" 

            elif isinstance(instr.expresionlogica.exp2,ExpresionIdentificador):
                print(instr.expresionlogica.exp2.id)
                buscar = tc.obtenerReturn(useCurrentDatabase,instr.identificador,instr.expresionlogica.exp2.id)
                if buscar == False:
                    print('No Encontrado')
                else:
                    salida = "\nALTER TABLE" 
                    tempA = buscar.listaCons
                    tempA.append(OPCIONES_CONSTRAINT.CHECK)
                    tipo = TC.Tipo(useCurrentDatabase,instr.identificador,instr.expresionlogica.exp2.id,buscar.tipo,buscar.tamanio,"","",tempA)
                    tc.actualizar(tipo,useCurrentDatabase,instr.identificador,instr.expresionlogica.exp2.id)
                    salida = "\nALTER TABLE" 


    elif instr.etiqueta == TIPO_ALTER_TABLE.ADD_FOREIGN:
        buscar = tc.obtenerReturn(useCurrentDatabase,instr.identificador,instr.columnid)
        if buscar == False:
            print('No Encontrado')
        else:
            tempA = buscar.listaCons
            tempA.append(OPCIONES_CONSTRAINT.FOREIGN)
            tipo = TC.Tipo(useCurrentDatabase,instr.identificador,instr.columnid,buscar.tipo,buscar.tamanio,instr.lista_campos,instr.tocolumnid,tempA)
            tc.actualizar(tipo,useCurrentDatabase,instr.identificador,instr.columnid)
            salida = "\nALTER TABLE" 

    elif instr.etiqueta == TIPO_ALTER_TABLE.ADD_CONSTRAINT_CHECK:
        if instr.expresionlogica.operador == TIPO_LOGICA.AND or instr.expresionlogica.operador == TIPO_LOGICA.OR: 
            print(instr.expresionlogica.exp1.exp1.id)
            print(instr.expresionlogica.exp1.exp2.val)
            print(instr.expresionlogica.operador)
            print(instr.expresionlogica.exp2.exp1.id)
            print(instr.expresionlogica.exp2.exp2.val)
            
        else:
            temp = TS.Simbolo(instr.columnid,'CONSTRAINT',0,instr.identificador)
            ts.agregar(temp)
            if type(instr.expresionlogica.exp1) == ExpresionIdentificador:
                buscar = tc.obtenerReturn(useCurrentDatabase,instr.identificador,instr.expresionlogica.exp1.id)
                if buscar == False:
                    print('No Encontrado')
                else:
                    tempA = buscar.listaCons
                    tempA.append(OPCIONES_CONSTRAINT.CHECK)
                    tipo = TC.Tipo(useCurrentDatabase,instr.identificador,instr.expresionlogica.exp1.id,buscar.tipo,buscar.tamanio,"","",tempA)
                    tc.actualizar(tipo,useCurrentDatabase,instr.identificador,instr.expresionlogica.exp1.id)
                    salida = "\nALTER TABLE" 
            else:
                print(instr.expresionlogica.exp1.val)
                print(instr.expresionlogica.exp2.id)
                buscar = tc.obtenerReturn(useCurrentDatabase,instr.identificador,instr.expresionlogica.exp2.id)
                if buscar == False:
                    print('No Encontrado')
                else:
                    tempA = buscar.listaCons
                    tempA.append(OPCIONES_CONSTRAINT.CHECK)
                    tipo = TC.Tipo(useCurrentDatabase,instr.identificador,instr.expresionlogica.exp2.id,buscar.tipo,buscar.tamanio,"","",tempA)
                    tc.actualizar(tipo,useCurrentDatabase,instr.identificador,instr.expresionlogica.exp2.id)
                    salida = "\nALTER TABLE" 

    elif instr.etiqueta == TIPO_ALTER_TABLE.ADD_CONSTRAINT_UNIQUE:
        print(instr.identificador)
        print(instr.columnid)
        if instr.lista_campos != []:
            temp = TS.Simbolo(instr.columnid,'CONSTRAINT',0,instr.identificador)
            ts.agregar(temp)
            
            for datos in instr.lista_campos:
                print(datos.id)
                buscar = tc.obtenerReturn(useCurrentDatabase,instr.identificador,datos.id)
                if buscar == False:
                    print('Encontrado')
                else:
                    tempA = buscar.listaCons
                    tempA.append(OPCIONES_CONSTRAINT.UNIQUE)
                    tipo = TC.Tipo(useCurrentDatabase,instr.identificador,datos.id,buscar.tipo,buscar.tamanio,"","",tempA)
                    tc.actualizar(tipo,useCurrentDatabase,instr.identificador,datos.id)
                    salida = "\nALTER TABLE" 

    elif instr.etiqueta == TIPO_ALTER_TABLE.ADD_CONSTRAINT_FOREIGN:
        temp = TS.Simbolo(instr.columnid,'CONSTRAINT',0,instr.identificador)
        ts.agregar(temp)
        buscar = tc.obtenerReturn(useCurrentDatabase,instr.identificador,instr.tocolumnid)
        if buscar == False:
            print('No Encontrado')
        else:
            tempA = buscar.listaCons
            tempA.append(OPCIONES_CONSTRAINT.FOREIGN)
            tipo = TC.Tipo(useCurrentDatabase,instr.identificador,instr.tocolumnid,buscar.tipo,buscar.tamanio,instr.lista_ref,instr.lista_campos,tempA)
            tc.actualizar(tipo,useCurrentDatabase,instr.identificador,instr.tocolumnid)
            salida = "\nALTER TABLE" 
        

        salida = "\nALTER TABLE" 

    elif instr.etiqueta == TIPO_ALTER_TABLE.ALTER_COLUMN:
        print(instr.identificador)
        if instr.lista_campos != []:
            for lista in instr.lista_campos:
                print(lista.identificador.id)
                print(lista.tipo.id)
                print(lista.par1)

                tipodatoo = TIPO_DE_DATOS.text_ 
                tamanioD = ""
                if lista.tipo.id.upper() == 'TEXT':
                    tipodatoo = TIPO_DE_DATOS.text_ 
                    tamanioD = ""
                elif lista.tipo.id.upper() == 'FLOAT':
                    tipodatoo = TIPO_DE_DATOS.float_ 
                elif lista.tipo.id.upper() == 'INTEGER':
                    tipodatoo = TIPO_DE_DATOS.integer_ 
                    tamanioD = ""
                elif lista.tipo.id.upper() == 'SMALLINT':
                    tipodatoo = TIPO_DE_DATOS.smallint_ 
                elif lista.tipo.id.upper() == 'MONEY':
                    tipodatoo = TIPO_DE_DATOS.money 
                elif lista.tipo.id.upper() == 'BIGINT':
                    tipodatoo = TIPO_DE_DATOS.bigint 
                elif lista.tipo.id.upper() == 'REAL':
                    tipodatoo = TIPO_DE_DATOS.real 
                elif lista.tipo.id.upper() == 'DOUBLE':
                    tipodatoo = TIPO_DE_DATOS.double 
                elif lista.tipo.id.upper() == 'INTERVAL':
                    tipodatoo = TIPO_DE_DATOS.interval 
                    tamanioD = lista.par1
                elif lista.tipo.id.upper() == 'TIME':
                    tipodatoo = TIPO_DE_DATOS.time 
                elif lista.tipo.id.upper() == 'TIMESTAMP':
                    tipodatoo = TIPO_DE_DATOS.timestamp 
                elif lista.tipo.id.upper() == 'DATE':
                    tipodatoo = TIPO_DE_DATOS.date 
                elif lista.tipo.id.upper() == 'VARING':
                    tipodatoo = TIPO_DE_DATOS.varing 
                    tamanioD = lista.par1
                elif lista.tipo.id.upper() == 'VARCHAR':
                    tipodatoo = TIPO_DE_DATOS.varchar 
                    tamanioD = lista.par1
                elif lista.tipo.id.upper() == 'CHAR':
                    tipodatoo = TIPO_DE_DATOS.char 
                    tamanioD = lista.par1
                elif lista.tipo.id.upper() == 'CHARACTER':
                    tipodatoo = TIPO_DE_DATOS.character 
                    tamanioD = lista.par1
                elif lista.tipo.id.upper() == 'DECIMAL':
                    tipodatoo = TIPO_DE_DATOS.decimal 
                    tamanioD = lista.par1
                elif lista.tipo.id.upper() == 'NUMERIC':
                    tipodatoo = TIPO_DE_DATOS.numeric           
                    tamanioD = lista.par1
                elif lista.tipo.id.upper() == 'DOUBLE':
                    tipodatoo = TIPO_DE_DATOS.double_precision

                buscar = tc.obtenerReturn(useCurrentDatabase,instr.identificador,lista.identificador.id)
                if buscar == False:
                    print('No Encontrado')
                else:
                    tipo = TC.Tipo(useCurrentDatabase,instr.identificador,lista.identificador.id,buscar.tipo,tamanioD,buscar.referencia,buscar.tablaRef,buscar.listaCons)
                    tc.actualizar(tipo,useCurrentDatabase,instr.identificador,lista.identificador.id)
                    salida = "\nALTER TABLE"
    
    elif instr.etiqueta == TIPO_ALTER_TABLE.ALTER_COLUMN_NULL:
        #print(instr.identificador,instr.columnid)
        
        buscar = tc.obtenerReturn(useCurrentDatabase,instr.identificador,instr.columnid)
        if buscar == False:
            print('No Encontrado')
        else:
            tempA = buscar.listaCons
            tempA.append(OPCIONES_CONSTRAINT.NULL)
            tipo = TC.Tipo(useCurrentDatabase,instr.identificador,instr.columnid,buscar.tipo,buscar.tamanio,"","",tempA)
            tc.actualizar(tipo,useCurrentDatabase,instr.identificador,instr.columnid)
            salida = "\nALTER TABLE"   

    elif instr.etiqueta == TIPO_ALTER_TABLE.ALTER_COLUMN_NOT_NULL:
        buscar = tc.obtenerReturn(useCurrentDatabase,instr.identificador,instr.columnid)
        if buscar == False:
            print('No Encontrado')
        else:
            tempA = buscar.listaCons
            tempA.append(OPCIONES_CONSTRAINT.NOT_NULL)
            tipo = TC.Tipo(useCurrentDatabase,instr.identificador,instr.columnid,buscar.tipo,buscar.tamanio,"","",tempA)
            tc.actualizar(tipo,useCurrentDatabase,instr.identificador,instr.columnid)
            salida = "\nALTER TABLE"        
    
    elif instr.etiqueta ==  TIPO_ALTER_TABLE.DROP_CONSTRAINT:
        print(instr.identificador)
        if instr.lista_campos != []:
            for datos in instr.lista_campos:
                print(datos.id)
                ts.deleteConstraint(datos.id,instr.identificador)
            salida = "\nALTER TABLE" 

    elif instr.etiqueta ==  TIPO_ALTER_TABLE.RENAME_COLUMN:
        # NO EXISTE :(
        print(instr.identificador)
        print(instr.columnid)
        print(instr.tocolumnid)
        salida = "\nALTER TABLE" 
    
    elif instr.etiqueta == TIPO_ALTER_TABLE.DROP_COLUMN:
        #print('Tabla',instr.identificador)
        if instr.lista_campos != []:
            for datos in instr.lista_campos:
                #print('Columna',datos.id)
                
                pos = tc.getPos(useCurrentDatabase,instr.identificador,datos.id)
                print(pos)
                #result = j.alterDropColumn('world','countries',1)
                #print(result)
                result = 0
                if result == 0:
                    tc.eliminarID(useCurrentDatabase,instr.identificador,datos.id)
                    temp1 = ts.obtener(instr.identificador,useCurrentDatabase)
                    temp2 = TS.Simbolo(temp1.id,temp1.tipo,temp1.valor-1,temp1.ambito)
                    ts.actualizarDB(temp2,instr.identificador)
                    salida = "\nALTER TABLE"            
                    print(salida)

                elif result == 1 :
                    salida = "\nERROR:  internal_error \nSQL state: XX000 "
                elif result == 2 :
                    salida = "\nERROR:  database \"" + str(useCurrentDatabase) +"\" does not exist \nSQL state: 3D000"
                elif result == 3 :
                    salida = "\nERROR:  relation \"" + str(instr.identificador) +"\" does not exist\nSQL state: 42P01"
                elif result == 4 :
                    salida = "\nERROR:  key cannot be removed\nSQL state: 42P04"
                elif result == 5 :
                    salida = "\nERROR:  column out of bounds\nSQL state: 42P05"

                

    elif instr.etiqueta ==  TIPO_ALTER_TABLE.ADD_COLUMN:
        tipodatoo = TIPO_DE_DATOS.text_ 
        tamanioD = ""
        if instr.lista_campos[0].tipo.id.upper() == 'TEXT':
            tipodatoo = TIPO_DE_DATOS.text_ 
            tamanioD = ""
        elif instr.lista_campos[0].tipo.id.upper() == 'FLOAT':
            tipodatoo = TIPO_DE_DATOS.float_ 
        elif instr.lista_campos[0].tipo.id.upper() == 'INTEGER':
            tipodatoo = TIPO_DE_DATOS.integer_ 
            tamanioD = ""
        elif instr.lista_campos[0].tipo.id.upper() == 'SMALLINT':
            tipodatoo = TIPO_DE_DATOS.smallint_ 
        elif instr.lista_campos[0].tipo.id.upper() == 'MONEY':
            tipodatoo = TIPO_DE_DATOS.money 
        elif instr.lista_campos[0].tipo.id.upper() == 'BIGINT':
            tipodatoo = TIPO_DE_DATOS.bigint 
        elif instr.lista_campos[0].tipo.id.upper() == 'REAL':
            tipodatoo = TIPO_DE_DATOS.real 
        elif instr.lista_campos[0].tipo.id.upper() == 'DOUBLE':
            tipodatoo = TIPO_DE_DATOS.double 
        elif instr.lista_campos[0].tipo.id.upper() == 'INTERVAL':
            tipodatoo = TIPO_DE_DATOS.interval 
            tamanioD = instr.lista_campos[0].par1
        elif instr.lista_campos[0].tipo.id.upper() == 'TIME':
            tipodatoo = TIPO_DE_DATOS.time 
        elif instr.lista_campos[0].tipo.id.upper() == 'TIMESTAMP':
            tipodatoo = TIPO_DE_DATOS.timestamp 
        elif instr.lista_campos[0].tipo.id.upper() == 'DATE':
            tipodatoo = TIPO_DE_DATOS.date 
        elif instr.lista_campos[0].tipo.id.upper() == 'VARING':
            tipodatoo = TIPO_DE_DATOS.varing 
            tamanioD = instr.lista_campos[0].par1
        elif instr.lista_campos[0].tipo.id.upper() == 'VARCHAR':
            tipodatoo = TIPO_DE_DATOS.varchar 
            tamanioD = instr.lista_campos[0].par1
        elif instr.lista_campos[0].tipo.id.upper() == 'CHAR':
            tipodatoo = TIPO_DE_DATOS.char 
            tamanioD = instr.lista_campos[0].par1
        elif instr.lista_campos[0].tipo.id.upper() == 'CHARACTER':
            tipodatoo = TIPO_DE_DATOS.character 
            tamanioD = instr.lista_campos[0].par1
        elif instr.lista_campos[0].tipo.id.upper() == 'DECIMAL':
            tipodatoo = TIPO_DE_DATOS.decimal 
            tamanioD = instr.lista_campos[0].par1
        elif instr.lista_campos[0].tipo.id.upper() == 'NUMERIC':
            tipodatoo = TIPO_DE_DATOS.numeric           
            tamanioD = instr.lista_campos[0].par1 
        elif instr.lista_campos[0].tipo.id.upper() == 'DOUBLE':
            tipodatoo = TIPO_DE_DATOS.double_precision
        
        if instr.lista_campos != []:
            for datos in instr.lista_campos:
                result = j.alterAddColumn(str(useCurrentDatabase),str(instr.identificador),1)
                if result == 0:
                    buscar = tc.obtenerReturn(useCurrentDatabase,instr.identificador,datos.identificador.id)
                    if buscar == False:
                        tipo = TC.Tipo(useCurrentDatabase,instr.identificador,datos.identificador.id,tipodatoo,tamanioD,"","",[])
                        tc.agregar(tipo)
                    else:
                        print('New')
                    
                    temp1 = ts.obtener(instr.identificador,useCurrentDatabase)
                    temp2 = TS.Simbolo(temp1.id,temp1.tipo,temp1.valor+1,temp1.ambito)
                    ts.actualizarDB(temp2,instr.identificador)
                    salida = "\nALTER TABLE"            

                elif result == 1 :
                    salida = "\nERROR:  internal_error \nSQL state: XX000 "
                elif result == 2 :
                    salida = "\nERROR:  database \"" + str(useCurrentDatabase) +"\" does not exist \nSQL state: 3D000"
                elif result == 3 :
                    salida = "\nERROR:  relation \"" + str(instr.tipo_id) +"\" does not exist\nSQL state: 42P01"
Exemplo n.º 7
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
            }

        # creo una nueva columna, agregar el length
        newColumn = Column(self.columnName, self.columnType['type'],
                           self.columnType['default'],
                           self.columnType['length'])

        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
            }

        table.createColumn(newColumn)

        result = admin.alterAddColumn(db_name, tableName,
                                      self.columnType['default'])

        if result == 0:
            return 'se inserto correctamente la columna: ' + self.columnName + ' en la tabla: ' + tableName
        elif result == 1:
            return {
                'Error': 'Error al ejecutar la operacion add 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
            }
        else:
            return {
                'Error': 'Error desconocido en el add column',
                'Fila': self.row,
                'Columna': self.column
            }