예제 #1
0
파일: Ifpl.py 프로젝트: Shock-Dart/tytus
    def ejecutar(self, tsglobal, ts, consola, exceptions):
        try:
            if self.caso == 1:
                resultado = Expresion.Resolver(self.e_if, ts, consola,
                                               exceptions)
                if resultado == True:
                    for x in range(0, len(self.s_if)):
                        self.procesar_instrucciones(self.s_if[x], ts, consola,
                                                    exceptions, tsglobal)
                else:
                    pass
            elif self.caso == 2:
                print('hola')
            else:
                resultado = Expresion.Resolver(self.e_if, ts, consola,
                                               exceptions)
                if resultado == True:
                    for x in range(0, len(self.s_if)):
                        self.procesar_instrucciones(self.s_if[x], ts, consola,
                                                    exceptions, tsglobal)
                else:
                    for x in range(0, len(self.s_else)):
                        self.procesar_instrucciones(self.s_else[x], ts,
                                                    consola, exceptions,
                                                    tsglobal)

        except:
            consola.append("XX000 : internal_error")
예제 #2
0
파일: Update.py 프로젝트: sandymerida/tytus
def WhereUp(where, tabla, campos, ts, consola, exceptions, updateinst) -> list:
    if isinstance(where, Expresion):
        if isinstance(where.iz, Id):
            ix = 0  #el indice del campo a filtar
            bandera = False
            for c in campos:
                if c == where.iz.id:
                    bandera = True
                    break
                ix = ix + 1
            expre = Expresion.Resolver(where.dr, ts, consola, exceptions)
            if bandera:
                tf = Filtrar(tabla, ix, where.operador, expre)
                return tf
            else:
                consola.append(
                    f"La tabla {updateinst.id} no puede actualizarse, el campo no existe\n"
                )
                exceptions.append(
                    f"Error semantico-42P01- 42P01	undefined_table, el campo no existe -{updateinst.fila}-{updateinst.columna}"
                )

                return []
        ##------------
        elif where.operador == 'or' or where.operador == 'and':
            tf1 = []
            tf2 = []
            if isinstance(where.iz, Expresion):
                tf1 = WhereUp(where.iz, tabla, campos, ts, consola, exceptions,
                              updateinst)
            if isinstance(where.dr, Expresion):
                tf2 = WhereUp(where.dr, tabla, campos, ts, consola, exceptions,
                              updateinst)
            if where.operador == 'and':
                tabla = AndManual(tf1, tf2)
                return tabla
            elif where.operador == 'or':
                if len(tf1) != 0 and len(tf2) != 0:
                    tabla = tf1 + tf2
                    return tabla
                else:
                    return []
        else:
            consola.append(
                f"La tabla {updateinst.id} no puede actualizarse, el campo no existe\n"
            )
            exceptions.append(
                f"Error semantico-42P01- 42P01	undefined_table, el campo no existe -{updateinst.fila}-{updateinst.columna}"
            )

            return []
    else:
        consola.append(
            f"La tabla {updateinst.id} no puede actualizarse, where no contemplado semanticamente\n"
        )
        exceptions.append(
            f"Error semantico-42P01- 42P01	undefined_table, where no contemplado semanticamente -{updateinst.fila}-{updateinst.columna}"
        )

        return []
예제 #3
0
    def Resolver(IdAsId, ts, Consola, exceptions):

        if (isinstance(IdAsId.id1, Time)):
            valor = Time.resolverTime(IdAsId.id1)
            return valor
        elif (isinstance(IdAsId.id1, Math_)):
            valor = Math_.Resolver(IdAsId.id1, ts, Consola, exceptions)
            return str(valor)
        elif (isinstance(IdAsId.id1, Trigonometrica)):
            valor = Trigonometrica.Resolver(IdAsId.id1, ts, Consola,
                                            exceptions)
            return valor
        elif (isinstance(IdAsId.id1, Primitivo)):
            valor = IdAsId.id1.valor
            return valor
        elif (isinstance(IdAsId.id1, Id)):
            valor = IdAsId.id1.id
            return valor
        elif (isinstance(IdAsId.id1, IdId)):
            valor1 = IdAsId.id1.id1
            valor2 = IdAsId.id1.id2
            return [valor1, valor2]
        elif isinstance(IdAsId.id1, Expresion):
            return Expresion.Resolver(IdAsId.id1, ts, Consola, exceptions)

        return 'what -- ' + type(IdAsId.id1).__name__ + '\n'
