On Sunday, August 13, 2017 at 4:11:29 PM UTC-7, João Serra wrote:
>
> Hi there,
>
> I stumbled on a difference between ActiveRecord's behaviour and Sequel
> which I think make sense for Sequel to support too.
>
> If you're using ActiveRecord, it's possible to do a query with limit 0
> (obviously yielding 0 results) but in Sequel it raises a "Sequel::Error
> Limits must be greater than or equal to 1".
>
> My question is, isn't it a perfectly valid SQL query? (I'm not familiar
> with all databases thus the question mark)
>
It appears to work on SQLite and PostgreSQL, but I haven't tested all other
databases Sequel supports. I suppose there is no reason to limit the use
of 0, other than the fact that it is more likely to be an error than
desired behavior. If you don't want to return any rows, it makes more
sense to add a false condition (dataset.where(false) instead of
dataset.limit(0)). This is the first time someone has requested the
ability to use LIMIT 0 since the check was added 9 years ago.
You can currently force a limit of 0 using a literal string:
dataset.limit(Sequel.lit('0'))
One reason to keep this check is that Sequel currently converts a
non-literal string passed to Dataset#limit to an integer using #to_i. This
means that limit('foo') currently raises an error, but would start silently
returning no rows if this change was made. I suppose we could start having
different behavior for an integer argument compared to a string argument,
but then it becomes inconsistent.
Anyway, I'd be interested in feedback from other Sequel users about their
thoughts on this.
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 https://groups.google.com/group/sequel-talk.
For more options, visit https://groups.google.com/d/optout.