zf

zenflows testing
git clone https://s.sonu.ch/~srfsh/zf.git
Log | Files | Refs | Submodules | README | LICENSE

queryable.ex (1298B)


      1 defprotocol Ecto.Queryable do
      2   @moduledoc """
      3   Converts a data structure into an `Ecto.Query`.
      4   """
      5 
      6   @doc """
      7   Converts the given `data` into an `Ecto.Query`.
      8   """
      9   def to_query(data)
     10 end
     11 
     12 defimpl Ecto.Queryable, for: Ecto.Query do
     13   def to_query(query), do: query
     14 end
     15 
     16 defimpl Ecto.Queryable, for: Ecto.SubQuery do
     17   def to_query(subquery) do
     18     %Ecto.Query{from: %Ecto.Query.FromExpr{source: subquery}}
     19   end
     20 end
     21 
     22 defimpl Ecto.Queryable, for: BitString do
     23   def to_query(source) when is_binary(source) do
     24     %Ecto.Query{from: %Ecto.Query.FromExpr{source: {source, nil}}}
     25   end
     26 end
     27 
     28 defimpl Ecto.Queryable, for: Atom do
     29   def to_query(module) do
     30     try do
     31       module.__schema__(:query)
     32     rescue
     33       UndefinedFunctionError ->
     34         message = if :code.is_loaded(module) do
     35           "the given module does not provide a schema"
     36         else
     37           "the given module does not exist"
     38         end
     39 
     40         raise Protocol.UndefinedError,
     41           protocol: @protocol, value: module, description: message
     42     end
     43   end
     44 end
     45 
     46 defimpl Ecto.Queryable, for: Tuple do
     47   def to_query({source, schema} = from)
     48       when is_binary(source) and is_atom(schema) and not is_nil(schema) do
     49     %Ecto.Query{from: %Ecto.Query.FromExpr{source: from, prefix: schema.__schema__(:prefix)}}
     50   end
     51 end