示例#1
0
文件: Table.py 项目: edgarJ91/tytus
    def crearConstraintCheck(self, parent, listaids, columns, checkers):
        # Pasos para crear un Check
        # Siempre se recibe un nodo OPCIONALES_ATRIBUTO_CHECK
        # 1. Recorrer los nodos hijos.
        # 2. Si hay un nodo OPCIONAL_CONSTRAINT se encuentra el nombre de la constraint check (opcional)
        # 3. Si hay un nodo LISTA_EXP se encontrarán los id's que serán los ids que hay que buscar.
        # 4. Dentro de la lista de ID's verificar que todos vengan en la lista de columnas
        # 5. Si todas están, insertar.
        nombreCheck = ""
        for hijo in parent.hijos:

            if hijo.nombreNodo == "OPCIONAL_CONSTRAINT":
                nombreCheck = hijo.hijos[0].valor.upper()
            elif hijo.nombreNodo == "LISTA_EXP":
                for exp in hijo.hijos:
                    nuevaConstraint = Check()
                    nuevaConstraint.name = nombreCheck.upper()
                    nuevaConstraint.checkExp = self.construirExpresionJSON(
                        exp, listaids)
                    checkers.append(nuevaConstraint)
        for ident in listaids:
            if not self.buscarColumna(columns, ident):
                respError = Error(
                    3, "No se encuentra la columna  " + ident + " en la tabla",
                    -1)
                responseMessage = Response("20000", respError)
                return responseMessage
        responseMessage = Response("00000",
                                   "Se creo la constraint correctamente")
        return responseMessage
示例#2
0
    def execute(self, parent, enviroment):
        # OBTENER TABLAS CAMPOS VALORES
        for hijo in parent.hijos:
            if "TABLE" == hijo.nombreNodo:
                self.name = hijo.valor
            elif "ADD" == hijo.nombreNodo:
                nuevaCol = Column()
                self.addCol = 1
                for h in hijo.hijos:
                    if "COLUMN" == h.nombreNodo:
                        nuevaCol.name = h.valor
                    else:
                        print('none ', h.nombreNodo)
                        nuevaCol.type = nuevaCol.asignarTipoCol(
                            h.nombreNodo.upper())
                self.columnas.append(nuevaCol)
        # INFO DB ACTUAL
        with open('src/Config/Config.json') as file:
            config = json.load(file)

        if config['databaseIndex'] == None:
            err_resp = Error(3, "No se ha seleccionado ninguna base de datos.",
                             -1)
            resp = Response("42P12", err_resp)
            return resp
        listTables = showTables(config['databaseIndex'].upper())
        useDB = config['databaseIndex'].upper()

        if not (self.name.upper() in listTables):
            err_resp = Error(3, "No existe la tabla en la DB.", -1)
            resp = Response("42P12", err_resp)
            return resp

        # INFO A INSERTAR
        print('DB ACTUAL', useDB)
        print('Tabla', self.name)

        # VALIDACIONES
        if (self.addCol == 1):
            # INSERTAR NUEVA COL
            res = alterAddColumn(useDB, self.name.upper(), 1)
            res = 0
            print('insert col  :', res)
            if res == 0:
                for columna in self.columnas:
                    tc.CreateColumn(useDB, self.name.upper(), columna)
                resp = Response(
                    "00000",
                    "Se agrego la columna a la tabla " + self.name.upper())
            else:
                resp = Response(
                    "42P12",
                    "No se agrego la columna a la tabla " + self.name.upper())
            self.addCol = 0
            return resp
