Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“锁定行”;更新「;使用Exto/Elixir的特定表格_Elixir_Ecto - Fatal编程技术网

“锁定行”;更新「;使用Exto/Elixir的特定表格

“锁定行”;更新「;使用Exto/Elixir的特定表格,elixir,ecto,Elixir,Ecto,我想使用获取一个锁,用于更新表名。与更新的相比,更新的仅锁定指定表中的行,并且连接的行不被阻止。然而,当我尝试使用下面的代码片段使用EXTO时,它失败了 query = Call |> join_other_tables() # custom methods |> Query.lock("FOR UPDATE OF calls") 原因是,Ecto使用别名进行调用,例如,c0,这意味着我还必须在锁表达式中使用别名才能使其工作 query = Call |>

我想使用
获取一个
,用于更新表名
。与更新的
相比,
更新的
仅锁定指定表中的行,并且连接的行不被阻止。然而,当我尝试使用下面的代码片段使用EXTO时,它失败了

query =
  Call
  |> join_other_tables() # custom methods
  |> Query.lock("FOR UPDATE OF calls")
原因是,Ecto使用别名进行
调用
,例如,
c0
,这意味着我还必须在锁表达式中使用别名才能使其工作

query =
  Call
  |> join_other_tables() # custom methods
  |> Query.lock("FOR UPDATE OF c0")

使用别名看起来不是一种正确的方法。是否有其他方法使其工作?

exto v3
起,无法将参数化值传递给
Query.lock
。它接受

[命名绑定]也无法工作,因为
exto
内部


下面的方法是最接近的方法,但也不起作用,因为
exto.Query.lock/2
不允许插值

使用具有插值功能的关键字查询语法。有点像:

from c in Call,
  join: ..., # custom methods
  lock: fragment("FOR UPDATE OF ?", c)

这会引发下一个错误:
fragment(“FOR UPDATE OF?”,c)不是有效的锁。出于安全原因,锁必须始终是文本字符串
Damn,它们只允许二进制文件。那你可以试试。如果成功,请告诉我,我将更新或删除答案。不幸的是,这也不起作用。看起来Ecto在内部使用了这些别名,但在实际的SQL查询中使用了它。是的,生成器是私有的。很抱歉这么说,但听起来你是在做最后的选择:
“c0”
硬编码。我将删除答案。或者添加一个更新的答案,目前没有办法做到这一点,作为版本的外星版本3。