Packages
tds
2.3.5
2.3.8
2.3.7
2.3.6
2.3.5
2.3.4
2.3.2
2.3.1
2.3.0
2.3.0-rc.1
2.3.0-rc.0
2.2.0
2.1.3
2.1.2
2.1.1
2.1.0
2.0.4
2.0.3
2.0.2
2.0.1
2.0.1-rc2
2.0.1-rc1
2.0.0
retired
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.7
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.0
1.0.19
1.0.18
1.0.17
1.0.16
1.0.15
1.0.14
1.0.13
1.0.12
1.0.11
1.0.10
1.0.9
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.0
0.3.0
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Microsoft SQL Server client (Elixir implementation of the MS TDS protocol)
Current section
Files
Jump to
Current section
Files
lib/tds/query.ex
defmodule Tds.Query do
@moduledoc """
TDS query encoding and decoding
"""
@type t :: %__MODULE__{
statement: String.t(),
handle: term
}
defstruct [:statement, :handle]
end
defimpl DBConnection.Query, for: Tds.Query do
alias Tds.Parameter
alias Tds.Types
alias Tds.Query
alias Tds.Result
def encode(_statement, [], _opts) do
[]
end
def encode(%Query{handle: nil}, params, _) do
params
end
def encode(%Query{statement: statement}, params, _) do
param_desc = Enum.map_join(params, ", ", &Types.encode_param_descriptor/1)
[
%Parameter{value: statement, type: :string},
%Parameter{value: param_desc, type: :string}
] ++ params
end
def decode(_query, [], _opts), do: []
def decode(query, [h | t], opts) do
[decode(query, h, opts) | decode(query, t, opts)]
end
def decode(_query, %Result{rows: nil} = result, _opts), do: result
def decode(_query, %Result{rows: rows} = result, opts) do
mapper = opts[:decode_mapper] || fn x -> x end
rows = do_decode(rows, mapper, [])
%Result{result | rows: rows}
end
def do_decode([row | rows], mapper, decoded) do
decoded = [mapper.(row) | decoded]
do_decode(rows, mapper, decoded)
end
def do_decode(_, _, decoded) do
decoded
end
def parse(params, _) do
params
end
def describe(query, _) do
query
end
end
defimpl String.Chars, for: Tds.Query do
@spec to_string(Tds.Query.t()) :: String.t()
def to_string(%Tds.Query{statement: statement}) do
IO.iodata_to_binary(statement)
end
end