Packages
tds
1.0.18
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
alias Tds.Parameter
alias Tds.Types
defstruct [:statement, :handle]
defimpl DBConnection.Query, for: Tds.Query do
def encode(_statement, [], _opts) do
[]
end
def encode(
%Tds.Query{
statement: statement,
handle: handle
} = _,
params,
_opts
) do
case handle do
nil ->
param_desc =
params
|> Enum.map(fn %Parameter{} = param ->
Types.encode_param_descriptor(param)
end)
param_desc =
param_desc
|> Enum.join(", ")
[
%Parameter{value: statement, type: :string},
%Parameter{value: param_desc, type: :string}
] ++ params
_ ->
params
end
end
def decode(_query, result, opts) do
mapper = opts[:decode_mapper] || fn x -> x end
%Tds.Result{rows: rows} = result
rows = do_decode(rows, mapper, [])
%Tds.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
def to_string(%Tds.Query{statement: statement}) do
IO.iodata_to_binary(statement)
end
end
end