簡體   English   中英

HugSQL 查詢中的嵌套命名空間鍵

[英]Nested namespaced keys in HugSQL Query

我有一個嵌套的 map 具有這樣的命名空間鍵:

{
  :model.person/primary {:model.person/name "John Smith"}
}

我不想將其簡化為平面 map,而是將其直接傳遞給 HugSQL function。 文檔說 HugSQL 支持深度參數獲取和命名空間鍵,但我不確定如何組合它們。

(hugsql/def-sqlvec-fns-from-string
  "-- :name get_person :? :1
   -- :doc Get a person
   SELECT * FROM person WHERE name = :value:model.person/primary:model.person/name")

現在,如果我執行 function 它會用我原來的 map 生成,我會得到這個:

(get_person-sqlvec {:model.person/primary {:model.person/name "John Smith"}})

Execution error (ExceptionInfo) at hugsql.core/validate-parameters! (core.clj:83).
Parameter Mismatch: :model.person/name parameter data not found.

我想 SQL 中的變量命名約定是問題的根源:

:value:model.person/primary:model.person/name

但我不確定正確的值應該是多少。

首先,深度參數 get 使用. 鍵之間,而不是: ,所以這是你的問題的一部分。

然而,目前 HugSQL 只支持一級限定關鍵字——因為. 用於分離深度參數獲取鍵和. 可以是(限定)關鍵字的一部分。

You could have where name =:value:model.person/primary.name and then a hash map like {:model.person/primary {:name "John Smith"}}

或者你可以有where name =:value:model.person/name並通過{:model.person/name "John Smith"}

HugSQL 將需要不同的語法來支持嵌套的限定鍵(以解決.歧義)。 我提到了 Selmer 對 HugSQL 的維護者 Curtis Summers 的方法:使用..表示作為關鍵字一部分的點,因此您可以:

where name =:value:model..person/primary.model..person/name

(這就是 Selmer 表示嵌套限定鍵的方式)但是首先要考慮向后兼容性問題以及這是否是一個好的語法(我是 Selmer 的重度用戶,我不喜歡這樣,但我明白為什么他們做到了)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM