Public Vars

Back

create-index (clj)

(source)

function

(create-index & args)
Accepts an index spexification and a column specification. The column specification consists of table name and one or more columns. (create-index :name-of-idx [:table :col]) (create-index :name-of-idx [:table :col1 :col2]) (create-index [:unique :name-of-idx] [:table :col]) PostgreSQL also supports :if-not-exists and expressions instead of columns. (create-index [:name-of-idx :if-not-exists] [:table :%lower.col])

Examples

honeysql
(ns honey.sql.helpers-test
  (:refer-clojure :exclude [filter for group-by partition-by set update])
  (:require [clojure.test :refer [deftest is testing]]
            [honey.sql :as sql]
            [honey.sql.helpers :as h
             :refer [add-column add-index alter-table columns create-table create-table-as create-view
                     create-materialized-view drop-view drop-materialized-view
                     create-index
                     bulk-collect-into
                     cross-join do-update-set drop-column drop-index drop-table
                     filter from full-join
                     group-by having insert-into
                     join-by join lateral left-join limit offset on-conflict
                     on-duplicate-key-update
                     order-by over partition-by refresh-materialized-view
                     rename-column rename-table returning right-join
                     select select-distinct select-top select-distinct-top
                     values where window with with-columns
                     with-data within-group]]))

(deftest test-create-index
  (testing "create index, commonly supported features"
    (is (= ["CREATE INDEX my_column_idx ON my_table (my_column)"]
           (sql/format {:create-index [:my-column-idx [:my-table :my-column]]})))
    (is (= ["CREATE INDEX my_column_idx ON my_table (my_column)"]
           (sql/format (create-index :my-column-idx [:my-table :my-column]))))
    (is (= ["CREATE UNIQUE INDEX my_column_idx ON my_table (my_column)"]
           (sql/format (create-index [:unique :my-column-idx] [:my-table :my-column]))))
    (is (= ["CREATE INDEX my_column_idx ON my_table (my_column, my_other_column)"]
           (sql/format (create-index :my-column-idx [:my-table :my-column :my-other-column])))))
  (testing "PostgreSQL extensions (IF NOT EXISTS and expressions)"
    (is (= ["CREATE INDEX IF NOT EXISTS my_column_idx ON my_table (my_column)"]
           (sql/format (create-index [:my-column-idx :if-not-exists] [:my-table :my-column]))))
    (is (= ["CREATE UNIQUE INDEX IF NOT EXISTS my_column_idx ON my_table (my_column)"]
           (sql/format (create-index [:unique :my-column-idx :if-not-exists] [:my-table :my-column]))))
    (is (= ["CREATE INDEX my_column_idx ON my_table (LOWER(my_column))"]
           (sql/format (create-index :my-column-idx [:my-table :%lower.my-column]))))))