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 sequel-talk+unsubscr...@googlegroups.com. To post to this group, send email to sequel-talk@googlegroups.com. Visit this group at https://groups.google.com/group/sequel-talk. For more options, visit https://groups.google.com/d/optout.