Ruby-oci8 2.1.0 is released. This is the Oracle module using OCI8 API.

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

Note that ruby-oci8 2.1.0 doesn't support Oracle 8 (8.0) and Oracle 8i
(8.1) anymore.

* New Features

  - OCI connection pooling

    See: http://ruby-oci8.rubyforge.org/en/rdoc/OCI8/ConnectionPool.html

    Example:

      # Create a connection pool.
      # username and password are required to establish an implicit
primary session.
      cpool = OCI8::ConnectionPool.new(1, 5, 2, username, password, database)

      # Get a session from the pool.
      # Pass the connection pool to the third argument.
      conn1 = OCI8.new(username, password, cpool)

      # Get another session.
      conn2 = OCI8.new(username, password, cpool)

  - Daylight saving time aware if TZ is set.

    You should set the environment variable TZ if your applications run
    in a time zone with daylight saving time transitions.
    Otherwise, Oracle session time zone is set with current constant
    offset from GMT.
    (reported by Yasuo Honda)

  - connect as sysasm (Oracle 11g only)

      OCI8.new('username/password as sysasm')
    or
      OCI8.new('username', 'password', nil, :SYSASM)

  - Oracle number is converted to ruby float exactly same as ruby does.

    From ruby 1.9.2, a float value converted from Oracle number 15.7 by
    the Oracle function OCINumberToReal() makes a string representation
    15.700000000000001 by Float#to_s. (See:
http://redmine.ruby-lang.org/issues/4656)
    To avoid this issue, any Oracle number is converted to a float as
    ruby's String#to_f does.

    The behavior is customizable by OCI8.properties[:float_conversion_type].

      OCI8.properties[:float_conversion_type] = :oracle # => Use
OCINumberToReal()
      OCI8.properties[:float_conversion_type] = :ruby # => Use String#to_f

    The default value is :ruby.

  - OCI_SUCCESS_WITH_INFO handling is changed.

    Ruby-oci8 2.0 treats OCI_SUCCESS_WITH_INFO in OCI layer as an error
    and raise an exception OCISuccessWithInfo such as "ORA-24347: Warning of
    a NULL column in an aggregate function" and "ORA-28002: the password will
    expire within xx days."

    From 2.1.0, it is treated as a warning and the exception is set
    to OCI8#last_error.

  - OCI8#last_error

    The last error or warning associated with the session is set to
    OCI8#last_error. The usecase is to detect OCI_SUCCESS_WITH_INFO.
    It is reset by OCI8#exec and OCI8#parse.

  - Experimental support of character length semantics

    This is enabled when :char is set to OCI8.properties[:length_semantics].

  - OCI8.client_charset_name and OCI8#database_charset_name is added.

    They return Oracle charset name such as WE8ISO8859P15.

* Specification changes

  - The parent class OCINoData was changed from OCIException to OCIError.

* Fixed Issues

  - Fix a bug that an array is always bound as null.
    This bug was introduced in ruby-oci8 2.0.5.
    (reported by LeoŇ° Bitto)

  - Avoid a gcc internal compiler error when using ruby1.9.2-p290 on
    ubuntu 11.10 (64bit). (reported by Bob Saveland.)

  - Fix compilation problems on Solaris.
    (Reported by Sanjiv Patel.)

  - Fix compilation problems on Linux.
    (Reported by Edgars Beigarts.)

  - Connections are released by GC without explicit logoff.

  - Set ruby encoding CP950 for oracle characterset ZHT16MSWIN950 and
    CP951 for ZHT16HKSCS and ZHT16HKSCS31 when the ruby is 1.9.3.

  - Clear an executuing thread information in a connection when a SQL
    executions is canceled by Thread#kill or Timeout::timeout.
    (reported by Aaron Qian)

  - Fix some test cases for object type and TZ issues.
    (reported by Yasuo Honda)

  - Use Gem::Command.build_args to get arguments after '--'.
    (reported by jbirdjavi)