示例#3
0
文件: Table.py 项目: edgarJ91/tytus
    def execute(self, parent, enviroment):
        # Siempre se va a recibir un CREATE_TABLE como nodo
        # 1. Recorrer y ejecutar cada uno de los nodos.
        # 2. Si llegó hasta el final, quiere decir que no hay ningun error
        # 3. Verificar que esté seleccionada una base de datos, si lo está crear la tabla.
        # 4. Verificar que no exista la tabla en la base de datos seleccionada
        for hijo in parent.hijos:
            if hijo.nombreNodo == "IDENTIFICADOR":
                self.name = hijo.valor.upper()
            elif hijo.nombreNodo == "ATRIBUTO_COLUMNA":
                nuevaColumna = Column()
                resp = nuevaColumna.crearColumna(hijo, self.checkers,
                                                 self.listaids)
                if resp.code != "00000":
                    return resp
                self.columnas.append(nuevaColumna)
            elif hijo.nombreNodo == "ATRIBUTO_PRIMARY_KEY":
                nuevaConstraint = Constraint()
                resp = nuevaConstraint.crearConstraintPrimary(
                    hijo, self.columnas)
                if resp.code != "00000":
                    return resp
            elif hijo.nombreNodo == "ATRIBUTO_REFERENCES":
                nuevaConstraint = Constraint()
                resp = nuevaConstraint.crearConstraintReferences(
                    hijo, self.columnas)
                if resp.code != "00000":
                    return resp
                self.listaReferences.append(nuevaConstraint)
            elif hijo.nombreNodo == "OPCIONALES_ATRIBUTO_CHECK":
                nuevaConstraint = Constraint()
                resp = nuevaConstraint.crearConstraintCheck(
                    hijo, self.listaids, self.columnas, self.checkers)
                if resp.code != "00000":
                    return resp

        with open('src/Config/Config.json') as file:
            config = json.load(file)

        if config['databaseIndex'] == None:
            err_resp = Error(3, "No se ha seleccionado ninguna base de datos.",
                             -1)
            resp = Response("42P12", err_resp)
            return resp
        listTables = showTables(config['databaseIndex'].upper())
        if self.name.upper() in listTables:
            err_resp = Error(3, "Ya existe la tabla.", -1)
            resp = Response("42P12", err_resp)
            return resp
        createTable(config['databaseIndex'].upper(), self.name.upper(),
                    len(self.columnas))
        tc.createTable(config['databaseIndex'].upper(), self.name.upper(),
                       self.columnas)
        resp = Response("00000", "Se creó la tabla")
        return resp
示例#4
0
文件: Table.py 项目: edgarJ91/tytus
 def ejec_atributo_primary(self):
     # Verifica que no sea una primary key ya, en caso de que haya una, va a retornar un error
     if self.isPrimary == None:
         self.isPrimary = True
         resp = Response("00000", "Se agrego la PK exitosamente")
         return resp
     respError = Error(
         3, "Ya se declaro esta columna como llave primaria " + self.name,
         -1)
     responseMessage = Response("20000", respError)
     return responseMessage
示例#5
0
文件: Table.py 项目: edgarJ91/tytus
 def ejec_atributo_unique(self, parent):
     # Siempre se recibirá un nodo
     if self.isUnique != None:
         respError = Error(
             3, "Ya se declaro esta columna como unique " + self.name, -1)
         responseMessage = Response("20000", respError)
         return responseMessage
     self.isUnique = True
     for hijo in parent.hijos:
         if hijo.nombreNodo == "OPCIONAL_CONSTRAINT":
             self.uniqueName = hijo.valor.upper()
     responseMessage = Response("00000", "Se agrego unique correctamente")
     return responseMessage
