示例#1
0
 def test_delete_with_from(self):
     filtro = ( oequ(Pais.nome, 'Brasil'), )
     self.assertEqual(len(select(Estado).join(Pais).filter(*filtro).values(Pais.nome)), 2)
     delete(Cidade).run()
     delete(Estado).join(Pais).filter(*filtro).run()
     self.assertEqual(len(select(Estado).join(Pais).filter(*filtro).values(Pais.nome)), 0)
     self.assertEqual(len(select(Estado).join(Pais).filter(oequ(Pais.nome, 'Estados Unidos Da América')).values(Pais.nome)), 3)
示例#2
0
    def test_sql_filter_not_exists(self):
        pais_filter = select(Pais).filter(oequ(Pais.codigo, '0055'), oequ(Estado.pais, Pais.id))
        estados = select(Estado).filter(onex(pais_filter)).values(Estado.nome)
        self.assertGreater(len(estados), 0)   

        for estado in estados:            
            self.assertNotIn(estado[0], ('Minas Gerais', 'São Paulo'))
示例#3
0
 def test_sql_filter_not_in_clause_sub_sql(self):
     filter_pais_in = select(Pais).filter(oequ(Pais.nome, 'Brasil')).set_fields(Pais.id)
     sql_obj = select(Estado).filter(
         onin(Estado.pais, filter_pais_in)
     )
     
     estados = sql_obj.values(Estado.nome)        
     for estado in estados:            
         self.assertIn(estado[0], ('Texas', 'California', 'Carolina do Norte'))
示例#4
0
 def test_sql_filter_in_clause_sub_sql(self):
     filter_pais_in = select(Pais).filter(oequ(Pais.nome, 'Brasil')).set_fields(Pais.id)
     sql_obj = select(Estado).filter(
         oin(Estado.pais, filter_pais_in)
     )
     
     estados = sql_obj.values(Estado.nome)        
     for estado in estados:            
         self.assertIn(estado[0], ('Minas Gerais', 'São Paulo'))
示例#5
0
 def test_max(self):
     self.assertEqual(select(Produto).values(fmax(Produto.valor_unitario))[0]['valor_unitario'], 950)
     vendas = select(Produto).order_by(Produto.categoria).values(fmax(Produto.valor_unitario), Produto.categoria)
     self.assertEqual(float(vendas[0]['valor_unitario']), 350.50)
     self.assertEqual(float(vendas[1]['valor_unitario']), 950)
     
     vendas = select(Produto).order_by(Produto.categoria).values(fmax(Produto.valor_unitario))
     self.assertEqual(float(vendas[0]['valor_unitario']), 350.50)
     self.assertEqual(float(vendas[1]['valor_unitario']), 950.00)
示例#6
0
 def test_min(self):
     self.assertEqual(float(select(Produto).filter(onlike(Produto.nome, "%Limpador%")).values(fmin(Produto.valor_unitario))[0]['valor_unitario']), 199.99)
     vendas = select(Produto).order_by(Produto.categoria).values(fmin(Produto.valor_unitario), Produto.categoria)
     self.assertEqual(float(vendas[0]['valor_unitario']), 199.99)
     self.assertEqual(float(vendas[1]['valor_unitario']), 540)
     
     vendas = select(Produto).order_by(Produto.categoria).values(fmin(Produto.valor_unitario))
     self.assertEqual(float(vendas[0]['valor_unitario']), 199.99)
     self.assertEqual(float(vendas[1]['valor_unitario']), 540.00)
示例#7
0
 def test_length_filter(self):
     self.assertEqual(select(Produto).filter(
         oequ(Produto.nome, ' Limpador de parabrisa '), \
         oequ(flength(Produto.nome), 23) ). \
         values(flength(Produto.nome))[0]['nome'], 23)
     
     self.assertEqual(select(Produto).filter(
             oequ(Produto.nome, ' Limpador de parabrisa '),
             oequ(flength(ftrim(Produto.nome)), 21) \
         ).values(flength(ftrim(Produto.nome)))[0]['nome'], 21)
