From 5022088bea614377cc4cb49760e03270d10121e2 Mon Sep 17 00:00:00 2001 From: Steve Rowley Date: Sat, 2 May 2026 22:22:59 -0500 Subject: [PATCH] fix: support pin interpolation of temporal values --- lib/dux.ex | 4 ++++ test/dux/query_test.exs | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/lib/dux.ex b/lib/dux.ex index 8e1ca11..a5a8416 100644 --- a/lib/dux.ex +++ b/lib/dux.ex @@ -2200,6 +2200,10 @@ defmodule Dux do defp encode_param(v) when is_integer(v), do: Integer.to_string(v) defp encode_param(v) when is_float(v), do: Float.to_string(v) + defp encode_param(%Date{} = v), do: "'#{Date.to_iso8601(v)}'" + defp encode_param(%Time{} = v), do: "'#{Time.to_iso8601(v)}'" + defp encode_param(%NaiveDateTime{} = v), do: "'#{NaiveDateTime.to_iso8601(v)}'" + defp encode_param(%DateTime{} = v), do: "'#{DateTime.to_iso8601(v)}'" defp encode_param(v) when is_binary(v), do: "'#{String.replace(v, "'", "''")}'" defp encode_param(true), do: "true" defp encode_param(false), do: "false" diff --git a/test/dux/query_test.exs b/test/dux/query_test.exs index 7ac48b5..6e37c10 100644 --- a/test/dux/query_test.exs +++ b/test/dux/query_test.exs @@ -98,6 +98,17 @@ defmodule Dux.QueryTest do assert result["name"] == ["Alice"] end + test "date pin" do + cutoff = ~D[2024-01-01] + + result = + Dux.from_query("SELECT DATE '2023-12-30' AS d UNION ALL SELECT DATE '2024-01-02' AS d") + |> Dux.filter(d > ^cutoff) + |> Dux.to_columns() + + assert result["d"] == [~D[2024-01-02]] + end + test "multiple pins" do lo = 5 hi = 15