initial BigQuery :create-table-as :or-replace

This commit is contained in:
Sean Corfield 2023-10-20 10:50:09 -07:00
parent 440b86633a
commit 7d56daacca
3 changed files with 25 additions and 3 deletions

View file

@ -1,6 +1,8 @@
# Changes
* 2.4.next in progress
* Support BigQuery `CREATE OR REPLACE` (work-in-progress).
* Address [#510](https://github.com/seancorfield/honeysql/issues/510) by adding some NRQL support (work-in-progress).
* Fix [#509](https://github.com/seancorfield/honeysql/issues/509) by checking for `ident?` before checking keyword/symbol.
* 2.4.1078 -- 2023-10-07

View file

@ -1156,9 +1156,13 @@
opts (filter some? (drop-while tab? params))
ine (last coll)
[prequel table ine]
(if (= :if-not-exists (sym->kw ine))
(let [ine-kw (sym->kw ine)]
(cond (= :if-not-exists ine-kw)
[(butlast (butlast coll)) (last (butlast coll)) ine]
[(butlast coll) (last coll) nil])]
(= :or-replace ine-kw)
[(cons ine (butlast (butlast coll))) (last (butlast coll)) nil]
:else
[(butlast coll) (last coll) nil]))]
(into [(str/join " " (map sql-kw prequel))
(when table (format-entity table))
(when ine (sql-kw ine))]

View file

@ -553,6 +553,12 @@
(where [:= :metroflag "y"])
(with-data false)))
["CREATE TABLE IF NOT EXISTS metro AS SELECT * FROM cities WHERE metroflag = ? WITH NO DATA" "y"]))
(is (= (sql/format (-> (create-table-as :metro :or-replace)
(select :*)
(from :cities)
(where [:= :metroflag "y"])
(with-data false)))
["CREATE OR REPLACE TABLE metro AS SELECT * FROM cities WHERE metroflag = ? WITH NO DATA" "y"]))
(is (= (sql/format (-> (create-materialized-view :metro :if-not-exists)
(select :*)
(from :cities)
@ -569,6 +575,16 @@
[(str "CREATE TABLE IF NOT EXISTS metro"
" (foo, bar, baz) TABLESPACE quux"
" AS SELECT * FROM cities WHERE metroflag = ? WITH NO DATA") "y"]))
(is (= (sql/format (-> (create-table-as :metro :or-replace
(columns :foo :bar :baz)
[:tablespace [:entity :quux]])
(select :*)
(from :cities)
(where [:= :metroflag "y"])
(with-data false)))
[(str "CREATE OR REPLACE TABLE metro"
" (foo, bar, baz) TABLESPACE quux"
" AS SELECT * FROM cities WHERE metroflag = ? WITH NO DATA") "y"]))
(is (= (sql/format (-> (create-materialized-view :metro :if-not-exists
(columns :foo :bar :baz)
[:tablespace [:entity :quux]])