示例#8
0
    def setUp(self):
        #base = os.path.join(os.getcwd(), 'test/') 
        #manage_db(clear_cache_param='RECREATEDB', ask_question=False, base_dir= base, models_package='test.models')
        recreate_db()
        Pais.clear()
        Pais.nome.value = 'Brasil'
        Pais.codigo.value = '0055'
        insert(Pais).run()

        pais_id = select(Pais).values(Pais.id)[0][0]
        Estado.clear()
        Estado.nome.value = 'São Paulo'
        Estado.pais.value = pais_id
        insert(Estado).run()


        Estado.clear()
        Estado.nome.value = 'Minas Gerais'
        Estado.sigla.value = 'MG'
        Estado.pais.value = pais_id
        insert(Estado).run()

        Pais.clear()
        Pais.nome.value = 'Estados Unidos Da América'
        Pais.codigo.value = '0056'
        insert(Pais).run()

        pais_id = select(Pais).filter(oequ(Pais.nome, 'Estados Unidos Da América')).values(Pais.id)[0][0]
        Estado.clear()
        Estado.nome.value = 'California'
        Estado.pais.value = pais_id
        insert(Estado).run()

        Estado.clear()
        Estado.nome.value = 'Carolina do Norte'
        Estado.pais.value = pais_id
        insert(Estado).run()

        Estado.clear()
        Estado.nome.value = 'Texas'
        Estado.pais.value = pais_id
        insert(Estado).run()


        Pais.clear()
        Pais.nome.value = 'Argentina'
        insert(Pais).run()

        Cidade.clear()
        Cidade.nome.value = 'Belo Horizonte'
        Cidade.estado.value = select(Estado).filter(oequ(Estado.sigla, 'MG')).values(Estado.id).get_first()["id"]
        insert(Cidade).run() 
示例#9
0
    def test_count(self):
        vendas = select(Venda).values(fcount())
        self.assertEqual(vendas[0][0], 4)

        vendas = select(Venda).join(Produto).values(fcount(fdistinct(Produto.categoria)))
        self.assertEqual(vendas[0][0], 2)
     
        vendas = select(Venda).values(fcount(Venda.quantidade))
        self.assertEqual(vendas[0][0], 3)

        vendas = select(Venda).join(Produto).values(fcount(fdistinct(Produto.categoria)), Produto.categoria)
        self.assertEqual(vendas[0][0], 1)
        self.assertEqual(vendas[0][0], 1)
示例#10
0
    def test_delete(self):
        get_id_produto = lambda nome_prod : select(Produto).filter(oequ(Produto.nome, nome_prod)).values(Produto.id)[0]['id']
        VendaMultipla.clear()
        VendaMultipla.data_venda.value = datetime.datetime.now()
        VendaMultipla.produtos.add(get_id_produto('Roda de aço aro 13'))
        VendaMultipla.produtos.add(get_id_produto('Pneu aro 13'))
        insert(VendaMultipla).run()

        delete(VendaMultipla.produtos).filter(oequ(Produto.nome, 'Roda de aço aro 13')).run()

        vendas_produto = select(VendaMultipla).join(Produto).values(Produto.nome)
        
        self.assertEqual(len(vendas_produto), 1)
        
        vendas_produto = select(VendaMultipla).join(Produto).values(Produto.nome)
        self.assertEqual(vendas_produto[0]["nome"], 'Pneu aro 13')
示例#11
0
 def test_sql_filter_in_clause(self):
     sql_obj = select(Estado).filter(
         oin(Estado.nome, 'California', 'Minas Gerais')
     )
     estados = sql_obj.values(Estado.nome)        
     for estado in estados:            
         self.assertIn(estado[0], ('California', 'Minas Gerais'))
示例#12
0
    def test_sql_with_simple_filter(self):

        estados = select(Estado).join(Pais).filter(oequ(Pais.nome, 'Brasil'), 
            oequ(Estado.nome, 'São Paulo')).values(Estado.nome, Pais.nome)
        
        self.assertEqual(estados[0][0], 'São Paulo')
        self.assertEqual(estados[0][1], 'Brasil')
示例#13
0
 def test_sql_get_all_fields_from_one_table(self):
     sql = select(Cidade).join(Estado).join(Pais).\
         get_sql(Estado, Cidade.nome, (Pais.codigo, 'CODIGO_PAIS'))
     sql_test = 'SELECT ESTADO.*, CIDADE.NOME, PAIS.CODIGO AS CODIGO_PAIS '+ \
     'FROM CIDADE CIDADE '+ \
     'JOIN ESTADO ESTADO ON CIDADE.ESTADO_ID = ESTADO.ID '+ \
     'JOIN PAIS PAIS ON ESTADO.PAIS_ID = PAIS.ID'
     self.assertEqual(sql.upper(), sql_test)
