Public Vars

Back

composite (clj)

(source)

function

(composite & args)
Accepts any number of SQL expressions and produces a composite value from them: (composite :a 42) Produces: (a, ?) Parameters: 42

Examples

honeysql
(ns honey.sql-test
  (:refer-clojure :exclude [format])
  (:require [clojure.string :as str]
            [clojure.test :refer [deftest is testing]]
            [honey.sql :as sut :refer [format]]
            [honey.sql.helpers :as h])
  #?(:clj (:import (clojure.lang ExceptionInfo))))

(deftest issue-474-dot-selection
  (testing "basic dot selection"
    (is (= ["SELECT a.b, c.d, a.d.x"]
           (let [t :a c :d]
             (sut/format {:select [[[:. t :b]] [[:. :c c]] [[:. t c :x]]]}))))
    (is (= ["SELECT [a].[b], [c].[d], [a].[d].[x]"]
           (let [t :a c :d]
             (sut/format {:select [[[:. t :b]] [[:. :c c]] [[:. t c :x]]]}
                         {:dialect :sqlserver})))))
  (testing "basic field selection from composite"
    (is (= ["SELECT (v).*, (w).x, (Y(z)).*"]
           (sut/format '{select (((. (nest v) *))
                                 ((. (nest w) x))
                                 ((. (nest (y z)) *)))})))
    (is (= ["SELECT (`v`).*, (`w`).`x`, (Y(`z`)).*"]
           (sut/format '{select (((. (nest v) *))
                                 ((. (nest w) x))
                                 ((. (nest (y z)) *)))}
                       {:dialect :mysql})))))
honeysql
(ns honey.sql.postgres-test
  (:refer-clojure :exclude [update partition-by set])
  (:require [clojure.test :refer [deftest is testing]]
            ;; pull in all the PostgreSQL helpers that the nilenso
            ;; library provided (as well as the regular HoneySQL ones):
            [honey.sql.helpers :as sqlh :refer
             [upsert on-conflict do-nothing on-constraint
              returning do-update-set
              ;; not needed because do-update-set can do this directly
              #_do-update-set!
              alter-table rename-column drop-column
              add-column partition-by
              ;; not needed because insert-into can do this directly
              #_insert-into-as
              create-table rename-table drop-table
              window create-view over with-columns
              create-extension drop-extension
              select-distinct-on
              ;; already part of HoneySQL
              insert-into values where select
              from order-by update set]]
            [honey.sql :as sql]))

(deftest issue-453-constraint
  (testing "standalone constraint"
    (is (= ["CREATE TABLE bar (a INTEGER, b INTEGER, CONSTRAINT foo_natural_key UNIQUE (a, b))"]
           (-> {:create-table [:bar]
                :with-columns
                [[:a :integer]
                 [:b :integer]
                 [[:constraint :foo_natural_key] :unique [:composite :a :b]]]}
               (sql/format)))))
  (testing "inline constraint"
    (is (= ["CREATE TABLE foo (a INTEGER CONSTRAINT a_pos CHECK(a > 0), b INTEGER, CONSTRAINT a_bigger CHECK(b < a))"]
           (-> '{create-table foo
                 with-columns
                 ((a integer (constraint a_pos) (check (> a 0)))
                  (b integer)
                  ((constraint a_bigger) (check (< b a))))}
               (sql/format))))))
seancorfield/honeysql
(ns honey.sql-test
  (:refer-clojure :exclude [format])
  (:require [clojure.string :as str]
            [clojure.test :refer [deftest is testing]]
            [honey.sql :as sut :refer [format]]
            [honey.sql.helpers :as h])
  #?(:clj (:import (clojure.lang ExceptionInfo))))

(deftest issue-474-dot-selection
  (testing "basic dot selection"
    (is (= ["SELECT a.b, c.d, a.d.x"]
           (let [t :a c :d]
             (sut/format {:select [[[:. t :b]] [[:. :c c]] [[:. t c :x]]]}))))
    (is (= ["SELECT [a].[b], [c].[d], [a].[d].[x]"]
           (let [t :a c :d]
             (sut/format {:select [[[:. t :b]] [[:. :c c]] [[:. t c :x]]]}
                         {:dialect :sqlserver})))))
  (testing "basic field selection from composite"
    (is (= ["SELECT (v).*, (w).x, (Y(z)).*"]
           (sut/format '{select (((. (nest v) *))
                                 ((. (nest w) x))
                                 ((. (nest (y z)) *)))})))
    (is (= ["SELECT (`v`).*, (`w`).`x`, (Y(`z`)).*"]
           (sut/format '{select (((. (nest v) *))
                                 ((. (nest w) x))
                                 ((. (nest (y z)) *)))}
                       {:dialect :mysql})))))
seancorfield/honeysql
(ns honey.sql.postgres-test
  (:refer-clojure :exclude [update partition-by set])
  (:require [clojure.test :refer [deftest is testing]]
            ;; pull in all the PostgreSQL helpers that the nilenso
            ;; library provided (as well as the regular HoneySQL ones):
            [honey.sql.helpers :as sqlh :refer
             [upsert on-conflict do-nothing on-constraint
              returning do-update-set
              ;; not needed because do-update-set can do this directly
              #_do-update-set!
              alter-table rename-column drop-column
              add-column partition-by
              ;; not needed because insert-into can do this directly
              #_insert-into-as
              create-table rename-table drop-table
              window create-view over with-columns
              create-extension drop-extension
              select-distinct-on
              ;; already part of HoneySQL
              insert-into values where select
              from order-by update set]]
            [honey.sql :as sql]))

(deftest issue-453-constraint
  (testing "standalone constraint"
    (is (= ["CREATE TABLE bar (a INTEGER, b INTEGER, CONSTRAINT foo_natural_key UNIQUE (a, b))"]
           (-> {:create-table [:bar]
                :with-columns
                [[:a :integer]
                 [:b :integer]
                 [[:constraint :foo_natural_key] :unique [:composite :a :b]]]}
               (sql/format)))))
  (testing "inline constraint"
    (is (= ["CREATE TABLE foo (a INTEGER CONSTRAINT a_pos CHECK(a > 0), b INTEGER, CONSTRAINT a_bigger CHECK(b < a))"]
           (-> '{create-table foo
                 with-columns
                 ((a integer (constraint a_pos) (check (> a 0)))
                  (b integer)
                  ((constraint a_bigger) (check (< b a))))}
               (sql/format))))))