示例#6
0
文件: Table.py 项目: edgarJ91/tytus
    def crearColumna(self, parent, checkers, listaids):
        # Pasos para crear una columna.
        # Siempre se va a recibir el nodo que contenga el nombre ATRIBUTO_COLUMNA
        # 1. Verificar cada uno de los nodos.
        # 1.1 El nodo que tenga como nombre IDENTIFICADOR, será el nombre de la columna,
        # 1.2 El nodo que tenga como nombre TIPO_DECLARACION, será el tipo de la columna
        # 1.3 El nodo que tenga como nombre OPCIONALES_ATRIBUTO_PRIMARY, será el que indique que es una llave primaria
        # 1.4 El nodo que tenga como nombre OPCIONALES_ATRIBUTO_UNIQUE, será el que indique que es un campo unique
        # 1.5 El nodo que tenga como nombre OPCIONALES_ATRIBUTO_REFERENCES, será el que indique que es una referencia.
        # 1.6 El nodo que tenga como nombre OPCIONALES_ATRIBUTO_CHECK, será el que indique que es una check.

        # Ejecuta 1.1
        self.name = parent.hijos[0].valor.upper()
        # Ejecuta 1.2
        self.tipo_declaracion(parent.hijos[1])
        # Ejecuta 1.3 -> 1.6
        for hijo in parent.hijos:
            if hijo.nombreNodo == "OPCIONALES_ATRIBUTO_PRIMARY":
                response = self.ejec_atributo_primary()
                if response.code != "00000":
                    return response
            elif hijo.nombreNodo == "OPCIONALES_ATRIBUTO_UNIQUE":
                response = self.ejec_atributo_unique(hijo)
                if response.code != "00000":
                    return response
            elif hijo.nombreNodo == "OPCIONALES_ATRIBUTO_REFERENCES":
                response = self.ejec_atributo_references(hijo)
                if response.code != "00000":
                    return response
            elif hijo.nombreNodo == "OPCIONALES_ATRIBUTO_CHECK":
                response = self.ejec_atributo_check(hijo, checkers, listaids)
                if response.code != "00000":
                    return response
        resp = Response("00000", "Se creo la columna exitosamente")
        return resp
示例#7
0
文件: Table.py 项目: edgarJ91/tytus
 def ejec_atributo_references(self, parent):
     # Siempre se va a recibir un nodo con el nombre OPCIONALES_ATRIBUTO_REFERENCES
     # Solo tendrá un hijo y es el nombre de la tabla.
     # Se debe de buscar que la columna tenga el mismo nombre y se debe de verificar
     # que tenga el mismo tipo de dato
     if self.buscarColumnaValida(self.name, self.specificType,
                                 parent.hijos[0].nombreNodo):
         self.referencesTable = parent.hijos[0].nombreNodo
         self.referenceColumn = self.name.upper()
         responseMessage = Response(
             "00000", "Se agrego la referencia correctamente")
         return responseMessage
     respError = Error(
         3,
         "No existe una columna o tabla relacionada para la referencia " +
         self.name + " en " + parent.hijos[0].nombreNodo, -1)
     responseMessage = Response("20000", respError)
     return responseMessage
示例#8
0
文件: Table.py 项目: edgarJ91/tytus
    def crearConstraintPrimary(self, parent, columns):
        # Pasos para construir la llave Primaria
        # 1. Siempre se va a recibir un nodo ATRIBUTO_PRIMARY_KEY
        # 2. Se debe de recorrer cada uno de los nodos de este para asociar cada columna a
        #    un identificador.
        # 3. Se inserta cada uno de los ids en la listaColumnas.
        # 4. Se busca cada uno de los id's de listaColumnas en columns para colocar
        #    las llaves primarias que sean necesarias.
        for hijo in parent.hijos:
            if hijo.nombreNodo == "IDENTIFICADOR":
                self.listaColumnas.append(hijo.valor)

        for col in self.listaColumnas:

            if not self.buscarColumna(columns, col):
                respError = Error(3, "No se encuentra la columna " + col, -1)
                responseMessage = Response("20000", respError)
                return responseMessage
        responseMessage = Response("00000", "Se creo la llave primaria")
        return responseMessage
示例#9
0
 def get_response(self, question):
     try:
         # Accessa o primeiro dicionario de trainamento
         return self.dictionary_1[question]
     except:
         try:
             # Accessa o segundo dicionario de trainamento
             return self.dictionary_2[question]
         except:
             try:
                 # Accessa o terceiro dicionario de trainamento
                 return self.dictionary_3[question]
             except:
                 try:
                     # Accessa o quarto dicionario de trainamento
                     return self.dictionary_4[question]
                 except:
                     try:
                         # Accessa o quinto dicionario de trainamento
                         return self.dictionary_5[question]
                     except:
                         try:
                             # Accessa o segundo dicionario de trainamento
                             return self.dictionary_6[question]
                         except:
                             try:
                                 # Accessa o setimo dicionario de trainamento
                                 return self.dictionary_7[question]
                             except:
                                 try:
                                     # Accessa o oitavo dicionario de trainamento
                                     return self.dictionary_8[question]
                                 except:
                                     try:
                                         # Accessa o nono dicionario de trainamento
                                         return self.dictionary_9[question]
                                     except:
                                         try:
                                             # Accessa o decimo dicionario de trainamento
                                             return self.dictionary_10[
                                                 question]
                                         except:
                                             # Quando todos os 10 dicionarios resultarem em KeyError, o chatbot accessa a Class de Resposta
                                             if Str(question).indexOf(
                                                     "what"):
                                                 if Str(question).indexOf(
                                                         "your"):
                                                     if Str(question
                                                            ).indexOf(
                                                                "name"):
                                                         return self.bot_name
                                             return Response().response(
                                                 question)
