aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/arel/table.rb8
-rw-r--r--lib/arel/visitors/bind_visitor.rb1
-rw-r--r--lib/arel/visitors/dot.rb11
-rw-r--r--lib/arel/visitors/ibm_db.rb1
-rw-r--r--lib/arel/visitors/informix.rb1
-rw-r--r--lib/arel/visitors/mssql.rb1
-rw-r--r--lib/arel/visitors/mysql.rb1
-rw-r--r--lib/arel/visitors/oracle.rb18
-rw-r--r--lib/arel/visitors/oracle12.rb1
-rw-r--r--lib/arel/visitors/postgresql.rb1
-rw-r--r--lib/arel/visitors/sqlite.rb1
-rw-r--r--lib/arel/visitors/to_sql.rb1
-rw-r--r--lib/arel/visitors/where_sql.rb1
13 files changed, 36 insertions, 11 deletions
diff --git a/lib/arel/table.rb b/lib/arel/table.rb
index b4b4a861b8..0e7214f269 100644
--- a/lib/arel/table.rb
+++ b/lib/arel/table.rb
@@ -6,7 +6,7 @@ module Arel
@engine = nil
class << self; attr_accessor :engine; end
- attr_accessor :name, :aliases, :table_alias
+ attr_accessor :name, :table_alias
# TableAlias and Table both have a #table_name which is the name of the underlying table
alias :table_name :name
@@ -14,7 +14,6 @@ module Arel
def initialize(name, as: nil, type_caster: nil)
@name = name.to_s
@columns = nil
- @aliases = []
@type_caster = type_caster
# Sometime AR sends an :as parameter to table, to let the table know
@@ -27,9 +26,7 @@ module Arel
end
def alias name = "#{self.name}_2"
- Nodes::TableAlias.new(self, name).tap do |node|
- @aliases << node
- end
+ Nodes::TableAlias.new(self, name)
end
def from
@@ -94,7 +91,6 @@ module Arel
def eql? other
self.class == other.class &&
self.name == other.name &&
- self.aliases == other.aliases &&
self.table_alias == other.table_alias
end
alias :== :eql?
diff --git a/lib/arel/visitors/bind_visitor.rb b/lib/arel/visitors/bind_visitor.rb
index c336e87395..8a5570cf5c 100644
--- a/lib/arel/visitors/bind_visitor.rb
+++ b/lib/arel/visitors/bind_visitor.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
module Arel
module Visitors
module BindVisitor
diff --git a/lib/arel/visitors/dot.rb b/lib/arel/visitors/dot.rb
index ca8d2b0bd0..9aa22d33f6 100644
--- a/lib/arel/visitors/dot.rb
+++ b/lib/arel/visitors/dot.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
module Arel
module Visitors
class Dot < Arel::Visitors::Visitor
@@ -155,6 +156,11 @@ module Arel
visit_edge o, "name"
end
+ def visit_Arel_Nodes_Casted o
+ visit_edge o, 'val'
+ visit_edge o, 'attribute'
+ end
+
def visit_Arel_Attribute o
visit_edge o, "relation"
visit_edge o, "name"
@@ -204,7 +210,6 @@ module Arel
alias :visit_NilClass :visit_String
alias :visit_TrueClass :visit_String
alias :visit_FalseClass :visit_String
- alias :visit_Arel_Nodes_BindParam :visit_String
alias :visit_Integer :visit_String
alias :visit_Fixnum :visit_String
alias :visit_BigDecimal :visit_String
@@ -212,6 +217,8 @@ module Arel
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 }
@@ -271,7 +278,7 @@ module Arel
label = "<f0>#{node.name}"
node.fields.each_with_index do |field, i|
- label << "|<f#{i + 1}>#{quote field}"
+ label += "|<f#{i + 1}>#{quote field}"
end
"#{node.id} [label=\"#{label}\"];"
diff --git a/lib/arel/visitors/ibm_db.rb b/lib/arel/visitors/ibm_db.rb
index f1d126790d..e85a5a08a7 100644
--- a/lib/arel/visitors/ibm_db.rb
+++ b/lib/arel/visitors/ibm_db.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
module Arel
module Visitors
class IBM_DB < Arel::Visitors::ToSql
diff --git a/lib/arel/visitors/informix.rb b/lib/arel/visitors/informix.rb
index c33ef50554..b53ab18b82 100644
--- a/lib/arel/visitors/informix.rb
+++ b/lib/arel/visitors/informix.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
module Arel
module Visitors
class Informix < Arel::Visitors::ToSql
diff --git a/lib/arel/visitors/mssql.rb b/lib/arel/visitors/mssql.rb
index 92362a0c5f..8347d05d06 100644
--- a/lib/arel/visitors/mssql.rb
+++ b/lib/arel/visitors/mssql.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
module Arel
module Visitors
class MSSQL < Arel::Visitors::ToSql
diff --git a/lib/arel/visitors/mysql.rb b/lib/arel/visitors/mysql.rb
index ac3ad7b470..4c734f6292 100644
--- a/lib/arel/visitors/mysql.rb
+++ b/lib/arel/visitors/mysql.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
module Arel
module Visitors
class MySQL < Arel::Visitors::ToSql
diff --git a/lib/arel/visitors/oracle.rb b/lib/arel/visitors/oracle.rb
index 875b0e5b6a..3b452836db 100644
--- a/lib/arel/visitors/oracle.rb
+++ b/lib/arel/visitors/oracle.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
module Arel
module Visitors
class Oracle < Arel::Visitors::ToSql
@@ -26,11 +27,22 @@ module Arel
FROM ("
collector = super(o, collector)
- collector << ") raw_sql_
+
+ if offset.expr.is_a? Nodes::BindParam
+ offset_bind = nil
+ collector << ') raw_sql_ WHERE rownum <= ('
+ collector.add_bind(offset.expr) { |i| offset_bind = ":a#{i}" }
+ collector << ' + '
+ collector.add_bind(limit) { |i| ":a#{i}" }
+ collector << ") ) WHERE raw_rnum_ > #{offset_bind}"
+ return collector
+ else
+ collector << ") raw_sql_
WHERE rownum <= #{offset.expr.to_i + limit}
)
WHERE "
- return visit(offset, collector)
+ return visit(offset, collector)
+ end
end
if o.limit
@@ -125,7 +137,7 @@ module Arel
array[i] << ',' << part
else
# to ensure that array[i] will be String and not Arel::Nodes::SqlLiteral
- array[i] = '' << part
+ array[i] = part.to_s
end
i += 1 if array[i].count('(') == array[i].count(')')
end
diff --git a/lib/arel/visitors/oracle12.rb b/lib/arel/visitors/oracle12.rb
index 9b722e8c0c..ce90e994ae 100644
--- a/lib/arel/visitors/oracle12.rb
+++ b/lib/arel/visitors/oracle12.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
module Arel
module Visitors
class Oracle12 < Arel::Visitors::ToSql
diff --git a/lib/arel/visitors/postgresql.rb b/lib/arel/visitors/postgresql.rb
index ef0f0ea2ef..f0991a2f11 100644
--- a/lib/arel/visitors/postgresql.rb
+++ b/lib/arel/visitors/postgresql.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
module Arel
module Visitors
class PostgreSQL < Arel::Visitors::ToSql
diff --git a/lib/arel/visitors/sqlite.rb b/lib/arel/visitors/sqlite.rb
index 165e9cb6db..4ae093968b 100644
--- a/lib/arel/visitors/sqlite.rb
+++ b/lib/arel/visitors/sqlite.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
module Arel
module Visitors
class SQLite < Arel::Visitors::ToSql
diff --git a/lib/arel/visitors/to_sql.rb b/lib/arel/visitors/to_sql.rb
index 5429bf4ee8..3f61842c3f 100644
--- a/lib/arel/visitors/to_sql.rb
+++ b/lib/arel/visitors/to_sql.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
require 'bigdecimal'
require 'date'
require 'arel/visitors/reduce'
diff --git a/lib/arel/visitors/where_sql.rb b/lib/arel/visitors/where_sql.rb
index 41972d5836..55e6ca9a21 100644
--- a/lib/arel/visitors/where_sql.rb
+++ b/lib/arel/visitors/where_sql.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
module Arel
module Visitors
class WhereSql < Arel::Visitors::ToSql