Exemplo n.º 1
0
def EUpdate():
    cargarMemoria()
    #llamar la funcion de EDD
    if (len(listaMemoria) > 0):
        update_registro = listaMemoria[0]
        indice = update_registro[2]
        valor = update_registro[3]
        col = {}
        col[indice] = valor
        EDD.update(update_registro[0], update_registro[1], col,
                   update_registro[4])
        print("update en tabla: ", update_registro[1])
        print("\tregistro actualizado: valor ", valor)
        listaMemoria.pop(0)
Exemplo n.º 2
0
    def ejecutar(self, ent: Entorno):
        dbActual = ent.getDataBase()
        result = []

        if dbActual != None:
            tabla: Simbolo = ent.buscarSimbolo(self.tabla + "_" + dbActual)
            if tabla != None:
                'obtengo tabla'
                real = tabla.nombre.replace('_' + ent.getDataBase(), '')
                result = DBMS.extractTable(ent.getDataBase(), real)
                columnas = tabla.valor
                'lleno encabezado'
                for col in columnas:
                    self.encabezado.append(col.nombre)

                for i in range(0, len(result)):
                    resexp = self.resolver(self.where, ent, result, tabla, i)
                    try:
                        if resexp.valor:
                            dic = {}
                            'busco la columna y le asigno el nuevo valor'
                            for i in range(0, len(self.listaCampos)):
                                nombrecol = self.listaCampos[i].columna
                                expresion = self.listaCampos[i].exp
                                contenido = expresion.getval(ent).valor
                                for nocol in range(0, len(columnas)):
                                    if nombrecol == columnas[nocol].nombre:
                                        dic.update({nocol: contenido})
                            'envio datos par update'
                            llavePrim = []
                            for column in tabla.valor:
                                prim: Simbolo = ent.buscarSimbolo(
                                    column.atributos.get('primary'))
                                llavePrim = prim.valor
                                break

                            r = DBMS.update(dbActual, self.tabla, dic,
                                            llavePrim)
                            if r == 0:
                                variables.consola.insert(
                                    INSERT, 'Se ha actualizado un registro \n')

                    except:
                        reporteerrores.append(
                            Lerrores(
                                "Error Semantico",
                                'Error el resultado del where no es booleano',
                                0, 0))
                        variables.consola.insert(
                            INSERT,
                            'Error el resultado del where no es booleano \n')

            else:
                variables.consola.insert(
                    INSERT, "La tabla '" + self.tabla +
                    "' que desea actualizar no existe\n")
                reporteerrores.append(
                    Lerrores(
                        "Error Semántico", "La tabla '" + self.tabla +
                        "' que desea actualizar no existe", "", ""))
Exemplo n.º 3
0
 def update(self, nodo):
     #print("=============================")
     #print(self.usingDB)
     tb_id = nodo.valor
     for hijos in nodo.hijos:
         for hijos2 in hijos.hijos:
             r = jsonMode.update(self.usingDB, tb_id, hijos2.valor)
     #print(r)
     if r == 0:
         self.output.append('La tabla \"' + tb_id +
                            '\" de la base de datos \"' + self.usingDB +
                            '\" ha sido actualizada con nuevos datos.')
     elif r == 1:  # Error en la operación
         self.errors.append(
             Error('XX000', EType.SEMANTICO, 'internal_error', nodo.linea))
     elif r == 2:  # Base de datos inexistente
         self.errors.append(
             Error('-----', EType.SEMANTICO, 'database_non_exist',
                   nodo.linea))
     elif r == 3:  # Tabla existente
         self.errors.append(
             Error('42P01', EType.SEMANTICO, 'undefined_table', nodo.linea))
Exemplo n.º 4
0
# JSON Mode Test File
# Released under MIT License
# Copyright (c) 2020 TytusDb Team

from storageManager import jsonMode as j

print(j.extractTable('compiladores2', 'USUARIO'))
# create database
j.createDatabase('world')

j.createTable('world', 'cities', 4)

# create simple primary keys
j.alterAddPK('world', 'cities', [0])

# insert data in cities
j.insert('world', 'cities', [1, 'Guatemala', 'Guatemala', 'GTM'])
j.insert('world', 'cities', [2, 'Cuilapa', 'Santa Rosa', 'GTM'])
j.insert('world', 'cities', [3, 'San Salvador', 'San Salvador', 'SLV'])
j.insert('world', 'cities', [4, 'San Miguel', 'San Miguel', 'SLV'])

