mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
PERF: removing many splats
This commit is contained in:
parent
26ed429976
commit
068b184a59
12 changed files with 30 additions and 32 deletions
|
@ -2,7 +2,7 @@ module Arel
|
|||
class Group < Compound
|
||||
attr_reader :groupings
|
||||
|
||||
def initialize(relation, *groupings)
|
||||
def initialize(relation, groupings)
|
||||
super(relation)
|
||||
@groupings = groupings.collect { |g| g.bind(relation) }
|
||||
end
|
||||
|
|
|
@ -2,7 +2,7 @@ module Arel
|
|||
class Having < Compound
|
||||
attr_reader :predicates
|
||||
|
||||
def initialize(relation, *predicates)
|
||||
def initialize(relation, predicates)
|
||||
super(relation)
|
||||
@predicates = predicates.map { |p| p.bind(relation) }
|
||||
end
|
||||
|
|
|
@ -2,7 +2,7 @@ module Arel
|
|||
class Order < Compound
|
||||
attr_reader :orderings
|
||||
|
||||
def initialize(relation, *orderings)
|
||||
def initialize(relation, orderings)
|
||||
super(relation)
|
||||
@orderings = orderings.collect { |o| o.bind(relation) }
|
||||
end
|
||||
|
|
|
@ -2,7 +2,7 @@ module Arel
|
|||
class Project < Compound
|
||||
attr_reader :projections, :attributes
|
||||
|
||||
def initialize(relation, *projections)
|
||||
def initialize(relation, projections)
|
||||
super(relation)
|
||||
@projections = projections.map { |p| p.bind(relation) }
|
||||
@attributes = Header.new(projections.map { |x| x.bind(self) })
|
||||
|
|
|
@ -2,7 +2,7 @@ module Arel
|
|||
class Where < Compound
|
||||
attr_reader :predicates
|
||||
|
||||
def initialize(relation, *predicates)
|
||||
def initialize(relation, predicates)
|
||||
super(relation)
|
||||
@predicates = predicates.map { |p| p.bind(relation) }
|
||||
@wheres = nil
|
||||
|
|
|
@ -116,19 +116,17 @@ module Arel
|
|||
end
|
||||
|
||||
%w{
|
||||
where order skip group having
|
||||
}.each do |operation_name|
|
||||
having group order where project
|
||||
}.each do |op|
|
||||
class_eval <<-OPERATION, __FILE__, __LINE__
|
||||
def #{operation_name}(*arguments)
|
||||
arguments.all? { |x| x.blank? } ?
|
||||
self : #{operation_name.capitalize}.new(self, *arguments)
|
||||
def #{op}(*args)
|
||||
args.all? { |x| x.blank? } ? self : #{op.capitalize}.new(self, args)
|
||||
end
|
||||
OPERATION
|
||||
end
|
||||
|
||||
def project *args
|
||||
return self if args.all? { |x| x.blank? }
|
||||
Project.new self, *args
|
||||
def skip thing = nil
|
||||
thing ? Skip.new(self, thing) : self
|
||||
end
|
||||
|
||||
def take thing
|
||||
|
|
|
@ -9,7 +9,7 @@ module Arel
|
|||
|
||||
describe '#attributes' do
|
||||
before do
|
||||
@projection = Project.new(@relation, @attribute)
|
||||
@projection = Project.new(@relation, [@attribute])
|
||||
end
|
||||
|
||||
it "manufactures attributes associated with the projection relation" do
|
||||
|
@ -20,13 +20,13 @@ module Arel
|
|||
describe '#externalizable?' do
|
||||
describe 'when the projections are attributes' do
|
||||
it 'returns false' do
|
||||
Project.new(@relation, @attribute).should_not be_externalizable
|
||||
Project.new(@relation, [@attribute]).should_not be_externalizable
|
||||
end
|
||||
end
|
||||
|
||||
describe 'when the projections include an aggregation' do
|
||||
it "obtains" do
|
||||
Project.new(@relation, @attribute.sum).should be_externalizable
|
||||
Project.new(@relation, [@attribute.sum]).should be_externalizable
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -97,11 +97,11 @@ module Arel
|
|||
end
|
||||
|
||||
it "manufactures a where relation" do
|
||||
@relation.where(@predicate).should == Where.new(@relation, @predicate)
|
||||
@relation.where(@predicate).should == Where.new(@relation, [@predicate])
|
||||
end
|
||||
|
||||
it "accepts arbitrary strings" do
|
||||
@relation.where("arbitrary").should == Where.new(@relation, "arbitrary")
|
||||
@relation.where("arbitrary").should == Where.new(@relation, ["arbitrary"])
|
||||
end
|
||||
|
||||
describe 'when given a blank predicate' do
|
||||
|
@ -113,7 +113,7 @@ module Arel
|
|||
|
||||
describe '#order' do
|
||||
it "manufactures an order relation" do
|
||||
@relation.order(@attribute1, @attribute2).should == Order.new(@relation, @attribute1, @attribute2)
|
||||
@relation.order(@attribute1, @attribute2).should == Order.new(@relation, [@attribute1, @attribute2])
|
||||
end
|
||||
|
||||
describe 'when given a blank ordering' do
|
||||
|
@ -149,7 +149,7 @@ module Arel
|
|||
|
||||
describe '#group' do
|
||||
it 'manufactures a group relation' do
|
||||
@relation.group(@attribute1, @attribute2).should == Group.new(@relation, @attribute1, @attribute2)
|
||||
@relation.group(@attribute1, @attribute2).should == Group.new(@relation, [@attribute1, @attribute2])
|
||||
end
|
||||
|
||||
describe 'when given blank groupings' do
|
||||
|
|
|
@ -10,7 +10,7 @@ module Arel
|
|||
describe '#to_sql' do
|
||||
describe 'when given a predicate' do
|
||||
it "manufactures sql with where clause conditions" do
|
||||
sql = Group.new(@relation, @attribute).to_sql
|
||||
sql = Group.new(@relation, [@attribute]).to_sql
|
||||
|
||||
adapter_is :mysql do
|
||||
sql.should be_like(%Q{
|
||||
|
@ -40,7 +40,7 @@ module Arel
|
|||
|
||||
describe 'when given a string' do
|
||||
it "passes the string through to the where clause" do
|
||||
sql = Group.new(@relation, 'asdf').to_sql
|
||||
sql = Group.new(@relation, ['asdf']).to_sql
|
||||
|
||||
adapter_is :mysql do
|
||||
sql.should be_like(%Q{
|
||||
|
|
|
@ -10,7 +10,7 @@ module Arel
|
|||
describe '#to_sql' do
|
||||
describe "when given an attribute" do
|
||||
it "manufactures sql with an order clause populated by the attribute" do
|
||||
sql = Order.new(@relation, @attribute).to_sql
|
||||
sql = Order.new(@relation, [@attribute]).to_sql
|
||||
|
||||
adapter_is :mysql do
|
||||
sql.should be_like(%Q{
|
||||
|
@ -60,7 +60,7 @@ module Arel
|
|||
end
|
||||
|
||||
it "manufactures sql with an order clause populated by comma-separated attributes" do
|
||||
sql = Order.new(@relation, @attribute, @another_attribute).to_sql
|
||||
sql = Order.new(@relation, [@attribute, @another_attribute]).to_sql
|
||||
|
||||
adapter_is :mysql do
|
||||
sql.should be_like(%Q{
|
||||
|
@ -94,7 +94,7 @@ module Arel
|
|||
end
|
||||
|
||||
it "passes the string through to the order clause" do
|
||||
sql = Order.new(@relation, @string).to_sql
|
||||
sql = Order.new(@relation, [@string]).to_sql
|
||||
|
||||
adapter_is :mysql do
|
||||
sql.should be_like(%Q{
|
||||
|
@ -124,12 +124,12 @@ module Arel
|
|||
|
||||
describe "when ordering an ordered relation" do
|
||||
before do
|
||||
@ordered_relation = Order.new(@relation, @attribute)
|
||||
@ordered_relation = Order.new(@relation, [@attribute])
|
||||
@another_attribute = @relation[:name]
|
||||
end
|
||||
|
||||
it "manufactures sql with the order clause of the last ordering preceding the first ordering" do
|
||||
sql = Order.new(@ordered_relation, @another_attribute).to_sql
|
||||
sql = Order.new(@ordered_relation, [@another_attribute]).to_sql
|
||||
|
||||
adapter_is :mysql do
|
||||
sql.should be_like(%Q{
|
||||
|
|
|
@ -10,7 +10,7 @@ module Arel
|
|||
describe '#to_sql' do
|
||||
describe 'when given an attribute' do
|
||||
it "manufactures sql with a limited select clause" do
|
||||
sql = Project.new(@relation, @attribute).to_sql
|
||||
sql = Project.new(@relation, [@attribute]).to_sql
|
||||
|
||||
adapter_is :mysql do
|
||||
sql.should be_like(%Q{
|
||||
|
@ -37,11 +37,11 @@ module Arel
|
|||
|
||||
describe 'when given a relation' do
|
||||
before do
|
||||
@scalar_relation = Project.new(@relation, @relation[:name])
|
||||
@scalar_relation = Project.new(@relation, [@relation[:name]])
|
||||
end
|
||||
|
||||
it "manufactures sql with scalar selects" do
|
||||
sql = Project.new(@relation, @scalar_relation).to_sql
|
||||
sql = Project.new(@relation, [@scalar_relation]).to_sql
|
||||
|
||||
adapter_is :mysql do
|
||||
sql.should be_like(%Q{
|
||||
|
@ -65,7 +65,7 @@ module Arel
|
|||
|
||||
describe 'when given a string' do
|
||||
it "passes the string through to the select clause" do
|
||||
sql = Project.new(@relation, 'asdf').to_sql
|
||||
sql = Project.new(@relation, ['asdf']).to_sql
|
||||
|
||||
adapter_is :mysql do
|
||||
sql.should be_like(%Q{
|
||||
|
|
|
@ -10,7 +10,7 @@ module Arel
|
|||
describe '#to_sql' do
|
||||
describe 'when given a predicate' do
|
||||
it "manufactures sql with where clause conditions" do
|
||||
sql = Where.new(@relation, @predicate).to_sql
|
||||
sql = Where.new(@relation, [@predicate]).to_sql
|
||||
|
||||
adapter_is :mysql do
|
||||
sql.should be_like(%Q{
|
||||
|
|
Loading…
Reference in a new issue