Skip to content

Instantly share code, notes, and snippets.

@sivsushruth
Created March 12, 2016 18:33
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save sivsushruth/df40dbd950b8b68d62d8 to your computer and use it in GitHub Desktop.
Support for elixir view in BarrelDB
#Relevent part
find_erts_dir
export ROOTDIR="$RELEASE_ROOT_DIR"
export BINDIR="$ERTS_DIR/bin"
export EMU="beam"
export PROGNAME="erl"
export ERL_LIBS="/usr/local/lib/elixir/lib"
export LD_LIBRARY_PATH="$ERTS_DIR/lib:$LD_LIBRARY_PATH"
ERTS_LIB_DIR="$ERTS_DIR/../lib"
%Relevent part
makefun(State, Source) ->
application:start(elixir),
Converted = 'Elixir.CouchElixirUtils':to_erlang(Source),
Sig = couch_util:md5(Converted),
BindFuns = bindings(State, Sig),
{Sig, makefun(State, Converted, BindFuns)}.
defmodule CouchElixirUtils do
def to_erlang(source) do
eval_string(source)
end
def eval_string(string) do
string
|> Code.string_to_quoted!
|> :elixir.quoted_to_erl(:elixir.env_for_eval([]))
|> Tuple.to_list
|> Enum.at(0)
|> :erl_pp.expr
|> List.flatten
end
end
[query_servers]
erlang = {couch_native_process, start_link, []}
elixir = {couch_elixir_process, start_link, []}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment