Merge pull request #35653 from kamipo/remove_arel_nodes_values

Get rid of `Arel::Nodes::Values`
This commit is contained in:
Ryuta Kamizono 2019-03-18 07:04:01 +09:00 committed by GitHub
commit aa225455a0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 22 additions and 74 deletions

View File

@ -33,13 +33,13 @@ module Arel # :nodoc: all
@ast.columns << column
values << value
end
@ast.values = create_values values, @ast.columns
@ast.values = create_values(values)
end
self
end
def create_values(values, columns)
Nodes::Values.new values, columns
def create_values(values)
Nodes::ValuesList.new([values])
end
def create_values_list(rows)

View File

@ -45,7 +45,6 @@ require "arel/nodes/and"
require "arel/nodes/function"
require "arel/nodes/count"
require "arel/nodes/extract"
require "arel/nodes/values"
require "arel/nodes/values_list"
require "arel/nodes/named_function"

View File

@ -1,16 +0,0 @@
# frozen_string_literal: true
module Arel # :nodoc: all
module Nodes
class Values < Arel::Nodes::Binary
alias :expressions :left
alias :expressions= :left=
alias :columns :right
alias :columns= :right=
def initialize(exprs, columns = [])
super
end
end
end
end

View File

@ -2,23 +2,8 @@
module Arel # :nodoc: all
module Nodes
class ValuesList < Node
attr_reader :rows
def initialize(rows)
@rows = rows
super()
end
def hash
@rows.hash
end
def eql?(other)
self.class == other.class &&
self.rows == other.rows
end
alias :== :eql?
class ValuesList < Unary
alias :rows :expr
end
end
end

View File

@ -36,6 +36,7 @@ module Arel # :nodoc: all
alias :visit_Arel_Nodes_Descending :unary
alias :visit_Arel_Nodes_UnqualifiedColumn :unary
alias :visit_Arel_Nodes_OptimizerHints :unary
alias :visit_Arel_Nodes_ValuesList :unary
def function(o)
visit o.expressions
@ -103,7 +104,6 @@ module Arel # :nodoc: all
alias :visit_Arel_Nodes_Regexp :binary
alias :visit_Arel_Nodes_RightOuterJoin :binary
alias :visit_Arel_Nodes_TableAlias :binary
alias :visit_Arel_Nodes_Values :binary
alias :visit_Arel_Nodes_When :binary
def visit_Arel_Nodes_StringJoin(o)

View File

@ -46,8 +46,8 @@ module Arel # :nodoc: all
visit_edge o, "distinct"
end
def visit_Arel_Nodes_Values(o)
visit_edge o, "expressions"
def visit_Arel_Nodes_ValuesList(o)
visit_edge o, "rows"
end
def visit_Arel_Nodes_StringJoin(o)

View File

@ -159,7 +159,7 @@ module Arel # :nodoc: all
when Nodes::SqlLiteral, Nodes::BindParam
collector = visit(value, collector)
else
collector << quote(value)
collector << quote(value).to_s
end
collector << COMMA unless k == row_len
end
@ -169,25 +169,6 @@ module Arel # :nodoc: all
collector
end
def visit_Arel_Nodes_Values(o, collector)
collector << "VALUES ("
len = o.expressions.length - 1
o.expressions.each_with_index { |value, i|
case value
when Nodes::SqlLiteral, Nodes::BindParam
collector = visit value, collector
else
collector << quote(value).to_s
end
unless i == len
collector << COMMA
end
}
collector << ")"
end
def visit_Arel_Nodes_SelectStatement(o, collector)
if o.with
collector = visit o.with, collector

View File

@ -11,19 +11,18 @@ module Arel
end
describe "insert" do
it "can create a Values node" do
it "can create a ValuesList node" do
manager = Arel::InsertManager.new
values = manager.create_values %w{ a b }, %w{ c d }
values = manager.create_values_list([%w{ a b }, %w{ c d }])
assert_kind_of Arel::Nodes::Values, values
assert_equal %w{ a b }, values.left
assert_equal %w{ c d }, values.right
assert_kind_of Arel::Nodes::ValuesList, values
assert_equal [%w{ a b }, %w{ c d }], values.rows
end
it "allows sql literals" do
manager = Arel::InsertManager.new
manager.into Table.new(:users)
manager.values = manager.create_values [Arel.sql("*")], %w{ a }
manager.values = manager.create_values([Arel.sql("*")])
manager.to_sql.must_be_like %{
INSERT INTO \"users\" VALUES (*)
}
@ -186,9 +185,9 @@ module Arel
manager = Arel::InsertManager.new
manager.into table
manager.values = Nodes::Values.new [1]
manager.values = Nodes::ValuesList.new([[1], [2]])
manager.to_sql.must_be_like %{
INSERT INTO "users" VALUES (1)
INSERT INTO "users" VALUES (1), (2)
}
end
@ -210,11 +209,11 @@ module Arel
manager = Arel::InsertManager.new
manager.into table
manager.values = Nodes::Values.new [1, "aaron"]
manager.values = Nodes::ValuesList.new([[1, "aaron"], [2, "david"]])
manager.columns << table[:id]
manager.columns << table[:name]
manager.to_sql.must_be_like %{
INSERT INTO "users" ("id", "name") VALUES (1, 'aaron')
INSERT INTO "users" ("id", "name") VALUES (1, 'aaron'), (2, 'david')
}
end
end

View File

@ -33,6 +33,7 @@ module Arel
Arel::Nodes::Ordering,
Arel::Nodes::StringJoin,
Arel::Nodes::UnqualifiedColumn,
Arel::Nodes::ValuesList,
Arel::Nodes::Limit,
Arel::Nodes::Else,
].each do |klass|
@ -116,7 +117,6 @@ module Arel
Arel::Nodes::NotIn,
Arel::Nodes::Or,
Arel::Nodes::TableAlias,
Arel::Nodes::Values,
Arel::Nodes::As,
Arel::Nodes::DeleteStatement,
Arel::Nodes::JoinSource,

View File

@ -37,6 +37,7 @@ module Arel
Arel::Nodes::Offset,
Arel::Nodes::Ordering,
Arel::Nodes::UnqualifiedColumn,
Arel::Nodes::ValuesList,
Arel::Nodes::Limit,
].each do |klass|
define_method("test_#{klass.name.gsub('::', '_')}") do
@ -61,7 +62,6 @@ module Arel
Arel::Nodes::NotIn,
Arel::Nodes::Or,
Arel::Nodes::TableAlias,
Arel::Nodes::Values,
Arel::Nodes::As,
Arel::Nodes::DeleteStatement,
Arel::Nodes::JoinSource,

View File

@ -23,9 +23,9 @@ module Arel
sql.must_be_like "?"
end
it "does not quote BindParams used as part of a Values" do
it "does not quote BindParams used as part of a ValuesList" do
bp = Nodes::BindParam.new(1)
values = Nodes::Values.new([bp])
values = Nodes::ValuesList.new([[bp]])
sql = compile values
sql.must_be_like "VALUES (?)"
end