示例#1
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'
示例#2
0
    def ejecutar(Select,ts,Consola,exceptions,Mostrar):

        #type(self).__name__
        print('what -- '+type(Select.columnas).__name__)
        x = PrettyTable()
        rowpp=[]
        en=[]

        for columna in Select.columnas:
            i=0

            if isinstance(columna , Select.__class__):
                Consola.append('what -- ' + type(columna).__name__ + '\n')
            elif isinstance(columna,Time):
                en.append('time')

                time = Time.resolverTime(columna)
                rowpp.append(time)
                #Consola.append('what -- ' + time + '\n')
            elif isinstance(columna,IdId):# no porque no tiene from
                Consola.append('what -- ' + type(columna).__name__ + '\n')
                exceptions.append(
                    'Error semantico - 42P01 - falta una entrada para la tabla en la cláusula FROM, error en ' + ' - ' + str(Select.fila) + ' - ' + str(Select.columna) + '')
            elif isinstance(columna,Id): # no porque no tiene from
                Consola.append('what -- ' + type(columna).__name__ + '\n')
                exceptions.append('Error semantico - 42703 - no existe la columna, error en '+' - '+str(Select.fila)+' - '+str(Select.columna)+'')
            elif isinstance(columna, IdAsId):
                # no porque no tiene from
                if(isinstance(columna.id2,Primitivo)):
                    en.append(columna.id2.valor)
                else:
                    en.append(columna.id2.id)


                val = IdAsId.Resolver(columna,Consola)
                rowpp.append(str(val))
                #Consola.append('what -- ' + str(val)+ '\n')
            elif isinstance(columna,Math_): #hay que resolver
                en.append(str(columna.nombre))
                val=Math_.Resolver(columna,Consola,Consola,exceptions)
                rowpp.append(str(val))
                #Consola.append('what -- ' + type(columna).__name__ + '\n')
            elif isinstance(columna,Trigonometrica):  #hay que resolver
                en.append(str(columna.trig))
                REST=Trigonometrica.Resolver(columna,ts,Consola,exceptions)
                rowpp.append(str(REST))
                #Consola.append('what -- ' + str(REST) + '\n')
            i= i + 1


        x.add_row(rowpp)
        x.field_names = en

        if Mostrar:
            Consola.append(x.get_string()+'\n')
        return [en,rowpp]
示例#3
0
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
示例#4
0
    def ejecutar(Select,ts, Consola,exceptions,Mostrar):
        # Error semantico - numero error - descripcion - fila - columna
        #si pueden ir a buscar la bd actual
        #simular
        insert('test','tblibrosalario',[1,2020,10,1300,10.30])
        insert('test','tblibrosalario',[2,2020,10,1300,10.30])
        insert('test','tblibrosalario',[3,2020,10,1300,10.30])
        #van usar
        extractTable('test','tblibrosalario')

        x = PrettyTable()

        #print(Select.time.momento)
        datet = Time.resolverTime(Select.time)

        if Select.time.caso == 1:  # EXTRACT

            x.field_names = ["extract"]
            x.add_row([datet])

        elif Select.time.caso == 2:  # NOW
            x.field_names = ["now"]
            x.add_row([str(datet)])

        elif Select.time.caso == 3:  # date_part
            x.field_names = ["date_part"]
            x.add_row([datet])

        elif Select.time.caso == 4:  # current_date
            x.field_names = ["current_date"]
            x.add_row([str(datet)])

        elif Select.time.caso == 5:  # current_time
            x.field_names = ["current_time"]
            x.add_row([str(datet)])

        elif Select.time.caso == 6:  # TIMESTAMP
            x.field_names = ["timestamp"]
            x.add_row([str(datet)])

        if Mostrar:
            Consola.append('\n'+x.get_string()+'\n')
        return str(datet)
示例#5
0
    def getC3D(self, lista_optimizaciones_C3D):
        temporal = GeneradorTemporales.nuevo_temporal()
        codigo_quemado = "alter database %s " % self.name
        if self.caso == 1:
            codigo_quemado += 'rename to %s ;' % self.newName
        else:
            codigo_quemado += 'owner to '
            nombre = ''
            if isinstance(self.newName, Primitivo):
                nombre = self.newName.valor
            else:
                nombre = Time.resolverTime(self.newName)
            codigo_quemado += '\'%s\' ;' % nombre

        c3d = '''
    # ----------ALTER DATABASE-----------
    top_stack = top_stack + 1
    %s = "%s"
    stack[top_stack] = %s
''' % (temporal, codigo_quemado, temporal)

        return c3d
示例#6
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
示例#7
0
    def Resolver(expr, ts, Consola, exception):

        if isinstance(expr, Expresion):
            exp1 = Expresion.Resolver(expr.iz, ts, Consola, exception)
            exp2 = Expresion.Resolver(expr.dr, ts, 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):
            if ts.validar_sim(expr.id) == 1:
                return expr.id
            else:
                return 'holamundo'

        elif isinstance(expr, Primitivo):
            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
