diogob/carrierwave-postgresql

View on GitHub
lib/carrierwave/storage/adapters/jdbc_connection.rb

Summary

Maintainability
A
0 mins
Test Coverage
# encoding: utf-8
module CarrierWave
  module Storage
    module Adapters
      module JDBCConnection
        def identifier
          @oid ||= connection.connection.getLargeObjectAPI.createLO
        end

        def read
          @uploader.model.transaction do
            lo = lo_manager.java_send :open, [Java::long], identifier
            bytes = lo.read(lo.size)
            lo.close
            String.from_java_bytes(bytes)
          end
        end

        def write(file)
          array_buf = java.nio.file.Files.readAllBytes(java.nio.file.Paths.get(file.path))
          @uploader.model.transaction do
            lo = lo_manager.java_send :open, [Java::long, Java::int], identifier, Java::OrgPostgresqlLargeobject::LargeObjectManager::WRITE
            lo.truncate(0)
            lo.write(array_buf)
            size = lo.size
            lo.close
            size
          end
        end

        def delete
          lo_manager.java_send :unlink, [Java::long], identifier
        end

        def file_length
          @uploader.model.transaction do
            lo = lo_manager.java_send :open, [Java::long], identifier
            size = lo.size
            lo.close
            size
          end
        end

        private
        def lo_manager
          @lo_manager ||= connection.connection.getLargeObjectAPI
        end
      end
    end
  end
end