Por que o Rails está adicionando `OR 1 = 0` às consultas usando a sintaxe hash da cláusula where com um intervalo?

O projeto em que estou trabalhando está usando o MySQL no RDS (mysql2 gem especificamente).

Quando uso um hash de condições, incluindo um intervalo em umwhere Estou recebendo uma adição estranha à minha consulta.

User.where(id: [1..5])

e

User.where(id: [1...5])

Resultar nas seguintes consultas, respectivamente:

SELECT `users`.* FROM `users` WHERE ((`users`.`id` BETWEEN 1 AND 5 OR 1=0))
SELECT `users`.* FROM `users` WHERE ((`users`.`id` >= 1 AND `users`.`id` < 5 OR 1=0))

As consultas funcionam perfeitamente bem, poisOR FALSE é efetivamente um no-op. Só estou me perguntando por que o Rails ou o ARel estão adicionando esse trecho à consulta.

EDITAR

Parece que a linha quepoderia explique isso élinha 26 emActiveRecord::PredicateBuilder. Ainda não faço ideia de como o hash poderia serempty? nesse ponto, mas talvez alguém o faça.

EDIT 2

Isso é interessante. Eu estava olhando para o comentário de Filip para ver por que ele fez isso, pois parece apenas um esclarecimento, mas ele está certo de que1..5 != [1..5]. O primeiro é um intervalo inclusivo de 1 a 5, enquanto o segundo é uma matriz cujo primeiro elementoé o antigo. Eu tentei colocá-los em um ARelwhere ligue para ver o SQL produzido e oOR 1=0 não está lá!

User.where(id: 1..5) #=> SELECT "users".* FROM "users"  WHERE ("users"."id" BETWEEN 1 AND 5)
User.where(id: 1...5) #=> SELECT "users".* FROM "users"  WHERE ("users"."id" >= 1 AND "users"."id" < 5)

Enquanto eu ainda não seiporque O ARel está adicionando oOR 1=0 o que sempre será falso e aparentemente desnecessário. Pode ser devido a comoArrayareiaRanges são tratados de maneira diferente.

questionAnswers(5)

yourAnswerToTheQuestion