Packages
exosql
0.2.53
0.2.88
0.2.87
0.2.86
0.2.85
0.2.84
0.2.83
0.2.82
0.2.81
0.2.80
0.2.79
0.2.78
0.2.77
0.2.76
0.2.75
0.2.74
0.2.73
0.2.72
0.2.71
0.2.70
0.2.69
0.2.68
0.2.67
0.2.65
0.2.64
0.2.63
0.2.62
0.2.60
0.2.59
0.2.58
0.2.57
0.2.56
0.2.55
0.2.54
0.2.53
0.2.51
0.2.50
0.2.49
0.2.48
0.2.47
0.2.46
0.2.45
0.2.44
0.2.43
0.2.42
0.2.41
0.2.40
0.2.39
0.2.38
0.2.37
0.2.36
0.2.35
0.2.33
0.2.32
0.2.31
0.2.30
0.2.29
0.2.28
0.2.26
0.2.25
0.2.24
0.2.23
0.2.22
0.2.21
0.2.20
0.2.19
0.2.18
0.2.17
0.2.16
0.2.15
0.2.14
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
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.1
0.1.0
Universal SQL engine for Elixir. This library implements the SQL logic to perform queries on user provided databases using a simple interface based on Foreign Data Wrappers from PostgreSQL.
Current section
Files
Jump to
Current section
Files
lib/extractors/csv.ex
require Logger
defmodule ExoSQL.Csv do
def schema(db) do
{:ok, files} = File.ls(db[:path])
files = files
|> Enum.filter(&String.ends_with?(&1, ".csv"))
|> Enum.map(&String.slice(&1, 0, String.length(&1)-4))
{:ok, files}
end
def schema(db, table) do
filename = "#{Path.join(db[:path], table)}.csv"
[{:ok, columns}] = File.stream!(filename) |> CSV.decode |> Enum.take(1)
{:ok, %{ columns: columns}}
end
def execute(db, table, _quals, _columns) do
# Logger.debug("Get #{inspect table}#{inspect columns} | #{inspect quals}")
filename = "#{Path.join(db[:path], table)}.csv"
# Logger.debug("filename #{inspect filename}")
csv_data = File.stream!(filename) |> CSV.decode
data = for l <- csv_data do
{:ok, l} = l
l
end
[columns | rows] = data
{:ok, %ExoSQL.Result{ columns: columns, rows: rows}}
end
end