Thanks for posting this. After thinking about it more, I agree with Jeremy
that it would be useful to have this as a separate extension. Instead of
qualified_where(album: {
released_at: Date.today,
name: "Back to Black",
single: true,
})
I was thinking to have the qualifier specified as the first argument:
qualified_where(:album,
released_at: Date.today,
name: "Back to Black",
single: true,
)
The latter has the downside that you cannot have multiple qualifiers, but I
think that's not a deal breaker. I'm fine with both, though.
Kind regards,
Janko
On Wednesday, October 24, 2018 at 2:01:18 PM UTC+2, Alexander Popov wrote:
>
> janko-m <https://github.com/janko-m> commented
>>
>> If we had a joined dataset where we wanted to filter by many columns on
>> the other table, currently we could explicitly qualify each column using
>> Sequel[]:
>>
>> Track
>> .association_join(:album)
>> .where(
>> Sequel[:albums][:released_at] => Date.today,
>> Sequel[:albums][:name] => "Back to Black",
>> Sequel[:albums][:single] => true,
>> )
>>
>> or virtual rows:
>>
>> Track
>> .association_join(:album)
>> .where{
>> (albums[:released_at] =~ Date.today) &
>> (albums[:name] =~ "Back to Black") &
>> (albums[:single] =~ true)
>> }
>>
>> Since that can get a bit repetitive if we have a lot of column filters,
>> and we might want to keep using hashes, we can rewrite it using
>> Sequel.deep_qualify:
>>
>> Track
>> .association_join(:album)
>> .where(Sequel.deep_qualify(:albums,
>> released_at: Date.today,
>> name: "Back to Black",
>> single: true,
>> ))
>>
>> This pull request adds a syntax sugar for the latter Sequel.deep_qualify
>> version,
>> allowing us to use a nested hash instead, where the key is the table name
>> and the value is the expression we want to deep qualify (like in Active
>> Record):
>>
>> Track
>> .association_join(:album)
>> .where(albums: {
>> released_at: Date.today,
>> name: "Back to Black",
>> single: true,
>> })
>>
>> I think it would be a very convenient syntax to have, I found myself
>> wishing to use it. Let me know if you're open to accepting this feature. In
>> that case I'll go ahead and update the documentation.
>>
>
>
>
>> jeremyevans <https://github.com/jeremyevans> commented
>>
>> Sorry, but this can't be supported, as the syntax already means something
>> else (assume column a is boolean and b is integer):
>>
>> DB[:table].where(:a=>{:b=>1})# SELECT * FROM table WHERE (a = (b = 1))
>>
>> This is something that could be supported via an extension using a
>> different method. Example:
>>
>> Track
>> .association_join(:album)
>> .qualified_where(album: {
>> released_at: Date.today,
>> name: "Back to Black",
>> single: true,
>> })
>>
>> I'm not sure whether I'd like to ship such an extension with Sequel or
>> not. I'd like to get feedback from the community before making a decision,
>> so please bring it up on the Google Group if you would like to see it added.
>>
>
>
> So, I'd like to use any handy method for this task, which is common when
> working with joins.
>
> I also didn't find such example:
>
> Sequel[:albums][
> released_at: Date.today,
> name: "Back to Black",
> single: true
> ]
>
> And it converts in SQL, like:
>
> "albums".(("released_at" = ...) AND (...))
>
>
> But I'm not sure that this is valid SQL.
>
--
You received this message because you are subscribed to the Google Groups
"sequel-talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sequel-talk.
For more options, visit https://groups.google.com/d/optout.