[英]When would Rails' ActiveRecord generate IN clause with empty parentheses? “IN ()”?
假設我這樣調用ActiveRecord模型Foo:
Foo.sum(:bar, :conditions => { :baz_id => some_value })
何時會導致無效的SQL查詢,並且IN子句中的列表為空,如下所示:
SELECT sum(`foos`.bar) AS sum_bar FROM `foos` WHERE (`foos`.baz_id IN ())
我正在使用activerecord 2.3.12。
我現在無法檢查,因為我的計算機上沒有運行Rails 2.3的應用程序,但是空數組又如何呢? 我認為AR檢查您提供的內容是否是集合(數組),如果是,則生成“ IN(...)”部分,然后為帶有適當轉義的“ IN”子句生成條目。
編輯 :
空數組會生成(NULL)
,因此它是有效的。 具有空數組的數組會生成序列化的YAML,因此不是這種情況。
我簽入了源代碼,並且有可能生成空的“ IN()”部分,您只需要:
提供以下參數之一: Array
, ActiveRecord::Associations::AssociationCollection
, ActiveRecord::NamedScope::Scope
, 第2031行
它應該#respond_to?(:map)
,但不應該#acts_like?(:string)
, 第2424行
它的#empty?
應該出於某種原因返回false,或者不應該respond_to?(:empty?)
第2425行
它必須響應#map
,但應返回空數組, 第2428行
然后,它生成您所擁有的。
我不知道如何在真實代碼中發生。 也許還有其他方法可以在現實生活的代碼中創建此案例...
是它生成的SQL( IN ())
嗎? 在我的測試(AR 2.3.8)中,它發出了IN (NULL)
,這很好用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.