Current section

Files

Jump to
sqlitex lib sqlitex.ex
Raw

lib/sqlitex.ex

defmodule Sqlitex do
def close(db) do
:esqlite3.close(db)
end
def open(path) do
:esqlite3.open(path)
end
def query(db, query) do
{:ok, statement} = :esqlite3.prepare(query, db)
columns = :esqlite3.column_names(statement) |> Tuple.to_list
rows = :esqlite3.fetchall(statement)
Enum.map(rows, fn(row) ->
values = row |> Tuple.to_list |> Enum.map(&translate_value/1)
Enum.zip(columns,values)
end)
end
def with_db(path, fun) do
{:ok, db} = open(path)
res = fun.(db)
close(db)
res
end
defp translate_value(str) when is_binary(str) do
case Regex.run(~r<\A(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2}).\d{6}\Z>, str) do
[_s,yrs,mos,das,hrs,mns,ss] ->
[yr,mo,da,hr,mn,s] = [yrs,mos,das,hrs,mns,ss] |> Enum.map(&String.to_integer/1)
{{yr,mo,da},{hr,mn,s}}
nil ->
str
end
end
defp translate_value(:undefined) do
nil
end
defp translate_value(val) do
val
end
end