Whenever I have a conditional in a pipeline (which happens all the time) I just write a separate private function, so in your pipeline it would look like this:
|> maybe_filter_by_tgl(schema, tgl)
Then a separate function:
defp maybe_filter_by_tgl(query, schema, tgl) do
if tgl != "", do: where(query, [schema], like(schema.tgl, ^tgl)), else: query
end
This is exactly the same as the anonymous function technique from @peerreynders response… for some reason I just find it easier to read (personal preference).


















