Skip to content

Latest commit

 

History

History
64 lines (48 loc) · 1.3 KB

quickstart.md

File metadata and controls

64 lines (48 loc) · 1.3 KB

Quickstart

Install

composer require phel-lang/phel-sql

Require it

(ns my-app.queries
  (:require phel.sql :as sql))

Three queries

1. Filtered select with a join

(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"]]

2. Insert returning the new row

(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"]]

3. Update with returning

(sql/format
  {:update    :users
   :set       {:status "banned"}
   :where     [:= :id 42]
   :returning [:id :status]})
;; => ["UPDATE users SET status = ? WHERE id = ? RETURNING id, status" ["banned" 42]]

Run it against a database

The library returns data. Execution is your call:

[$sql, $params] = $compiled;          // from sql/format
$stmt = $pdo->prepare($sql);
$stmt->execute($params);

Next

  • Clauses for the full reference.
  • Parameters for how values, identifiers, and subqueries interact.