aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Draper <matthew@trebex.net>2018-02-24 17:15:50 +1030
committerMatthew Draper <matthew@trebex.net>2018-02-24 17:16:13 +1030
commit4c0a3d48804a363c7e9272519665a21f601b5248 (patch)
tree6b1f6e28f85cfd69a0ce534856ef939c7079d5cf
parent17ca17072dcdff11b3702a6b45f2fb0c8f8fe9a4 (diff)
downloadrails-4c0a3d48804a363c7e9272519665a21f601b5248.tar.gz
rails-4c0a3d48804a363c7e9272519665a21f601b5248.tar.bz2
rails-4c0a3d48804a363c7e9272519665a21f601b5248.zip
Arel: rubocop -a
-rw-r--r--.rubocop.yml3
-rw-r--r--activerecord/lib/arel.rb55
-rw-r--r--activerecord/lib/arel/alias_predication.rb5
-rw-r--r--activerecord/lib/arel/attributes.rb5
-rw-r--r--activerecord/lib/arel/attributes/attribute.rb1
-rw-r--r--activerecord/lib/arel/collectors/bind.rb4
-rw-r--r--activerecord/lib/arel/collectors/composite.rb6
-rw-r--r--activerecord/lib/arel/collectors/plain_string.rb5
-rw-r--r--activerecord/lib/arel/collectors/sql_string.rb6
-rw-r--r--activerecord/lib/arel/collectors/substitute_binds.rb7
-rw-r--r--activerecord/lib/arel/compatibility/wheres.rb3
-rw-r--r--activerecord/lib/arel/crud.rb6
-rw-r--r--activerecord/lib/arel/delete_manager.rb7
-rw-r--r--activerecord/lib/arel/errors.rb1
-rw-r--r--activerecord/lib/arel/expressions.rb6
-rw-r--r--activerecord/lib/arel/factory_methods.rb17
-rw-r--r--activerecord/lib/arel/insert_manager.rb11
-rw-r--r--activerecord/lib/arel/math.rb1
-rw-r--r--activerecord/lib/arel/nodes.rb87
-rw-r--r--activerecord/lib/arel/nodes/and.rb5
-rw-r--r--activerecord/lib/arel/nodes/ascending.rb3
-rw-r--r--activerecord/lib/arel/nodes/binary.rb7
-rw-r--r--activerecord/lib/arel/nodes/bind_param.rb1
-rw-r--r--activerecord/lib/arel/nodes/case.rb13
-rw-r--r--activerecord/lib/arel/nodes/casted.rb23
-rw-r--r--activerecord/lib/arel/nodes/count.rb3
-rw-r--r--activerecord/lib/arel/nodes/delete_statement.rb7
-rw-r--r--activerecord/lib/arel/nodes/descending.rb3
-rw-r--r--activerecord/lib/arel/nodes/equality.rb1
-rw-r--r--activerecord/lib/arel/nodes/extract.rb5
-rw-r--r--activerecord/lib/arel/nodes/false.rb3
-rw-r--r--activerecord/lib/arel/nodes/full_outer_join.rb1
-rw-r--r--activerecord/lib/arel/nodes/function.rb8
-rw-r--r--activerecord/lib/arel/nodes/grouping.rb1
-rw-r--r--activerecord/lib/arel/nodes/in.rb1
-rw-r--r--activerecord/lib/arel/nodes/infix_operation.rb26
-rw-r--r--activerecord/lib/arel/nodes/inner_join.rb1
-rw-r--r--activerecord/lib/arel/nodes/insert_statement.rb5
-rw-r--r--activerecord/lib/arel/nodes/join_source.rb3
-rw-r--r--activerecord/lib/arel/nodes/matches.rb1
-rw-r--r--activerecord/lib/arel/nodes/named_function.rb5
-rw-r--r--activerecord/lib/arel/nodes/node.rb9
-rw-r--r--activerecord/lib/arel/nodes/node_expression.rb2
-rw-r--r--activerecord/lib/arel/nodes/outer_join.rb1
-rw-r--r--activerecord/lib/arel/nodes/over.rb7
-rw-r--r--activerecord/lib/arel/nodes/regexp.rb1
-rw-r--r--activerecord/lib/arel/nodes/right_outer_join.rb1
-rw-r--r--activerecord/lib/arel/nodes/select_core.rb7
-rw-r--r--activerecord/lib/arel/nodes/select_statement.rb7
-rw-r--r--activerecord/lib/arel/nodes/sql_literal.rb1
-rw-r--r--activerecord/lib/arel/nodes/string_join.rb3
-rw-r--r--activerecord/lib/arel/nodes/table_alias.rb3
-rw-r--r--activerecord/lib/arel/nodes/terminal.rb3
-rw-r--r--activerecord/lib/arel/nodes/true.rb3
-rw-r--r--activerecord/lib/arel/nodes/unary.rb5
-rw-r--r--activerecord/lib/arel/nodes/unary_operation.rb6
-rw-r--r--activerecord/lib/arel/nodes/unqualified_column.rb1
-rw-r--r--activerecord/lib/arel/nodes/update_statement.rb5
-rw-r--r--activerecord/lib/arel/nodes/values.rb3
-rw-r--r--activerecord/lib/arel/nodes/values_list.rb3
-rw-r--r--activerecord/lib/arel/nodes/window.rb17
-rw-r--r--activerecord/lib/arel/nodes/with.rb2
-rw-r--r--activerecord/lib/arel/order_predications.rb3
-rw-r--r--activerecord/lib/arel/predications.rb117
-rw-r--r--activerecord/lib/arel/select_manager.rb81
-rw-r--r--activerecord/lib/arel/table.rb29
-rw-r--r--activerecord/lib/arel/tree_manager.rb7
-rw-r--r--activerecord/lib/arel/update_manager.rb17
-rw-r--r--activerecord/lib/arel/visitors.rb27
-rw-r--r--activerecord/lib/arel/visitors/depth_first.rb373
-rw-r--r--activerecord/lib/arel/visitors/dot.rb447
-rw-r--r--activerecord/lib/arel/visitors/ibm_db.rb12
-rw-r--r--activerecord/lib/arel/visitors/informix.rb82
-rw-r--r--activerecord/lib/arel/visitors/mssql.rb177
-rw-r--r--activerecord/lib/arel/visitors/mysql.rb127
-rw-r--r--activerecord/lib/arel/visitors/oracle.rb250
-rw-r--r--activerecord/lib/arel/visitors/oracle12.rb87
-rw-r--r--activerecord/lib/arel/visitors/postgresql.rb155
-rw-r--r--activerecord/lib/arel/visitors/sqlite.rb30
-rw-r--r--activerecord/lib/arel/visitors/to_sql.rb1239
-rw-r--r--activerecord/lib/arel/visitors/visitor.rb43
-rw-r--r--activerecord/lib/arel/visitors/where_sql.rb15
-rw-r--r--activerecord/lib/arel/window_predications.rb5
-rw-r--r--activerecord/test/cases/arel/attributes/attribute_test.rb445
-rw-r--r--activerecord/test/cases/arel/attributes_test.rb35
-rw-r--r--activerecord/test/cases/arel/collectors/bind_test.rb9
-rw-r--r--activerecord/test/cases/arel/collectors/composite_test.rb13
-rw-r--r--activerecord/test/cases/arel/collectors/sql_string_test.rb9
-rw-r--r--activerecord/test/cases/arel/collectors/substitute_bind_collector_test.rb7
-rw-r--r--activerecord/test/cases/arel/crud_test.rb27
-rw-r--r--activerecord/test/cases/arel/delete_manager_test.rb21
-rw-r--r--activerecord/test/cases/arel/factory_methods_test.rb5
-rw-r--r--activerecord/test/cases/arel/helper.rb19
-rw-r--r--activerecord/test/cases/arel/insert_manager_test.rb58
-rw-r--r--activerecord/test/cases/arel/nodes/and_test.rb16
-rw-r--r--activerecord/test/cases/arel/nodes/as_test.rb27
-rw-r--r--activerecord/test/cases/arel/nodes/ascending_test.rb19
-rw-r--r--activerecord/test/cases/arel/nodes/bin_test.rb17
-rw-r--r--activerecord/test/cases/arel/nodes/binary_test.rb21
-rw-r--r--activerecord/test/cases/arel/nodes/bind_param_test.rb11
-rw-r--r--activerecord/test/cases/arel/nodes/case_test.rb37
-rw-r--r--activerecord/test/cases/arel/nodes/casted_test.rb7
-rw-r--r--activerecord/test/cases/arel/nodes/count_test.rb21
-rw-r--r--activerecord/test/cases/arel/nodes/delete_statement_test.rb9
-rw-r--r--activerecord/test/cases/arel/nodes/descending_test.rb19
-rw-r--r--activerecord/test/cases/arel/nodes/distinct_test.rb12
-rw-r--r--activerecord/test/cases/arel/nodes/equality_test.rb41
-rw-r--r--activerecord/test/cases/arel/nodes/extract_test.rb25
-rw-r--r--activerecord/test/cases/arel/nodes/false_test.rb12
-rw-r--r--activerecord/test/cases/arel/nodes/grouping_test.rb20
-rw-r--r--activerecord/test/cases/arel/nodes/infix_operation_test.rb7
-rw-r--r--activerecord/test/cases/arel/nodes/insert_statement_test.rb9
-rw-r--r--activerecord/test/cases/arel/nodes/named_function_test.rb35
-rw-r--r--activerecord/test/cases/arel/nodes/node_test.rb3
-rw-r--r--activerecord/test/cases/arel/nodes/not_test.rb19
-rw-r--r--activerecord/test/cases/arel/nodes/or_test.rb19
-rw-r--r--activerecord/test/cases/arel/nodes/over_test.rb45
-rw-r--r--activerecord/test/cases/arel/nodes/select_core_test.rb5
-rw-r--r--activerecord/test/cases/arel/nodes/select_statement_test.rb17
-rw-r--r--activerecord/test/cases/arel/nodes/sql_literal_test.rb53
-rw-r--r--activerecord/test/cases/arel/nodes/sum_test.rb23
-rw-r--r--activerecord/test/cases/arel/nodes/table_alias_test.rb11
-rw-r--r--activerecord/test/cases/arel/nodes/true_test.rb13
-rw-r--r--activerecord/test/cases/arel/nodes/unary_operation_test.rb7
-rw-r--r--activerecord/test/cases/arel/nodes/update_statement_test.rb25
-rw-r--r--activerecord/test/cases/arel/nodes/window_test.rb35
-rw-r--r--activerecord/test/cases/arel/nodes_test.rb9
-rw-r--r--activerecord/test/cases/arel/select_manager_test.rb488
-rw-r--r--activerecord/test/cases/arel/support/fake_record.rb48
-rw-r--r--activerecord/test/cases/arel/table_test.rb129
-rw-r--r--activerecord/test/cases/arel/update_manager_test.rb43
-rw-r--r--activerecord/test/cases/arel/visitors/depth_first_test.rb7
-rw-r--r--activerecord/test/cases/arel/visitors/dispatch_contamination_test.rb14
-rw-r--r--activerecord/test/cases/arel/visitors/dot_test.rb5
-rw-r--r--activerecord/test/cases/arel/visitors/ibm_db_test.rb10
-rw-r--r--activerecord/test/cases/arel/visitors/informix_test.rb16
-rw-r--r--activerecord/test/cases/arel/visitors/mssql_test.rb30
-rw-r--r--activerecord/test/cases/arel/visitors/mysql_test.rb35
-rw-r--r--activerecord/test/cases/arel/visitors/oracle12_test.rb19
-rw-r--r--activerecord/test/cases/arel/visitors/oracle_test.rb61
-rw-r--r--activerecord/test/cases/arel/visitors/postgres_test.rb77
-rw-r--r--activerecord/test/cases/arel/visitors/sqlite_test.rb17
-rw-r--r--activerecord/test/cases/arel/visitors/to_sql_test.rb185
143 files changed, 3179 insertions, 3077 deletions
diff --git a/.rubocop.yml b/.rubocop.yml
index aa998b8f26..3c765d5b1d 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -7,9 +7,6 @@ AllCops:
- '**/templates/**/*'
- '**/vendor/**/*'
- 'actionpack/lib/action_dispatch/journey/parser.rb'
- - 'activerecord/lib/arel.rb'
- - 'activerecord/lib/arel/**/*'
- - 'activerecord/test/cases/arel/**/*'
# Prefer &&/|| over and/or.
Style/AndOr:
diff --git a/activerecord/lib/arel.rb b/activerecord/lib/arel.rb
index c327caeac0..2d5cfa4d5c 100644
--- a/activerecord/lib/arel.rb
+++ b/activerecord/lib/arel.rb
@@ -1,38 +1,39 @@
# frozen_string_literal: true
-require 'arel/errors'
-
-require 'arel/crud'
-require 'arel/factory_methods'
-
-require 'arel/expressions'
-require 'arel/predications'
-require 'arel/window_predications'
-require 'arel/math'
-require 'arel/alias_predication'
-require 'arel/order_predications'
-require 'arel/table'
-require 'arel/attributes'
-require 'arel/compatibility/wheres'
-
-require 'arel/visitors'
-require 'arel/collectors/sql_string'
-
-require 'arel/tree_manager'
-require 'arel/insert_manager'
-require 'arel/select_manager'
-require 'arel/update_manager'
-require 'arel/delete_manager'
-require 'arel/nodes'
+
+require "arel/errors"
+
+require "arel/crud"
+require "arel/factory_methods"
+
+require "arel/expressions"
+require "arel/predications"
+require "arel/window_predications"
+require "arel/math"
+require "arel/alias_predication"
+require "arel/order_predications"
+require "arel/table"
+require "arel/attributes"
+require "arel/compatibility/wheres"
+
+require "arel/visitors"
+require "arel/collectors/sql_string"
+
+require "arel/tree_manager"
+require "arel/insert_manager"
+require "arel/select_manager"
+require "arel/update_manager"
+require "arel/delete_manager"
+require "arel/nodes"
module Arel
- VERSION = '10.0.0'
+ VERSION = "10.0.0"
- def self.sql raw_sql
+ def self.sql(raw_sql)
Arel::Nodes::SqlLiteral.new raw_sql
end
def self.star
- sql '*'
+ sql "*"
end
## Convenience Alias
Node = Arel::Nodes::Node
diff --git a/activerecord/lib/arel/alias_predication.rb b/activerecord/lib/arel/alias_predication.rb
index cb50fb95be..ae44157b9a 100644
--- a/activerecord/lib/arel/alias_predication.rb
+++ b/activerecord/lib/arel/alias_predication.rb
@@ -1,8 +1,9 @@
# frozen_string_literal: true
+
module Arel
module AliasPredication
- def as other
+ def as(other)
Nodes::As.new self, Nodes::SqlLiteral.new(other)
end
end
-end \ No newline at end of file
+end
diff --git a/activerecord/lib/arel/attributes.rb b/activerecord/lib/arel/attributes.rb
index ed4739ebed..c81a7b941b 100644
--- a/activerecord/lib/arel/attributes.rb
+++ b/activerecord/lib/arel/attributes.rb
@@ -1,11 +1,12 @@
# frozen_string_literal: true
-require 'arel/attributes/attribute'
+
+require "arel/attributes/attribute"
module Arel
module Attributes
###
# Factory method to wrap a raw database +column+ to an Arel Attribute.
- def self.for column
+ def self.for(column)
case column.type
when :string, :text, :binary then String
when :integer then Integer
diff --git a/activerecord/lib/arel/attributes/attribute.rb b/activerecord/lib/arel/attributes/attribute.rb
index 41bc0c32c7..71f839479a 100644
--- a/activerecord/lib/arel/attributes/attribute.rb
+++ b/activerecord/lib/arel/attributes/attribute.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Attributes
class Attribute < Struct.new :relation, :name
diff --git a/activerecord/lib/arel/collectors/bind.rb b/activerecord/lib/arel/collectors/bind.rb
index d816aed90d..8d19e7446d 100644
--- a/activerecord/lib/arel/collectors/bind.rb
+++ b/activerecord/lib/arel/collectors/bind.rb
@@ -7,11 +7,11 @@ module Arel
@binds = []
end
- def << str
+ def <<(str)
self
end
- def add_bind bind
+ def add_bind(bind)
@binds << bind
self
end
diff --git a/activerecord/lib/arel/collectors/composite.rb b/activerecord/lib/arel/collectors/composite.rb
index 4f6156fe27..675a819596 100644
--- a/activerecord/lib/arel/collectors/composite.rb
+++ b/activerecord/lib/arel/collectors/composite.rb
@@ -8,13 +8,13 @@ module Arel
@right = right
end
- def << str
+ def <<(str)
left << str
right << str
self
end
- def add_bind bind, &block
+ def add_bind(bind, &block)
left.add_bind bind, &block
right.add_bind bind, &block
self
@@ -26,7 +26,7 @@ module Arel
protected
- attr_reader :left, :right
+ attr_reader :left, :right
end
end
end
diff --git a/activerecord/lib/arel/collectors/plain_string.rb b/activerecord/lib/arel/collectors/plain_string.rb
index 1e8d2a2152..b98802c44a 100644
--- a/activerecord/lib/arel/collectors/plain_string.rb
+++ b/activerecord/lib/arel/collectors/plain_string.rb
@@ -1,16 +1,17 @@
# frozen_string_literal: true
+
module Arel
module Collectors
class PlainString
def initialize
- @str = ''.dup
+ @str = "".dup
end
def value
@str
end
- def << str
+ def <<(str)
@str << str
self
end
diff --git a/activerecord/lib/arel/collectors/sql_string.rb b/activerecord/lib/arel/collectors/sql_string.rb
index bcb941f6d4..78c9e48aab 100644
--- a/activerecord/lib/arel/collectors/sql_string.rb
+++ b/activerecord/lib/arel/collectors/sql_string.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-require 'arel/collectors/plain_string'
+require "arel/collectors/plain_string"
module Arel
module Collectors
@@ -10,13 +10,13 @@ module Arel
@bind_index = 1
end
- def add_bind bind
+ def add_bind(bind)
self << yield(@bind_index)
@bind_index += 1
self
end
- def compile bvs
+ def compile(bvs)
value
end
end
diff --git a/activerecord/lib/arel/collectors/substitute_binds.rb b/activerecord/lib/arel/collectors/substitute_binds.rb
index 99d2215aaa..ee6635f914 100644
--- a/activerecord/lib/arel/collectors/substitute_binds.rb
+++ b/activerecord/lib/arel/collectors/substitute_binds.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Collectors
class SubstituteBinds
@@ -7,12 +8,12 @@ module Arel
@delegate = delegate_collector
end
- def << str
+ def <<(str)
delegate << str
self
end
- def add_bind bind
+ def add_bind(bind)
self << quoter.quote(bind)
end
@@ -22,7 +23,7 @@ module Arel
protected
- attr_reader :quoter, :delegate
+ attr_reader :quoter, :delegate
end
end
end
diff --git a/activerecord/lib/arel/compatibility/wheres.rb b/activerecord/lib/arel/compatibility/wheres.rb
index 3e60894bd8..2ffb2e0ad8 100644
--- a/activerecord/lib/arel/compatibility/wheres.rb
+++ b/activerecord/lib/arel/compatibility/wheres.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Compatibility # :nodoc:
class Wheres # :nodoc:
@@ -15,7 +16,7 @@ module Arel
end
end
- def initialize engine, collection
+ def initialize(engine, collection)
@engine = engine
@collection = collection
end
diff --git a/activerecord/lib/arel/crud.rb b/activerecord/lib/arel/crud.rb
index 2d10432205..e2427b730c 100644
--- a/activerecord/lib/arel/crud.rb
+++ b/activerecord/lib/arel/crud.rb
@@ -1,9 +1,10 @@
# frozen_string_literal: true
+
module Arel
###
# FIXME hopefully we can remove this
module Crud
- def compile_update values, pk
+ def compile_update(values, pk)
um = UpdateManager.new
if Nodes::SqlLiteral === values
@@ -20,7 +21,7 @@ module Arel
um
end
- def compile_insert values
+ def compile_insert(values)
im = create_insert
im.insert values
im
@@ -37,6 +38,5 @@ module Arel
dm.from @ctx.froms
dm
end
-
end
end
diff --git a/activerecord/lib/arel/delete_manager.rb b/activerecord/lib/arel/delete_manager.rb
index aee4511249..df1f92bd23 100644
--- a/activerecord/lib/arel/delete_manager.rb
+++ b/activerecord/lib/arel/delete_manager.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
class DeleteManager < Arel::TreeManager
def initialize
@@ -7,17 +8,17 @@ module Arel
@ctx = @ast
end
- def from relation
+ def from(relation)
@ast.relation = relation
self
end
- def take limit
+ def take(limit)
@ast.limit = Nodes::Limit.new(Nodes.build_quoted(limit)) if limit
self
end
- def wheres= list
+ def wheres=(list)
@ast.wheres = list
end
end
diff --git a/activerecord/lib/arel/errors.rb b/activerecord/lib/arel/errors.rb
index 86fbb80461..8733b7ff5a 100644
--- a/activerecord/lib/arel/errors.rb
+++ b/activerecord/lib/arel/errors.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
class ArelError < StandardError
end
diff --git a/activerecord/lib/arel/expressions.rb b/activerecord/lib/arel/expressions.rb
index 612a0942f1..597b861b6c 100644
--- a/activerecord/lib/arel/expressions.rb
+++ b/activerecord/lib/arel/expressions.rb
@@ -1,7 +1,8 @@
# frozen_string_literal: true
+
module Arel
module Expressions
- def count distinct = false
+ def count(distinct = false)
Nodes::Count.new [self], distinct
end
@@ -21,9 +22,8 @@ module Arel
Nodes::Avg.new [self]
end
- def extract field
+ def extract(field)
Nodes::Extract.new [self], field
end
-
end
end
diff --git a/activerecord/lib/arel/factory_methods.rb b/activerecord/lib/arel/factory_methods.rb
index 6647c5ac44..55aea3ecd7 100644
--- a/activerecord/lib/arel/factory_methods.rb
+++ b/activerecord/lib/arel/factory_methods.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
###
# Methods for creating various nodes
@@ -11,34 +12,34 @@ module Arel
Arel::Nodes::False.new
end
- def create_table_alias relation, name
+ def create_table_alias(relation, name)
Nodes::TableAlias.new(relation, name)
end
- def create_join to, constraint = nil, klass = Nodes::InnerJoin
+ def create_join(to, constraint = nil, klass = Nodes::InnerJoin)
klass.new(to, constraint)
end
- def create_string_join to
+ def create_string_join(to)
create_join to, nil, Nodes::StringJoin
end
- def create_and clauses
+ def create_and(clauses)
Nodes::And.new clauses
end
- def create_on expr
+ def create_on(expr)
Nodes::On.new expr
end
- def grouping expr
+ def grouping(expr)
Nodes::Grouping.new expr
end
###
# Create a LOWER() function
- def lower column
- Nodes::NamedFunction.new 'LOWER', [Nodes.build_quoted(column)]
+ def lower(column)
+ Nodes::NamedFunction.new "LOWER", [Nodes.build_quoted(column)]
end
end
end
diff --git a/activerecord/lib/arel/insert_manager.rb b/activerecord/lib/arel/insert_manager.rb
index dcbac6cb43..47b52d6515 100644
--- a/activerecord/lib/arel/insert_manager.rb
+++ b/activerecord/lib/arel/insert_manager.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
class InsertManager < Arel::TreeManager
def initialize
@@ -6,19 +7,19 @@ module Arel
@ast = Nodes::InsertStatement.new
end
- def into table
+ def into(table)
@ast.relation = table
self
end
def columns; @ast.columns end
- def values= val; @ast.values = val; end
+ def values=(val); @ast.values = val; end
- def select select
+ def select(select)
@ast.select = select
end
- def insert fields
+ def insert(fields)
return if fields.empty?
if String === fields
@@ -37,7 +38,7 @@ module Arel
self
end
- def create_values values, columns
+ def create_values(values, columns)
Nodes::Values.new values, columns
end
diff --git a/activerecord/lib/arel/math.rb b/activerecord/lib/arel/math.rb
index 9e6549b58f..671457efff 100644
--- a/activerecord/lib/arel/math.rb
+++ b/activerecord/lib/arel/math.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Math
def *(other)
diff --git a/activerecord/lib/arel/nodes.rb b/activerecord/lib/arel/nodes.rb
index 8c6572dd6a..5af0e532e2 100644
--- a/activerecord/lib/arel/nodes.rb
+++ b/activerecord/lib/arel/nodes.rb
@@ -1,66 +1,67 @@
# frozen_string_literal: true
+
# node
-require 'arel/nodes/node'
-require 'arel/nodes/node_expression'
-require 'arel/nodes/select_statement'
-require 'arel/nodes/select_core'
-require 'arel/nodes/insert_statement'
-require 'arel/nodes/update_statement'
-require 'arel/nodes/bind_param'
+require "arel/nodes/node"
+require "arel/nodes/node_expression"
+require "arel/nodes/select_statement"
+require "arel/nodes/select_core"
+require "arel/nodes/insert_statement"
+require "arel/nodes/update_statement"
+require "arel/nodes/bind_param"
# terminal
-require 'arel/nodes/terminal'
-require 'arel/nodes/true'
-require 'arel/nodes/false'
+require "arel/nodes/terminal"
+require "arel/nodes/true"
+require "arel/nodes/false"
# unary
-require 'arel/nodes/unary'
-require 'arel/nodes/grouping'
-require 'arel/nodes/ascending'
-require 'arel/nodes/descending'
-require 'arel/nodes/unqualified_column'
-require 'arel/nodes/with'
+require "arel/nodes/unary"
+require "arel/nodes/grouping"
+require "arel/nodes/ascending"
+require "arel/nodes/descending"
+require "arel/nodes/unqualified_column"
+require "arel/nodes/with"
# binary
-require 'arel/nodes/binary'
-require 'arel/nodes/equality'
-require 'arel/nodes/in' # Why is this subclassed from equality?
-require 'arel/nodes/join_source'
-require 'arel/nodes/delete_statement'
-require 'arel/nodes/table_alias'
-require 'arel/nodes/infix_operation'
-require 'arel/nodes/unary_operation'
-require 'arel/nodes/over'
-require 'arel/nodes/matches'
-require 'arel/nodes/regexp'
+require "arel/nodes/binary"
+require "arel/nodes/equality"
+require "arel/nodes/in" # Why is this subclassed from equality?
+require "arel/nodes/join_source"
+require "arel/nodes/delete_statement"
+require "arel/nodes/table_alias"
+require "arel/nodes/infix_operation"
+require "arel/nodes/unary_operation"
+require "arel/nodes/over"
+require "arel/nodes/matches"
+require "arel/nodes/regexp"
# nary
-require 'arel/nodes/and'
+require "arel/nodes/and"
# function
# FIXME: Function + Alias can be rewritten as a Function and Alias node.
# We should make Function a Unary node and deprecate the use of "aliaz"
-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'
+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"
# windows
-require 'arel/nodes/window'
+require "arel/nodes/window"
# conditional expressions
-require 'arel/nodes/case'
+require "arel/nodes/case"
# joins
-require 'arel/nodes/full_outer_join'
-require 'arel/nodes/inner_join'
-require 'arel/nodes/outer_join'
-require 'arel/nodes/right_outer_join'
-require 'arel/nodes/string_join'
+require "arel/nodes/full_outer_join"
+require "arel/nodes/inner_join"
+require "arel/nodes/outer_join"
+require "arel/nodes/right_outer_join"
+require "arel/nodes/string_join"
-require 'arel/nodes/sql_literal'
+require "arel/nodes/sql_literal"
-require 'arel/nodes/casted'
+require "arel/nodes/casted"
diff --git a/activerecord/lib/arel/nodes/and.rb b/activerecord/lib/arel/nodes/and.rb
index 1e2f61cf43..e76d4f3933 100644
--- a/activerecord/lib/arel/nodes/and.rb
+++ b/activerecord/lib/arel/nodes/and.rb
@@ -1,10 +1,11 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class And < Arel::Nodes::Node
attr_reader :children
- def initialize children
+ def initialize(children)
super()
@children = children
end
@@ -21,7 +22,7 @@ module Arel
children.hash
end
- def eql? other
+ def eql?(other)
self.class == other.class &&
self.children == other.children
end
diff --git a/activerecord/lib/arel/nodes/ascending.rb b/activerecord/lib/arel/nodes/ascending.rb
index adadab55e4..7ee531734f 100644
--- a/activerecord/lib/arel/nodes/ascending.rb
+++ b/activerecord/lib/arel/nodes/ascending.rb
@@ -1,8 +1,8 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class Ascending < Ordering
-
def reverse
Descending.new(expr)
end
@@ -18,7 +18,6 @@ module Arel
def descending?
false
end
-
end
end
end
diff --git a/activerecord/lib/arel/nodes/binary.rb b/activerecord/lib/arel/nodes/binary.rb
index a86d4e4696..e6a5cb63df 100644
--- a/activerecord/lib/arel/nodes/binary.rb
+++ b/activerecord/lib/arel/nodes/binary.rb
@@ -1,16 +1,17 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class Binary < Arel::Nodes::NodeExpression
attr_accessor :left, :right
- def initialize left, right
+ def initialize(left, right)
super()
@left = left
@right = right
end
- def initialize_copy other
+ def initialize_copy(other)
super
@left = @left.clone if @left
@right = @right.clone if @right
@@ -20,7 +21,7 @@ module Arel
[self.class, @left, @right].hash
end
- def eql? other
+ def eql?(other)
self.class == other.class &&
self.left == other.left &&
self.right == other.right
diff --git a/activerecord/lib/arel/nodes/bind_param.rb b/activerecord/lib/arel/nodes/bind_param.rb
index efa4f452d4..1cc1886c2a 100644
--- a/activerecord/lib/arel/nodes/bind_param.rb
+++ b/activerecord/lib/arel/nodes/bind_param.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class BindParam < Node
diff --git a/activerecord/lib/arel/nodes/case.rb b/activerecord/lib/arel/nodes/case.rb
index 50ea1e0be2..22c2da98dd 100644
--- a/activerecord/lib/arel/nodes/case.rb
+++ b/activerecord/lib/arel/nodes/case.rb
@@ -1,31 +1,32 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class Case < Arel::Nodes::Node
attr_accessor :case, :conditions, :default
- def initialize expression = nil, default = nil
+ def initialize(expression = nil, default = nil)
@case = expression
@conditions = []
@default = default
end
- def when condition, expression = nil
+ def when(condition, expression = nil)
@conditions << When.new(Nodes.build_quoted(condition), expression)
self
end
- def then expression
+ def then(expression)
@conditions.last.right = Nodes.build_quoted(expression)
self
end
- def else expression
+ def else(expression)
@default = Else.new Nodes.build_quoted(expression)
self
end
- def initialize_copy other
+ def initialize_copy(other)
super
@case = @case.clone if @case
@conditions = @conditions.map { |x| x.clone }
@@ -36,7 +37,7 @@ module Arel
[@case, @conditions, @default].hash
end
- def eql? other
+ def eql?(other)
self.class == other.class &&
self.case == other.case &&
self.conditions == other.conditions &&
diff --git a/activerecord/lib/arel/nodes/casted.rb b/activerecord/lib/arel/nodes/casted.rb
index f945063dd2..c701e7ff41 100644
--- a/activerecord/lib/arel/nodes/casted.rb
+++ b/activerecord/lib/arel/nodes/casted.rb
@@ -1,9 +1,10 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class Casted < Arel::Nodes::NodeExpression # :nodoc:
attr_reader :val, :attribute
- def initialize val, attribute
+ def initialize(val, attribute)
@val = val
@attribute = attribute
super()
@@ -15,7 +16,7 @@ module Arel
[self.class, val, attribute].hash
end
- def eql? other
+ def eql?(other)
self.class == other.class &&
self.val == other.val &&
self.attribute == other.attribute
@@ -28,17 +29,17 @@ module Arel
def nil?; val.nil?; end
end
- def self.build_quoted other, attribute = nil
+ def self.build_quoted(other, attribute = nil)
case other
- when Arel::Nodes::Node, Arel::Attributes::Attribute, Arel::Table, Arel::Nodes::BindParam, Arel::SelectManager, Arel::Nodes::Quoted, Arel::Nodes::SqlLiteral
- other
+ when Arel::Nodes::Node, Arel::Attributes::Attribute, Arel::Table, Arel::Nodes::BindParam, Arel::SelectManager, Arel::Nodes::Quoted, Arel::Nodes::SqlLiteral
+ other
+ else
+ case attribute
+ when Arel::Attributes::Attribute
+ Casted.new other, attribute
else
- case attribute
- when Arel::Attributes::Attribute
- Casted.new other, attribute
- else
- Quoted.new other
- end
+ Quoted.new other
+ end
end
end
end
diff --git a/activerecord/lib/arel/nodes/count.rb b/activerecord/lib/arel/nodes/count.rb
index 4dd9be453f..3f138738ef 100644
--- a/activerecord/lib/arel/nodes/count.rb
+++ b/activerecord/lib/arel/nodes/count.rb
@@ -1,10 +1,11 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class Count < Arel::Nodes::Function
include Math
- def initialize expr, distinct = false, aliaz = nil
+ def initialize(expr, distinct = false, aliaz = nil)
super(expr, aliaz)
@distinct = distinct
end
diff --git a/activerecord/lib/arel/nodes/delete_statement.rb b/activerecord/lib/arel/nodes/delete_statement.rb
index 063a5341e5..1aad4199cd 100644
--- a/activerecord/lib/arel/nodes/delete_statement.rb
+++ b/activerecord/lib/arel/nodes/delete_statement.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class DeleteStatement < Arel::Nodes::Node
@@ -10,13 +11,13 @@ module Arel
alias :wheres :right
alias :wheres= :right=
- def initialize relation = nil, wheres = []
+ def initialize(relation = nil, wheres = [])
super()
@left = relation
@right = wheres
end
- def initialize_copy other
+ def initialize_copy(other)
super
@left = @left.clone if @left
@right = @right.clone if @right
@@ -26,7 +27,7 @@ module Arel
[self.class, @left, @right].hash
end
- def eql? other
+ def eql?(other)
self.class == other.class &&
self.left == other.left &&
self.right == other.right
diff --git a/activerecord/lib/arel/nodes/descending.rb b/activerecord/lib/arel/nodes/descending.rb
index d7261ab583..afcb6b1b71 100644
--- a/activerecord/lib/arel/nodes/descending.rb
+++ b/activerecord/lib/arel/nodes/descending.rb
@@ -1,8 +1,8 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class Descending < Ordering
-
def reverse
Ascending.new(expr)
end
@@ -18,7 +18,6 @@ module Arel
def descending?
true
end
-
end
end
end
diff --git a/activerecord/lib/arel/nodes/equality.rb b/activerecord/lib/arel/nodes/equality.rb
index ef44725e24..4ed545ae17 100644
--- a/activerecord/lib/arel/nodes/equality.rb
+++ b/activerecord/lib/arel/nodes/equality.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class Equality < Arel::Nodes::Binary
diff --git a/activerecord/lib/arel/nodes/extract.rb b/activerecord/lib/arel/nodes/extract.rb
index fdf3004c6a..56069cd05a 100644
--- a/activerecord/lib/arel/nodes/extract.rb
+++ b/activerecord/lib/arel/nodes/extract.rb
@@ -1,10 +1,11 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class Extract < Arel::Nodes::Unary
attr_accessor :field
- def initialize expr, field
+ def initialize(expr, field)
super(expr)
@field = field
end
@@ -13,7 +14,7 @@ module Arel
super ^ @field.hash
end
- def eql? other
+ def eql?(other)
super &&
self.field == other.field
end
diff --git a/activerecord/lib/arel/nodes/false.rb b/activerecord/lib/arel/nodes/false.rb
index 58132a2f90..1759a323e3 100644
--- a/activerecord/lib/arel/nodes/false.rb
+++ b/activerecord/lib/arel/nodes/false.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class False < Arel::Nodes::NodeExpression
@@ -6,7 +7,7 @@ module Arel
self.class.hash
end
- def eql? other
+ def eql?(other)
self.class == other.class
end
alias :== :eql?
diff --git a/activerecord/lib/arel/nodes/full_outer_join.rb b/activerecord/lib/arel/nodes/full_outer_join.rb
index 12a02d8cd9..3551855201 100644
--- a/activerecord/lib/arel/nodes/full_outer_join.rb
+++ b/activerecord/lib/arel/nodes/full_outer_join.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class FullOuterJoin < Arel::Nodes::Join
diff --git a/activerecord/lib/arel/nodes/function.rb b/activerecord/lib/arel/nodes/function.rb
index b3bf8f3e51..f3415da12b 100644
--- a/activerecord/lib/arel/nodes/function.rb
+++ b/activerecord/lib/arel/nodes/function.rb
@@ -1,18 +1,19 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class Function < Arel::Nodes::NodeExpression
include Arel::WindowPredications
attr_accessor :expressions, :alias, :distinct
- def initialize expr, aliaz = nil
+ def initialize(expr, aliaz = nil)
super()
@expressions = expr
@alias = aliaz && SqlLiteral.new(aliaz)
@distinct = false
end
- def as aliaz
+ def as(aliaz)
self.alias = SqlLiteral.new(aliaz)
self
end
@@ -21,14 +22,13 @@ module Arel
[@expressions, @alias, @distinct].hash
end
- def eql? other
+ def eql?(other)
self.class == other.class &&
self.expressions == other.expressions &&
self.alias == other.alias &&
self.distinct == other.distinct
end
alias :== :eql?
-
end
%w{
diff --git a/activerecord/lib/arel/nodes/grouping.rb b/activerecord/lib/arel/nodes/grouping.rb
index ffe66654ce..b371b01612 100644
--- a/activerecord/lib/arel/nodes/grouping.rb
+++ b/activerecord/lib/arel/nodes/grouping.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class Grouping < Unary
diff --git a/activerecord/lib/arel/nodes/in.rb b/activerecord/lib/arel/nodes/in.rb
index 30cd771c40..5d24d34528 100644
--- a/activerecord/lib/arel/nodes/in.rb
+++ b/activerecord/lib/arel/nodes/in.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class In < Equality
diff --git a/activerecord/lib/arel/nodes/infix_operation.rb b/activerecord/lib/arel/nodes/infix_operation.rb
index 4eb7c5356f..501da11730 100644
--- a/activerecord/lib/arel/nodes/infix_operation.rb
+++ b/activerecord/lib/arel/nodes/infix_operation.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
+
module Arel
module Nodes
-
class InfixOperation < Binary
include Arel::Expressions
include Arel::Predications
@@ -11,68 +11,68 @@ module Arel
attr_reader :operator
- def initialize operator, left, right
+ def initialize(operator, left, right)
super(left, right)
@operator = operator
end
end
class Multiplication < InfixOperation
- def initialize left, right
+ def initialize(left, right)
super(:*, left, right)
end
end
class Division < InfixOperation
- def initialize left, right
+ def initialize(left, right)
super(:/, left, right)
end
end
class Addition < InfixOperation
- def initialize left, right
+ def initialize(left, right)
super(:+, left, right)
end
end
class Subtraction < InfixOperation
- def initialize left, right
+ def initialize(left, right)
super(:-, left, right)
end
end
class Concat < InfixOperation
- def initialize left, right
- super('||', left, right)
+ def initialize(left, right)
+ super("||", left, right)
end
end
class BitwiseAnd < InfixOperation
- def initialize left, right
+ def initialize(left, right)
super(:&, left, right)
end
end
class BitwiseOr < InfixOperation
- def initialize left, right
+ def initialize(left, right)
super(:|, left, right)
end
end
class BitwiseXor < InfixOperation
- def initialize left, right
+ def initialize(left, right)
super(:^, left, right)
end
end
class BitwiseShiftLeft < InfixOperation
- def initialize left, right
+ def initialize(left, right)
super(:<<, left, right)
end
end
class BitwiseShiftRight < InfixOperation
- def initialize left, right
+ def initialize(left, right)
super(:>>, left, right)
end
end
diff --git a/activerecord/lib/arel/nodes/inner_join.rb b/activerecord/lib/arel/nodes/inner_join.rb
index 4e398267c3..8af99c2dae 100644
--- a/activerecord/lib/arel/nodes/inner_join.rb
+++ b/activerecord/lib/arel/nodes/inner_join.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class InnerJoin < Arel::Nodes::Join
diff --git a/activerecord/lib/arel/nodes/insert_statement.rb b/activerecord/lib/arel/nodes/insert_statement.rb
index 72793bc1ad..206d05e74f 100644
--- a/activerecord/lib/arel/nodes/insert_statement.rb
+++ b/activerecord/lib/arel/nodes/insert_statement.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class InsertStatement < Arel::Nodes::Node
@@ -12,7 +13,7 @@ module Arel
@select = nil
end
- def initialize_copy other
+ def initialize_copy(other)
super
@columns = @columns.clone
@values = @values.clone if @values
@@ -23,7 +24,7 @@ module Arel
[@relation, @columns, @values, @select].hash
end
- def eql? other
+ def eql?(other)
self.class == other.class &&
self.relation == other.relation &&
self.columns == other.columns &&
diff --git a/activerecord/lib/arel/nodes/join_source.rb b/activerecord/lib/arel/nodes/join_source.rb
index 428ce8183e..9d009e8081 100644
--- a/activerecord/lib/arel/nodes/join_source.rb
+++ b/activerecord/lib/arel/nodes/join_source.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Nodes
###
@@ -7,7 +8,7 @@ module Arel
# http://www.sqlite.org/syntaxdiagrams.html#join-source
class JoinSource < Arel::Nodes::Binary
- def initialize single_source, joinop = []
+ def initialize(single_source, joinop = [])
super
end
diff --git a/activerecord/lib/arel/nodes/matches.rb b/activerecord/lib/arel/nodes/matches.rb
index 3ad3850a8e..607efe86dc 100644
--- a/activerecord/lib/arel/nodes/matches.rb
+++ b/activerecord/lib/arel/nodes/matches.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class Matches < Binary
diff --git a/activerecord/lib/arel/nodes/named_function.rb b/activerecord/lib/arel/nodes/named_function.rb
index 173838a7fd..1d0baf2885 100644
--- a/activerecord/lib/arel/nodes/named_function.rb
+++ b/activerecord/lib/arel/nodes/named_function.rb
@@ -1,10 +1,11 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class NamedFunction < Arel::Nodes::Function
attr_accessor :name
- def initialize name, expr, aliaz = nil
+ def initialize(name, expr, aliaz = nil)
super(expr, aliaz)
@name = name
end
@@ -13,7 +14,7 @@ module Arel
super ^ @name.hash
end
- def eql? other
+ def eql?(other)
super && self.name == other.name
end
alias :== :eql?
diff --git a/activerecord/lib/arel/nodes/node.rb b/activerecord/lib/arel/nodes/node.rb
index d2e6313dda..e2ce0a676d 100644
--- a/activerecord/lib/arel/nodes/node.rb
+++ b/activerecord/lib/arel/nodes/node.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Nodes
###
@@ -27,13 +28,13 @@ module Arel
###
# Factory method to create a Nodes::Grouping node that has an Nodes::Or
# node as a child.
- def or right
+ def or(right)
Nodes::Grouping.new Nodes::Or.new(self, right)
end
###
# Factory method to create an Nodes::And node.
- def and right
+ def and(right)
Nodes::And.new [self, right]
end
@@ -42,14 +43,14 @@ module Arel
# can find a node that has a "relation" member.
#
# Maybe we should just use `Table.engine`? :'(
- def to_sql engine = Table.engine
+ def to_sql(engine = Table.engine)
collector = Arel::Collectors::SQLString.new
collector = engine.connection.visitor.accept self, collector
collector.value
end
# Iterate through AST, nodes will be yielded depth-first
- def each &block
+ def each(&block)
return enum_for(:each) unless block_given?
::Arel::Visitors::DepthFirst.new(block).accept self
diff --git a/activerecord/lib/arel/nodes/node_expression.rb b/activerecord/lib/arel/nodes/node_expression.rb
index c4d4c8f428..e69e3262d5 100644
--- a/activerecord/lib/arel/nodes/node_expression.rb
+++ b/activerecord/lib/arel/nodes/node_expression.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
module Arel
module Nodes
class NodeExpression < Arel::Nodes::Node
diff --git a/activerecord/lib/arel/nodes/outer_join.rb b/activerecord/lib/arel/nodes/outer_join.rb
index c568655fe6..2440be1f03 100644
--- a/activerecord/lib/arel/nodes/outer_join.rb
+++ b/activerecord/lib/arel/nodes/outer_join.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class OuterJoin < Arel::Nodes::Join
diff --git a/activerecord/lib/arel/nodes/over.rb b/activerecord/lib/arel/nodes/over.rb
index 47a34e69ea..57baebe9b3 100644
--- a/activerecord/lib/arel/nodes/over.rb
+++ b/activerecord/lib/arel/nodes/over.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
+
module Arel
module Nodes
-
class Over < Binary
include Arel::AliasPredication
@@ -9,8 +9,7 @@ module Arel
super(left, right)
end
- def operator; 'OVER' end
+ def operator; "OVER" end
end
-
end
-end \ No newline at end of file
+end
diff --git a/activerecord/lib/arel/nodes/regexp.rb b/activerecord/lib/arel/nodes/regexp.rb
index 8a76185ef0..a2da51c135 100644
--- a/activerecord/lib/arel/nodes/regexp.rb
+++ b/activerecord/lib/arel/nodes/regexp.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class Regexp < Binary
diff --git a/activerecord/lib/arel/nodes/right_outer_join.rb b/activerecord/lib/arel/nodes/right_outer_join.rb
index 04ab31ebf0..910eb0fa1f 100644
--- a/activerecord/lib/arel/nodes/right_outer_join.rb
+++ b/activerecord/lib/arel/nodes/right_outer_join.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class RightOuterJoin < Arel::Nodes::Join
diff --git a/activerecord/lib/arel/nodes/select_core.rb b/activerecord/lib/arel/nodes/select_core.rb
index fa1c026107..1686761bd5 100644
--- a/activerecord/lib/arel/nodes/select_core.rb
+++ b/activerecord/lib/arel/nodes/select_core.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class SelectCore < Arel::Nodes::Node
@@ -23,14 +24,14 @@ module Arel
@source.left
end
- def from= value
+ def from=(value)
@source.left = value
end
alias :froms= :from=
alias :froms :from
- def initialize_copy other
+ def initialize_copy(other)
super
@source = @source.clone if @source
@projections = @projections.clone
@@ -47,7 +48,7 @@ module Arel
].hash
end
- def eql? other
+ def eql?(other)
self.class == other.class &&
self.source == other.source &&
self.top == other.top &&
diff --git a/activerecord/lib/arel/nodes/select_statement.rb b/activerecord/lib/arel/nodes/select_statement.rb
index 79176d4be5..d1c42dba3b 100644
--- a/activerecord/lib/arel/nodes/select_statement.rb
+++ b/activerecord/lib/arel/nodes/select_statement.rb
@@ -1,11 +1,12 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class SelectStatement < Arel::Nodes::NodeExpression
attr_reader :cores
attr_accessor :limit, :orders, :lock, :offset, :with
- def initialize cores = [SelectCore.new]
+ def initialize(cores = [SelectCore.new])
super()
@cores = cores
@orders = []
@@ -15,7 +16,7 @@ module Arel
@with = nil
end
- def initialize_copy other
+ def initialize_copy(other)
super
@cores = @cores.map { |x| x.clone }
@orders = @orders.map { |x| x.clone }
@@ -25,7 +26,7 @@ module Arel
[@cores, @orders, @limit, @lock, @offset, @with].hash
end
- def eql? other
+ def eql?(other)
self.class == other.class &&
self.cores == other.cores &&
self.orders == other.orders &&
diff --git a/activerecord/lib/arel/nodes/sql_literal.rb b/activerecord/lib/arel/nodes/sql_literal.rb
index 73575a7d49..1ee496f285 100644
--- a/activerecord/lib/arel/nodes/sql_literal.rb
+++ b/activerecord/lib/arel/nodes/sql_literal.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class SqlLiteral < String
diff --git a/activerecord/lib/arel/nodes/string_join.rb b/activerecord/lib/arel/nodes/string_join.rb
index 21d6845c45..ba3f5f9535 100644
--- a/activerecord/lib/arel/nodes/string_join.rb
+++ b/activerecord/lib/arel/nodes/string_join.rb
@@ -1,8 +1,9 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class StringJoin < Arel::Nodes::Join
- def initialize left, right = nil
+ def initialize(left, right = nil)
super
end
end
diff --git a/activerecord/lib/arel/nodes/table_alias.rb b/activerecord/lib/arel/nodes/table_alias.rb
index 78deb175b6..37ad786d44 100644
--- a/activerecord/lib/arel/nodes/table_alias.rb
+++ b/activerecord/lib/arel/nodes/table_alias.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class TableAlias < Arel::Nodes::Binary
@@ -6,7 +7,7 @@ module Arel
alias :relation :left
alias :table_alias :name
- def [] name
+ def [](name)
Attribute.new(self, name)
end
diff --git a/activerecord/lib/arel/nodes/terminal.rb b/activerecord/lib/arel/nodes/terminal.rb
index 3a1cd7f0e1..7cfd2eba4b 100644
--- a/activerecord/lib/arel/nodes/terminal.rb
+++ b/activerecord/lib/arel/nodes/terminal.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class Distinct < Arel::Nodes::NodeExpression
@@ -6,7 +7,7 @@ module Arel
self.class.hash
end
- def eql? other
+ def eql?(other)
self.class == other.class
end
alias :== :eql?
diff --git a/activerecord/lib/arel/nodes/true.rb b/activerecord/lib/arel/nodes/true.rb
index fdb8ed2095..8de1f7522f 100644
--- a/activerecord/lib/arel/nodes/true.rb
+++ b/activerecord/lib/arel/nodes/true.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class True < Arel::Nodes::NodeExpression
@@ -6,7 +7,7 @@ module Arel
self.class.hash
end
- def eql? other
+ def eql?(other)
self.class == other.class
end
alias :== :eql?
diff --git a/activerecord/lib/arel/nodes/unary.rb b/activerecord/lib/arel/nodes/unary.rb
index e458d87ab3..27dd2c1ddf 100644
--- a/activerecord/lib/arel/nodes/unary.rb
+++ b/activerecord/lib/arel/nodes/unary.rb
@@ -1,11 +1,12 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class Unary < Arel::Nodes::NodeExpression
attr_accessor :expr
alias :value :expr
- def initialize expr
+ def initialize(expr)
super()
@expr = expr
end
@@ -14,7 +15,7 @@ module Arel
@expr.hash
end
- def eql? other
+ def eql?(other)
self.class == other.class &&
self.expr == other.expr
end
diff --git a/activerecord/lib/arel/nodes/unary_operation.rb b/activerecord/lib/arel/nodes/unary_operation.rb
index be4e270e76..a64346d278 100644
--- a/activerecord/lib/arel/nodes/unary_operation.rb
+++ b/activerecord/lib/arel/nodes/unary_operation.rb
@@ -1,18 +1,18 @@
# frozen_string_literal: true
+
module Arel
module Nodes
-
class UnaryOperation < Unary
attr_reader :operator
- def initialize operator, operand
+ def initialize(operator, operand)
super(operand)
@operator = operator
end
end
class BitwiseNot < UnaryOperation
- def initialize operand
+ def initialize(operand)
super(:~, operand)
end
end
diff --git a/activerecord/lib/arel/nodes/unqualified_column.rb b/activerecord/lib/arel/nodes/unqualified_column.rb
index f9017238c8..216a35bc30 100644
--- a/activerecord/lib/arel/nodes/unqualified_column.rb
+++ b/activerecord/lib/arel/nodes/unqualified_column.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class UnqualifiedColumn < Arel::Nodes::Unary
diff --git a/activerecord/lib/arel/nodes/update_statement.rb b/activerecord/lib/arel/nodes/update_statement.rb
index 286f0bd3ce..5cce1e3615 100644
--- a/activerecord/lib/arel/nodes/update_statement.rb
+++ b/activerecord/lib/arel/nodes/update_statement.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class UpdateStatement < Arel::Nodes::Node
@@ -14,7 +15,7 @@ module Arel
@key = nil
end
- def initialize_copy other
+ def initialize_copy(other)
super
@wheres = @wheres.clone
@values = @values.clone
@@ -24,7 +25,7 @@ module Arel
[@relation, @wheres, @values, @orders, @limit, @key].hash
end
- def eql? other
+ def eql?(other)
self.class == other.class &&
self.relation == other.relation &&
self.wheres == other.wheres &&
diff --git a/activerecord/lib/arel/nodes/values.rb b/activerecord/lib/arel/nodes/values.rb
index b32d5063a2..8554440be6 100644
--- a/activerecord/lib/arel/nodes/values.rb
+++ b/activerecord/lib/arel/nodes/values.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class Values < Arel::Nodes::Binary
@@ -7,7 +8,7 @@ module Arel
alias :columns :right
alias :columns= :right=
- def initialize exprs, columns = []
+ def initialize(exprs, columns = [])
super
end
end
diff --git a/activerecord/lib/arel/nodes/values_list.rb b/activerecord/lib/arel/nodes/values_list.rb
index 89cea1790d..e68518d684 100644
--- a/activerecord/lib/arel/nodes/values_list.rb
+++ b/activerecord/lib/arel/nodes/values_list.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class ValuesList < Node
@@ -13,7 +14,7 @@ module Arel
@rows.hash
end
- def eql? other
+ def eql?(other)
self.class == other.class &&
self.rows == other.rows
end
diff --git a/activerecord/lib/arel/nodes/window.rb b/activerecord/lib/arel/nodes/window.rb
index 23a005daba..1f14630c81 100644
--- a/activerecord/lib/arel/nodes/window.rb
+++ b/activerecord/lib/arel/nodes/window.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class Window < Arel::Nodes::Node
@@ -10,7 +11,7 @@ module Arel
@framing = nil
end
- def order *expr
+ def order(*expr)
# FIXME: We SHOULD NOT be converting these to SqlLiteral automatically
@orders.concat expr.map { |x|
String === x || Symbol === x ? Nodes::SqlLiteral.new(x.to_s) : x
@@ -18,7 +19,7 @@ module Arel
self
end
- def partition *expr
+ def partition(*expr)
# FIXME: We SHOULD NOT be converting these to SqlLiteral automatically
@partitions.concat expr.map { |x|
String === x || Symbol === x ? Nodes::SqlLiteral.new(x.to_s) : x
@@ -46,7 +47,7 @@ module Arel
end
end
- def initialize_copy other
+ def initialize_copy(other)
super
@orders = @orders.map { |x| x.clone }
end
@@ -55,7 +56,7 @@ module Arel
[@orders, @framing].hash
end
- def eql? other
+ def eql?(other)
self.class == other.class &&
self.orders == other.orders &&
self.framing == other.framing &&
@@ -67,12 +68,12 @@ module Arel
class NamedWindow < Window
attr_accessor :name
- def initialize name
+ def initialize(name)
super()
@name = name
end
- def initialize_copy other
+ def initialize_copy(other)
super
@name = other.name.clone
end
@@ -81,7 +82,7 @@ module Arel
super ^ @name.hash
end
- def eql? other
+ def eql?(other)
super && self.name == other.name
end
alias :== :eql?
@@ -104,7 +105,7 @@ module Arel
self.class.hash
end
- def eql? other
+ def eql?(other)
self.class == other.class
end
alias :== :eql?
diff --git a/activerecord/lib/arel/nodes/with.rb b/activerecord/lib/arel/nodes/with.rb
index def7840ea3..a0fbf87e8e 100644
--- a/activerecord/lib/arel/nodes/with.rb
+++ b/activerecord/lib/arel/nodes/with.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Nodes
class With < Arel::Nodes::Unary
@@ -8,4 +9,3 @@ module Arel
class WithRecursive < With; end
end
end
-
diff --git a/activerecord/lib/arel/order_predications.rb b/activerecord/lib/arel/order_predications.rb
index d84be82bb6..a0f15cb4d6 100644
--- a/activerecord/lib/arel/order_predications.rb
+++ b/activerecord/lib/arel/order_predications.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
+
module Arel
module OrderPredications
-
def asc
Nodes::Ascending.new self
end
@@ -9,6 +9,5 @@ module Arel
def desc
Nodes::Descending.new self
end
-
end
end
diff --git a/activerecord/lib/arel/predications.rb b/activerecord/lib/arel/predications.rb
index 799c7c67b8..1e701586a4 100644
--- a/activerecord/lib/arel/predications.rb
+++ b/activerecord/lib/arel/predications.rb
@@ -1,31 +1,32 @@
# frozen_string_literal: true
+
module Arel
module Predications
- def not_eq other
+ def not_eq(other)
Nodes::NotEqual.new self, quoted_node(other)
end
- def not_eq_any others
+ def not_eq_any(others)
grouping_any :not_eq, others
end
- def not_eq_all others
+ def not_eq_all(others)
grouping_all :not_eq, others
end
- def eq other
+ def eq(other)
Nodes::Equality.new self, quoted_node(other)
end
- def eq_any others
+ def eq_any(others)
grouping_any :eq, others
end
- def eq_all others
+ def eq_all(others)
grouping_all :eq, quoted_array(others)
end
- def between other
+ def between(other)
if equals_quoted?(other.begin, -Float::INFINITY)
if equals_quoted?(other.end, Float::INFINITY)
not_in([])
@@ -45,7 +46,7 @@ module Arel
end
end
- def in other
+ def in(other)
case other
when Arel::SelectManager
Arel::Nodes::In.new(self, other.ast)
@@ -63,15 +64,15 @@ Passing a range to `#in` is deprecated. Call `#between`, instead.
end
end
- def in_any others
+ def in_any(others)
grouping_any :in, others
end
- def in_all others
+ def in_all(others)
grouping_all :in, others
end
- def not_between other
+ def not_between(other)
if equals_quoted?(other.begin, -Float::INFINITY)
if equals_quoted?(other.end, Float::INFINITY)
self.in([])
@@ -93,7 +94,7 @@ Passing a range to `#in` is deprecated. Call `#between`, instead.
end
end
- def not_in other
+ def not_in(other)
case other
when Arel::SelectManager
Arel::Nodes::NotIn.new(self, other.ast)
@@ -111,130 +112,130 @@ Passing a range to `#not_in` is deprecated. Call `#not_between`, instead.
end
end
- def not_in_any others
+ def not_in_any(others)
grouping_any :not_in, others
end
- def not_in_all others
+ def not_in_all(others)
grouping_all :not_in, others
end
- def matches other, escape = nil, case_sensitive = false
+ def matches(other, escape = nil, case_sensitive = false)
Nodes::Matches.new self, quoted_node(other), escape, case_sensitive
end
- def matches_regexp other, case_sensitive = true
+ def matches_regexp(other, case_sensitive = true)
Nodes::Regexp.new self, quoted_node(other), case_sensitive
end
- def matches_any others, escape = nil, case_sensitive = false
+ def matches_any(others, escape = nil, case_sensitive = false)
grouping_any :matches, others, escape, case_sensitive
end
- def matches_all others, escape = nil, case_sensitive = false
+ def matches_all(others, escape = nil, case_sensitive = false)
grouping_all :matches, others, escape, case_sensitive
end
- def does_not_match other, escape = nil, case_sensitive = false
+ def does_not_match(other, escape = nil, case_sensitive = false)
Nodes::DoesNotMatch.new self, quoted_node(other), escape, case_sensitive
end
- def does_not_match_regexp other, case_sensitive = true
+ def does_not_match_regexp(other, case_sensitive = true)
Nodes::NotRegexp.new self, quoted_node(other), case_sensitive
end
- def does_not_match_any others, escape = nil
+ def does_not_match_any(others, escape = nil)
grouping_any :does_not_match, others, escape
end
- def does_not_match_all others, escape = nil
+ def does_not_match_all(others, escape = nil)
grouping_all :does_not_match, others, escape
end
- def gteq right
+ def gteq(right)
Nodes::GreaterThanOrEqual.new self, quoted_node(right)
end
- def gteq_any others
+ def gteq_any(others)
grouping_any :gteq, others
end
- def gteq_all others
+ def gteq_all(others)
grouping_all :gteq, others
end
- def gt right
+ def gt(right)
Nodes::GreaterThan.new self, quoted_node(right)
end
- def gt_any others
+ def gt_any(others)
grouping_any :gt, others
end
- def gt_all others
+ def gt_all(others)
grouping_all :gt, others
end
- def lt right
+ def lt(right)
Nodes::LessThan.new self, quoted_node(right)
end
- def lt_any others
+ def lt_any(others)
grouping_any :lt, others
end
- def lt_all others
+ def lt_all(others)
grouping_all :lt, others
end
- def lteq right
+ def lteq(right)
Nodes::LessThanOrEqual.new self, quoted_node(right)
end
- def lteq_any others
+ def lteq_any(others)
grouping_any :lteq, others
end
- def lteq_all others
+ def lteq_all(others)
grouping_all :lteq, others
end
- def when right
+ def when(right)
Nodes::Case.new(self).when quoted_node(right)
end
- def concat other
+ def concat(other)
Nodes::Concat.new self, other
end
private
- def grouping_any method_id, others, *extras
- nodes = others.map {|expr| send(method_id, expr, *extras)}
- Nodes::Grouping.new nodes.inject { |memo,node|
- Nodes::Or.new(memo, node)
- }
- end
+ def grouping_any(method_id, others, *extras)
+ nodes = others.map { |expr| send(method_id, expr, *extras) }
+ Nodes::Grouping.new nodes.inject { |memo, node|
+ Nodes::Or.new(memo, node)
+ }
+ end
- def grouping_all method_id, others, *extras
- nodes = others.map {|expr| send(method_id, expr, *extras)}
- Nodes::Grouping.new Nodes::And.new(nodes)
- end
+ def grouping_all(method_id, others, *extras)
+ nodes = others.map { |expr| send(method_id, expr, *extras) }
+ Nodes::Grouping.new Nodes::And.new(nodes)
+ end
- def quoted_node(other)
- Nodes.build_quoted(other, self)
- end
+ def quoted_node(other)
+ Nodes.build_quoted(other, self)
+ end
- def quoted_array(others)
- others.map { |v| quoted_node(v) }
- end
+ def quoted_array(others)
+ others.map { |v| quoted_node(v) }
+ end
- def equals_quoted?(maybe_quoted, value)
- if maybe_quoted.is_a?(Nodes::Quoted)
- maybe_quoted.val == value
- else
- maybe_quoted == value
+ def equals_quoted?(maybe_quoted, value)
+ if maybe_quoted.is_a?(Nodes::Quoted)
+ maybe_quoted.val == value
+ else
+ maybe_quoted == value
+ end
end
- end
end
end
diff --git a/activerecord/lib/arel/select_manager.rb b/activerecord/lib/arel/select_manager.rb
index 0f3b0dc6a0..dc61447d01 100644
--- a/activerecord/lib/arel/select_manager.rb
+++ b/activerecord/lib/arel/select_manager.rb
@@ -1,18 +1,19 @@
# frozen_string_literal: true
+
module Arel
class SelectManager < Arel::TreeManager
include Arel::Crud
STRING_OR_SYMBOL_CLASS = [Symbol, String]
- def initialize table = nil
+ def initialize(table = nil)
super()
- @ast = Nodes::SelectStatement.new
- @ctx = @ast.cores.last
+ @ast = Nodes::SelectStatement.new
+ @ctx = @ast.cores.last
from table
end
- def initialize_copy other
+ def initialize_copy(other)
super
@ctx = @ast.cores.last
end
@@ -30,7 +31,7 @@ module Arel
@ast.offset && @ast.offset.expr
end
- def skip amount
+ def skip(amount)
if amount
@ast.offset = Nodes::Offset.new(amount)
else
@@ -46,14 +47,14 @@ module Arel
Arel::Nodes::Exists.new @ast
end
- def as other
+ def as(other)
create_table_alias grouping(@ast), Nodes::SqlLiteral.new(other)
end
- def lock locking = Arel.sql('FOR UPDATE')
+ def lock(locking = Arel.sql("FOR UPDATE"))
case locking
when true
- locking = Arel.sql('FOR UPDATE')
+ locking = Arel.sql("FOR UPDATE")
when Arel::Nodes::SqlLiteral
when String
locking = Arel.sql locking
@@ -67,12 +68,12 @@ module Arel
@ast.lock
end
- def on *exprs
+ def on(*exprs)
@ctx.source.right.last.right = Nodes::On.new(collapse(exprs))
self
end
- def group *columns
+ def group(*columns)
columns.each do |column|
# FIXME: backwards compat
column = Nodes::SqlLiteral.new(column) if String === column
@@ -83,7 +84,7 @@ module Arel
self
end
- def from table
+ def from(table)
table = Nodes::SqlLiteral.new(table) if String === table
case table
@@ -100,7 +101,7 @@ module Arel
@ast.cores.map { |x| x.from }.compact
end
- def join relation, klass = Nodes::InnerJoin
+ def join(relation, klass = Nodes::InnerJoin)
return self unless relation
case relation
@@ -113,22 +114,22 @@ module Arel
self
end
- def outer_join relation
+ def outer_join(relation)
join(relation, Nodes::OuterJoin)
end
- def having expr
+ def having(expr)
@ctx.havings << expr
self
end
- def window name
+ def window(name)
window = Nodes::NamedWindow.new(name)
@ctx.windows.push window
window
end
- def project *projections
+ def project(*projections)
# FIXME: converting these to SQLLiterals is probably not good, but
# rails tests require it.
@ctx.projections.concat projections.map { |x|
@@ -141,7 +142,7 @@ module Arel
@ctx.projections
end
- def projections= projections
+ def projections=(projections)
@ctx.projections = projections
end
@@ -163,7 +164,7 @@ module Arel
self
end
- def order *expr
+ def order(*expr)
# FIXME: We SHOULD NOT be converting these to SqlLiteral automatically
@ast.orders.concat expr.map { |x|
STRING_OR_SYMBOL_CLASS.include?(x.class) ? Nodes::SqlLiteral.new(x.to_s) : x
@@ -175,14 +176,14 @@ module Arel
@ast.orders
end
- def where_sql engine = Table.engine
+ def where_sql(engine = Table.engine)
return if @ctx.wheres.empty?
viz = Visitors::WhereSql.new(engine.connection.visitor, engine.connection)
Nodes::SqlLiteral.new viz.accept(@ctx, Collectors::SQLString.new).value
end
- def union operation, other = nil
+ def union(operation, other = nil)
if other
node_class = Nodes.const_get("Union#{operation.to_s.capitalize}")
else
@@ -193,21 +194,21 @@ module Arel
node_class.new self.ast, other.ast
end
- def intersect other
+ def intersect(other)
Nodes::Intersect.new ast, other.ast
end
- def except other
+ def except(other)
Nodes::Except.new ast, other.ast
end
alias :minus :except
- def lateral table_name = nil
+ def lateral(table_name = nil)
base = table_name.nil? ? ast : as(table_name)
Nodes::Lateral.new(base)
end
- def with *subqueries
+ def with(*subqueries)
if subqueries.first.is_a? Symbol
node_class = Nodes.const_get("With#{subqueries.shift.to_s.capitalize}")
else
@@ -218,7 +219,7 @@ module Arel
self
end
- def take limit
+ def take(limit)
if limit
@ast.limit = Nodes::Limit.new(limit)
@ctx.top = Nodes::Top.new(limit)
@@ -240,7 +241,7 @@ module Arel
class Row < Struct.new(:data) # :nodoc:
def id
- data['id']
+ data["id"]
end
def method_missing(name, *args)
@@ -251,22 +252,22 @@ module Arel
end
private
- def collapse exprs, existing = nil
- exprs = exprs.unshift(existing.expr) if existing
- exprs = exprs.compact.map { |expr|
- if String === expr
- # FIXME: Don't do this automatically
- Arel.sql(expr)
+ def collapse(exprs, existing = nil)
+ exprs = exprs.unshift(existing.expr) if existing
+ exprs = exprs.compact.map { |expr|
+ if String === expr
+ # FIXME: Don't do this automatically
+ Arel.sql(expr)
+ else
+ expr
+ end
+ }
+
+ if exprs.length == 1
+ exprs.first
else
- expr
+ create_and exprs
end
- }
-
- if exprs.length == 1
- exprs.first
- else
- create_and exprs
end
- end
end
end
diff --git a/activerecord/lib/arel/table.rb b/activerecord/lib/arel/table.rb
index b3f2d79e5f..2df2c4c514 100644
--- a/activerecord/lib/arel/table.rb
+++ b/activerecord/lib/arel/table.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
class Table
include Arel::Crud
@@ -13,7 +14,7 @@ module Arel
alias :table_name :name
def initialize(name, as: nil, type_caster: nil)
- @name = name.to_s
+ @name = name.to_s
@type_caster = type_caster
# Sometime AR sends an :as parameter to table, to let the table know
@@ -25,7 +26,7 @@ module Arel
@table_alias = as
end
- def alias name = "#{self.name}_2"
+ def alias(name = "#{self.name}_2")
Nodes::TableAlias.new(self, name)
end
@@ -33,7 +34,7 @@ module Arel
SelectManager.new(self)
end
- def join relation, klass = Nodes::InnerJoin
+ def join(relation, klass = Nodes::InnerJoin)
return from unless relation
case relation
@@ -45,39 +46,39 @@ module Arel
from.join(relation, klass)
end
- def outer_join relation
+ def outer_join(relation)
join(relation, Nodes::OuterJoin)
end
- def group *columns
+ def group(*columns)
from.group(*columns)
end
- def order *expr
+ def order(*expr)
from.order(*expr)
end
- def where condition
+ def where(condition)
from.where condition
end
- def project *things
+ def project(*things)
from.project(*things)
end
- def take amount
+ def take(amount)
from.take amount
end
- def skip amount
+ def skip(amount)
from.skip amount
end
- def having expr
+ def having(expr)
from.having expr
end
- def [] name
+ def [](name)
::Arel::Attribute.new self, name
end
@@ -88,7 +89,7 @@ module Arel
@name.hash
end
- def eql? other
+ def eql?(other)
self.class == other.class &&
self.name == other.name &&
self.table_alias == other.table_alias
@@ -105,6 +106,6 @@ module Arel
protected
- attr_reader :type_caster
+ attr_reader :type_caster
end
end
diff --git a/activerecord/lib/arel/tree_manager.rb b/activerecord/lib/arel/tree_manager.rb
index b237bf368d..f6ec1415fa 100644
--- a/activerecord/lib/arel/tree_manager.rb
+++ b/activerecord/lib/arel/tree_manager.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
class TreeManager
include Arel::FactoryMethods
@@ -15,18 +16,18 @@ module Arel
collector.value
end
- def to_sql engine = Table.engine
+ def to_sql(engine = Table.engine)
collector = Arel::Collectors::SQLString.new
collector = engine.connection.visitor.accept @ast, collector
collector.value
end
- def initialize_copy other
+ def initialize_copy(other)
super
@ast = @ast.clone
end
- def where expr
+ def where(expr)
if Arel::TreeManager === expr
expr = expr.ast
end
diff --git a/activerecord/lib/arel/update_manager.rb b/activerecord/lib/arel/update_manager.rb
index eac414eafb..6e36e82cf9 100644
--- a/activerecord/lib/arel/update_manager.rb
+++ b/activerecord/lib/arel/update_manager.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
class UpdateManager < Arel::TreeManager
def initialize
@@ -7,12 +8,12 @@ module Arel
@ctx = @ast
end
- def take limit
+ def take(limit)
@ast.limit = Nodes::Limit.new(Nodes.build_quoted(limit)) if limit
self
end
- def key= key
+ def key=(key)
@ast.key = Nodes.build_quoted(key)
end
@@ -20,32 +21,32 @@ module Arel
@ast.key
end
- def order *expr
+ def order(*expr)
@ast.orders = expr
self
end
###
# UPDATE +table+
- def table table
+ def table(table)
@ast.relation = table
self
end
- def wheres= exprs
+ def wheres=(exprs)
@ast.wheres = exprs
end
- def where expr
+ def where(expr)
@ast.wheres << expr
self
end
- def set values
+ def set(values)
if String === values
@ast.values = [values]
else
- @ast.values = values.map { |column,value|
+ @ast.values = values.map { |column, value|
Nodes::Assignment.new(
Nodes::UnqualifiedColumn.new(column),
value
diff --git a/activerecord/lib/arel/visitors.rb b/activerecord/lib/arel/visitors.rb
index a3404cf992..fb44721117 100644
--- a/activerecord/lib/arel/visitors.rb
+++ b/activerecord/lib/arel/visitors.rb
@@ -1,17 +1,18 @@
# frozen_string_literal: true
-require 'arel/visitors/visitor'
-require 'arel/visitors/depth_first'
-require 'arel/visitors/to_sql'
-require 'arel/visitors/sqlite'
-require 'arel/visitors/postgresql'
-require 'arel/visitors/mysql'
-require 'arel/visitors/mssql'
-require 'arel/visitors/oracle'
-require 'arel/visitors/oracle12'
-require 'arel/visitors/where_sql'
-require 'arel/visitors/dot'
-require 'arel/visitors/ibm_db'
-require 'arel/visitors/informix'
+
+require "arel/visitors/visitor"
+require "arel/visitors/depth_first"
+require "arel/visitors/to_sql"
+require "arel/visitors/sqlite"
+require "arel/visitors/postgresql"
+require "arel/visitors/mysql"
+require "arel/visitors/mssql"
+require "arel/visitors/oracle"
+require "arel/visitors/oracle12"
+require "arel/visitors/where_sql"
+require "arel/visitors/dot"
+require "arel/visitors/ibm_db"
+require "arel/visitors/informix"
module Arel
module Visitors
diff --git a/activerecord/lib/arel/visitors/depth_first.rb b/activerecord/lib/arel/visitors/depth_first.rb
index b3bbc9bd40..fb32ef59ad 100644
--- a/activerecord/lib/arel/visitors/depth_first.rb
+++ b/activerecord/lib/arel/visitors/depth_first.rb
@@ -1,199 +1,200 @@
# frozen_string_literal: true
+
module Arel
module Visitors
class DepthFirst < Arel::Visitors::Visitor
- def initialize block = nil
+ def initialize(block = nil)
@block = block || Proc.new
super()
end
private
- def visit o
- super
- @block.call o
- end
-
- def unary o
- visit o.expr
- end
- alias :visit_Arel_Nodes_Else :unary
- alias :visit_Arel_Nodes_Group :unary
- alias :visit_Arel_Nodes_Cube :unary
- alias :visit_Arel_Nodes_RollUp :unary
- alias :visit_Arel_Nodes_GroupingSet :unary
- alias :visit_Arel_Nodes_GroupingElement :unary
- alias :visit_Arel_Nodes_Grouping :unary
- alias :visit_Arel_Nodes_Having :unary
- alias :visit_Arel_Nodes_Lateral :unary
- alias :visit_Arel_Nodes_Limit :unary
- alias :visit_Arel_Nodes_Not :unary
- alias :visit_Arel_Nodes_Offset :unary
- alias :visit_Arel_Nodes_On :unary
- alias :visit_Arel_Nodes_Ordering :unary
- alias :visit_Arel_Nodes_Ascending :unary
- alias :visit_Arel_Nodes_Descending :unary
- alias :visit_Arel_Nodes_Top :unary
- alias :visit_Arel_Nodes_UnqualifiedColumn :unary
-
- def function o
- visit o.expressions
- visit o.alias
- visit o.distinct
- end
- alias :visit_Arel_Nodes_Avg :function
- alias :visit_Arel_Nodes_Exists :function
- alias :visit_Arel_Nodes_Max :function
- alias :visit_Arel_Nodes_Min :function
- alias :visit_Arel_Nodes_Sum :function
-
- def visit_Arel_Nodes_NamedFunction o
- visit o.name
- visit o.expressions
- visit o.distinct
- visit o.alias
- end
-
- def visit_Arel_Nodes_Count o
- visit o.expressions
- visit o.alias
- visit o.distinct
- end
-
- def visit_Arel_Nodes_Case o
- visit o.case
- visit o.conditions
- visit o.default
- end
-
- def nary o
- o.children.each { |child| visit child}
- end
- alias :visit_Arel_Nodes_And :nary
-
- def binary o
- visit o.left
- visit o.right
- end
- alias :visit_Arel_Nodes_As :binary
- alias :visit_Arel_Nodes_Assignment :binary
- alias :visit_Arel_Nodes_Between :binary
- alias :visit_Arel_Nodes_Concat :binary
- alias :visit_Arel_Nodes_DeleteStatement :binary
- alias :visit_Arel_Nodes_DoesNotMatch :binary
- alias :visit_Arel_Nodes_Equality :binary
- alias :visit_Arel_Nodes_FullOuterJoin :binary
- alias :visit_Arel_Nodes_GreaterThan :binary
- alias :visit_Arel_Nodes_GreaterThanOrEqual :binary
- alias :visit_Arel_Nodes_In :binary
- alias :visit_Arel_Nodes_InfixOperation :binary
- alias :visit_Arel_Nodes_JoinSource :binary
- alias :visit_Arel_Nodes_InnerJoin :binary
- alias :visit_Arel_Nodes_LessThan :binary
- alias :visit_Arel_Nodes_LessThanOrEqual :binary
- alias :visit_Arel_Nodes_Matches :binary
- alias :visit_Arel_Nodes_NotEqual :binary
- alias :visit_Arel_Nodes_NotIn :binary
- alias :visit_Arel_Nodes_NotRegexp :binary
- alias :visit_Arel_Nodes_Or :binary
- alias :visit_Arel_Nodes_OuterJoin :binary
- 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
- visit o.left
- end
-
- def visit_Arel_Attribute o
- visit o.relation
- visit o.name
- end
- alias :visit_Arel_Attributes_Integer :visit_Arel_Attribute
- alias :visit_Arel_Attributes_Float :visit_Arel_Attribute
- alias :visit_Arel_Attributes_String :visit_Arel_Attribute
- alias :visit_Arel_Attributes_Time :visit_Arel_Attribute
- alias :visit_Arel_Attributes_Boolean :visit_Arel_Attribute
- alias :visit_Arel_Attributes_Attribute :visit_Arel_Attribute
- alias :visit_Arel_Attributes_Decimal :visit_Arel_Attribute
-
- def visit_Arel_Table o
- visit o.name
- end
-
- def terminal o
- end
- alias :visit_ActiveSupport_Multibyte_Chars :terminal
- alias :visit_ActiveSupport_StringInquirer :terminal
- alias :visit_Arel_Nodes_Lock :terminal
- alias :visit_Arel_Nodes_Node :terminal
- alias :visit_Arel_Nodes_SqlLiteral :terminal
- alias :visit_Arel_Nodes_BindParam :terminal
- alias :visit_Arel_Nodes_Window :terminal
- alias :visit_Arel_Nodes_True :terminal
- alias :visit_Arel_Nodes_False :terminal
- alias :visit_BigDecimal :terminal
- alias :visit_Bignum :terminal
- alias :visit_Class :terminal
- alias :visit_Date :terminal
- alias :visit_DateTime :terminal
- alias :visit_FalseClass :terminal
- alias :visit_Fixnum :terminal
- alias :visit_Float :terminal
- alias :visit_Integer :terminal
- alias :visit_NilClass :terminal
- alias :visit_String :terminal
- alias :visit_Symbol :terminal
- alias :visit_Time :terminal
- alias :visit_TrueClass :terminal
-
- def visit_Arel_Nodes_InsertStatement o
- visit o.relation
- visit o.columns
- visit o.values
- end
-
- def visit_Arel_Nodes_SelectCore o
- visit o.projections
- visit o.source
- visit o.wheres
- visit o.groups
- visit o.windows
- visit o.havings
- end
-
- def visit_Arel_Nodes_SelectStatement o
- visit o.cores
- visit o.orders
- visit o.limit
- visit o.lock
- visit o.offset
- end
-
- def visit_Arel_Nodes_UpdateStatement o
- visit o.relation
- visit o.values
- visit o.wheres
- visit o.orders
- visit o.limit
- end
-
- def visit_Array o
- o.each { |i| visit i }
- end
- alias :visit_Set :visit_Array
-
- def visit_Hash o
- o.each { |k,v| visit(k); visit(v) }
- end
-
- DISPATCH = dispatch_cache
-
- def get_dispatch_cache
- DISPATCH
- end
+ def visit(o)
+ super
+ @block.call o
+ end
+
+ def unary(o)
+ visit o.expr
+ end
+ alias :visit_Arel_Nodes_Else :unary
+ alias :visit_Arel_Nodes_Group :unary
+ alias :visit_Arel_Nodes_Cube :unary
+ alias :visit_Arel_Nodes_RollUp :unary
+ alias :visit_Arel_Nodes_GroupingSet :unary
+ alias :visit_Arel_Nodes_GroupingElement :unary
+ alias :visit_Arel_Nodes_Grouping :unary
+ alias :visit_Arel_Nodes_Having :unary
+ alias :visit_Arel_Nodes_Lateral :unary
+ alias :visit_Arel_Nodes_Limit :unary
+ alias :visit_Arel_Nodes_Not :unary
+ alias :visit_Arel_Nodes_Offset :unary
+ alias :visit_Arel_Nodes_On :unary
+ alias :visit_Arel_Nodes_Ordering :unary
+ alias :visit_Arel_Nodes_Ascending :unary
+ alias :visit_Arel_Nodes_Descending :unary
+ alias :visit_Arel_Nodes_Top :unary
+ alias :visit_Arel_Nodes_UnqualifiedColumn :unary
+
+ def function(o)
+ visit o.expressions
+ visit o.alias
+ visit o.distinct
+ end
+ alias :visit_Arel_Nodes_Avg :function
+ alias :visit_Arel_Nodes_Exists :function
+ alias :visit_Arel_Nodes_Max :function
+ alias :visit_Arel_Nodes_Min :function
+ alias :visit_Arel_Nodes_Sum :function
+
+ def visit_Arel_Nodes_NamedFunction(o)
+ visit o.name
+ visit o.expressions
+ visit o.distinct
+ visit o.alias
+ end
+
+ def visit_Arel_Nodes_Count(o)
+ visit o.expressions
+ visit o.alias
+ visit o.distinct
+ end
+
+ def visit_Arel_Nodes_Case(o)
+ visit o.case
+ visit o.conditions
+ visit o.default
+ end
+
+ def nary(o)
+ o.children.each { |child| visit child }
+ end
+ alias :visit_Arel_Nodes_And :nary
+
+ def binary(o)
+ visit o.left
+ visit o.right
+ end
+ alias :visit_Arel_Nodes_As :binary
+ alias :visit_Arel_Nodes_Assignment :binary
+ alias :visit_Arel_Nodes_Between :binary
+ alias :visit_Arel_Nodes_Concat :binary
+ alias :visit_Arel_Nodes_DeleteStatement :binary
+ alias :visit_Arel_Nodes_DoesNotMatch :binary
+ alias :visit_Arel_Nodes_Equality :binary
+ alias :visit_Arel_Nodes_FullOuterJoin :binary
+ alias :visit_Arel_Nodes_GreaterThan :binary
+ alias :visit_Arel_Nodes_GreaterThanOrEqual :binary
+ alias :visit_Arel_Nodes_In :binary
+ alias :visit_Arel_Nodes_InfixOperation :binary
+ alias :visit_Arel_Nodes_JoinSource :binary
+ alias :visit_Arel_Nodes_InnerJoin :binary
+ alias :visit_Arel_Nodes_LessThan :binary
+ alias :visit_Arel_Nodes_LessThanOrEqual :binary
+ alias :visit_Arel_Nodes_Matches :binary
+ alias :visit_Arel_Nodes_NotEqual :binary
+ alias :visit_Arel_Nodes_NotIn :binary
+ alias :visit_Arel_Nodes_NotRegexp :binary
+ alias :visit_Arel_Nodes_Or :binary
+ alias :visit_Arel_Nodes_OuterJoin :binary
+ 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)
+ visit o.left
+ end
+
+ def visit_Arel_Attribute(o)
+ visit o.relation
+ visit o.name
+ end
+ alias :visit_Arel_Attributes_Integer :visit_Arel_Attribute
+ alias :visit_Arel_Attributes_Float :visit_Arel_Attribute
+ alias :visit_Arel_Attributes_String :visit_Arel_Attribute
+ alias :visit_Arel_Attributes_Time :visit_Arel_Attribute
+ alias :visit_Arel_Attributes_Boolean :visit_Arel_Attribute
+ alias :visit_Arel_Attributes_Attribute :visit_Arel_Attribute
+ alias :visit_Arel_Attributes_Decimal :visit_Arel_Attribute
+
+ def visit_Arel_Table(o)
+ visit o.name
+ end
+
+ def terminal(o)
+ end
+ alias :visit_ActiveSupport_Multibyte_Chars :terminal
+ alias :visit_ActiveSupport_StringInquirer :terminal
+ alias :visit_Arel_Nodes_Lock :terminal
+ alias :visit_Arel_Nodes_Node :terminal
+ alias :visit_Arel_Nodes_SqlLiteral :terminal
+ alias :visit_Arel_Nodes_BindParam :terminal
+ alias :visit_Arel_Nodes_Window :terminal
+ alias :visit_Arel_Nodes_True :terminal
+ alias :visit_Arel_Nodes_False :terminal
+ alias :visit_BigDecimal :terminal
+ alias :visit_Bignum :terminal
+ alias :visit_Class :terminal
+ alias :visit_Date :terminal
+ alias :visit_DateTime :terminal
+ alias :visit_FalseClass :terminal
+ alias :visit_Fixnum :terminal
+ alias :visit_Float :terminal
+ alias :visit_Integer :terminal
+ alias :visit_NilClass :terminal
+ alias :visit_String :terminal
+ alias :visit_Symbol :terminal
+ alias :visit_Time :terminal
+ alias :visit_TrueClass :terminal
+
+ def visit_Arel_Nodes_InsertStatement(o)
+ visit o.relation
+ visit o.columns
+ visit o.values
+ end
+
+ def visit_Arel_Nodes_SelectCore(o)
+ visit o.projections
+ visit o.source
+ visit o.wheres
+ visit o.groups
+ visit o.windows
+ visit o.havings
+ end
+
+ def visit_Arel_Nodes_SelectStatement(o)
+ visit o.cores
+ visit o.orders
+ visit o.limit
+ visit o.lock
+ visit o.offset
+ end
+
+ def visit_Arel_Nodes_UpdateStatement(o)
+ visit o.relation
+ visit o.values
+ visit o.wheres
+ visit o.orders
+ visit o.limit
+ end
+
+ def visit_Array(o)
+ o.each { |i| visit i }
+ end
+ alias :visit_Set :visit_Array
+
+ def visit_Hash(o)
+ o.each { |k, v| visit(k); visit(v) }
+ end
+
+ DISPATCH = dispatch_cache
+
+ def get_dispatch_cache
+ DISPATCH
+ end
end
end
end
diff --git a/activerecord/lib/arel/visitors/dot.rb b/activerecord/lib/arel/visitors/dot.rb
index 9aa22d33f6..2b285ac775 100644
--- a/activerecord/lib/arel/visitors/dot.rb
+++ b/activerecord/lib/arel/visitors/dot.rb
@@ -1,11 +1,12 @@
# frozen_string_literal: true
+
module Arel
module Visitors
class Dot < Arel::Visitors::Visitor
class Node # :nodoc:
attr_accessor :name, :id, :fields
- def initialize name, id, fields = []
+ def initialize(name, id, fields = [])
@name = name
@id = id
@fields = fields
@@ -24,268 +25,268 @@ module Arel
@seen = {}
end
- def accept object, collector
+ def accept(object, collector)
visit object
collector << to_dot
end
private
- def visit_Arel_Nodes_Ordering o
- visit_edge o, "expr"
- end
-
- def visit_Arel_Nodes_TableAlias o
- visit_edge o, "name"
- visit_edge o, "relation"
- end
+ def visit_Arel_Nodes_Ordering(o)
+ visit_edge o, "expr"
+ end
- def visit_Arel_Nodes_Count o
- visit_edge o, "expressions"
- visit_edge o, "distinct"
- end
+ def visit_Arel_Nodes_TableAlias(o)
+ visit_edge o, "name"
+ visit_edge o, "relation"
+ end
- def visit_Arel_Nodes_Values o
- visit_edge o, "expressions"
- end
+ def visit_Arel_Nodes_Count(o)
+ visit_edge o, "expressions"
+ visit_edge o, "distinct"
+ end
- def visit_Arel_Nodes_StringJoin o
- visit_edge o, "left"
- end
+ def visit_Arel_Nodes_Values(o)
+ visit_edge o, "expressions"
+ end
- def visit_Arel_Nodes_InnerJoin o
- visit_edge o, "left"
- visit_edge o, "right"
- end
- alias :visit_Arel_Nodes_FullOuterJoin :visit_Arel_Nodes_InnerJoin
- alias :visit_Arel_Nodes_OuterJoin :visit_Arel_Nodes_InnerJoin
- alias :visit_Arel_Nodes_RightOuterJoin :visit_Arel_Nodes_InnerJoin
+ def visit_Arel_Nodes_StringJoin(o)
+ visit_edge o, "left"
+ end
- def visit_Arel_Nodes_DeleteStatement o
- visit_edge o, "relation"
- visit_edge o, "wheres"
- end
+ def visit_Arel_Nodes_InnerJoin(o)
+ visit_edge o, "left"
+ visit_edge o, "right"
+ end
+ alias :visit_Arel_Nodes_FullOuterJoin :visit_Arel_Nodes_InnerJoin
+ alias :visit_Arel_Nodes_OuterJoin :visit_Arel_Nodes_InnerJoin
+ alias :visit_Arel_Nodes_RightOuterJoin :visit_Arel_Nodes_InnerJoin
- def unary o
- visit_edge o, "expr"
- end
- alias :visit_Arel_Nodes_Group :unary
- alias :visit_Arel_Nodes_Cube :unary
- alias :visit_Arel_Nodes_RollUp :unary
- alias :visit_Arel_Nodes_GroupingSet :unary
- alias :visit_Arel_Nodes_GroupingElement :unary
- alias :visit_Arel_Nodes_Grouping :unary
- alias :visit_Arel_Nodes_Having :unary
- alias :visit_Arel_Nodes_Limit :unary
- alias :visit_Arel_Nodes_Not :unary
- alias :visit_Arel_Nodes_Offset :unary
- alias :visit_Arel_Nodes_On :unary
- alias :visit_Arel_Nodes_Top :unary
- alias :visit_Arel_Nodes_UnqualifiedColumn :unary
- alias :visit_Arel_Nodes_Preceding :unary
- alias :visit_Arel_Nodes_Following :unary
- alias :visit_Arel_Nodes_Rows :unary
- alias :visit_Arel_Nodes_Range :unary
-
- def window o
- visit_edge o, "partitions"
- visit_edge o, "orders"
- visit_edge o, "framing"
- end
- alias :visit_Arel_Nodes_Window :window
+ def visit_Arel_Nodes_DeleteStatement(o)
+ visit_edge o, "relation"
+ visit_edge o, "wheres"
+ end
- def named_window o
- visit_edge o, "partitions"
- visit_edge o, "orders"
- visit_edge o, "framing"
- visit_edge o, "name"
- end
- alias :visit_Arel_Nodes_NamedWindow :named_window
+ def unary(o)
+ visit_edge o, "expr"
+ end
+ alias :visit_Arel_Nodes_Group :unary
+ alias :visit_Arel_Nodes_Cube :unary
+ alias :visit_Arel_Nodes_RollUp :unary
+ alias :visit_Arel_Nodes_GroupingSet :unary
+ alias :visit_Arel_Nodes_GroupingElement :unary
+ alias :visit_Arel_Nodes_Grouping :unary
+ alias :visit_Arel_Nodes_Having :unary
+ alias :visit_Arel_Nodes_Limit :unary
+ alias :visit_Arel_Nodes_Not :unary
+ alias :visit_Arel_Nodes_Offset :unary
+ alias :visit_Arel_Nodes_On :unary
+ alias :visit_Arel_Nodes_Top :unary
+ alias :visit_Arel_Nodes_UnqualifiedColumn :unary
+ alias :visit_Arel_Nodes_Preceding :unary
+ alias :visit_Arel_Nodes_Following :unary
+ alias :visit_Arel_Nodes_Rows :unary
+ alias :visit_Arel_Nodes_Range :unary
+
+ def window(o)
+ visit_edge o, "partitions"
+ visit_edge o, "orders"
+ visit_edge o, "framing"
+ end
+ alias :visit_Arel_Nodes_Window :window
- def function o
- visit_edge o, "expressions"
- visit_edge o, "distinct"
- visit_edge o, "alias"
- end
- alias :visit_Arel_Nodes_Exists :function
- alias :visit_Arel_Nodes_Min :function
- alias :visit_Arel_Nodes_Max :function
- alias :visit_Arel_Nodes_Avg :function
- alias :visit_Arel_Nodes_Sum :function
-
- def extract o
- visit_edge o, "expressions"
- visit_edge o, "alias"
- end
- alias :visit_Arel_Nodes_Extract :extract
+ def named_window(o)
+ visit_edge o, "partitions"
+ visit_edge o, "orders"
+ visit_edge o, "framing"
+ visit_edge o, "name"
+ end
+ alias :visit_Arel_Nodes_NamedWindow :named_window
- def visit_Arel_Nodes_NamedFunction o
- visit_edge o, "name"
- visit_edge o, "expressions"
- visit_edge o, "distinct"
- visit_edge o, "alias"
- end
+ def function(o)
+ visit_edge o, "expressions"
+ visit_edge o, "distinct"
+ visit_edge o, "alias"
+ end
+ alias :visit_Arel_Nodes_Exists :function
+ alias :visit_Arel_Nodes_Min :function
+ alias :visit_Arel_Nodes_Max :function
+ alias :visit_Arel_Nodes_Avg :function
+ alias :visit_Arel_Nodes_Sum :function
+
+ def extract(o)
+ visit_edge o, "expressions"
+ visit_edge o, "alias"
+ end
+ alias :visit_Arel_Nodes_Extract :extract
- def visit_Arel_Nodes_InsertStatement o
- visit_edge o, "relation"
- visit_edge o, "columns"
- visit_edge o, "values"
- end
+ def visit_Arel_Nodes_NamedFunction(o)
+ visit_edge o, "name"
+ visit_edge o, "expressions"
+ visit_edge o, "distinct"
+ visit_edge o, "alias"
+ end
- def visit_Arel_Nodes_SelectCore o
- visit_edge o, "source"
- visit_edge o, "projections"
- visit_edge o, "wheres"
- visit_edge o, "windows"
- end
+ def visit_Arel_Nodes_InsertStatement(o)
+ visit_edge o, "relation"
+ visit_edge o, "columns"
+ visit_edge o, "values"
+ end
- def visit_Arel_Nodes_SelectStatement o
- visit_edge o, "cores"
- visit_edge o, "limit"
- visit_edge o, "orders"
- visit_edge o, "offset"
- end
+ def visit_Arel_Nodes_SelectCore(o)
+ visit_edge o, "source"
+ visit_edge o, "projections"
+ visit_edge o, "wheres"
+ visit_edge o, "windows"
+ end
- def visit_Arel_Nodes_UpdateStatement o
- visit_edge o, "relation"
- visit_edge o, "wheres"
- visit_edge o, "values"
- end
+ def visit_Arel_Nodes_SelectStatement(o)
+ visit_edge o, "cores"
+ visit_edge o, "limit"
+ visit_edge o, "orders"
+ visit_edge o, "offset"
+ end
- def visit_Arel_Table o
- visit_edge o, "name"
- end
+ def visit_Arel_Nodes_UpdateStatement(o)
+ visit_edge o, "relation"
+ visit_edge o, "wheres"
+ visit_edge o, "values"
+ end
- def visit_Arel_Nodes_Casted o
- visit_edge o, 'val'
- visit_edge o, 'attribute'
- end
+ def visit_Arel_Table(o)
+ visit_edge o, "name"
+ end
- def visit_Arel_Attribute o
- visit_edge o, "relation"
- visit_edge o, "name"
- end
- alias :visit_Arel_Attributes_Integer :visit_Arel_Attribute
- alias :visit_Arel_Attributes_Float :visit_Arel_Attribute
- alias :visit_Arel_Attributes_String :visit_Arel_Attribute
- alias :visit_Arel_Attributes_Time :visit_Arel_Attribute
- alias :visit_Arel_Attributes_Boolean :visit_Arel_Attribute
- alias :visit_Arel_Attributes_Attribute :visit_Arel_Attribute
+ def visit_Arel_Nodes_Casted(o)
+ visit_edge o, "val"
+ visit_edge o, "attribute"
+ end
- def nary o
- o.children.each_with_index do |x,i|
- edge(i) { visit x }
+ def visit_Arel_Attribute(o)
+ visit_edge o, "relation"
+ visit_edge o, "name"
end
- end
- alias :visit_Arel_Nodes_And :nary
+ alias :visit_Arel_Attributes_Integer :visit_Arel_Attribute
+ alias :visit_Arel_Attributes_Float :visit_Arel_Attribute
+ alias :visit_Arel_Attributes_String :visit_Arel_Attribute
+ alias :visit_Arel_Attributes_Time :visit_Arel_Attribute
+ alias :visit_Arel_Attributes_Boolean :visit_Arel_Attribute
+ alias :visit_Arel_Attributes_Attribute :visit_Arel_Attribute
+
+ def nary(o)
+ o.children.each_with_index do |x, i|
+ edge(i) { visit x }
+ end
+ end
+ alias :visit_Arel_Nodes_And :nary
- def binary o
- visit_edge o, "left"
- visit_edge o, "right"
- end
- alias :visit_Arel_Nodes_As :binary
- alias :visit_Arel_Nodes_Assignment :binary
- alias :visit_Arel_Nodes_Between :binary
- alias :visit_Arel_Nodes_Concat :binary
- alias :visit_Arel_Nodes_DoesNotMatch :binary
- alias :visit_Arel_Nodes_Equality :binary
- alias :visit_Arel_Nodes_GreaterThan :binary
- alias :visit_Arel_Nodes_GreaterThanOrEqual :binary
- alias :visit_Arel_Nodes_In :binary
- alias :visit_Arel_Nodes_JoinSource :binary
- alias :visit_Arel_Nodes_LessThan :binary
- alias :visit_Arel_Nodes_LessThanOrEqual :binary
- alias :visit_Arel_Nodes_Matches :binary
- alias :visit_Arel_Nodes_NotEqual :binary
- alias :visit_Arel_Nodes_NotIn :binary
- alias :visit_Arel_Nodes_Or :binary
- alias :visit_Arel_Nodes_Over :binary
-
- def visit_String o
- @node_stack.last.fields << o
- end
- alias :visit_Time :visit_String
- alias :visit_Date :visit_String
- alias :visit_DateTime :visit_String
- alias :visit_NilClass :visit_String
- alias :visit_TrueClass :visit_String
- alias :visit_FalseClass :visit_String
- alias :visit_Integer :visit_String
- alias :visit_Fixnum :visit_String
- alias :visit_BigDecimal :visit_String
- alias :visit_Float :visit_String
- alias :visit_Symbol :visit_String
- alias :visit_Arel_Nodes_SqlLiteral :visit_String
-
- def visit_Arel_Nodes_BindParam o; end
-
- def visit_Hash o
- o.each_with_index do |pair, i|
- edge("pair_#{i}") { visit pair }
+ def binary(o)
+ visit_edge o, "left"
+ visit_edge o, "right"
+ end
+ alias :visit_Arel_Nodes_As :binary
+ alias :visit_Arel_Nodes_Assignment :binary
+ alias :visit_Arel_Nodes_Between :binary
+ alias :visit_Arel_Nodes_Concat :binary
+ alias :visit_Arel_Nodes_DoesNotMatch :binary
+ alias :visit_Arel_Nodes_Equality :binary
+ alias :visit_Arel_Nodes_GreaterThan :binary
+ alias :visit_Arel_Nodes_GreaterThanOrEqual :binary
+ alias :visit_Arel_Nodes_In :binary
+ alias :visit_Arel_Nodes_JoinSource :binary
+ alias :visit_Arel_Nodes_LessThan :binary
+ alias :visit_Arel_Nodes_LessThanOrEqual :binary
+ alias :visit_Arel_Nodes_Matches :binary
+ alias :visit_Arel_Nodes_NotEqual :binary
+ alias :visit_Arel_Nodes_NotIn :binary
+ alias :visit_Arel_Nodes_Or :binary
+ alias :visit_Arel_Nodes_Over :binary
+
+ def visit_String(o)
+ @node_stack.last.fields << o
+ end
+ alias :visit_Time :visit_String
+ alias :visit_Date :visit_String
+ alias :visit_DateTime :visit_String
+ alias :visit_NilClass :visit_String
+ alias :visit_TrueClass :visit_String
+ alias :visit_FalseClass :visit_String
+ alias :visit_Integer :visit_String
+ alias :visit_Fixnum :visit_String
+ alias :visit_BigDecimal :visit_String
+ alias :visit_Float :visit_String
+ alias :visit_Symbol :visit_String
+ alias :visit_Arel_Nodes_SqlLiteral :visit_String
+
+ def visit_Arel_Nodes_BindParam(o); end
+
+ def visit_Hash(o)
+ o.each_with_index do |pair, i|
+ edge("pair_#{i}") { visit pair }
+ end
end
- end
- def visit_Array o
- o.each_with_index do |x,i|
- edge(i) { visit x }
+ def visit_Array(o)
+ o.each_with_index do |x, i|
+ edge(i) { visit x }
+ end
end
- end
- alias :visit_Set :visit_Array
+ alias :visit_Set :visit_Array
- def visit_edge o, method
- edge(method) { visit o.send(method) }
- end
+ def visit_edge(o, method)
+ edge(method) { visit o.send(method) }
+ end
- def visit o
- if node = @seen[o.object_id]
- @edge_stack.last.to = node
- return
+ def visit(o)
+ if node = @seen[o.object_id]
+ @edge_stack.last.to = node
+ return
+ end
+
+ node = Node.new(o.class.name, o.object_id)
+ @seen[node.id] = node
+ @nodes << node
+ with_node node do
+ super
+ end
end
- node = Node.new(o.class.name, o.object_id)
- @seen[node.id] = node
- @nodes << node
- with_node node do
- super
+ def edge(name)
+ edge = Edge.new(name, @node_stack.last)
+ @edge_stack.push edge
+ @edges << edge
+ yield
+ @edge_stack.pop
end
- end
- def edge name
- edge = Edge.new(name, @node_stack.last)
- @edge_stack.push edge
- @edges << edge
- yield
- @edge_stack.pop
- end
+ def with_node(node)
+ if edge = @edge_stack.last
+ edge.to = node
+ end
- def with_node node
- if edge = @edge_stack.last
- edge.to = node
+ @node_stack.push node
+ yield
+ @node_stack.pop
end
- @node_stack.push node
- yield
- @node_stack.pop
- end
-
- def quote string
- string.to_s.gsub('"', '\"')
- end
+ def quote(string)
+ string.to_s.gsub('"', '\"')
+ end
- def to_dot
- "digraph \"Arel\" {\nnode [width=0.375,height=0.25,shape=record];\n" +
- @nodes.map { |node|
- label = "<f0>#{node.name}"
+ def to_dot
+ "digraph \"Arel\" {\nnode [width=0.375,height=0.25,shape=record];\n" +
+ @nodes.map { |node|
+ label = "<f0>#{node.name}"
- node.fields.each_with_index do |field, i|
- label += "|<f#{i + 1}>#{quote field}"
- end
+ node.fields.each_with_index do |field, i|
+ label += "|<f#{i + 1}>#{quote field}"
+ end
- "#{node.id} [label=\"#{label}\"];"
- }.join("\n") + "\n" + @edges.map { |edge|
- "#{edge.from.id} -> #{edge.to.id} [label=\"#{edge.name}\"];"
- }.join("\n") + "\n}"
- end
+ "#{node.id} [label=\"#{label}\"];"
+ }.join("\n") + "\n" + @edges.map { |edge|
+ "#{edge.from.id} -> #{edge.to.id} [label=\"#{edge.name}\"];"
+ }.join("\n") + "\n}"
+ end
end
end
end
diff --git a/activerecord/lib/arel/visitors/ibm_db.rb b/activerecord/lib/arel/visitors/ibm_db.rb
index e85a5a08a7..0291e434c9 100644
--- a/activerecord/lib/arel/visitors/ibm_db.rb
+++ b/activerecord/lib/arel/visitors/ibm_db.rb
@@ -1,15 +1,15 @@
# frozen_string_literal: true
+
module Arel
module Visitors
class IBM_DB < Arel::Visitors::ToSql
private
- def visit_Arel_Nodes_Limit o, collector
- collector << "FETCH FIRST "
- collector = visit o.expr, collector
- collector << " ROWS ONLY"
- end
-
+ def visit_Arel_Nodes_Limit(o, collector)
+ collector << "FETCH FIRST "
+ collector = visit o.expr, collector
+ collector << " ROWS ONLY"
+ end
end
end
end
diff --git a/activerecord/lib/arel/visitors/informix.rb b/activerecord/lib/arel/visitors/informix.rb
index 44b18b550e..9df5a60bc2 100644
--- a/activerecord/lib/arel/visitors/informix.rb
+++ b/activerecord/lib/arel/visitors/informix.rb
@@ -1,55 +1,55 @@
# frozen_string_literal: true
+
module Arel
module Visitors
class Informix < Arel::Visitors::ToSql
private
- def visit_Arel_Nodes_SelectStatement o, collector
- collector << "SELECT "
- collector = maybe_visit o.offset, collector
- collector = maybe_visit o.limit, collector
- collector = o.cores.inject(collector) { |c,x|
- visit_Arel_Nodes_SelectCore x, c
- }
- if o.orders.any?
- collector << "ORDER BY "
- collector = inject_join o.orders, collector, ", "
- end
- collector = maybe_visit o.lock, collector
- end
- def visit_Arel_Nodes_SelectCore o, collector
- collector = inject_join o.projections, collector, ", "
- if o.source && !o.source.empty?
- collector << " FROM "
- collector = visit o.source, collector
+ def visit_Arel_Nodes_SelectStatement(o, collector)
+ collector << "SELECT "
+ collector = maybe_visit o.offset, collector
+ collector = maybe_visit o.limit, collector
+ collector = o.cores.inject(collector) { |c, x|
+ visit_Arel_Nodes_SelectCore x, c
+ }
+ if o.orders.any?
+ collector << "ORDER BY "
+ collector = inject_join o.orders, collector, ", "
+ end
+ collector = maybe_visit o.lock, collector
end
+ def visit_Arel_Nodes_SelectCore(o, collector)
+ collector = inject_join o.projections, collector, ", "
+ if o.source && !o.source.empty?
+ collector << " FROM "
+ collector = visit o.source, collector
+ end
- if o.wheres.any?
- collector << " WHERE "
- collector = inject_join o.wheres, collector, " AND "
- end
+ if o.wheres.any?
+ collector << " WHERE "
+ collector = inject_join o.wheres, collector, " AND "
+ end
- if o.groups.any?
- collector << "GROUP BY "
- collector = inject_join o.groups, collector, ", "
- end
+ if o.groups.any?
+ collector << "GROUP BY "
+ collector = inject_join o.groups, collector, ", "
+ end
- if o.havings.any?
- collector << " HAVING "
- collector = inject_join o.havings, collector, " AND "
+ if o.havings.any?
+ collector << " HAVING "
+ collector = inject_join o.havings, collector, " AND "
+ end
+ collector
end
- collector
- end
- def visit_Arel_Nodes_Offset o, collector
- collector << "SKIP "
- visit o.expr, collector
- end
- def visit_Arel_Nodes_Limit o, collector
- collector << "FIRST "
- visit o.expr, collector
- collector << " "
- end
+ def visit_Arel_Nodes_Offset(o, collector)
+ collector << "SKIP "
+ visit o.expr, collector
+ end
+ def visit_Arel_Nodes_Limit(o, collector)
+ collector << "FIRST "
+ visit o.expr, collector
+ collector << " "
+ end
end
end
end
-
diff --git a/activerecord/lib/arel/visitors/mssql.rb b/activerecord/lib/arel/visitors/mssql.rb
index 8347d05d06..4f2945e3a4 100644
--- a/activerecord/lib/arel/visitors/mssql.rb
+++ b/activerecord/lib/arel/visitors/mssql.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Visitors
class MSSQL < Arel::Visitors::ToSql
@@ -11,114 +12,114 @@ module Arel
private
- # `top` wouldn't really work here. I.e. User.select("distinct first_name").limit(10) would generate
- # "select top 10 distinct first_name from users", which is invalid query! it should be
- # "select distinct top 10 first_name from users"
- def visit_Arel_Nodes_Top o
- ""
- end
-
- def visit_Arel_Visitors_MSSQL_RowNumber o, collector
- collector << "ROW_NUMBER() OVER (ORDER BY "
- inject_join(o.children, collector, ', ') << ") as _row_num"
- end
+ # `top` wouldn't really work here. I.e. User.select("distinct first_name").limit(10) would generate
+ # "select top 10 distinct first_name from users", which is invalid query! it should be
+ # "select distinct top 10 first_name from users"
+ def visit_Arel_Nodes_Top(o)
+ ""
+ end
- def visit_Arel_Nodes_SelectStatement o, collector
- if !o.limit && !o.offset
- return super
+ def visit_Arel_Visitors_MSSQL_RowNumber(o, collector)
+ collector << "ROW_NUMBER() OVER (ORDER BY "
+ inject_join(o.children, collector, ", ") << ") as _row_num"
end
- is_select_count = false
- o.cores.each { |x|
- core_order_by = row_num_literal determine_order_by(o.orders, x)
- if select_count? x
- x.projections = [core_order_by]
- is_select_count = true
- else
- x.projections << core_order_by
+ def visit_Arel_Nodes_SelectStatement(o, collector)
+ if !o.limit && !o.offset
+ return super
end
- }
- if is_select_count
- # fixme count distinct wouldn't work with limit or offset
- collector << "SELECT COUNT(1) as count_id FROM ("
- end
+ is_select_count = false
+ o.cores.each { |x|
+ core_order_by = row_num_literal determine_order_by(o.orders, x)
+ if select_count? x
+ x.projections = [core_order_by]
+ is_select_count = true
+ else
+ x.projections << core_order_by
+ end
+ }
+
+ if is_select_count
+ # fixme count distinct wouldn't work with limit or offset
+ collector << "SELECT COUNT(1) as count_id FROM ("
+ end
- collector << "SELECT _t.* FROM ("
- collector = o.cores.inject(collector) { |c,x|
- visit_Arel_Nodes_SelectCore x, c
- }
- collector << ") as _t WHERE #{get_offset_limit_clause(o)}"
+ collector << "SELECT _t.* FROM ("
+ collector = o.cores.inject(collector) { |c, x|
+ visit_Arel_Nodes_SelectCore x, c
+ }
+ collector << ") as _t WHERE #{get_offset_limit_clause(o)}"
- if is_select_count
- collector << ") AS subquery"
- else
- collector
+ if is_select_count
+ collector << ") AS subquery"
+ else
+ collector
+ end
end
- end
- def get_offset_limit_clause o
- first_row = o.offset ? o.offset.expr.to_i + 1 : 1
- last_row = o.limit ? o.limit.expr.to_i - 1 + first_row : nil
- if last_row
- " _row_num BETWEEN #{first_row} AND #{last_row}"
- else
- " _row_num >= #{first_row}"
+ def get_offset_limit_clause(o)
+ first_row = o.offset ? o.offset.expr.to_i + 1 : 1
+ last_row = o.limit ? o.limit.expr.to_i - 1 + first_row : nil
+ if last_row
+ " _row_num BETWEEN #{first_row} AND #{last_row}"
+ else
+ " _row_num >= #{first_row}"
+ end
end
- end
- def visit_Arel_Nodes_DeleteStatement o, collector
- collector << 'DELETE '
- if o.limit
- collector << 'TOP ('
- visit o.limit.expr, collector
- collector << ') '
- end
- collector << 'FROM '
- collector = visit o.relation, collector
- if o.wheres.any?
- collector << ' WHERE '
- inject_join o.wheres, collector, AND
- else
- collector
+ def visit_Arel_Nodes_DeleteStatement(o, collector)
+ collector << "DELETE "
+ if o.limit
+ collector << "TOP ("
+ visit o.limit.expr, collector
+ collector << ") "
+ end
+ collector << "FROM "
+ collector = visit o.relation, collector
+ if o.wheres.any?
+ collector << " WHERE "
+ inject_join o.wheres, collector, AND
+ else
+ collector
+ end
end
- end
- def determine_order_by orders, x
- if orders.any?
- orders
- elsif x.groups.any?
- x.groups
- else
- pk = find_left_table_pk(x.froms)
- pk ? [pk] : []
+ def determine_order_by(orders, x)
+ if orders.any?
+ orders
+ elsif x.groups.any?
+ x.groups
+ else
+ pk = find_left_table_pk(x.froms)
+ pk ? [pk] : []
+ end
end
- end
- def row_num_literal order_by
- RowNumber.new order_by
- end
+ def row_num_literal(order_by)
+ RowNumber.new order_by
+ end
- def select_count? x
- x.projections.length == 1 && Arel::Nodes::Count === x.projections.first
- end
+ def select_count?(x)
+ x.projections.length == 1 && Arel::Nodes::Count === x.projections.first
+ end
- # FIXME raise exception of there is no pk?
- def find_left_table_pk o
- if o.kind_of?(Arel::Nodes::Join)
- find_left_table_pk(o.left)
- elsif o.instance_of?(Arel::Table)
- find_primary_key(o)
+ # FIXME raise exception of there is no pk?
+ def find_left_table_pk(o)
+ if o.kind_of?(Arel::Nodes::Join)
+ find_left_table_pk(o.left)
+ elsif o.instance_of?(Arel::Table)
+ find_primary_key(o)
+ end
end
- end
- def find_primary_key(o)
- @primary_keys[o.name] ||= begin
- primary_key_name = @connection.primary_key(o.name)
- # some tables might be without primary key
- primary_key_name && o[primary_key_name]
+ def find_primary_key(o)
+ @primary_keys[o.name] ||= begin
+ primary_key_name = @connection.primary_key(o.name)
+ # some tables might be without primary key
+ primary_key_name && o[primary_key_name]
+ end
end
- end
end
end
end
diff --git a/activerecord/lib/arel/visitors/mysql.rb b/activerecord/lib/arel/visitors/mysql.rb
index 4c734f6292..7b32988be6 100644
--- a/activerecord/lib/arel/visitors/mysql.rb
+++ b/activerecord/lib/arel/visitors/mysql.rb
@@ -1,86 +1,87 @@
# frozen_string_literal: true
+
module Arel
module Visitors
class MySQL < Arel::Visitors::ToSql
private
- def visit_Arel_Nodes_Union o, collector, suppress_parens = false
- unless suppress_parens
- collector << "( "
- end
+ def visit_Arel_Nodes_Union(o, collector, suppress_parens = false)
+ unless suppress_parens
+ collector << "( "
+ end
- collector = case o.left
- when Arel::Nodes::Union
- visit_Arel_Nodes_Union o.left, collector, true
- else
- visit o.left, collector
- end
+ collector = case o.left
+ when Arel::Nodes::Union
+ visit_Arel_Nodes_Union o.left, collector, true
+ else
+ visit o.left, collector
+ end
- collector << " UNION "
+ collector << " UNION "
- collector = case o.right
- when Arel::Nodes::Union
- visit_Arel_Nodes_Union o.right, collector, true
- else
- visit o.right, collector
- end
+ collector = case o.right
+ when Arel::Nodes::Union
+ visit_Arel_Nodes_Union o.right, collector, true
+ else
+ visit o.right, collector
+ end
- if suppress_parens
- collector
- else
- collector << " )"
+ if suppress_parens
+ collector
+ else
+ collector << " )"
+ end
end
- end
- def visit_Arel_Nodes_Bin o, collector
- collector << "BINARY "
- visit o.expr, collector
- end
+ def visit_Arel_Nodes_Bin(o, collector)
+ collector << "BINARY "
+ visit o.expr, collector
+ end
- ###
- # :'(
- # http://dev.mysql.com/doc/refman/5.0/en/select.html#id3482214
- def visit_Arel_Nodes_SelectStatement o, collector
- if o.offset && !o.limit
- o.limit = Arel::Nodes::Limit.new(18446744073709551615)
+ ###
+ # :'(
+ # http://dev.mysql.com/doc/refman/5.0/en/select.html#id3482214
+ def visit_Arel_Nodes_SelectStatement(o, collector)
+ if o.offset && !o.limit
+ o.limit = Arel::Nodes::Limit.new(18446744073709551615)
+ end
+ super
end
- super
- end
- def visit_Arel_Nodes_SelectCore o, collector
- o.froms ||= Arel.sql('DUAL')
- super
- end
+ def visit_Arel_Nodes_SelectCore(o, collector)
+ o.froms ||= Arel.sql("DUAL")
+ super
+ end
- def visit_Arel_Nodes_UpdateStatement o, collector
- collector << "UPDATE "
- collector = visit o.relation, collector
+ def visit_Arel_Nodes_UpdateStatement(o, collector)
+ collector << "UPDATE "
+ collector = visit o.relation, collector
- unless o.values.empty?
- collector << " SET "
- collector = inject_join o.values, collector, ', '
- end
+ unless o.values.empty?
+ collector << " SET "
+ collector = inject_join o.values, collector, ", "
+ end
- unless o.wheres.empty?
- collector << " WHERE "
- collector = inject_join o.wheres, collector, ' AND '
- end
+ unless o.wheres.empty?
+ collector << " WHERE "
+ collector = inject_join o.wheres, collector, " AND "
+ end
- unless o.orders.empty?
- collector << " ORDER BY "
- collector = inject_join o.orders, collector, ', '
- end
+ unless o.orders.empty?
+ collector << " ORDER BY "
+ collector = inject_join o.orders, collector, ", "
+ end
- maybe_visit o.limit, collector
- end
+ maybe_visit o.limit, collector
+ end
- def visit_Arel_Nodes_Concat o, collector
- collector << " CONCAT("
- visit o.left, collector
- collector << ", "
- visit o.right, collector
- collector << ") "
- collector
- end
+ def visit_Arel_Nodes_Concat(o, collector)
+ collector << " CONCAT("
+ visit o.left, collector
+ collector << ", "
+ visit o.right, collector
+ collector << ") "
+ collector
+ end
end
end
end
diff --git a/activerecord/lib/arel/visitors/oracle.rb b/activerecord/lib/arel/visitors/oracle.rb
index d4749bbae3..7811c18a8c 100644
--- a/activerecord/lib/arel/visitors/oracle.rb
+++ b/activerecord/lib/arel/visitors/oracle.rb
@@ -1,153 +1,153 @@
# frozen_string_literal: true
+
module Arel
module Visitors
class Oracle < Arel::Visitors::ToSql
private
- def visit_Arel_Nodes_SelectStatement o, collector
- o = order_hacks(o)
+ def visit_Arel_Nodes_SelectStatement(o, collector)
+ o = order_hacks(o)
- # if need to select first records without ORDER BY and GROUP BY and without DISTINCT
- # then can use simple ROWNUM in WHERE clause
- if o.limit && o.orders.empty? && o.cores.first.groups.empty? && !o.offset && o.cores.first.set_quantifier.class.to_s !~ /Distinct/
- o.cores.last.wheres.push Nodes::LessThanOrEqual.new(
- Nodes::SqlLiteral.new('ROWNUM'), o.limit.expr
- )
- return super
- end
+ # if need to select first records without ORDER BY and GROUP BY and without DISTINCT
+ # then can use simple ROWNUM in WHERE clause
+ if o.limit && o.orders.empty? && o.cores.first.groups.empty? && !o.offset && o.cores.first.set_quantifier.class.to_s !~ /Distinct/
+ o.cores.last.wheres.push Nodes::LessThanOrEqual.new(
+ Nodes::SqlLiteral.new("ROWNUM"), o.limit.expr
+ )
+ return super
+ end
+
+ if o.limit && o.offset
+ o = o.dup
+ limit = o.limit.expr
+ offset = o.offset
+ o.offset = nil
+ collector << "
+ SELECT * FROM (
+ SELECT raw_sql_.*, rownum raw_rnum_
+ FROM ("
+
+ collector = super(o, collector)
+
+ if offset.expr.is_a? Nodes::BindParam
+ collector << ") raw_sql_ WHERE rownum <= ("
+ collector = visit offset.expr, collector
+ collector << " + "
+ collector = visit limit, collector
+ collector << ") ) WHERE raw_rnum_ > "
+ collector = visit offset.expr, collector
+ return collector
+ else
+ collector << ") raw_sql_
+ WHERE rownum <= #{offset.expr.to_i + limit}
+ )
+ WHERE "
+ return visit(offset, collector)
+ end
+ end
- if o.limit && o.offset
- o = o.dup
- limit = o.limit.expr
- offset = o.offset
- o.offset = nil
- collector << "
- SELECT * FROM (
- SELECT raw_sql_.*, rownum raw_rnum_
- FROM ("
-
- collector = super(o, collector)
-
- if offset.expr.is_a? Nodes::BindParam
- collector << ') raw_sql_ WHERE rownum <= ('
- collector = visit offset.expr, collector
- collector << ' + '
- collector = visit limit, collector
- collector << ") ) WHERE raw_rnum_ > "
- collector = visit offset.expr, collector
- return collector
- else
+ if o.limit
+ o = o.dup
+ limit = o.limit.expr
+ collector << "SELECT * FROM ("
+ collector = super(o, collector)
+ collector << ") WHERE ROWNUM <= "
+ return visit limit, collector
+ end
+
+ if o.offset
+ o = o.dup
+ offset = o.offset
+ o.offset = nil
+ collector << "SELECT * FROM (
+ SELECT raw_sql_.*, rownum raw_rnum_
+ FROM ("
+ collector = super(o, collector)
collector << ") raw_sql_
- WHERE rownum <= #{offset.expr.to_i + limit}
- )
- WHERE "
- return visit(offset, collector)
+ )
+ WHERE "
+ return visit offset, collector
end
- end
- if o.limit
- o = o.dup
- limit = o.limit.expr
- collector << "SELECT * FROM ("
- collector = super(o, collector)
- collector << ") WHERE ROWNUM <= "
- return visit limit, collector
+ super
end
- if o.offset
- o = o.dup
- offset = o.offset
- o.offset = nil
- collector << "SELECT * FROM (
- SELECT raw_sql_.*, rownum raw_rnum_
- FROM ("
- collector = super(o, collector)
- collector << ") raw_sql_
- )
- WHERE "
- return visit offset, collector
+ def visit_Arel_Nodes_Limit(o, collector)
+ collector
end
- super
- end
-
- def visit_Arel_Nodes_Limit o, collector
- collector
- end
-
- def visit_Arel_Nodes_Offset o, collector
- collector << "raw_rnum_ > "
- visit o.expr, collector
- end
-
- def visit_Arel_Nodes_Except o, collector
- collector << "( "
- collector = infix_value o, collector, " MINUS "
- collector << " )"
- end
-
- def visit_Arel_Nodes_UpdateStatement o, collector
- # Oracle does not allow ORDER BY/LIMIT in UPDATEs.
- if o.orders.any? && o.limit.nil?
- # However, there is no harm in silently eating the ORDER BY clause if no LIMIT has been provided,
- # otherwise let the user deal with the error
- o = o.dup
- o.orders = []
+ def visit_Arel_Nodes_Offset(o, collector)
+ collector << "raw_rnum_ > "
+ visit o.expr, collector
end
- super
- end
+ def visit_Arel_Nodes_Except(o, collector)
+ collector << "( "
+ collector = infix_value o, collector, " MINUS "
+ collector << " )"
+ end
- ###
- # Hacks for the order clauses specific to Oracle
- def order_hacks o
- return o if o.orders.empty?
- return o unless o.cores.any? do |core|
- core.projections.any? do |projection|
- /FIRST_VALUE/ === projection
+ def visit_Arel_Nodes_UpdateStatement(o, collector)
+ # Oracle does not allow ORDER BY/LIMIT in UPDATEs.
+ if o.orders.any? && o.limit.nil?
+ # However, there is no harm in silently eating the ORDER BY clause if no LIMIT has been provided,
+ # otherwise let the user deal with the error
+ o = o.dup
+ o.orders = []
end
+
+ super
end
- # Previous version with join and split broke ORDER BY clause
- # if it contained functions with several arguments (separated by ',').
- #
- # orders = o.orders.map { |x| visit x }.join(', ').split(',')
- orders = o.orders.map do |x|
- string = visit(x, Arel::Collectors::SQLString.new).value
- if string.include?(',')
- split_order_string(string)
- else
- string
+
+ ###
+ # Hacks for the order clauses specific to Oracle
+ def order_hacks(o)
+ return o if o.orders.empty?
+ return o unless o.cores.any? do |core|
+ core.projections.any? do |projection|
+ /FIRST_VALUE/ === projection
+ end
end
- end.flatten
- o.orders = []
- orders.each_with_index do |order, i|
- o.orders <<
- Nodes::SqlLiteral.new("alias_#{i}__#{' DESC' if /\bdesc$/i === order}")
- end
- o
- end
-
- # Split string by commas but count opening and closing brackets
- # and ignore commas inside brackets.
- def split_order_string(string)
- array = []
- i = 0
- string.split(',').each do |part|
- if array[i]
- array[i] << ',' << part
- else
- # to ensure that array[i] will be String and not Arel::Nodes::SqlLiteral
- array[i] = part.to_s
+ # Previous version with join and split broke ORDER BY clause
+ # if it contained functions with several arguments (separated by ',').
+ #
+ # orders = o.orders.map { |x| visit x }.join(', ').split(',')
+ orders = o.orders.map do |x|
+ string = visit(x, Arel::Collectors::SQLString.new).value
+ if string.include?(",")
+ split_order_string(string)
+ else
+ string
+ end
+ end.flatten
+ o.orders = []
+ orders.each_with_index do |order, i|
+ o.orders <<
+ Nodes::SqlLiteral.new("alias_#{i}__#{' DESC' if /\bdesc$/i === order}")
end
- i += 1 if array[i].count('(') == array[i].count(')')
+ o
end
- array
- end
- def visit_Arel_Nodes_BindParam o, collector
- collector.add_bind(o.value) { |i| ":a#{i}" }
- end
+ # Split string by commas but count opening and closing brackets
+ # and ignore commas inside brackets.
+ def split_order_string(string)
+ array = []
+ i = 0
+ string.split(",").each do |part|
+ if array[i]
+ array[i] << "," << part
+ else
+ # to ensure that array[i] will be String and not Arel::Nodes::SqlLiteral
+ array[i] = part.to_s
+ end
+ i += 1 if array[i].count("(") == array[i].count(")")
+ end
+ array
+ end
+ def visit_Arel_Nodes_BindParam(o, collector)
+ collector.add_bind(o.value) { |i| ":a#{i}" }
+ end
end
end
end
diff --git a/activerecord/lib/arel/visitors/oracle12.rb b/activerecord/lib/arel/visitors/oracle12.rb
index 648047ae61..e312ba96bb 100644
--- a/activerecord/lib/arel/visitors/oracle12.rb
+++ b/activerecord/lib/arel/visitors/oracle12.rb
@@ -1,60 +1,61 @@
# frozen_string_literal: true
+
module Arel
module Visitors
class Oracle12 < Arel::Visitors::ToSql
private
- def visit_Arel_Nodes_SelectStatement o, collector
- # Oracle does not allow LIMIT clause with select for update
- if o.limit && o.lock
- raise ArgumentError, <<-MSG
+ def visit_Arel_Nodes_SelectStatement(o, collector)
+ # Oracle does not allow LIMIT clause with select for update
+ if o.limit && o.lock
+ raise ArgumentError, <<-MSG
'Combination of limit and lock is not supported.
because generated SQL statements
`SELECT FOR UPDATE and FETCH FIRST n ROWS` generates ORA-02014.`
MSG
+ end
+ super
+ end
+
+ def visit_Arel_Nodes_SelectOptions(o, collector)
+ collector = maybe_visit o.offset, collector
+ collector = maybe_visit o.limit, collector
+ collector = maybe_visit o.lock, collector
end
- super
- end
-
- def visit_Arel_Nodes_SelectOptions o, collector
- collector = maybe_visit o.offset, collector
- collector = maybe_visit o.limit, collector
- collector = maybe_visit o.lock, collector
- end
-
- def visit_Arel_Nodes_Limit o, collector
- collector << "FETCH FIRST "
- collector = visit o.expr, collector
- collector << " ROWS ONLY"
- end
-
- def visit_Arel_Nodes_Offset o, collector
- collector << "OFFSET "
- visit o.expr, collector
- collector << " ROWS"
- end
-
- def visit_Arel_Nodes_Except o, collector
- collector << "( "
- collector = infix_value o, collector, " MINUS "
- collector << " )"
- end
-
- def visit_Arel_Nodes_UpdateStatement o, collector
- # Oracle does not allow ORDER BY/LIMIT in UPDATEs.
- if o.orders.any? && o.limit.nil?
- # However, there is no harm in silently eating the ORDER BY clause if no LIMIT has been provided,
- # otherwise let the user deal with the error
- o = o.dup
- o.orders = []
+
+ def visit_Arel_Nodes_Limit(o, collector)
+ collector << "FETCH FIRST "
+ collector = visit o.expr, collector
+ collector << " ROWS ONLY"
end
- super
- end
+ def visit_Arel_Nodes_Offset(o, collector)
+ collector << "OFFSET "
+ visit o.expr, collector
+ collector << " ROWS"
+ end
- def visit_Arel_Nodes_BindParam o, collector
- collector.add_bind(o.value) { |i| ":a#{i}" }
- end
+ def visit_Arel_Nodes_Except(o, collector)
+ collector << "( "
+ collector = infix_value o, collector, " MINUS "
+ collector << " )"
+ end
+
+ def visit_Arel_Nodes_UpdateStatement(o, collector)
+ # Oracle does not allow ORDER BY/LIMIT in UPDATEs.
+ if o.orders.any? && o.limit.nil?
+ # However, there is no harm in silently eating the ORDER BY clause if no LIMIT has been provided,
+ # otherwise let the user deal with the error
+ o = o.dup
+ o.orders = []
+ end
+
+ super
+ end
+
+ def visit_Arel_Nodes_BindParam(o, collector)
+ collector.add_bind(o.value) { |i| ":a#{i}" }
+ end
end
end
end
diff --git a/activerecord/lib/arel/visitors/postgresql.rb b/activerecord/lib/arel/visitors/postgresql.rb
index 047f71aaa6..e7ed888ed8 100644
--- a/activerecord/lib/arel/visitors/postgresql.rb
+++ b/activerecord/lib/arel/visitors/postgresql.rb
@@ -1,103 +1,104 @@
# frozen_string_literal: true
+
module Arel
module Visitors
class PostgreSQL < Arel::Visitors::ToSql
- CUBE = 'CUBE'
- ROLLUP = 'ROLLUP'
- GROUPING_SET = 'GROUPING SET'
- LATERAL = 'LATERAL'
+ CUBE = "CUBE"
+ ROLLUP = "ROLLUP"
+ GROUPING_SET = "GROUPING SET"
+ LATERAL = "LATERAL"
private
- def visit_Arel_Nodes_Matches o, collector
- op = o.case_sensitive ? ' LIKE ' : ' ILIKE '
- collector = infix_value o, collector, op
- if o.escape
- collector << ' ESCAPE '
- visit o.escape, collector
- else
- collector
+ def visit_Arel_Nodes_Matches(o, collector)
+ op = o.case_sensitive ? " LIKE " : " ILIKE "
+ collector = infix_value o, collector, op
+ if o.escape
+ collector << " ESCAPE "
+ visit o.escape, collector
+ else
+ collector
+ end
end
- end
- def visit_Arel_Nodes_DoesNotMatch o, collector
- op = o.case_sensitive ? ' NOT LIKE ' : ' NOT ILIKE '
- collector = infix_value o, collector, op
- if o.escape
- collector << ' ESCAPE '
- visit o.escape, collector
- else
- collector
+ def visit_Arel_Nodes_DoesNotMatch(o, collector)
+ op = o.case_sensitive ? " NOT LIKE " : " NOT ILIKE "
+ collector = infix_value o, collector, op
+ if o.escape
+ collector << " ESCAPE "
+ visit o.escape, collector
+ else
+ collector
+ end
end
- end
- def visit_Arel_Nodes_Regexp o, collector
- op = o.case_sensitive ? ' ~ ' : ' ~* '
- infix_value o, collector, op
- end
+ def visit_Arel_Nodes_Regexp(o, collector)
+ op = o.case_sensitive ? " ~ " : " ~* "
+ infix_value o, collector, op
+ end
- def visit_Arel_Nodes_NotRegexp o, collector
- op = o.case_sensitive ? ' !~ ' : ' !~* '
- infix_value o, collector, op
- end
+ def visit_Arel_Nodes_NotRegexp(o, collector)
+ op = o.case_sensitive ? " !~ " : " !~* "
+ infix_value o, collector, op
+ end
- def visit_Arel_Nodes_DistinctOn o, collector
- collector << "DISTINCT ON ( "
- visit(o.expr, collector) << " )"
- end
+ def visit_Arel_Nodes_DistinctOn(o, collector)
+ collector << "DISTINCT ON ( "
+ visit(o.expr, collector) << " )"
+ end
- def visit_Arel_Nodes_BindParam o, collector
- collector.add_bind(o.value) { |i| "$#{i}" }
- end
+ def visit_Arel_Nodes_BindParam(o, collector)
+ collector.add_bind(o.value) { |i| "$#{i}" }
+ end
- def visit_Arel_Nodes_GroupingElement o, collector
- collector << "( "
- visit(o.expr, collector) << " )"
- end
+ def visit_Arel_Nodes_GroupingElement(o, collector)
+ collector << "( "
+ visit(o.expr, collector) << " )"
+ end
- def visit_Arel_Nodes_Cube o, collector
- collector << CUBE
- grouping_array_or_grouping_element o, collector
- end
+ def visit_Arel_Nodes_Cube(o, collector)
+ collector << CUBE
+ grouping_array_or_grouping_element o, collector
+ end
- def visit_Arel_Nodes_RollUp o, collector
- collector << ROLLUP
- grouping_array_or_grouping_element o, collector
- end
+ def visit_Arel_Nodes_RollUp(o, collector)
+ collector << ROLLUP
+ grouping_array_or_grouping_element o, collector
+ end
- def visit_Arel_Nodes_GroupingSet o, collector
- collector << GROUPING_SET
- grouping_array_or_grouping_element o, collector
- end
+ def visit_Arel_Nodes_GroupingSet(o, collector)
+ collector << GROUPING_SET
+ grouping_array_or_grouping_element o, collector
+ end
- def visit_Arel_Nodes_Lateral o, collector
- collector << LATERAL
- collector << SPACE
- grouping_parentheses o, collector
- end
+ def visit_Arel_Nodes_Lateral(o, collector)
+ collector << LATERAL
+ collector << SPACE
+ grouping_parentheses o, collector
+ end
- # Used by Lateral visitor to enclose select queries in parentheses
- def grouping_parentheses o, collector
- if o.expr.is_a? Nodes::SelectStatement
- collector << "("
- visit o.expr, collector
- collector << ")"
- else
- visit o.expr, collector
+ # Used by Lateral visitor to enclose select queries in parentheses
+ def grouping_parentheses(o, collector)
+ if o.expr.is_a? Nodes::SelectStatement
+ collector << "("
+ visit o.expr, collector
+ collector << ")"
+ else
+ visit o.expr, collector
+ end
end
- end
- # Utilized by GroupingSet, Cube & RollUp visitors to
- # handle grouping aggregation semantics
- def grouping_array_or_grouping_element o, collector
- if o.expr.is_a? Array
- collector << "( "
- visit o.expr, collector
- collector << " )"
- else
- visit o.expr, collector
+ # Utilized by GroupingSet, Cube & RollUp visitors to
+ # handle grouping aggregation semantics
+ def grouping_array_or_grouping_element(o, collector)
+ if o.expr.is_a? Array
+ collector << "( "
+ visit o.expr, collector
+ collector << " )"
+ else
+ visit o.expr, collector
+ end
end
- end
end
end
end
diff --git a/activerecord/lib/arel/visitors/sqlite.rb b/activerecord/lib/arel/visitors/sqlite.rb
index 4ae093968b..8d4152c428 100644
--- a/activerecord/lib/arel/visitors/sqlite.rb
+++ b/activerecord/lib/arel/visitors/sqlite.rb
@@ -1,27 +1,27 @@
# frozen_string_literal: true
+
module Arel
module Visitors
class SQLite < Arel::Visitors::ToSql
private
- # Locks are not supported in SQLite
- def visit_Arel_Nodes_Lock o, collector
- collector
- end
-
- def visit_Arel_Nodes_SelectStatement o, collector
- o.limit = Arel::Nodes::Limit.new(-1) if o.offset && !o.limit
- super
- end
+ # Locks are not supported in SQLite
+ def visit_Arel_Nodes_Lock(o, collector)
+ collector
+ end
- def visit_Arel_Nodes_True o, collector
- collector << "1"
- end
+ def visit_Arel_Nodes_SelectStatement(o, collector)
+ o.limit = Arel::Nodes::Limit.new(-1) if o.offset && !o.limit
+ super
+ end
- def visit_Arel_Nodes_False o, collector
- collector << "0"
- end
+ def visit_Arel_Nodes_True(o, collector)
+ collector << "1"
+ end
+ def visit_Arel_Nodes_False(o, collector)
+ collector << "0"
+ end
end
end
end
diff --git a/activerecord/lib/arel/visitors/to_sql.rb b/activerecord/lib/arel/visitors/to_sql.rb
index 2b5c43b173..24db04200a 100644
--- a/activerecord/lib/arel/visitors/to_sql.rb
+++ b/activerecord/lib/arel/visitors/to_sql.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Visitors
class UnsupportedVisitError < StandardError
@@ -51,796 +52,796 @@ module Arel
# specialized for specific databases when necessary.
#
- WHERE = ' WHERE ' # :nodoc:
- SPACE = ' ' # :nodoc:
- COMMA = ', ' # :nodoc:
- GROUP_BY = ' GROUP BY ' # :nodoc:
- ORDER_BY = ' ORDER BY ' # :nodoc:
- WINDOW = ' WINDOW ' # :nodoc:
- AND = ' AND ' # :nodoc:
+ WHERE = " WHERE " # :nodoc:
+ SPACE = " " # :nodoc:
+ COMMA = ", " # :nodoc:
+ GROUP_BY = " GROUP BY " # :nodoc:
+ ORDER_BY = " ORDER BY " # :nodoc:
+ WINDOW = " WINDOW " # :nodoc:
+ AND = " AND " # :nodoc:
- DISTINCT = 'DISTINCT' # :nodoc:
+ DISTINCT = "DISTINCT" # :nodoc:
- def initialize connection
+ def initialize(connection)
super()
- @connection = connection
+ @connection = connection
end
- def compile node, &block
+ def compile(node, &block)
accept(node, Arel::Collectors::SQLString.new, &block).value
end
private
- def visit_Arel_Nodes_DeleteStatement o, collector
- collector << 'DELETE FROM '
- collector = visit o.relation, collector
- if o.wheres.any?
- collector << WHERE
- collector = inject_join o.wheres, collector, AND
+ def visit_Arel_Nodes_DeleteStatement(o, collector)
+ collector << "DELETE FROM "
+ collector = visit o.relation, collector
+ if o.wheres.any?
+ collector << WHERE
+ collector = inject_join o.wheres, collector, AND
+ end
+
+ maybe_visit o.limit, collector
end
- maybe_visit o.limit, collector
- end
+ # FIXME: we should probably have a 2-pass visitor for this
+ def build_subselect(key, o)
+ stmt = Nodes::SelectStatement.new
+ core = stmt.cores.first
+ core.froms = o.relation
+ core.wheres = o.wheres
+ core.projections = [key]
+ stmt.limit = o.limit
+ stmt.orders = o.orders
+ stmt
+ end
- # FIXME: we should probably have a 2-pass visitor for this
- def build_subselect key, o
- stmt = Nodes::SelectStatement.new
- core = stmt.cores.first
- core.froms = o.relation
- core.wheres = o.wheres
- core.projections = [key]
- stmt.limit = o.limit
- stmt.orders = o.orders
- stmt
- end
+ def visit_Arel_Nodes_UpdateStatement(o, collector)
+ if o.orders.empty? && o.limit.nil?
+ wheres = o.wheres
+ else
+ wheres = [Nodes::In.new(o.key, [build_subselect(o.key, o)])]
+ end
- def visit_Arel_Nodes_UpdateStatement o, collector
- if o.orders.empty? && o.limit.nil?
- wheres = o.wheres
- else
- wheres = [Nodes::In.new(o.key, [build_subselect(o.key, o)])]
- end
+ collector << "UPDATE "
+ collector = visit o.relation, collector
+ unless o.values.empty?
+ collector << " SET "
+ collector = inject_join o.values, collector, ", "
+ end
- collector << "UPDATE "
- collector = visit o.relation, collector
- unless o.values.empty?
- collector << " SET "
- collector = inject_join o.values, collector, ", "
- end
+ unless wheres.empty?
+ collector << " WHERE "
+ collector = inject_join wheres, collector, " AND "
+ end
- unless wheres.empty?
- collector << " WHERE "
- collector = inject_join wheres, collector, " AND "
+ collector
end
- collector
- end
+ def visit_Arel_Nodes_InsertStatement(o, collector)
+ collector << "INSERT INTO "
+ collector = visit o.relation, collector
+ if o.columns.any?
+ collector << " (#{o.columns.map { |x|
+ quote_column_name x.name
+ }.join ', '})"
+ end
- def visit_Arel_Nodes_InsertStatement o, collector
- collector << "INSERT INTO "
- collector = visit o.relation, collector
- if o.columns.any?
- collector << " (#{o.columns.map { |x|
- quote_column_name x.name
- }.join ', '})"
+ if o.values
+ maybe_visit o.values, collector
+ elsif o.select
+ maybe_visit o.select, collector
+ else
+ collector
+ end
end
- if o.values
- maybe_visit o.values, collector
- elsif o.select
- maybe_visit o.select, collector
- else
- collector
+ def visit_Arel_Nodes_Exists(o, collector)
+ collector << "EXISTS ("
+ collector = visit(o.expressions, collector) << ")"
+ if o.alias
+ collector << " AS "
+ visit o.alias, collector
+ else
+ collector
+ end
end
- end
- def visit_Arel_Nodes_Exists o, collector
- collector << "EXISTS ("
- collector = visit(o.expressions, collector) << ")"
- if o.alias
- collector << " AS "
- visit o.alias, collector
- else
- collector
+ def visit_Arel_Nodes_Casted(o, collector)
+ collector << quoted(o.val, o.attribute).to_s
end
- end
- def visit_Arel_Nodes_Casted o, collector
- collector << quoted(o.val, o.attribute).to_s
- end
+ def visit_Arel_Nodes_Quoted(o, collector)
+ collector << quoted(o.expr, nil).to_s
+ end
- def visit_Arel_Nodes_Quoted o, collector
- collector << quoted(o.expr, nil).to_s
- end
+ def visit_Arel_Nodes_True(o, collector)
+ collector << "TRUE"
+ end
- def visit_Arel_Nodes_True o, collector
- collector << "TRUE"
- end
+ def visit_Arel_Nodes_False(o, collector)
+ collector << "FALSE"
+ end
- def visit_Arel_Nodes_False o, collector
- collector << "FALSE"
- end
+ def visit_Arel_Nodes_ValuesList(o, collector)
+ collector << "VALUES "
- def visit_Arel_Nodes_ValuesList o, collector
- collector << "VALUES "
+ len = o.rows.length - 1
+ o.rows.each_with_index { |row, i|
+ collector << "("
+ row_len = row.length - 1
+ row.each_with_index do |value, k|
+ case value
+ when Nodes::SqlLiteral, Nodes::BindParam
+ collector = visit(value, collector)
+ else
+ collector << quote(value)
+ end
+ collector << COMMA unless k == row_len
+ end
+ collector << ")"
+ collector << COMMA unless i == len
+ }
+ collector
+ end
+
+ def visit_Arel_Nodes_Values(o, collector)
+ collector << "VALUES ("
- len = o.rows.length - 1
- o.rows.each_with_index { |row, i|
- collector << '('
- row_len = row.length - 1
- row.each_with_index do |value, k|
+ len = o.expressions.length - 1
+ o.expressions.each_with_index { |value, i|
case value
when Nodes::SqlLiteral, Nodes::BindParam
- collector = visit(value, collector)
+ collector = visit value, collector
else
- collector << quote(value)
+ collector << quote(value).to_s
end
- collector << COMMA unless k == row_len
- end
- collector << ')'
- collector << COMMA unless i == len
- }
- collector
- end
+ unless i == len
+ collector << COMMA
+ end
+ }
- def visit_Arel_Nodes_Values o, collector
- collector << "VALUES ("
+ collector << ")"
+ end
- 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
+ def visit_Arel_Nodes_SelectStatement(o, collector)
+ if o.with
+ collector = visit o.with, collector
+ collector << SPACE
end
- unless i == len
- collector << COMMA
+
+ collector = o.cores.inject(collector) { |c, x|
+ visit_Arel_Nodes_SelectCore(x, c)
+ }
+
+ unless o.orders.empty?
+ collector << ORDER_BY
+ len = o.orders.length - 1
+ o.orders.each_with_index { |x, i|
+ collector = visit(x, collector)
+ collector << COMMA unless len == i
+ }
end
- }
- collector << ")"
- end
+ visit_Arel_Nodes_SelectOptions(o, collector)
- def visit_Arel_Nodes_SelectStatement o, collector
- if o.with
- collector = visit o.with, collector
- collector << SPACE
+ collector
end
- collector = o.cores.inject(collector) { |c,x|
- visit_Arel_Nodes_SelectCore(x, c)
- }
-
- unless o.orders.empty?
- collector << ORDER_BY
- len = o.orders.length - 1
- o.orders.each_with_index { |x, i|
- collector = visit(x, collector)
- collector << COMMA unless len == i
- }
+ def visit_Arel_Nodes_SelectOptions(o, collector)
+ collector = maybe_visit o.limit, collector
+ collector = maybe_visit o.offset, collector
+ collector = maybe_visit o.lock, collector
end
- visit_Arel_Nodes_SelectOptions(o, collector)
+ def visit_Arel_Nodes_SelectCore(o, collector)
+ collector << "SELECT"
- collector
- end
+ collector = maybe_visit o.top, collector
- def visit_Arel_Nodes_SelectOptions o, collector
- collector = maybe_visit o.limit, collector
- collector = maybe_visit o.offset, collector
- collector = maybe_visit o.lock, collector
- end
+ collector = maybe_visit o.set_quantifier, collector
- def visit_Arel_Nodes_SelectCore o, collector
- collector << "SELECT"
+ collect_nodes_for o.projections, collector, SPACE
- collector = maybe_visit o.top, collector
+ if o.source && !o.source.empty?
+ collector << " FROM "
+ collector = visit o.source, collector
+ end
- collector = maybe_visit o.set_quantifier, collector
+ collect_nodes_for o.wheres, collector, WHERE, AND
+ collect_nodes_for o.groups, collector, GROUP_BY
+ unless o.havings.empty?
+ collector << " HAVING "
+ inject_join o.havings, collector, AND
+ end
+ collect_nodes_for o.windows, collector, WINDOW
- collect_nodes_for o.projections, collector, SPACE
+ collector
+ end
- if o.source && !o.source.empty?
- collector << " FROM "
- collector = visit o.source, collector
+ def collect_nodes_for(nodes, collector, spacer, connector = COMMA)
+ unless nodes.empty?
+ collector << spacer
+ len = nodes.length - 1
+ nodes.each_with_index do |x, i|
+ collector = visit(x, collector)
+ collector << connector unless len == i
+ end
+ end
end
- collect_nodes_for o.wheres, collector, WHERE, AND
- collect_nodes_for o.groups, collector, GROUP_BY
- unless o.havings.empty?
- collector << " HAVING "
- inject_join o.havings, collector, AND
+ def visit_Arel_Nodes_Bin(o, collector)
+ visit o.expr, collector
end
- collect_nodes_for o.windows, collector, WINDOW
- collector
- end
+ def visit_Arel_Nodes_Distinct(o, collector)
+ collector << DISTINCT
+ end
- def collect_nodes_for nodes, collector, spacer, connector = COMMA
- unless nodes.empty?
- collector << spacer
- len = nodes.length - 1
- nodes.each_with_index do |x, i|
- collector = visit(x, collector)
- collector << connector unless len == i
- end
+ def visit_Arel_Nodes_DistinctOn(o, collector)
+ raise NotImplementedError, "DISTINCT ON not implemented for this db"
end
- end
- def visit_Arel_Nodes_Bin o, collector
- visit o.expr, collector
- end
+ def visit_Arel_Nodes_With(o, collector)
+ collector << "WITH "
+ inject_join o.children, collector, COMMA
+ end
- def visit_Arel_Nodes_Distinct o, collector
- collector << DISTINCT
- end
+ def visit_Arel_Nodes_WithRecursive(o, collector)
+ collector << "WITH RECURSIVE "
+ inject_join o.children, collector, COMMA
+ end
- def visit_Arel_Nodes_DistinctOn o, collector
- raise NotImplementedError, 'DISTINCT ON not implemented for this db'
- end
+ def visit_Arel_Nodes_Union(o, collector)
+ collector << "( "
+ infix_value(o, collector, " UNION ") << " )"
+ end
- def visit_Arel_Nodes_With o, collector
- collector << "WITH "
- inject_join o.children, collector, COMMA
- end
+ def visit_Arel_Nodes_UnionAll(o, collector)
+ collector << "( "
+ infix_value(o, collector, " UNION ALL ") << " )"
+ end
- def visit_Arel_Nodes_WithRecursive o, collector
- collector << "WITH RECURSIVE "
- inject_join o.children, collector, COMMA
- end
+ def visit_Arel_Nodes_Intersect(o, collector)
+ collector << "( "
+ infix_value(o, collector, " INTERSECT ") << " )"
+ end
- def visit_Arel_Nodes_Union o, collector
- collector << "( "
- infix_value(o, collector, " UNION ") << " )"
- end
+ def visit_Arel_Nodes_Except(o, collector)
+ collector << "( "
+ infix_value(o, collector, " EXCEPT ") << " )"
+ end
- def visit_Arel_Nodes_UnionAll o, collector
- collector << "( "
- infix_value(o, collector, " UNION ALL ") << " )"
- end
+ def visit_Arel_Nodes_NamedWindow(o, collector)
+ collector << quote_column_name(o.name)
+ collector << " AS "
+ visit_Arel_Nodes_Window o, collector
+ end
- def visit_Arel_Nodes_Intersect o, collector
- collector << "( "
- infix_value(o, collector, " INTERSECT ") << " )"
- end
+ def visit_Arel_Nodes_Window(o, collector)
+ collector << "("
- def visit_Arel_Nodes_Except o, collector
- collector << "( "
- infix_value(o, collector, " EXCEPT ") << " )"
- end
+ if o.partitions.any?
+ collector << "PARTITION BY "
+ collector = inject_join o.partitions, collector, ", "
+ end
- def visit_Arel_Nodes_NamedWindow o, collector
- collector << quote_column_name(o.name)
- collector << " AS "
- visit_Arel_Nodes_Window o, collector
- end
+ if o.orders.any?
+ collector << SPACE if o.partitions.any?
+ collector << "ORDER BY "
+ collector = inject_join o.orders, collector, ", "
+ end
- def visit_Arel_Nodes_Window o, collector
- collector << "("
+ if o.framing
+ collector << SPACE if o.partitions.any? || o.orders.any?
+ collector = visit o.framing, collector
+ end
- if o.partitions.any?
- collector << "PARTITION BY "
- collector = inject_join o.partitions, collector, ", "
+ collector << ")"
end
- if o.orders.any?
- collector << SPACE if o.partitions.any?
- collector << "ORDER BY "
- collector = inject_join o.orders, collector, ", "
+ def visit_Arel_Nodes_Rows(o, collector)
+ if o.expr
+ collector << "ROWS "
+ visit o.expr, collector
+ else
+ collector << "ROWS"
+ end
end
- if o.framing
- collector << SPACE if o.partitions.any? or o.orders.any?
- collector = visit o.framing, collector
+ def visit_Arel_Nodes_Range(o, collector)
+ if o.expr
+ collector << "RANGE "
+ visit o.expr, collector
+ else
+ collector << "RANGE"
+ end
end
- collector << ")"
- end
-
- def visit_Arel_Nodes_Rows o, collector
- if o.expr
- collector << "ROWS "
- visit o.expr, collector
- else
- collector << "ROWS"
- end
- end
+ def visit_Arel_Nodes_Preceding(o, collector)
+ collector = if o.expr
+ visit o.expr, collector
+ else
+ collector << "UNBOUNDED"
+ end
- def visit_Arel_Nodes_Range o, collector
- if o.expr
- collector << "RANGE "
- visit o.expr, collector
- else
- collector << "RANGE"
+ collector << " PRECEDING"
end
- end
- def visit_Arel_Nodes_Preceding o, collector
- collector = if o.expr
- visit o.expr, collector
- else
- collector << "UNBOUNDED"
- end
-
- collector << " PRECEDING"
- end
+ def visit_Arel_Nodes_Following(o, collector)
+ collector = if o.expr
+ visit o.expr, collector
+ else
+ collector << "UNBOUNDED"
+ end
- def visit_Arel_Nodes_Following o, collector
- collector = if o.expr
- visit o.expr, collector
- else
- collector << "UNBOUNDED"
- end
+ collector << " FOLLOWING"
+ end
- collector << " FOLLOWING"
- end
+ def visit_Arel_Nodes_CurrentRow(o, collector)
+ collector << "CURRENT ROW"
+ end
- def visit_Arel_Nodes_CurrentRow o, collector
- collector << "CURRENT ROW"
- end
+ def visit_Arel_Nodes_Over(o, collector)
+ case o.right
+ when nil
+ visit(o.left, collector) << " OVER ()"
+ when Arel::Nodes::SqlLiteral
+ infix_value o, collector, " OVER "
+ when String, Symbol
+ visit(o.left, collector) << " OVER #{quote_column_name o.right.to_s}"
+ else
+ infix_value o, collector, " OVER "
+ end
+ end
- def visit_Arel_Nodes_Over o, collector
- case o.right
- when nil
- visit(o.left, collector) << " OVER ()"
- when Arel::Nodes::SqlLiteral
- infix_value o, collector, " OVER "
- when String, Symbol
- visit(o.left, collector) << " OVER #{quote_column_name o.right.to_s}"
- else
- infix_value o, collector, " OVER "
+ def visit_Arel_Nodes_Offset(o, collector)
+ collector << "OFFSET "
+ visit o.expr, collector
end
- end
- def visit_Arel_Nodes_Offset o, collector
- collector << "OFFSET "
- visit o.expr, collector
- end
+ def visit_Arel_Nodes_Limit(o, collector)
+ collector << "LIMIT "
+ visit o.expr, collector
+ end
- def visit_Arel_Nodes_Limit o, collector
- collector << "LIMIT "
- visit o.expr, collector
- end
+ # FIXME: this does nothing on most databases, but does on MSSQL
+ def visit_Arel_Nodes_Top(o, collector)
+ collector
+ end
- # FIXME: this does nothing on most databases, but does on MSSQL
- def visit_Arel_Nodes_Top o, collector
- collector
- end
+ def visit_Arel_Nodes_Lock(o, collector)
+ visit o.expr, collector
+ end
- def visit_Arel_Nodes_Lock o, collector
- visit o.expr, collector
- end
+ def visit_Arel_Nodes_Grouping(o, collector)
+ if o.expr.is_a? Nodes::Grouping
+ visit(o.expr, collector)
+ else
+ collector << "("
+ visit(o.expr, collector) << ")"
+ end
+ end
- def visit_Arel_Nodes_Grouping o, collector
- if o.expr.is_a? Nodes::Grouping
- visit(o.expr, collector)
- else
+ def visit_Arel_SelectManager(o, collector)
collector << "("
- visit(o.expr, collector) << ")"
+ visit(o.ast, collector) << ")"
end
- end
-
- def visit_Arel_SelectManager o, collector
- collector << '('
- visit(o.ast, collector) << ')'
- end
-
- def visit_Arel_Nodes_Ascending o, collector
- visit(o.expr, collector) << " ASC"
- end
- def visit_Arel_Nodes_Descending o, collector
- visit(o.expr, collector) << " DESC"
- end
-
- def visit_Arel_Nodes_Group o, collector
- visit o.expr, collector
- end
+ def visit_Arel_Nodes_Ascending(o, collector)
+ visit(o.expr, collector) << " ASC"
+ end
- def visit_Arel_Nodes_NamedFunction o, collector
- collector << o.name
- collector << "("
- collector << "DISTINCT " if o.distinct
- collector = inject_join(o.expressions, collector, ", ") << ")"
- if o.alias
- collector << " AS "
- visit o.alias, collector
- else
- collector
+ def visit_Arel_Nodes_Descending(o, collector)
+ visit(o.expr, collector) << " DESC"
end
- end
- def visit_Arel_Nodes_Extract o, collector
- collector << "EXTRACT(#{o.field.to_s.upcase} FROM "
- visit(o.expr, collector) << ")"
- end
+ def visit_Arel_Nodes_Group(o, collector)
+ visit o.expr, collector
+ end
- def visit_Arel_Nodes_Count o, collector
- aggregate "COUNT", o, collector
- end
+ def visit_Arel_Nodes_NamedFunction(o, collector)
+ collector << o.name
+ collector << "("
+ collector << "DISTINCT " if o.distinct
+ collector = inject_join(o.expressions, collector, ", ") << ")"
+ if o.alias
+ collector << " AS "
+ visit o.alias, collector
+ else
+ collector
+ end
+ end
- def visit_Arel_Nodes_Sum o, collector
- aggregate "SUM", o, collector
- end
+ def visit_Arel_Nodes_Extract(o, collector)
+ collector << "EXTRACT(#{o.field.to_s.upcase} FROM "
+ visit(o.expr, collector) << ")"
+ end
- def visit_Arel_Nodes_Max o, collector
- aggregate "MAX", o, collector
- end
+ def visit_Arel_Nodes_Count(o, collector)
+ aggregate "COUNT", o, collector
+ end
- def visit_Arel_Nodes_Min o, collector
- aggregate "MIN", o, collector
- end
+ def visit_Arel_Nodes_Sum(o, collector)
+ aggregate "SUM", o, collector
+ end
- def visit_Arel_Nodes_Avg o, collector
- aggregate "AVG", o, collector
- end
+ def visit_Arel_Nodes_Max(o, collector)
+ aggregate "MAX", o, collector
+ end
- def visit_Arel_Nodes_TableAlias o, collector
- collector = visit o.relation, collector
- collector << " "
- collector << quote_table_name(o.name)
- end
+ def visit_Arel_Nodes_Min(o, collector)
+ aggregate "MIN", o, collector
+ end
- def visit_Arel_Nodes_Between o, collector
- collector = visit o.left, collector
- collector << " BETWEEN "
- visit o.right, collector
- end
+ def visit_Arel_Nodes_Avg(o, collector)
+ aggregate "AVG", o, collector
+ end
- def visit_Arel_Nodes_GreaterThanOrEqual o, collector
- collector = visit o.left, collector
- collector << " >= "
- visit o.right, collector
- end
+ def visit_Arel_Nodes_TableAlias(o, collector)
+ collector = visit o.relation, collector
+ collector << " "
+ collector << quote_table_name(o.name)
+ end
- def visit_Arel_Nodes_GreaterThan o, collector
- collector = visit o.left, collector
- collector << " > "
- visit o.right, collector
- end
+ def visit_Arel_Nodes_Between(o, collector)
+ collector = visit o.left, collector
+ collector << " BETWEEN "
+ visit o.right, collector
+ end
- def visit_Arel_Nodes_LessThanOrEqual o, collector
- collector = visit o.left, collector
- collector << " <= "
- visit o.right, collector
- end
+ def visit_Arel_Nodes_GreaterThanOrEqual(o, collector)
+ collector = visit o.left, collector
+ collector << " >= "
+ visit o.right, collector
+ end
- def visit_Arel_Nodes_LessThan o, collector
- collector = visit o.left, collector
- collector << " < "
- visit o.right, collector
- end
+ def visit_Arel_Nodes_GreaterThan(o, collector)
+ collector = visit o.left, collector
+ collector << " > "
+ visit o.right, collector
+ end
- def visit_Arel_Nodes_Matches o, collector
- collector = visit o.left, collector
- collector << " LIKE "
- collector = visit o.right, collector
- if o.escape
- collector << ' ESCAPE '
- visit o.escape, collector
- else
- collector
+ def visit_Arel_Nodes_LessThanOrEqual(o, collector)
+ collector = visit o.left, collector
+ collector << " <= "
+ visit o.right, collector
end
- end
- def visit_Arel_Nodes_DoesNotMatch o, collector
- collector = visit o.left, collector
- collector << " NOT LIKE "
- collector = visit o.right, collector
- if o.escape
- collector << ' ESCAPE '
- visit o.escape, collector
- else
- collector
+ def visit_Arel_Nodes_LessThan(o, collector)
+ collector = visit o.left, collector
+ collector << " < "
+ visit o.right, collector
end
- end
- def visit_Arel_Nodes_JoinSource o, collector
- if o.left
+ def visit_Arel_Nodes_Matches(o, collector)
collector = visit o.left, collector
+ collector << " LIKE "
+ collector = visit o.right, collector
+ if o.escape
+ collector << " ESCAPE "
+ visit o.escape, collector
+ else
+ collector
+ end
end
- if o.right.any?
- collector << SPACE if o.left
- collector = inject_join o.right, collector, SPACE
+
+ def visit_Arel_Nodes_DoesNotMatch(o, collector)
+ collector = visit o.left, collector
+ collector << " NOT LIKE "
+ collector = visit o.right, collector
+ if o.escape
+ collector << " ESCAPE "
+ visit o.escape, collector
+ else
+ collector
+ end
end
- collector
- end
- def visit_Arel_Nodes_Regexp o, collector
- raise NotImplementedError, '~ not implemented for this db'
- end
+ def visit_Arel_Nodes_JoinSource(o, collector)
+ if o.left
+ collector = visit o.left, collector
+ end
+ if o.right.any?
+ collector << SPACE if o.left
+ collector = inject_join o.right, collector, SPACE
+ end
+ collector
+ end
- def visit_Arel_Nodes_NotRegexp o, collector
- raise NotImplementedError, '!~ not implemented for this db'
- end
+ def visit_Arel_Nodes_Regexp(o, collector)
+ raise NotImplementedError, "~ not implemented for this db"
+ end
- def visit_Arel_Nodes_StringJoin o, collector
- visit o.left, collector
- end
+ def visit_Arel_Nodes_NotRegexp(o, collector)
+ raise NotImplementedError, "!~ not implemented for this db"
+ end
- def visit_Arel_Nodes_FullOuterJoin o, collector
- collector << "FULL OUTER JOIN "
- collector = visit o.left, collector
- collector << SPACE
- visit o.right, collector
- end
+ def visit_Arel_Nodes_StringJoin(o, collector)
+ visit o.left, collector
+ end
- def visit_Arel_Nodes_OuterJoin o, collector
- collector << "LEFT OUTER JOIN "
- collector = visit o.left, collector
- collector << " "
- visit o.right, collector
- end
+ def visit_Arel_Nodes_FullOuterJoin(o, collector)
+ collector << "FULL OUTER JOIN "
+ collector = visit o.left, collector
+ collector << SPACE
+ visit o.right, collector
+ end
- def visit_Arel_Nodes_RightOuterJoin o, collector
- collector << "RIGHT OUTER JOIN "
- collector = visit o.left, collector
- collector << SPACE
- visit o.right, collector
- end
+ def visit_Arel_Nodes_OuterJoin(o, collector)
+ collector << "LEFT OUTER JOIN "
+ collector = visit o.left, collector
+ collector << " "
+ visit o.right, collector
+ end
- def visit_Arel_Nodes_InnerJoin o, collector
- collector << "INNER JOIN "
- collector = visit o.left, collector
- if o.right
+ def visit_Arel_Nodes_RightOuterJoin(o, collector)
+ collector << "RIGHT OUTER JOIN "
+ collector = visit o.left, collector
collector << SPACE
- visit(o.right, collector)
- else
- collector
+ visit o.right, collector
end
- end
- def visit_Arel_Nodes_On o, collector
- collector << "ON "
- visit o.expr, collector
- end
+ def visit_Arel_Nodes_InnerJoin(o, collector)
+ collector << "INNER JOIN "
+ collector = visit o.left, collector
+ if o.right
+ collector << SPACE
+ visit(o.right, collector)
+ else
+ collector
+ end
+ end
- def visit_Arel_Nodes_Not o, collector
- collector << "NOT ("
- visit(o.expr, collector) << ")"
- end
+ def visit_Arel_Nodes_On(o, collector)
+ collector << "ON "
+ visit o.expr, collector
+ end
- def visit_Arel_Table o, collector
- if o.table_alias
- collector << "#{quote_table_name o.name} #{quote_table_name o.table_alias}"
- else
- collector << quote_table_name(o.name)
+ def visit_Arel_Nodes_Not(o, collector)
+ collector << "NOT ("
+ visit(o.expr, collector) << ")"
end
- end
- def visit_Arel_Nodes_In o, collector
- if Array === o.right && o.right.empty?
- collector << '1=0'
- else
- collector = visit o.left, collector
- collector << " IN ("
- visit(o.right, collector) << ")"
+ def visit_Arel_Table(o, collector)
+ if o.table_alias
+ collector << "#{quote_table_name o.name} #{quote_table_name o.table_alias}"
+ else
+ collector << quote_table_name(o.name)
+ end
end
- end
- def visit_Arel_Nodes_NotIn o, collector
- if Array === o.right && o.right.empty?
- collector << '1=1'
- else
- collector = visit o.left, collector
- collector << " NOT IN ("
- collector = visit o.right, collector
- collector << ")"
+ def visit_Arel_Nodes_In(o, collector)
+ if Array === o.right && o.right.empty?
+ collector << "1=0"
+ else
+ collector = visit o.left, collector
+ collector << " IN ("
+ visit(o.right, collector) << ")"
+ end
end
- end
- def visit_Arel_Nodes_And o, collector
- inject_join o.children, collector, " AND "
- end
+ def visit_Arel_Nodes_NotIn(o, collector)
+ if Array === o.right && o.right.empty?
+ collector << "1=1"
+ else
+ collector = visit o.left, collector
+ collector << " NOT IN ("
+ collector = visit o.right, collector
+ collector << ")"
+ end
+ end
- def visit_Arel_Nodes_Or o, collector
- collector = visit o.left, collector
- collector << " OR "
- visit o.right, collector
- end
+ def visit_Arel_Nodes_And(o, collector)
+ inject_join o.children, collector, " AND "
+ end
- def visit_Arel_Nodes_Assignment o, collector
- case o.right
- when Arel::Nodes::UnqualifiedColumn, Arel::Attributes::Attribute, Arel::Nodes::BindParam
+ def visit_Arel_Nodes_Or(o, collector)
collector = visit o.left, collector
- collector << " = "
+ collector << " OR "
visit o.right, collector
- else
- collector = visit o.left, collector
- collector << " = "
- collector << quote(o.right).to_s
end
- end
- def visit_Arel_Nodes_Equality o, collector
- right = o.right
+ def visit_Arel_Nodes_Assignment(o, collector)
+ case o.right
+ when Arel::Nodes::UnqualifiedColumn, Arel::Attributes::Attribute, Arel::Nodes::BindParam
+ collector = visit o.left, collector
+ collector << " = "
+ visit o.right, collector
+ else
+ collector = visit o.left, collector
+ collector << " = "
+ collector << quote(o.right).to_s
+ end
+ end
+
+ def visit_Arel_Nodes_Equality(o, collector)
+ right = o.right
- collector = visit o.left, collector
+ collector = visit o.left, collector
- if right.nil?
- collector << " IS NULL"
- else
- collector << " = "
- visit right, collector
+ if right.nil?
+ collector << " IS NULL"
+ else
+ collector << " = "
+ visit right, collector
+ end
end
- end
- def visit_Arel_Nodes_NotEqual o, collector
- right = o.right
+ def visit_Arel_Nodes_NotEqual(o, collector)
+ right = o.right
- collector = visit o.left, collector
+ collector = visit o.left, collector
- if right.nil?
- collector << " IS NOT NULL"
- else
- collector << " != "
- visit right, collector
+ if right.nil?
+ collector << " IS NOT NULL"
+ else
+ collector << " != "
+ visit right, collector
+ end
end
- end
- def visit_Arel_Nodes_As o, collector
- collector = visit o.left, collector
- collector << " AS "
- visit o.right, collector
- end
+ def visit_Arel_Nodes_As(o, collector)
+ collector = visit o.left, collector
+ collector << " AS "
+ visit o.right, collector
+ end
- def visit_Arel_Nodes_Case o, collector
- collector << "CASE "
- if o.case
- visit o.case, collector
- collector << " "
+ def visit_Arel_Nodes_Case(o, collector)
+ collector << "CASE "
+ if o.case
+ visit o.case, collector
+ collector << " "
+ end
+ o.conditions.each do |condition|
+ visit condition, collector
+ collector << " "
+ end
+ if o.default
+ visit o.default, collector
+ collector << " "
+ end
+ collector << "END"
end
- o.conditions.each do |condition|
- visit condition, collector
- collector << " "
+
+ def visit_Arel_Nodes_When(o, collector)
+ collector << "WHEN "
+ visit o.left, collector
+ collector << " THEN "
+ visit o.right, collector
end
- if o.default
- visit o.default, collector
- collector << " "
+
+ def visit_Arel_Nodes_Else(o, collector)
+ collector << "ELSE "
+ visit o.expr, collector
end
- collector << "END"
- end
- def visit_Arel_Nodes_When o, collector
- collector << "WHEN "
- visit o.left, collector
- collector << " THEN "
- visit o.right, collector
- end
+ def visit_Arel_Nodes_UnqualifiedColumn(o, collector)
+ collector << "#{quote_column_name o.name}"
+ collector
+ end
- def visit_Arel_Nodes_Else o, collector
- collector << "ELSE "
- visit o.expr, collector
- end
+ def visit_Arel_Attributes_Attribute(o, collector)
+ join_name = o.relation.table_alias || o.relation.name
+ collector << "#{quote_table_name join_name}.#{quote_column_name o.name}"
+ end
+ alias :visit_Arel_Attributes_Integer :visit_Arel_Attributes_Attribute
+ alias :visit_Arel_Attributes_Float :visit_Arel_Attributes_Attribute
+ alias :visit_Arel_Attributes_Decimal :visit_Arel_Attributes_Attribute
+ alias :visit_Arel_Attributes_String :visit_Arel_Attributes_Attribute
+ alias :visit_Arel_Attributes_Time :visit_Arel_Attributes_Attribute
+ alias :visit_Arel_Attributes_Boolean :visit_Arel_Attributes_Attribute
- def visit_Arel_Nodes_UnqualifiedColumn o, collector
- collector << "#{quote_column_name o.name}"
- collector
- end
+ def literal(o, collector); collector << o.to_s; end
- def visit_Arel_Attributes_Attribute o, collector
- join_name = o.relation.table_alias || o.relation.name
- collector << "#{quote_table_name join_name}.#{quote_column_name o.name}"
- end
- alias :visit_Arel_Attributes_Integer :visit_Arel_Attributes_Attribute
- alias :visit_Arel_Attributes_Float :visit_Arel_Attributes_Attribute
- alias :visit_Arel_Attributes_Decimal :visit_Arel_Attributes_Attribute
- alias :visit_Arel_Attributes_String :visit_Arel_Attributes_Attribute
- alias :visit_Arel_Attributes_Time :visit_Arel_Attributes_Attribute
- alias :visit_Arel_Attributes_Boolean :visit_Arel_Attributes_Attribute
+ def visit_Arel_Nodes_BindParam(o, collector)
+ collector.add_bind(o.value) { "?" }
+ end
- def literal o, collector; collector << o.to_s; end
+ alias :visit_Arel_Nodes_SqlLiteral :literal
+ alias :visit_Bignum :literal
+ alias :visit_Fixnum :literal
+ alias :visit_Integer :literal
- def visit_Arel_Nodes_BindParam o, collector
- collector.add_bind(o.value) { "?" }
- end
+ def quoted(o, a)
+ if a && a.able_to_type_cast?
+ quote(a.type_cast_for_database(o))
+ else
+ quote(o)
+ end
+ end
+
+ def unsupported(o, collector)
+ raise UnsupportedVisitError.new(o)
+ end
- alias :visit_Arel_Nodes_SqlLiteral :literal
- alias :visit_Bignum :literal
- alias :visit_Fixnum :literal
- alias :visit_Integer :literal
+ alias :visit_ActiveSupport_Multibyte_Chars :unsupported
+ alias :visit_ActiveSupport_StringInquirer :unsupported
+ alias :visit_BigDecimal :unsupported
+ alias :visit_Class :unsupported
+ alias :visit_Date :unsupported
+ alias :visit_DateTime :unsupported
+ alias :visit_FalseClass :unsupported
+ alias :visit_Float :unsupported
+ alias :visit_Hash :unsupported
+ alias :visit_NilClass :unsupported
+ alias :visit_String :unsupported
+ alias :visit_Symbol :unsupported
+ alias :visit_Time :unsupported
+ alias :visit_TrueClass :unsupported
- def quoted o, a
- if a && a.able_to_type_cast?
- quote(a.type_cast_for_database(o))
- else
- quote(o)
+ def visit_Arel_Nodes_InfixOperation(o, collector)
+ collector = visit o.left, collector
+ collector << " #{o.operator} "
+ visit o.right, collector
end
- end
- def unsupported o, collector
- raise UnsupportedVisitError.new(o)
- end
+ alias :visit_Arel_Nodes_Addition :visit_Arel_Nodes_InfixOperation
+ alias :visit_Arel_Nodes_Subtraction :visit_Arel_Nodes_InfixOperation
+ alias :visit_Arel_Nodes_Multiplication :visit_Arel_Nodes_InfixOperation
+ alias :visit_Arel_Nodes_Division :visit_Arel_Nodes_InfixOperation
- alias :visit_ActiveSupport_Multibyte_Chars :unsupported
- alias :visit_ActiveSupport_StringInquirer :unsupported
- alias :visit_BigDecimal :unsupported
- alias :visit_Class :unsupported
- alias :visit_Date :unsupported
- alias :visit_DateTime :unsupported
- alias :visit_FalseClass :unsupported
- alias :visit_Float :unsupported
- alias :visit_Hash :unsupported
- alias :visit_NilClass :unsupported
- alias :visit_String :unsupported
- alias :visit_Symbol :unsupported
- alias :visit_Time :unsupported
- alias :visit_TrueClass :unsupported
-
- def visit_Arel_Nodes_InfixOperation o, collector
- collector = visit o.left, collector
- collector << " #{o.operator} "
- visit o.right, collector
- end
+ def visit_Arel_Nodes_UnaryOperation(o, collector)
+ collector << " #{o.operator} "
+ visit o.expr, collector
+ end
- alias :visit_Arel_Nodes_Addition :visit_Arel_Nodes_InfixOperation
- alias :visit_Arel_Nodes_Subtraction :visit_Arel_Nodes_InfixOperation
- alias :visit_Arel_Nodes_Multiplication :visit_Arel_Nodes_InfixOperation
- alias :visit_Arel_Nodes_Division :visit_Arel_Nodes_InfixOperation
+ def visit_Array(o, collector)
+ inject_join o, collector, ", "
+ end
+ alias :visit_Set :visit_Array
- def visit_Arel_Nodes_UnaryOperation o, collector
- collector << " #{o.operator} "
- visit o.expr, collector
- end
+ def quote(value)
+ return value if Arel::Nodes::SqlLiteral === value
+ @connection.quote value
+ end
- def visit_Array o, collector
- inject_join o, collector, ", "
- end
- alias :visit_Set :visit_Array
+ def quote_table_name(name)
+ return name if Arel::Nodes::SqlLiteral === name
+ @connection.quote_table_name(name)
+ end
- def quote value
- return value if Arel::Nodes::SqlLiteral === value
- @connection.quote value
- end
+ def quote_column_name(name)
+ return name if Arel::Nodes::SqlLiteral === name
+ @connection.quote_column_name(name)
+ end
- def quote_table_name name
- return name if Arel::Nodes::SqlLiteral === name
- @connection.quote_table_name(name)
- end
+ def maybe_visit(thing, collector)
+ return collector unless thing
+ collector << " "
+ visit thing, collector
+ end
- def quote_column_name name
- return name if Arel::Nodes::SqlLiteral === name
- @connection.quote_column_name(name)
- end
+ def inject_join(list, collector, join_str)
+ len = list.length - 1
+ list.each_with_index.inject(collector) { |c, (x, i)|
+ if i == len
+ visit x, c
+ else
+ visit(x, c) << join_str
+ end
+ }
+ end
- def maybe_visit thing, collector
- return collector unless thing
- collector << " "
- visit thing, collector
- end
+ def infix_value(o, collector, value)
+ collector = visit o.left, collector
+ collector << value
+ visit o.right, collector
+ end
- def inject_join list, collector, join_str
- len = list.length - 1
- list.each_with_index.inject(collector) { |c, (x,i)|
- if i == len
- visit x, c
+ def aggregate(name, o, collector)
+ collector << "#{name}("
+ if o.distinct
+ collector << "DISTINCT "
+ end
+ collector = inject_join(o.expressions, collector, ", ") << ")"
+ if o.alias
+ collector << " AS "
+ visit o.alias, collector
else
- visit(x, c) << join_str
+ collector
end
- }
- end
-
- def infix_value o, collector, value
- collector = visit o.left, collector
- collector << value
- visit o.right, collector
- end
-
- def aggregate name, o, collector
- collector << "#{name}("
- if o.distinct
- collector << "DISTINCT "
end
- collector = inject_join(o.expressions, collector, ", ") << ")"
- if o.alias
- collector << " AS "
- visit o.alias, collector
- else
- collector
- end
- end
end
end
end
diff --git a/activerecord/lib/arel/visitors/visitor.rb b/activerecord/lib/arel/visitors/visitor.rb
index f156be9a0a..6cbe5caf8c 100644
--- a/activerecord/lib/arel/visitors/visitor.rb
+++ b/activerecord/lib/arel/visitors/visitor.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Visitors
class Visitor
@@ -6,36 +7,36 @@ module Arel
@dispatch = get_dispatch_cache
end
- def accept object, *args
+ def accept(object, *args)
visit object, *args
end
private
- attr_reader :dispatch
+ attr_reader :dispatch
- def self.dispatch_cache
- Hash.new do |hash, klass|
- hash[klass] = "visit_#{(klass.name || '').gsub('::', '_')}"
+ def self.dispatch_cache
+ Hash.new do |hash, klass|
+ hash[klass] = "visit_#{(klass.name || '').gsub('::', '_')}"
+ end
end
- end
- def get_dispatch_cache
- self.class.dispatch_cache
- end
+ def get_dispatch_cache
+ self.class.dispatch_cache
+ end
- def visit object, *args
- dispatch_method = dispatch[object.class]
- send dispatch_method, object, *args
- rescue NoMethodError => e
- raise e if respond_to?(dispatch_method, true)
- superklass = object.class.ancestors.find { |klass|
- respond_to?(dispatch[klass], true)
- }
- raise(TypeError, "Cannot visit #{object.class}") unless superklass
- dispatch[object.class] = dispatch[superklass]
- retry
- end
+ def visit(object, *args)
+ dispatch_method = dispatch[object.class]
+ send dispatch_method, object, *args
+ rescue NoMethodError => e
+ raise e if respond_to?(dispatch_method, true)
+ superklass = object.class.ancestors.find { |klass|
+ respond_to?(dispatch[klass], true)
+ }
+ raise(TypeError, "Cannot visit #{object.class}") unless superklass
+ dispatch[object.class] = dispatch[superklass]
+ retry
+ end
end
end
end
diff --git a/activerecord/lib/arel/visitors/where_sql.rb b/activerecord/lib/arel/visitors/where_sql.rb
index 55e6ca9a21..d9c87f0130 100644
--- a/activerecord/lib/arel/visitors/where_sql.rb
+++ b/activerecord/lib/arel/visitors/where_sql.rb
@@ -1,4 +1,5 @@
# frozen_string_literal: true
+
module Arel
module Visitors
class WhereSql < Arel::Visitors::ToSql
@@ -9,14 +10,14 @@ module Arel
private
- def visit_Arel_Nodes_SelectCore o, collector
- collector << "WHERE "
- wheres = o.wheres.map do |where|
- Nodes::SqlLiteral.new(@inner_visitor.accept(where, collector.class.new).value)
- end
+ def visit_Arel_Nodes_SelectCore(o, collector)
+ collector << "WHERE "
+ wheres = o.wheres.map do |where|
+ Nodes::SqlLiteral.new(@inner_visitor.accept(where, collector.class.new).value)
+ end
- inject_join wheres, collector, ' AND '
- end
+ inject_join wheres, collector, " AND "
+ end
end
end
end
diff --git a/activerecord/lib/arel/window_predications.rb b/activerecord/lib/arel/window_predications.rb
index f93dede036..60d8f05b3c 100644
--- a/activerecord/lib/arel/window_predications.rb
+++ b/activerecord/lib/arel/window_predications.rb
@@ -1,10 +1,9 @@
# frozen_string_literal: true
+
module Arel
module WindowPredications
-
def over(expr = nil)
Nodes::Over.new(self, expr)
end
-
end
-end \ No newline at end of file
+end
diff --git a/activerecord/test/cases/arel/attributes/attribute_test.rb b/activerecord/test/cases/arel/attributes/attribute_test.rb
index 802d6e743f..52573021a5 100644
--- a/activerecord/test/cases/arel/attributes/attribute_test.rb
+++ b/activerecord/test/cases/arel/attributes/attribute_test.rb
@@ -1,17 +1,18 @@
# frozen_string_literal: true
-require_relative '../helper'
-require 'ostruct'
+
+require_relative "../helper"
+require "ostruct"
module Arel
module Attributes
class AttributeTest < Arel::Spec
- describe '#not_eq' do
- it 'should create a NotEqual node' do
+ describe "#not_eq" do
+ it "should create a NotEqual node" do
relation = Table.new(:users)
relation[:id].not_eq(10).must_be_kind_of Nodes::NotEqual
end
- it 'should generate != in sql' do
+ it "should generate != in sql" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
mgr.where relation[:id].not_eq(10)
@@ -20,7 +21,7 @@ module Arel
}
end
- it 'should handle nil' do
+ it "should handle nil" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
mgr.where relation[:id].not_eq(nil)
@@ -30,45 +31,45 @@ module Arel
end
end
- describe '#not_eq_any' do
- it 'should create a Grouping node' do
+ describe "#not_eq_any" do
+ it "should create a Grouping node" do
relation = Table.new(:users)
- relation[:id].not_eq_any([1,2]).must_be_kind_of Nodes::Grouping
+ relation[:id].not_eq_any([1, 2]).must_be_kind_of Nodes::Grouping
end
- it 'should generate ORs in sql' do
+ it "should generate ORs in sql" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
- mgr.where relation[:id].not_eq_any([1,2])
+ mgr.where relation[:id].not_eq_any([1, 2])
mgr.to_sql.must_be_like %{
SELECT "users"."id" FROM "users" WHERE ("users"."id" != 1 OR "users"."id" != 2)
}
end
end
- describe '#not_eq_all' do
- it 'should create a Grouping node' do
+ describe "#not_eq_all" do
+ it "should create a Grouping node" do
relation = Table.new(:users)
- relation[:id].not_eq_all([1,2]).must_be_kind_of Nodes::Grouping
+ relation[:id].not_eq_all([1, 2]).must_be_kind_of Nodes::Grouping
end
- it 'should generate ANDs in sql' do
+ it "should generate ANDs in sql" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
- mgr.where relation[:id].not_eq_all([1,2])
+ mgr.where relation[:id].not_eq_all([1, 2])
mgr.to_sql.must_be_like %{
SELECT "users"."id" FROM "users" WHERE ("users"."id" != 1 AND "users"."id" != 2)
}
end
end
- describe '#gt' do
- it 'should create a GreaterThan node' do
+ describe "#gt" do
+ it "should create a GreaterThan node" do
relation = Table.new(:users)
relation[:id].gt(10).must_be_kind_of Nodes::GreaterThan
end
- it 'should generate > in sql' do
+ it "should generate > in sql" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
mgr.where relation[:id].gt(10)
@@ -77,7 +78,7 @@ module Arel
}
end
- it 'should handle comparing with a subquery' do
+ it "should handle comparing with a subquery" do
users = Table.new(:users)
avg = users.project(users[:karma].average)
@@ -88,10 +89,10 @@ module Arel
}
end
- it 'should accept various data types.' do
+ it "should accept various data types." do
relation = Table.new(:users)
mgr = relation.project relation[:id]
- mgr.where relation[:name].gt('fake_name')
+ mgr.where relation[:name].gt("fake_name")
mgr.to_sql.must_match %{"users"."name" > 'fake_name'}
current_time = ::Time.now
@@ -100,45 +101,45 @@ module Arel
end
end
- describe '#gt_any' do
- it 'should create a Grouping node' do
+ describe "#gt_any" do
+ it "should create a Grouping node" do
relation = Table.new(:users)
- relation[:id].gt_any([1,2]).must_be_kind_of Nodes::Grouping
+ relation[:id].gt_any([1, 2]).must_be_kind_of Nodes::Grouping
end
- it 'should generate ORs in sql' do
+ it "should generate ORs in sql" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
- mgr.where relation[:id].gt_any([1,2])
+ mgr.where relation[:id].gt_any([1, 2])
mgr.to_sql.must_be_like %{
SELECT "users"."id" FROM "users" WHERE ("users"."id" > 1 OR "users"."id" > 2)
}
end
end
- describe '#gt_all' do
- it 'should create a Grouping node' do
+ describe "#gt_all" do
+ it "should create a Grouping node" do
relation = Table.new(:users)
- relation[:id].gt_all([1,2]).must_be_kind_of Nodes::Grouping
+ relation[:id].gt_all([1, 2]).must_be_kind_of Nodes::Grouping
end
- it 'should generate ANDs in sql' do
+ it "should generate ANDs in sql" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
- mgr.where relation[:id].gt_all([1,2])
+ mgr.where relation[:id].gt_all([1, 2])
mgr.to_sql.must_be_like %{
SELECT "users"."id" FROM "users" WHERE ("users"."id" > 1 AND "users"."id" > 2)
}
end
end
- describe '#gteq' do
- it 'should create a GreaterThanOrEqual node' do
+ describe "#gteq" do
+ it "should create a GreaterThanOrEqual node" do
relation = Table.new(:users)
relation[:id].gteq(10).must_be_kind_of Nodes::GreaterThanOrEqual
end
- it 'should generate >= in sql' do
+ it "should generate >= in sql" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
mgr.where relation[:id].gteq(10)
@@ -147,10 +148,10 @@ module Arel
}
end
- it 'should accept various data types.' do
+ it "should accept various data types." do
relation = Table.new(:users)
mgr = relation.project relation[:id]
- mgr.where relation[:name].gteq('fake_name')
+ mgr.where relation[:name].gteq("fake_name")
mgr.to_sql.must_match %{"users"."name" >= 'fake_name'}
current_time = ::Time.now
@@ -159,45 +160,45 @@ module Arel
end
end
- describe '#gteq_any' do
- it 'should create a Grouping node' do
+ describe "#gteq_any" do
+ it "should create a Grouping node" do
relation = Table.new(:users)
- relation[:id].gteq_any([1,2]).must_be_kind_of Nodes::Grouping
+ relation[:id].gteq_any([1, 2]).must_be_kind_of Nodes::Grouping
end
- it 'should generate ORs in sql' do
+ it "should generate ORs in sql" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
- mgr.where relation[:id].gteq_any([1,2])
+ mgr.where relation[:id].gteq_any([1, 2])
mgr.to_sql.must_be_like %{
SELECT "users"."id" FROM "users" WHERE ("users"."id" >= 1 OR "users"."id" >= 2)
}
end
end
- describe '#gteq_all' do
- it 'should create a Grouping node' do
+ describe "#gteq_all" do
+ it "should create a Grouping node" do
relation = Table.new(:users)
- relation[:id].gteq_all([1,2]).must_be_kind_of Nodes::Grouping
+ relation[:id].gteq_all([1, 2]).must_be_kind_of Nodes::Grouping
end
- it 'should generate ANDs in sql' do
+ it "should generate ANDs in sql" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
- mgr.where relation[:id].gteq_all([1,2])
+ mgr.where relation[:id].gteq_all([1, 2])
mgr.to_sql.must_be_like %{
SELECT "users"."id" FROM "users" WHERE ("users"."id" >= 1 AND "users"."id" >= 2)
}
end
end
- describe '#lt' do
- it 'should create a LessThan node' do
+ describe "#lt" do
+ it "should create a LessThan node" do
relation = Table.new(:users)
relation[:id].lt(10).must_be_kind_of Nodes::LessThan
end
- it 'should generate < in sql' do
+ it "should generate < in sql" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
mgr.where relation[:id].lt(10)
@@ -206,10 +207,10 @@ module Arel
}
end
- it 'should accept various data types.' do
+ it "should accept various data types." do
relation = Table.new(:users)
mgr = relation.project relation[:id]
- mgr.where relation[:name].lt('fake_name')
+ mgr.where relation[:name].lt("fake_name")
mgr.to_sql.must_match %{"users"."name" < 'fake_name'}
current_time = ::Time.now
@@ -218,45 +219,45 @@ module Arel
end
end
- describe '#lt_any' do
- it 'should create a Grouping node' do
+ describe "#lt_any" do
+ it "should create a Grouping node" do
relation = Table.new(:users)
- relation[:id].lt_any([1,2]).must_be_kind_of Nodes::Grouping
+ relation[:id].lt_any([1, 2]).must_be_kind_of Nodes::Grouping
end
- it 'should generate ORs in sql' do
+ it "should generate ORs in sql" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
- mgr.where relation[:id].lt_any([1,2])
+ mgr.where relation[:id].lt_any([1, 2])
mgr.to_sql.must_be_like %{
SELECT "users"."id" FROM "users" WHERE ("users"."id" < 1 OR "users"."id" < 2)
}
end
end
- describe '#lt_all' do
- it 'should create a Grouping node' do
+ describe "#lt_all" do
+ it "should create a Grouping node" do
relation = Table.new(:users)
- relation[:id].lt_all([1,2]).must_be_kind_of Nodes::Grouping
+ relation[:id].lt_all([1, 2]).must_be_kind_of Nodes::Grouping
end
- it 'should generate ANDs in sql' do
+ it "should generate ANDs in sql" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
- mgr.where relation[:id].lt_all([1,2])
+ mgr.where relation[:id].lt_all([1, 2])
mgr.to_sql.must_be_like %{
SELECT "users"."id" FROM "users" WHERE ("users"."id" < 1 AND "users"."id" < 2)
}
end
end
- describe '#lteq' do
- it 'should create a LessThanOrEqual node' do
+ describe "#lteq" do
+ it "should create a LessThanOrEqual node" do
relation = Table.new(:users)
relation[:id].lteq(10).must_be_kind_of Nodes::LessThanOrEqual
end
- it 'should generate <= in sql' do
+ it "should generate <= in sql" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
mgr.where relation[:id].lteq(10)
@@ -265,10 +266,10 @@ module Arel
}
end
- it 'should accept various data types.' do
+ it "should accept various data types." do
relation = Table.new(:users)
mgr = relation.project relation[:id]
- mgr.where relation[:name].lteq('fake_name')
+ mgr.where relation[:name].lteq("fake_name")
mgr.to_sql.must_match %{"users"."name" <= 'fake_name'}
current_time = ::Time.now
@@ -277,45 +278,45 @@ module Arel
end
end
- describe '#lteq_any' do
- it 'should create a Grouping node' do
+ describe "#lteq_any" do
+ it "should create a Grouping node" do
relation = Table.new(:users)
- relation[:id].lteq_any([1,2]).must_be_kind_of Nodes::Grouping
+ relation[:id].lteq_any([1, 2]).must_be_kind_of Nodes::Grouping
end
- it 'should generate ORs in sql' do
+ it "should generate ORs in sql" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
- mgr.where relation[:id].lteq_any([1,2])
+ mgr.where relation[:id].lteq_any([1, 2])
mgr.to_sql.must_be_like %{
SELECT "users"."id" FROM "users" WHERE ("users"."id" <= 1 OR "users"."id" <= 2)
}
end
end
- describe '#lteq_all' do
- it 'should create a Grouping node' do
+ describe "#lteq_all" do
+ it "should create a Grouping node" do
relation = Table.new(:users)
- relation[:id].lteq_all([1,2]).must_be_kind_of Nodes::Grouping
+ relation[:id].lteq_all([1, 2]).must_be_kind_of Nodes::Grouping
end
- it 'should generate ANDs in sql' do
+ it "should generate ANDs in sql" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
- mgr.where relation[:id].lteq_all([1,2])
+ mgr.where relation[:id].lteq_all([1, 2])
mgr.to_sql.must_be_like %{
SELECT "users"."id" FROM "users" WHERE ("users"."id" <= 1 AND "users"."id" <= 2)
}
end
end
- describe '#average' do
- it 'should create a AVG node' do
+ describe "#average" do
+ it "should create a AVG node" do
relation = Table.new(:users)
relation[:id].average.must_be_kind_of Nodes::Avg
end
- it 'should generate the proper SQL' do
+ it "should generate the proper SQL" do
relation = Table.new(:users)
mgr = relation.project relation[:id].average
mgr.to_sql.must_be_like %{
@@ -325,13 +326,13 @@ module Arel
end
end
- describe '#maximum' do
- it 'should create a MAX node' do
+ describe "#maximum" do
+ it "should create a MAX node" do
relation = Table.new(:users)
relation[:id].maximum.must_be_kind_of Nodes::Max
end
- it 'should generate proper SQL' do
+ it "should generate proper SQL" do
relation = Table.new(:users)
mgr = relation.project relation[:id].maximum
mgr.to_sql.must_be_like %{
@@ -341,13 +342,13 @@ module Arel
end
end
- describe '#minimum' do
- it 'should create a Min node' do
+ describe "#minimum" do
+ it "should create a Min node" do
relation = Table.new(:users)
relation[:id].minimum.must_be_kind_of Nodes::Min
end
- it 'should generate proper SQL' do
+ it "should generate proper SQL" do
relation = Table.new(:users)
mgr = relation.project relation[:id].minimum
mgr.to_sql.must_be_like %{
@@ -357,13 +358,13 @@ module Arel
end
end
- describe '#sum' do
- it 'should create a SUM node' do
+ describe "#sum" do
+ it "should create a SUM node" do
relation = Table.new(:users)
relation[:id].sum.must_be_kind_of Nodes::Sum
end
- it 'should generate the proper SQL' do
+ it "should generate the proper SQL" do
relation = Table.new(:users)
mgr = relation.project relation[:id].sum
mgr.to_sql.must_be_like %{
@@ -373,13 +374,13 @@ module Arel
end
end
- describe '#count' do
- it 'should return a count node' do
+ describe "#count" do
+ it "should return a count node" do
relation = Table.new(:users)
relation[:id].count.must_be_kind_of Nodes::Count
end
- it 'should take a distinct param' do
+ it "should take a distinct param" do
relation = Table.new(:users)
count = relation[:id].count(nil)
count.must_be_kind_of Nodes::Count
@@ -387,8 +388,8 @@ module Arel
end
end
- describe '#eq' do
- it 'should return an equality node' do
+ describe "#eq" do
+ it "should return an equality node" do
attribute = Attribute.new nil, nil
equality = attribute.eq 1
equality.left.must_equal attribute
@@ -396,7 +397,7 @@ module Arel
equality.must_be_kind_of Nodes::Equality
end
- it 'should generate = in sql' do
+ it "should generate = in sql" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
mgr.where relation[:id].eq(10)
@@ -405,7 +406,7 @@ module Arel
}
end
- it 'should handle nil' do
+ it "should handle nil" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
mgr.where relation[:id].eq(nil)
@@ -415,152 +416,152 @@ module Arel
end
end
- describe '#eq_any' do
- it 'should create a Grouping node' do
+ describe "#eq_any" do
+ it "should create a Grouping node" do
relation = Table.new(:users)
- relation[:id].eq_any([1,2]).must_be_kind_of Nodes::Grouping
+ relation[:id].eq_any([1, 2]).must_be_kind_of Nodes::Grouping
end
- it 'should generate ORs in sql' do
+ it "should generate ORs in sql" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
- mgr.where relation[:id].eq_any([1,2])
+ mgr.where relation[:id].eq_any([1, 2])
mgr.to_sql.must_be_like %{
SELECT "users"."id" FROM "users" WHERE ("users"."id" = 1 OR "users"."id" = 2)
}
end
- it 'should not eat input' do
+ it "should not eat input" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
- values = [1,2]
+ values = [1, 2]
mgr.where relation[:id].eq_any(values)
- values.must_equal [1,2]
+ values.must_equal [1, 2]
end
end
- describe '#eq_all' do
- it 'should create a Grouping node' do
+ describe "#eq_all" do
+ it "should create a Grouping node" do
relation = Table.new(:users)
- relation[:id].eq_all([1,2]).must_be_kind_of Nodes::Grouping
+ relation[:id].eq_all([1, 2]).must_be_kind_of Nodes::Grouping
end
- it 'should generate ANDs in sql' do
+ it "should generate ANDs in sql" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
- mgr.where relation[:id].eq_all([1,2])
+ mgr.where relation[:id].eq_all([1, 2])
mgr.to_sql.must_be_like %{
SELECT "users"."id" FROM "users" WHERE ("users"."id" = 1 AND "users"."id" = 2)
}
end
- it 'should not eat input' do
+ it "should not eat input" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
- values = [1,2]
+ values = [1, 2]
mgr.where relation[:id].eq_all(values)
- values.must_equal [1,2]
+ values.must_equal [1, 2]
end
end
- describe '#matches' do
- it 'should create a Matches node' do
+ describe "#matches" do
+ it "should create a Matches node" do
relation = Table.new(:users)
- relation[:name].matches('%bacon%').must_be_kind_of Nodes::Matches
+ relation[:name].matches("%bacon%").must_be_kind_of Nodes::Matches
end
- it 'should generate LIKE in sql' do
+ it "should generate LIKE in sql" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
- mgr.where relation[:name].matches('%bacon%')
+ mgr.where relation[:name].matches("%bacon%")
mgr.to_sql.must_be_like %{
SELECT "users"."id" FROM "users" WHERE "users"."name" LIKE '%bacon%'
}
end
end
- describe '#matches_any' do
- it 'should create a Grouping node' do
+ describe "#matches_any" do
+ it "should create a Grouping node" do
relation = Table.new(:users)
- relation[:name].matches_any(['%chunky%','%bacon%']).must_be_kind_of Nodes::Grouping
+ relation[:name].matches_any(["%chunky%", "%bacon%"]).must_be_kind_of Nodes::Grouping
end
- it 'should generate ORs in sql' do
+ it "should generate ORs in sql" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
- mgr.where relation[:name].matches_any(['%chunky%','%bacon%'])
+ mgr.where relation[:name].matches_any(["%chunky%", "%bacon%"])
mgr.to_sql.must_be_like %{
SELECT "users"."id" FROM "users" WHERE ("users"."name" LIKE '%chunky%' OR "users"."name" LIKE '%bacon%')
}
end
end
- describe '#matches_all' do
- it 'should create a Grouping node' do
+ describe "#matches_all" do
+ it "should create a Grouping node" do
relation = Table.new(:users)
- relation[:name].matches_all(['%chunky%','%bacon%']).must_be_kind_of Nodes::Grouping
+ relation[:name].matches_all(["%chunky%", "%bacon%"]).must_be_kind_of Nodes::Grouping
end
- it 'should generate ANDs in sql' do
+ it "should generate ANDs in sql" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
- mgr.where relation[:name].matches_all(['%chunky%','%bacon%'])
+ mgr.where relation[:name].matches_all(["%chunky%", "%bacon%"])
mgr.to_sql.must_be_like %{
SELECT "users"."id" FROM "users" WHERE ("users"."name" LIKE '%chunky%' AND "users"."name" LIKE '%bacon%')
}
end
end
- describe '#does_not_match' do
- it 'should create a DoesNotMatch node' do
+ describe "#does_not_match" do
+ it "should create a DoesNotMatch node" do
relation = Table.new(:users)
- relation[:name].does_not_match('%bacon%').must_be_kind_of Nodes::DoesNotMatch
+ relation[:name].does_not_match("%bacon%").must_be_kind_of Nodes::DoesNotMatch
end
- it 'should generate NOT LIKE in sql' do
+ it "should generate NOT LIKE in sql" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
- mgr.where relation[:name].does_not_match('%bacon%')
+ mgr.where relation[:name].does_not_match("%bacon%")
mgr.to_sql.must_be_like %{
SELECT "users"."id" FROM "users" WHERE "users"."name" NOT LIKE '%bacon%'
}
end
end
- describe '#does_not_match_any' do
- it 'should create a Grouping node' do
+ describe "#does_not_match_any" do
+ it "should create a Grouping node" do
relation = Table.new(:users)
- relation[:name].does_not_match_any(['%chunky%','%bacon%']).must_be_kind_of Nodes::Grouping
+ relation[:name].does_not_match_any(["%chunky%", "%bacon%"]).must_be_kind_of Nodes::Grouping
end
- it 'should generate ORs in sql' do
+ it "should generate ORs in sql" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
- mgr.where relation[:name].does_not_match_any(['%chunky%','%bacon%'])
+ mgr.where relation[:name].does_not_match_any(["%chunky%", "%bacon%"])
mgr.to_sql.must_be_like %{
SELECT "users"."id" FROM "users" WHERE ("users"."name" NOT LIKE '%chunky%' OR "users"."name" NOT LIKE '%bacon%')
}
end
end
- describe '#does_not_match_all' do
- it 'should create a Grouping node' do
+ describe "#does_not_match_all" do
+ it "should create a Grouping node" do
relation = Table.new(:users)
- relation[:name].does_not_match_all(['%chunky%','%bacon%']).must_be_kind_of Nodes::Grouping
+ relation[:name].does_not_match_all(["%chunky%", "%bacon%"]).must_be_kind_of Nodes::Grouping
end
- it 'should generate ANDs in sql' do
+ it "should generate ANDs in sql" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
- mgr.where relation[:name].does_not_match_all(['%chunky%','%bacon%'])
+ mgr.where relation[:name].does_not_match_all(["%chunky%", "%bacon%"])
mgr.to_sql.must_be_like %{
SELECT "users"."id" FROM "users" WHERE ("users"."name" NOT LIKE '%chunky%' AND "users"."name" NOT LIKE '%bacon%')
}
end
end
- describe 'with a range' do
- it 'can be constructed with a standard range' do
+ describe "with a range" do
+ it "can be constructed with a standard range" do
attribute = Attribute.new nil, nil
node = attribute.between(1..3)
@@ -573,7 +574,7 @@ module Arel
)
end
- it 'can be constructed with a range starting from -Infinity' do
+ it "can be constructed with a range starting from -Infinity" do
attribute = Attribute.new nil, nil
node = attribute.between(-::Float::INFINITY..3)
@@ -583,7 +584,7 @@ module Arel
)
end
- it 'can be constructed with a quoted range starting from -Infinity' do
+ it "can be constructed with a quoted range starting from -Infinity" do
attribute = Attribute.new nil, nil
node = attribute.between(quoted_range(-::Float::INFINITY, 3, false))
@@ -593,7 +594,7 @@ module Arel
)
end
- it 'can be constructed with an exclusive range starting from -Infinity' do
+ it "can be constructed with an exclusive range starting from -Infinity" do
attribute = Attribute.new nil, nil
node = attribute.between(-::Float::INFINITY...3)
@@ -603,7 +604,7 @@ module Arel
)
end
- it 'can be constructed with a quoted exclusive range starting from -Infinity' do
+ it "can be constructed with a quoted exclusive range starting from -Infinity" do
attribute = Attribute.new nil, nil
node = attribute.between(quoted_range(-::Float::INFINITY, 3, true))
@@ -613,14 +614,14 @@ module Arel
)
end
- it 'can be constructed with an infinite range' do
+ it "can be constructed with an infinite range" do
attribute = Attribute.new nil, nil
node = attribute.between(-::Float::INFINITY..::Float::INFINITY)
node.must_equal Nodes::NotIn.new(attribute, [])
end
- it 'can be constructed with a quoted infinite range' do
+ it "can be constructed with a quoted infinite range" do
attribute = Attribute.new nil, nil
node = attribute.between(quoted_range(-::Float::INFINITY, ::Float::INFINITY, false))
@@ -628,7 +629,7 @@ module Arel
end
- it 'can be constructed with a range ending at Infinity' do
+ it "can be constructed with a range ending at Infinity" do
attribute = Attribute.new nil, nil
node = attribute.between(0..::Float::INFINITY)
@@ -638,7 +639,7 @@ module Arel
)
end
- it 'can be constructed with a quoted range ending at Infinity' do
+ it "can be constructed with a quoted range ending at Infinity" do
attribute = Attribute.new nil, nil
node = attribute.between(quoted_range(0, ::Float::INFINITY, false))
@@ -648,7 +649,7 @@ module Arel
)
end
- it 'can be constructed with an exclusive range' do
+ it "can be constructed with an exclusive range" do
attribute = Attribute.new nil, nil
node = attribute.between(0...3)
@@ -673,11 +674,11 @@ module Arel
end
end
- describe '#in' do
- it 'can be constructed with a subquery' do
+ describe "#in" do
+ it "can be constructed with a subquery" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
- mgr.where relation[:name].does_not_match_all(['%chunky%','%bacon%'])
+ mgr.where relation[:name].does_not_match_all(["%chunky%", "%bacon%"])
attribute = Attribute.new nil, nil
node = attribute.in(mgr)
@@ -685,7 +686,7 @@ module Arel
node.must_equal Nodes::In.new(attribute, mgr.ast)
end
- it 'can be constructed with a list' do
+ it "can be constructed with a list" do
attribute = Attribute.new nil, nil
node = attribute.in([1, 2, 3])
@@ -699,7 +700,7 @@ module Arel
)
end
- it 'can be constructed with a random object' do
+ it "can be constructed with a random object" do
attribute = Attribute.new nil, nil
random_object = Object.new
node = attribute.in(random_object)
@@ -710,58 +711,58 @@ module Arel
)
end
- it 'should generate IN in sql' do
+ it "should generate IN in sql" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
- mgr.where relation[:id].in([1,2,3])
+ mgr.where relation[:id].in([1, 2, 3])
mgr.to_sql.must_be_like %{
SELECT "users"."id" FROM "users" WHERE "users"."id" IN (1, 2, 3)
}
end
end
- describe '#in_any' do
- it 'should create a Grouping node' do
+ describe "#in_any" do
+ it "should create a Grouping node" do
relation = Table.new(:users)
- relation[:id].in_any([1,2]).must_be_kind_of Nodes::Grouping
+ relation[:id].in_any([1, 2]).must_be_kind_of Nodes::Grouping
end
- it 'should generate ORs in sql' do
+ it "should generate ORs in sql" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
- mgr.where relation[:id].in_any([[1,2], [3,4]])
+ mgr.where relation[:id].in_any([[1, 2], [3, 4]])
mgr.to_sql.must_be_like %{
SELECT "users"."id" FROM "users" WHERE ("users"."id" IN (1, 2) OR "users"."id" IN (3, 4))
}
end
end
- describe '#in_all' do
- it 'should create a Grouping node' do
+ describe "#in_all" do
+ it "should create a Grouping node" do
relation = Table.new(:users)
- relation[:id].in_all([1,2]).must_be_kind_of Nodes::Grouping
+ relation[:id].in_all([1, 2]).must_be_kind_of Nodes::Grouping
end
- it 'should generate ANDs in sql' do
+ it "should generate ANDs in sql" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
- mgr.where relation[:id].in_all([[1,2], [3,4]])
+ mgr.where relation[:id].in_all([[1, 2], [3, 4]])
mgr.to_sql.must_be_like %{
SELECT "users"."id" FROM "users" WHERE ("users"."id" IN (1, 2) AND "users"."id" IN (3, 4))
}
end
end
- describe 'with a range' do
- it 'can be constructed with a standard range' do
+ describe "with a range" do
+ it "can be constructed with a standard range" do
attribute = Attribute.new nil, nil
node = attribute.not_between(1..3)
node.must_equal Nodes::Grouping.new(Nodes::Or.new(
- Nodes::LessThan.new(
- attribute,
- Nodes::Casted.new(1, attribute)
- ),
+ Nodes::LessThan.new(
+ attribute,
+ Nodes::Casted.new(1, attribute)
+ ),
Nodes::GreaterThan.new(
attribute,
Nodes::Casted.new(3, attribute)
@@ -769,7 +770,7 @@ module Arel
))
end
- it 'can be constructed with a range starting from -Infinity' do
+ it "can be constructed with a range starting from -Infinity" do
attribute = Attribute.new nil, nil
node = attribute.not_between(-::Float::INFINITY..3)
@@ -779,7 +780,7 @@ module Arel
)
end
- it 'can be constructed with an exclusive range starting from -Infinity' do
+ it "can be constructed with an exclusive range starting from -Infinity" do
attribute = Attribute.new nil, nil
node = attribute.not_between(-::Float::INFINITY...3)
@@ -789,14 +790,14 @@ module Arel
)
end
- it 'can be constructed with an infinite range' do
+ it "can be constructed with an infinite range" do
attribute = Attribute.new nil, nil
node = attribute.not_between(-::Float::INFINITY..::Float::INFINITY)
node.must_equal Nodes::In.new(attribute, [])
end
- it 'can be constructed with a range ending at Infinity' do
+ it "can be constructed with a range ending at Infinity" do
attribute = Attribute.new nil, nil
node = attribute.not_between(0..::Float::INFINITY)
@@ -806,15 +807,15 @@ module Arel
)
end
- it 'can be constructed with an exclusive range' do
+ it "can be constructed with an exclusive range" do
attribute = Attribute.new nil, nil
node = attribute.not_between(0...3)
node.must_equal Nodes::Grouping.new(Nodes::Or.new(
- Nodes::LessThan.new(
- attribute,
- Nodes::Casted.new(0, attribute)
- ),
+ Nodes::LessThan.new(
+ attribute,
+ Nodes::Casted.new(0, attribute)
+ ),
Nodes::GreaterThanOrEqual.new(
attribute,
Nodes::Casted.new(3, attribute)
@@ -823,11 +824,11 @@ module Arel
end
end
- describe '#not_in' do
- it 'can be constructed with a subquery' do
+ describe "#not_in" do
+ it "can be constructed with a subquery" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
- mgr.where relation[:name].does_not_match_all(['%chunky%','%bacon%'])
+ mgr.where relation[:name].does_not_match_all(["%chunky%", "%bacon%"])
attribute = Attribute.new nil, nil
node = attribute.not_in(mgr)
@@ -835,7 +836,7 @@ module Arel
node.must_equal Nodes::NotIn.new(attribute, mgr.ast)
end
- it 'can be constructed with a Union' do
+ it "can be constructed with a Union" do
relation = Table.new(:users)
mgr1 = relation.project(relation[:id])
mgr2 = relation.project(relation[:id])
@@ -847,7 +848,7 @@ module Arel
}
end
- it 'can be constructed with a list' do
+ it "can be constructed with a list" do
attribute = Attribute.new nil, nil
node = attribute.not_in([1, 2, 3])
@@ -861,7 +862,7 @@ module Arel
)
end
- it 'can be constructed with a random object' do
+ it "can be constructed with a random object" do
attribute = Attribute.new nil, nil
random_object = Object.new
node = attribute.not_in(random_object)
@@ -872,71 +873,71 @@ module Arel
)
end
- it 'should generate NOT IN in sql' do
+ it "should generate NOT IN in sql" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
- mgr.where relation[:id].not_in([1,2,3])
+ mgr.where relation[:id].not_in([1, 2, 3])
mgr.to_sql.must_be_like %{
SELECT "users"."id" FROM "users" WHERE "users"."id" NOT IN (1, 2, 3)
}
end
end
- describe '#not_in_any' do
- it 'should create a Grouping node' do
+ describe "#not_in_any" do
+ it "should create a Grouping node" do
relation = Table.new(:users)
- relation[:id].not_in_any([1,2]).must_be_kind_of Nodes::Grouping
+ relation[:id].not_in_any([1, 2]).must_be_kind_of Nodes::Grouping
end
- it 'should generate ORs in sql' do
+ it "should generate ORs in sql" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
- mgr.where relation[:id].not_in_any([[1,2], [3,4]])
+ mgr.where relation[:id].not_in_any([[1, 2], [3, 4]])
mgr.to_sql.must_be_like %{
SELECT "users"."id" FROM "users" WHERE ("users"."id" NOT IN (1, 2) OR "users"."id" NOT IN (3, 4))
}
end
end
- describe '#not_in_all' do
- it 'should create a Grouping node' do
+ describe "#not_in_all" do
+ it "should create a Grouping node" do
relation = Table.new(:users)
- relation[:id].not_in_all([1,2]).must_be_kind_of Nodes::Grouping
+ relation[:id].not_in_all([1, 2]).must_be_kind_of Nodes::Grouping
end
- it 'should generate ANDs in sql' do
+ it "should generate ANDs in sql" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
- mgr.where relation[:id].not_in_all([[1,2], [3,4]])
+ mgr.where relation[:id].not_in_all([[1, 2], [3, 4]])
mgr.to_sql.must_be_like %{
SELECT "users"."id" FROM "users" WHERE ("users"."id" NOT IN (1, 2) AND "users"."id" NOT IN (3, 4))
}
end
end
- describe '#eq_all' do
- it 'should create a Grouping node' do
+ describe "#eq_all" do
+ it "should create a Grouping node" do
relation = Table.new(:users)
- relation[:id].eq_all([1,2]).must_be_kind_of Nodes::Grouping
+ relation[:id].eq_all([1, 2]).must_be_kind_of Nodes::Grouping
end
- it 'should generate ANDs in sql' do
+ it "should generate ANDs in sql" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
- mgr.where relation[:id].eq_all([1,2])
+ mgr.where relation[:id].eq_all([1, 2])
mgr.to_sql.must_be_like %{
SELECT "users"."id" FROM "users" WHERE ("users"."id" = 1 AND "users"."id" = 2)
}
end
end
- describe '#asc' do
- it 'should create an Ascending node' do
+ describe "#asc" do
+ it "should create an Ascending node" do
relation = Table.new(:users)
relation[:id].asc.must_be_kind_of Nodes::Ascending
end
- it 'should generate ASC in sql' do
+ it "should generate ASC in sql" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
mgr.order relation[:id].asc
@@ -946,13 +947,13 @@ module Arel
end
end
- describe '#desc' do
- it 'should create a Descending node' do
+ describe "#desc" do
+ it "should create a Descending node" do
relation = Table.new(:users)
relation[:id].desc.must_be_kind_of Nodes::Descending
end
- it 'should generate DESC in sql' do
+ it "should generate DESC in sql" do
relation = Table.new(:users)
mgr = relation.project relation[:id]
mgr.order relation[:id].desc
@@ -962,18 +963,18 @@ module Arel
end
end
- describe 'equality' do
- describe '#to_sql' do
- it 'should produce sql' do
+ describe "equality" do
+ describe "#to_sql" do
+ it "should produce sql" do
table = Table.new :users
- condition = table['id'].eq 1
+ condition = table["id"].eq 1
condition.to_sql.must_equal '"users"."id" = 1'
end
end
end
- describe 'type casting' do
- it 'does not type cast by default' do
+ describe "type casting" do
+ it "does not type cast by default" do
table = Table.new(:foo)
condition = table["id"].eq("1")
@@ -981,7 +982,7 @@ module Arel
condition.to_sql.must_equal %("foo"."id" = '1')
end
- it 'type casts when given an explicit caster' do
+ it "type casts when given an explicit caster" do
fake_caster = Object.new
def fake_caster.type_cast_for_database(attr_name, value)
if attr_name == "id"
@@ -997,7 +998,7 @@ module Arel
condition.to_sql.must_equal %("foo"."id" = 1 AND "foo"."other_id" = '2')
end
- it 'does not type cast SqlLiteral nodes' do
+ it "does not type cast SqlLiteral nodes" do
fake_caster = Object.new
def fake_caster.type_cast_for_database(attr_name, value)
value.to_i
diff --git a/activerecord/test/cases/arel/attributes_test.rb b/activerecord/test/cases/arel/attributes_test.rb
index e17a6f5fd2..b00af4bd29 100644
--- a/activerecord/test/cases/arel/attributes_test.rb
+++ b/activerecord/test/cases/arel/attributes_test.rb
@@ -1,62 +1,63 @@
# frozen_string_literal: true
-require_relative 'helper'
+
+require_relative "helper"
module Arel
- describe 'Attributes' do
- it 'responds to lower' do
+ describe "Attributes" do
+ it "responds to lower" do
relation = Table.new(:users)
attribute = relation[:foo]
node = attribute.lower
- assert_equal 'LOWER', node.name
+ assert_equal "LOWER", node.name
assert_equal [attribute], node.expressions
end
- describe 'equality' do
- it 'is equal with equal ivars' do
- array = [Attribute.new('foo', 'bar'), Attribute.new('foo', 'bar')]
+ describe "equality" do
+ it "is equal with equal ivars" do
+ array = [Attribute.new("foo", "bar"), Attribute.new("foo", "bar")]
assert_equal 1, array.uniq.size
end
- it 'is not equal with different ivars' do
- array = [Attribute.new('foo', 'bar'), Attribute.new('foo', 'baz')]
+ it "is not equal with different ivars" do
+ array = [Attribute.new("foo", "bar"), Attribute.new("foo", "baz")]
assert_equal 2, array.uniq.size
end
end
- describe 'for' do
- it 'deals with unknown column types' do
+ describe "for" do
+ it "deals with unknown column types" do
column = Struct.new(:type).new :crazy
Attributes.for(column).must_equal Attributes::Undefined
end
- it 'returns the correct constant for strings' do
+ it "returns the correct constant for strings" do
[:string, :text, :binary].each do |type|
column = Struct.new(:type).new type
Attributes.for(column).must_equal Attributes::String
end
end
- it 'returns the correct constant for ints' do
+ it "returns the correct constant for ints" do
column = Struct.new(:type).new :integer
Attributes.for(column).must_equal Attributes::Integer
end
- it 'returns the correct constant for floats' do
+ it "returns the correct constant for floats" do
column = Struct.new(:type).new :float
Attributes.for(column).must_equal Attributes::Float
end
- it 'returns the correct constant for decimals' do
+ it "returns the correct constant for decimals" do
column = Struct.new(:type).new :decimal
Attributes.for(column).must_equal Attributes::Decimal
end
- it 'returns the correct constant for boolean' do
+ it "returns the correct constant for boolean" do
column = Struct.new(:type).new :boolean
Attributes.for(column).must_equal Attributes::Boolean
end
- it 'returns the correct constant for time' do
+ it "returns the correct constant for time" do
[:date, :datetime, :timestamp, :time].each do |type|
column = Struct.new(:type).new type
Attributes.for(column).must_equal Attributes::Time
diff --git a/activerecord/test/cases/arel/collectors/bind_test.rb b/activerecord/test/cases/arel/collectors/bind_test.rb
index febc7290a7..9123a70c3e 100644
--- a/activerecord/test/cases/arel/collectors/bind_test.rb
+++ b/activerecord/test/cases/arel/collectors/bind_test.rb
@@ -1,5 +1,6 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Collectors
@@ -10,15 +11,15 @@ module Arel
super
end
- def collect node
+ def collect(node)
@visitor.accept(node, Collectors::Bind.new)
end
- def compile node
+ def compile(node)
collect(node).value
end
- def ast_with_binds bvs
+ def ast_with_binds(bvs)
table = Table.new(:users)
manager = Arel::SelectManager.new table
manager.where(table[:age].eq(Nodes::BindParam.new(bvs.shift)))
diff --git a/activerecord/test/cases/arel/collectors/composite_test.rb b/activerecord/test/cases/arel/collectors/composite_test.rb
index e330cae7a6..545637496f 100644
--- a/activerecord/test/cases/arel/collectors/composite_test.rb
+++ b/activerecord/test/cases/arel/collectors/composite_test.rb
@@ -1,8 +1,9 @@
# frozen_string_literal: true
-require_relative '../helper'
-require 'arel/collectors/bind'
-require 'arel/collectors/composite'
+require_relative "../helper"
+
+require "arel/collectors/bind"
+require "arel/collectors/composite"
module Arel
module Collectors
@@ -13,18 +14,18 @@ module Arel
super
end
- def collect node
+ def collect(node)
sql_collector = Collectors::SQLString.new
bind_collector = Collectors::Bind.new
collector = Collectors::Composite.new(sql_collector, bind_collector)
@visitor.accept(node, collector)
end
- def compile node
+ def compile(node)
collect(node).value
end
- def ast_with_binds bvs
+ def ast_with_binds(bvs)
table = Table.new(:users)
manager = Arel::SelectManager.new table
manager.where(table[:age].eq(Nodes::BindParam.new(bvs.shift)))
diff --git a/activerecord/test/cases/arel/collectors/sql_string_test.rb b/activerecord/test/cases/arel/collectors/sql_string_test.rb
index a8ed3eb625..380573494d 100644
--- a/activerecord/test/cases/arel/collectors/sql_string_test.rb
+++ b/activerecord/test/cases/arel/collectors/sql_string_test.rb
@@ -1,5 +1,6 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Collectors
@@ -10,15 +11,15 @@ module Arel
super
end
- def collect node
+ def collect(node)
@visitor.accept(node, Collectors::SQLString.new)
end
- def compile node
+ def compile(node)
collect(node).value
end
- def ast_with_binds bv
+ def ast_with_binds(bv)
table = Table.new(:users)
manager = Arel::SelectManager.new table
manager.where(table[:age].eq(bv))
diff --git a/activerecord/test/cases/arel/collectors/substitute_bind_collector_test.rb b/activerecord/test/cases/arel/collectors/substitute_bind_collector_test.rb
index 18f0ac14de..255c8e79e9 100644
--- a/activerecord/test/cases/arel/collectors/substitute_bind_collector_test.rb
+++ b/activerecord/test/cases/arel/collectors/substitute_bind_collector_test.rb
@@ -1,7 +1,8 @@
# frozen_string_literal: true
-require_relative '../helper'
-require 'arel/collectors/substitute_binds'
-require 'arel/collectors/sql_string'
+
+require_relative "../helper"
+require "arel/collectors/substitute_binds"
+require "arel/collectors/sql_string"
module Arel
module Collectors
diff --git a/activerecord/test/cases/arel/crud_test.rb b/activerecord/test/cases/arel/crud_test.rb
index 38a956b9dd..f3cdd8927f 100644
--- a/activerecord/test/cases/arel/crud_test.rb
+++ b/activerecord/test/cases/arel/crud_test.rb
@@ -1,5 +1,6 @@
# frozen_string_literal: true
-require_relative 'helper'
+
+require_relative "helper"
module Arel
class FakeCrudder < SelectManager
@@ -10,12 +11,12 @@ module Arel
@calls = []
@connection_pool = self
@spec = self
- @config = { :adapter => 'sqlite3' }
+ @config = { adapter: "sqlite3" }
end
def connection; self end
- def method_missing name, *args
+ def method_missing(name, *args)
@calls << [name, args]
end
end
@@ -25,34 +26,34 @@ module Arel
attr_reader :engine
attr_accessor :ctx
- def initialize engine = FakeEngine.new
+ def initialize(engine = FakeEngine.new)
super
end
end
- describe 'crud' do
- describe 'insert' do
- it 'should call insert on the connection' do
+ describe "crud" do
+ describe "insert" do
+ it "should call insert on the connection" do
table = Table.new :users
fc = FakeCrudder.new
fc.from table
- im = fc.compile_insert [[table[:id], 'foo']]
+ im = fc.compile_insert [[table[:id], "foo"]]
assert_instance_of Arel::InsertManager, im
end
end
- describe 'update' do
- it 'should call update on the connection' do
+ describe "update" do
+ it "should call update on the connection" do
table = Table.new :users
fc = FakeCrudder.new
fc.from table
- stmt = fc.compile_update [[table[:id], 'foo']], Arel::Attributes::Attribute.new(table, 'id')
+ stmt = fc.compile_update [[table[:id], "foo"]], Arel::Attributes::Attribute.new(table, "id")
assert_instance_of Arel::UpdateManager, stmt
end
end
- describe 'delete' do
- it 'should call delete on the connection' do
+ describe "delete" do
+ it "should call delete on the connection" do
table = Table.new :users
fc = FakeCrudder.new
fc.from table
diff --git a/activerecord/test/cases/arel/delete_manager_test.rb b/activerecord/test/cases/arel/delete_manager_test.rb
index 36d482f10b..17a5271039 100644
--- a/activerecord/test/cases/arel/delete_manager_test.rb
+++ b/activerecord/test/cases/arel/delete_manager_test.rb
@@ -1,15 +1,16 @@
# frozen_string_literal: true
-require_relative 'helper'
+
+require_relative "helper"
module Arel
class DeleteManagerTest < Arel::Spec
- describe 'new' do
- it 'takes an engine' do
+ describe "new" do
+ it "takes an engine" do
Arel::DeleteManager.new
end
end
- it 'handles limit properly' do
+ it "handles limit properly" do
table = Table.new(:users)
dm = Arel::DeleteManager.new
dm.take 10
@@ -17,23 +18,23 @@ module Arel
assert_match(/LIMIT 10/, dm.to_sql)
end
- describe 'from' do
- it 'uses from' do
+ describe "from" do
+ it "uses from" do
table = Table.new(:users)
dm = Arel::DeleteManager.new
dm.from table
dm.to_sql.must_be_like %{ DELETE FROM "users" }
end
- it 'chains' do
+ it "chains" do
table = Table.new(:users)
dm = Arel::DeleteManager.new
dm.from(table).must_equal dm
end
end
- describe 'where' do
- it 'uses where values' do
+ describe "where" do
+ it "uses where values" do
table = Table.new(:users)
dm = Arel::DeleteManager.new
dm.from table
@@ -41,7 +42,7 @@ module Arel
dm.to_sql.must_be_like %{ DELETE FROM "users" WHERE "users"."id" = 10}
end
- it 'chains' do
+ it "chains" do
table = Table.new(:users)
dm = Arel::DeleteManager.new
dm.where(table[:id].eq(10)).must_equal dm
diff --git a/activerecord/test/cases/arel/factory_methods_test.rb b/activerecord/test/cases/arel/factory_methods_test.rb
index 2600b81e31..26d2cdd08d 100644
--- a/activerecord/test/cases/arel/factory_methods_test.rb
+++ b/activerecord/test/cases/arel/factory_methods_test.rb
@@ -1,5 +1,6 @@
# frozen_string_literal: true
-require_relative 'helper'
+
+require_relative "helper"
module Arel
module FactoryMethods
@@ -37,7 +38,7 @@ module Arel
def test_lower
lower = @factory.lower :one
assert_instance_of Nodes::NamedFunction, lower
- assert_equal 'LOWER', lower.name
+ assert_equal "LOWER", lower.name
assert_equal [:one], lower.expressions.map(&:expr)
end
end
diff --git a/activerecord/test/cases/arel/helper.rb b/activerecord/test/cases/arel/helper.rb
index b716ee833f..1f8612f799 100644
--- a/activerecord/test/cases/arel/helper.rb
+++ b/activerecord/test/cases/arel/helper.rb
@@ -1,13 +1,14 @@
# frozen_string_literal: true
-require 'rubygems'
-require 'minitest/autorun'
-require 'arel'
-require_relative 'support/fake_record'
+require "rubygems"
+require "minitest/autorun"
+require "arel"
+
+require_relative "support/fake_record"
class Object
- def must_be_like other
- gsub(/\s+/, ' ').strip.must_equal other.gsub(/\s+/, ' ').strip
+ def must_be_like(other)
+ gsub(/\s+/, " ").strip.must_equal other.gsub(/\s+/, " ").strip
end
end
@@ -24,9 +25,9 @@ module Arel
super
end
- def assert_like expected, actual
- assert_equal expected.gsub(/\s+/, ' ').strip,
- actual.gsub(/\s+/, ' ').strip
+ def assert_like(expected, actual)
+ assert_equal expected.gsub(/\s+/, " ").strip,
+ actual.gsub(/\s+/, " ").strip
end
end
diff --git a/activerecord/test/cases/arel/insert_manager_test.rb b/activerecord/test/cases/arel/insert_manager_test.rb
index 33fab63fbc..ae10ccf56c 100644
--- a/activerecord/test/cases/arel/insert_manager_test.rb
+++ b/activerecord/test/cases/arel/insert_manager_test.rb
@@ -1,16 +1,17 @@
# frozen_string_literal: true
-require_relative 'helper'
+
+require_relative "helper"
module Arel
class InsertManagerTest < Arel::Spec
- describe 'new' do
- it 'takes an engine' do
+ describe "new" do
+ it "takes an engine" do
Arel::InsertManager.new
end
end
- describe 'insert' do
- it 'can create a Values node' do
+ describe "insert" do
+ it "can create a Values node" do
manager = Arel::InsertManager.new
values = manager.create_values %w{ a b }, %w{ c d }
@@ -19,16 +20,16 @@ module Arel
assert_equal %w{ c d }, values.right
end
- it 'allows sql literals' do
- manager = Arel::InsertManager.new
+ 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("*")], %w{ a }
manager.to_sql.must_be_like %{
INSERT INTO \"users\" VALUES (*)
}
end
- it 'works with multiple values' do
+ it "works with multiple values" do
table = Table.new(:users)
manager = Arel::InsertManager.new
manager.into table
@@ -39,7 +40,7 @@ module Arel
manager.values = manager.create_values_list([
%w{1 david},
%w{2 kir},
- ["3", Arel.sql('DEFAULT')],
+ ["3", Arel.sql("DEFAULT")],
])
manager.to_sql.must_be_like %{
@@ -47,7 +48,7 @@ module Arel
}
end
- it 'literals in multiple values are not escaped' do
+ it "literals in multiple values are not escaped" do
table = Table.new(:users)
manager = Arel::InsertManager.new
manager.into table
@@ -55,8 +56,8 @@ module Arel
manager.columns << table[:name]
manager.values = manager.create_values_list([
- [Arel.sql('*')],
- [Arel.sql('DEFAULT')],
+ [Arel.sql("*")],
+ [Arel.sql("DEFAULT")],
])
manager.to_sql.must_be_like %{
@@ -64,7 +65,7 @@ module Arel
}
end
- it 'works with multiple single values' do
+ it "works with multiple single values" do
table = Table.new(:users)
manager = Arel::InsertManager.new
manager.into table
@@ -74,7 +75,7 @@ module Arel
manager.values = manager.create_values_list([
%w{david},
%w{kir},
- [Arel.sql('DEFAULT')],
+ [Arel.sql("DEFAULT")],
])
manager.to_sql.must_be_like %{
@@ -114,26 +115,26 @@ module Arel
}
end
- it 'takes a list of lists' do
+ it "takes a list of lists" do
table = Table.new(:users)
manager = Arel::InsertManager.new
manager.into table
- manager.insert [[table[:id], 1], [table[:name], 'aaron']]
+ manager.insert [[table[:id], 1], [table[:name], "aaron"]]
manager.to_sql.must_be_like %{
INSERT INTO "users" ("id", "name") VALUES (1, 'aaron')
}
end
- it 'defaults the table' do
+ it "defaults the table" do
table = Table.new(:users)
manager = Arel::InsertManager.new
- manager.insert [[table[:id], 1], [table[:name], 'aaron']]
+ manager.insert [[table[:id], 1], [table[:name], "aaron"]]
manager.to_sql.must_be_like %{
INSERT INTO "users" ("id", "name") VALUES (1, 'aaron')
}
end
- it 'noop for empty list' do
+ it "noop for empty list" do
table = Table.new(:users)
manager = Arel::InsertManager.new
manager.insert [[table[:id], 1]]
@@ -143,21 +144,21 @@ module Arel
}
end
- it 'is chainable' do
+ it "is chainable" do
table = Table.new(:users)
manager = Arel::InsertManager.new
- insert_result = manager.insert [[table[:id],1]]
+ insert_result = manager.insert [[table[:id], 1]]
assert_equal manager, insert_result
end
end
- describe 'into' do
- it 'takes a Table and chains' do
+ describe "into" do
+ it "takes a Table and chains" do
manager = Arel::InsertManager.new
manager.into(Table.new(:users)).must_equal manager
end
- it 'converts to sql' do
+ it "converts to sql" do
table = Table.new :users
manager = Arel::InsertManager.new
manager.into table
@@ -167,7 +168,7 @@ module Arel
end
end
- describe 'columns' do
+ describe "columns" do
it "converts to sql" do
table = Table.new :users
manager = Arel::InsertManager.new
@@ -209,7 +210,7 @@ module Arel
manager = Arel::InsertManager.new
manager.into table
- manager.values = Nodes::Values.new [1, 'aaron']
+ manager.values = Nodes::Values.new [1, "aaron"]
manager.columns << table[:id]
manager.columns << table[:name]
manager.to_sql.must_be_like %{
@@ -227,7 +228,7 @@ module Arel
manager.into table
select = Arel::SelectManager.new
- select.project Arel.sql('1')
+ select.project Arel.sql("1")
select.project Arel.sql('"aaron"')
manager.select select
@@ -239,6 +240,5 @@ module Arel
end
end
-
end
end
diff --git a/activerecord/test/cases/arel/nodes/and_test.rb b/activerecord/test/cases/arel/nodes/and_test.rb
index de63e0bb31..eff54abd91 100644
--- a/activerecord/test/cases/arel/nodes/and_test.rb
+++ b/activerecord/test/cases/arel/nodes/and_test.rb
@@ -1,21 +1,21 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Nodes
- describe 'And' do
- describe 'equality' do
- it 'is equal with equal ivars' do
- array = [And.new(['foo', 'bar']), And.new(['foo', 'bar'])]
+ describe "And" do
+ describe "equality" do
+ it "is equal with equal ivars" do
+ array = [And.new(["foo", "bar"]), And.new(["foo", "bar"])]
assert_equal 1, array.uniq.size
end
- it 'is not equal with different ivars' do
- array = [And.new(['foo', 'bar']), And.new(['foo', 'baz'])]
+ it "is not equal with different ivars" do
+ array = [And.new(["foo", "bar"]), And.new(["foo", "baz"])]
assert_equal 2, array.uniq.size
end
end
end
end
end
-
diff --git a/activerecord/test/cases/arel/nodes/as_test.rb b/activerecord/test/cases/arel/nodes/as_test.rb
index 09c8aa8d62..1169ea11c9 100644
--- a/activerecord/test/cases/arel/nodes/as_test.rb
+++ b/activerecord/test/cases/arel/nodes/as_test.rb
@@ -1,32 +1,33 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Nodes
- describe 'As' do
- describe '#as' do
- it 'makes an AS node' do
+ describe "As" do
+ describe "#as" do
+ it "makes an AS node" do
attr = Table.new(:users)[:id]
- as = attr.as(Arel.sql('foo'))
+ as = attr.as(Arel.sql("foo"))
assert_equal attr, as.left
- assert_equal 'foo', as.right
+ assert_equal "foo", as.right
end
- it 'converts right to SqlLiteral if a string' do
+ it "converts right to SqlLiteral if a string" do
attr = Table.new(:users)[:id]
- as = attr.as('foo')
+ as = attr.as("foo")
assert_kind_of Arel::Nodes::SqlLiteral, as.right
end
end
- describe 'equality' do
- it 'is equal with equal ivars' do
- array = [As.new('foo', 'bar'), As.new('foo', 'bar')]
+ describe "equality" do
+ it "is equal with equal ivars" do
+ array = [As.new("foo", "bar"), As.new("foo", "bar")]
assert_equal 1, array.uniq.size
end
- it 'is not equal with different ivars' do
- array = [As.new('foo', 'bar'), As.new('foo', 'baz')]
+ it "is not equal with different ivars" do
+ array = [As.new("foo", "bar"), As.new("foo", "baz")]
assert_equal 2, array.uniq.size
end
end
diff --git a/activerecord/test/cases/arel/nodes/ascending_test.rb b/activerecord/test/cases/arel/nodes/ascending_test.rb
index 5c73e69fa5..1efb16222a 100644
--- a/activerecord/test/cases/arel/nodes/ascending_test.rb
+++ b/activerecord/test/cases/arel/nodes/ascending_test.rb
@@ -1,43 +1,44 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Nodes
class TestAscending < Arel::Test
def test_construct
- ascending = Ascending.new 'zomg'
- assert_equal 'zomg', ascending.expr
+ ascending = Ascending.new "zomg"
+ assert_equal "zomg", ascending.expr
end
def test_reverse
- ascending = Ascending.new 'zomg'
+ ascending = Ascending.new "zomg"
descending = ascending.reverse
assert_kind_of Descending, descending
assert_equal ascending.expr, descending.expr
end
def test_direction
- ascending = Ascending.new 'zomg'
+ ascending = Ascending.new "zomg"
assert_equal :asc, ascending.direction
end
def test_ascending?
- ascending = Ascending.new 'zomg'
+ ascending = Ascending.new "zomg"
assert ascending.ascending?
end
def test_descending?
- ascending = Ascending.new 'zomg'
+ ascending = Ascending.new "zomg"
assert !ascending.descending?
end
def test_equality_with_same_ivars
- array = [Ascending.new('zomg'), Ascending.new('zomg')]
+ array = [Ascending.new("zomg"), Ascending.new("zomg")]
assert_equal 1, array.uniq.size
end
def test_inequality_with_different_ivars
- array = [Ascending.new('zomg'), Ascending.new('zomg!')]
+ array = [Ascending.new("zomg"), Ascending.new("zomg!")]
assert_equal 2, array.uniq.size
end
end
diff --git a/activerecord/test/cases/arel/nodes/bin_test.rb b/activerecord/test/cases/arel/nodes/bin_test.rb
index 923a296adf..ee2ec3cf2f 100644
--- a/activerecord/test/cases/arel/nodes/bin_test.rb
+++ b/activerecord/test/cases/arel/nodes/bin_test.rb
@@ -1,32 +1,33 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Nodes
class TestBin < Arel::Test
def test_new
- assert Arel::Nodes::Bin.new('zomg')
+ assert Arel::Nodes::Bin.new("zomg")
end
def test_default_to_sql
viz = Arel::Visitors::ToSql.new Table.engine.connection_pool
- node = Arel::Nodes::Bin.new(Arel.sql('zomg'))
- assert_equal 'zomg', viz.accept(node, Collectors::SQLString.new).value
+ node = Arel::Nodes::Bin.new(Arel.sql("zomg"))
+ assert_equal "zomg", viz.accept(node, Collectors::SQLString.new).value
end
def test_mysql_to_sql
viz = Arel::Visitors::MySQL.new Table.engine.connection_pool
- node = Arel::Nodes::Bin.new(Arel.sql('zomg'))
- assert_equal 'BINARY zomg', viz.accept(node, Collectors::SQLString.new).value
+ node = Arel::Nodes::Bin.new(Arel.sql("zomg"))
+ assert_equal "BINARY zomg", viz.accept(node, Collectors::SQLString.new).value
end
def test_equality_with_same_ivars
- array = [Bin.new('zomg'), Bin.new('zomg')]
+ array = [Bin.new("zomg"), Bin.new("zomg")]
assert_equal 1, array.uniq.size
end
def test_inequality_with_different_ivars
- array = [Bin.new('zomg'), Bin.new('zomg!')]
+ array = [Bin.new("zomg"), Bin.new("zomg!")]
assert_equal 2, array.uniq.size
end
end
diff --git a/activerecord/test/cases/arel/nodes/binary_test.rb b/activerecord/test/cases/arel/nodes/binary_test.rb
index 0bea35f7dd..9bc55a155b 100644
--- a/activerecord/test/cases/arel/nodes/binary_test.rb
+++ b/activerecord/test/cases/arel/nodes/binary_test.rb
@@ -1,22 +1,23 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Nodes
- describe 'Binary' do
- describe '#hash' do
- it 'generates a hash based on its value' do
- eq = Equality.new('foo', 'bar')
- eq2 = Equality.new('foo', 'bar')
- eq3 = Equality.new('bar', 'baz')
+ describe "Binary" do
+ describe "#hash" do
+ it "generates a hash based on its value" do
+ eq = Equality.new("foo", "bar")
+ eq2 = Equality.new("foo", "bar")
+ eq3 = Equality.new("bar", "baz")
assert_equal eq.hash, eq2.hash
refute_equal eq.hash, eq3.hash
end
- it 'generates a hash specific to its class' do
- eq = Equality.new('foo', 'bar')
- neq = NotEqual.new('foo', 'bar')
+ it "generates a hash specific to its class" do
+ eq = Equality.new("foo", "bar")
+ neq = NotEqual.new("foo", "bar")
refute_equal eq.hash, neq.hash
end
diff --git a/activerecord/test/cases/arel/nodes/bind_param_test.rb b/activerecord/test/cases/arel/nodes/bind_param_test.rb
index 665581edce..37a362ece4 100644
--- a/activerecord/test/cases/arel/nodes/bind_param_test.rb
+++ b/activerecord/test/cases/arel/nodes/bind_param_test.rb
@@ -1,19 +1,20 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Nodes
- describe 'BindParam' do
- it 'is equal to other bind params with the same value' do
+ describe "BindParam" do
+ it "is equal to other bind params with the same value" do
BindParam.new(1).must_equal(BindParam.new(1))
BindParam.new("foo").must_equal(BindParam.new("foo"))
end
- it 'is not equal to other nodes' do
+ it "is not equal to other nodes" do
BindParam.new(nil).wont_equal(Node.new)
end
- it 'is not equal to bind params with different values' do
+ it "is not equal to bind params with different values" do
BindParam.new(1).wont_equal(BindParam.new(2))
end
end
diff --git a/activerecord/test/cases/arel/nodes/case_test.rb b/activerecord/test/cases/arel/nodes/case_test.rb
index 70364fe6ab..2c087e624e 100644
--- a/activerecord/test/cases/arel/nodes/case_test.rb
+++ b/activerecord/test/cases/arel/nodes/case_test.rb
@@ -1,26 +1,27 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Nodes
- describe 'Case' do
- describe '#initialize' do
- it 'sets case expression from first argument' do
- node = Case.new 'foo'
+ describe "Case" do
+ describe "#initialize" do
+ it "sets case expression from first argument" do
+ node = Case.new "foo"
- assert_equal 'foo', node.case
+ assert_equal "foo", node.case
end
- it 'sets default case from second argument' do
- node = Case.new nil, 'bar'
+ it "sets default case from second argument" do
+ node = Case.new nil, "bar"
- assert_equal 'bar', node.default
+ assert_equal "bar", node.default
end
end
- describe '#clone' do
- it 'clones case, conditions and default' do
- foo = Nodes.build_quoted 'foo'
+ describe "#clone" do
+ it "clones case, conditions and default" do
+ foo = Nodes.build_quoted "foo"
node = Case.new
node.case = foo
@@ -40,9 +41,9 @@ module Arel
end
end
- describe 'equality' do
- it 'is equal with equal ivars' do
- foo = Nodes.build_quoted 'foo'
+ describe "equality" do
+ it "is equal with equal ivars" do
+ foo = Nodes.build_quoted "foo"
one = Nodes.build_quoted 1
zero = Nodes.build_quoted 0
@@ -59,9 +60,9 @@ module Arel
assert_equal 1, array.uniq.size
end
- it 'is not equal with different ivars' do
- foo = Nodes.build_quoted 'foo'
- bar = Nodes.build_quoted 'bar'
+ it "is not equal with different ivars" do
+ foo = Nodes.build_quoted "foo"
+ bar = Nodes.build_quoted "bar"
one = Nodes.build_quoted 1
zero = Nodes.build_quoted 0
diff --git a/activerecord/test/cases/arel/nodes/casted_test.rb b/activerecord/test/cases/arel/nodes/casted_test.rb
index a6e2dd2294..e27f58a4e2 100644
--- a/activerecord/test/cases/arel/nodes/casted_test.rb
+++ b/activerecord/test/cases/arel/nodes/casted_test.rb
@@ -1,11 +1,12 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Nodes
describe Casted do
- describe '#hash' do
- it 'is equal when eql? returns true' do
+ describe "#hash" do
+ it "is equal when eql? returns true" do
one = Casted.new 1, 2
also_one = Casted.new 1, 2
diff --git a/activerecord/test/cases/arel/nodes/count_test.rb b/activerecord/test/cases/arel/nodes/count_test.rb
index 28d8481993..3107659e77 100644
--- a/activerecord/test/cases/arel/nodes/count_test.rb
+++ b/activerecord/test/cases/arel/nodes/count_test.rb
@@ -1,11 +1,12 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
class Arel::Nodes::CountTest < Arel::Spec
describe "as" do
- it 'should alias the count' do
+ it "should alias the count" do
table = Arel::Table.new :users
- table[:id].count.as('foo').to_sql.must_be_like %{
+ table[:id].count.as("foo").to_sql.must_be_like %{
COUNT("users"."id") AS foo
}
end
@@ -20,20 +21,20 @@ class Arel::Nodes::CountTest < Arel::Spec
end
end
- describe 'equality' do
- it 'is equal with equal ivars' do
- array = [Arel::Nodes::Count.new('foo'), Arel::Nodes::Count.new('foo')]
+ describe "equality" do
+ it "is equal with equal ivars" do
+ array = [Arel::Nodes::Count.new("foo"), Arel::Nodes::Count.new("foo")]
assert_equal 1, array.uniq.size
end
- it 'is not equal with different ivars' do
- array = [Arel::Nodes::Count.new('foo'), Arel::Nodes::Count.new('foo!')]
+ it "is not equal with different ivars" do
+ array = [Arel::Nodes::Count.new("foo"), Arel::Nodes::Count.new("foo!")]
assert_equal 2, array.uniq.size
end
end
- describe 'math' do
- it 'allows mathematical functions' do
+ describe "math" do
+ it "allows mathematical functions" do
table = Arel::Table.new :users
(table[:id].count + 1).to_sql.must_be_like %{
(COUNT("users"."id") + 1)
diff --git a/activerecord/test/cases/arel/nodes/delete_statement_test.rb b/activerecord/test/cases/arel/nodes/delete_statement_test.rb
index ada8964646..3f078063a4 100644
--- a/activerecord/test/cases/arel/nodes/delete_statement_test.rb
+++ b/activerecord/test/cases/arel/nodes/delete_statement_test.rb
@@ -1,5 +1,6 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
describe Arel::Nodes::DeleteStatement do
describe "#clone" do
@@ -13,8 +14,8 @@ describe Arel::Nodes::DeleteStatement do
end
end
- describe 'equality' do
- it 'is equal with equal ivars' do
+ describe "equality" do
+ it "is equal with equal ivars" do
statement1 = Arel::Nodes::DeleteStatement.new
statement1.wheres = %w[a b c]
statement2 = Arel::Nodes::DeleteStatement.new
@@ -23,7 +24,7 @@ describe Arel::Nodes::DeleteStatement do
assert_equal 1, array.uniq.size
end
- it 'is not equal with different ivars' do
+ it "is not equal with different ivars" do
statement1 = Arel::Nodes::DeleteStatement.new
statement1.wheres = %w[a b c]
statement2 = Arel::Nodes::DeleteStatement.new
diff --git a/activerecord/test/cases/arel/nodes/descending_test.rb b/activerecord/test/cases/arel/nodes/descending_test.rb
index 5fe0ba62b0..45e22de17b 100644
--- a/activerecord/test/cases/arel/nodes/descending_test.rb
+++ b/activerecord/test/cases/arel/nodes/descending_test.rb
@@ -1,43 +1,44 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Nodes
class TestDescending < Arel::Test
def test_construct
- descending = Descending.new 'zomg'
- assert_equal 'zomg', descending.expr
+ descending = Descending.new "zomg"
+ assert_equal "zomg", descending.expr
end
def test_reverse
- descending = Descending.new 'zomg'
+ descending = Descending.new "zomg"
ascending = descending.reverse
assert_kind_of Ascending, ascending
assert_equal descending.expr, ascending.expr
end
def test_direction
- descending = Descending.new 'zomg'
+ descending = Descending.new "zomg"
assert_equal :desc, descending.direction
end
def test_ascending?
- descending = Descending.new 'zomg'
+ descending = Descending.new "zomg"
assert !descending.ascending?
end
def test_descending?
- descending = Descending.new 'zomg'
+ descending = Descending.new "zomg"
assert descending.descending?
end
def test_equality_with_same_ivars
- array = [Descending.new('zomg'), Descending.new('zomg')]
+ array = [Descending.new("zomg"), Descending.new("zomg")]
assert_equal 1, array.uniq.size
end
def test_inequality_with_different_ivars
- array = [Descending.new('zomg'), Descending.new('zomg!')]
+ array = [Descending.new("zomg"), Descending.new("zomg!")]
assert_equal 2, array.uniq.size
end
end
diff --git a/activerecord/test/cases/arel/nodes/distinct_test.rb b/activerecord/test/cases/arel/nodes/distinct_test.rb
index 465700118e..de5f0ee588 100644
--- a/activerecord/test/cases/arel/nodes/distinct_test.rb
+++ b/activerecord/test/cases/arel/nodes/distinct_test.rb
@@ -1,16 +1,17 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Nodes
- describe 'Distinct' do
- describe 'equality' do
- it 'is equal to other distinct nodes' do
+ describe "Distinct" do
+ describe "equality" do
+ it "is equal to other distinct nodes" do
array = [Distinct.new, Distinct.new]
assert_equal 1, array.uniq.size
end
- it 'is not equal with other nodes' do
+ it "is not equal with other nodes" do
array = [Distinct.new, Node.new]
assert_equal 2, array.uniq.size
end
@@ -18,4 +19,3 @@ module Arel
end
end
end
-
diff --git a/activerecord/test/cases/arel/nodes/equality_test.rb b/activerecord/test/cases/arel/nodes/equality_test.rb
index 28a74de321..e173720e86 100644
--- a/activerecord/test/cases/arel/nodes/equality_test.rb
+++ b/activerecord/test/cases/arel/nodes/equality_test.rb
@@ -1,37 +1,38 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Nodes
- describe 'equality' do
+ describe "equality" do
# FIXME: backwards compat
- describe 'backwards compat' do
- describe 'operator' do
- it 'returns :==' do
+ describe "backwards compat" do
+ describe "operator" do
+ it "returns :==" do
attr = Table.new(:users)[:id]
- left = attr.eq(10)
+ left = attr.eq(10)
left.operator.must_equal :==
end
end
- describe 'operand1' do
+ describe "operand1" do
it "should equal left" do
attr = Table.new(:users)[:id]
- left = attr.eq(10)
+ left = attr.eq(10)
left.left.must_equal left.operand1
end
end
- describe 'operand2' do
+ describe "operand2" do
it "should equal right" do
attr = Table.new(:users)[:id]
- left = attr.eq(10)
+ left = attr.eq(10)
left.right.must_equal left.operand2
end
end
- describe 'to_sql' do
- it 'takes an engine' do
+ describe "to_sql" do
+ it "takes an engine" do
engine = FakeRecord::Base.new
engine.connection.extend Module.new {
attr_accessor :quote_count
@@ -49,8 +50,8 @@ module Arel
end
end
- describe 'or' do
- it 'makes an OR node' do
+ describe "or" do
+ it "makes an OR node" do
attr = Table.new(:users)[:id]
left = attr.eq(10)
right = attr.eq(11)
@@ -60,8 +61,8 @@ module Arel
end
end
- describe 'and' do
- it 'makes and AND node' do
+ describe "and" do
+ it "makes and AND node" do
attr = Table.new(:users)[:id]
left = attr.eq(10)
right = attr.eq(11)
@@ -71,13 +72,13 @@ module Arel
end
end
- it 'is equal with equal ivars' do
- array = [Equality.new('foo', 'bar'), Equality.new('foo', 'bar')]
+ it "is equal with equal ivars" do
+ array = [Equality.new("foo", "bar"), Equality.new("foo", "bar")]
assert_equal 1, array.uniq.size
end
- it 'is not equal with different ivars' do
- array = [Equality.new('foo', 'bar'), Equality.new('foo', 'baz')]
+ it "is not equal with different ivars" do
+ array = [Equality.new("foo", "bar"), Equality.new("foo", "baz")]
assert_equal 2, array.uniq.size
end
end
diff --git a/activerecord/test/cases/arel/nodes/extract_test.rb b/activerecord/test/cases/arel/nodes/extract_test.rb
index f6dc1626a4..8fc1e04d67 100644
--- a/activerecord/test/cases/arel/nodes/extract_test.rb
+++ b/activerecord/test/cases/arel/nodes/extract_test.rb
@@ -1,41 +1,42 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
class Arel::Nodes::ExtractTest < Arel::Spec
it "should extract field" do
table = Arel::Table.new :users
- table[:timestamp].extract('date').to_sql.must_be_like %{
+ table[:timestamp].extract("date").to_sql.must_be_like %{
EXTRACT(DATE FROM "users"."timestamp")
}
end
describe "as" do
- it 'should alias the extract' do
+ it "should alias the extract" do
table = Arel::Table.new :users
- table[:timestamp].extract('date').as('foo').to_sql.must_be_like %{
+ table[:timestamp].extract("date").as("foo").to_sql.must_be_like %{
EXTRACT(DATE FROM "users"."timestamp") AS foo
}
end
- it 'should not mutate the extract' do
+ it "should not mutate the extract" do
table = Arel::Table.new :users
- extract = table[:timestamp].extract('date')
+ extract = table[:timestamp].extract("date")
before = extract.dup
- extract.as('foo')
+ extract.as("foo")
assert_equal extract, before
end
end
- describe 'equality' do
- it 'is equal with equal ivars' do
+ describe "equality" do
+ it "is equal with equal ivars" do
table = Arel::Table.new :users
- array = [table[:attr].extract('foo'), table[:attr].extract('foo')]
+ array = [table[:attr].extract("foo"), table[:attr].extract("foo")]
assert_equal 1, array.uniq.size
end
- it 'is not equal with different ivars' do
+ it "is not equal with different ivars" do
table = Arel::Table.new :users
- array = [table[:attr].extract('foo'), table[:attr].extract('bar')]
+ array = [table[:attr].extract("foo"), table[:attr].extract("bar")]
assert_equal 2, array.uniq.size
end
end
diff --git a/activerecord/test/cases/arel/nodes/false_test.rb b/activerecord/test/cases/arel/nodes/false_test.rb
index 8b91dc227c..4ecf8e332e 100644
--- a/activerecord/test/cases/arel/nodes/false_test.rb
+++ b/activerecord/test/cases/arel/nodes/false_test.rb
@@ -1,16 +1,17 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Nodes
- describe 'False' do
- describe 'equality' do
- it 'is equal to other false nodes' do
+ describe "False" do
+ describe "equality" do
+ it "is equal to other false nodes" do
array = [False.new, False.new]
assert_equal 1, array.uniq.size
end
- it 'is not equal with other nodes' do
+ it "is not equal with other nodes" do
array = [False.new, Node.new]
assert_equal 2, array.uniq.size
end
@@ -18,4 +19,3 @@ module Arel
end
end
end
-
diff --git a/activerecord/test/cases/arel/nodes/grouping_test.rb b/activerecord/test/cases/arel/nodes/grouping_test.rb
index 7ad1584f0f..03d5c142d5 100644
--- a/activerecord/test/cases/arel/nodes/grouping_test.rb
+++ b/activerecord/test/cases/arel/nodes/grouping_test.rb
@@ -1,26 +1,26 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Nodes
class GroupingTest < Arel::Spec
- it 'should create Equality nodes' do
- grouping = Grouping.new(Nodes.build_quoted('foo'))
- grouping.eq('foo').to_sql.must_be_like %q{('foo') = 'foo'}
+ it "should create Equality nodes" do
+ grouping = Grouping.new(Nodes.build_quoted("foo"))
+ grouping.eq("foo").to_sql.must_be_like "('foo') = 'foo'"
end
- describe 'equality' do
- it 'is equal with equal ivars' do
- array = [Grouping.new('foo'), Grouping.new('foo')]
+ describe "equality" do
+ it "is equal with equal ivars" do
+ array = [Grouping.new("foo"), Grouping.new("foo")]
assert_equal 1, array.uniq.size
end
- it 'is not equal with different ivars' do
- array = [Grouping.new('foo'), Grouping.new('bar')]
+ it "is not equal with different ivars" do
+ array = [Grouping.new("foo"), Grouping.new("bar")]
assert_equal 2, array.uniq.size
end
end
end
end
end
-
diff --git a/activerecord/test/cases/arel/nodes/infix_operation_test.rb b/activerecord/test/cases/arel/nodes/infix_operation_test.rb
index 28a4710dc0..dcf2200c12 100644
--- a/activerecord/test/cases/arel/nodes/infix_operation_test.rb
+++ b/activerecord/test/cases/arel/nodes/infix_operation_test.rb
@@ -1,5 +1,6 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Nodes
@@ -13,10 +14,10 @@ module Arel
def test_operation_alias
operation = InfixOperation.new :+, 1, 2
- aliaz = operation.as('zomg')
+ aliaz = operation.as("zomg")
assert_kind_of As, aliaz
assert_equal operation, aliaz.left
- assert_equal 'zomg', aliaz.right
+ assert_equal "zomg", aliaz.right
end
def test_operation_ordering
diff --git a/activerecord/test/cases/arel/nodes/insert_statement_test.rb b/activerecord/test/cases/arel/nodes/insert_statement_test.rb
index 87f9d83a32..252a0d0d0b 100644
--- a/activerecord/test/cases/arel/nodes/insert_statement_test.rb
+++ b/activerecord/test/cases/arel/nodes/insert_statement_test.rb
@@ -1,5 +1,6 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
describe Arel::Nodes::InsertStatement do
describe "#clone" do
@@ -17,8 +18,8 @@ describe Arel::Nodes::InsertStatement do
end
end
- describe 'equality' do
- it 'is equal with equal ivars' do
+ describe "equality" do
+ it "is equal with equal ivars" do
statement1 = Arel::Nodes::InsertStatement.new
statement1.columns = %w[a b c]
statement1.values = %w[x y z]
@@ -29,7 +30,7 @@ describe Arel::Nodes::InsertStatement do
assert_equal 1, array.uniq.size
end
- it 'is not equal with different ivars' do
+ it "is not equal with different ivars" do
statement1 = Arel::Nodes::InsertStatement.new
statement1.columns = %w[a b c]
statement1.values = %w[x y z]
diff --git a/activerecord/test/cases/arel/nodes/named_function_test.rb b/activerecord/test/cases/arel/nodes/named_function_test.rb
index 30f6dac595..dbd7ae43be 100644
--- a/activerecord/test/cases/arel/nodes/named_function_test.rb
+++ b/activerecord/test/cases/arel/nodes/named_function_test.rb
@@ -1,44 +1,45 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Nodes
class TestNamedFunction < Arel::Test
def test_construct
- function = NamedFunction.new 'omg', 'zomg'
- assert_equal 'omg', function.name
- assert_equal 'zomg', function.expressions
+ function = NamedFunction.new "omg", "zomg"
+ assert_equal "omg", function.name
+ assert_equal "zomg", function.expressions
end
def test_function_alias
- function = NamedFunction.new 'omg', 'zomg'
- function = function.as('wth')
- assert_equal 'omg', function.name
- assert_equal 'zomg', function.expressions
+ function = NamedFunction.new "omg", "zomg"
+ function = function.as("wth")
+ assert_equal "omg", function.name
+ assert_equal "zomg", function.expressions
assert_kind_of SqlLiteral, function.alias
- assert_equal 'wth', function.alias
+ assert_equal "wth", function.alias
end
def test_construct_with_alias
- function = NamedFunction.new 'omg', 'zomg', 'wth'
- assert_equal 'omg', function.name
- assert_equal 'zomg', function.expressions
+ function = NamedFunction.new "omg", "zomg", "wth"
+ assert_equal "omg", function.name
+ assert_equal "zomg", function.expressions
assert_kind_of SqlLiteral, function.alias
- assert_equal 'wth', function.alias
+ assert_equal "wth", function.alias
end
def test_equality_with_same_ivars
array = [
- NamedFunction.new('omg', 'zomg', 'wth'),
- NamedFunction.new('omg', 'zomg', 'wth')
+ NamedFunction.new("omg", "zomg", "wth"),
+ NamedFunction.new("omg", "zomg", "wth")
]
assert_equal 1, array.uniq.size
end
def test_inequality_with_different_ivars
array = [
- NamedFunction.new('omg', 'zomg', 'wth'),
- NamedFunction.new('zomg', 'zomg', 'wth')
+ NamedFunction.new("omg", "zomg", "wth"),
+ NamedFunction.new("zomg", "zomg", "wth")
]
assert_equal 2, array.uniq.size
end
diff --git a/activerecord/test/cases/arel/nodes/node_test.rb b/activerecord/test/cases/arel/nodes/node_test.rb
index c1d3a01d1c..f4f07ef2c5 100644
--- a/activerecord/test/cases/arel/nodes/node_test.rb
+++ b/activerecord/test/cases/arel/nodes/node_test.rb
@@ -1,5 +1,6 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
class TestNode < Arel::Test
diff --git a/activerecord/test/cases/arel/nodes/not_test.rb b/activerecord/test/cases/arel/nodes/not_test.rb
index 15f94a6f10..481e678700 100644
--- a/activerecord/test/cases/arel/nodes/not_test.rb
+++ b/activerecord/test/cases/arel/nodes/not_test.rb
@@ -1,11 +1,12 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Nodes
- describe 'not' do
- describe '#not' do
- it 'makes a NOT node' do
+ describe "not" do
+ describe "#not" do
+ it "makes a NOT node" do
attr = Table.new(:users)[:id]
expr = attr.eq(10)
node = expr.not
@@ -14,14 +15,14 @@ module Arel
end
end
- describe 'equality' do
- it 'is equal with equal ivars' do
- array = [Not.new('foo'), Not.new('foo')]
+ describe "equality" do
+ it "is equal with equal ivars" do
+ array = [Not.new("foo"), Not.new("foo")]
assert_equal 1, array.uniq.size
end
- it 'is not equal with different ivars' do
- array = [Not.new('foo'), Not.new('baz')]
+ it "is not equal with different ivars" do
+ array = [Not.new("foo"), Not.new("baz")]
assert_equal 2, array.uniq.size
end
end
diff --git a/activerecord/test/cases/arel/nodes/or_test.rb b/activerecord/test/cases/arel/nodes/or_test.rb
index 4f8d56d165..93f826740d 100644
--- a/activerecord/test/cases/arel/nodes/or_test.rb
+++ b/activerecord/test/cases/arel/nodes/or_test.rb
@@ -1,11 +1,12 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Nodes
- describe 'or' do
- describe '#or' do
- it 'makes an OR node' do
+ describe "or" do
+ describe "#or" do
+ it "makes an OR node" do
attr = Table.new(:users)[:id]
left = attr.eq(10)
right = attr.eq(11)
@@ -19,14 +20,14 @@ module Arel
end
end
- describe 'equality' do
- it 'is equal with equal ivars' do
- array = [Or.new('foo', 'bar'), Or.new('foo', 'bar')]
+ describe "equality" do
+ it "is equal with equal ivars" do
+ array = [Or.new("foo", "bar"), Or.new("foo", "bar")]
assert_equal 1, array.uniq.size
end
- it 'is not equal with different ivars' do
- array = [Or.new('foo', 'bar'), Or.new('foo', 'baz')]
+ it "is not equal with different ivars" do
+ array = [Or.new("foo", "bar"), Or.new("foo", "baz")]
assert_equal 2, array.uniq.size
end
end
diff --git a/activerecord/test/cases/arel/nodes/over_test.rb b/activerecord/test/cases/arel/nodes/over_test.rb
index c9804c395f..981ec2e34b 100644
--- a/activerecord/test/cases/arel/nodes/over_test.rb
+++ b/activerecord/test/cases/arel/nodes/over_test.rb
@@ -1,36 +1,37 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
class Arel::Nodes::OverTest < Arel::Spec
- describe 'as' do
- it 'should alias the expression' do
+ describe "as" do
+ it "should alias the expression" do
table = Arel::Table.new :users
- table[:id].count.over.as('foo').to_sql.must_be_like %{
+ table[:id].count.over.as("foo").to_sql.must_be_like %{
COUNT("users"."id") OVER () AS foo
}
end
end
- describe 'with literal' do
- it 'should reference the window definition by name' do
+ describe "with literal" do
+ it "should reference the window definition by name" do
table = Arel::Table.new :users
- table[:id].count.over('foo').to_sql.must_be_like %{
+ table[:id].count.over("foo").to_sql.must_be_like %{
COUNT("users"."id") OVER "foo"
}
end
end
- describe 'with SQL literal' do
- it 'should reference the window definition by name' do
+ describe "with SQL literal" do
+ it "should reference the window definition by name" do
table = Arel::Table.new :users
- table[:id].count.over(Arel.sql('foo')).to_sql.must_be_like %{
+ table[:id].count.over(Arel.sql("foo")).to_sql.must_be_like %{
COUNT("users"."id") OVER foo
}
end
end
- describe 'with no expression' do
- it 'should use empty definition' do
+ describe "with no expression" do
+ it "should use empty definition" do
table = Arel::Table.new :users
table[:id].count.over.to_sql.must_be_like %{
COUNT("users"."id") OVER ()
@@ -38,29 +39,29 @@ class Arel::Nodes::OverTest < Arel::Spec
end
end
- describe 'with expression' do
- it 'should use definition in sub-expression' do
+ describe "with expression" do
+ it "should use definition in sub-expression" do
table = Arel::Table.new :users
- window = Arel::Nodes::Window.new.order(table['foo'])
+ window = Arel::Nodes::Window.new.order(table["foo"])
table[:id].count.over(window).to_sql.must_be_like %{
COUNT("users"."id") OVER (ORDER BY \"users\".\"foo\")
}
end
end
- describe 'equality' do
- it 'is equal with equal ivars' do
+ describe "equality" do
+ it "is equal with equal ivars" do
array = [
- Arel::Nodes::Over.new('foo', 'bar'),
- Arel::Nodes::Over.new('foo', 'bar')
+ Arel::Nodes::Over.new("foo", "bar"),
+ Arel::Nodes::Over.new("foo", "bar")
]
assert_equal 1, array.uniq.size
end
- it 'is not equal with different ivars' do
+ it "is not equal with different ivars" do
array = [
- Arel::Nodes::Over.new('foo', 'bar'),
- Arel::Nodes::Over.new('foo', 'baz')
+ Arel::Nodes::Over.new("foo", "bar"),
+ Arel::Nodes::Over.new("foo", "baz")
]
assert_equal 2, array.uniq.size
end
diff --git a/activerecord/test/cases/arel/nodes/select_core_test.rb b/activerecord/test/cases/arel/nodes/select_core_test.rb
index bbb06666b6..1cdc7a2360 100644
--- a/activerecord/test/cases/arel/nodes/select_core_test.rb
+++ b/activerecord/test/cases/arel/nodes/select_core_test.rb
@@ -1,5 +1,6 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Nodes
@@ -25,7 +26,7 @@ module Arel
core = Arel::Nodes::SelectCore.new
core.set_quantifier = Arel::Nodes::Distinct.new
viz = Arel::Visitors::ToSql.new Table.engine.connection_pool
- assert_match 'DISTINCT', viz.accept(core, Collectors::SQLString.new).value
+ assert_match "DISTINCT", viz.accept(core, Collectors::SQLString.new).value
end
def test_equality_with_same_ivars
diff --git a/activerecord/test/cases/arel/nodes/select_statement_test.rb b/activerecord/test/cases/arel/nodes/select_statement_test.rb
index 5e313e03fa..a91605de3e 100644
--- a/activerecord/test/cases/arel/nodes/select_statement_test.rb
+++ b/activerecord/test/cases/arel/nodes/select_statement_test.rb
@@ -1,5 +1,6 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
describe Arel::Nodes::SelectStatement do
describe "#clone" do
@@ -12,37 +13,37 @@ describe Arel::Nodes::SelectStatement do
end
end
- describe 'equality' do
- it 'is equal with equal ivars' do
+ describe "equality" do
+ it "is equal with equal ivars" do
statement1 = Arel::Nodes::SelectStatement.new %w[a b c]
statement1.offset = 1
statement1.limit = 2
statement1.lock = false
statement1.orders = %w[x y z]
- statement1.with = 'zomg'
+ statement1.with = "zomg"
statement2 = Arel::Nodes::SelectStatement.new %w[a b c]
statement2.offset = 1
statement2.limit = 2
statement2.lock = false
statement2.orders = %w[x y z]
- statement2.with = 'zomg'
+ statement2.with = "zomg"
array = [statement1, statement2]
assert_equal 1, array.uniq.size
end
- it 'is not equal with different ivars' do
+ it "is not equal with different ivars" do
statement1 = Arel::Nodes::SelectStatement.new %w[a b c]
statement1.offset = 1
statement1.limit = 2
statement1.lock = false
statement1.orders = %w[x y z]
- statement1.with = 'zomg'
+ statement1.with = "zomg"
statement2 = Arel::Nodes::SelectStatement.new %w[a b c]
statement2.offset = 1
statement2.limit = 2
statement2.lock = false
statement2.orders = %w[x y z]
- statement2.with = 'wth'
+ statement2.with = "wth"
array = [statement1, statement2]
assert_equal 2, array.uniq.size
end
diff --git a/activerecord/test/cases/arel/nodes/sql_literal_test.rb b/activerecord/test/cases/arel/nodes/sql_literal_test.rb
index 0c4f23be78..3b95fed1f4 100644
--- a/activerecord/test/cases/arel/nodes/sql_literal_test.rb
+++ b/activerecord/test/cases/arel/nodes/sql_literal_test.rb
@@ -1,6 +1,7 @@
# frozen_string_literal: true
-require_relative '../helper'
-require 'yaml'
+
+require_relative "../helper"
+require "yaml"
module Arel
module Nodes
@@ -9,64 +10,64 @@ module Arel
@visitor = Visitors::ToSql.new Table.engine.connection
end
- def compile node
+ def compile(node)
@visitor.accept(node, Collectors::SQLString.new).value
end
- describe 'sql' do
- it 'makes a sql literal node' do
- sql = Arel.sql 'foo'
+ describe "sql" do
+ it "makes a sql literal node" do
+ sql = Arel.sql "foo"
sql.must_be_kind_of Arel::Nodes::SqlLiteral
end
end
- describe 'count' do
- it 'makes a count node' do
- node = SqlLiteral.new('*').count
+ describe "count" do
+ it "makes a count node" do
+ node = SqlLiteral.new("*").count
compile(node).must_be_like %{ COUNT(*) }
end
- it 'makes a distinct node' do
- node = SqlLiteral.new('*').count true
+ it "makes a distinct node" do
+ node = SqlLiteral.new("*").count true
compile(node).must_be_like %{ COUNT(DISTINCT *) }
end
end
- describe 'equality' do
- it 'makes an equality node' do
- node = SqlLiteral.new('foo').eq(1)
+ describe "equality" do
+ it "makes an equality node" do
+ node = SqlLiteral.new("foo").eq(1)
compile(node).must_be_like %{ foo = 1 }
end
- it 'is equal with equal contents' do
- array = [SqlLiteral.new('foo'), SqlLiteral.new('foo')]
+ it "is equal with equal contents" do
+ array = [SqlLiteral.new("foo"), SqlLiteral.new("foo")]
assert_equal 1, array.uniq.size
end
- it 'is not equal with different contents' do
- array = [SqlLiteral.new('foo'), SqlLiteral.new('bar')]
+ it "is not equal with different contents" do
+ array = [SqlLiteral.new("foo"), SqlLiteral.new("bar")]
assert_equal 2, array.uniq.size
end
end
describe 'grouped "or" equality' do
- it 'makes a grouping node with an or node' do
- node = SqlLiteral.new('foo').eq_any([1,2])
+ it "makes a grouping node with an or node" do
+ node = SqlLiteral.new("foo").eq_any([1, 2])
compile(node).must_be_like %{ (foo = 1 OR foo = 2) }
end
end
describe 'grouped "and" equality' do
- it 'makes a grouping node with an and node' do
- node = SqlLiteral.new('foo').eq_all([1,2])
+ it "makes a grouping node with an and node" do
+ node = SqlLiteral.new("foo").eq_all([1, 2])
compile(node).must_be_like %{ (foo = 1 AND foo = 2) }
end
end
- describe 'serialization' do
- it 'serializes into YAML' do
- yaml_literal = SqlLiteral.new('foo').to_yaml
- assert_equal('foo', YAML.load(yaml_literal))
+ describe "serialization" do
+ it "serializes into YAML" do
+ yaml_literal = SqlLiteral.new("foo").to_yaml
+ assert_equal("foo", YAML.load(yaml_literal))
end
end
end
diff --git a/activerecord/test/cases/arel/nodes/sum_test.rb b/activerecord/test/cases/arel/nodes/sum_test.rb
index 46c908d872..5015964951 100644
--- a/activerecord/test/cases/arel/nodes/sum_test.rb
+++ b/activerecord/test/cases/arel/nodes/sum_test.rb
@@ -1,30 +1,31 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
class Arel::Nodes::SumTest < Arel::Spec
describe "as" do
- it 'should alias the sum' do
+ it "should alias the sum" do
table = Arel::Table.new :users
- table[:id].sum.as('foo').to_sql.must_be_like %{
+ table[:id].sum.as("foo").to_sql.must_be_like %{
SUM("users"."id") AS foo
}
end
end
- describe 'equality' do
- it 'is equal with equal ivars' do
- array = [Arel::Nodes::Sum.new('foo'), Arel::Nodes::Sum.new('foo')]
+ describe "equality" do
+ it "is equal with equal ivars" do
+ array = [Arel::Nodes::Sum.new("foo"), Arel::Nodes::Sum.new("foo")]
assert_equal 1, array.uniq.size
end
- it 'is not equal with different ivars' do
- array = [Arel::Nodes::Sum.new('foo'), Arel::Nodes::Sum.new('foo!')]
+ it "is not equal with different ivars" do
+ array = [Arel::Nodes::Sum.new("foo"), Arel::Nodes::Sum.new("foo!")]
assert_equal 2, array.uniq.size
end
end
-
- describe 'order' do
- it 'should order the sum' do
+
+ describe "order" do
+ it "should order the sum" do
table = Arel::Table.new :users
table[:id].sum.desc.to_sql.must_be_like %{
SUM("users"."id") DESC
diff --git a/activerecord/test/cases/arel/nodes/table_alias_test.rb b/activerecord/test/cases/arel/nodes/table_alias_test.rb
index b1b49919d5..c661b6771e 100644
--- a/activerecord/test/cases/arel/nodes/table_alias_test.rb
+++ b/activerecord/test/cases/arel/nodes/table_alias_test.rb
@@ -1,11 +1,12 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Nodes
- describe 'table alias' do
- describe 'equality' do
- it 'is equal with equal ivars' do
+ describe "table alias" do
+ describe "equality" do
+ it "is equal with equal ivars" do
relation1 = Table.new(:users)
node1 = TableAlias.new relation1, :foo
relation2 = Table.new(:users)
@@ -14,7 +15,7 @@ module Arel
assert_equal 1, array.uniq.size
end
- it 'is not equal with different ivars' do
+ it "is not equal with different ivars" do
relation1 = Table.new(:users)
node1 = TableAlias.new relation1, :foo
relation2 = Table.new(:users)
diff --git a/activerecord/test/cases/arel/nodes/true_test.rb b/activerecord/test/cases/arel/nodes/true_test.rb
index 198e7b1aa4..1e85fe7d48 100644
--- a/activerecord/test/cases/arel/nodes/true_test.rb
+++ b/activerecord/test/cases/arel/nodes/true_test.rb
@@ -1,16 +1,17 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Nodes
- describe 'True' do
- describe 'equality' do
- it 'is equal to other true nodes' do
+ describe "True" do
+ describe "equality" do
+ it "is equal to other true nodes" do
array = [True.new, True.new]
assert_equal 1, array.uniq.size
end
- it 'is not equal with other nodes' do
+ it "is not equal with other nodes" do
array = [True.new, Node.new]
assert_equal 2, array.uniq.size
end
@@ -18,5 +19,3 @@ module Arel
end
end
end
-
-
diff --git a/activerecord/test/cases/arel/nodes/unary_operation_test.rb b/activerecord/test/cases/arel/nodes/unary_operation_test.rb
index e76b59c8e1..f0dd0c625c 100644
--- a/activerecord/test/cases/arel/nodes/unary_operation_test.rb
+++ b/activerecord/test/cases/arel/nodes/unary_operation_test.rb
@@ -1,5 +1,6 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Nodes
@@ -12,10 +13,10 @@ module Arel
def test_operation_alias
operation = UnaryOperation.new :-, 1
- aliaz = operation.as('zomg')
+ aliaz = operation.as("zomg")
assert_kind_of As, aliaz
assert_equal operation, aliaz.left
- assert_equal 'zomg', aliaz.right
+ assert_equal "zomg", aliaz.right
end
def test_operation_ordering
diff --git a/activerecord/test/cases/arel/nodes/update_statement_test.rb b/activerecord/test/cases/arel/nodes/update_statement_test.rb
index 3a635f75d6..a83ce32f68 100644
--- a/activerecord/test/cases/arel/nodes/update_statement_test.rb
+++ b/activerecord/test/cases/arel/nodes/update_statement_test.rb
@@ -1,5 +1,6 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
describe Arel::Nodes::UpdateStatement do
describe "#clone" do
@@ -17,41 +18,41 @@ describe Arel::Nodes::UpdateStatement do
end
end
- describe 'equality' do
- it 'is equal with equal ivars' do
+ describe "equality" do
+ it "is equal with equal ivars" do
statement1 = Arel::Nodes::UpdateStatement.new
- statement1.relation = 'zomg'
+ statement1.relation = "zomg"
statement1.wheres = 2
statement1.values = false
statement1.orders = %w[x y z]
statement1.limit = 42
- statement1.key = 'zomg'
+ statement1.key = "zomg"
statement2 = Arel::Nodes::UpdateStatement.new
- statement2.relation = 'zomg'
+ statement2.relation = "zomg"
statement2.wheres = 2
statement2.values = false
statement2.orders = %w[x y z]
statement2.limit = 42
- statement2.key = 'zomg'
+ statement2.key = "zomg"
array = [statement1, statement2]
assert_equal 1, array.uniq.size
end
- it 'is not equal with different ivars' do
+ it "is not equal with different ivars" do
statement1 = Arel::Nodes::UpdateStatement.new
- statement1.relation = 'zomg'
+ statement1.relation = "zomg"
statement1.wheres = 2
statement1.values = false
statement1.orders = %w[x y z]
statement1.limit = 42
- statement1.key = 'zomg'
+ statement1.key = "zomg"
statement2 = Arel::Nodes::UpdateStatement.new
- statement2.relation = 'zomg'
+ statement2.relation = "zomg"
statement2.wheres = 2
statement2.values = false
statement2.orders = %w[x y z]
statement2.limit = 42
- statement2.key = 'wth'
+ statement2.key = "wth"
array = [statement1, statement2]
assert_equal 2, array.uniq.size
end
diff --git a/activerecord/test/cases/arel/nodes/window_test.rb b/activerecord/test/cases/arel/nodes/window_test.rb
index 81ecd5ced8..729b0556a4 100644
--- a/activerecord/test/cases/arel/nodes/window_test.rb
+++ b/activerecord/test/cases/arel/nodes/window_test.rb
@@ -1,11 +1,12 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Nodes
- describe 'Window' do
- describe 'equality' do
- it 'is equal with equal ivars' do
+ describe "Window" do
+ describe "equality" do
+ it "is equal with equal ivars" do
window1 = Window.new
window1.orders = [1, 2]
window1.partitions = [1]
@@ -18,7 +19,7 @@ module Arel
assert_equal 1, array.uniq.size
end
- it 'is not equal with different ivars' do
+ it "is not equal with different ivars" do
window1 = Window.new
window1.orders = [1, 2]
window1.partitions = [1]
@@ -33,14 +34,14 @@ module Arel
end
end
- describe 'NamedWindow' do
- describe 'equality' do
- it 'is equal with equal ivars' do
- window1 = NamedWindow.new 'foo'
+ describe "NamedWindow" do
+ describe "equality" do
+ it "is equal with equal ivars" do
+ window1 = NamedWindow.new "foo"
window1.orders = [1, 2]
window1.partitions = [1]
window1.frame 3
- window2 = NamedWindow.new 'foo'
+ window2 = NamedWindow.new "foo"
window2.orders = [1, 2]
window2.partitions = [1]
window2.frame 3
@@ -48,12 +49,12 @@ module Arel
assert_equal 1, array.uniq.size
end
- it 'is not equal with different ivars' do
- window1 = NamedWindow.new 'foo'
+ it "is not equal with different ivars" do
+ window1 = NamedWindow.new "foo"
window1.orders = [1, 2]
window1.partitions = [1]
window1.frame 3
- window2 = NamedWindow.new 'bar'
+ window2 = NamedWindow.new "bar"
window2.orders = [1, 2]
window2.partitions = [1]
window2.frame 3
@@ -63,14 +64,14 @@ module Arel
end
end
- describe 'CurrentRow' do
- describe 'equality' do
- it 'is equal to other current row nodes' do
+ describe "CurrentRow" do
+ describe "equality" do
+ it "is equal to other current row nodes" do
array = [CurrentRow.new, CurrentRow.new]
assert_equal 1, array.uniq.size
end
- it 'is not equal with other nodes' do
+ it "is not equal with other nodes" do
array = [CurrentRow.new, Node.new]
assert_equal 2, array.uniq.size
end
diff --git a/activerecord/test/cases/arel/nodes_test.rb b/activerecord/test/cases/arel/nodes_test.rb
index 1934ef4c3b..9021de0d20 100644
--- a/activerecord/test/cases/arel/nodes_test.rb
+++ b/activerecord/test/cases/arel/nodes_test.rb
@@ -1,5 +1,6 @@
# frozen_string_literal: true
-require_relative 'helper'
+
+require_relative "helper"
module Arel
module Nodes
@@ -24,12 +25,10 @@ module Arel
eqeq_owner == hash_owner
end
- problem_msg = 'Some subclasses of Arel::Nodes::Node do not have a' \
- ' #== or #eql? or #hash defined from the same class as the others'
+ problem_msg = "Some subclasses of Arel::Nodes::Node do not have a" \
+ " #== or #eql? or #hash defined from the same class as the others"
assert_empty bad_node_descendants, problem_msg
end
-
-
end
end
end
diff --git a/activerecord/test/cases/arel/select_manager_test.rb b/activerecord/test/cases/arel/select_manager_test.rb
index e9056953d8..1bc9f6abf2 100644
--- a/activerecord/test/cases/arel/select_manager_test.rb
+++ b/activerecord/test/cases/arel/select_manager_test.rb
@@ -1,18 +1,18 @@
# frozen_string_literal: true
-require_relative 'helper'
-module Arel
+require_relative "helper"
+module Arel
class SelectManagerTest < Arel::Spec
def test_join_sources
manager = Arel::SelectManager.new
- manager.join_sources << Arel::Nodes::StringJoin.new(Nodes.build_quoted('foo'))
+ manager.join_sources << Arel::Nodes::StringJoin.new(Nodes.build_quoted("foo"))
assert_equal "SELECT FROM 'foo'", manager.to_sql
end
- describe 'backwards compatibility' do
- describe 'project' do
- it 'accepts symbols as sql literals' do
+ describe "backwards compatibility" do
+ describe "project" do
+ it "accepts symbols as sql literals" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.project :id
@@ -23,19 +23,19 @@ module Arel
end
end
- describe 'order' do
- it 'accepts symbols' do
+ describe "order" do
+ it "accepts symbols" do
table = Table.new :users
manager = Arel::SelectManager.new
- manager.project Nodes::SqlLiteral.new '*'
+ manager.project Nodes::SqlLiteral.new "*"
manager.from table
manager.order :foo
manager.to_sql.must_be_like %{ SELECT * FROM "users" ORDER BY foo }
end
end
- describe 'group' do
- it 'takes a symbol' do
+ describe "group" do
+ it "takes a symbol" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.from table
@@ -44,55 +44,55 @@ module Arel
end
end
- describe 'as' do
- it 'makes an AS node by grouping the AST' do
+ describe "as" do
+ it "makes an AS node by grouping the AST" do
manager = Arel::SelectManager.new
- as = manager.as(Arel.sql('foo'))
+ as = manager.as(Arel.sql("foo"))
assert_kind_of Arel::Nodes::Grouping, as.left
assert_equal manager.ast, as.left.expr
- assert_equal 'foo', as.right
+ assert_equal "foo", as.right
end
- it 'converts right to SqlLiteral if a string' do
+ it "converts right to SqlLiteral if a string" do
manager = Arel::SelectManager.new
- as = manager.as('foo')
+ as = manager.as("foo")
assert_kind_of Arel::Nodes::SqlLiteral, as.right
end
- it 'can make a subselect' do
+ it "can make a subselect" do
manager = Arel::SelectManager.new
manager.project Arel.star
- manager.from Arel.sql('zomg')
- as = manager.as(Arel.sql('foo'))
+ manager.from Arel.sql("zomg")
+ as = manager.as(Arel.sql("foo"))
manager = Arel::SelectManager.new
- manager.project Arel.sql('name')
+ manager.project Arel.sql("name")
manager.from as
manager.to_sql.must_be_like "SELECT name FROM (SELECT * FROM zomg) foo"
end
end
- describe 'from' do
- it 'ignores strings when table of same name exists' do
+ describe "from" do
+ it "ignores strings when table of same name exists" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.from table
- manager.from 'users'
- manager.project table['id']
+ manager.from "users"
+ manager.project table["id"]
manager.to_sql.must_be_like 'SELECT "users"."id" FROM users'
end
- it 'should support any ast' do
- table = Table.new :users
+ it "should support any ast" do
+ table = Table.new :users
manager1 = Arel::SelectManager.new
manager2 = Arel::SelectManager.new
- manager2.project(Arel.sql('*'))
+ manager2.project(Arel.sql("*"))
manager2.from table
- manager1.project Arel.sql('lol')
- as = manager2.as Arel.sql('omg')
+ manager1.project Arel.sql("lol")
+ as = manager2.as Arel.sql("omg")
manager1.from(as)
manager1.to_sql.must_be_like %{
@@ -101,32 +101,32 @@ module Arel
end
end
- describe 'having' do
- it 'converts strings to SQLLiterals' do
- table = Table.new :users
+ describe "having" do
+ it "converts strings to SQLLiterals" do
+ table = Table.new :users
mgr = table.from
- mgr.having Arel.sql('foo')
+ mgr.having Arel.sql("foo")
mgr.to_sql.must_be_like %{ SELECT FROM "users" HAVING foo }
end
- it 'can have multiple items specified separately' do
+ it "can have multiple items specified separately" do
table = Table.new :users
mgr = table.from
- mgr.having Arel.sql('foo')
- mgr.having Arel.sql('bar')
+ mgr.having Arel.sql("foo")
+ mgr.having Arel.sql("bar")
mgr.to_sql.must_be_like %{ SELECT FROM "users" HAVING foo AND bar }
end
- it 'can receive any node' do
+ it "can receive any node" do
table = Table.new :users
mgr = table.from
- mgr.having Arel::Nodes::And.new([Arel.sql('foo'), Arel.sql('bar')])
+ mgr.having Arel::Nodes::And.new([Arel.sql("foo"), Arel.sql("bar")])
mgr.to_sql.must_be_like %{ SELECT FROM "users" HAVING foo AND bar }
end
end
- describe 'on' do
- it 'converts to sqlliterals' do
+ describe "on" do
+ it "converts to sqlliterals" do
table = Table.new :users
right = table.alias
mgr = table.from
@@ -134,7 +134,7 @@ module Arel
mgr.to_sql.must_be_like %{ SELECT FROM "users" INNER JOIN "users" "users_2" ON omg }
end
- it 'converts to sqlliterals with multiple items' do
+ it "converts to sqlliterals with multiple items" do
table = Table.new :users
right = table.alias
mgr = table.from
@@ -144,17 +144,17 @@ module Arel
end
end
- describe 'clone' do
- it 'creates new cores' do
- table = Table.new :users, :as => 'foo'
+ describe "clone" do
+ it "creates new cores" do
+ table = Table.new :users, as: "foo"
mgr = table.from
m2 = mgr.clone
m2.project "foo"
mgr.to_sql.wont_equal m2.to_sql
end
- it 'makes updates to the correct copy' do
- table = Table.new :users, :as => 'foo'
+ it "makes updates to the correct copy" do
+ table = Table.new :users, as: "foo"
mgr = table.from
m2 = mgr.clone
m3 = m2.clone
@@ -164,40 +164,40 @@ module Arel
end
end
- describe 'initialize' do
- it 'uses alias in sql' do
- table = Table.new :users, :as => 'foo'
+ describe "initialize" do
+ it "uses alias in sql" do
+ table = Table.new :users, as: "foo"
mgr = table.from
mgr.skip 10
mgr.to_sql.must_be_like %{ SELECT FROM "users" "foo" OFFSET 10 }
end
end
- describe 'skip' do
- it 'should add an offset' do
- table = Table.new :users
+ describe "skip" do
+ it "should add an offset" do
+ table = Table.new :users
mgr = table.from
mgr.skip 10
mgr.to_sql.must_be_like %{ SELECT FROM "users" OFFSET 10 }
end
- it 'should chain' do
- table = Table.new :users
+ it "should chain" do
+ table = Table.new :users
mgr = table.from
mgr.skip(10).to_sql.must_be_like %{ SELECT FROM "users" OFFSET 10 }
end
end
- describe 'offset' do
- it 'should add an offset' do
- table = Table.new :users
+ describe "offset" do
+ it "should add an offset" do
+ table = Table.new :users
mgr = table.from
mgr.offset = 10
mgr.to_sql.must_be_like %{ SELECT FROM "users" OFFSET 10 }
end
- it 'should remove an offset' do
- table = Table.new :users
+ it "should remove an offset" do
+ table = Table.new :users
mgr = table.from
mgr.offset = 10
mgr.to_sql.must_be_like %{ SELECT FROM "users" OFFSET 10 }
@@ -206,35 +206,35 @@ module Arel
mgr.to_sql.must_be_like %{ SELECT FROM "users" }
end
- it 'should return the offset' do
- table = Table.new :users
+ it "should return the offset" do
+ table = Table.new :users
mgr = table.from
mgr.offset = 10
assert_equal 10, mgr.offset
end
end
- describe 'exists' do
- it 'should create an exists clause' do
+ describe "exists" do
+ it "should create an exists clause" do
table = Table.new(:users)
manager = Arel::SelectManager.new table
- manager.project Nodes::SqlLiteral.new '*'
+ manager.project Nodes::SqlLiteral.new "*"
m2 = Arel::SelectManager.new
m2.project manager.exists
m2.to_sql.must_be_like %{ SELECT EXISTS (#{manager.to_sql}) }
end
- it 'can be aliased' do
+ it "can be aliased" do
table = Table.new(:users)
manager = Arel::SelectManager.new table
- manager.project Nodes::SqlLiteral.new '*'
+ manager.project Nodes::SqlLiteral.new "*"
m2 = Arel::SelectManager.new
- m2.project manager.exists.as('foo')
+ m2.project manager.exists.as("foo")
m2.to_sql.must_be_like %{ SELECT EXISTS (#{manager.to_sql}) AS foo }
end
end
- describe 'union' do
+ describe "union" do
before do
table = Table.new :users
@m1 = Arel::SelectManager.new table
@@ -248,7 +248,7 @@ module Arel
end
- it 'should union two managers' do
+ it "should union two managers" do
# FIXME should this union "managers" or "statements" ?
# FIXME this probably shouldn't return a node
node = @m1.union @m2
@@ -259,7 +259,7 @@ module Arel
}
end
- it 'should union all' do
+ it "should union all" do
node = @m1.union :all, @m2
node.to_sql.must_be_like %{
@@ -269,7 +269,7 @@ module Arel
end
- describe 'intersect' do
+ describe "intersect" do
before do
table = Table.new :users
@m1 = Arel::SelectManager.new table
@@ -283,7 +283,7 @@ module Arel
end
- it 'should interect two managers' do
+ it "should interect two managers" do
# FIXME should this intersect "managers" or "statements" ?
# FIXME this probably shouldn't return a node
node = @m1.intersect @m2
@@ -296,7 +296,7 @@ module Arel
end
- describe 'except' do
+ describe "except" do
before do
table = Table.new :users
@m1 = Arel::SelectManager.new table
@@ -308,7 +308,7 @@ module Arel
@m2.where(table[:age].between(40..99))
end
- it 'should except two managers' do
+ it "should except two managers" do
# FIXME should this except "managers" or "statements" ?
# FIXME this probably shouldn't return a node
node = @m1.except @m2
@@ -321,8 +321,8 @@ module Arel
end
- describe 'with' do
- it 'should support basic WITH' do
+ describe "with" do
+ it "should support basic WITH" do
users = Table.new(:users)
users_top = Table.new(:users_top)
comments = Table.new(:comments)
@@ -370,43 +370,43 @@ module Arel
end
end
- describe 'ast' do
- it 'should return the ast' do
- table = Table.new :users
+ describe "ast" do
+ it "should return the ast" do
+ table = Table.new :users
mgr = table.from
assert mgr.ast
end
- it 'should allow orders to work when the ast is grepped' do
- table = Table.new :users
+ it "should allow orders to work when the ast is grepped" do
+ table = Table.new :users
mgr = table.from
- mgr.project Arel.sql '*'
+ mgr.project Arel.sql "*"
mgr.from table
- mgr.orders << Arel::Nodes::Ascending.new(Arel.sql('foo'))
+ mgr.orders << Arel::Nodes::Ascending.new(Arel.sql("foo"))
mgr.ast.grep(Arel::Nodes::OuterJoin)
mgr.to_sql.must_be_like %{ SELECT * FROM "users" ORDER BY foo ASC }
end
end
- describe 'taken' do
- it 'should return limit' do
+ describe "taken" do
+ it "should return limit" do
manager = Arel::SelectManager.new
manager.take 10
manager.taken.must_equal 10
end
end
- describe 'lock' do
+ describe "lock" do
# This should fail on other databases
- it 'adds a lock node' do
- table = Table.new :users
+ it "adds a lock node" do
+ table = Table.new :users
mgr = table.from
mgr.lock.to_sql.must_be_like %{ SELECT FROM "users" FOR UPDATE }
end
end
- describe 'orders' do
- it 'returns order clauses' do
+ describe "orders" do
+ it "returns order clauses" do
table = Table.new :users
manager = Arel::SelectManager.new
order = table[:id]
@@ -415,11 +415,11 @@ module Arel
end
end
- describe 'order' do
- it 'generates order clauses' do
+ describe "order" do
+ it "generates order clauses" do
table = Table.new :users
manager = Arel::SelectManager.new
- manager.project Nodes::SqlLiteral.new '*'
+ manager.project Nodes::SqlLiteral.new "*"
manager.from table
manager.order table[:id]
manager.to_sql.must_be_like %{
@@ -428,10 +428,10 @@ module Arel
end
# FIXME: I would like to deprecate this
- it 'takes *args' do
+ it "takes *args" do
table = Table.new :users
manager = Arel::SelectManager.new
- manager.project Nodes::SqlLiteral.new '*'
+ manager.project Nodes::SqlLiteral.new "*"
manager.from table
manager.order table[:id], table[:name]
manager.to_sql.must_be_like %{
@@ -439,16 +439,16 @@ module Arel
}
end
- it 'chains' do
+ it "chains" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.order(table[:id]).must_equal manager
end
- it 'has order attributes' do
+ it "has order attributes" do
table = Table.new :users
manager = Arel::SelectManager.new
- manager.project Nodes::SqlLiteral.new '*'
+ manager.project Nodes::SqlLiteral.new "*"
manager.from table
manager.order table[:id].desc
manager.to_sql.must_be_like %{
@@ -457,8 +457,8 @@ module Arel
end
end
- describe 'on' do
- it 'takes two params' do
+ describe "on" do
+ it "takes two params" do
left = Table.new :users
right = left.alias
predicate = left[:id].eq(right[:id])
@@ -474,7 +474,7 @@ module Arel
}
end
- it 'takes three params' do
+ it "takes three params" do
left = Table.new :users
right = left.alias
predicate = left[:id].eq(right[:id])
@@ -496,59 +496,59 @@ module Arel
end
end
- it 'should hand back froms' do
+ it "should hand back froms" do
relation = Arel::SelectManager.new
assert_equal [], relation.froms
end
- it 'should create and nodes' do
+ it "should create and nodes" do
relation = Arel::SelectManager.new
- children = ['foo', 'bar', 'baz']
+ children = ["foo", "bar", "baz"]
clause = relation.create_and children
assert_kind_of Arel::Nodes::And, clause
assert_equal children, clause.children
end
- it 'should create insert managers' do
+ it "should create insert managers" do
relation = Arel::SelectManager.new
insert = relation.create_insert
assert_kind_of Arel::InsertManager, insert
end
- it 'should create join nodes' do
+ it "should create join nodes" do
relation = Arel::SelectManager.new
- join = relation.create_join 'foo', 'bar'
+ join = relation.create_join "foo", "bar"
assert_kind_of Arel::Nodes::InnerJoin, join
- assert_equal 'foo', join.left
- assert_equal 'bar', join.right
+ assert_equal "foo", join.left
+ assert_equal "bar", join.right
end
- it 'should create join nodes with a full outer join klass' do
+ it "should create join nodes with a full outer join klass" do
relation = Arel::SelectManager.new
- join = relation.create_join 'foo', 'bar', Arel::Nodes::FullOuterJoin
+ join = relation.create_join "foo", "bar", Arel::Nodes::FullOuterJoin
assert_kind_of Arel::Nodes::FullOuterJoin, join
- assert_equal 'foo', join.left
- assert_equal 'bar', join.right
+ assert_equal "foo", join.left
+ assert_equal "bar", join.right
end
- it 'should create join nodes with a outer join klass' do
+ it "should create join nodes with a outer join klass" do
relation = Arel::SelectManager.new
- join = relation.create_join 'foo', 'bar', Arel::Nodes::OuterJoin
+ join = relation.create_join "foo", "bar", Arel::Nodes::OuterJoin
assert_kind_of Arel::Nodes::OuterJoin, join
- assert_equal 'foo', join.left
- assert_equal 'bar', join.right
+ assert_equal "foo", join.left
+ assert_equal "bar", join.right
end
- it 'should create join nodes with a right outer join klass' do
+ it "should create join nodes with a right outer join klass" do
relation = Arel::SelectManager.new
- join = relation.create_join 'foo', 'bar', Arel::Nodes::RightOuterJoin
+ join = relation.create_join "foo", "bar", Arel::Nodes::RightOuterJoin
assert_kind_of Arel::Nodes::RightOuterJoin, join
- assert_equal 'foo', join.left
- assert_equal 'bar', join.right
+ assert_equal "foo", join.left
+ assert_equal "bar", join.right
end
- describe 'join' do
- it 'responds to join' do
+ describe "join" do
+ it "responds to join" do
left = Table.new :users
right = left.alias
predicate = left[:id].eq(right[:id])
@@ -563,7 +563,7 @@ module Arel
}
end
- it 'takes a class' do
+ it "takes a class" do
left = Table.new :users
right = left.alias
predicate = left[:id].eq(right[:id])
@@ -578,7 +578,7 @@ module Arel
}
end
- it 'takes the full outer join class' do
+ it "takes the full outer join class" do
left = Table.new :users
right = left.alias
predicate = left[:id].eq(right[:id])
@@ -593,7 +593,7 @@ module Arel
}
end
- it 'takes the right outer join class' do
+ it "takes the right outer join class" do
left = Table.new :users
right = left.alias
predicate = left[:id].eq(right[:id])
@@ -608,12 +608,12 @@ module Arel
}
end
- it 'noops on nil' do
- manager = Arel::SelectManager.new
+ it "noops on nil" do
+ manager = Arel::SelectManager.new
manager.join(nil).must_equal manager
end
- it 'raises EmptyJoinError on empty' do
+ it "raises EmptyJoinError on empty" do
left = Table.new :users
manager = Arel::SelectManager.new
@@ -624,8 +624,8 @@ module Arel
end
end
- describe 'outer join' do
- it 'responds to join' do
+ describe "outer join" do
+ it "responds to join" do
left = Table.new :users
right = left.alias
predicate = left[:id].eq(right[:id])
@@ -640,15 +640,15 @@ module Arel
}
end
- it 'noops on nil' do
- manager = Arel::SelectManager.new
+ it "noops on nil" do
+ manager = Arel::SelectManager.new
manager.outer_join(nil).must_equal manager
end
end
- describe 'joins' do
+ describe "joins" do
- it 'returns inner join sql' do
+ it "returns inner join sql" do
table = Table.new :users
aliaz = table.alias
manager = Arel::SelectManager.new
@@ -657,7 +657,7 @@ module Arel
manager.to_sql
end
- it 'returns outer join sql' do
+ it "returns outer join sql" do
table = Table.new :users
aliaz = table.alias
manager = Arel::SelectManager.new
@@ -666,7 +666,7 @@ module Arel
manager.to_sql
end
- it 'can have a non-table alias as relation name' do
+ it "can have a non-table alias as relation name" do
users = Table.new :users
comments = Table.new :comments
@@ -678,7 +678,7 @@ module Arel
).as("counts")
joins = users.join(counts).on(counts[:user_id].eq(10))
- joins.to_sql.must_be_like %{
+ joins.to_sql.must_be_like %{
SELECT FROM "users" INNER JOIN (SELECT "comments"."user_id" AS user_id, COUNT("comments"."user_id") AS count FROM "comments" GROUP BY "comments"."user_id") counts ON counts."user_id" = 10
}
end
@@ -689,7 +689,7 @@ module Arel
predicate = left[:id].eq(right[:id])
mgr = left.join(right)
- mgr.project Nodes::SqlLiteral.new('*')
+ mgr.project Nodes::SqlLiteral.new("*")
mgr.on(predicate).must_equal mgr
mgr.to_sql.must_be_like %{
@@ -699,15 +699,15 @@ module Arel
}
end
- it 'returns string join sql' do
+ it "returns string join sql" do
manager = Arel::SelectManager.new
- manager.from Nodes::StringJoin.new(Nodes.build_quoted('hello'))
+ manager.from Nodes::StringJoin.new(Nodes.build_quoted("hello"))
assert_match "'hello'", manager.to_sql
end
end
- describe 'group' do
- it 'takes an attribute' do
+ describe "group" do
+ it "takes an attribute" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.from table
@@ -717,13 +717,13 @@ module Arel
}
end
- it 'chains' do
+ it "chains" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.group(table[:id]).must_equal manager
end
- it 'takes multiple args' do
+ it "takes multiple args" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.from table
@@ -734,132 +734,132 @@ module Arel
end
# FIXME: backwards compat
- it 'makes strings literals' do
+ it "makes strings literals" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.from table
- manager.group 'foo'
+ manager.group "foo"
manager.to_sql.must_be_like %{ SELECT FROM "users" GROUP BY foo }
end
end
- describe 'window definition' do
- it 'can be empty' do
+ describe "window definition" do
+ it "can be empty" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.from table
- manager.window('a_window')
+ manager.window("a_window")
manager.to_sql.must_be_like %{
SELECT FROM "users" WINDOW "a_window" AS ()
}
end
- it 'takes an order' do
+ it "takes an order" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.from table
- manager.window('a_window').order(table['foo'].asc)
+ manager.window("a_window").order(table["foo"].asc)
manager.to_sql.must_be_like %{
SELECT FROM "users" WINDOW "a_window" AS (ORDER BY "users"."foo" ASC)
}
end
- it 'takes an order with multiple columns' do
+ it "takes an order with multiple columns" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.from table
- manager.window('a_window').order(table['foo'].asc, table['bar'].desc)
+ manager.window("a_window").order(table["foo"].asc, table["bar"].desc)
manager.to_sql.must_be_like %{
SELECT FROM "users" WINDOW "a_window" AS (ORDER BY "users"."foo" ASC, "users"."bar" DESC)
}
end
- it 'takes a partition' do
+ it "takes a partition" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.from table
- manager.window('a_window').partition(table['bar'])
+ manager.window("a_window").partition(table["bar"])
manager.to_sql.must_be_like %{
SELECT FROM "users" WINDOW "a_window" AS (PARTITION BY "users"."bar")
}
end
- it 'takes a partition and an order' do
+ it "takes a partition and an order" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.from table
- manager.window('a_window').partition(table['foo']).order(table['foo'].asc)
+ manager.window("a_window").partition(table["foo"]).order(table["foo"].asc)
manager.to_sql.must_be_like %{
SELECT FROM "users" WINDOW "a_window" AS (PARTITION BY "users"."foo"
ORDER BY "users"."foo" ASC)
}
end
- it 'takes a partition with multiple columns' do
+ it "takes a partition with multiple columns" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.from table
- manager.window('a_window').partition(table['bar'], table['baz'])
+ manager.window("a_window").partition(table["bar"], table["baz"])
manager.to_sql.must_be_like %{
SELECT FROM "users" WINDOW "a_window" AS (PARTITION BY "users"."bar", "users"."baz")
}
end
- it 'takes a rows frame, unbounded preceding' do
+ it "takes a rows frame, unbounded preceding" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.from table
- manager.window('a_window').rows(Arel::Nodes::Preceding.new)
+ manager.window("a_window").rows(Arel::Nodes::Preceding.new)
manager.to_sql.must_be_like %{
SELECT FROM "users" WINDOW "a_window" AS (ROWS UNBOUNDED PRECEDING)
}
end
- it 'takes a rows frame, bounded preceding' do
+ it "takes a rows frame, bounded preceding" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.from table
- manager.window('a_window').rows(Arel::Nodes::Preceding.new(5))
+ manager.window("a_window").rows(Arel::Nodes::Preceding.new(5))
manager.to_sql.must_be_like %{
SELECT FROM "users" WINDOW "a_window" AS (ROWS 5 PRECEDING)
}
end
- it 'takes a rows frame, unbounded following' do
+ it "takes a rows frame, unbounded following" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.from table
- manager.window('a_window').rows(Arel::Nodes::Following.new)
+ manager.window("a_window").rows(Arel::Nodes::Following.new)
manager.to_sql.must_be_like %{
SELECT FROM "users" WINDOW "a_window" AS (ROWS UNBOUNDED FOLLOWING)
}
end
- it 'takes a rows frame, bounded following' do
+ it "takes a rows frame, bounded following" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.from table
- manager.window('a_window').rows(Arel::Nodes::Following.new(5))
+ manager.window("a_window").rows(Arel::Nodes::Following.new(5))
manager.to_sql.must_be_like %{
SELECT FROM "users" WINDOW "a_window" AS (ROWS 5 FOLLOWING)
}
end
- it 'takes a rows frame, current row' do
+ it "takes a rows frame, current row" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.from table
- manager.window('a_window').rows(Arel::Nodes::CurrentRow.new)
+ manager.window("a_window").rows(Arel::Nodes::CurrentRow.new)
manager.to_sql.must_be_like %{
SELECT FROM "users" WINDOW "a_window" AS (ROWS CURRENT ROW)
}
end
- it 'takes a rows frame, between two delimiters' do
+ it "takes a rows frame, between two delimiters" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.from table
- window = manager.window('a_window')
+ window = manager.window("a_window")
window.frame(
Arel::Nodes::Between.new(
window.rows,
@@ -872,61 +872,61 @@ module Arel
}
end
- it 'takes a range frame, unbounded preceding' do
+ it "takes a range frame, unbounded preceding" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.from table
- manager.window('a_window').range(Arel::Nodes::Preceding.new)
+ manager.window("a_window").range(Arel::Nodes::Preceding.new)
manager.to_sql.must_be_like %{
SELECT FROM "users" WINDOW "a_window" AS (RANGE UNBOUNDED PRECEDING)
}
end
- it 'takes a range frame, bounded preceding' do
+ it "takes a range frame, bounded preceding" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.from table
- manager.window('a_window').range(Arel::Nodes::Preceding.new(5))
+ manager.window("a_window").range(Arel::Nodes::Preceding.new(5))
manager.to_sql.must_be_like %{
SELECT FROM "users" WINDOW "a_window" AS (RANGE 5 PRECEDING)
}
end
- it 'takes a range frame, unbounded following' do
+ it "takes a range frame, unbounded following" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.from table
- manager.window('a_window').range(Arel::Nodes::Following.new)
+ manager.window("a_window").range(Arel::Nodes::Following.new)
manager.to_sql.must_be_like %{
SELECT FROM "users" WINDOW "a_window" AS (RANGE UNBOUNDED FOLLOWING)
}
end
- it 'takes a range frame, bounded following' do
+ it "takes a range frame, bounded following" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.from table
- manager.window('a_window').range(Arel::Nodes::Following.new(5))
+ manager.window("a_window").range(Arel::Nodes::Following.new(5))
manager.to_sql.must_be_like %{
SELECT FROM "users" WINDOW "a_window" AS (RANGE 5 FOLLOWING)
}
end
- it 'takes a range frame, current row' do
+ it "takes a range frame, current row" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.from table
- manager.window('a_window').range(Arel::Nodes::CurrentRow.new)
+ manager.window("a_window").range(Arel::Nodes::CurrentRow.new)
manager.to_sql.must_be_like %{
SELECT FROM "users" WINDOW "a_window" AS (RANGE CURRENT ROW)
}
end
- it 'takes a range frame, between two delimiters' do
+ it "takes a range frame, between two delimiters" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.from table
- window = manager.window('a_window')
+ window = manager.window("a_window")
window.frame(
Arel::Nodes::Between.new(
window.range,
@@ -940,7 +940,7 @@ module Arel
end
end
- describe 'delete' do
+ describe "delete" do
it "copies from" do
table = Table.new :users
manager = Arel::SelectManager.new
@@ -963,8 +963,8 @@ module Arel
end
end
- describe 'where_sql' do
- it 'gives me back the where sql' do
+ describe "where_sql" do
+ it "gives me back the where sql" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.from table
@@ -972,7 +972,7 @@ module Arel
manager.where_sql.must_be_like %{ WHERE "users"."id" = 10 }
end
- it 'joins wheres with AND' do
+ it "joins wheres with AND" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.from table
@@ -981,19 +981,19 @@ module Arel
manager.where_sql.must_be_like %{ WHERE "users"."id" = 10 AND "users"."id" = 11}
end
- it 'handles database specific statements' do
+ it "handles database specific statements" do
old_visitor = Table.engine.connection.visitor
Table.engine.connection.visitor = Visitors::PostgreSQL.new Table.engine.connection
table = Table.new :users
manager = Arel::SelectManager.new
manager.from table
manager.where table[:id].eq 10
- manager.where table[:name].matches 'foo%'
+ manager.where table[:name].matches "foo%"
manager.where_sql.must_be_like %{ WHERE "users"."id" = 10 AND "users"."name" ILIKE 'foo%' }
Table.engine.connection.visitor = old_visitor
end
- it 'returns nil when there are no wheres' do
+ it "returns nil when there are no wheres" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.from table
@@ -1001,35 +1001,35 @@ module Arel
end
end
- describe 'update' do
+ describe "update" do
- it 'creates an update statement' do
+ it "creates an update statement" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.from table
- stmt = manager.compile_update({table[:id] => 1}, Arel::Attributes::Attribute.new(table, 'id'))
+ stmt = manager.compile_update({ table[:id] => 1 }, Arel::Attributes::Attribute.new(table, "id"))
stmt.to_sql.must_be_like %{
UPDATE "users" SET "id" = 1
}
end
- it 'takes a string' do
+ it "takes a string" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.from table
- stmt = manager.compile_update(Nodes::SqlLiteral.new('foo = bar'), Arel::Attributes::Attribute.new(table, 'id'))
+ stmt = manager.compile_update(Nodes::SqlLiteral.new("foo = bar"), Arel::Attributes::Attribute.new(table, "id"))
stmt.to_sql.must_be_like %{ UPDATE "users" SET foo = bar }
end
- it 'copies limits' do
+ it "copies limits" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.from table
manager.take 1
- stmt = manager.compile_update(Nodes::SqlLiteral.new('foo = bar'), Arel::Attributes::Attribute.new(table, 'id'))
- stmt.key = table['id']
+ stmt = manager.compile_update(Nodes::SqlLiteral.new("foo = bar"), Arel::Attributes::Attribute.new(table, "id"))
+ stmt.key = table["id"]
stmt.to_sql.must_be_like %{
UPDATE "users" SET foo = bar
@@ -1037,13 +1037,13 @@ module Arel
}
end
- it 'copies order' do
+ it "copies order" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.from table
manager.order :foo
- stmt = manager.compile_update(Nodes::SqlLiteral.new('foo = bar'), Arel::Attributes::Attribute.new(table, 'id'))
- stmt.key = table['id']
+ stmt = manager.compile_update(Nodes::SqlLiteral.new("foo = bar"), Arel::Attributes::Attribute.new(table, "id"))
+ stmt.key = table["id"]
stmt.to_sql.must_be_like %{
UPDATE "users" SET foo = bar
@@ -1051,25 +1051,25 @@ module Arel
}
end
- it 'copies where clauses' do
+ it "copies where clauses" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.where table[:id].eq 10
manager.from table
- stmt = manager.compile_update({table[:id] => 1}, Arel::Attributes::Attribute.new(table, 'id'))
+ stmt = manager.compile_update({ table[:id] => 1 }, Arel::Attributes::Attribute.new(table, "id"))
stmt.to_sql.must_be_like %{
UPDATE "users" SET "id" = 1 WHERE "users"."id" = 10
}
end
- it 'copies where clauses when nesting is triggered' do
+ it "copies where clauses when nesting is triggered" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.where table[:foo].eq 10
manager.take 42
manager.from table
- stmt = manager.compile_update({table[:id] => 1}, Arel::Attributes::Attribute.new(table, 'id'))
+ stmt = manager.compile_update({ table[:id] => 1 }, Arel::Attributes::Attribute.new(table, "id"))
stmt.to_sql.must_be_like %{
UPDATE "users" SET "id" = 1 WHERE "users"."id" IN (SELECT "users"."id" FROM "users" WHERE "users"."foo" = 10 LIMIT 42)
@@ -1078,51 +1078,51 @@ module Arel
end
- describe 'project' do
+ describe "project" do
it "takes sql literals" do
manager = Arel::SelectManager.new
- manager.project Nodes::SqlLiteral.new '*'
+ manager.project Nodes::SqlLiteral.new "*"
manager.to_sql.must_be_like %{ SELECT * }
end
- it 'takes multiple args' do
+ it "takes multiple args" do
manager = Arel::SelectManager.new
- manager.project Nodes::SqlLiteral.new('foo'),
- Nodes::SqlLiteral.new('bar')
+ manager.project Nodes::SqlLiteral.new("foo"),
+ Nodes::SqlLiteral.new("bar")
manager.to_sql.must_be_like %{ SELECT foo, bar }
end
- it 'takes strings' do
+ it "takes strings" do
manager = Arel::SelectManager.new
- manager.project '*'
+ manager.project "*"
manager.to_sql.must_be_like %{ SELECT * }
end
end
- describe 'projections' do
- it 'reads projections' do
+ describe "projections" do
+ it "reads projections" do
manager = Arel::SelectManager.new
- manager.project Arel.sql('foo'), Arel.sql('bar')
- manager.projections.must_equal [Arel.sql('foo'), Arel.sql('bar')]
+ manager.project Arel.sql("foo"), Arel.sql("bar")
+ manager.projections.must_equal [Arel.sql("foo"), Arel.sql("bar")]
end
end
- describe 'projections=' do
- it 'overwrites projections' do
+ describe "projections=" do
+ it "overwrites projections" do
manager = Arel::SelectManager.new
- manager.project Arel.sql('foo')
- manager.projections = [Arel.sql('bar')]
+ manager.project Arel.sql("foo")
+ manager.projections = [Arel.sql("bar")]
manager.to_sql.must_be_like %{ SELECT bar }
end
end
- describe 'take' do
+ describe "take" do
it "knows take" do
table = Table.new :users
manager = Arel::SelectManager.new
- manager.from(table).project(table['id'])
- manager.where(table['id'].eq(1))
+ manager.from(table).project(table["id"])
+ manager.where(table["id"].eq(1))
manager.take 1
manager.to_sql.must_be_like %{
@@ -1138,22 +1138,22 @@ module Arel
manager.take(1).must_equal manager
end
- it 'removes LIMIT when nil is passed' do
+ it "removes LIMIT when nil is passed" do
manager = Arel::SelectManager.new
manager.limit = 10
- assert_match('LIMIT', manager.to_sql)
+ assert_match("LIMIT", manager.to_sql)
manager.limit = nil
- refute_match('LIMIT', manager.to_sql)
+ refute_match("LIMIT", manager.to_sql)
end
end
- describe 'where' do
+ describe "where" do
it "knows where" do
table = Table.new :users
manager = Arel::SelectManager.new
- manager.from(table).project(table['id'])
- manager.where(table['id'].eq(1))
+ manager.from(table).project(table["id"])
+ manager.where(table["id"].eq(1))
manager.to_sql.must_be_like %{
SELECT "users"."id"
FROM "users"
@@ -1165,37 +1165,37 @@ module Arel
table = Table.new :users
manager = Arel::SelectManager.new
manager.from(table)
- manager.project(table['id']).where(table['id'].eq 1).must_equal manager
+ manager.project(table["id"]).where(table["id"].eq 1).must_equal manager
end
end
- describe 'from' do
+ describe "from" do
it "makes sql" do
table = Table.new :users
manager = Arel::SelectManager.new
manager.from table
- manager.project table['id']
+ manager.project table["id"]
manager.to_sql.must_be_like 'SELECT "users"."id" FROM "users"'
end
it "chains" do
table = Table.new :users
manager = Arel::SelectManager.new
- manager.from(table).project(table['id']).must_equal manager
+ manager.from(table).project(table["id"]).must_equal manager
manager.to_sql.must_be_like 'SELECT "users"."id" FROM "users"'
end
end
- describe 'source' do
- it 'returns the join source of the select core' do
+ describe "source" do
+ it "returns the join source of the select core" do
manager = Arel::SelectManager.new
manager.source.must_equal manager.ast.cores.last.source
end
end
- describe 'distinct' do
- it 'sets the quantifier' do
+ describe "distinct" do
+ it "sets the quantifier" do
manager = Arel::SelectManager.new
manager.distinct
@@ -1212,13 +1212,13 @@ module Arel
end
end
- describe 'distinct_on' do
- it 'sets the quantifier' do
+ describe "distinct_on" do
+ it "sets the quantifier" do
manager = Arel::SelectManager.new
table = Table.new :users
- manager.distinct_on(table['id'])
- manager.ast.cores.last.set_quantifier.must_equal Arel::Nodes::DistinctOn.new(table['id'])
+ manager.distinct_on(table["id"])
+ manager.ast.cores.last.set_quantifier.must_equal Arel::Nodes::DistinctOn.new(table["id"])
manager.distinct_on(false)
manager.ast.cores.last.set_quantifier.must_be_nil
@@ -1228,7 +1228,7 @@ module Arel
manager = Arel::SelectManager.new
table = Table.new :users
- manager.distinct_on(table['id']).must_equal manager
+ manager.distinct_on(table["id"]).must_equal manager
manager.distinct_on(false).must_equal manager
end
end
diff --git a/activerecord/test/cases/arel/support/fake_record.rb b/activerecord/test/cases/arel/support/fake_record.rb
index 75ac1e072f..8620d6fd34 100644
--- a/activerecord/test/cases/arel/support/fake_record.rb
+++ b/activerecord/test/cases/arel/support/fake_record.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-require 'date'
+require "date"
module FakeRecord
class Column < Struct.new(:name, :type)
end
@@ -12,49 +12,49 @@ module FakeRecord
def initialize(visitor = nil)
@tables = %w{ users photos developers products}
@columns = {
- 'users' => [
- Column.new('id', :integer),
- Column.new('name', :string),
- Column.new('bool', :boolean),
- Column.new('created_at', :date)
+ "users" => [
+ Column.new("id", :integer),
+ Column.new("name", :string),
+ Column.new("bool", :boolean),
+ Column.new("created_at", :date)
],
- 'products' => [
- Column.new('id', :integer),
- Column.new('price', :decimal)
+ "products" => [
+ Column.new("id", :integer),
+ Column.new("price", :decimal)
]
}
@columns_hash = {
- 'users' => Hash[@columns['users'].map { |x| [x.name, x] }],
- 'products' => Hash[@columns['products'].map { |x| [x.name, x] }]
+ "users" => Hash[@columns["users"].map { |x| [x.name, x] }],
+ "products" => Hash[@columns["products"].map { |x| [x.name, x] }]
}
@primary_keys = {
- 'users' => 'id',
- 'products' => 'id'
+ "users" => "id",
+ "products" => "id"
}
@visitor = visitor
end
- def columns_hash table_name
+ def columns_hash(table_name)
@columns_hash[table_name]
end
- def primary_key name
+ def primary_key(name)
@primary_keys[name.to_s]
end
- def data_source_exists? name
+ def data_source_exists?(name)
@tables.include? name.to_s
end
- def columns name, message = nil
+ def columns(name, message = nil)
@columns[name.to_s]
end
- def quote_table_name name
+ def quote_table_name(name)
"\"#{name.to_s}\""
end
- def quote_column_name name
+ def quote_column_name(name)
"\"#{name.to_s}\""
end
@@ -62,7 +62,7 @@ module FakeRecord
self
end
- def quote thing
+ def quote(thing)
case thing
when DateTime
"'#{thing.strftime("%Y-%m-%d %H:%M:%S")}'"
@@ -73,7 +73,7 @@ module FakeRecord
when false
"'f'"
when nil
- 'NULL'
+ "NULL"
when Numeric
thing
else
@@ -89,7 +89,7 @@ module FakeRecord
attr_reader :spec, :connection
def initialize
- @spec = Spec.new(:adapter => 'america')
+ @spec = Spec.new(adapter: "america")
@connection = Connection.new
@connection.visitor = Arel::Visitors::ToSql.new(connection)
end
@@ -98,7 +98,7 @@ module FakeRecord
yield connection
end
- def table_exists? name
+ def table_exists?(name)
connection.tables.include? name.to_s
end
@@ -110,7 +110,7 @@ module FakeRecord
connection
end
- def quote thing
+ def quote(thing)
connection.quote thing
end
end
diff --git a/activerecord/test/cases/arel/table_test.rb b/activerecord/test/cases/arel/table_test.rb
index ccb3ab302f..91b7a5a480 100644
--- a/activerecord/test/cases/arel/table_test.rb
+++ b/activerecord/test/cases/arel/table_test.rb
@@ -1,5 +1,6 @@
# frozen_string_literal: true
-require_relative 'helper'
+
+require_relative "helper"
module Arel
class TableTest < Arel::Spec
@@ -7,56 +8,56 @@ module Arel
@relation = Table.new(:users)
end
- it 'should create join nodes' do
- join = @relation.create_string_join 'foo'
+ it "should create join nodes" do
+ join = @relation.create_string_join "foo"
assert_kind_of Arel::Nodes::StringJoin, join
- assert_equal 'foo', join.left
+ assert_equal "foo", join.left
end
- it 'should create join nodes' do
- join = @relation.create_join 'foo', 'bar'
+ it "should create join nodes" do
+ join = @relation.create_join "foo", "bar"
assert_kind_of Arel::Nodes::InnerJoin, join
- assert_equal 'foo', join.left
- assert_equal 'bar', join.right
+ assert_equal "foo", join.left
+ assert_equal "bar", join.right
end
- it 'should create join nodes with a klass' do
- join = @relation.create_join 'foo', 'bar', Arel::Nodes::FullOuterJoin
+ it "should create join nodes with a klass" do
+ join = @relation.create_join "foo", "bar", Arel::Nodes::FullOuterJoin
assert_kind_of Arel::Nodes::FullOuterJoin, join
- assert_equal 'foo', join.left
- assert_equal 'bar', join.right
+ assert_equal "foo", join.left
+ assert_equal "bar", join.right
end
- it 'should create join nodes with a klass' do
- join = @relation.create_join 'foo', 'bar', Arel::Nodes::OuterJoin
+ it "should create join nodes with a klass" do
+ join = @relation.create_join "foo", "bar", Arel::Nodes::OuterJoin
assert_kind_of Arel::Nodes::OuterJoin, join
- assert_equal 'foo', join.left
- assert_equal 'bar', join.right
+ assert_equal "foo", join.left
+ assert_equal "bar", join.right
end
- it 'should create join nodes with a klass' do
- join = @relation.create_join 'foo', 'bar', Arel::Nodes::RightOuterJoin
+ it "should create join nodes with a klass" do
+ join = @relation.create_join "foo", "bar", Arel::Nodes::RightOuterJoin
assert_kind_of Arel::Nodes::RightOuterJoin, join
- assert_equal 'foo', join.left
- assert_equal 'bar', join.right
+ assert_equal "foo", join.left
+ assert_equal "bar", join.right
end
- it 'should return an insert manager' do
- im = @relation.compile_insert 'VALUES(NULL)'
+ it "should return an insert manager" do
+ im = @relation.compile_insert "VALUES(NULL)"
assert_kind_of Arel::InsertManager, im
im.into Table.new(:users)
assert_equal "INSERT INTO \"users\" VALUES(NULL)", im.to_sql
end
- describe 'skip' do
- it 'should add an offset' do
+ describe "skip" do
+ it "should add an offset" do
sm = @relation.skip 2
sm.to_sql.must_be_like "SELECT FROM \"users\" OFFSET 2"
end
end
- describe 'having' do
- it 'adds a having clause' do
+ describe "having" do
+ it "adds a having clause" do
mgr = @relation.having @relation[:id].eq(10)
mgr.to_sql.must_be_like %{
SELECT FROM "users" HAVING "users"."id" = 10
@@ -64,21 +65,21 @@ module Arel
end
end
- describe 'backwards compat' do
- describe 'join' do
- it 'noops on nil' do
+ describe "backwards compat" do
+ describe "join" do
+ it "noops on nil" do
mgr = @relation.join nil
mgr.to_sql.must_be_like %{ SELECT FROM "users" }
end
- it 'raises EmptyJoinError on empty' do
+ it "raises EmptyJoinError on empty" do
assert_raises(EmptyJoinError) do
@relation.join ""
end
end
- it 'takes a second argument for join type' do
+ it "takes a second argument for join type" do
right = @relation.alias
predicate = @relation[:id].eq(right[:id])
mgr = @relation.join(right, Nodes::OuterJoin).on(predicate)
@@ -91,8 +92,8 @@ module Arel
end
end
- describe 'join' do
- it 'creates an outer join' do
+ describe "join" do
+ it "creates an outer join" do
right = @relation.alias
predicate = @relation[:id].eq(right[:id])
mgr = @relation.outer_join(right).on(predicate)
@@ -106,8 +107,8 @@ module Arel
end
end
- describe 'group' do
- it 'should create a group' do
+ describe "group" do
+ it "should create a group" do
manager = @relation.group @relation[:id]
manager.to_sql.must_be_like %{
SELECT FROM "users" GROUP BY "users"."id"
@@ -115,54 +116,54 @@ module Arel
end
end
- describe 'alias' do
- it 'should create a node that proxies to a table' do
+ describe "alias" do
+ it "should create a node that proxies to a table" do
node = @relation.alias
- node.name.must_equal 'users_2'
+ node.name.must_equal "users_2"
node[:id].relation.must_equal node
end
end
- describe 'new' do
- it 'should accept a hash' do
- rel = Table.new :users, :as => 'foo'
- rel.table_alias.must_equal 'foo'
+ describe "new" do
+ it "should accept a hash" do
+ rel = Table.new :users, as: "foo"
+ rel.table_alias.must_equal "foo"
end
- it 'ignores as if it equals name' do
- rel = Table.new :users, :as => 'users'
+ it "ignores as if it equals name" do
+ rel = Table.new :users, as: "users"
rel.table_alias.must_be_nil
end
end
- describe 'order' do
+ describe "order" do
it "should take an order" do
manager = @relation.order "foo"
manager.to_sql.must_be_like %{ SELECT FROM "users" ORDER BY foo }
end
end
- describe 'take' do
+ describe "take" do
it "should add a limit" do
manager = @relation.take 1
- manager.project Nodes::SqlLiteral.new '*'
+ manager.project Nodes::SqlLiteral.new "*"
manager.to_sql.must_be_like %{ SELECT * FROM "users" LIMIT 1 }
end
end
- describe 'project' do
- it 'can project' do
- manager = @relation.project Nodes::SqlLiteral.new '*'
+ describe "project" do
+ it "can project" do
+ manager = @relation.project Nodes::SqlLiteral.new "*"
manager.to_sql.must_be_like %{ SELECT * FROM "users" }
end
- it 'takes multiple parameters' do
- manager = @relation.project Nodes::SqlLiteral.new('*'), Nodes::SqlLiteral.new('*')
+ it "takes multiple parameters" do
+ manager = @relation.project Nodes::SqlLiteral.new("*"), Nodes::SqlLiteral.new("*")
manager.to_sql.must_be_like %{ SELECT *, * FROM "users" }
end
end
- describe 'where' do
+ describe "where" do
it "returns a tree manager" do
manager = @relation.where @relation[:id].eq 1
manager.project @relation[:id]
@@ -176,15 +177,15 @@ module Arel
end
it "should have a name" do
- @relation.name.must_equal 'users'
+ @relation.name.must_equal "users"
end
it "should have a table name" do
- @relation.table_name.must_equal 'users'
+ @relation.table_name.must_equal "users"
end
- describe '[]' do
- describe 'when given a Symbol' do
+ describe "[]" do
+ describe "when given a Symbol" do
it "manufactures an attribute if the symbol names an attribute within the relation" do
column = @relation[:id]
column.name.must_equal :id
@@ -192,21 +193,21 @@ module Arel
end
end
- describe 'equality' do
- it 'is equal with equal ivars' do
+ describe "equality" do
+ it "is equal with equal ivars" do
relation1 = Table.new(:users)
- relation1.table_alias = 'zomg'
+ relation1.table_alias = "zomg"
relation2 = Table.new(:users)
- relation2.table_alias = 'zomg'
+ relation2.table_alias = "zomg"
array = [relation1, relation2]
assert_equal 1, array.uniq.size
end
- it 'is not equal with different ivars' do
+ it "is not equal with different ivars" do
relation1 = Table.new(:users)
- relation1.table_alias = 'zomg'
+ relation1.table_alias = "zomg"
relation2 = Table.new(:users)
- relation2.table_alias = 'zomg2'
+ relation2.table_alias = "zomg2"
array = [relation1, relation2]
assert_equal 2, array.uniq.size
end
diff --git a/activerecord/test/cases/arel/update_manager_test.rb b/activerecord/test/cases/arel/update_manager_test.rb
index 91118c5e9f..cc1b9ac5b3 100644
--- a/activerecord/test/cases/arel/update_manager_test.rb
+++ b/activerecord/test/cases/arel/update_manager_test.rb
@@ -1,10 +1,11 @@
# frozen_string_literal: true
-require_relative 'helper'
+
+require_relative "helper"
module Arel
class UpdateManagerTest < Arel::Spec
- describe 'new' do
- it 'takes an engine' do
+ describe "new" do
+ it "takes an engine" do
Arel::UpdateManager.new
end
end
@@ -17,17 +18,17 @@ module Arel
um.to_sql.must_be_like %{ UPDATE "users" SET "name" = ? }
end
- it 'handles limit properly' do
+ it "handles limit properly" do
table = Table.new(:users)
um = Arel::UpdateManager.new
- um.key = 'id'
+ um.key = "id"
um.take 10
um.table table
um.set [[table[:name], nil]]
assert_match(/LIMIT 10/, um.to_sql)
end
- describe 'set' do
+ describe "set" do
it "updates with null" do
table = Table.new(:users)
um = Arel::UpdateManager.new
@@ -36,7 +37,7 @@ module Arel
um.to_sql.must_be_like %{ UPDATE "users" SET "name" = NULL }
end
- it 'takes a string' do
+ it "takes a string" do
table = Table.new(:users)
um = Arel::UpdateManager.new
um.table table
@@ -44,36 +45,36 @@ module Arel
um.to_sql.must_be_like %{ UPDATE "users" SET foo = bar }
end
- it 'takes a list of lists' do
+ it "takes a list of lists" do
table = Table.new(:users)
um = Arel::UpdateManager.new
um.table table
- um.set [[table[:id], 1], [table[:name], 'hello']]
+ um.set [[table[:id], 1], [table[:name], "hello"]]
um.to_sql.must_be_like %{
UPDATE "users" SET "id" = 1, "name" = 'hello'
}
end
- it 'chains' do
+ it "chains" do
table = Table.new(:users)
um = Arel::UpdateManager.new
- um.set([[table[:id], 1], [table[:name], 'hello']]).must_equal um
+ um.set([[table[:id], 1], [table[:name], "hello"]]).must_equal um
end
end
- describe 'table' do
- it 'generates an update statement' do
+ describe "table" do
+ it "generates an update statement" do
um = Arel::UpdateManager.new
um.table Table.new(:users)
um.to_sql.must_be_like %{ UPDATE "users" }
end
- it 'chains' do
+ it "chains" do
um = Arel::UpdateManager.new
um.table(Table.new(:users)).must_equal um
end
- it 'generates an update statement with joins' do
+ it "generates an update statement with joins" do
um = Arel::UpdateManager.new
table = Table.new(:users)
@@ -87,8 +88,8 @@ module Arel
end
end
- describe 'where' do
- it 'generates a where clause' do
+ describe "where" do
+ it "generates a where clause" do
table = Table.new :users
um = Arel::UpdateManager.new
um.table table
@@ -98,7 +99,7 @@ module Arel
}
end
- it 'chains' do
+ it "chains" do
table = Table.new :users
um = Arel::UpdateManager.new
um.table table
@@ -106,18 +107,18 @@ module Arel
end
end
- describe 'key' do
+ describe "key" do
before do
@table = Table.new :users
@um = Arel::UpdateManager.new
@um.key = @table[:foo]
end
- it 'can be set' do
+ it "can be set" do
@um.ast.key.must_equal @table[:foo]
end
- it 'can be accessed' do
+ it "can be accessed" do
@um.key.must_equal @table[:foo]
end
end
diff --git a/activerecord/test/cases/arel/visitors/depth_first_test.rb b/activerecord/test/cases/arel/visitors/depth_first_test.rb
index b841d119d2..3baccc7316 100644
--- a/activerecord/test/cases/arel/visitors/depth_first_test.rb
+++ b/activerecord/test/cases/arel/visitors/depth_first_test.rb
@@ -1,11 +1,12 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Visitors
class TestDepthFirst < Arel::Test
Collector = Struct.new(:calls) do
- def call object
+ def call(object)
calls << object
end
end
@@ -164,7 +165,7 @@ module Arel
def test_table
relation = Arel::Table.new(:users)
@visitor.accept relation
- assert_equal ['users', relation], @collector.calls
+ assert_equal ["users", relation], @collector.calls
end
def test_array
diff --git a/activerecord/test/cases/arel/visitors/dispatch_contamination_test.rb b/activerecord/test/cases/arel/visitors/dispatch_contamination_test.rb
index eb278cde4c..a07a1a050a 100644
--- a/activerecord/test/cases/arel/visitors/dispatch_contamination_test.rb
+++ b/activerecord/test/cases/arel/visitors/dispatch_contamination_test.rb
@@ -1,6 +1,7 @@
# frozen_string_literal: true
-require_relative '../helper'
-require 'concurrent'
+
+require_relative "../helper"
+require "concurrent"
module Arel
module Visitors
@@ -10,14 +11,14 @@ module Arel
@barrier = Concurrent::CyclicBarrier.new(2)
end
- def visit_Arel_Visitors_DummySuperNode node
+ def visit_Arel_Visitors_DummySuperNode(node)
42
end
# This is terrible, but it's the only way to reliably reproduce
# the possible race where two threads attempt to correct the
# dispatch hash at the same time.
- def send *args
+ def send(*args)
super
rescue
# Both threads try (and fail) to dispatch to the subclass's name
@@ -43,7 +44,7 @@ module Arel
@table = Table.new(:users)
end
- it 'dispatches properly after failing upwards' do
+ it "dispatches properly after failing upwards" do
node = Nodes::Union.new(Nodes::True.new, Nodes::False.new)
assert_equal "( TRUE UNION FALSE )", node.to_sql
@@ -52,7 +53,7 @@ module Arel
assert_equal "( TRUE UNION FALSE )", node.to_sql
end
- it 'is threadsafe when implementing superclass fallback' do
+ it "is threadsafe when implementing superclass fallback" do
visitor = DummyVisitor.new
main_thread_finished = Concurrent::Event.new
@@ -69,4 +70,3 @@ module Arel
end
end
end
-
diff --git a/activerecord/test/cases/arel/visitors/dot_test.rb b/activerecord/test/cases/arel/visitors/dot_test.rb
index 048482c3ca..98f3bab620 100644
--- a/activerecord/test/cases/arel/visitors/dot_test.rb
+++ b/activerecord/test/cases/arel/visitors/dot_test.rb
@@ -1,5 +1,6 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Visitors
@@ -23,7 +24,7 @@ module Arel
end
def test_named_function
- func = Nodes::NamedFunction.new 'omg', 'omg'
+ func = Nodes::NamedFunction.new "omg", "omg"
@visitor.accept func, Collectors::PlainString.new
end
diff --git a/activerecord/test/cases/arel/visitors/ibm_db_test.rb b/activerecord/test/cases/arel/visitors/ibm_db_test.rb
index d7569eedc3..7163cb34d3 100644
--- a/activerecord/test/cases/arel/visitors/ibm_db_test.rb
+++ b/activerecord/test/cases/arel/visitors/ibm_db_test.rb
@@ -1,5 +1,6 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Visitors
@@ -8,18 +9,18 @@ module Arel
@visitor = IBM_DB.new Table.engine.connection
end
- def compile node
+ def compile(node)
@visitor.accept(node, Collectors::SQLString.new).value
end
- it 'uses FETCH FIRST n ROWS to limit results' do
+ it "uses FETCH FIRST n ROWS to limit results" do
stmt = Nodes::SelectStatement.new
stmt.limit = Nodes::Limit.new(1)
sql = compile(stmt)
sql.must_be_like "SELECT FETCH FIRST 1 ROWS ONLY"
end
- it 'uses FETCH FIRST n ROWS in updates with a limit' do
+ it "uses FETCH FIRST n ROWS in updates with a limit" do
table = Table.new(:users)
stmt = Nodes::UpdateStatement.new
stmt.relation = table
@@ -28,7 +29,6 @@ module Arel
sql = compile(stmt)
sql.must_be_like "UPDATE \"users\" WHERE \"users\".\"id\" IN (SELECT \"users\".\"id\" FROM \"users\" FETCH FIRST 1 ROWS ONLY)"
end
-
end
end
end
diff --git a/activerecord/test/cases/arel/visitors/informix_test.rb b/activerecord/test/cases/arel/visitors/informix_test.rb
index bb6ff42f05..b0b031cca3 100644
--- a/activerecord/test/cases/arel/visitors/informix_test.rb
+++ b/activerecord/test/cases/arel/visitors/informix_test.rb
@@ -1,5 +1,6 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Visitors
@@ -8,18 +9,18 @@ module Arel
@visitor = Informix.new Table.engine.connection
end
- def compile node
+ def compile(node)
@visitor.accept(node, Collectors::SQLString.new).value
end
- it 'uses FIRST n to limit results' do
+ it "uses FIRST n to limit results" do
stmt = Nodes::SelectStatement.new
stmt.limit = Nodes::Limit.new(1)
sql = compile(stmt)
sql.must_be_like "SELECT FIRST 1"
end
- it 'uses FIRST n in updates with a limit' do
+ it "uses FIRST n in updates with a limit" do
table = Table.new(:users)
stmt = Nodes::UpdateStatement.new
stmt.relation = table
@@ -29,14 +30,14 @@ module Arel
sql.must_be_like "UPDATE \"users\" WHERE \"users\".\"id\" IN (SELECT FIRST 1 \"users\".\"id\" FROM \"users\")"
end
- it 'uses SKIP n to jump results' do
+ it "uses SKIP n to jump results" do
stmt = Nodes::SelectStatement.new
stmt.offset = Nodes::Offset.new(10)
sql = compile(stmt)
sql.must_be_like "SELECT SKIP 10"
end
- it 'uses SKIP before FIRST' do
+ it "uses SKIP before FIRST" do
stmt = Nodes::SelectStatement.new
stmt.limit = Nodes::Limit.new(1)
stmt.offset = Nodes::Offset.new(1)
@@ -44,7 +45,7 @@ module Arel
sql.must_be_like "SELECT SKIP 1 FIRST 1"
end
- it 'uses INNER JOIN to perform joins' do
+ it "uses INNER JOIN to perform joins" do
core = Nodes::SelectCore.new
table = Table.new(:posts)
core.source = Nodes::JoinSource.new(table, [table.create_join(Table.new(:comments))])
@@ -53,7 +54,6 @@ module Arel
sql = compile(stmt)
sql.must_be_like 'SELECT FROM "posts" INNER JOIN "comments"'
end
-
end
end
end
diff --git a/activerecord/test/cases/arel/visitors/mssql_test.rb b/activerecord/test/cases/arel/visitors/mssql_test.rb
index 4e81678813..340376c3d6 100644
--- a/activerecord/test/cases/arel/visitors/mssql_test.rb
+++ b/activerecord/test/cases/arel/visitors/mssql_test.rb
@@ -1,5 +1,6 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Visitors
@@ -9,17 +10,17 @@ module Arel
@table = Arel::Table.new "users"
end
- def compile node
+ def compile(node)
@visitor.accept(node, Collectors::SQLString.new).value
end
- it 'should not modify query if no offset or limit' do
+ it "should not modify query if no offset or limit" do
stmt = Nodes::SelectStatement.new
sql = compile(stmt)
sql.must_be_like "SELECT"
end
- it 'should go over table PK if no .order() or .group()' do
+ it "should go over table PK if no .order() or .group()" do
stmt = Nodes::SelectStatement.new
stmt.cores.first.from = @table
stmt.limit = Nodes::Limit.new(10)
@@ -27,7 +28,7 @@ module Arel
sql.must_be_like "SELECT _t.* FROM (SELECT ROW_NUMBER() OVER (ORDER BY \"users\".\"id\") as _row_num FROM \"users\") as _t WHERE _row_num BETWEEN 1 AND 10"
end
- it 'caches the PK lookup for order' do
+ it "caches the PK lookup for order" do
connection = Minitest::Mock.new
connection.expect(:primary_key, ["id"], ["users"])
@@ -46,7 +47,7 @@ module Arel
connection.verify
end
- it 'should use TOP for limited deletes' do
+ it "should use TOP for limited deletes" do
stmt = Nodes::DeleteStatement.new
stmt.relation = @table
stmt.limit = Nodes::Limit.new(10)
@@ -55,23 +56,23 @@ module Arel
sql.must_be_like "DELETE TOP (10) FROM \"users\""
end
- it 'should go over query ORDER BY if .order()' do
+ it "should go over query ORDER BY if .order()" do
stmt = Nodes::SelectStatement.new
stmt.limit = Nodes::Limit.new(10)
- stmt.orders << Nodes::SqlLiteral.new('order_by')
+ stmt.orders << Nodes::SqlLiteral.new("order_by")
sql = compile(stmt)
sql.must_be_like "SELECT _t.* FROM (SELECT ROW_NUMBER() OVER (ORDER BY order_by) as _row_num) as _t WHERE _row_num BETWEEN 1 AND 10"
end
- it 'should go over query GROUP BY if no .order() and there is .group()' do
+ it "should go over query GROUP BY if no .order() and there is .group()" do
stmt = Nodes::SelectStatement.new
- stmt.cores.first.groups << Nodes::SqlLiteral.new('group_by')
+ stmt.cores.first.groups << Nodes::SqlLiteral.new("group_by")
stmt.limit = Nodes::Limit.new(10)
sql = compile(stmt)
sql.must_be_like "SELECT _t.* FROM (SELECT ROW_NUMBER() OVER (ORDER BY group_by) as _row_num GROUP BY group_by) as _t WHERE _row_num BETWEEN 1 AND 10"
end
- it 'should use BETWEEN if both .limit() and .offset' do
+ it "should use BETWEEN if both .limit() and .offset" do
stmt = Nodes::SelectStatement.new
stmt.limit = Nodes::Limit.new(10)
stmt.offset = Nodes::Offset.new(20)
@@ -79,21 +80,20 @@ module Arel
sql.must_be_like "SELECT _t.* FROM (SELECT ROW_NUMBER() OVER (ORDER BY ) as _row_num) as _t WHERE _row_num BETWEEN 21 AND 30"
end
- it 'should use >= if only .offset' do
+ it "should use >= if only .offset" do
stmt = Nodes::SelectStatement.new
stmt.offset = Nodes::Offset.new(20)
sql = compile(stmt)
sql.must_be_like "SELECT _t.* FROM (SELECT ROW_NUMBER() OVER (ORDER BY ) as _row_num) as _t WHERE _row_num >= 21"
end
- it 'should generate subquery for .count' do
+ it "should generate subquery for .count" do
stmt = Nodes::SelectStatement.new
stmt.limit = Nodes::Limit.new(10)
- stmt.cores.first.projections << Nodes::Count.new('*')
+ stmt.cores.first.projections << Nodes::Count.new("*")
sql = compile(stmt)
sql.must_be_like "SELECT COUNT(1) as count_id FROM (SELECT _t.* FROM (SELECT ROW_NUMBER() OVER (ORDER BY ) as _row_num) as _t WHERE _row_num BETWEEN 1 AND 10) AS subquery"
end
-
end
end
end
diff --git a/activerecord/test/cases/arel/visitors/mysql_test.rb b/activerecord/test/cases/arel/visitors/mysql_test.rb
index f9b468b1d2..9d3bad8516 100644
--- a/activerecord/test/cases/arel/visitors/mysql_test.rb
+++ b/activerecord/test/cases/arel/visitors/mysql_test.rb
@@ -1,5 +1,6 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Visitors
@@ -8,24 +9,24 @@ module Arel
@visitor = MySQL.new Table.engine.connection
end
- def compile node
+ def compile(node)
@visitor.accept(node, Collectors::SQLString.new).value
end
- it 'squashes parenthesis on multiple unions' do
- subnode = Nodes::Union.new Arel.sql('left'), Arel.sql('right')
- node = Nodes::Union.new subnode, Arel.sql('topright')
- assert_equal 1, compile(node).scan('(').length
+ it "squashes parenthesis on multiple unions" do
+ subnode = Nodes::Union.new Arel.sql("left"), Arel.sql("right")
+ node = Nodes::Union.new subnode, Arel.sql("topright")
+ assert_equal 1, compile(node).scan("(").length
- subnode = Nodes::Union.new Arel.sql('left'), Arel.sql('right')
- node = Nodes::Union.new Arel.sql('topleft'), subnode
- assert_equal 1, compile(node).scan('(').length
+ subnode = Nodes::Union.new Arel.sql("left"), Arel.sql("right")
+ node = Nodes::Union.new Arel.sql("topleft"), subnode
+ assert_equal 1, compile(node).scan("(").length
end
###
# :'(
# http://dev.mysql.com/doc/refman/5.0/en/select.html#id3482214
- it 'defaults limit to 18446744073709551615' do
+ it "defaults limit to 18446744073709551615" do
stmt = Nodes::SelectStatement.new
stmt.offset = Nodes::Offset.new(1)
sql = compile(stmt)
@@ -39,20 +40,20 @@ module Arel
assert_equal("UPDATE \"users\" LIMIT 'omg'", compile(sc))
end
- it 'uses DUAL for empty from' do
+ it "uses DUAL for empty from" do
stmt = Nodes::SelectStatement.new
sql = compile(stmt)
sql.must_be_like "SELECT FROM DUAL"
end
- describe 'locking' do
- it 'defaults to FOR UPDATE when locking' do
- node = Nodes::Lock.new(Arel.sql('FOR UPDATE'))
+ describe "locking" do
+ it "defaults to FOR UPDATE when locking" do
+ node = Nodes::Lock.new(Arel.sql("FOR UPDATE"))
compile(node).must_be_like "FOR UPDATE"
end
- it 'allows a custom string to be used as a lock' do
- node = Nodes::Lock.new(Arel.sql('LOCK IN SHARE MODE'))
+ it "allows a custom string to be used as a lock" do
+ node = Nodes::Lock.new(Arel.sql("LOCK IN SHARE MODE"))
compile(node).must_be_like "LOCK IN SHARE MODE"
end
end
@@ -68,7 +69,7 @@ module Arel
it "concats a string" do
@table = Table.new(:users)
- query = @table[:name].concat(Nodes.build_quoted('abc'))
+ query = @table[:name].concat(Nodes.build_quoted("abc"))
compile(query).must_be_like %{
CONCAT("users"."name", 'abc')
}
diff --git a/activerecord/test/cases/arel/visitors/oracle12_test.rb b/activerecord/test/cases/arel/visitors/oracle12_test.rb
index ef2050b7c9..83a2ee36ca 100644
--- a/activerecord/test/cases/arel/visitors/oracle12_test.rb
+++ b/activerecord/test/cases/arel/visitors/oracle12_test.rb
@@ -1,5 +1,6 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Visitors
@@ -9,11 +10,11 @@ module Arel
@table = Table.new(:users)
end
- def compile node
+ def compile(node)
@visitor.accept(node, Collectors::SQLString.new).value
end
- it 'modified except to be minus' do
+ it "modified except to be minus" do
left = Nodes::SqlLiteral.new("SELECT * FROM users WHERE age > 10")
right = Nodes::SqlLiteral.new("SELECT * FROM users WHERE age > 20")
sql = compile Nodes::Except.new(left, right)
@@ -22,7 +23,7 @@ module Arel
}
end
- it 'generates select options offset then limit' do
+ it "generates select options offset then limit" do
stmt = Nodes::SelectStatement.new
stmt.offset = Nodes::Offset.new(1)
stmt.limit = Nodes::Limit.new(10)
@@ -30,18 +31,18 @@ module Arel
sql.must_be_like "SELECT OFFSET 1 ROWS FETCH FIRST 10 ROWS ONLY"
end
- describe 'locking' do
- it 'generates ArgumentError if limit and lock are used' do
+ describe "locking" do
+ it "generates ArgumentError if limit and lock are used" do
stmt = Nodes::SelectStatement.new
stmt.limit = Nodes::Limit.new(10)
- stmt.lock = Nodes::Lock.new(Arel.sql('FOR UPDATE'))
+ stmt.lock = Nodes::Lock.new(Arel.sql("FOR UPDATE"))
assert_raises ArgumentError do
compile(stmt)
end
end
- it 'defaults to FOR UPDATE when locking' do
- node = Nodes::Lock.new(Arel.sql('FOR UPDATE'))
+ it "defaults to FOR UPDATE when locking" do
+ node = Nodes::Lock.new(Arel.sql("FOR UPDATE"))
compile(node).must_be_like "FOR UPDATE"
end
end
diff --git a/activerecord/test/cases/arel/visitors/oracle_test.rb b/activerecord/test/cases/arel/visitors/oracle_test.rb
index 0737774fbf..e1dfe40cf9 100644
--- a/activerecord/test/cases/arel/visitors/oracle_test.rb
+++ b/activerecord/test/cases/arel/visitors/oracle_test.rb
@@ -1,5 +1,6 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Visitors
@@ -9,79 +10,79 @@ module Arel
@table = Table.new(:users)
end
- def compile node
+ def compile(node)
@visitor.accept(node, Collectors::SQLString.new).value
end
- it 'modifies order when there is distinct and first value' do
+ it "modifies order when there is distinct and first value" do
# *sigh*
select = "DISTINCT foo.id, FIRST_VALUE(projects.name) OVER (foo) AS alias_0__"
stmt = Nodes::SelectStatement.new
stmt.cores.first.projections << Nodes::SqlLiteral.new(select)
- stmt.orders << Nodes::SqlLiteral.new('foo')
+ stmt.orders << Nodes::SqlLiteral.new("foo")
sql = compile(stmt)
sql.must_be_like %{
SELECT #{select} ORDER BY alias_0__
}
end
- it 'is idempotent with crazy query' do
+ it "is idempotent with crazy query" do
# *sigh*
select = "DISTINCT foo.id, FIRST_VALUE(projects.name) OVER (foo) AS alias_0__"
stmt = Nodes::SelectStatement.new
stmt.cores.first.projections << Nodes::SqlLiteral.new(select)
- stmt.orders << Nodes::SqlLiteral.new('foo')
+ stmt.orders << Nodes::SqlLiteral.new("foo")
sql = compile(stmt)
sql2 = compile(stmt)
sql.must_equal sql2
end
- it 'splits orders with commas' do
+ it "splits orders with commas" do
# *sigh*
select = "DISTINCT foo.id, FIRST_VALUE(projects.name) OVER (foo) AS alias_0__"
stmt = Nodes::SelectStatement.new
stmt.cores.first.projections << Nodes::SqlLiteral.new(select)
- stmt.orders << Nodes::SqlLiteral.new('foo, bar')
+ stmt.orders << Nodes::SqlLiteral.new("foo, bar")
sql = compile(stmt)
sql.must_be_like %{
SELECT #{select} ORDER BY alias_0__, alias_1__
}
end
- it 'splits orders with commas and function calls' do
+ it "splits orders with commas and function calls" do
# *sigh*
select = "DISTINCT foo.id, FIRST_VALUE(projects.name) OVER (foo) AS alias_0__"
stmt = Nodes::SelectStatement.new
stmt.cores.first.projections << Nodes::SqlLiteral.new(select)
- stmt.orders << Nodes::SqlLiteral.new('NVL(LOWER(bar, foo), foo) DESC, UPPER(baz)')
+ stmt.orders << Nodes::SqlLiteral.new("NVL(LOWER(bar, foo), foo) DESC, UPPER(baz)")
sql = compile(stmt)
sql.must_be_like %{
SELECT #{select} ORDER BY alias_0__ DESC, alias_1__
}
end
- describe 'Nodes::SelectStatement' do
- describe 'limit' do
- it 'adds a rownum clause' do
+ describe "Nodes::SelectStatement" do
+ describe "limit" do
+ it "adds a rownum clause" do
stmt = Nodes::SelectStatement.new
stmt.limit = Nodes::Limit.new(10)
sql = compile stmt
sql.must_be_like %{ SELECT WHERE ROWNUM <= 10 }
end
- it 'is idempotent' do
+ it "is idempotent" do
stmt = Nodes::SelectStatement.new
- stmt.orders << Nodes::SqlLiteral.new('foo')
+ stmt.orders << Nodes::SqlLiteral.new("foo")
stmt.limit = Nodes::Limit.new(10)
sql = compile stmt
sql2 = compile stmt
sql.must_equal sql2
end
- it 'creates a subquery when there is order_by' do
+ it "creates a subquery when there is order_by" do
stmt = Nodes::SelectStatement.new
- stmt.orders << Nodes::SqlLiteral.new('foo')
+ stmt.orders << Nodes::SqlLiteral.new("foo")
stmt.limit = Nodes::Limit.new(10)
sql = compile stmt
sql.must_be_like %{
@@ -89,9 +90,9 @@ module Arel
}
end
- it 'creates a subquery when there is group by' do
+ it "creates a subquery when there is group by" do
stmt = Nodes::SelectStatement.new
- stmt.cores.first.groups << Nodes::SqlLiteral.new('foo')
+ stmt.cores.first.groups << Nodes::SqlLiteral.new("foo")
stmt.limit = Nodes::Limit.new(10)
sql = compile stmt
sql.must_be_like %{
@@ -99,10 +100,10 @@ module Arel
}
end
- it 'creates a subquery when there is DISTINCT' do
+ it "creates a subquery when there is DISTINCT" do
stmt = Nodes::SelectStatement.new
stmt.cores.first.set_quantifier = Arel::Nodes::Distinct.new
- stmt.cores.first.projections << Nodes::SqlLiteral.new('id')
+ stmt.cores.first.projections << Nodes::SqlLiteral.new("id")
stmt.limit = Arel::Nodes::Limit.new(10)
sql = compile stmt
sql.must_be_like %{
@@ -110,7 +111,7 @@ module Arel
}
end
- it 'creates a different subquery when there is an offset' do
+ it "creates a different subquery when there is an offset" do
stmt = Nodes::SelectStatement.new
stmt.limit = Nodes::Limit.new(10)
stmt.offset = Nodes::Offset.new(10)
@@ -125,7 +126,7 @@ module Arel
}
end
- it 'creates a subquery when there is limit and offset with BindParams' do
+ it "creates a subquery when there is limit and offset with BindParams" do
stmt = Nodes::SelectStatement.new
stmt.limit = Nodes::Limit.new(Nodes::BindParam.new(1))
stmt.offset = Nodes::Offset.new(Nodes::BindParam.new(1))
@@ -140,7 +141,7 @@ module Arel
}
end
- it 'is idempotent with different subquery' do
+ it "is idempotent with different subquery" do
stmt = Nodes::SelectStatement.new
stmt.limit = Nodes::Limit.new(10)
stmt.offset = Nodes::Offset.new(10)
@@ -150,8 +151,8 @@ module Arel
end
end
- describe 'only offset' do
- it 'creates a select from subquery with rownum condition' do
+ describe "only offset" do
+ it "creates a select from subquery with rownum condition" do
stmt = Nodes::SelectStatement.new
stmt.offset = Nodes::Offset.new(10)
sql = compile stmt
@@ -166,7 +167,7 @@ module Arel
end
end
- it 'modified except to be minus' do
+ it "modified except to be minus" do
left = Nodes::SqlLiteral.new("SELECT * FROM users WHERE age > 10")
right = Nodes::SqlLiteral.new("SELECT * FROM users WHERE age > 20")
sql = compile Nodes::Except.new(left, right)
@@ -175,9 +176,9 @@ module Arel
}
end
- describe 'locking' do
- it 'defaults to FOR UPDATE when locking' do
- node = Nodes::Lock.new(Arel.sql('FOR UPDATE'))
+ describe "locking" do
+ it "defaults to FOR UPDATE when locking" do
+ node = Nodes::Lock.new(Arel.sql("FOR UPDATE"))
compile(node).must_be_like "FOR UPDATE"
end
end
diff --git a/activerecord/test/cases/arel/visitors/postgres_test.rb b/activerecord/test/cases/arel/visitors/postgres_test.rb
index 6aa786b14f..ba37afecfb 100644
--- a/activerecord/test/cases/arel/visitors/postgres_test.rb
+++ b/activerecord/test/cases/arel/visitors/postgres_test.rb
@@ -1,5 +1,6 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Visitors
@@ -10,19 +11,19 @@ module Arel
@attr = @table[:id]
end
- def compile node
+ def compile(node)
@visitor.accept(node, Collectors::SQLString.new).value
end
- describe 'locking' do
- it 'defaults to FOR UPDATE' do
- compile(Nodes::Lock.new(Arel.sql('FOR UPDATE'))).must_be_like %{
+ describe "locking" do
+ it "defaults to FOR UPDATE" do
+ compile(Nodes::Lock.new(Arel.sql("FOR UPDATE"))).must_be_like %{
FOR UPDATE
}
end
- it 'allows a custom string to be used as a lock' do
- node = Nodes::Lock.new(Arel.sql('FOR SHARE'))
+ it "allows a custom string to be used as a lock" do
+ node = Nodes::Lock.new(Arel.sql("FOR SHARE"))
compile(node).must_be_like %{
FOR SHARE
}
@@ -32,42 +33,42 @@ module Arel
it "should escape LIMIT" do
sc = Arel::Nodes::SelectStatement.new
sc.limit = Nodes::Limit.new(Nodes.build_quoted("omg"))
- sc.cores.first.projections << Arel.sql('DISTINCT ON')
+ sc.cores.first.projections << Arel.sql("DISTINCT ON")
sc.orders << Arel.sql("xyz")
- sql = compile(sc)
+ sql = compile(sc)
assert_match(/LIMIT 'omg'/, sql)
- assert_equal 1, sql.scan(/LIMIT/).length, 'should have one limit'
+ assert_equal 1, sql.scan(/LIMIT/).length, "should have one limit"
end
- it 'should support DISTINCT ON' do
+ it "should support DISTINCT ON" do
core = Arel::Nodes::SelectCore.new
- core.set_quantifier = Arel::Nodes::DistinctOn.new(Arel.sql('aaron'))
- assert_match 'DISTINCT ON ( aaron )', compile(core)
+ core.set_quantifier = Arel::Nodes::DistinctOn.new(Arel.sql("aaron"))
+ assert_match "DISTINCT ON ( aaron )", compile(core)
end
- it 'should support DISTINCT' do
+ it "should support DISTINCT" do
core = Arel::Nodes::SelectCore.new
core.set_quantifier = Arel::Nodes::Distinct.new
- assert_equal 'SELECT DISTINCT', compile(core)
+ assert_equal "SELECT DISTINCT", compile(core)
end
- it 'encloses LATERAL queries in parens' do
- subquery = @table.project(:id).where(@table[:name].matches('foo%'))
+ it "encloses LATERAL queries in parens" do
+ subquery = @table.project(:id).where(@table[:name].matches("foo%"))
compile(subquery.lateral).must_be_like %{
LATERAL (SELECT id FROM "users" WHERE "users"."name" ILIKE 'foo%')
}
end
- it 'produces LATERAL queries with alias' do
- subquery = @table.project(:id).where(@table[:name].matches('foo%'))
- compile(subquery.lateral('bar')).must_be_like %{
+ it "produces LATERAL queries with alias" do
+ subquery = @table.project(:id).where(@table[:name].matches("foo%"))
+ compile(subquery.lateral("bar")).must_be_like %{
LATERAL (SELECT id FROM "users" WHERE "users"."name" ILIKE 'foo%') bar
}
end
describe "Nodes::Matches" do
it "should know how to visit" do
- node = @table[:name].matches('foo%')
+ node = @table[:name].matches("foo%")
node.must_be_kind_of Nodes::Matches
node.case_sensitive.must_equal(false)
compile(node).must_be_like %{
@@ -76,7 +77,7 @@ module Arel
end
it "should know how to visit case sensitive" do
- node = @table[:name].matches('foo%', nil, true)
+ node = @table[:name].matches("foo%", nil, true)
node.case_sensitive.must_equal(true)
compile(node).must_be_like %{
"users"."name" LIKE 'foo%'
@@ -84,14 +85,14 @@ module Arel
end
it "can handle ESCAPE" do
- node = @table[:name].matches('foo!%', '!')
+ node = @table[:name].matches("foo!%", "!")
compile(node).must_be_like %{
"users"."name" ILIKE 'foo!%' ESCAPE '!'
}
end
- it 'can handle subqueries' do
- subquery = @table.project(:id).where(@table[:name].matches('foo%'))
+ it "can handle subqueries" do
+ subquery = @table.project(:id).where(@table[:name].matches("foo%"))
node = @attr.in subquery
compile(node).must_be_like %{
"users"."id" IN (SELECT id FROM "users" WHERE "users"."name" ILIKE 'foo%')
@@ -101,7 +102,7 @@ module Arel
describe "Nodes::DoesNotMatch" do
it "should know how to visit" do
- node = @table[:name].does_not_match('foo%')
+ node = @table[:name].does_not_match("foo%")
node.must_be_kind_of Nodes::DoesNotMatch
node.case_sensitive.must_equal(false)
compile(node).must_be_like %{
@@ -110,7 +111,7 @@ module Arel
end
it "should know how to visit case sensitive" do
- node = @table[:name].does_not_match('foo%', nil, true)
+ node = @table[:name].does_not_match("foo%", nil, true)
node.case_sensitive.must_equal(true)
compile(node).must_be_like %{
"users"."name" NOT LIKE 'foo%'
@@ -118,14 +119,14 @@ module Arel
end
it "can handle ESCAPE" do
- node = @table[:name].does_not_match('foo!%', '!')
+ node = @table[:name].does_not_match("foo!%", "!")
compile(node).must_be_like %{
"users"."name" NOT ILIKE 'foo!%' ESCAPE '!'
}
end
- it 'can handle subqueries' do
- subquery = @table.project(:id).where(@table[:name].does_not_match('foo%'))
+ it "can handle subqueries" do
+ subquery = @table.project(:id).where(@table[:name].does_not_match("foo%"))
node = @attr.in subquery
compile(node).must_be_like %{
"users"."id" IN (SELECT id FROM "users" WHERE "users"."name" NOT ILIKE 'foo%')
@@ -135,7 +136,7 @@ module Arel
describe "Nodes::Regexp" do
it "should know how to visit" do
- node = @table[:name].matches_regexp('foo.*')
+ node = @table[:name].matches_regexp("foo.*")
node.must_be_kind_of Nodes::Regexp
node.case_sensitive.must_equal(true)
compile(node).must_be_like %{
@@ -144,7 +145,7 @@ module Arel
end
it "can handle case insensitive" do
- node = @table[:name].matches_regexp('foo.*', false)
+ node = @table[:name].matches_regexp("foo.*", false)
node.must_be_kind_of Nodes::Regexp
node.case_sensitive.must_equal(false)
compile(node).must_be_like %{
@@ -152,8 +153,8 @@ module Arel
}
end
- it 'can handle subqueries' do
- subquery = @table.project(:id).where(@table[:name].matches_regexp('foo.*'))
+ it "can handle subqueries" do
+ subquery = @table.project(:id).where(@table[:name].matches_regexp("foo.*"))
node = @attr.in subquery
compile(node).must_be_like %{
"users"."id" IN (SELECT id FROM "users" WHERE "users"."name" ~ 'foo.*')
@@ -163,7 +164,7 @@ module Arel
describe "Nodes::NotRegexp" do
it "should know how to visit" do
- node = @table[:name].does_not_match_regexp('foo.*')
+ node = @table[:name].does_not_match_regexp("foo.*")
node.must_be_kind_of Nodes::NotRegexp
node.case_sensitive.must_equal(true)
compile(node).must_be_like %{
@@ -172,15 +173,15 @@ module Arel
end
it "can handle case insensitive" do
- node = @table[:name].does_not_match_regexp('foo.*', false)
+ node = @table[:name].does_not_match_regexp("foo.*", false)
node.case_sensitive.must_equal(false)
compile(node).must_be_like %{
"users"."name" !~* 'foo.*'
}
end
- it 'can handle subqueries' do
- subquery = @table.project(:id).where(@table[:name].does_not_match_regexp('foo.*'))
+ it "can handle subqueries" do
+ subquery = @table.project(:id).where(@table[:name].does_not_match_regexp("foo.*"))
node = @attr.in subquery
compile(node).must_be_like %{
"users"."id" IN (SELECT id FROM "users" WHERE "users"."name" !~ 'foo.*')
diff --git a/activerecord/test/cases/arel/visitors/sqlite_test.rb b/activerecord/test/cases/arel/visitors/sqlite_test.rb
index 23f66ee096..6650b6ff3a 100644
--- a/activerecord/test/cases/arel/visitors/sqlite_test.rb
+++ b/activerecord/test/cases/arel/visitors/sqlite_test.rb
@@ -1,5 +1,6 @@
# frozen_string_literal: true
-require_relative '../helper'
+
+require_relative "../helper"
module Arel
module Visitors
@@ -8,23 +9,23 @@ module Arel
@visitor = SQLite.new Table.engine.connection_pool
end
- it 'defaults limit to -1' do
+ it "defaults limit to -1" do
stmt = Nodes::SelectStatement.new
stmt.offset = Nodes::Offset.new(1)
sql = @visitor.accept(stmt, Collectors::SQLString.new).value
sql.must_be_like "SELECT LIMIT -1 OFFSET 1"
end
- it 'does not support locking' do
- node = Nodes::Lock.new(Arel.sql('FOR UPDATE'))
- assert_equal '', @visitor.accept(node, Collectors::SQLString.new).value
+ it "does not support locking" do
+ node = Nodes::Lock.new(Arel.sql("FOR UPDATE"))
+ assert_equal "", @visitor.accept(node, Collectors::SQLString.new).value
end
- it 'does not support boolean' do
+ it "does not support boolean" do
node = Nodes::True.new()
- assert_equal '1', @visitor.accept(node, Collectors::SQLString.new).value
+ assert_equal "1", @visitor.accept(node, Collectors::SQLString.new).value
node = Nodes::False.new()
- assert_equal '0', @visitor.accept(node, Collectors::SQLString.new).value
+ assert_equal "0", @visitor.accept(node, Collectors::SQLString.new).value
end
end
end
diff --git a/activerecord/test/cases/arel/visitors/to_sql_test.rb b/activerecord/test/cases/arel/visitors/to_sql_test.rb
index 1503bcd578..ce836eded7 100644
--- a/activerecord/test/cases/arel/visitors/to_sql_test.rb
+++ b/activerecord/test/cases/arel/visitors/to_sql_test.rb
@@ -1,10 +1,11 @@
# frozen_string_literal: true
-require_relative '../helper'
-require 'bigdecimal'
+
+require_relative "../helper"
+require "bigdecimal"
module Arel
module Visitors
- describe 'the to_sql visitor' do
+ describe "the to_sql visitor" do
before do
@conn = FakeRecord::Base.new
@visitor = ToSql.new @conn.connection
@@ -12,24 +13,24 @@ module Arel
@attr = @table[:id]
end
- def compile node
+ def compile(node)
@visitor.accept(node, Collectors::SQLString.new).value
end
- it 'works with BindParams' do
+ it "works with BindParams" do
node = Nodes::BindParam.new(1)
sql = compile node
- sql.must_be_like '?'
+ 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 Values" do
bp = Nodes::BindParam.new(1)
values = Nodes::Values.new([bp])
sql = compile values
- sql.must_be_like 'VALUES (?)'
+ sql.must_be_like "VALUES (?)"
end
- it 'can define a dispatch method' do
+ it "can define a dispatch method" do
visited = false
viz = Class.new(Arel::Visitors::Visitor) {
define_method(:hello) do |node, c|
@@ -37,117 +38,117 @@ module Arel
end
def dispatch
- { Arel::Table => 'hello' }
+ { Arel::Table => "hello" }
end
}.new
viz.accept(@table, Collectors::SQLString.new)
- assert visited, 'hello method was called'
+ assert visited, "hello method was called"
end
- it 'should not quote sql literals' do
+ it "should not quote sql literals" do
node = @table[Arel.star]
sql = compile node
sql.must_be_like '"users".*'
end
- it 'should visit named functions' do
- function = Nodes::NamedFunction.new('omg', [Arel.star])
- assert_equal 'omg(*)', compile(function)
+ it "should visit named functions" do
+ function = Nodes::NamedFunction.new("omg", [Arel.star])
+ assert_equal "omg(*)", compile(function)
end
- it 'should chain predications on named functions' do
- function = Nodes::NamedFunction.new('omg', [Arel.star])
+ it "should chain predications on named functions" do
+ function = Nodes::NamedFunction.new("omg", [Arel.star])
sql = compile(function.eq(2))
sql.must_be_like %{ omg(*) = 2 }
end
- it 'should handle nil with named functions' do
- function = Nodes::NamedFunction.new('omg', [Arel.star])
+ it "should handle nil with named functions" do
+ function = Nodes::NamedFunction.new("omg", [Arel.star])
sql = compile(function.eq(nil))
sql.must_be_like %{ omg(*) IS NULL }
end
- it 'should visit built-in functions' do
+ it "should visit built-in functions" do
function = Nodes::Count.new([Arel.star])
- assert_equal 'COUNT(*)', compile(function)
+ assert_equal "COUNT(*)", compile(function)
function = Nodes::Sum.new([Arel.star])
- assert_equal 'SUM(*)', compile(function)
+ assert_equal "SUM(*)", compile(function)
function = Nodes::Max.new([Arel.star])
- assert_equal 'MAX(*)', compile(function)
+ assert_equal "MAX(*)", compile(function)
function = Nodes::Min.new([Arel.star])
- assert_equal 'MIN(*)', compile(function)
+ assert_equal "MIN(*)", compile(function)
function = Nodes::Avg.new([Arel.star])
- assert_equal 'AVG(*)', compile(function)
+ assert_equal "AVG(*)", compile(function)
end
- it 'should visit built-in functions operating on distinct values' do
+ it "should visit built-in functions operating on distinct values" do
function = Nodes::Count.new([Arel.star])
function.distinct = true
- assert_equal 'COUNT(DISTINCT *)', compile(function)
+ assert_equal "COUNT(DISTINCT *)", compile(function)
function = Nodes::Sum.new([Arel.star])
function.distinct = true
- assert_equal 'SUM(DISTINCT *)', compile(function)
+ assert_equal "SUM(DISTINCT *)", compile(function)
function = Nodes::Max.new([Arel.star])
function.distinct = true
- assert_equal 'MAX(DISTINCT *)', compile(function)
+ assert_equal "MAX(DISTINCT *)", compile(function)
function = Nodes::Min.new([Arel.star])
function.distinct = true
- assert_equal 'MIN(DISTINCT *)', compile(function)
+ assert_equal "MIN(DISTINCT *)", compile(function)
function = Nodes::Avg.new([Arel.star])
function.distinct = true
- assert_equal 'AVG(DISTINCT *)', compile(function)
+ assert_equal "AVG(DISTINCT *)", compile(function)
end
- it 'works with lists' do
- function = Nodes::NamedFunction.new('omg', [Arel.star, Arel.star])
- assert_equal 'omg(*, *)', compile(function)
+ it "works with lists" do
+ function = Nodes::NamedFunction.new("omg", [Arel.star, Arel.star])
+ assert_equal "omg(*, *)", compile(function)
end
- describe 'Nodes::Equality' do
+ describe "Nodes::Equality" do
it "should escape strings" do
- test = Table.new(:users)[:name].eq 'Aaron Patterson'
+ test = Table.new(:users)[:name].eq "Aaron Patterson"
compile(test).must_be_like %{
"users"."name" = 'Aaron Patterson'
}
end
- it 'should handle false' do
+ it "should handle false" do
table = Table.new(:users)
val = Nodes.build_quoted(false, table[:active])
sql = compile Nodes::Equality.new(val, val)
sql.must_be_like %{ 'f' = 'f' }
end
- it 'should handle nil' do
+ it "should handle nil" do
sql = compile Nodes::Equality.new(@table[:name], nil)
sql.must_be_like %{ "users"."name" IS NULL }
end
end
- describe 'Nodes::Grouping' do
- it 'wraps nested groupings in brackets only once' do
- sql = compile Nodes::Grouping.new(Nodes::Grouping.new(Nodes.build_quoted('foo')))
+ describe "Nodes::Grouping" do
+ it "wraps nested groupings in brackets only once" do
+ sql = compile Nodes::Grouping.new(Nodes::Grouping.new(Nodes.build_quoted("foo")))
sql.must_equal "('foo')"
end
end
- describe 'Nodes::NotEqual' do
- it 'should handle false' do
+ describe "Nodes::NotEqual" do
+ it "should handle false" do
val = Nodes.build_quoted(false, @table[:active])
sql = compile Nodes::NotEqual.new(@table[:active], val)
sql.must_be_like %{ "users"."active" != 'f' }
end
- it 'should handle nil' do
+ it "should handle nil" do
val = Nodes.build_quoted(nil, @table[:active])
sql = compile Nodes::NotEqual.new(@table[:name], val)
sql.must_be_like %{ "users"."name" IS NOT NULL }
@@ -225,7 +226,7 @@ module Arel
end
it "should visit_Hash" do
- compile(Nodes.build_quoted({:a => 1}))
+ compile(Nodes.build_quoted(a: 1))
end
it "should visit_Set" do
@@ -233,7 +234,7 @@ module Arel
end
it "should visit_BigDecimal" do
- compile Nodes.build_quoted(BigDecimal('2.14'))
+ compile Nodes.build_quoted(BigDecimal("2.14"))
end
it "should visit_Date" do
@@ -296,21 +297,21 @@ module Arel
describe "Nodes::Matches" do
it "should know how to visit" do
- node = @table[:name].matches('foo%')
+ node = @table[:name].matches("foo%")
compile(node).must_be_like %{
"users"."name" LIKE 'foo%'
}
end
it "can handle ESCAPE" do
- node = @table[:name].matches('foo!%', '!')
+ node = @table[:name].matches("foo!%", "!")
compile(node).must_be_like %{
"users"."name" LIKE 'foo!%' ESCAPE '!'
}
end
- it 'can handle subqueries' do
- subquery = @table.project(:id).where(@table[:name].matches('foo%'))
+ it "can handle subqueries" do
+ subquery = @table.project(:id).where(@table[:name].matches("foo%"))
node = @attr.in subquery
compile(node).must_be_like %{
"users"."id" IN (SELECT id FROM "users" WHERE "users"."name" LIKE 'foo%')
@@ -320,21 +321,21 @@ module Arel
describe "Nodes::DoesNotMatch" do
it "should know how to visit" do
- node = @table[:name].does_not_match('foo%')
+ node = @table[:name].does_not_match("foo%")
compile(node).must_be_like %{
"users"."name" NOT LIKE 'foo%'
}
end
it "can handle ESCAPE" do
- node = @table[:name].does_not_match('foo!%', '!')
+ node = @table[:name].does_not_match("foo!%", "!")
compile(node).must_be_like %{
"users"."name" NOT LIKE 'foo!%' ESCAPE '!'
}
end
- it 'can handle subqueries' do
- subquery = @table.project(:id).where(@table[:name].does_not_match('foo%'))
+ it "can handle subqueries" do
+ subquery = @table.project(:id).where(@table[:name].does_not_match("foo%"))
node = @attr.in subquery
compile(node).must_be_like %{
"users"."id" IN (SELECT id FROM "users" WHERE "users"."name" NOT LIKE 'foo%')
@@ -361,24 +362,24 @@ module Arel
it "should return 1=0 when empty right which is always false" do
node = @attr.in []
- compile(node).must_equal '1=0'
+ compile(node).must_equal "1=0"
end
- it 'can handle two dot ranges' do
+ it "can handle two dot ranges" do
node = @attr.between 1..3
compile(node).must_be_like %{
"users"."id" BETWEEN 1 AND 3
}
end
- it 'can handle three dot ranges' do
+ it "can handle three dot ranges" do
node = @attr.between 1...3
compile(node).must_be_like %{
"users"."id" >= 1 AND "users"."id" < 3
}
end
- it 'can handle ranges bounded by infinity' do
+ it "can handle ranges bounded by infinity" do
node = @attr.between 1..Float::INFINITY
compile(node).must_be_like %{
"users"."id" >= 1
@@ -395,9 +396,9 @@ module Arel
compile(node).must_be_like %{1=1}
end
- it 'can handle subqueries' do
+ it "can handle subqueries" do
table = Table.new(:users)
- subquery = table.project(:id).where(table[:name].eq('Aaron'))
+ subquery = table.project(:id).where(table[:name].eq("Aaron"))
node = @attr.in subquery
compile(node).must_be_like %{
"users"."id" IN (SELECT id FROM "users" WHERE "users"."name" = 'Aaron')
@@ -459,7 +460,7 @@ module Arel
it "should handle arbitrary operators" do
node = Arel::Nodes::InfixOperation.new(
- '&&',
+ "&&",
Arel::Attributes::String.new(Table.new(:products), :name),
Arel::Attributes::String.new(Table.new(:products), :name)
)
@@ -474,7 +475,7 @@ module Arel
end
it "should handle arbitrary operators" do
- node = Arel::Nodes::UnaryOperation.new('!', Arel::Attributes::String.new(Table.new(:products), :active))
+ node = Arel::Nodes::UnaryOperation.new("!", Arel::Attributes::String.new(Table.new(:products), :active))
compile(node).must_equal %( ! "products"."active")
end
end
@@ -489,24 +490,24 @@ module Arel
it "should return 1=1 when empty right which is always true" do
node = @attr.not_in []
- compile(node).must_equal '1=1'
+ compile(node).must_equal "1=1"
end
- it 'can handle two dot ranges' do
+ it "can handle two dot ranges" do
node = @attr.not_between 1..3
compile(node).must_equal(
%{("users"."id" < 1 OR "users"."id" > 3)}
)
end
- it 'can handle three dot ranges' do
+ it "can handle three dot ranges" do
node = @attr.not_between 1...3
compile(node).must_equal(
%{("users"."id" < 1 OR "users"."id" >= 3)}
)
end
- it 'can handle ranges bounded by infinity' do
+ it "can handle ranges bounded by infinity" do
node = @attr.not_between 1..Float::INFINITY
compile(node).must_be_like %{
"users"."id" < 1
@@ -523,9 +524,9 @@ module Arel
compile(node).must_be_like %{1=0}
end
- it 'can handle subqueries' do
+ it "can handle subqueries" do
table = Table.new(:users)
- subquery = table.project(:id).where(table[:name].eq('Aaron'))
+ subquery = table.project(:id).where(table[:name].eq("Aaron"))
node = @attr.not_in subquery
compile(node).must_be_like %{
"users"."id" NOT IN (SELECT id FROM "users" WHERE "users"."name" = 'Aaron')
@@ -533,7 +534,7 @@ module Arel
end
end
- describe 'Constants' do
+ describe "Constants" do
it "should handle true" do
test = Table.new(:users).create_true
compile(test).must_be_like %{
@@ -549,19 +550,19 @@ module Arel
end
end
- describe 'TableAlias' do
+ describe "TableAlias" do
it "should use the underlying table for checking columns" do
- test = Table.new(:users).alias('zomgusers')[:id].eq '3'
+ test = Table.new(:users).alias("zomgusers")[:id].eq "3"
compile(test).must_be_like %{
"zomgusers"."id" = '3'
}
end
end
- describe 'distinct on' do
- it 'raises not implemented error' do
+ describe "distinct on" do
+ it "raises not implemented error" do
core = Arel::Nodes::SelectCore.new
- core.set_quantifier = Arel::Nodes::DistinctOn.new(Arel.sql('aaron'))
+ core.set_quantifier = Arel::Nodes::DistinctOn.new(Arel.sql("aaron"))
assert_raises(NotImplementedError) do
compile(core)
@@ -569,9 +570,9 @@ module Arel
end
end
- describe 'Nodes::Regexp' do
- it 'raises not implemented error' do
- node = Arel::Nodes::Regexp.new(@table[:name], Nodes.build_quoted('foo%'))
+ describe "Nodes::Regexp" do
+ it "raises not implemented error" do
+ node = Arel::Nodes::Regexp.new(@table[:name], Nodes.build_quoted("foo%"))
assert_raises(NotImplementedError) do
compile(node)
@@ -579,9 +580,9 @@ module Arel
end
end
- describe 'Nodes::NotRegexp' do
- it 'raises not implemented error' do
- node = Arel::Nodes::NotRegexp.new(@table[:name], Nodes.build_quoted('foo%'))
+ describe "Nodes::NotRegexp" do
+ it "raises not implemented error" do
+ node = Arel::Nodes::NotRegexp.new(@table[:name], Nodes.build_quoted("foo%"))
assert_raises(NotImplementedError) do
compile(node)
@@ -589,10 +590,10 @@ module Arel
end
end
- describe 'Nodes::Case' do
- it 'supports simple case expressions' do
+ describe "Nodes::Case" do
+ it "supports simple case expressions" do
node = Arel::Nodes::Case.new(@table[:name])
- .when('foo').then(1)
+ .when("foo").then(1)
.else(0)
compile(node).must_be_like %{
@@ -600,7 +601,7 @@ module Arel
}
end
- it 'supports extended case expressions' do
+ it "supports extended case expressions" do
node = Arel::Nodes::Case.new
.when(@table[:name].in(%w(foo bar))).then(1)
.else(0)
@@ -610,19 +611,19 @@ module Arel
}
end
- it 'works without default branch' do
+ it "works without default branch" do
node = Arel::Nodes::Case.new(@table[:name])
- .when('foo').then(1)
+ .when("foo").then(1)
compile(node).must_be_like %{
CASE "users"."name" WHEN 'foo' THEN 1 END
}
end
- it 'allows chaining multiple conditions' do
+ it "allows chaining multiple conditions" do
node = Arel::Nodes::Case.new(@table[:name])
- .when('foo').then(1)
- .when('bar').then(2)
+ .when("foo").then(1)
+ .when("bar").then(2)
.else(0)
compile(node).must_be_like %{
@@ -630,7 +631,7 @@ module Arel
}
end
- it 'supports #when with two arguments and no #then' do
+ it "supports #when with two arguments and no #then" do
node = Arel::Nodes::Case.new @table[:name]
{ foo: 1, bar: 0 }.reduce(node) { |_node, pair| _node.when(*pair) }
@@ -640,8 +641,8 @@ module Arel
}
end
- it 'can be chained as a predicate' do
- node = @table[:name].when('foo').then('bar').else('baz')
+ it "can be chained as a predicate" do
+ node = @table[:name].when("foo").then("bar").else("baz")
compile(node).must_be_like %{
CASE "users"."name" WHEN 'foo' THEN 'bar' ELSE 'baz' END