예제 #4
0
def ejecutarDeclaracion(declaracion,simboloFuncion,ts,consola,exception):
    entornoFN = simboloFuncion.Entorno
    nuevosimbolo = None
    if declaracion.asignacion == None:
        nuevosimbolo = TS.Simbolo(TS.TIPO_DATO.DECLARE, declaracion.id, declaracion.tipo, None, None)
    else:
        expre = Expresion.Resolver(declaracion.asignacion,ts,consola,exception)
        nuevosimbolo = TS.Simbolo(TS.TIPO_DATO.DECLARE, declaracion.id, declaracion.tipo, expre, None)
    entornoFN.agregar_sim(nuevosimbolo)
예제 #5
0
파일: plinsert.py 프로젝트: Sohanyuuu/tytus
def comprobarcheck(expresion, data, valor, nombre_columna, ts, Consola,
                   exception):
    valor_retorno = True
    print("que pedo", data)
    #if data == 1:
    print("-> ", expresion)
    if expresion != None:

        for datos in expresion:
            dataiz = datos.iz
            datade = datos.dr
            operador = datos.operador
            if nombre_columna != dataiz.id:
                valor_retorno = False
                break
            valor_retorno = Expresion.Resolver(
                Expresion(Primitivo(valor, 1, 1), datade, operador, 1, 1), ts,
                Consola, exception)
    return valor_retorno
예제 #6
0
파일: Update.py 프로젝트: sandymerida/tytus
def Expre(expre, consola, ts, exceptions):
    res = 0
    if isinstance(expre, Primitivo):
        res = expre.valor
        ##print('es primitivo ' + str(res))
    elif isinstance(expre, Id):
        ##print('es id error semantico')
        res = None
    elif isinstance(expre, Time):
        res = Time.resolverTime(expre)
    else:
        ##print('es expresion')
        res = Expresion.Resolver(expre, ts, consola, exceptions)
        ##print(str(res))
    return res
예제 #7
0
파일: type.py 프로젝트: Julio-usac/tytus
    def ejecutar(createType,ts,consola,exceptions):


        if ts.validar_sim(createType.id) == -1:

            datavalidada = []

            for data in createType.lista:
                resultado = Expresion.Resolver(data,ts,consola,exceptions)
                datavalidada.append(resultado)

            nuevo_tipo = TS.Simbolo(TS.TIPO_DATO.CLASEENUMERADA, createType.id, "Enum", datavalidada, None)
            ts.agregar_sim(nuevo_tipo)
            consola.append(f"Se añadio una clase enum llamada  {createType.id}")

        else:

            consola.append(f"Ya existe esta clase enumerada")
예제 #8
0
def asignarArgumentos(simboloFuncion,listaExpresiones,ts,consola,exception):
        #VERFICAMOS CADA EXPRESION CON EL TIPO DE DATO DE CADA PARAMETRO
        argumentoscorrectos = True
        for expresion in listaExpresiones:
            expresuelta = Expresion.Resolver(expresion,ts,consola,exception)
            entornoFN = simboloFuncion.Entorno
            for simbolo in entornoFN.simbolos.values():  #simbolo = una variable
                if simbolo.categoria == TS.TIPO_DATO.PARAMETRO and simbolo.valor == None:
                    correcto = verificarArgumento(expresuelta,simbolo.tipo)
                    if correcto:
                        simbolo.valor = expresuelta
                    else:
                        argumentoscorrectos = False
                    break
            if not argumentoscorrectos:
                for simbolo in entornoFN.simbolos:
                    if simbolo.categoria == TS.TIPO_DATO.PARAMETRO:
                        simbolo.valor = None
                break
        return argumentoscorrectos