示例#10
0
 def procesarIdentificadorTable(self, parent, alias=None):
     # Siempre se recibe un nodo Identificador
     nuevaTabla = TableResult()
     nuevaTabla.nombre = parent.valor
     nuevaTabla.alias = parent.valor if alias == None else alias
     columnas = self.obtenerColumnasDictionary(parent.valor)
     if not columnas:
         return Response("22222", "No existe la tabla referenciada")
     nuevaTabla.columnas = columnas
     self.listaColumnasWhere.append(columnas)
     nuevaTabla.data = extractTable(self.dbUse, parent.valor.upper())
     nuevaTabla.noFilas = len(nuevaTabla.data)
     self.listaTablas.append(nuevaTabla)
示例#11
0
文件: Table.py 项目: edgarJ91/tytus
 def ejec_atributo_check(self, parent, listaChecker, listaids):
     # Siempre se recibirá un nodo OPCIONALES_ATRIBUTO_CHECK
     # 1. Recorrer cada uno de los hijos buscando el nombre de la constraint.
     # 2. Si se encuentra el nodo OPCIONAL_CONSTRAINT tiene un alias en el hijo 0
     # 3. Si se encuentra el nodo E, se tiene que construir la expresion JSON.
     nuevoCheck = Check()
     for hijo in parent.hijos:
         if hijo.nombreNodo == "OPCIONAL_CONSTRAINT":
             nuevoCheck.name = hijo.hijos[0].valor.upper()
         elif hijo.nombreNodo == "E":
             nuevoCheck.checkExp = self.construirExpresionJSON(
                 hijo, listaids)
     listaChecker.append(nuevoCheck)
     resp = Response("00000", "Se agrego la constraint exitosamente")
     return resp
