Sha256: 60322c653e24d8d78c2544f64cdfdcaa09aeada696064075fbbafa32f036a595

Contents?: true

Size: 1.48 KB

Versions: 4

Compression:

Stored size: 1.48 KB

Contents

require 'arel/visitors/compat'

module Arel
  module Visitors
    class DB2 < Arel::Visitors::ToSql

      def visit_Arel_Nodes_SelectStatement o, a = nil
        sql = o.cores.map { |x| do_visit_select_core x, a }.join
        sql << " ORDER BY #{o.orders.map { |x| do_visit x, a }.join(', ')}" unless o.orders.empty?
        add_limit_offset(sql, o)
      end

      def visit_Arel_Nodes_InsertStatement o, a = nil
        sql = "INSERT INTO "
        sql << visit(o.relation, a)

        values = o.values

        if o.columns.any?
          cols = o.columns.map { |x| quote_column_name x.name }
          sql << ' (' << cols.join(', ') << ') '
        # should depend the other way around but who cares it's AR
        elsif o.values.eql? ArJdbc::DB2::VALUES_DEFAULT
          cols = o.relation.engine.columns.map { |c| c.name }
          sql << ' (' << cols.join(', ') << ')'
          sql << ' VALUES '
          sql << ' (' << cols.map { 'DEFAULT' }.join(', ') << ')'
          values = nil
        end

        sql << visit(values, a) if values

        sql
      end if Arel::VERSION >= '4.0' # AR 4.0 ... AREL 5.0 since AR >= 4.1

      private

      def add_limit_offset(sql, o)
        if o.offset && o.offset.value && o.limit && o.limit.value
          @connection.replace_limit_offset_with_ordering! sql, o.limit.value, o.offset.value, o.orders
        else
          @connection.replace_limit_offset! sql, limit_for(o.limit), o.offset && o.offset.value
        end
      end

    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
activerecord-jdbc-adapter-1.3.17 lib/arel/visitors/db2.rb
activerecord-jdbc-adapter-1.3.16 lib/arel/visitors/db2.rb
activerecord-jdbc-adapter-1.3.15 lib/arel/visitors/db2.rb
activerecord-jdbc-adapter-1.3.14 lib/arel/visitors/db2.rb