生成的查询中出现 Elixir Phoenix 错误

Elixir Phoenix error in generated query

我是一名 elixir/phoenix 新手,正在尝试了解基础知识以便快速上手。我很难理解以下导致生成的查询不正确的架构定义有什么问题。

旁注:我正在使用 Tds.Ecto 适配器访问只读 MS SQL Server 2005 数据库。

defmodule Rodes.Sigcdpro do
    use Ecto.Schema
    import Ecto.Changeset
    alias Rodes.Sigcdpro

    @primary_key {:cpros, :string, []}
    @derive {Phoenix.Param, key: :cpros}

    schema "sigcdpro" do
        # field :cpros, :string
        field :dpros, :string
    end

    @doc """
    Tabela de produtos
    """

    def changeset( %Sigcdpro{} = sigcdpro, attrs ) do
        sigcdpro
        |> cast( attrs, [:cpros, :dpros] )
    end
end

然后,当我运行在交互式shell上执行以下命令时,我得到一个错误。

iex(8)> Rodes.Repo.all(from p in Rodes.Sigcdpro, where: p.cpros == 'R1156CRY.R1')
[debug] QUERY ERROR source="sigcdpro" db=227.0ms
SELECT s0.[cpros], s0.[dpros] FROM [sigcdpro] AS s0 WHERE (s0.[cpros] = 82, 49, 49, 53, 54, 67, 82, 89, 46, 82, 49) []
** (Tds.Error) Line 1 (Error 102): Incorrect syntax near ','.
    (ecto) lib/ecto/adapters/sql.ex:431: Ecto.Adapters.SQL.execute_and_cache/7
    (ecto) lib/ecto/repo/queryable.ex:133: Ecto.Repo.Queryable.execute/5
    (ecto) lib/ecto/repo/queryable.ex:37: Ecto.Repo.Queryable.all/4
iex(8)> 

将单引号改为双引号应该可行:

Rodes.Repo.all(from p in Rodes.Sigcdpro, where: p.cpros == "R1156CRY.R1")

单引号字符串是字符列表,它是整数列表 ('foo' == [102, 111, 111])。我认为 Tds.Ecto 的行为在这里并不好——它应该以更好的方式处理 charlists,要么在类型不匹配时抛出正确的错误,要么以某种方式传递数组而不是'不会导致语法错误(我不知道 MSSQL 支持哪些查询)。如果尚未报告,您可能想在他们的 repo 中报告。