繁体   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