Skip to content

Bump Oracle to Free 23 and Instant Client to 23.26.1.0.0#239

Merged
yahonda merged 23 commits into
rsim:masterfrom
yahonda:bump_oracle_free_23
Apr 12, 2026
Merged

Bump Oracle to Free 23 and Instant Client to 23.26.1.0.0#239
yahonda merged 23 commits into
rsim:masterfrom
yahonda:bump_oracle_free_23

Conversation

@yahonda
Copy link
Copy Markdown
Collaborator

@yahonda yahonda commented Apr 10, 2026

Summary

Bump CI, database, and supported Ruby/Rails versions across the board, built around Oracle Database Free 23ai (23.26.1).

Oracle Database / Instant Client

  • Replace gvenzl/oracle-xe with gvenzl/oracle-free (Oracle Free is the successor to Oracle XE)
  • Upgrade Instant Client from 21.x to 23.26.1.0.0, installed from download.oracle.com zip archives (replaces the earlier RPM + alien install)
  • ORACLE_HOME / LD_LIBRARY_PATH now point at /opt/oracle/instantclient_23_26
  • DATABASE_NAME changed from XEPDB1 to FREEPDB1 (Oracle Free default PDB name)
  • JDBC driver bumped to version 233
  • runs-on switched from the deprecated ubuntu-20.04 to ubuntu-latest, with a libaio.so.1 → libaio.so.1t64 compat symlink for Ubuntu 24.04
  • Add a dedicated test_11g.yml workflow that keeps Oracle 11g XE coverage via Instant Client 21.15, and copy the 11g server's v14 timezone files into the Instant Client (via ORA_TZFILE) to avoid ORA-01805
  • Use sqlplus from PATH instead of ${ORACLE_HOME}/bin/sqlplus
  • Drop the hardcoded DATABASE_VERSION env var from all workflows; the database version spec now asserts the structural shape (an Array of four Integers) instead of comparing against a manually maintained version string

Oracle 23c source compatibility

  • Normalize the new BOOLEAN type reported by 23c in both ALL_ARGUMENTS and ALL_PLSQL_TYPE_ATTRS / ALL_PLSQL_COLL_TYPES / ALL_COLL_TYPES so parameter binding, overload resolution, and record / collection element handling continue to work. Reflects the ISO SQL standard-compliant BOOLEAN data type documented in the Oracle AI Database 26 New Features guide.
  • Update the ORA-00942 test regex: 23c now embeds the schema-qualified object name in the error message (see the ORA-00942 Oracle Error Help entry for 23ai).

Oracle 12c+ XMLType

Ruby / Rails matrix

  • Add Ruby 3.3, 3.4, and 4.0 to test.yml / test_11g.yml; drop 2.5–3.1 from those workflows (modern Rails requires Ruby >= 3.2)
  • Bump RuboCop workflow to Ruby 4.0
  • Bump activerecord and activerecord-oracle_enhanced-adapter to 8.0, register the adapter explicitly in specs, and fix the ActiveRecord 8.0 default_timezone API change
  • Add require "logger" before require "active_record" in spec/spec_helper.rb so the AR 6.0 / 6.1 rows can load ActiveSupport::LoggerThreadSafeLevel
  • Add gemfiles/Gemfile.activerecord-{5.0,5.1,5.2,6.0,6.1,7.0,7.1,7.2,8.0} and a dedicated test_gemfiles.yml workflow that exercises each against its minimum required CRuby (down to Ruby 2.4 for AR 5.0-5.2)
  • Lower .rubocop.yml TargetRubyVersion to 2.4 so lint matches the minimum Ruby actually covered by test_gemfiles.yml

Warning hygiene & lint

  • Enable Ruby warnings (RUBYOPT=-w) in CI
  • Fix frozen string literal warnings in lib/
  • Fix Ruby warnings in specs (ambiguous splat / regexp, ignored blocks)
  • Replace deprecated :mswin, :mingw platform selectors with :windows
  • Bump RuboCop to the latest and autocorrect all offenses

CI infrastructure & cleanup

  • Bump actions/checkout to v6
  • Remove .travis.yml and the .travis/ helper scripts (all coverage now lives in GitHub Actions)
  • Remove stale .codeclimate.yml entry from gemspec s.files (file was deleted in 18813c0)

Test plan

  • test.yml (Oracle Free 23 + modern Ruby) passes
  • test_11g.yml (Oracle 11g XE + Instant Client 21.15) passes
  • test_gemfiles.yml per-Rails matrix (AR 5.0 - 8.0) passes on every row
  • rubocop.yml passes
  • RSpec passes against Oracle 23c including the XMLType / BOOLEAN parameter, record, and collection cases

🤖 Generated with Claude Code

