From aa5c9a19826c84bbb9c9f75f8d1a4b04b874780c Mon Sep 17 00:00:00 2001 From: Nick Kallen Date: Sun, 16 Mar 2008 16:53:49 -0700 Subject: added support for `attribute IN ...` and `attribute BETWEEN ...` - IN and BETWEEN are chosen depending on the type of the second operand - ranges (1..2), arrays ([1,2,3]), and relations ("SELECT * ...") are all supported --- spec/active_relation/unit/predicates/in_spec.rb | 58 +++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 spec/active_relation/unit/predicates/in_spec.rb (limited to 'spec/active_relation/unit/predicates/in_spec.rb') diff --git a/spec/active_relation/unit/predicates/in_spec.rb b/spec/active_relation/unit/predicates/in_spec.rb new file mode 100644 index 0000000000..9e60c29ce0 --- /dev/null +++ b/spec/active_relation/unit/predicates/in_spec.rb @@ -0,0 +1,58 @@ +require File.join(File.dirname(__FILE__), '..', '..', '..', 'spec_helper') + +module ActiveRelation + describe In do + before do + @relation = Table.new(:users) + @attribute = @relation[:id] + end + + describe '#to_sql' do + describe 'when relating to an array' do + describe 'when the array\'s elements are the same type as the attribute' do + before do + @array = [1, 2, 3].bind(@relation) + end + + it 'manufactures sql with a comma separated list' do + In.new(@attribute, @array).to_sql.should be_like(" + `users`.`id` IN (1, 2, 3) + ") + end + end + + describe 'when the array\'s elements are not same type as the attribute' do + before do + @array = ['1-asdf', 2, 3].bind(@relation) + end + + it 'formats values in the array as the type of the attribute' do + In.new(@attribute, @array).to_sql.should be_like(" + `users`.`id` IN (1, 2, 3) + ") + end + end + end + + describe 'when relating to a range' do + before do + @range = (1..2).bind(@relation) + end + + it 'manufactures sql with a between' do + In.new(@attribute, @range).to_sql.should be_like(" + `users`.`id` BETWEEN 1 AND 2 + ") + end + end + + describe 'when relating to a relation' do + it 'manufactures sql with a subselect' do + In.new(@attribute, @relation).to_sql.should be_like(" + `users`.`id` IN (SELECT `users`.`id`, `users`.`name` FROM `users`) + ") + end + end + end + end +end \ No newline at end of file -- cgit v1.2.3