示例#8
0
    def Resolver(where, ts, Exceptions, Consola, DataSelect):

        if (isinstance(where, Where)):
            if where.caso == 1:
                # not boolean
                print('not boolean')
            elif where.caso == 2 or where.caso == 11:
                #in
                listavalores = []
                nombreCampo = Where.ObtenerNombreCampo(where)

                print('nombreCampito22---' + nombreCampo)
                datos = []

                if isinstance(where.listaValores, Select):
                    print('Select')
                    if (where.listaValores.caso == 1):
                        a = Time.resolverTime(where.listaValores.time)
                        listavalores.append(a)
                    elif (where.listaValores.caso == 3):
                        variable = Select_inst()
                        a = Select_inst.ejecutar(variable, where.listaValores,
                                                 ts, Consola, Exceptions)
                        print('valores sin filtrar Fredy')
                        print(a)
                        for val in a:
                            listavalores.append(val[0])
                        print(listavalores)
                    elif (where.listaValores.caso == 4):
                        a = Selectp3.Selectp3.ejecutar(where.listaValores, ts,
                                                       Consola, Exceptions,
                                                       False)
                        print(a)
                        for val in a[1]:
                            listavalores.append(val[0])
                        print(listavalores)
                    elif (where.listaValores.caso == 5):
                        a = Selectp4.ejecutar(where.listaValores, ts, Consola,
                                              Exceptions, False)
                        print('resultado')
                        for val in a[1]:
                            listavalores.append(val[0])
                        print(listavalores)

                else:
                    for val in where.listaValores:
                        if (isinstance(val, Primitivo)):
                            listavalores.append(val.valor)
                        elif (isinstance(val, Time)):
                            v = Time.resolverTime(val)
                            listavalores.append(str(v))
                num = Where.ColumnasRepetidas(DataSelect, nombreCampo)
                if num == 1:  # existe y no hay campos repetidos no hay ambigüedad
                    datos = Where.ObtenerDatos(DataSelect, nombreCampo)
                    print('datitos')
                    print(datos)
                    #procedemos a comparar cada registro con la lista de comparacion
                    filas = Where.filtrarLista(datos, listavalores, Exceptions)
                    print('filaaaaaaaas')
                    print(filas)
                    return [True, filas, DataSelect]
                elif num == 0:
                    Exceptions.append(
                        'Error semantico - 42703 -no existe la columna , error en '
                        + ' - ' + where.fila + ' - ' + where.columna + '')
                    return [False, 'No existe la columna ' + nombreCampo]
                else:
                    Exceptions.append(
                        'Error semantico - 42702 -la referencia a la columna es ambigua, error en '
                        + ' - ' + where.fila + ' - ' + where.columna + '')

                    return [
                        False, 'Existe ambigüedad en el campo ' + nombreCampo
                    ]

            elif where.caso == 9 or where.caso == 10:  # Not in
                # in
                listavalores = []
                nombreCampo = Where.ObtenerNombreCampo(where)

                print('nombreCampito22---' + nombreCampo)
                datos = []

                if isinstance(where.listaValores, Select):
                    print('Select')
                    if (where.listaValores.caso == 1):
                        a = Time.resolverTime(where.listaValores.time)
                        listavalores.append(a)
                    elif (where.listaValores.caso == 3):
                        variable = Select_inst()
                        a = Select_inst.ejecutar(variable, where.listaValores,
                                                 ts, Consola, Exceptions)
                        print('valores sin filtrar Fredy')
                        print(a)
                        for val in a:
                            listavalores.append(val[0])
                        print(listavalores)
                    elif (where.listaValores.caso == 4):
                        a = Selectp3.Selectp3.ejecutar(where.listaValores, ts,
                                                       Consola, Exceptions,
                                                       False)
                        print(a)
                        for val in a[1]:
                            listavalores.append(val[0])
                        print(listavalores)
                    elif (where.listaValores.caso == 5):
                        a = Selectp4.ejecutar(where.listaValores, ts, Consola,
                                              Exceptions, False)
                        print('resultado')
                        print(a)
                        for val in a[1]:
                            listavalores.append(val[0])
                else:
                    for val in where.listaValores:
                        if (isinstance(val, Primitivo)):
                            listavalores.append(val.valor)
                        elif (isinstance(val, Time)):
                            v = Time.resolverTime(val)
                            listavalores.append(str(v))
                num = Where.ColumnasRepetidas(DataSelect, nombreCampo)
                if num == 1:  # existe y no hay campos repetidos no hay ambigüedad
                    datos = Where.ObtenerDatos(DataSelect, nombreCampo)
                    print('datitos')
                    print(datos)
                    # procedemos a comparar cada registro con la lista de comparacion
                    filas = Where.filtrarLista2(datos, listavalores,
                                                Exceptions)
                    print('filaaaaaaaas')
                    print(filas)
                    return [True, filas, DataSelect]
                elif num == 0:
                    Exceptions.append(
                        'Error semantico - 42703 -no existe la columna , error en '
                        + ' - ' + where.fila + ' - ' + where.columna + '')

                    return [False, 'No existe campo ' + nombreCampo]
                else:
                    Exceptions.append(
                        'Error semantico - 42702 -la referencia a la columna es ambigua, error en '
                        + ' - ' + where.fila + ' - ' + where.columna + '')

                    return [
                        False, 'Existe ambigüedad en el campo ' + nombreCampo
                    ]
            elif where.caso == 6:  ## comparison
                print('comparison')
                print(type(where.valor1).__name__)
        elif (isinstance(where, Expresion)):
            l = Where.ResolverExpresion(where, Exceptions, Consola, DataSelect)
            print('AJAAA')
            print(l)
            return [True, l]
