Sha256: 315fb29c128e1777f6bfb7ff11a5db5afd07388265174ddd1970aa01c29cc9fd

Contents?: true

Size: 1.65 KB

Versions: 2

Compression:

Stored size: 1.65 KB

Contents

require 'ffi'
require_relative 'btrieve_const'

module Btrieve
  extend FFI::Library
  include BtrCodes

  if( RUBY_PLATFORM.match('mswin|mingw|cygwin'))
    ffi_lib 'w3btrv7.dll'
  elsif(RUBY_PLATFORM.match('linux'))
    ffi_lib 'libpsqlmif.so'
  else
    raise Exception.new("Unknown RUBY_PLATFORM #{RUBY_PLATFORM} to perform FFI calls into PSQL.")
  end

  attach_function :BTRCALLID, [:int, :pointer, :pointer, :pointer, :pointer, :uchar, :uchar, :pointer], :int

  def btr_op(session, ops, pos_buffer, data_buffer, key_buffer, key_number, valid_return_codes=[0])
    data_length = [data_buffer.size].pack('L')
    key_length = key_buffer.size
    result_code = BTRCALLID(ops, pos_buffer, data_buffer, data_length, key_buffer, key_length, key_number, session.client_id)
    unless valid_return_codes.include?(result_code)
      p "ops=#{ops} data_buffer.length=#{data_buffer.length} key_buffer=#{key_buffer}, key_buffer.length=#{key_buffer.length}, key_number=#{key_number}, session.client_id=#{session.client_id}"
      raise Exception.new("PSQL Exception Code #{result_code} - #{EXCEPTION_MESSAGES[result_code]}")
    end
    result_code
  end

  def self.create_string_buffer(size)
    0.chr*(size)
  end
end

module Timer
  def timer(&block)
    start_time = Time.now
    yield
    end_time = Time.now
    end_time - start_time
  end

  def timer2(out=nil, &block)
    start_time = Time.now
    out = yield out
    [Time.now - start_time, out]
  end
end

require_relative 'btrieve_session'
require_relative 'btrieve_table'
require_relative 'btrieve_schema'
require_relative 'btrieve_meta'
require_relative 'btrieve_record'
require_relative 'btrieve_model'
require_relative 'fos_code'

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
beezwax-0.1.1 lib/btrieve/btrieve_core.rb
beezwax-0.1.0 lib/btrieve/btrieve_core.rb