Skip to content

Commit 6a69a29

Browse files
committed
Move node table name compilation to to_sql visitor
1 parent 1d98bc5 commit 6a69a29

File tree

4 files changed

+35
-7
lines changed

4 files changed

+35
-7
lines changed

activerecord/lib/arel/table.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ def initialize(name, as: nil, klass: nil, type_caster: klass&.type_caster)
1414
@name =
1515
case name
1616
when Symbol then name.to_s
17-
when Nodes::Node then Arel.sql(name.to_sql)
1817
else
1918
name
2019
end

activerecord/lib/arel/visitors/to_sql.rb

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -569,11 +569,17 @@ def visit_Arel_Nodes_Not(o, collector)
569569
end
570570

571571
def visit_Arel_Table(o, collector)
572-
if o.table_alias
573-
collector << quote_table_name(o.name) << " " << quote_table_name(o.table_alias)
572+
if Arel::Nodes::Node === o.name
573+
visit o.name, collector
574574
else
575575
collector << quote_table_name(o.name)
576576
end
577+
578+
if o.table_alias
579+
collector << " " << quote_table_name(o.table_alias)
580+
end
581+
582+
collector
577583
end
578584

579585
def visit_Arel_Nodes_In(o, collector)

activerecord/test/cases/arel/table_test.rb

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -130,15 +130,13 @@ class TableTest < Arel::Spec
130130

131131
it "should accept literal SQL" do
132132
rel = Table.new Arel.sql("generate_series(4, 2)")
133-
manager = rel.project(Arel.star)
134-
_(manager.to_sql).must_be_like %{ SELECT * FROM generate_series(4, 2) }
133+
assert_equal Arel.sql("generate_series(4, 2)"), rel.name
135134
end
136135

137136
it "should accept Arel nodes" do
138137
node = Arel::Nodes::NamedFunction.new("generate_series", [4, 2])
139138
rel = Table.new node
140-
manager = rel.project(Arel.star)
141-
_(manager.to_sql).must_be_like %{ SELECT * FROM generate_series(4, 2) }
139+
assert_equal node, rel.name
142140
end
143141
end
144142

activerecord/test/cases/arel/visitors/to_sql_test.rb

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -696,6 +696,31 @@ def dispatch
696696
end
697697
end
698698

699+
describe "Table" do
700+
it "should compile node names" do
701+
test = Table.new(:users).alias("zomgusers")[:id].eq "3"
702+
_(compile(test)).must_be_like %{
703+
"zomgusers"."id" = '3'
704+
}
705+
end
706+
707+
it "should compile literal SQL" do
708+
test = Table.new Arel.sql("generate_series(4, 2)")
709+
_(compile(test)).must_be_like %{ generate_series(4, 2) }
710+
end
711+
712+
it "should compile Arel nodes" do
713+
test = Arel::Nodes::NamedFunction.new("generate_series", [4, 2])
714+
_(compile(test)).must_be_like %{ generate_series(4, 2) }
715+
end
716+
717+
it "should compile nodes with bind params" do
718+
bp = Nodes::BindParam.new(1)
719+
test = Arel::Nodes::NamedFunction.new("generate_series", [4, bp])
720+
_(compile(test)).must_be_like %{ generate_series(4, ?) }
721+
end
722+
end
723+
699724
describe "TableAlias" do
700725
it "should use the underlying table for checking columns" do
701726
test = Table.new(:users).alias("zomgusers")[:id].eq "3"

0 commit comments

Comments
 (0)