예제 #9
0
    def getC3D(self, lista_optimizaciones_C3D):
        etiqueta = GeneradorTemporales.nuevo_temporal()
        listado = None
        for data in self.lista:
            id = Expresion.Resolver(data, None, None, None)
            if listado is None:
                listado = "'%s'" % id
            else:
                listado += ", '%s'" % id
        instruccion_quemada = 'CREATE TYPE %s AS ENUM (%s);' % (self.id,
                                                                listado)
        c3d = '''
    # ---------CREATE TYPE---------------
    top_stack = top_stack + 1
    %s = "%s"
    stack[top_stack] = %s

        ''' % (etiqueta, instruccion_quemada, etiqueta)

        return c3d
예제 #10
0
파일: delete.py 프로젝트: Sohanyuuu/tytus
    def ejecutar(deleteData, ts, consola, exceptions):

        #insert('test','tbventa',[1,4,'2020-10-12',450,'False','Venta de bomba de agua para toyota'])
        #insert('test','tbventa',[2,4,'2020-10-12',450,'False','Venta de bomba de agua para toyota'])

        if ts.validar_sim("usedatabase1234") == 1:

            # nombre de la bd
            bdactual = ts.buscar_sim("usedatabase1234")
            # se busca el simbolo y por lo tanto se pide el entorno de la bd
            BD = ts.buscar_sim(bdactual.valor)
            entornoBD = BD.Entorno
            print(deleteData.id, " -> nombre tabla")
            if entornoBD.validar_sim(deleteData.id) == 1:

                simbolo_tabla = entornoBD.buscar_sim(deleteData.id)

                if deleteData.where == None:

                    truncate(BD.id, simbolo_tabla.id)
                else:

                    datoiz = deleteData.where.iz
                    datodr = deleteData.where.dr
                    operador = deleteData.where.operador

                    resultado = Expresion.Resolver(datodr, ts, consola,
                                                   exceptions)
                    #consola.append(f" El resultado es: {str(resultado)}")
                    print("el nombre del campo es: ", datoiz.id)
                    if simbolo_tabla.Entorno.validar_sim(datoiz.id) == 1:
                        campos = simbolo_tabla.Entorno.simbolos
                        i = 0
                        data = []
                        data.append(resultado)
                        if delete(BD.id, simbolo_tabla.id, data) == 0:
                            consola.append(
                                f"Delete from {simbolo_tabla.id} exitosamente")
                        else:
                            consola.append(
                                f"22005-error_in_assignment no existe la llave en tabla {simbolo_tabla.id}-{deleteData.fila}-{deleteData.columna}"
                            )

                            exceptions.append(
                                f"Error semantico-22005-error_in_assignment no existe la columna  en tabla {simbolo_tabla.id}-{deleteData.fila}-{deleteData.columna}"
                            )

                    else:
                        consola.append(
                            f"Error semantico-22005-error_in_assignment no existe la columna en tabla {simbolo_tabla.id}-{deleteData.fila}-{deleteData.columna}"
                        )

                        exceptions.append(
                            f"Error semantico-22005-error_in_assignment no existe la columna  en tabla {simbolo_tabla.id}-{deleteData.fila}-{deleteData.columna}"
                        )

                    print("ejecuntando un delete")

            else:
                consola.append(
                    f"42P01	undefined_table, no existe la tabla {deleteData.id}"
                )
                exceptions.append(
                    f"Error semantico-42P01- 42P01	undefined_table, no existe la tabla {deleteData.id}-{deleteData.fila}-{deleteData.columna}"
                )

        else:
            consola.append(
                "22005	error_in_assignment, No se ha seleccionado una BD\n")
            consola.append(
                f"Error semantico-22005-error_in_assignment No se ha seleccionado DB-{deleteData.fila}-{deleteData.columna}"
            )

            exceptions.append(
                f"Error semantico-22005-error_in_assignment No se ha seleccionado DB-{deleteData.fila}-{deleteData.columna}"
            )

        print("ejecuntando un delete")
