query filter with fragment issues

HI I am trying to do the following
read :time_slots do
argument :start_date, :utc_datetime do
allow_nil?(false)
end

argument :end_date, :utc_datetime do
allow_nil?(false)
end

argument :duration, :integer do
allow_nil?(true)
end

argument :resource_id, :uuid do
allow_nil?(false)
end

prepare(fn query, _ ->
start_date = Ash.Query.get_argument(query, :start_date)
end_date = Ash.Query.get_argument(query, :end_date)
duration = Ash.Query.get_argument(query, :duration)
qresource_id = Ash.Query.get_argument(query, :resource_id)

query
|> Ash.Query.filter(
fragment(
"""
SELECT DISTINCT start_at FROM reservation_items e cross join generate_series(?::timestamp , ?::timestamp, '30 min'::interval) as t
WHERE tsrange(e.start_at, e.end_at) @> t AND NOT(e.canceled) AND e.resource_id = ?;
""",
start_date,
end_date,
qresource_id
)
)
end)
end
read :time_slots do
argument :start_date, :utc_datetime do
allow_nil?(false)
end

argument :end_date, :utc_datetime do
allow_nil?(false)
end

argument :duration, :integer do
allow_nil?(true)
end

argument :resource_id, :uuid do
allow_nil?(false)
end

prepare(fn query, _ ->
start_date = Ash.Query.get_argument(query, :start_date)
end_date = Ash.Query.get_argument(query, :end_date)
duration = Ash.Query.get_argument(query, :duration)
qresource_id = Ash.Query.get_argument(query, :resource_id)

query
|> Ash.Query.filter(
fragment(
"""
SELECT DISTINCT start_at FROM reservation_items e cross join generate_series(?::timestamp , ?::timestamp, '30 min'::interval) as t
WHERE tsrange(e.start_at, e.end_at) @> t AND NOT(e.canceled) AND e.resource_id = ?;
""",
start_date,
end_date,
qresource_id
)
)
end)
end
I am getting invalid argument :resource_id
5 Replies
ZachDaniel
ZachDaniel3y ago
Going to need some more information. What are you passing as resource_id? Whats the full error message and stacktrace
sriky27
sriky27OP3y ago
Item.time_slots(~U[2022-01-01 09:00:00Z], ~U[2022-01-01 09:59:00Z], 10, 'aa72fae6-c37b-45ce-8ea3-77de9fbab85d')
{:error,
%Ash.Error.Invalid{
errors: [
%Ash.Error.Query.InvalidArgument{
field: :resource_id,
message: "is invalid",
value: 'aa72fae6-c37b-45ce-8ea3-77de9fbab85d',
changeset: nil,
query: nil,
error_context: [],
vars: [],
path: [],
stacktrace: #Stacktrace<>,
class: :invalid
}
],
stacktraces?: true,
changeset: nil,
query: #Ash.Query<
resource: Reservation.Reserve.ReservationItem,
arguments: %{
duration: 10,
end_date: ~U[2022-01-01 09:59:00Z],
resource_id: 'aa72fae6-c37b-45ce-8ea3-77de9fbab85d',
start_date: ~U[2022-01-01 09:00:00Z]
},
filter: #Ash.Filter<fragment(
{:raw,
"\n SELECT DISTINCT start_at FROM reservation_items e cross join generate_series("},
{:expr, ~U[2022-01-01 09:00:00Z]},
{:raw, "::timestamp , "},
{:expr, ~U[2022-01-01 09:59:00Z]},
{:raw,
"::timestamp, '30 min'::interval) as t\n WHERE tsrange(e.start_at, e.end_at) @> t AND NOT(e.canceled) AND e.resource_id = "},
{:expr, 'aa72fae6-c37b-45ce-8ea3-77de9fbab85d'},
{:raw, ";\n "}
)>,
errors: [
%Ash.Error.Query.InvalidArgument{
field: :resource_id,
message: "is invalid",
value: 'aa72fae6-c37b-45ce-8ea3-77de9fbab85d',
changeset: nil,
query: nil,
error_context: [],
vars: [],
path: [],
stacktrace: #Stacktrace<>,
class: :invalid
}
]
>,
error_context: [nil],
vars: [],
path: [],
stacktrace: #Stacktrace<>,
class: :invalid
}}
{:error,
%Ash.Error.Invalid{
errors: [
%Ash.Error.Query.InvalidArgument{
field: :resource_id,
message: "is invalid",
value: 'aa72fae6-c37b-45ce-8ea3-77de9fbab85d',
changeset: nil,
query: nil,
error_context: [],
vars: [],
path: [],
stacktrace: #Stacktrace<>,
class: :invalid
}
],
stacktraces?: true,
changeset: nil,
query: #Ash.Query<
resource: Reservation.Reserve.ReservationItem,
arguments: %{
duration: 10,
end_date: ~U[2022-01-01 09:59:00Z],
resource_id: 'aa72fae6-c37b-45ce-8ea3-77de9fbab85d',
start_date: ~U[2022-01-01 09:00:00Z]
},
filter: #Ash.Filter<fragment(
{:raw,
"\n SELECT DISTINCT start_at FROM reservation_items e cross join generate_series("},
{:expr, ~U[2022-01-01 09:00:00Z]},
{:raw, "::timestamp , "},
{:expr, ~U[2022-01-01 09:59:00Z]},
{:raw,
"::timestamp, '30 min'::interval) as t\n WHERE tsrange(e.start_at, e.end_at) @> t AND NOT(e.canceled) AND e.resource_id = "},
{:expr, 'aa72fae6-c37b-45ce-8ea3-77de9fbab85d'},
{:raw, ";\n "}
)>,
errors: [
%Ash.Error.Query.InvalidArgument{
field: :resource_id,
message: "is invalid",
value: 'aa72fae6-c37b-45ce-8ea3-77de9fbab85d',
changeset: nil,
query: nil,
error_context: [],
vars: [],
path: [],
stacktrace: #Stacktrace<>,
class: :invalid
}
]
>,
error_context: [nil],
vars: [],
path: [],
stacktrace: #Stacktrace<>,
class: :invalid
}}
ZachDaniel
ZachDaniel3y ago
"aa72fae6-c37b-45ce-8ea3-77de9fbab85d" use double quotes
sriky27
sriky27OP3y ago
got it thanks a lot you are super quick in responding to issues

Did you find this page helpful?