yahonda added a commit to yahonda/oracle-enhanced that referenced this pull request Apr 11, 2026
Both 11g workflows (test_11g.yml, test_11g_ojdbc11.yml) set
DATABASE_SERVER_AND_CLIENT_VERSION_DO_NOT_MATCH=true to skip tests that
failed because Oracle 11g XE ships timezone file DSTv14 while Instant
Client 21.15 embeds v35, producing ORA-01805 on DATE/TIMESTAMP fetches.
The same flag was later reused to skip two JDBC network-encryption
tests in connection_spec.rb because 11g XE lacks native network
encryption -- an unrelated limitation.

Adopt the approach from rsim/ruby-plsql#239: copy the v14 timezone
data files out of the running gvenzl/oracle-xe:11 container into the
Instant Client's oracore/zoneinfo directory and point the client at
them via ORA_TZFILE. With that in place the ORA-01805 error disappears,
and the opaque DATABASE_SERVER_AND_CLIENT_VERSION_DO_NOT_MATCH flag can
be removed everywhere.

The two network-encryption skips are rewired onto DATABASE_VERSION ==
\"11.2.0.2\", which is the honest condition -- the limitation is a
property of the 11g server, not of any server/client version mismatch.
Also drop the stale ORACLE_HOME == \"/usr/lib/oracle/21/client64\"
fallback in timestamp_spec.rb; current workflows use
/opt/oracle/instantclient_21_15, so it never matched.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
yahonda added a commit to yahonda/oracle-enhanced that referenced this pull request Apr 11, 2026
Both 11g workflows (test_11g.yml, test_11g_ojdbc11.yml) set
DATABASE_SERVER_AND_CLIENT_VERSION_DO_NOT_MATCH=true to skip tests that
failed because Oracle 11g XE ships timezone file DSTv14 while Instant
Client 21.15 embeds v35, producing ORA-01805 on DATE/TIMESTAMP fetches.
The same flag was later reused to skip two JDBC network-encryption
tests in connection_spec.rb because 11g XE lacks native network
encryption -- an unrelated limitation.

Adopt the approach from rsim/ruby-plsql#239: copy the v14 timezone
data files out of the running gvenzl/oracle-xe:11 container into the
Instant Client's oracore/zoneinfo directory and point the client at
them via ORA_TZFILE. With that in place the ORA-01805 error disappears,
and the opaque DATABASE_SERVER_AND_CLIENT_VERSION_DO_NOT_MATCH flag can
be removed everywhere.

The two network-encryption skips are rewired onto DATABASE_VERSION ==
'11.2.0.2', which is the honest condition -- the limitation is a
property of the 11g server, not of any server/client version mismatch.
Also drop the stale ORACLE_HOME == '/usr/lib/oracle/21/client64'
fallback in timestamp_spec.rb; current workflows use
/opt/oracle/instantclient_21_15, so it never matched.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
yahonda added a commit to yahonda/oracle-enhanced that referenced this pull request Apr 11, 2026
The previous commit set ORA_TZFILE to the absolute path
/opt/oracle/instantclient_21_15/oracore/zoneinfo/timezlrg_14.dat,
following an earlier revision of rsim/ruby-plsql#239. sqlplus then
failed with ORA-01804: failure to initialize timezone information at
the Create database user step.

The current head of rsim/ruby-plsql#239 sets ORA_TZFILE to just the
basename (timezlrg_14.dat), which Oracle Instant Client resolves
relative to \$ORACLE_HOME/oracore/zoneinfo/. That form works; align
both 11g workflows with it.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
yahonda added a commit to yahonda/oracle-enhanced that referenced this pull request Apr 11, 2026
Both 11g workflows (test_11g.yml, test_11g_ojdbc11.yml) set
DATABASE_SERVER_AND_CLIENT_VERSION_DO_NOT_MATCH=true to skip tests that
failed because Oracle 11g XE ships timezone file DSTv14 while Instant
Client 21.15 embeds v35, producing ORA-01805 on DATE/TIMESTAMP fetches.
The same flag was later reused to skip two JDBC network-encryption
tests in connection_spec.rb because 11g XE lacks native network
encryption -- an unrelated limitation.

Adopt the approach from rsim/ruby-plsql#239: copy the v14 timezone
data files out of the running gvenzl/oracle-xe:11 container into the
Instant Client's oracore/zoneinfo directory and point the client at
them via ORA_TZFILE. Set ORA_TZFILE to the basename (timezlrg_14.dat)
so Oracle Instant Client resolves it relative to
ORACLE_HOME/oracore/zoneinfo/; the absolute-path form produces
ORA-01804 in sqlplus. With that in place the ORA-01805 error
disappears and the opaque DATABASE_SERVER_AND_CLIENT_VERSION_DO_NOT_MATCH
flag can be removed everywhere.