예제 #11
0
def ResolverReturn(expr, ts, entornoFuncion, Consola, exception):
        if isinstance(expr, Expresion):
            exp1 = ResolverReturn(expr.iz, ts, entornoFuncion, Consola, exception)
            exp2 = ResolverReturn(expr.dr, ts, entornoFuncion, Consola, exception)
            if expr.operador == '=':
                return exp1 == exp2
            elif expr.operador == '*':
                # id = expresion
                # id = (x < 9)
                if (isinstance(exp1, float) and isinstance(exp2, float)) or (
                        isinstance(exp1, int) and isinstance(exp2, int)) or (
                        isinstance(exp1, float) and isinstance(exp2, int)) or (
                        isinstance(exp1, int) and isinstance(exp2, float)):
                    return exp1 * exp2
                return 'error'
            elif expr.operador == '/':
                if (isinstance(exp1, float) and isinstance(exp2, float)) or (
                        isinstance(exp1, int) and isinstance(exp2, int)) or (
                        isinstance(exp1, float) and isinstance(exp2, int)) or (
                        isinstance(exp1, int) and isinstance(exp2, float)):
                    return exp1 / exp2
                return 'error'
            elif expr.operador == '+':
                if (isinstance(exp1, float) and isinstance(exp2, float)) or (
                        isinstance(exp1, int) and isinstance(exp2, int)) or (
                        isinstance(exp1, float) and isinstance(exp2, int)) or (
                        isinstance(exp1, int) and isinstance(exp2, float)):
                    return exp1 + exp2
                return 'error'
            elif expr.operador == '-':
                if (isinstance(exp1, float) and isinstance(exp2, float)) or (
                        isinstance(exp1, int) and isinstance(exp2, int)) or (
                        isinstance(exp1, float) and isinstance(exp2, int)) or (
                        isinstance(exp1, int) and isinstance(exp2, float)):
                    return exp1 - exp2
                return 'error'
            elif expr.operador == '^':
                if (isinstance(exp1, float) and isinstance(exp2, float)) or (
                        isinstance(exp1, int) and isinstance(exp2, int)) or (
                        isinstance(exp1, float) and isinstance(exp2, int)) or (
                        isinstance(exp1, int) and isinstance(exp2, float)):
                    return exp1 ** exp2
                return 'error'
            elif expr.operador == '%':
                if (isinstance(exp1, float) and isinstance(exp2, float)) or (
                        isinstance(exp1, int) and isinstance(exp2, int)) or (
                        isinstance(exp1, float) and isinstance(exp2, int)) or (
                        isinstance(exp1, int) and isinstance(exp2, float)):
                    return exp1 % exp2
                return 'error'
            elif expr.operador == '==':  # comparacion---------------------------------------
                boole = exp1 == exp2
                return boole
            elif expr.operador == '<>':
                boole = exp1 != exp2
                return boole
            elif expr.operador == '>':
                boole = exp1 > exp2
                return boole
            elif expr.operador == '<':
                boole = exp1 < exp2
                return boole
            elif expr.operador == '!=':
                boole = exp1 != exp2
                return boole
            elif expr.operador == '>=':
                boole = exp1 >= exp2
                return boole
            elif expr.operador == '<=':
                boole = exp1 <= exp2
                return boole
        elif isinstance(expr, Id):
            #VERIFICAMOS SI ES UNA VARIABLE DE LA FUNCION
            if ts.validar_sim(expr.id) == 1:
                simbolo = ts.buscar_sim(expr.id)
                return simbolo.valor
            else:
                if entornoFuncion.validar_sim(expr.id) == 1:
                    simbolo = entornoFuncion.buscar_sim(expr.id)
                    return simbolo.valor
        elif isinstance(expr, Primitivo):
            if expr.valor == 'TRUE':
                return True
            elif expr.valor == 'FALSE':
                return False
            else:
                return expr.valor
        elif isinstance(expr, Trigonometrica.Trigonometrica):
            return Trigonometrica.Trigonometrica.Resolver(expr, ts, Consola, exception)
        elif isinstance(expr, Math.Math_):
            # print("estoy llegango")
            return Math.Math_.Resolver(expr, ts, Consola, exception)
        elif isinstance(expr, Time):
            return Time.resolverTime(expr)
        elif isinstance(expr, Binario):
            return Binario.Resolver(expr, ts, Consola, exception)
        elif isinstance(expr, Unario):
            exp1 = Expresion.Resolver(expr.op, ts, Consola, exception)
            if expr.operador == '-':
                if isinstance(exp1, int) or isinstance(exp1, float):
                    return exp1 * -1
            elif expr.operador == '+':
                if isinstance(exp1, int) or isinstance(exp1, float):
                    return exp1
            elif expr.operador == '!':
                return not exp1
