Postgresql dbにアクセスするためにClojureでHugsqlを使用しています。私のデータベース テーブルのいくつかにはオプションの列があります。簡単な例として、address1、address2、city など、さまざまな住所列を持つ「users」テーブルを考えてみます。
「更新」の Hugsql クエリ仕様を作成するとき、渡すマップにどの値が存在するかわかりません。したがって、クエリを作成すると、次のようになります。
-- :name update-user! :! :n
UPDATE users set firstname = :firstname, address1 = :address1 where id = :id
ただし、ユーザーマップを渡します
(update-user! {:id "testuser" :firstname "Bartholamew"})
その後、例外がスローされます。私はそれが次のようなものを作成することを期待しています
UPDATE users SET firstname='Bartholamew', address1=NULL where id='testuser'
私は Hugsql のソースを見てきました - それは私が回避できない例外をスローする (validate-parameters) 関数を呼び出します。明らかな何かが欠けていると確信しています。これは珍しい要件のようには見えません。オプションの列のすべての可能な組み合わせに対して個別の SQL クエリ仕様を記述したくないことは確かです。
不足しているパラメーターを処理する方法はありますか? オプションの列を持つことでデータベースを悪用していますか?