示例#14
0
 def test_sql_filter_not_like(self):
     sql_obj = select(Estado).filter(
         onlike(Estado.nome, 'Ca%')
     )
     
     estados = sql_obj.values(Estado.nome)  
     self.assertGreater(len(estados), 0)         
     for estado in estados:            
         self.assertNotIn(estado[0], ('California', 'Carolina do Norte'))        
示例#15
0
    def test_sql_filter_in_clause_2(self):
        sql_obj = select(Estado).join(Pais).filter(
            oin(Estado.nome, 'California', 'Minas Gerais'),
            oequ(Pais.nome, 'Brasil')
        )

        estados = sql_obj.values(Estado.nome, Pais.nome)        
        for estado in estados:            
            self.assertIn(estado[0], ('Minas Gerais'))
示例#16
0
 def test_sql_with_field_alias(self):
     sql = select(Cidade).join(Estado).join(Pais).\
         get_sql((Pais.nome, 'NOME_PAIS'), (Estado.nome, 'NOME_ESTADO'), \
             (Cidade.nome, 'NOME_CIDADE'), Cidade.estado)
     sql_test = 'SELECT PAIS.NOME AS NOME_PAIS, ESTADO.NOME AS NOME_ESTADO, CIDADE.NOME AS NOME_CIDADE, CIDADE.ESTADO_ID AS ESTADO '+ \
     'FROM CIDADE CIDADE '+ \
     'JOIN ESTADO ESTADO ON CIDADE.ESTADO_ID = ESTADO.ID '+ \
     'JOIN PAIS PAIS ON ESTADO.PAIS_ID = PAIS.ID'
     self.assertEqual(sql.upper(), sql_test)
示例#17
0
 def test_avg(self):
     vendas = select(Venda).join(Produto).values(favg(Produto.valor_unitario), Produto.categoria)
     for venda in vendas:
         if venda['categoria'] == 'PNEU':
             self.assertEqual(float(venda['valor_unitario']), 275.245)
         elif venda['categoria'] == 'RODA':
             self.assertEqual(float(venda['valor_unitario']), 745)
         else:
             raise Exception('CATEGORIA NÃO PERTENCENTE AO FILTRO ' + venda['categoria'])
示例#18
0
    def test_sql_filter_or(self):

        sql_obj = select(Estado).join(Pais).filter(
            oequ(Estado.nome, 'São Paulo'),
            oor(oequ(Estado.nome, 'Minas Gerais') ))        
        estados = sql_obj.values(Estado.nome, Pais.nome)        
        
        for estado in estados:            
            self.assertIn(estado[0], ('São Paulo', 'Minas Gerais'), )
            self.assertEqual(estado[1], 'Brasil')
示例#19
0
    def test_simple_update(self):
        filtro_estado = (oequ(Estado.nome, 'Minas Gerais'),)
        Estado.clear()
        Estado.sigla.value = 'MG'
        update(Estado).filter(*filtro_estado).run()
        estados = select(Estado).filter(*filtro_estado).values(Estado.sigla)
        self.assertGreater(len(estados), 0)   

        for estado in estados:            
            self.assertEqual(estado[0], 'MG')
示例#20
0
    def test_from_update(self):
        filtro_estado = (oequ(Pais.nome, 'Brasil'),)
        Estado.clear()
        Estado.sigla.value = 'BR'
        update(Estado).join(Pais).filter(*filtro_estado).run()
        estados = select(Estado).join(Pais).filter(*filtro_estado).values(Estado.sigla)
        self.assertGreater(len(estados), 0)   

        for estado in estados:            
            self.assertEqual(estado[0], 'BR')