예제 #12
0
def comprobar_tipos(datainsertar, index, lista_valores, campo, lista_tabla, ts,
                    Consola, exception, bd, tabla, globall):
    print("estoy aqui !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
    todobien = False
    #    print(lista_valores[index].valor)
    #    print(date.fromisoformat(lista_valores[index].valor))
    #    print(isinstance(date.fromisoformat(lista_valores[index].valor),date))
    #    print('DATE' in str(lista_tabla.get(campo).tipo).upper())
    datafinal = None
    if isinstance(lista_valores[index], Instruccion):
        datafinal = Expresion.Resolver(lista_valores[index], ts, Consola,
                                       exception)
        datainsertar.append(datafinal)
    else:
        datafinal = lista_valores[index].valor
        datainsertar.append(datafinal)
    print(datafinal)

    if isinstance(datafinal, int) and 'INTEGER' in str(
            lista_tabla.get(campo).tipo).upper():
        todobien = True
        todobien = comprobarcheck(
            lista_tabla.get(campo).Entorno, 1, datafinal,
            lista_tabla.get(campo).id, ts, Consola, exception)
        todobien = comprobar_caracteristicas(
            lista_tabla.get(campo).valor, datafinal, Consola, exception, bd,
            tabla, index)
    elif isinstance(datafinal, float) and 'DOUBLE' in str(
            lista_tabla.get(campo).tipo).upper() or 'DECIMAL' in str(
                lista_tabla.get(campo).tipo).upper():
        todobien = True
        todobien = comprobarcheck(
            lista_tabla.get(campo).Entorno, 1, datafinal,
            lista_tabla.get(campo).id, ts, Consola, exception)
        todobien = comprobar_caracteristicas(
            lista_tabla.get(campo).valor, datafinal, Consola, exception, bd,
            tabla, index)

    elif str(datafinal).upper() == 'TRUE' or str(datafinal).upper(
    ) == 'FALSE' and 'BOOLEAN' in str(lista_tabla.get(campo).tipo).upper():
        todobien = True
        todobien = comprobarcheck(
            lista_tabla.get(campo).Entorno, 1, datafinal,
            lista_tabla.get(campo).id, ts, Consola, exception)
        todobien = comprobar_caracteristicas(
            lista_tabla.get(campo).valor, datafinal, Consola, exception, bd,
            tabla, index)

    elif isinstance(datafinal, str) and 'TEXT' in str(
            lista_tabla.get(campo).tipo).upper():
        todobien = True
        todobien = comprobarcheck(
            lista_tabla.get(campo).Entorno, 1, datafinal,
            lista_tabla.get(campo).id, ts, Consola, exception)
        todobien = comprobar_caracteristicas(
            lista_tabla.get(campo).valor, datafinal, Consola, exception, bd,
            tabla, index)

    elif isinstance(str(datafinal), str) and 'VARCHAR' in str(
            lista_tabla.get(campo).tipo).upper() or 'CHARACTERVARYING' in str(
                lista_tabla.get(campo).tipo).upper() or 'CHARACTER' in str(
                    lista_tabla.get(campo).tipo).upper() or 'CHAR' in str(
                        lista_tabla.get(campo).tipo).upper():
        todobien = True
        cantidad = str(lista_tabla.get(campo).tipo).split("-")[1]
        if len(str(datafinal)) <= int(cantidad):
            todobien = True
            todobien = comprobarcheck(
                lista_tabla.get(campo).Entorno, 1, str(datafinal),
                lista_tabla.get(campo).id, ts, Consola, exception)
            todobien = comprobar_caracteristicas(
                lista_tabla.get(campo).valor, datafinal, Consola, exception,
                bd, tabla, index)

        else:
            todobien = False

    elif isinstance(datafinal, float) and 'MONEY' in str(
            lista_tabla.get(campo).tipo).upper():
        todobien = True
        todobien = comprobarcheck(
            lista_tabla.get(campo).Entorno, 1, datafinal,
            lista_tabla.get(campo).id, ts, Consola, exception)
        todobien = comprobar_caracteristicas(
            lista_tabla.get(campo).valor, datafinal, Consola, exception, bd,
            tabla, index)

    elif isinstance(datafinal, int) and 'MONEY' in str(
            lista_tabla.get(campo).tipo).upper():
        todobien = True
        try:
            todobien = comprobarcheck(
                lista_tabla.get(campo).Entorno, 1, datafinal,
                lista_tabla.get(campo).id, ts, Consola, exception)
            todobien = comprobar_caracteristicas(
                lista_tabla.get(campo).valor, datafinal, Consola, exception,
                bd, tabla, index)

        except:
            todobien = False
    elif 'DATE' in str(lista_tabla.get(campo).tipo).upper():
        try:

            #todobien= isinstance(date.fromisoformat(str(datafinal)), date)
            todobien = comprobarcheck(
                lista_tabla.get(campo).Entorno, 1, datafinal,
                lista_tabla.get(campo).id, ts, Consola, exception)
            todobien = comprobar_caracteristicas(
                lista_tabla.get(campo).valor, datafinal, Consola, exception,
                bd, tabla, index)

        except:
            print("error de tipo")
            todobien = False
    else:
        try:
            print(
                "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5"
            )
            print(lista_tabla.get(campo).tipo)
            for data in globall.simbolos:
                print(":: ", data)
            if globall.validar_sim(str(
                    lista_tabla.get(campo).tipo).lower()) == 1:
                print("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$4")
                for data in ts.simbolos:
                    print(";;; ", data)
                simbolo_enumo = globall.buscar_sim(
                    str(lista_tabla.get(campo).tipo).lower())

                if datafinal in simbolo_enumo.valor:
                    todobien = True
                    Consola.append(
                        "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!11"
                    )
            else:
                print("no encotrado")
        except:
            todobien = False
    return todobien
예제 #13
0
    def ResolverExpresion(Expr, Consola, exception, DataSelect):

        if isinstance(Expr, Expresion):

            if str(Expr.operador).upper() == 'AND':
                print('and')
                exp1 = Where.ResolverExpresion(Expr.iz, Consola, exception,
                                               DataSelect)
                exp2 = Where.ResolverExpresion(Expr.dr, Consola, exception,
                                               DataSelect)

                cont = 0
                filas = []
                if isinstance(exp1, list) and isinstance(exp2, list):

                    for fila in exp1:
                        if fila in exp2:
                            filas.append(fila)
                    return filas

            elif str(Expr.operador).upper() == 'OR':
                print('or')
                exp1 = Where.ResolverExpresion(Expr.iz, Consola, exception,
                                               DataSelect)
                exp2 = Where.ResolverExpresion(Expr.dr, Consola, exception,
                                               DataSelect)

                cont = 0
                filas = []
                if isinstance(exp1, list) and isinstance(exp2, list):

                    for fila in exp1:
                        if not (fila in filas):
                            filas.append(fila)

                    for fila in exp2:
                        if not (fila in filas):
                            filas.append(fila)
                    return filas
            else:
                val1 = Where.ResolverExpresion(Expr.iz, Consola, exception,
                                               DataSelect)
                val2 = Where.ResolverExpresion(Expr.dr, Consola, exception,
                                               DataSelect)
                filas = []
                if isinstance(val1, list):
                    contPos = -1
                    for valor in val1:

                        if isinstance(valor, str):
                            if str(valor).isnumeric() or str(
                                    valor).isdecimal():
                                valor = float(valor)
                        prim = Primitivo(valor, Expr.fila, Expr.columna)

                        if isinstance(val2, list):

                            if isinstance(val2[contPos + 1], str):
                                n = val2[contPos + 1]
                                if str(n).isnumeric() or str(n).isdecimal():
                                    n = float(n)
                            else:
                                n = val2[contPos + 1]

                            prim2 = Primitivo(n, Expr.fila, Expr.columna)
                            r = Expresion(prim, prim2, Expr.operador,
                                          Expr.fila, Expr.columna)
                            b = Expresion.Resolver(r, Consola, exception,
                                                   DataSelect)
                            if isinstance(b, bool):
                                if b:
                                    filas.append(contPos + 1)
                        else:

                            r = Expresion(prim, val2, Expr.operador, Expr.fila,
                                          Expr.columna)
                            print(type(r).__name__)
                            b = Expresion.Resolver(r, Consola, exception,
                                                   DataSelect)

                            if isinstance(b, bool):
                                if b:
                                    filas.append(contPos + 1)

                        contPos = contPos + 1
                    return filas

        elif isinstance(Expr, Primitivo):
            return Expr
        elif isinstance(Expr, Id):
            nombreCampo = Expr.id
            num = Where.ColumnasRepetidas(DataSelect, nombreCampo)
            if num == 1:  # existe y no hay campos repetidos no hay ambigüedad
                datos = Where.ObtenerDatos(DataSelect, nombreCampo)
                print('datitos222')
                print(datos)
                return datos
        elif isinstance(Expr, IdId):
            print('id.id')
            nombreCampo = ''
            if isinstance(Expr.id1, Id):
                nombreCampo = Expr.id1.id

            if isinstance(Expr.id2, Id):
                nombreCampo = nombreCampo + '.' + Expr.id2.id

            num = Where.ColumnasRepetidas(DataSelect, nombreCampo)
            if num == 1:  # existe y no hay campos repetidos no hay ambigüedad
                datos = Where.ObtenerDatos(DataSelect, nombreCampo)
                print('datitos222')
                print(datos)
                return datos
        elif isinstance(Expr, Math_.Math_):
            print(Expr.nombre)
            a = Math_.Math_.Resolver(Expr, None, Consola, exception)
            print(type(a).__name__)
            return Primitivo(a, Expr.fila, Expr.columna)
        elif isinstance(Expr, Trigonometrica.Trigonometrica):
            a = Trigonometrica.Trigonometrica.Resolver(Expr, None, Consola,
                                                       exception)
            return Primitivo(a, Expr.fila, Expr.columna)
        elif isinstance(Expr, Time):
            return Time.resolverTime(Expr)
        elif isinstance(Expr, Where):
            a = Where.Resolver(Expr, None, Consola, exception, DataSelect)
            if isinstance(a[0], bool):
                return a[1]
            else:
                return []