# show all datap
print(j.extractTable('world', 'cities'))  #SELECT

print(j.update('world', 'cities', {
    1: 'Mexico',
    3: 'MX'
}, [1]))

print(j.extractTable('world', 'cities'))  #SELECT
Exemplo n.º 5
0
    def execute(self, environment):
        #NOMBRE DE LA BD
        dbname = environment.getActualDataBase()
        db = environment.readDataBase(dbname)
        if (db == None):
            return {
                'Error': 'No se encuentra una base de datos en uso',
                'Fila': self.row,
                'Columna': self.column
            }
        #NOMBRE DE LA TABLA
        tbname = self.idTable
        #LISTA CON LOS INDEX DE LAS COLUMNAS QUE SON LLAVES PRIMARIAS
        table = db.getTable(self.idTable)
        #Diccionario con las clave el nombre de la tabla y valor el indice
        indColumnas = {}
        for c in range(len(table.columns)):
            indColumnas[table.columns[c].name] = c
        #--Busco los nombres de los campos que son primary key
        pkNames = []
        for con in table.constraint:
            if con['type'] == 'primary':
                pkNames.append(con['value'])
        #--Busco los indices de los campos correspondientes
        pkIndexes = []
        for i in range(len(table.columns)):
            for item in pkNames:
                if table.columns[i].name == item:
                    pkIndexes.append(i)
        #LISTA DE LLAVE VALOR
        tuplas = admin.extractTable(dbname, tbname)
        if len(tuplas) == 0:
            return {
                'Error': 'La tabla no contiene registros a actualizar.',
                'Fila': self.row,
                'Columna': self.column
            }
        if tuplas == None:
            return {
                'Error':
                'La tabla no ha podido encontrarse, error en el Storage.',
                'Fila': self.row,
                'Columna': self.column
            }
        #POR CADA TUPLA QUE HAYA
        for tindex in range(len(tuplas)):
            #POR CADA CAMPO EN LA TUPLA CREO EN LA TABLA DE SIMBOLOS LA VARIABLE DE CADA CAMPO
            for index in range(len(tuplas[tindex])):
                #TIPOS, PROBABLEMENTE SE DEBA CAMBIAR
                tipo = Type.STRING
                if isinstance(tuplas[tindex][index], int):
                    tipo = Type.DECIMAL
                #GUARDAR EN EL ENTORNO UNA VARIALBE CON EL NOMBRE DE LA COLUMNA
                environment.guardarVariable(table.columns[index].name, tipo,
                                            tuplas[tindex][index])

            #CREO EL DICCIONARIO CON LOS VALORES A MODIFICAR
            tuplaModificada = {}
            for asign in self.assignList:
                clave = indColumnas[asign['id']]
                valor = asign['value'].execute(environment)['value']
                tuplaModificada[clave] = valor

            #CREO UN ARREGLO CON LA LLAVE PRIMARIA DE ESE REGISTRO
            primaryKey = []
            for val in pkIndexes:
                primaryKey.append(tuplas[tindex][val])

            #VERIFICO LA CONDICIÓN DEL WHERE
            where = True
            if not isinstance(self.condition, bool):
                where = self.condition.execute(environment)['value']
            if where == True:
                res = admin.update(dbname, tbname, tuplaModificada, primaryKey)
                switcher = {
                    0:
                    'Se ha realizado el update en el registro con la FK: ' +
                    str(primaryKey),
                    1: {
                        'Error:': 'Error en la operación update.',
                        'Fila': self.row,
                        'Columna': self.column
                    },
                    2: {
                        'Error:': 'La base de datos buscada no existe.',
                        'Fila': self.row,
                        'Columna': self.column
                    },
                    3: {
                        'Error:': 'La tabla ' + self.idTable + ' no existe.',
                        'Fila': self.row,
                        'Columna': self.column
                    },
                    4: {
                        'Error:':
                        'No existe el registro buscado: ' + str(primaryKey),
                        'Fila':
                        self.row,
                        'Columna':
                        self.column
                    },
                }
                return switcher.get(
                    res,
                    'Error en la respuesta del update en el StorageManager.')