示例#12
0
    def execute(self, parent, enviroment):
        # OBTENER TABLAS CAMPOS VALORES
        for hijo in parent.hijos:
            if "Tabla" == hijo.nombreNodo:
                self.name = hijo.valor
            elif "L_COLUMN" == hijo.nombreNodo:
                self.traeCols = 1
                for h in hijo.hijos:
                    self.columnas.append(h)
            elif "PARAM_INSERT" == hijo.nombreNodo:
                for h1 in hijo.hijos:
                    self.values.append(h1)
        # INFO DB ACTUAL
        with open('src/Config/Config.json') as file:
            config = json.load(file)

        useDB = config['databaseIndex'].upper()

        if config['databaseIndex'] == None:
            err_resp = Error(3, "No se ha seleccionado ninguna base de datos.",
                             -1)
            resp = Response("42P12", err_resp)
            return resp
        listTables = showTables(config['databaseIndex'].upper())

        if not (self.name.upper() in listTables):
            err_resp = Error(3, "No existe la tabla en la DB.", -1)
            resp = Response("42P12", err_resp)
            return resp

        # INFO A INSERTAR
        columnasI = []
        valoresI = []
        l_col = tc.return_columnsObject(useDB, self.name.upper())
        for h in self.columnas:
            columnasI.append(h.valor)
        for h in self.values:
            valoresI.append(h.valor)
        print('DB ACTUAL', useDB)
        print('Tabla', self.name)
        print('Values', valoresI)
        print('Columns', columnasI)
        print('L_col', len(l_col))

        valores_insertar = []
        contador = 0
        # VALIDACIONES
        if self.traeCols == 1:
            # Mismo # de cols y valores
            if not (len(self.values) == len(self.columnas)):
                print("no tiene la misma cantidad de columnas y valores")
                err_resp = Error(
                    3,
                    "No tiene la misma cantidad de columnas a insertar y valores a insertar.",
                    -1)
                resp = Response("42P12", err_resp)
                return resp
            # cols a insertar <=  cols existentes
            if not (len(l_col) >= len(self.columnas)):
                print(
                    "El numero de columnas a insertar es a mayor a las existentes"
                )
                err_resp = Error(
                    3,
                    "El numero de columnas a insertar es a mayor a las existentes.",
                    -1)
                resp = Response("42P12", err_resp)
                return resp
            # cols existentes >=  valores a insertar
            if not (len(l_col) >= len(self.values)):
                print(
                    "El numero de valores a insertar es mayor a la cantidad de columnas existentes"
                )
                err_resp = Error(
                    3,
                    "El numero de valores a insertar es mayor a la cantidad de columnas existentes.",
                    -1)
                resp = Response("42P12", err_resp)
                return resp
            for h in l_col:
                tmp_col_actual = Column()
                if len(columnasI) > contador:
                    tmp_col_insert = columnasI[contador].upper()
                    tmp_valor = valoresI[contador]
                tmp_col_actual = h

                # Validar que sea la misma columna
                if tmp_col_actual.name == tmp_col_insert:
                    contador = contador + 1
                    # Validar tipo de datos
                    if self.validar_tipo(tmp_col_actual.type, tmp_valor) == 1:
                        valores_insertar.append(tmp_valor)
                    else:
                        print("El tipo de dato no coincide con la variable " +
                              tmp_valor)
                        err_resp = Error(
                            3, "El tipo de dato no coincide con la variable " +
                            tmp_valor, -1)
                        resp = Response("42P12", err_resp)
                        return resp
                else:
                    valores_insertar.append(None)
        # Solo vienes valores
        else:
            for h in l_col:
                tmp_col_actual = Column()
                tmp_col_actual = h
                if not (contador == len(valoresI)):
                    tmp_valor = valoresI[contador]

                # Validar tipo de datos
                if self.validar_tipo(
                        tmp_col_actual.type,
                        tmp_valor) == 1 and contador < len(valoresI):
                    contador = contador + 1
                    valores_insertar.append(tmp_valor)
                else:
                    valores_insertar.append(None)
            if not (contador == len(valoresI)):
                print("El tipo de dato no coincide con la variable ")
                err_resp = Error(
                    3,
                    "Los valores a ingresar no coinciden con los valores de la tabla",
                    -1)
                resp = Response("42P12", err_resp)
                return resp

        # INSERTAR
        print('Se va a insertar', valores_insertar)
        print('insert code :',
              insert(useDB, self.name.upper(), valores_insertar))
        resp = Response("00000", "Se inserto el valor en la tabla")
        return resp
