# zesql **Repository Path**: ellipse/zesql ## Basic Information - **Project Name**: zesql - **Description**: No description available - **Primary Language**: Clojure - **License**: EPL-1.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2015-06-24 - **Last Updated**: 2020-12-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Zesql [![Clojars Project](http://clojars.org/zesql/latest-version.svg)](http://clojars.org/zesql) A SQL library based on Yesql and Selmer. ## Usage - samples.clj ```clojure (ns zesql.samples (:require [zesql.core :as zs :refer [defqueries]])) (zs/debug-on!) (def db-spec {:classname "org.h2.Driver" :subprotocol "h2" :subname "./zesql" :make-pool? true :naming {:keys clojure.string/lower-case :fields clojure.string/upper-case}}) (defqueries "zesql/query.sql" {:connection db-spec}) ``` - init db-spec at runtime ```clojure (def delay-spec (delay db-spec)) (defqueries "zesql/query.sql" {:connection delay-spec}) ``` - enable cache ```clojure (zesql/cache-on!) ``` - disable dynamic sql require [zesql "0.1.3-beta1"] and higher ```clojure [zesql "x.y.z" :exclusions [selmer]] ;; then (zesql/dynamic-off!) ``` - Select ```sql -- name: testsql SELECT * FROM user ``` ```clojure (testsql) ; Zesql ---> "SELECT * FROM user" ; Zesql ===> ["SELECT * FROM user"] ``` - Order By ```sql -- name: test-const-order -- retrieve a user given the id. SELECT * FROM user {% order-by "ID" %} ``` ```clojure (test-const-order) ; Zesql ---> "SELECT * FROM user\r\n ORDER BY ID" ; Zesql ===> ["SELECT * FROM user\r\n ORDER BY ID"] ``` - Order By (2) ```sql -- name: test-const-order-dir SELECT * FROM user {% order-by "ID" "ASC" %} ``` ```clojure (test-const-order-dir) ; Zesql ---> "SELECT * FROM user\r\n ORDER BY ID ASC" ; Zesql ===> ["SELECT * FROM user\r\n ORDER BY ID ASC"] ``` - Order By (3) ```sql -- name: test-dynamic-order SELECT * FROM user {% order-by field %} ``` ```clojure (test-dynamic-order {:field "NAME"}) ; Zesql ---> "SELECT * FROM user\r\n ORDER BY NAME" ; Zesql ===> ["SELECT * FROM user\r\n ORDER BY NAME"] ``` - Order By (4) ```sql -- name: test-dynamic-order-dir SELECT * FROM user {% order-by field dir %} ``` ```clojure (test-dynamic-order-dir {:field :name :dir "DESC"}) ; Zesql ---> "SELECT * FROM user\r\n ORDER BY name DESC" ; Zesql ===> ["SELECT * FROM user\r\n ORDER BY name DESC"] ``` - Where ```sql -- name: test-where SELECT * FROM user {% where %} {% if id %} OR id = :id {% endif %} {% if name %} AND name = :name AND {% endif %} {% endwhere %} ``` ```clojure (test-where) ; Zesql ---> "SELECT * FROM user\r\n" ; Zesql ===> ["SELECT * FROM user\r\n"] (test-where {:id 2 :name "bbb"}) ; Zesql ---> "SELECT * FROM user\r\n WHERE id = :id AND name = :name" ; Zesql ===> ["SELECT * FROM user\r\n WHERE id = ? AND name = ?" 2 "bbb"] (test-where {:id 2}) ; Zesql ---> "SELECT * FROM user\r\n WHERE id = :id" ; Zesql ===> ["SELECT * FROM user\r\n WHERE id = ?" 2] (test-where {:name "aaa"}) ; Zesql ---> "SELECT * FROM user\r\n WHERE name = :name" ; Zesql ===> ["SELECT * FROM user\r\n WHERE name = ?" "aaa"] ``` - Update Set ```sql -- name: test-set! UPDATE user {% set %} {% if name %} name = :name, {% endif %} {% if age %} age = :age {% endif %} {% endset %} WHERE id = :id ``` ```clojure (test-set! {:id 3 :name "abc"}) ; Zesql ---> "UPDATE user\r\n SET name = :name\r\nWHERE id = :id" ; Zesql ===> ["UPDATE user\r\n SET name = ?\r\nWHERE id = ?" "abc" 3] ``` ## License Copyright © 2015 Misty000 Distributed under the Eclipse Public License either version 1.0 or (at your option) any later version.