我正在使用 Hugsql 和 Clojure 来访问 Postgresql 数据库。我的几个数据库表有可选列——举个简单的例子,考虑一个带有各种地址列的“用户”表——地址 1、地址 2、城市等。
当我为“更新”编写 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 查询规范。
有没有办法处理我丢失的参数?我是否通过使用可选列来滥用数据库?