Beispiel #1
0
 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"""
Beispiel #2
0
    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!']
Beispiel #3
0
    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))
Beispiel #4
0
 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"""
Beispiel #5
0
 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
Beispiel #6
0
    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
Beispiel #7
0
    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