Bump Oracle to Free 23 and Instant Client to 23.26.1.0.0#239
Conversation
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>
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>
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>
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>
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>
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>
c5278c7 to
45321a9
Compare
There was a problem hiding this comment.
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-xetogvenzl/oracle-freeand 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.
| set -ev | ||
|
|
||
| ${ORACLE_HOME}/bin/sqlplus system/${DATABASE_SYS_PASSWORD}@${DATABASE_NAME} <<SQL | ||
| sqlplus system/${DATABASE_SYS_PASSWORD}@${DATABASE_NAME} <<SQL |
There was a problem hiding this comment.
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-freeand 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.
There was a problem hiding this comment.
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-xetogvenzl/oracle-free, update PDB/service naming, and bump Instant Client/JDBC driver versions. - Update PLSQL internals for Oracle 23c type reporting changes (notably
BOOLEANand XMLTYPE reported asOPAQUE/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.
87e403d to
6e032e6
Compare
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>
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>
2362d0e to
c6709e4
Compare
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>
c6709e4 to
2301959
Compare
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>
2301959 to
9f9f101
Compare
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>
9f9f101 to
af21e1e
Compare
964a4e1 to
ad5181c
Compare
- 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>
ad5181c to
f4fe2b3
Compare
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
gvenzl/oracle-xewithgvenzl/oracle-free(Oracle Free is the successor to Oracle XE)download.oracle.comzip archives (replaces the earlier RPM +alieninstall)ORACLE_HOME/LD_LIBRARY_PATHnow point at/opt/oracle/instantclient_23_26DATABASE_NAMEchanged fromXEPDB1toFREEPDB1(Oracle Free default PDB name)runs-onswitched from the deprecatedubuntu-20.04toubuntu-latest, with alibaio.so.1 → libaio.so.1t64compat symlink for Ubuntu 24.04test_11g.ymlworkflow that keeps Oracle 11g XE coverage via Instant Client 21.15, and copy the 11g server's v14 timezone files into the Instant Client (viaORA_TZFILE) to avoid ORA-01805sqlplusfromPATHinstead of${ORACLE_HOME}/bin/sqlplusDATABASE_VERSIONenv 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 stringOracle 23c source compatibility
ALL_ARGUMENTSandALL_PLSQL_TYPE_ATTRS/ALL_PLSQL_COLL_TYPES/ALL_COLL_TYPESso 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.Oracle 12c+ XMLType
OPAQUE/XMLTYPEdata_typereported inALL_ARGUMENTSon 12c+ (previouslyUNDEFINEDon 11g). Removes the 12c+ skip added for XMLType specs failure due to PLS-00306 #114 and re-enables XMLType specs on 23c.Ruby / Rails matrix
test.yml/test_11g.yml; drop 2.5–3.1 from those workflows (modern Rails requires Ruby >= 3.2)activerecordandactiverecord-oracle_enhanced-adapterto 8.0, register the adapter explicitly in specs, and fix the ActiveRecord 8.0default_timezoneAPI changerequire "logger"beforerequire "active_record"inspec/spec_helper.rbso the AR 6.0 / 6.1 rows can loadActiveSupport::LoggerThreadSafeLevelgemfiles/Gemfile.activerecord-{5.0,5.1,5.2,6.0,6.1,7.0,7.1,7.2,8.0}and a dedicatedtest_gemfiles.ymlworkflow that exercises each against its minimum required CRuby (down to Ruby 2.4 for AR 5.0-5.2).rubocop.ymlTargetRubyVersionto 2.4 so lint matches the minimum Ruby actually covered bytest_gemfiles.ymlWarning hygiene & lint
RUBYOPT=-w) in CIlib/:mswin, :mingwplatform selectors with:windowsCI infrastructure & cleanup
actions/checkoutto v6.travis.ymland the.travis/helper scripts (all coverage now lives in GitHub Actions).codeclimate.ymlentry from gemspecs.files(file was deleted in 18813c0)Test plan
test.yml(Oracle Free 23 + modern Ruby) passestest_11g.yml(Oracle 11g XE + Instant Client 21.15) passestest_gemfiles.ymlper-Rails matrix (AR 5.0 - 8.0) passes on every rowrubocop.ymlpasses🤖 Generated with Claude Code