示例#1
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))
示例#2
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"""
示例#3
0
文件: create.py 项目: edgarJ91/tytus
    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!']
示例#4
0
 def ejecutar(self):
     global resultadotxt
     global cont
     global tabla
     try:
         resultado = func.dropDatabase(self.iden)
         if (resultado == 2):
             resultadotxt += "No existe la base de datos " + self.iden + "\n"
         else:
             BaseDatos = tabla.BuscarNombre(self.iden)
             eliminar = []
             for simbolo in tabla.simbolos:
                 if tabla.simbolos[
                         simbolo].ambito == BaseDatos.id and not tabla.simbolos[
                             simbolo].tipo == TS.TIPO.DATABASE:
                     TablaExistente = tabla.simbolos[simbolo]
                     eliminar.append(TablaExistente)
                     for simbolo2 in tabla.simbolos:
                         if tabla.simbolos[
                                 simbolo2].ambito == TablaExistente.id and not tabla.simbolos[
                                     simbolo2].tipo == TS.TIPO.DATABASE and not tabla.simbolos[
                                         simbolo2].tipo == TS.TIPO.TABLE:
                             eliminar.append(tabla.simbolos[simbolo2])
             for element in eliminar:
                 tabla.simbolos.pop(element.id)
             tabla.simbolos.pop(BaseDatos.id)
             resultadotxt += "Se elimino la base de datos " + self.iden + "\n"
     except:
         """ERROR SEMANTICO"""
示例#5
0
文件: drop.py 项目: jossiebk/tytus
    def execute(self, table: SymbolTable, tree):
        super().execute(table, tree)
        result_name = self.name.execute(table, tree)

        result = 0
        if self.if_exists:
            dropDatabase(result_name)
            return "Database " + str(result_name) + " has been dropped"
        else:
            result = dropDatabase(result_name)
            if result == 0:  # successful operation
                table.drop_data_base(result_name)
                return "Database " + str(result_name) + " has been dropped."
            elif result == 1:  # operation error
                raise Error(0, 0, ErrorType.RUNTIME, '58000: system_error')
            elif result == 2:  # database does not exist.
                raise Error(0, 0, ErrorType.RUNTIME, '42P04: database_does_not_exists')
示例#6
0
    def execute(self,enviroment = None):
        #Se debe llamar al metodo showDatabases() -> list:
        if(self.hijos[1].hijos[0].nombreNodo == "DATABASE"):
        ######### DATABASES
            use_if_exists = len(self.hijos[1].hijos) == 3
            dbname = ""
            if use_if_exists:
                dbname = self.hijos[1].hijos[2].valor 
            else:
                dbname = self.hijos[1].hijos[1].valor 
            resultado = dropDatabase(dbname)
            if resultado == 0:
                tc.deleteDatabase(dbname)
                return {"Code":"0000","Message": "The database  <"+dbname+"> has been successfully dropped"}
            elif resultado == 1:
                return {"Code":"42602","Message": "invalid_name: The identifier <"+dbname+"> is incorrect"}
            elif resultado == 2:
                return {"Code":"42P12","Message": "invalid_database_definition: The database <"+dbname+"> doesn´t exists"}
        elif(self.hijos[1].hijos[0].nombreNodo == "TABLE"):
        ######### TABLES
            table_name = self.hijos[1].hijos[1].valor
            with open('src/Config/Config.json') as file:
                config = json.load(file)
                dbUse = config['databaseIndex']
                if dbUse == None:
                    return {"Code":"42P12","Message": "invalid_database_definition: There is no selected database "}              
                else:
                    dbUse = config['databaseIndex'].upper()
                    res = dropTable(dbUse,table_name)
                    if res == 0:
                        tc.drop_table(dbUse,table_name)
                        return {"Code":"0000","Message": "The table  <"+table_name+"> has been successfully dropped"}
                    elif res == 1:
                        return {"Code":"42602","Message": "invalid_name: The identifier <"+dbUse+"> is incorrect"}
                    elif res == 2:
                        return {"Code":"42P12","Message": "invalid_database_definition: The database <"+dbUse+"> doesn´t exists"}
                    elif res == 3:
                        return {"Code":"42P01","Message": "undefined_table: The table <"+table_name+"> doesn´t exists"}

        elif(self.hijos[1].hijos[0].nombreNodo == "INDEX"):
            identificador = self.hijos[1].hijos[1].valor                  
            with open('src/Config/Config.json') as file:
                config = json.load(file)
                dbUse = config['databaseIndex']
                if dbUse == None:
                    return {"Code":"42P12","Message": "invalid_database_definition: There is no selected database "}              
                else:
                    dbUse = config['databaseIndex'].upper()
                    resp = tc.drop_index(dbUse, identificador)
                    if resp == None:
                        return {"Code":"42P01","Message": "undefined_index: The index <"+identificador+"> doesn´t exists"}
                    else:
                        return {"Code":"0000","Message": "The index  <"+identificador+"> has been successfully dropped"}
        elif(self.hijos[1].hijos[0].nombreNodo == "PROCEDURE"):  
            identificador = self.hijos[1].hijos[1].valor                         
            return {"Code":"0000","Message": "The procedure  <"+identificador+"> has been successfully dropped"}
示例#7
0
文件: create.py 项目: XiomRB/tytus
    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
示例#8
0
 def ejecutar(self):
     global resultadotxt
     global cont
     global tabla
     try:       
         resultado = func.dropDatabase(self.iden)
         if(resultado == 2):
             resultadotxt += "No existe la base de datos: " + self.iden + "\n"
         else:
             resultadotxt += "Se elimino la base de datos: " + self.iden + "\n"
             buscar = tabla.BuscarNombre(self.iden)
             tabla.simbolos.pop(buscar.id)
     except:
         """ERROR SEMANTICO"""
示例#9
0
    def ejecutar(self, tabalSimbolos, listaErrores):

        bandera = tabalSimbolos.comprobarNombreBaseDatos(self.nombre)

        if bandera == 1:
            #Si existe la db
            respuesta = jsonMode.dropDatabase(self.nombre)
            if respuesta == 0:
                eliminar = tabalSimbolos.eliminarBaseDatos(self.nombre)
                if eliminar == 0:
                    errorEnviar = errorReportar.ErrorReportar(
                        self.fila, self.columna, "Ejecucion",
                        "Error 3D000, no existe la base de datos")
                    listaErrores.append(errorEnviar)
                    return
            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
        elif bandera == 0 and self.si_existe == False:
            #No existe la db
            errorEnviar = errorReportar.ErrorReportar(
                self.fila, self.columna, "Ejecucion",
                "Error 3D000, no existe la base de datos")
            listaErrores.append(errorEnviar)
            return
        elif bandera == 0 and self.si_existe == True:
            return
        pass
示例#10
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
示例#11
0
 def execute(self, table, tree):
     super().execute(table, tree)
     result_name = self.name.execute(table, tree)
     dropDatabase(result_name)
     return True