On Saturday, March 28, 2015 at 7:31:49 AM UTC-7, Janko Marohnić wrote:
>
> Would it be a performance hit to run that ASTTransformer?
>

Yes.
 

> Yes, I agree that if it were to be implemented on #where, it should be 
> implemented on #order and others. It just feels so natural for me that it 
> works this way, especially coming from ActiveRecord :)
>

It doesn't feel natural to me.  If I use an unqualified identifier in ruby, 
I expect an unqualified identifier in SQL.  If I want a qualified 
identifier in SQL, I use a qualified identifier in ruby.  If I want to 
automatically qualify unqualified identifiers, I use Dataset#qualify.
 

> As an outside user of the Quiz#search method, I have to remember that it 
> does a join (it could have also been implemented as a subquery instead of a 
> join). So when I'm using Quiz in controller, I have to remember to throw in 
> #qualify before the #search (so that e.g. "created_at" column isn't 
> ambiguous):
>

If you want to be safe, just like in SQL, you need to manually qualify each 
column (or use Dataset#qualify to do so automatically).  
 

> Quiz.newest.in(category).qualify.search(query)
>
> I don't know if maybe I have a wrong approach.
>

You aren't returning any columns from the questions table, and you are 
joining to a 1-n table and using distinct, so I think it would be better to 
use a subquery, assuming you are using a database with a decent subquery 
optimizer.  If you use a subquery, you don't need to worry about qualifying 
the columns.

    def newest
      reverse(:created_at)
    end

  def search(query)
    
 
where(:id=>Question.select(:quiz_id).where(:name=>/#{query}/i).or(:title=>/#{query}/i)))
  end

I think part of the reason you want this is you picked up bad SQL habits 
from using ActiveRecord. :)

Thanks,
Jeremy

-- 
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 http://groups.google.com/group/sequel-talk.
For more options, visit https://groups.google.com/d/optout.

Reply via email to