def ejecutar(self): global resultadotxt global cont global tabla global NombreDB for alteracion in self.altertb2: if alteracion.texto and alteracion.texto.lower() == "add": if alteracion.addprop.texto and alteracion.addprop.texto.lower( ) == "column": NuevaColumna = alteracion.addprop.lista try: resultado = func.alterAddColumn( NombreDB, self.iden, NuevaColumna.iden) if resultado == 2: resultadotxt += "No existe la base de datos " + NombreDB + "\n" elif resultado == 3: resultadotxt += "No existe la tabla " + self.iden + "\n" else: BuscarTabla = tabla.BuscarNombre(self.iden) BuscarTabla.coltab += 1 tabla.actualizar(BuscarTabla) NuevoSimboloColumna = TS.Simbolo( cont, NuevaColumna.iden, TS.TIPO.COLUMN, BuscarTabla.id, 0, NuevaColumna.tipo, 0, "", "", False, "", (BuscarTabla.coltab - 1)) cont += 1 tabla.agregar(NuevoSimboloColumna) resultadotxt += "Se agrego la columna " + NuevoSimboloColumna.nombre + " a la tabla " + self.iden + "\n" except: """ERROR SEMANTICO""" if alteracion.texto and alteracion.texto.lower() == "drop column": try: ColumnaABorrar = tabla.BuscarNombre(alteracion.iden) resultado = func.alterDropColumn(NombreDB, self.iden, ColumnaABorrar.numcol) if resultado == 2: resultadotxt += "La base de datos " + NombreDB + " No existe \n" elif resultado == 3: resultadotxt += "No se encontro la tabla " + self.iden + " en la base de datos " + NombreDB + "\n" elif resultado == 4: resultadotxt += "La columna " + ColumnaABorrar.nombre + " Es llave primaria" + "\n" elif resultado == 5: resultadotxt += "La columna " + ColumnaABorrar.nombre + " No existe" + "\n" else: tabla.simbolos.pop(ColumnaABorrar.id) resultadotxt += "Se elimino la columna " + ColumnaABorrar.nombre + " de la tabla " + self.iden + "\n" except: """ERROR SEMANTICO"""
def ejecutar(self): global resultadotxt global cont global tabla global NombreDB if self.altertb2.text.lower() == "add column": try: resultado = func.alterAddColumn(NombreDB, self.iden, self.altertb2.iden) if resultado == 2: resultadotxt += "No existe la base de datos " + NombreDB + "\n" elif resultado == 3: resultadotxt += "No existe la tabla " + self.iden + "\n" else: buscar = tabla.BuscarNombre(self.iden) columna = self.altertb2 buscar.coltab += 1 tabla.actualizar(buscar) NuevaColumna = TS.Simbolo(cont, columna.iden, TS.TIPO.COLUMN, buscar.id, 0, columna.tipo, 0, "", "", False, "", (buscar.coltab - 1)) cont += 1 tabla.agregar(NuevaColumna) resultadotxt += "Se agrego la columna " + self.altertb2.iden + " a la tabla " + self.iden + "\n" except: """ERROR SEMANTICO""" elif self.altertb2.text.lower() == "drop column": try: delcolumna = tabla.BuscarNombre(self.altertb2.iden) resultado = func.alterDropColumn(NombreDB, self.iden, delcolumna.numcol) if resultado == 2: resultadotxt += "La base de datos " + NombreDB + " No existe \n" elif resultado == 3: resultadotxt += "No se encontro la tabla " + self.iden + " en la base de datos " + NombreDB + "\n" elif resultado == 4: resultadotxt += "La columna " + self.altertb2.iden + " Es llave primaria" + "\n" elif resultado == 5: resultadotxt += "La columna " + self.altertb2.iden + " No existe" + "\n" else: tabla.simbolos.pop(delcolumna.id) resultadotxt += "Se elimino la columna " + self.altertb2.iden + " de la tabla " + self.iden + "\n" except: """ERROR SEMANTICO"""
def execute(self, table: SymbolTable, tree): super().execute(table, tree) result_table_name = self.table_name.execute(table, tree) result_field_name = self.field_name.execute(table, tree) # Obtaining all fields because are gonna be needed to get correct field and update indexes later all_fields_symbol = table.get_fields_from_table(result_table_name) column_symbol = next((sym for sym in all_fields_symbol if sym.field_name == result_field_name), None) result = alterDropColumn(table.get_current_db(), result_field_name, column_symbol.field_index) if result == 1: raise Error(0, 0, ErrorType.RUNTIME, '5800: system_error') return False elif result == 2: # log error, old database name does not exists raise Error(0, 0, ErrorType.RUNTIME, '42P04: database_does_not_exists') return False elif result == 3: # log error, table does not exists raise Error(0, 0, ErrorType.RUNTIME, '42P04: table_does_not_exists') return False elif result == 4: # log error, PK cannot be deleted or table to be empty raise Error(0, 0, ErrorType.RUNTIME, '2300: integrity_constraint_violation') return False elif result == 4: # log error, column out of index raise Error(0, 0, ErrorType.RUNTIME, '2300: column_out_of_index') return False else: for field in all_fields_symbol: # Update indexes for higher fields if field.field_index > column_symbol: field.field_index -= 1 table.update(field) # TODO just realized it's needed to check for FKs in other tables # finally delete symbol of column removed table.delete(column_symbol.id) return True
def execute(self, table, tree): super().execute(table, tree) result_table_name = self.table_name.execute(table, tree) result_field_name = self.field_name.execute(table, tree) result = alterDropColumn('db_name_from_st', result_field_name, 'column_number_from_st') if result == 1: # log error on operation return False elif result == 2: # log error, old database name does not exists return False elif result == 3: # log error, table does not exists return False elif result == 4: # log error, PK cannot be deleted or table to be empty return False elif result == 4: # log error, column out of index return False else: return True