Ruby-oci8 2.0.3 and 1.0.7

Ruby-oci8 2.0.3 and 1.0.7 are released. These are Oracle modules using
OCI8 API.

http://rubyforge.org/projects/ruby-oci8/

Ruby-oci8 2.0.3 is stable from this release. Imcompatible changes will
be done from now. An exception is made for object type support. Object
type support has been unstable yet. It will be stable in ruby-oci8
2.1.0.

Ruby-oci8 1.0.7 is a maintenance release. New realeases will not be
added to ruby-oci8 1.0.

Note: Active record oracle adapter doesn’t work with 2.0.3.
Use Active record oracle_enhanced adapter instead.
http://rubyforge.org/projects/oracle-enhanced

What’s new in 2.0.3.

  • Imcompatible Changes

    • Number column in a SQL statement

      Changes the default data type for number column which fit neither
      Integer nor Float from OraNumber to BigDecimal.

      conn.exec(“select 1.0 from dual”) do |row|
      p row[0] # => BigDecimal(“1”) if the ruby-oci8 version is 2.0.3.
      # => OraNumber(1) if the version is 2.0.2.
      end

    • Priority of OraNumber within numerical types

      The return types of basic arithmetic operations with other numerical
      types are changed.

      2.0.3:
      OraNumber + Integer => OraNumber (OraNumber wins.)
      OraNumber + Float => Float (OraNumber loses.)
      OraNumber + Rational => Rational (OraNumber loses.)
      OraNumber + BigDecimal => BigDecimal (OraNumber loses.)

      2.0.2:
      OraNumber + Integer => OraNumber (OraNumber wins always.)
      OraNumber + Float => OraNumber
      OraNumber + Rational => OraNumber
      OraNumber + BigDecimal => OraNumber

    • Interval day to second

      The retrived value of Oracle data type “interval day to second”
      was changed from the number of days as a Rational to the number
      of seconds as a Float by default.
      Use OCI8::BindType::IntervalDS.unit = :day to make it compatible
      with the previous versions.

      conn.exec(“select to_dsinterval(‘0 00:00:01’) from dual”) do |row|
      p row[0] # => 1.0 if the version is 2.0.3 and
      # OCI8::BindType::IntervalDS.unit is :second.
      # => (1/86400) if the version is 2.0.3 and

      OCI8::BindType::IntervalDS.unit is :day or

      the version is 2.0.2.

      end

    • Date, timestamp, timestamp with time zone data types and ruby 1.9.2

      These data types are retrived always as Time values when the
      ruby version is 1.9.2 because the Time class is enhanced to
      represent any time zone and is free from year 2038 problem.

      Prior to ruby 1.9.2, if the time cannot be represented by
      Unix time or the time zone is neither utc nor local, they are
      retrived as DateTime values.

    • Non-blocking mode and ruby 1.9

      non-blocking mode is enabled by default when the ruby is 1.9.

  • New Features

    • BigDecimal and Rational are availabe as bind values.

    • New methods OCI8#module=, OCI8#action= and OCI8#client_info= are
      added.

      These methods change the module name, the action name and the
      client_info
      in the current session respectively.

      After Oracle 10g client, these don’t perform network round trips.
      The change is reflected to the server by the next round trip such as
      OCI8#exec, OCI8#ping, etc.

      Prior to Oracle 10g client, these call PL/SQL functions such as
      DBMS_APPLICATION_INFO.SET_MODULE, DBMS_APPLICATION_INFO.SET_ACTION,
      and DBMS_APPLICATION_INFO.SET_CLIENT_INFO internally.
      The change is reflected immediately by a network round trip.

    • OCI8::BindType.default_timezone

      The default time zone of Time or DateTime values.
      This parameter is used only when
      (1) date values are fetched and the Oracle client version is 8.x
      or
      (2) object types have date data type attributes.

      Note that if the Oracle client version is 9i or upper, the time
      zone is determined by the session time zone. The default value
      is local time zone. You can change it to GMT by executing the
      following SQL statement for each connection.

      alter session set time_zone = ‘00:00’

  • Other specification changes

    • Add a global function OraNumber(obj) as a shortcut of
      OraNumber.new(obj)
      as Rational and BigDecimal do.

    • Fix to accept nil attribute in object type’s
      constructors. This works only for simple data types such as number,
      string. But it doesn’t for complex types such as object types.
      (requested by Remi G.)

    • add DATE datatype support in object types.

    • Change OCI8::LOB#write to accept an object which is not a String and
      doesn’t respond to ‘to_str’ as IO#write does.
      (requested by Christopher J.)

    • Change the initial polling interval of
      non-blocking mode for ruby 1.8 from 100 msec to 10 msec, which
      is same with ruby-oci8 1.0.

  • Fixed installation issues.

    • Fix oraconf.rb for ruby 1.8.5 with Oracle 8.x which needs some
      object
      files to link with.
      (reported by Jayson Cena)

    • Fix oraconf.rb for ruby 1.9.2 preview1.
      (pointed by Raimonds Simanovskis)

    • Fix oraconf.rb to compile for AIX instant clients.
      (reported by Kazuya Teramoto)

What’s new in 1.0.7.

  • change OCI8::LOB#write to accept an object which is not a String and
    doesn’t respond to ‘to_str’ as IO#write does.
    (requested by Christopher J.)

  • fix oraconf.rb for AIX instant clients.
    (reported by Kazuya Teramoto)

  • fix oraconf.rb for ruby 1.8.5 with Oracle 8.x which needs some object
    files to link with.
    (reported by Jayson Cena)

On Thu, Oct 22, 2009 at 12:42 AM, KUBO Takehiro [email protected] wrote:

Ruby-oci8 2.0.3 and 1.0.7 are released. These are Oracle modules using
OCI8 API.

http://rubyforge.org/projects/ruby-oci8/

Ruby-oci8 2.0.3 is stable from this release. Imcompatible changes will
be done from now. An exception is made for object type support. Object

I made a mistake.
Incompatible changes will not be done from now.