示例#13
0
    def execute(self, parent, enviroment=None):
        global selectAgregate
        selectAgregate.clear()
        # Se verifican las variables, si esta seleccionada la base de datos
        self.dbUse = self.verificarDBActiva()
        if self.dbUse == None:
            return Response("22222", "La base de datos no está seleccionada")
        # Se recibe como parámetro en nodo SENTENCIA_SELECT
        # Se visita al nodo TABLE_EXPRESION
        self.procesarTableExpresion(parent.hijos[1])

        stringName = ""
        for tab in self.listaTablas:
            stringName = stringName + tab.alias

        if len(parent.hijos) == 3:
            listaDataTemp = []
            listaColumnasTemp = []
            listaTablasTemp = []
            for tabla in self.listaTablas:
                listaDataTemp.append(tabla.data)
                for columna in tabla.columnas:
                    listaColumnasTemp.append(columna)
                listaTablasTemp.append([tabla.nombre, tabla.alias])
            #print(listaDataTemp)
            #print(listaColumnasTemp)
            #print(listaTablasTemp)
            #print(self.tableResultData)
            nuevoFiltro = Where()
            resultado = nuevoFiltro.execute(parent.hijos[2], listaDataTemp,
                                            listaTablasTemp,
                                            self.listaColumnasWhere,
                                            self.tableResultData)

        self.ejecutarSelect(parent.hijos[0])

        #region Agregacion
        dataTemporalAgregacion = []
        dataTemporalGlobal = []
        #Inicia el pocedimiento de funciones de agregación
        hayNoAgregate = False
        hayAgregate = False
        if len(selectAgregate) >= len(self.encabezadoRetorno):
            for i in range(0, len(self.encabezadoRetorno)):
                #selectAgregate
                if selectAgregate[i] == "AVG":
                    hayAgregate = True
                    dataTemporalAgregacion.append(
                        self.realizarAVG(i, self.tablaRetorno))
                elif selectAgregate[i] == "COUNT":
                    hayAgregate = True
                    dataTemporalAgregacion.append(
                        self.realizarCount(i, self.tablaRetorno))
                elif selectAgregate[i] == "MAX":
                    hayAgregate = True
                    dataTemporalAgregacion.append(
                        self.realizarMax(i, self.tablaRetorno))
                elif selectAgregate[i] == "MIN":
                    hayAgregate = True
                    dataTemporalAgregacion.append(
                        self.realizarMin(i, self.tablaRetorno))
                elif selectAgregate[i] == "SUM":
                    hayAgregate = True
                    dataTemporalAgregacion.append(
                        self.realizarSum(i, self.tablaRetorno))
                elif selectAgregate[i] == None:
                    hayNoAgregate = True
        if hayAgregate and not hayNoAgregate:
            dataTemporalGlobal.append(dataTemporalAgregacion)
        else:
            dataTemporalGlobal = self.tablaRetorno
        #endregion

        tablaResultado = TableResult()
        tablaResultado.nombre = stringName
        tablaResultado.alias = stringName
        tablaResultado.columnas = self.encabezadoRetorno
        tablaResultado.noColumnas = len(self.encabezadoRetorno)
        tablaResultado.data = dataTemporalGlobal
        tablaResultado.noFilas = len(dataTemporalGlobal)
        tablaResultado.listaEncabezados = self.encabezadoRetorno

        return tablaResultado
示例#14
0
文件: Table.py 项目: edgarJ91/tytus
    def crearConstraintReferences(self, parent, columns):
        #Pasos para crear una Referencia
        # 1. Siempre se va a encontrar un nodo con nombre ATRIBUTO_REFERENCES
        # 2. Se debe de recorrer cada uno de los nodos.
        # 3. Se crea la lista colOrigen para insertar las columnas de la tabla original ATRIBUTO_FOREIGN_KEY
        # 4. Se crea la lista colDestino para insertar las columnas de referencia LISTA_IDS
        # 5. Se busca la tabla a la que se hace referencia y se extraen las columnas
        # 6. Se buscan las columnas de colOrigen en las columnas ya hechas en la misma tabla
        # 7. Se buscan las columnas de colDestino en las columnas de la tabla de referencia
        # 8. Si colOrigen y colDestino tienen la misma longitud, se puede realizar
        # 9. Si colOrigen es vacío, se puede asignar
        # 10. Si no coinciden las longitudes, no se puede realizar la referencia.

        # Paso 1 - 4
        colOrigen = []
        colDestino = []
        tablaDestino = ""
        for hijo in parent.hijos:
            if hijo.nombreNodo == "ATRIBUTO_FOREIGN_KEY":
                for col in hijo.hijos[0].hijos:
                    colOrigen.append(col.valor.upper())
            elif hijo.nombreNodo == "IDENTIFICADOR":
                tablaDestino = hijo.valor
            elif hijo.nombreNodo == "LISTA_IDS":
                for col in hijo.hijos:
                    colDestino.append(col.valor.upper())

        # Paso 5
        if not self.buscarTablaEnDB(tablaDestino):
            respError = Error(3, "No se encuentra la tabla " + tablaDestino,
                              -1)
            responseMessage = Response("20000", respError)
            return responseMessage
        listaColumnas = self.extraerColumnasDeTabla(tablaDestino)

        # Paso 6 Esto es opcional, no siempre va a venir
        for col in colOrigen:
            if not self.buscarColumna(columns, col):
                respError = Error(3,
                                  "No se encuentra la columna referida " + col,
                                  -1)
                responseMessage = Response("20000", respError)
                return responseMessage

        # Paso 7 Esto si es obligatorio.
        for col in colDestino:
            if not self.buscarColumna(listaColumnas, col):
                respError = Error(3,
                                  "No se encuentra la columna referida " + col,
                                  -1)
                responseMessage = Response("20000", respError)
                return responseMessage

        # Paso 8 - 10
        if len(colOrigen) == 0:
            colOrigen = colDestino
        elif len(colOrigen) != len(colDestino):
            respError = Error(
                3, "El numero de columnas referenciadas no coinciden", -1)
            responseMessage = Response("20000", respError)
            return responseMessage

        for col in columns:
            if col.name.upper() in colOrigen:
                col.referenceColumn = colOrigen.index(col.name.upper())
                col.referenceTable = tablaDestino.upper()
        responseMessage = Response("00000", "Se crearon las referencias")
        return responseMessage
