def ejecutar(self): global resultadotxt global cont global tabla global contambito try: resultado = func.createDatabase(self.iden) if resultado == 0: resultadotxt += "Se creo la base de datos " + self.iden + "\n" NuevoSimbolo = TS.Simbolo(cont, self.iden, TS.TIPO.DATABASE, contambito) cont += 1 contambito += 1 tabla.agregar(NuevoSimbolo) elif resultado == 2 and not self.replacedb: resultadotxt += "Ya existe la base de datos " + self.iden + "\n" elif resultado == 2 and self.replacedb: func.dropDatabase(self.iden) buscar = tabla.BuscarNombre(self.iden) tabla.simbolos.pop(buscar.id) func.createDatabase(self.iden) NuevoSimbolo = TS.Simbolo(cont, self.iden, TS.TIPO.DATABASE, contambito) cont += 1 contambito += 1 tabla.agregar(NuevoSimbolo) resultadotxt += "Se reemplazo la base de datos: " + self.iden + "\n" else: resultadotxt += "Error al crear base de datos: " + self.iden + "\n" except: """ERROR SEMANTICO"""
def execute(self, table: SymbolTable, tree): super().execute(table, tree) #result_name = self.name.execute(table, tree) #result_owner = self.owner.execute(table, tree) if self.owner else None # Owner seems to be stored only to ST #result_mode = self.owner.mode(table, tree) if self.mode else 6 # Change to 1 when default mode from EDD available result_name = self.name.execute(table, tree) result_owner = self.owner result_mode = self.mode result = 0 if self.replace: dropDatabase(result_name) #if result_mode == 6: # add more ifs when modes from EDD available result = createDatabase(result_name) if result == 1: # log error on operation raise Error(0, 0, ErrorType.RUNTIME, '5800: system_error') return False elif result == 2 and self.exists == False: # log error because db already exists raise Error(0, 0, ErrorType.RUNTIME, '42P04: duplicate_database') return False else: #return table.add(DatabaseSymbol(result_name, result_owner, result_mode)) #chaged by loadDatabases table.LoadDataBases() return ['Database \'' + result_name + '\' was created successfully!']
def execute(self, table: SymbolTable, tree): super().execute(table, tree) # result_name = self.name.execute(table, tree) result_name = self.name result_owner = self.owner.execute( table, tree ) if self.owner else None # Owner seems to be stored only to ST result_mode = self.mode( table, tree ) if self.mode is not None else 6 # Change to 1 when default mode available if self.replace: dropDatabase(result_name) result = 0 if result_mode == 6: # add more ifs when modes from EDD available result = createDatabase(result_name) if result == 1: # log error on operation raise Error(0, 0, ErrorType.RUNTIME, '5800: system_error') return False elif result == 2: # log error because db already exists raise Error(0, 0, ErrorType.RUNTIME, '42P04: duplicate_database') return False else: return table.add( DatabaseSymbol(result_name, result_owner, result_mode))
def ejecutar(self): global resultadotxt global cont global tabla try: nuevadb = func.createDatabase(self.iden) if(nuevadb == 0): resultadotxt += "Se creo la base de datos: " + self.iden + "\n" simbolo = TS.Simbolo(cont,TS.TIPO.DATABASE, self.iden, 0) cont+=1 tabla.agregar(simbolo) if(nuevadb == 2): resultadotxt += "Ya existe la base de datos: " + self.iden + "\n" else: resultadotxt += "Error al crear base de datos: " + self.iden + "\n" except: """ERROR SEMANTICO"""
def execute(self, ts_global): ##print('----> EJECUTAR CREATE DATABASE') mensaje = '\n****CREATE DATABASE****\n' nueva_base = TS.Simbolo(self.id, TS.tipo_simbolo.DATABASE, None, None, None, None, None, None) existe = False # bandera para comprobar si existe bases = ts_global.get_databases() # obtiene todas las bases de datos for base in bases: # recorro la lista de bases de datos if base.id == self.id: # y verifico si existe existe = True # si existe, cambio el valor de la bandera break # y salgo de la comprobación if not self.ifnot: # si no viene "IF NOT EXISTS", se crea/reemplaza if self.replace: # si viene "OR REPLACE" if existe: # si existe la base de datos ts_global.drop_db(self.id) # se elimina, luego ts_global.agregar_simbolo( nueva_base) # se agrega el nuevo símbolo j.createDatabase(self.id) mensaje = mensaje + '\tBase de datos creada correctamente' return mensaje else: # si no viene "OR REPLACE" if existe: # si existe, es un error nuevo_error = E.Errores( 'Semántico.', 'Ya existe una base de datos con el nombre \'' + self.id + '\'.') mensaje = mensaje + '\tYa existe una base de datos con el nombre \'' + self.id + '\'' return mensaje #ls_error.append(nuevo_error) #se agrega el error a la lista else: # si no existe ts_global.agregar_simbolo( nueva_base) # se agrega el nuevo símbolo j.createDatabase(self.id) mensaje = mensaje + '\tBase de datos creada correctamente' return mensaje else: # si sí viene "IF NOT EXISTS" if self.replace: # si viene "OR REPLACE", es error nuevo_error = E.Errores( 'Semántico.', 'No pueden venir conjuntamente las cláusulas \'OR REPLACE\' e \'IF NOT EXISTS\'.' ) mensaje = mensaje + '\tNo pueden venir conjuntamente las cláusulas \'OR REPLACE\' e \'IF NOT EXISTS\'.' return mensaje #ls_error.append(nuevo_error) #se agrega el error a la lista else: # si no viene "OR REPLACE" if not existe: # si no existe la base de datos ts_global.agregar_simbolo( nueva_base ) # se agrega el nuevo símbolo, de lo contrario no se hace nada j.createDatabase(self.id) mensaje = mensaje + '\tBase de datos creada correctamente' return mensaje
def execute(self, table, tree): super().execute(table, tree) result_name = self.name.execute(table, tree) result_owner = self.owner.execute(table, tree) if self.owner else None # Owner seems to be stored only to ST result_mode = self.owner.mode(table, tree) if self.mode else 6 # Change to 1 when default mode from EDD available if self.replace: dropDatabase(result_name) result = 0 if result_mode == 6: # add more ifs when modes from EDD available result = createDatabase(result_name) if result == 1: # log error on operation return False elif result == 2: # log error because db already exists return False else: return True
def ejecutar(self, tabalSimbolos, listaErrores): bandera = tabalSimbolos.comprobarNombreBaseDatos(self.identificador) if bandera == 1 and self.reemplazar == None: if self.si_no_existe == None: errorEnviar = errorReportar.ErrorReportar( self.fila, self.columna, "Ejecucion", "Error 42P04") listaErrores.append(errorEnviar) return else: #si es un id repetido pero dice crear si no existe return elif bandera == 1 and self.reemplazar != None: #si es un id repetido pero hay que eliminarlo y reemplazarlo #eliminarlo respuesta = jsonMode.dropDatabase(self.identificador) if respuesta == 0: tabalSimbolos.eliminarBaseDatos(self.identificador) elif respuesta == 1: errorEnviar = errorReportar.ErrorReportar( self.fila, self.columna, "Ejecucion", "Error en la operacion") listaErrores.append(errorEnviar) return elif respuesta == 2: errorEnviar = errorReportar.ErrorReportar( self.fila, self.columna, "Ejecucion", "Error 3D000, no existe la base de datos") listaErrores.append(errorEnviar) return print( "si es un id repetido pero hay que eliminarlo y reemplazarlo " + str(respuesta)) #reemplazarlo respuesta2 = jsonMode.createDatabase(self.identificador) if respuesta2 == 0: dbGuardar = simboloBaseDatos.SimboloBaseDatos( self.identificador) for i in range(len(self.opciones)): try: if self.opciones[i].nombreNodo == "OWNER": print(self.opciones[i + 2].valor) dbGuardar.setearPropietario(self.opciones[i + 2].valor) elif self.opciones[i].nombreNodo == "modo": print(self.opciones[i].hijos[3]) dbGuardar.setearModo(self.opciones[i].hijos[3]) except: pass tabalSimbolos.guardarBaseDatos(dbGuardar) else: errorEnviar = errorReportar.ErrorReportar( self.fila, self.columna, "Ejecucion", "Error 42P04") listaErrores.append(errorEnviar) return print("reemplazo " + str(respuesta)) else: #Llamar funcion de ingeniero respuesta = jsonMode.createDatabase(self.identificador) if respuesta == 0: dbGuardar = simboloBaseDatos.SimboloBaseDatos( self.identificador) for i in range(len(self.opciones)): try: if self.opciones[i].nombreNodo == "OWNER": print(self.opciones[i + 2].valor) dbGuardar.setearPropietario(self.opciones[i + 2].valor) elif self.opciones[i].nombreNodo == "modo": print(self.opciones[i].hijos[3]) dbGuardar.setearModo(self.opciones[i].hijos[3]) except: pass tabalSimbolos.guardarBaseDatos(dbGuardar) else: errorEnviar = errorReportar.ErrorReportar( self.fila, self.columna, "Ejecucion", "Error 42P04") listaErrores.append(errorEnviar) return pass