Sha256: 79a87c0600e9935d0b321b15f80b8b5b095f06f42857070257536369eb7fc4a2

Contents?: true

Size: 975 Bytes

Versions: 5

Compression:

Stored size: 975 Bytes

Contents

module SchemaPlus::DbDefault
  module Middleware

    module Query
      module Exec

        module Postgresql

          # Middleware to replace each ActiveRecord::DB_DEFAULT with a literal
          # DEFAULT in the sql string, for postgresql.  The underlying pg gem provides no
          # way to bind a value that will replace $n with DEFAULT.
          def before(env)
            if env.binds.any?{ |col, val| val.equal? ::ActiveRecord::DB_DEFAULT}
              j = 0
              env.binds.each_with_index do |(col, val), i|
                if val.equal? ::ActiveRecord::DB_DEFAULT
                  env.sql = env.sql.sub(/\$#{i+1}/, 'DEFAULT')
                else
                  env.sql = env.sql.sub(/\$#{i+1}/, "$#{j+1}") if i != j
                  j += 1
                end
              end
              env.binds = env.binds.reject{|col, val| val.equal? ::ActiveRecord::DB_DEFAULT}
            end
          end
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
schema_plus-2.0.0.pre10 lib/schema_plus/db_default/middleware.rb
schema_plus-2.0.0.pre9 lib/schema_plus/db_default/middleware.rb
schema_plus-2.0.0.pre8 lib/schema_plus/db_default/middleware.rb
schema_plus-2.0.0.pre7 lib/schema_plus/db_default/middleware.rb
schema_plus-2.0.0.pre6 lib/schema_plus/db_default/middleware.rb