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)
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'))
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'))
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'))
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)
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)
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)
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()
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)
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')
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'))
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')
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)
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'))
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'))
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)
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'])
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')
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')
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')
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)
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'])
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)
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()
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)
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')
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')
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')
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')
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)