Skip to content

Construtor de queries SQL em Clojure usando programação funcional com closures, composição de funções e operadores lógicos

Notifications You must be signed in to change notification settings

PhelipeScript/sql_query_builder

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 

Repository files navigation

SQL Query Builder em Clojure

📋 Descrição

Este projeto implementa um construtor de queries SQL em Clojure utilizando programação funcional. O objetivo é criar queries SQL de forma programática, segura e legível, aproveitando os recursos da linguagem funcional.

🎯 Objetivo Acadêmico

Demonstrar conceitos de programação funcional em Clojure, incluindo:

  • Funções de alta ordem (higher-order functions)
  • Closures
  • Redução e composição de funções
  • Aplicação parcial de funções
  • Imutabilidade

🚀 Funcionalidades

1. Criação de Queries Básicas

A função busca_tabela retorna uma função que pode ser chamada de diferentes formas:

;; Selecionar todos os campos
((busca_tabela "usuario"))
;; Resultado: "SELECT * FROM usuario"

;; Com filtros
((busca_tabela "usuario") "idade > 18")
;; Resultado: "SELECT * FROM usuario WHERE idade > 18"

;; Com campos específicos e filtros
((busca_tabela "usuario") "nome, email" "idade > 18")
;; Resultado: "SELECT nome, email FROM usuario WHERE idade > 18"

2. Seleção de Campos

A função campos recebe uma lista de campos e os formata para SQL:

(campos ["abc", "xyz"])
;; Resultado: "abc, xyz"

3. Operadores SQL Suportados

A função filtros aceita diferentes operadores através de mapas:

  • :igual_a=
  • :diferente_de<>
  • :maior_que>
  • :menor_que<
  • :emIN (...)
  • :valor= (padrão)
{:campo "idade", :maior_que 20}
;; Resultado: "idade > 20"

{:campo "id", :em [10, 20, 30]}
;; Resultado: "id IN (10, 20, 30)"

4. Operadores Lógicos

AND (e_s)

Combina múltiplas condições com o operador AND:

(e_s [
  {:campo "nome", :igual_a "José"},
  {:campo "idade", :maior_que 20}
])
;; Resultado: "nome = "José" AND idade > 20"

OR (ou_s)

Combina múltiplas condições com o operador OR:

(ou_s [
  {:campo "camiseta", :valor "verde"},
  {:campo "camiseta", :valor "azul"}
])
;; Resultado: "(camiseta = "azul" OR camiseta = "verde")"

📝 Exemplo Completo

((busca_tabela "usuario")
 (campos ["abc", "xyz"])
 (filtros 
   (e_s [
     {:campo "nome", :igual_a "José"},
     {:campo "idade", :maior_que 20},
     {:campo "id", :em [10, 20, 30]},
     {:campo "status", :igual_a true},
     (ou_s [
       {:campo "camiseta", :valor "verde"}, 
       {:campo "camiseta", :valor "azul"}
     ])
   ])
 )
)

Resultado:

SELECT abc, xyz FROM usuario WHERE nome = "José" AND idade > 20 AND id IN (10, 20, 30) AND status = true AND ((camiseta = "verde" OR camiseta = "azul"))

🔧 Estrutura do Código

Funções Principais

Função Descrição
busca_tabela Cria uma closure que gera queries SELECT
campos Formata uma lista de campos para SQL
filtros Processa filtros (aceita string ou mapa)
e_s Combina filtros com operador AND
ou_s Combina filtros com operador OR

Funções Auxiliares

Função Descrição
aux_juntar_campos Concatena campos com vírgula
formatar_valor Formata valores conforme o tipo (string, boolean, número)
aux_operador_sql Converte operadores do mapa para SQL
aux_juntar_campo_valor Combina campo e operador
aux_adiciona_and Adiciona AND entre condições
aux_adiciona_or Adiciona OR entre condições

💡 Conceitos de Programação Funcional Aplicados

  1. Closures: busca_tabela retorna uma função que "lembra" o nome da tabela
  2. Aplicação Parcial: (def e_s (partial reduce aux_adiciona_and ""))
  3. Funções de Alta Ordem: reduce, map, funções que retornam funções
  4. Imutabilidade: Todas as operações retornam novos valores sem alterar os originais
  5. Composição: Funções podem ser encadeadas para criar queries complexas

✨ Possíveis Melhorias

  • Adicionar suporte para JOIN
  • Implementar ORDER BY e GROUP BY
  • Adicionar validação de SQL injection
  • Suportar agregações (COUNT, SUM, AVG, etc.)
  • Implementar INSERT, UPDATE e DELETE

Disciplina: Paradigmas de Programação Instituição: Centro Universitário Senac Autor: Phelipe Pereira Data: 06/10/2025

About

Construtor de queries SQL em Clojure usando programação funcional com closures, composição de funções e operadores lógicos

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published