The two network-encryption skips are rewired onto DATABASE_VERSION ==
'11.2.0.2', which is the honest condition -- the limitation is a
property of the 11g server, not of any server/client version mismatch.
Also drop the stale ORACLE_HOME == '/usr/lib/oracle/21/client64'
fallback in timestamp_spec.rb; current workflows use
/opt/oracle/instantclient_21_15, so it never matched.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
yahonda added a commit to yahonda/oracle-enhanced that referenced this pull request Apr 11, 2026
Both 11g workflows (test_11g.yml, test_11g_ojdbc11.yml) set
DATABASE_SERVER_AND_CLIENT_VERSION_DO_NOT_MATCH=true to skip tests that
failed because Oracle 11g XE ships timezone file DSTv14 while Instant
Client 21.15 embeds v35, producing ORA-01805 on DATE/TIMESTAMP fetches.
The same flag was later reused to skip two JDBC network-encryption
tests in connection_spec.rb because 11g XE lacks native network
encryption -- an unrelated limitation.

Adopt the approach from rsim/ruby-plsql#239: copy the v14 timezone
data files out of the running gvenzl/oracle-xe:11 container into the
Instant Client's oracore/zoneinfo directory and point the client at
them via ORA_TZFILE. Set ORA_TZFILE to the basename (timezlrg_14.dat)
so Oracle Instant Client resolves it relative to
ORACLE_HOME/oracore/zoneinfo/; the absolute-path form produces
ORA-01804 in sqlplus. With that in place the ORA-01805 error
disappears and the opaque DATABASE_SERVER_AND_CLIENT_VERSION_DO_NOT_MATCH
flag can be removed everywhere.

The two network-encryption skips are rewired onto DATABASE_VERSION ==
'11.2.0.2', which is the honest condition -- the limitation is a
property of the 11g server, not of any server/client version mismatch.
Also drop the stale ORACLE_HOME == '/usr/lib/oracle/21/client64'
fallback in timestamp_spec.rb; current workflows use
/opt/oracle/instantclient_21_15, so it never matched.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
yahonda added a commit to yahonda/oracle-enhanced that referenced this pull request Apr 11, 2026
Both 11g workflows (test_11g.yml, test_11g_ojdbc11.yml) set
DATABASE_SERVER_AND_CLIENT_VERSION_DO_NOT_MATCH=true to skip tests that
failed because Oracle 11g XE ships timezone file DSTv14 while Instant
Client 21.15 embeds v35, producing ORA-01805 on DATE/TIMESTAMP fetches.
The same flag was later reused to skip two JDBC network-encryption
tests in connection_spec.rb because 11g XE lacks native network
encryption -- an unrelated limitation.

Adopt the approach from rsim/ruby-plsql#239: copy the v14 timezone
data files out of the running gvenzl/oracle-xe:11 container into the
Instant Client's oracore/zoneinfo directory and point the client at
them via ORA_TZFILE. Set ORA_TZFILE to the basename (timezlrg_14.dat)
so Oracle Instant Client resolves it relative to
ORACLE_HOME/oracore/zoneinfo/; the absolute-path form produces
ORA-01804 in sqlplus. With that in place the ORA-01805 error
disappears and the opaque DATABASE_SERVER_AND_CLIENT_VERSION_DO_NOT_MATCH
flag can be removed everywhere.

The two network-encryption skips are rewired onto DATABASE_VERSION ==
'11.2.0.2', which is the honest condition -- the limitation is a
property of the 11g server, not of any server/client version mismatch.
Also drop the stale ORACLE_HOME == '/usr/lib/oracle/21/client64'
fallback in timestamp_spec.rb; current workflows use
/opt/oracle/instantclient_21_15, so it never matched.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@yahonda yahonda force-pushed the bump_oracle_free_23 branch 2 times, most recently from c5278c7 to 45321a9 Compare April 11, 2026 07:27
@yahonda yahonda requested a review from Copilot April 11, 2026 07:51
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates the project’s CI and runtime/test configuration to run against Oracle Free 23 (and newer Oracle client/JDBC bits), while adapting ruby-plsql internals/specs for Oracle 23c metadata/type-name differences and newer Ruby/ActiveRecord tooling.

Changes:

  • Migrate CI database service from gvenzl/oracle-xe to gvenzl/oracle-free and update Oracle Instant Client/JDBC driver downloads and related env vars.
  • Raise the supported Ruby/tooling baseline (Ruby >= 3.2, ActiveRecord/adapter ~> 8.0, updated RuboCop config) and adjust specs accordingly.
  • Update ruby-plsql type handling for Oracle 23c (BOOLEAN and XMLTYPE/OPAQUE XMLTYPE reporting) and minor internal string-construction tweaks.

Reviewed changes

