diff options
Diffstat (limited to 'lib/arel')
-rw-r--r-- | lib/arel/table.rb | 8 | ||||
-rw-r--r-- | lib/arel/visitors/bind_visitor.rb | 1 | ||||
-rw-r--r-- | lib/arel/visitors/dot.rb | 11 | ||||
-rw-r--r-- | lib/arel/visitors/ibm_db.rb | 1 | ||||
-rw-r--r-- | lib/arel/visitors/informix.rb | 1 | ||||
-rw-r--r-- | lib/arel/visitors/mssql.rb | 1 | ||||
-rw-r--r-- | lib/arel/visitors/mysql.rb | 1 | ||||
-rw-r--r-- | lib/arel/visitors/oracle.rb | 18 | ||||
-rw-r--r-- | lib/arel/visitors/oracle12.rb | 1 | ||||
-rw-r--r-- | lib/arel/visitors/postgresql.rb | 1 | ||||
-rw-r--r-- | lib/arel/visitors/sqlite.rb | 1 | ||||
-rw-r--r-- | lib/arel/visitors/to_sql.rb | 1 | ||||
-rw-r--r-- | lib/arel/visitors/where_sql.rb | 1 |
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 |