示例#9
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 []
示例#10
0
    def ejecutar(Select,ts,Consola,exceptions,Mostrar):
        #type(self).__name__
        ##print('what -- '+type(Select.columnas).__name__)
        x = PrettyTable()
        rowpp=[]
        en=[]

        for columna in Select.columnas:
            i=0

            if isinstance(columna , Select.__class__):
                Consola.append('what -- ' + type(columna).__name__ + '\n')
            elif isinstance(columna,Time):
                en.append('time')

                time = Time.resolverTime(columna)
                rowpp.append(time)
                #Consola.append('what -- ' + time + '\n')
            elif isinstance(columna,IdId):# no porque no tiene from
                Consola.append('what -- ' + type(columna).__name__ + '\n')
                exceptions.append(
                    'Error semantico - 42P01 - falta una entrada para la tabla en la cláusula FROM, error en ' + ' - ' + str(Select.fila) + ' - ' + str(Select.columna) + '')
            elif isinstance(columna,IdId):# no porque no tiene from
                Consola.append('42P01 - falta una entrada para la tabla en la cláusula FROM')
                exceptions.append(
                    'Error semantico - 42P01 - falta una entrada para la tabla en la cláusula FROM, error en ' + ' - ' + str(Select.fila) + ' - ' + str(Select.columna) + '')
            elif isinstance(columna, Funcion):
                bdactual = ts.buscar_sim("usedatabase1234")
                if bdactual is not None:
                    BD = ts.buscar_sim(bdactual.valor)
                    entornoBD = BD.Entorno
                    funcion = entornoBD.buscar_sim(columna.id)
                    if funcion.categoria == TS.TIPO_DATO.FUNCTION:
                        datafinal = EjecutarFuncion.ResolverFuncion(columna, ts, Consola, exceptions)
                        EjecutarFuncion.limpiarFuncion(columna, ts)
                    en.append(columna.id)
                    rowpp.append(datafinal)
                    EjecutarFuncion.limpiarFuncion(columna, ts)
                else:
                    Consola.append('42883	undefined_function')
                    exceptions.append(
                        'Error semantico - 42883 - undefined_functions' + ' - ' + str(
                            Select.fila) + ' - ' + str(Select.columna) + '')
            elif isinstance(columna, IdAsId):
                # no porque no tiene from
                if(isinstance(columna.id2,Primitivo)):
                    en.append(columna.id2.valor)
                else:
                    en.append(columna.id2.id)


                val = IdAsId.Resolver(columna, ts, Consola, exceptions)
                rowpp.append(str(val))
                #Consola.append('what -- ' + str(val)+ '\n')
            elif isinstance(columna,Math_): #hay que resolver
                en.append(str(columna.nombre))
                val=Math_.Resolver(columna,Consola,Consola,exceptions)
                rowpp.append(str(val))
                #Consola.append('what -- ' + type(columna).__name__ + '\n')
            elif isinstance(columna,Trigonometrica):  #hay que resolver
                en.append(str(columna.trig))
                REST=Trigonometrica.Resolver(columna,ts,Consola,exceptions)
                rowpp.append(str(REST))
                #Consola.append('what -- ' + str(REST) + '\n')
            i= i + 1


        x.add_row(rowpp)
        x.field_names = en

        if Mostrar:
            Consola.append('\n'+x.get_string()+'\n')
        return [en, rowpp]
示例#11
0
 def Resolver(expr,ts,Consola,exception):
     if isinstance(expr,Expresion):
         exp1 = Expresion.Resolver(expr.iz,ts,Consola,exception)
         exp2 = Expresion.Resolver(expr.dr,ts,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 == '==':
             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):
         if ts.validar_sim(expr.id) == 1:
             simvariable = ts.buscar_sim(expr.id)
             return simvariable.valor
         else:
             return 'holamundo' #No deberia de pasar
     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_):
         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