Copilot reviewed 20 out of 28 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
spec/spec_helper.rb Explicitly loads/registers the oracle_enhanced AR adapter for newer ActiveRecord versions.
spec/plsql/view_spec.rb Updates specs to match current API iteration semantics and argument splat style.
spec/plsql/table_spec.rb Updates specs to match current API iteration semantics and argument splat style.
spec/plsql/schema_spec.rb Aligns timezone expectation with newer ActiveRecord API surface.
spec/plsql/procedure_spec.rb Removes Oracle-version skip around XMLTYPE tests; makes cleanup more forgiving; updates splat style.
spec/plsql/connection_spec.rb Relaxes ORA-00942 message matching for Oracle 23c error text changes.
ruby-plsql.gemspec Declares Ruby >= 3.2 requirement.
lib/plsql/view.rb Adjusts :nodoc: comment formatting.
lib/plsql/version.rb Adjusts :nodoc: comment formatting.
lib/plsql/variable.rb Adjusts :nodoc: comment formatting.
lib/plsql/type.rb Adjusts :nodoc: comment formatting.
lib/plsql/table.rb Adjusts :nodoc: comment formatting; uses mutable string literals in SQL assembly.
lib/plsql/sequence.rb Adjusts :nodoc: comment formatting.
lib/plsql/schema.rb Updates default timezone logic to align with newer ActiveRecord API.
lib/plsql/procedure.rb Normalizes Oracle 23c BOOLEAN metadata and related composite-type field handling.
lib/plsql/procedure_call.rb Extends XMLTYPE matching/handling for OPAQUE/XMLTYPE; switches some SQL builders to mutable strings.
lib/plsql/package.rb Ensures mutable method-name string prior to in-place modifications.
lib/plsql/oci_connection.rb Adds OPAQUE/XMLTYPE handling in OCI type mapping.
lib/plsql/jdbc_connection.rb Adjusts :nodoc: comment formatting.
lib/plsql/helpers.rb Adjusts :nodoc: comment formatting.
lib/plsql/connection.rb Adjusts :nodoc: comment formatting.
Gemfile Updates dev/test dependencies (ActiveRecord/adapter), unpins RuboCop, modernizes platform list.
ci/setup_accounts.sh Switches sqlplus invocation to rely on PATH instead of ${ORACLE_HOME}/bin.
ci/network/admin/tnsnames.ora Updates TNS aliases for Oracle Free default PDB/service names and adds XE.
.rubocop.yml Updates target Ruby version and cop configuration for newer RuboCop.
.github/workflows/test.yml Migrates CI to Oracle Free + Instant Client 23.26.1.0.0 + JDBC 233; updates Ruby matrix and runner; adds concurrency.
.github/workflows/test_11g.yml Adds separate workflow for Oracle 11g XE testing using Instant Client 21.15 and ORA_TZFILE workaround.
.github/workflows/rubocop.yml Updates RuboCop workflow runner/tooling and Oracle client setup; adds concurrency.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread .github/workflows/test.yml
Comment thread .github/workflows/test.yml
Comment thread .github/workflows/test_11g.yml
Comment thread .github/workflows/rubocop.yml
Comment thread ci/setup_accounts.sh
set -ev

${ORACLE_HOME}/bin/sqlplus system/${DATABASE_SYS_PASSWORD}@${DATABASE_NAME} <<SQL
sqlplus system/${DATABASE_SYS_PASSWORD}@${DATABASE_NAME} <<SQL
Comment thread Gemfile
Comment thread .github/workflows/test.yml
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR modernizes the project’s Oracle CI/runtime setup to Oracle Free 23 + Instant Client 23.26, and updates the code/tests to accommodate Oracle 23c metadata/type changes and newer ActiveRecord/Ruby tooling.

Changes:

  • Upgrade CI database image to gvenzl/oracle-free and align TNS/service names (FREEPDB1, XE) plus client/JDBC downloads for Oracle 23.
  • Update library behavior for Oracle 23c type metadata differences (e.g., BOOLEAN / XMLTYPE / OPAQUE XMLTYPE) and adjust tests accordingly.
  • Move tooling forward (Ruby/RuboCop/ActiveRecord gemfiles, GitHub Actions workflows; remove legacy Travis config).

Reviewed changes