示例#21
0
    def test_insert(self):
        get_id_produto = lambda nome_prod : select(Produto).filter(oequ(Produto.nome, nome_prod)).values(Produto.id)[0]['id']
        VendaMultipla.clear()
        VendaMultipla.data_venda.value = datetime.datetime.now()
        VendaMultipla.produtos.add(get_id_produto('Roda de aço aro 13'))
        VendaMultipla.produtos.add(get_id_produto('Pneu aro 13'))
        insert(VendaMultipla).run()

        vendas_produto = select(VendaMultipla).join(Produto).values(Produto.nome)
        
        self.assertEqual(len(vendas_produto), 2)

        VendaMultipla.clear()
        VendaMultipla.id.value = select(VendaMultipla).values(fmax(VendaMultipla.id)).get_first()["id"]
        VendaMultipla.produtos.add(get_id_produto(' Limpador de parabrisa '))
        insert(VendaMultipla.produtos).run()

        vendas_produto = select(VendaMultipla).join(Produto).values(Produto.nome)        
        self.assertEqual(len(vendas_produto), 3)
示例#22
0
 def test_sum_select_group_by(self):
     vendas = select(Venda).join(Produto).values(fsum(Produto.valor_unitario, 'soma_valor_unitario'), fsum(Venda.quantidade), Produto.categoria)
     for venda in vendas:
         if venda['categoria'] == 'PNEU':
             self.assertEqual(float(venda['soma_valor_unitario']), 550.49)
             self.assertEqual(float(venda['quantidade']), 6)
         elif venda['categoria'] == 'RODA':
             self.assertEqual(float(venda['soma_valor_unitario']), 1490)
             self.assertEqual(float(venda['quantidade']), 4)
         else:
             raise Exception('CATEGORIA NÃO PERTENCENTE AO FILTRO ' + venda['categoria'])
示例#23
0
 def test_sql_where(self):
     self.maxDiff = None
     sql = select(Cidade).join(Estado).join(Pais).filter(oequ(Cidade.nome, 'BELO HORIZONTE') , 
         odif(Estado.nome, 'BAHIA') ).filter(oequ(Pais.codigo, 50)). \
         get_sql(Estado, Cidade.nome, (Pais.codigo, 'CODIGO_PAIS'))
     sql_test = 'SELECT ESTADO.*, CIDADE.NOME, PAIS.CODIGO AS CODIGO_PAIS '+ \
     'FROM CIDADE CIDADE '+ \
     'JOIN ESTADO ESTADO ON CIDADE.ESTADO_ID = ESTADO.ID '+ \
     'JOIN PAIS PAIS ON ESTADO.PAIS_ID = PAIS.ID '+\
     'WHERE ((CIDADE.NOME = %s) AND (ESTADO.NOME <> %s)) '+\
     'AND ((PAIS.CODIGO = %s))'
     self.assertEqual(sql.upper().replace('%S', '%s'), sql_test)
示例#24
0
    def setUp(self):
        recreate_db()
        Produto.clear()
        Produto.nome.value = 'Pneu aro 15'
        Produto.categoria.value = 'PNEU'
        Produto.valor_unitario.value = 350.50
        insert(Produto).run()

        Produto.clear()
        Produto.nome.value = 'Pneu aro 13'
        Produto.categoria.value = 'PNEU'
        Produto.valor_unitario.value = 199.99
        insert(Produto).run()

        Produto.clear()
        Produto.nome.value = 'Roda de aço aro 13'
        Produto.categoria.value = 'RODA'
        Produto.valor_unitario.value = 540
        insert(Produto).run()

        Produto.clear()
        Produto.nome.value = 'Roda de aço aro 15'
        Produto.categoria.value = 'RODA'
        Produto.valor_unitario.value = 950
        insert(Produto).run()
        
        Produto.clear()
        Produto.nome.value = ' Limpador de parabrisa '
        Produto.categoria.value = 'ZZZZ'
        Produto.valor_unitario.value = 0
        insert(Produto).run()

        get_id_produto = lambda nome_prod : select(Produto).filter(oequ(Produto.nome, nome_prod)).values(Produto.id)[0]['id']
        
        Venda.clear()
        Venda.produto.value = get_id_produto('Pneu aro 15')
        Venda.quantidade.value = 4
        insert(Venda).run()
        
        Venda.clear()
        Venda.produto.value = get_id_produto('Roda de aço aro 15')
        Venda.quantidade.value = 4
        insert(Venda).run()

        Venda.clear()
        Venda.produto.value = get_id_produto('Pneu aro 13')
        Venda.quantidade.value = 2
        insert(Venda).run()
        
        Venda.clear()
        Venda.produto.value = get_id_produto('Roda de aço aro 13')
        #Venda.quantidade.value = NullValue
        insert(Venda).run()
