honeysql/src/honey/sql/pg_ops.cljc
2022-04-23 15:40:47 -07:00

74 lines
2.4 KiB
Clojure

;; copyright (c) 2022 sean corfield, all rights reserved
(ns honey.sql.pg-ops
"Register all the PostgreSQL JSON/JSONB operators
and provide convenient Clojure names for those ops.
In addition, provide names for the PostgreSQL
regex operators as well.
For the eleven that cannot be written directly as
symbols, use mnemonic names: hash for #, at for @,
and tilde for ~.
For the six of those that cannot be written as
keywords, invoke the `keyword` function instead.
Those latter eight (`at>`, `<at`, `at?`, `atat`,
`tilde`, `tilde*`, `!tilde`, and `!tilde*`) are
the only ones that should really be needed in the
DSL. The other names are provided for completeness.
`regex` and `iregex` are provided as aliases for the
regex operators `tilde` and `tilde*` respectively.
`!regex` and `!iregex` are provided as aliases for the
regex operators `!tilde` and `!tilde*` respectively."
(:refer-clojure :exclude [-> ->> -])
(:require [honey.sql :as sql]))
;; see https://www.postgresql.org/docs/current/functions-json.html
(def -> "The -> operator." :->)
(def ->> "The ->> operator." :->>)
(def hash> "The #> operator." :#>)
(def hash>> "The #>> operator." :#>>)
(def at> "The @> operator." (keyword "@>"))
(def <at "The <@ operator." (keyword "<@"))
(def ? "The ? operator." :?)
(def ?| "The ?| operator." :?|)
(def ?& "The ?& operator." :?&)
(def || "The || operator." :||)
(def - "The - operator." :-)
(def hash- "The #- operator." :#-)
(def at? "The @? operator." (keyword "@?"))
(def atat "The @@ operator." (keyword "@@"))
(def tilde "The case-sensitive regex match operator." (keyword "~"))
(def tilde* "The case-insensitive regex match operator." (keyword "~*"))
(def !tilde "The case-sensitive regex unmatch operator." (keyword "!~"))
(def !tilde* "The case-insensitive regex unmatch operator." (keyword "!~*"))
;; aliases:
(def regex tilde)
(def iregex tilde*)
(def !regex !tilde)
(def !iregex !tilde*)
(sql/register-op! :-> :variadic true)
(sql/register-op! :->>)
(sql/register-op! :#>)
(sql/register-op! :#>>)
(sql/register-op! at>)
(sql/register-op! <at)
(sql/register-op! :?)
(sql/register-op! :?|)
(sql/register-op! :?&)
;; these are already known operators:
;(sql/register-op! :||)
;(sql/register-op! :-)
(sql/register-op! :#-)
(sql/register-op! at?)
(sql/register-op! atat)
(sql/register-op! tilde)
(sql/register-op! tilde*)
(sql/register-op! !tilde)
(sql/register-op! !tilde*)