Copilot reviewed 35 out of 43 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
spec/spec_helper.rb Ensures oracle_enhanced adapter is explicitly required/registered for ActiveRecord runs.
spec/plsql/view_spec.rb Fixes iteration/tests to actually execute expectations and updates splat call style.
spec/plsql/table_spec.rb Same as view specs: correct iteration and splat call style.
spec/plsql/schema_spec.rb Aligns timezone expectation/config with newer ActiveRecord API and updates raise_error matcher style.
spec/plsql/procedure_spec.rb Adjusts XMLTYPE-related setup/teardown and updates splat usage.
spec/plsql/connection_spec.rb Relaxes ORA-00942 message matching for Oracle 23c wording changes.
ruby-plsql.gemspec Sets Ruby requirement to >= 3.2 and removes Travis files from packaged file list.
lib/plsql/view.rb Updates :nodoc: comment formatting.
lib/plsql/version.rb Updates :nodoc: comment formatting.
lib/plsql/variable.rb Updates :nodoc: comment formatting.
lib/plsql/type.rb Updates :nodoc: comment formatting.
lib/plsql/table.rb Uses mutable string literals (+"") to avoid frozen-string issues; updates :nodoc: comment formatting.
lib/plsql/sequence.rb Updates :nodoc: comment formatting.
lib/plsql/schema.rb Uses ActiveRecord.default_timezone for newer AR, and uses mutable string literals.
lib/plsql/procedure.rb Normalizes Oracle 23c BOOLEAN metadata to existing internal PL/SQL BOOLEAN handling; uses mutable strings.
lib/plsql/procedure_call.rb Adds XMLTYPE opaque handling, expands matching types, and uses mutable string literals for SQL construction.
lib/plsql/package.rb Uses mutable string for method name manipulation; updates :nodoc: formatting.
lib/plsql/oci_connection.rb Treats OPAQUE/XMLTYPE similarly to XMLTYPE/OBJECT handling.
lib/plsql/jdbc_connection.rb Updates :nodoc: comment formatting.
lib/plsql/helpers.rb Updates :nodoc: comment formatting.
lib/plsql/connection.rb Updates :nodoc: comment formatting.
gemfiles/Gemfile.activerecord-main Updates Windows platform selector syntax.
gemfiles/Gemfile.activerecord-8.0 Adds AR 8.0 appraisal gemfile.
gemfiles/Gemfile.activerecord-7.2 Adds AR 7.2 appraisal gemfile.
gemfiles/Gemfile.activerecord-7.1 Adds AR 7.1 appraisal gemfile.
gemfiles/Gemfile.activerecord-7.0 Updates Windows platform selector syntax.
gemfiles/Gemfile.activerecord-6.1 Fixes adapter version spacing and updates Windows platform selector syntax.
gemfiles/Gemfile.activerecord-6.0 Moves from rc1 constraints to stable 6.0 constraints; updates Windows platform selector syntax.
gemfiles/Gemfile.activerecord-5.2 Moves from beta constraints to stable 5.2 constraints; updates Windows platform selector syntax.
gemfiles/Gemfile.activerecord-5.1 Updates Windows platform selector syntax.
gemfiles/Gemfile.activerecord-5.0 Updates Windows platform selector syntax.
Gemfile Moves default dev/test stack to ActiveRecord 8 + oracle_enhanced 8, and unpins RuboCop.
ci/setup_accounts.sh Switches to using sqlplus from PATH for Oracle Free/Instant Client-based CI.
ci/network/admin/tnsnames.ora Updates service alias to FREEPDB1 and adds XE alias.
.travis/setup_accounts.sh Removes legacy Travis CI Oracle setup script.
.travis/oracle/install.sh Removes legacy Travis CI Oracle installation script.
.travis/oracle/download.sh Removes legacy Travis CI Oracle download script.
.travis.yml Removes legacy Travis CI configuration.
.rubocop.yml Updates RuboCop target Ruby to 3.2 and adjusts cop configuration defaults.
.github/workflows/test.yml Updates main CI to Oracle Free 23 + Instant Client 23.26 + JDBC 233, new Ruby matrix, and Ubuntu runner.
.github/workflows/test_gemfiles.yml Adds CI to run against multiple appraisal gemfiles.
.github/workflows/test_11g.yml Adds CI lane for Oracle XE 11g with timezone file compatibility handling.
.github/workflows/rubocop.yml Updates RuboCop workflow to newer Ruby + Instant Client 23.26 and adds concurrency controls.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread .github/workflows/test_gemfiles.yml
Comment thread .github/workflows/test.yml
Comment thread ci/setup_accounts.sh
Comment thread spec/plsql/procedure_spec.rb
Comment thread ruby-plsql.gemspec
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the project’s CI/runtime Oracle dependencies to Oracle Free 23c + Instant Client 23.26.1.0.0 and adjusts Ruby/PLSQL integration to account for Oracle 23c metadata differences, while modernizing CI (GitHub Actions, Ruby matrices, and gemfiles).

Changes:

  • Switch CI database service from gvenzl/oracle-xe to gvenzl/oracle-free, update PDB/service naming, and bump Instant Client/JDBC driver versions.
  • Update PLSQL internals for Oracle 23c type reporting changes (notably BOOLEAN and XMLTYPE reported as OPAQUE/XMLTYPE).
  • Modernize/expand CI and dependency matrices (new ActiveRecord gemfiles; update RuboCop and test workflows).

Reviewed changes

