HugSQL 查询中的嵌套命名空间键
Nested namespaced keys in HugSQL Query
我有一个带有命名空间键的嵌套映射,如下所示:
{
:model.person/primary {:model.person/name "John Smith"}
}
我不想将其简化为平面地图,而是想将其直接传递给 HugSQL 函数。文档说 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")
现在,如果我执行它用我的原始地图生成的函数,我会得到:
(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
但我不确定正确的值应该是多少。
首先,deep 参数 get 在键之间使用 .
,而不是 :
,所以这是你问题的一部分。
但是,现在 HugSQL 只支持一级限定关键字——因为在用于分隔深度参数获取键的 .
和可以作为 (合格)关键字。
你可以有 where name = :value:model.person/primary.name
然后像 {: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 的重度用户,我不喜欢那样,但我理解他们为什么这样做)。
我有一个带有命名空间键的嵌套映射,如下所示:
{
:model.person/primary {:model.person/name "John Smith"}
}
我不想将其简化为平面地图,而是想将其直接传递给 HugSQL 函数。文档说 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")
现在,如果我执行它用我的原始地图生成的函数,我会得到:
(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
但我不确定正确的值应该是多少。
首先,deep 参数 get 在键之间使用 .
,而不是 :
,所以这是你问题的一部分。
但是,现在 HugSQL 只支持一级限定关键字——因为在用于分隔深度参数获取键的 .
和可以作为 (合格)关键字。
你可以有 where name = :value:model.person/primary.name
然后像 {: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 的重度用户,我不喜欢那样,但我理解他们为什么这样做)。