示例#15
0
    def execute(self, parent, enviroment):
        # OBTENER TABLAS CAMPOS VALORES
        for hijo in parent.hijos:
            if "TABLE" == hijo.nombreNodo:
                self.name = hijo.valor
            elif "LISTA_UPDATE" == hijo.nombreNodo:
                self.traeCols = 1
                for h in hijo.hijos:
                    for i in h.hijos:
                        if "COL" == i.nombreNodo:
                            self.columnas.append(i)
                        else:
                            self.values.append(i)
        # INFO DB ACTUAL
        with open('src/Config/Config.json') as file:
            config = json.load(file)

        if config['databaseIndex'] == None:
            err_resp = Error(3, "No se ha seleccionado ninguna base de datos.",
                             -1)
            resp = Response("42P12", err_resp)
            return resp
        useDB = config['databaseIndex'].upper()
        listTables = showTables(useDB)

        if not (self.name.upper() in listTables):
            err_resp = Error(3, "No existe la tabla en la DB.", -1)
            resp = Response("42P12", err_resp)
            return resp

        # INFO A INSERTAR
        tablename = self.name.upper()
        print('DB ACTUAL', useDB)
        print('Tabla Update', tablename)

        columnasI = []
        valoresI = []
        val_update = {}
        l_col = tc.return_columnsObject(useDB, tablename)
        for h in self.columnas:
            columnasI.append(h.valor.upper())
        for h in self.values:
            valoresI.append(h.valor)

        contador = 0
        contador2 = 0
        for h in l_col:
            for j in columnasI:
                if h.name.upper() == j:
                    val_update[contador] = valoresI[contador2]
                contador2 = contador2 + 1
            contador2 = 0
            contador = contador + 1

        # VALIDACIONES
        if len(parent.hijos) < 4:
            #Update sin where
            res = update(useDB, tablename, val_update, ['0'])
            print('update code: ', res)
            if res == 0:
                resp = Response("00000", "Se actualizo el valor en la tabla")
            else:
                err_resp = Error(3, "No se logro actualizar el valor", -1)
                resp = Response("42P12", err_resp)
            return resp
        else:
            #update con where
            parent_node = parent.hijos[3]
            raw_matrix = [extractTable(useDB, tablename)]
            columnas = self.obtenerColumnasDictionary(useDB, tablename)
            tablas = [[tablename, tablename]]

            nuevoWhere = Where()
            listaResult = nuevoWhere.execute(parent_node, raw_matrix, tablas,
                                             columnas, None)
            print('listaREsult ', listaResult)
            res = ""
            for elemento in listaResult:
                if elemento[0] is True:
                    res = update(useDB, tablename, val_update,
                                 [str(elemento[1])])
                    print('update code: ', res)

            if res == 0:
                resp = Response("00000", "Se actualizo el valor en la tabla")
            else:
                err_resp = Error(3, "No se logro actualizar el valor", -1)
                resp = Response("42P12", err_resp)
            return resp