Copilot reviewed 35 out of 43 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
spec/spec_helper.rb Loads/logger + registers oracle enhanced adapter for newer ActiveRecord adapter behavior.
spec/plsql/view_spec.rb Fixes test iteration and argument splat style to reliably execute expectations.
spec/plsql/table_spec.rb Fixes test iteration and argument splat style to reliably execute expectations.
spec/plsql/schema_spec.rb Adjusts timezone defaulting expectations for newer ActiveRecord APIs; regex style cleanup.
spec/plsql/procedure_spec.rb Updates XMLTYPE cleanup behavior; argument splat style update.
spec/plsql/connection_spec.rb Makes ORA-00942 assertion resilient to Oracle 23c error-message format changes.
ruby-plsql.gemspec Removes legacy Travis-related files from packaged file list.
lib/plsql/schema.rb Updates default timezone resolution for ActiveRecord-backed connections.
lib/plsql/procedure.rb Normalizes Oracle 23c BOOLEAN type reporting to existing PL/SQL BOOLEAN handling.
lib/plsql/procedure_call.rb Adds support for OPAQUE/XMLTYPE and avoids frozen-string mutation issues.
lib/plsql/oci_connection.rb Treats OPAQUE/XMLTYPE as an object-like type for OCI mapping.
lib/plsql/table.rb Avoids frozen string literal mutation by using mutable string literals in SQL construction.
lib/plsql/package.rb Avoids frozen-string mutation when mutating method names (chop!).
lib/plsql/type.rb Comment formatting updates and minor string mutability adjustments.
lib/plsql/variable.rb Comment formatting updates.
lib/plsql/view.rb Comment formatting updates.
lib/plsql/version.rb Comment formatting updates.
lib/plsql/sequence.rb Comment formatting updates.
lib/plsql/helpers.rb Comment formatting updates.
lib/plsql/connection.rb Comment formatting updates.
Gemfile Updates default dev/test dependency baseline to ActiveRecord 8; unpins RuboCop; updates Windows platform selector.
gemfiles/Gemfile.activerecord-main Updates Windows platform selector.
gemfiles/Gemfile.activerecord-8.0 Adds AR 8.0 matrix gemfile.
gemfiles/Gemfile.activerecord-7.2 Adds AR 7.2 matrix gemfile.
gemfiles/Gemfile.activerecord-7.1 Adds AR 7.1 matrix gemfile.
gemfiles/Gemfile.activerecord-7.0 Updates Windows platform selector.
gemfiles/Gemfile.activerecord-6.1 Fixes adapter version formatting + updates Windows platform selector.
gemfiles/Gemfile.activerecord-6.0 Switches from rc1 to stable 6.0 + updates Windows platform selector.
gemfiles/Gemfile.activerecord-5.2 Switches from beta to stable 5.2 + updates Windows platform selector.
gemfiles/Gemfile.activerecord-5.1 Updates Windows platform selector.
gemfiles/Gemfile.activerecord-5.0 Updates Windows platform selector.
ci/setup_accounts.sh Uses sqlplus from PATH (Instant Client layout) rather than $ORACLE_HOME/bin/sqlplus.
ci/network/admin/tnsnames.ora Updates service names for Oracle Free (FREEPDB1) and adds XE alias for 11g workflow.
.travis.yml Removes legacy Travis CI configuration.
.travis/setup_accounts.sh Removes legacy Travis helper script.
.travis/oracle/install.sh Removes legacy Travis Oracle installation script.
.travis/oracle/download.sh Removes legacy Travis Oracle download script.
.rubocop.yml Updates TargetRubyVersion and enables/disables cops for newer RuboCop behavior.
.github/workflows/test.yml Updates CI to Oracle Free 23c + Instant Client 23.26 + JDBC 233; expands Ruby matrix; adds concurrency control.
.github/workflows/test_gemfiles.yml Adds gemfile matrix testing across ActiveRecord versions against Oracle Free 23c.
.github/workflows/test_11g.yml Adds Oracle XE 11g workflow with Instant Client 21.15 and timezone file compatibility handling.
.github/workflows/rubocop.yml Updates RuboCop workflow for newer Ruby + Instant Client setup; adds concurrency control.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread lib/plsql/schema.rb Outdated
Comment thread .rubocop.yml Outdated
Comment thread Gemfile
Comment thread .github/workflows/test.yml
Comment thread ruby-plsql.gemspec Outdated
@yahonda yahonda force-pushed the bump_oracle_free_23 branch 3 times, most recently from 87e403d to 6e032e6 Compare April 12, 2026 01:21
yahonda added a commit to yahonda/ruby-plsql that referenced this pull request Apr 12, 2026
The per-Rails gemfile matrix in .github/workflows/test_gemfiles.yml
runs specs on Ruby versions down to 2.4 (for the AR 5.0-5.2 jobs),
but .rubocop.yml had TargetRubyVersion set to 3.2. With that higher
target, RuboCop would have permitted Ruby 3.2+ syntax / stdlib usage
that would break the older runtimes actually covered by CI.

Lower TargetRubyVersion to 2.4 so lint matches the minimum supported
Ruby.

