Meldanor

Meldanor

Macro to create a keyword for ecto3 dynamic bindings

How can I use a macro to create a simple keyword to use in a dynamic for Ecto 3?

What I want to achieve:

dynamic([school: e], ilike(field(e, ^param_name), ^"%#{param_value}%"))

I tried two versions:

defmacro want_this(prefix) do
   quote do
      dynamic([unquote(prefix): a], ilike(field(a, ^param_name), ^"%#{param_value}%"))
   end
end

want_this(:school)

but this version does not even compile.

Another try was done under the assumption that the macro would be compile and executed:

defmacro want_this(prefix) do
   quote do
      dynamic(unquote(Keyword.new(%{prefix=> a})), ilike(field(a, ^param_name), ^"%#{param_value}%"))
   end
end

want_this(:school)

but it compiles to Keyword.new(%{school: a})

A little context for the reason:

I have a filter function to receive a filter name, school.name or name for example, with a value. If the filter name has a . in the name, it should be applied to the relation instead to the entity itself. The joins with their aliases are working, but the creation of the conditions to use these aliases is my current problem.

I tried to use positional bindings, but the function itself does not know what the current position the filter, so I cannot use dynamic([_,x], ilike(field(a, ^param_name), ^"%#{param_value}%")). X could be the second or the fifth position. I do know the position at execution, but not at compilation.

Thanks in advance :slight_smile:

Most Liked

LostKobrakai

LostKobrakai

Try [{unquote(prefix), a}]

Where Next?

Popular in Questions Top

Harrisonl
We have an ECS cluster with 4 services, where each task joins a single cluster, via discovery ECS discovery service. Currently when I de...
New
WestKeys
Currently suffering from paralysis by [HTTP client] analysis. This is rather unusual in Elixirland as there tends to be consensus on the ...
New
qwerescape
Is there a way to get the call stack or stack trace at any point in the code? Not from exceptions, but an expression that returns how the...
New
fireproofsocks
I’m working on defining a simple Ecto schema for a table (in PostGres), but I don’t see where I can define a column as NOT NULL. Conside...
New
vac
Hi, I’m quite new in Elixir and I’m trying to format a string to a PEM format. I have the certificate value like MIIDBTCCAe2...... and I...
New
belgoros
I’m not a pro in using Regex and can’t figure out why the following behaviour happens, especially if we take into account the difference ...
New
ycv005
I have followed this StackOverflow post to install the specific version of Erlang. And When I am running mix ecto.setup then getting fol...
New
nobody
Hi! In PHP: $_SERVER[‘SERVER_ADDR’] - in Elixir? Searched the docs for ip address and the web, no good results. Thanks!
New
script
If I have a string “1000 cfu/ml” . I want to remove the characters and / and space . So the string is like this "1000" What is the ...
New
hariharasudhan94
Lets say I have map like this fetching from my database %{"_id" => #BSON.ObjectId<58eb1a7a9ad169198c3dXXXX>, "email" => ...
New

Other popular topics Top

vertexbuffer
Hello, can anybody help here..? I have a list of players and I what to delete an element, but every for loop the list is reverting to ori...
New
sorentwo
Hello! tl;dr Announcing Oban, an Ecto based job processing library with a focus on reliability and historical observability. After spen...
985 43487 311
New
Patoshizzle
After calling mix ecto.create I get this error: 17:00:32.162 [error] GenServer #PID<0.412.0> terminating ** (Postgrex.Error) FATAL...
New
chrismccord
Phoenix 1.4.0 released Phoenix 1.4 is out! This release ships with exciting new features, most notably with HTTP2 support, improved deve...
688 31013 112
New
msaraiva
Surface is an experimental library built on top of Phoenix LiveView and its new LiveComponent API that aims to provide a more declarative...
564 43757 214
New
jerry
Good day to you all. I have been struggling to get a query involving like and ilike to work. Can anyone assist me on this, please? pro...
New
belgoros
I’m not a pro in using Regex and can’t figure out why the following behaviour happens, especially if we take into account the difference ...
New
joeerl
Hello again - after a longish gap I’ve decided I really must dig into Elixir and see what’s been happening here - so I have a few questio...
New
boundedvariable
I am going through the kafka architecture. All the features what the kafka is providing are already in Erlang. I would like hear your opi...
New
lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New

Latest on Elixir Forum

Elixir Forum

We're in Beta

About us Mission Statement