composer require phel-lang/phel-sql(ns my-app.queries
(:require phel.sql :as sql))
(sql/format
{:select [:u/id :u/name]
:from [[:users :u]]
:join [[:orders :o] [:= :u/id :o/user_id]]
:where [:= :u/status "active"]})
;; => ["SELECT u.id, u.name FROM users AS u JOIN orders AS o ON u.id = o.user_id WHERE u.status = ?"
;; ["active"]]
(sql/format
{:insert-into :users
:values [{:name "alice" :email "a@x.com"}]
:returning [:id]})
;; => ["INSERT INTO users (email, name) VALUES (?, ?) RETURNING id" ["a@x.com" "alice"]]
(sql/format
{:update :users
:set {:status "banned"}
:where [:= :id 42]
:returning [:id :status]})
;; => ["UPDATE users SET status = ? WHERE id = ? RETURNING id, status" ["banned" 42]]
The library returns data. Execution is your call:
[$sql, $params] = $compiled; // from sql/format
$stmt = $pdo->prepare($sql);
$stmt->execute($params);- Clauses for the full reference.
- Parameters for how values, identifiers, and subqueries interact.