Addresses review feedback from
rsim#239 (comment)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
yahonda added a commit to yahonda/ruby-plsql that referenced this pull request Apr 12, 2026
The per-Rails gemfile matrix in .github/workflows/test_gemfiles.yml
runs specs on Ruby versions down to 2.4 (for the AR 5.0-5.2 jobs),
but .rubocop.yml had TargetRubyVersion set to 3.2. With that higher
target, RuboCop would have permitted Ruby 3.2+ syntax / stdlib usage
that would break the older runtimes actually covered by CI.

Lower TargetRubyVersion to 2.4 so lint matches the minimum supported
Ruby.

Addresses review feedback from
rsim#239 (comment)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@yahonda yahonda force-pushed the bump_oracle_free_23 branch from 2362d0e to c6709e4 Compare April 12, 2026 01:36
yahonda added a commit to yahonda/ruby-plsql that referenced this pull request Apr 12, 2026
The per-Rails gemfile matrix in .github/workflows/test_gemfiles.yml
runs specs on Ruby versions down to 2.4 (for the AR 5.0-5.2 jobs),
but .rubocop.yml had TargetRubyVersion set to 3.2. With that higher
target, RuboCop would have permitted Ruby 3.2+ syntax / stdlib usage
that would break the older runtimes actually covered by CI.

Lower TargetRubyVersion to 2.4 so lint matches the minimum supported
Ruby.

Addresses review feedback from
rsim#239 (comment)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@yahonda yahonda force-pushed the bump_oracle_free_23 branch from c6709e4 to 2301959 Compare April 12, 2026 01:47
yahonda added a commit to yahonda/ruby-plsql that referenced this pull request Apr 12, 2026
The per-Rails gemfile matrix in .github/workflows/test_gemfiles.yml
runs specs on Ruby versions down to 2.4 (for the AR 5.0-5.2 jobs),
but .rubocop.yml had TargetRubyVersion set to 3.2. With that higher
target, RuboCop would have permitted Ruby 3.2+ syntax / stdlib usage
that would break the older runtimes actually covered by CI.

Lower TargetRubyVersion to 2.4 so lint matches the minimum supported
Ruby.

Addresses review feedback from
rsim#239 (comment)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@yahonda yahonda force-pushed the bump_oracle_free_23 branch from 2301959 to 9f9f101 Compare April 12, 2026 01:53
yahonda added a commit to yahonda/ruby-plsql that referenced this pull request Apr 12, 2026
The per-Rails gemfile matrix in .github/workflows/test_gemfiles.yml
runs specs on Ruby versions down to 2.4 (for the AR 5.0-5.2 jobs),
but .rubocop.yml had TargetRubyVersion set to 3.2. With that higher
target, RuboCop would have permitted Ruby 3.2+ syntax / stdlib usage
that would break the older runtimes actually covered by CI.

Lower TargetRubyVersion to 2.4 so lint matches the minimum supported
Ruby.

Addresses review feedback from
rsim#239 (comment)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@yahonda yahonda force-pushed the bump_oracle_free_23 branch from 9f9f101 to af21e1e Compare April 12, 2026 02:02
@yahonda yahonda force-pushed the bump_oracle_free_23 branch 2 times, most recently from 964a4e1 to ad5181c Compare April 12, 2026 10:48
yahonda and others added 23 commits April 12, 2026 19:49
- Replace gvenzl/oracle-xe with gvenzl/oracle-free (Oracle Free is the
  successor to Oracle XE)
- Upgrade Instant Client from 21.x to 23.26.1.0.0, installed from
  download.oracle.com zip archives
- Update ORACLE_HOME and LD_LIBRARY_PATH to
  /opt/oracle/instantclient_23_26
- Add ORACLE_HOME/LD_LIBRARY_PATH to the RuboCop workflow for the
  Oracle 23 client
- Change DATABASE_NAME from XEPDB1 to FREEPDB1
- Update JDBC driver to version 233
- Switch runs-on from deprecated ubuntu-20.04 to ubuntu-latest
- Create libaio.so.1 compat symlink since Ubuntu 24.04 only ships
  libaio.so.1t64 but Oracle 23 Instant Client links against libaio.so.1
- Drop hardcoded DATABASE_VERSION env var; the database version spec
  now asserts the structural shape (Array of four Integers) instead of
  comparing against a manually maintained version string

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Oracle 23c reports BOOLEAN parameters as "BOOLEAN" in ALL_ARGUMENTS
instead of "PL/SQL BOOLEAN". This reflects Oracle AI Database's new
ISO SQL standard-compliant BOOLEAN data type, which stores TRUE and
FALSE values in tables and allows BOOLEAN expressions in SQL
statements. See "BOOLEAN Data Type" in the Oracle AI Database 26
New Features documentation:
https://docs.oracle.com/en/database/oracle/oracle-database/26/nfcoa/appdev_sql.html

