Packages
ecto
1.1.8
3.14.1
3.14.0
3.13.6
3.13.5
3.13.4
3.13.3
3.13.2
3.13.1
3.13.0
3.12.6
3.12.5
3.12.4
3.12.3
3.12.2
3.12.1
3.12.0
3.11.2
3.11.1
3.11.0
3.10.3
3.10.2
3.10.1
3.10.0
3.9.6
3.9.5
3.9.4
3.9.3
3.9.2
3.9.1
3.9.0
3.8.4
3.8.3
3.8.2
3.8.1
3.8.0
3.7.2
3.7.1
3.7.0
3.6.2
3.6.1
3.6.0
3.5.8
3.5.7
3.5.6
3.5.5
3.5.4
3.5.3
3.5.2
3.5.1
3.5.0
3.5.0-rc.1
3.5.0-rc.0
3.4.6
3.4.5
3.4.4
3.4.3
3.4.2
3.4.1
3.4.0
3.3.4
3.3.3
3.3.2
3.3.1
3.3.0
3.2.5
3.2.4
3.2.3
3.2.2
3.2.1
3.2.0
3.1.7
3.1.6
3.1.5
3.1.4
3.1.3
3.1.2
3.1.1
3.1.0
3.0.9
3.0.8
3.0.7
3.0.6
3.0.5
3.0.4
3.0.3
3.0.2
3.0.1
3.0.0
3.0.0-rc.1
3.0.0-rc.0
2.2.12
2.2.11
2.2.10
2.2.9
2.2.8
2.2.7
2.2.6
2.2.5
2.2.4
2.2.3
2.2.2
2.2.1
2.2.0
2.2.0-rc.1
2.2.0-rc.0
2.1.6
2.1.5
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.1.0-rc.5
2.1.0-rc.4
2.1.0-rc.3
2.1.0-rc.2
2.1.0-rc.1
2.1.0-rc.0
2.0.6
2.0.5
2.0.4
2.0.3
2.0.2
2.0.1
2.0.0
2.0.0-rc.6
2.0.0-rc.5
2.0.0-rc.4
2.0.0-rc.3
2.0.0-rc.2
2.0.0-rc.1
2.0.0-rc.0
2.0.0-beta.2
2.0.0-beta.1
2.0.0-beta.0
1.1.9
1.1.8
1.1.7
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.16.0
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.13.1
0.13.0
0.12.1
0.12.0
0.12.0-rc
0.11.3
0.11.2
0.11.1
0.11.0
0.10.3
0.10.2
0.10.1
0.10.0
0.9.0
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.0
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.0
A toolkit for data mapping and language integrated query for Elixir
Current section
Files
Jump to
Current section
Files
lib/ecto/log_entry.ex
defmodule Ecto.LogEntry do
@doc """
Struct used for logging entries.
It is composed of the following fields:
* query - the query as iodata or a function that when invoked
resolves to iodata;
* params - the query parameters;
* result - the query result as an `:ok` or `:error` tuple;
* query_time - the time spent executing the query in microseconds;
* queue_time - the time spent to check the connection out in microseconds (it may be nil);
* connection_pid - the connection process that executed the query
"""
alias Ecto.LogEntry
@type t :: %LogEntry{query: iodata | (t -> iodata), params: [term],
query_time: integer, queue_time: integer, connection_pid: pid | nil,
result: {:ok, term} | {:error, Exception.t}}
defstruct query: nil, params: [], query_time: nil, queue_time: nil, result: nil,
connection_pid: nil
@doc """
Resolves a log entry.
In case the query is represented by a function for lazy
computation, this function resolves it into iodata.
"""
def resolve(%LogEntry{query: fun} = entry) when is_function(fun) do
%{entry | query: fun.(entry)}
end
def resolve(%LogEntry{} = entry) do
entry
end
@doc """
Converts a log entry into iodata.
The entry is automatically resolved if it hasn't been yet.
"""
def to_iodata(entry) do
%{query_time: query_time, queue_time: queue_time,
params: params, query: query, result: result} = entry = resolve(entry)
params = Enum.map params, fn
%Ecto.Query.Tagged{value: value} -> value
value -> value
end
{entry, [query, ?\s, inspect(params, char_lists: false), ?\s, ok_error(result),
time("query", query_time, true), time("queue", queue_time, false)]}
end
defp ok_error({:ok, _}), do: "OK"
defp ok_error({:error, _}), do: "ERROR"
defp time(_label, nil, _force), do: []
defp time(label, time, force) do
ms = div(time, 100) / 10
if force or ms > 0 do
[?\s, label, ?=, :io_lib_format.fwrite_g(ms), ?m, ?s]
else
[]
end
end
end