Current section
Files
Jump to
Current section
Files
lib/exd_streams/api/commands/query_commands.ex
alias Exd.AST
alias ExdStreams.Streams
alias ExdStreams.Api.{Executable, Commands}
alias ExdStreams.Query.{FilePlugin, TablePlugin}
defimpl Executable, for: Commands.SelectCommand do
def execute(%Commands.SelectCommand{
query: %AST.Program{
insert: nil,
query: %AST.Query{} = query
} = program
} = command) do
spec = {TablePlugin, []}
select = %AST.SelectExpr{command.query.query.select | into: spec}
query = %AST.Query{command.query.query | select: select}
program = %AST.Program{program | query: query}
meta = Keyword.merge([table: command.table], Map.to_list(command.meta))
Exd.Repo.all(program, meta)
end
def execute(%Commands.SelectCommand{
table: name,
query: %AST.Program{
insert: %AST.InsertExpr{
into: %AST.TableIdentifier{
# value: name
}
},
query: %AST.Query{} = query
} = program
} = command) do
spec = {TablePlugin, []}
select = %AST.SelectExpr{command.query.query.select | into: spec}
query = %AST.Query{command.query.query | select: select}
program = %AST.Program{program | query: query}
meta = Keyword.merge([table: name], Map.to_list(command.meta))
Exd.Repo.all(program, meta)
end
def execute(%Commands.SelectCommand{
table: name,
query: %AST.Program{
insert: %AST.InsertExpr{
into: %AST.CallExpr{
identifier: %AST.Identifier{value: "file"},
params: [
%AST.StringLiteral{
value: file_name
}
]
}
},
query: %AST.Query{} = query
} = program
} = command) do
spec = {FilePlugin, []}
select = %AST.SelectExpr{command.query.query.select | into: spec}
query = %AST.Query{command.query.query | select: select}
program = %AST.Program{program | query: query}
meta = Keyword.merge([table: name, file_name: file_name], Map.to_list(command.meta))
Exd.Repo.all(program, meta)
end
end