示例#25
0
    def test_sql_select_with_join(self):
        sql = select(Estado).join(Pais).get_sql()
        sql_test = 'SELECT ESTADO.ID, ESTADO.PAIS_ID AS PAIS, ESTADO.NOME, ESTADO.SIGLA, PAIS.ID, PAIS.NOME, PAIS.CODIGO FROM ESTADO ESTADO JOIN PAIS PAIS ON ESTADO.PAIS_ID = PAIS.ID'
        self.assertEqual(sql.upper(), sql_test)

        sql = select(Estado).join(Pais).get_sql(Pais.nome, Estado.nome)
        sql_test = 'SELECT PAIS.NOME, ESTADO.NOME FROM ESTADO ESTADO JOIN PAIS PAIS ON ESTADO.PAIS_ID = PAIS.ID'
        self.assertEqual(sql.upper(), sql_test)

        sql = select(Cidade).join(Estado).join(Pais).get_sql(Pais.nome, Estado.nome, Cidade.nome)
        sql_test = 'SELECT PAIS.NOME, ESTADO.NOME, CIDADE.NOME '+ \
        'FROM CIDADE CIDADE '+ \
        'JOIN ESTADO ESTADO ON CIDADE.ESTADO_ID = ESTADO.ID '+ \
        'JOIN PAIS PAIS ON ESTADO.PAIS_ID = PAIS.ID'
        self.assertEqual(sql.upper(), sql_test)

        sql = select(Cidade).join(Estado).join(Pais).get_sql(Pais.nome, Estado.nome, Cidade.nome, Cidade.estado)
        sql_test = 'SELECT PAIS.NOME, ESTADO.NOME, CIDADE.NOME, CIDADE.ESTADO_ID AS ESTADO '+ \
        'FROM CIDADE CIDADE '+ \
        'JOIN ESTADO ESTADO ON CIDADE.ESTADO_ID = ESTADO.ID '+ \
        'JOIN PAIS PAIS ON ESTADO.PAIS_ID = PAIS.ID'
        self.assertEqual(sql.upper(), sql_test)
示例#26
0
    def test_sql_filter_or_2(self):

        sql_obj = select(Estado).join(Pais).filter(            
                oequ(Pais.nome, 'Estados Unidos Da América'),
                odif(Estado.nome, 'Carolina do Norte'),
                odif(Estado.nome, 'Texas'),
                oor(oequ(Estado.nome, 'Minas Gerais'),  oequ(Pais.nome, 'Brasil'))                  
        )        
        estados = sql_obj.values(Estado.nome, Pais.nome)        
        for estado in estados:            
            self.assertIn(estado[0], ('California', 'Minas Gerais'))
            if estado[0] == 'California':
                self.assertEqual(estado[1], 'Estados Unidos Da América')
            else:    
                self.assertEqual(estado[1], 'Brasil')
示例#27
0
 def test_sql_simple_select_with_fields(self):
     sql = select(Estado).get_sql(Estado.nome)
     self.assertEqual(sql.upper(), 'SELECT ESTADO.NOME FROM ESTADO ESTADO')
     sql = select(Estado).get_sql(Estado.nome, Estado.pais)
     self.assertEqual(sql.upper(), 'SELECT ESTADO.NOME, ESTADO.PAIS_ID AS PAIS FROM ESTADO ESTADO')
示例#28
0
 def test_sql_simple_select(self):        
     sql = select(Estado).get_sql()
     self.assertEqual(sql.upper(), 'SELECT ESTADO.ID, ESTADO.PAIS_ID AS PAIS, ESTADO.NOME, ESTADO.SIGLA FROM ESTADO ESTADO')
示例#29
0
 def test_lpad_filter(self):
     self.assertEqual(select(Produto).filter(oequ(flpad(Produto.nome, '0', 13), '00Pneu aro 15')).values(flpad(Produto.nome, '0', 13))[0]['nome'], '00Pneu aro 15')
示例#30
0
 def test_instr_filter(self):
     self.assertEqual(select(Produto).filter(
         oequ(Produto.nome, ' Limpador de parabrisa '),
         oequ(finstr(Produto.nome, 'L'), 2)
     ).values(finstr(Produto.nome, 'L'))[0]['nome'], 2)