Normalize the data_type when reading argument metadata so all
downstream boolean handling (parameter binding, overload resolution)
continues to work. Oracle 23c also reports BOOLEAN as "BOOLEAN" in
ALL_PLSQL_TYPE_ATTRS (record fields) and ALL_PLSQL_COLL_TYPES /
ALL_COLL_TYPES (collection elements), so normalize the same way in
get_field_definitions and get_element_definition.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Oracle 23c now embeds the schema-qualified object name in the
ORA-00942 error message ("table or view "SCHEMA"."TABLE" does not
exist") instead of the legacy "table or view does not exist" text.
Update the test regex to match both formats. The new template is
documented on the Oracle Error Help portal entry for the 23ai variant:
https://docs.oracle.com/en/error-help/db/ora-00942/?r=23ai

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Uses gvenzl/oracle-xe:11 container with Oracle Instant Client 21.15
(the latest client that supports Oracle 11g).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Drop Ruby 3.1, 3.0, 2.7, 2.6, and 2.5 from test.yml and test_11g.yml.
Older Ruby versions are exercised by the per-Rails gemfile matrix in
test_gemfiles.yml; the modern test.yml / test_11g.yml workflows only
need to run against Ruby that is compatible with the latest Rails and
oracle_enhanced adapter.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove version pin on rubocop gem. Update .rubocop.yml for renamed
cops (Layout/Tab -> Layout/IndentationStyle) and lower
TargetRubyVersion to 2.4 to match the minimum Ruby exercised by
the per-Rails gemfile matrix in test_gemfiles.yml.
Autocorrect all 66 Layout/LeadingCommentSpace and
Layout/SpaceAroundOperators offenses.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The zip-based Instant Client (test_11g) installs sqlplus directly in
the install directory without a bin/ subdirectory. Use sqlplus from
PATH which works for both RPM and zip installs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ActiveRecord 8.0 requires adapters to be explicitly registered.
The oracle_enhanced adapter only auto-registers via Railtie when
Rails is present. Register it manually in spec_helper.rb.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ActiveRecord 8.0 removed ActiveRecord::Base.default_timezone= in
favor of ActiveRecord.default_timezone. Update both the library code
and spec.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ActiveRecord 6.0 / 6.1 reference the top-level Logger constant at
load time via ActiveSupport::LoggerThreadSafeLevel. If logger is not
required before active_support is loaded, requiring active_record
fails with:

  NameError: uninitialized constant ActiveSupport::LoggerThreadSafeLevel::Logger

Explicitly require "logger" first so the older Rails rows in the
per-Rails gemfile matrix (AR 6.0 / 6.1) can load the specs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Use +\"\" for string literals that are mutated with << operator.
This prepares for Ruby's future frozen string literal default.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Wrap splat arguments in parentheses (ambiguous `*`)
- Wrap regexp in parentheses for raise_error (ambiguous `/`)
- Use .all.each instead of .all with block (block was ignored)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Oracle 12c+ reports XMLType parameters with data_type OPAQUE/XMLTYPE
in ALL_ARGUMENTS (changed from UNDEFINED in Oracle 11g). Handle this
new data_type in add_argument, add_return_variable, return_variable_value,
MATCHING_TYPES, and plsql_to_ruby_data_type.

This fixes the XMLType tests that were skipped since issue rsim#114.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Approach:
- Oracle 11g XE uses timezone v14; Instant Client 21.15 uses v35
- 11g's DBMS_DST doesn't support upgrading to v35 (GET_LATEST_TIMEZONE_VERSION
  was added in 12c), so we cannot upgrade the server
- Instead, extract v14 files from the 11g container and point the client
  at them via ORA_TZFILE — client stays at 21.15, just uses v14 tz data
- Use bare filename (not absolute path) for ORA_TZFILE since the file
  lives in oracore/zoneinfo/ under the Instant Client directory

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add gemfiles for ActiveRecord 7.1, 7.2, and 8.0, and a new
test_gemfiles workflow that runs the spec suite once per gemfile
against the minimum CRuby version each Rails release supports. This
gives the repo per-Rails CI coverage that previously only existed in
the Travis config. Existing gemfiles are updated to drop beta/rc
adapter pins and to use the :windows platform alias.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
All Travis coverage (Rails matrix, Oracle 11g setup, account
provisioning) is now handled by GitHub Actions: test_gemfiles.yml
provides the Rails matrix, and test.yml / test_11g.yml cover modern
Ruby against the root Gemfile. Drop .travis.yml, the .travis/ helper
scripts, and the corresponding s.files entries in the gemspec.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The file itself was removed in 18813c0 but was left in
the gemspec file list.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@yahonda yahonda force-pushed the bump_oracle_free_23 branch from ad5181c to f4fe2b3 Compare April 12, 2026 10:49
@yahonda yahonda merged commit 464c728 into rsim:master Apr 12, 2026
26 checks passed
@yahonda yahonda deleted the bump_oracle_free_23 branch April 29, 2026 23:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants