From 3a99d4a96afad308c988820a7d7621e6746f8aff Mon Sep 17 00:00:00 2001 From: Yasuo Honda Date: Mon, 31 Jul 2023 20:10:40 +0900 Subject: [PATCH 1/3] Make ActiveRecord's quoted name caches thread-safe on JRuby/TruffleRuby Refer to rails/rails#48773 ```ruby $ bundle exec rspec ./spec/active_record/connection_adapters/oracle_enhanced/connection_spec.rb:234 # OracleEnhancedConnection default_timezone should respect default_timezone = :utc than time_zone setting ==> Loading config from ENV or use default ==> Running specs with ruby version 3.2.2 ==> Effective ActiveRecord version 7.0.6 Run options: include {:locations=>{"./spec/active_record/connection_adapters/oracle_enhanced/connection_spec.rb"=>[234]}} F An error occurred in an `after(:context)` hook. Failure/Error: Object.send(:remove_const, "Post") NameError: constant Object::Post not defined Failures: 1) OracleEnhancedConnection default_timezone should respect default_timezone = :utc than time_zone setting Failure/Error: self.class.quoted_table_names[name] ||= [name.split(".").map { |n| quote_column_name(n) }].join(".") NoMethodError: undefined method `quoted_table_names' for ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter:Class # ./lib/active_record/connection_adapters/oracle_enhanced/quoting.rb:70:in `quote_table_name' # ./lib/active_record/connection_adapters/oracle_enhanced/schema_statements.rb:269:in `drop_table' # ./lib/active_record/connection_adapters/oracle_enhanced/schema_statements.rb:233:in `create_table' # /home/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/migration.rb:932:in `block in method_missing' # /home/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/migration.rb:900:in `block in say_with_time' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/3.2.0/benchmark.rb:296:in `measure' # /home/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/migration.rb:900:in `say_with_time' # /home/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/migration.rb:921:in `method_missing' # ./spec/active_record/connection_adapters/oracle_enhanced/connection_spec.rb:221:in `block (4 levels) in ' # ./spec/spec_helper.rb:114:in `instance_eval' # ./spec/spec_helper.rb:114:in `block (2 levels) in schema_define' # /home/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/migration.rb:909:in `suppress_messages' # ./spec/spec_helper.rb:113:in `block in schema_define' # /home/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/schema.rb:55:in `instance_eval' # /home/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/schema.rb:55:in `define' # /home/yahonda/src/github.com/rails/rails/activerecord/lib/active_record/schema.rb:50:in `define' # ./spec/spec_helper.rb:112:in `schema_define' # ./spec/active_record/connection_adapters/oracle_enhanced/connection_spec.rb:220:in `block (3 levels) in ' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:365:in `instance_exec' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:365:in `run' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:529:in `block in run_owned_hooks_for' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:528:in `each' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:528:in `run_owned_hooks_for' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:480:in `run' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rspec-core-3.12.2/lib/rspec/core/example_group.rb:553:in `block in run_before_context_hooks' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rspec-core-3.12.2/lib/rspec/core/memoized_helpers.rb:208:in `block in isolate_for_context_hook' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rspec-core-3.12.2/lib/rspec/core/memoized_helpers.rb:204:in `instance_exec' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rspec-core-3.12.2/lib/rspec/core/memoized_helpers.rb:204:in `isolate_for_context_hook' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rspec-core-3.12.2/lib/rspec/core/example_group.rb:552:in `run_before_context_hooks' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rspec-core-3.12.2/lib/rspec/core/example_group.rb:606:in `run' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rspec-core-3.12.2/lib/rspec/core/example_group.rb:608:in `block in run' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rspec-core-3.12.2/lib/rspec/core/example_group.rb:608:in `map' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rspec-core-3.12.2/lib/rspec/core/example_group.rb:608:in `run' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:121:in `block (3 levels) in run_specs' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:121:in `map' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:121:in `block (2 levels) in run_specs' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rspec-core-3.12.2/lib/rspec/core/configuration.rb:2070:in `with_suite_hooks' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:116:in `block in run_specs' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rspec-core-3.12.2/lib/rspec/core/reporter.rb:74:in `report' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:115:in `run_specs' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:89:in `run' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:71:in `run' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:45:in `invoke' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rspec-core-3.12.2/exe/rspec:4:in `' # /home/yahonda/.rbenv/versions/3.2.2/bin/rspec:25:in `load' # /home/yahonda/.rbenv/versions/3.2.2/bin/rspec:25:in `' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.4.14/lib/bundler/cli/exec.rb:58:in `load' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.4.14/lib/bundler/cli/exec.rb:58:in `kernel_load' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.4.14/lib/bundler/cli/exec.rb:23:in `run' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.4.14/lib/bundler/cli.rb:492:in `exec' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.4.14/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.4.14/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.4.14/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.4.14/lib/bundler/cli.rb:34:in `dispatch' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.4.14/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.4.14/lib/bundler/cli.rb:28:in `start' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.4.14/exe/bundle:37:in `block in ' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.4.14/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors' # /home/yahonda/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/bundler-2.4.14/exe/bundle:29:in `' # /home/yahonda/.rbenv/versions/3.2.2/bin/bundle:25:in `load' # /home/yahonda/.rbenv/versions/3.2.2/bin/bundle:25:in `
' Finished in 0.38168 seconds (files took 0.42519 seconds to load) 1 example, 1 failure, 1 error occurred outside of examples Failed examples: rspec ./spec/active_record/connection_adapters/oracle_enhanced/connection_spec.rb:234 # OracleEnhancedConnection default_timezone should respect default_timezone = :utc than time_zone setting $ ``` --- .../connection_adapters/oracle_enhanced/quoting.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/active_record/connection_adapters/oracle_enhanced/quoting.rb b/lib/active_record/connection_adapters/oracle_enhanced/quoting.rb index 66175fcb2..5059e604e 100644 --- a/lib/active_record/connection_adapters/oracle_enhanced/quoting.rb +++ b/lib/active_record/connection_adapters/oracle_enhanced/quoting.rb @@ -7,10 +7,12 @@ module Quoting # QUOTING ================================================== # # see: abstract/quoting.rb + QUOTED_COLUMN_NAMES = Concurrent::Map.new # :nodoc: + QUOTED_TABLE_NAMES = Concurrent::Map.new # :nodoc: def quote_column_name(name) # :nodoc: name = name.to_s - self.class.quoted_column_names[name] ||= if /\A[a-z][a-z_0-9$#]*\Z/.match?(name) + QUOTED_COLUMN_NAMES[name] ||= if /\A[a-z][a-z_0-9$#]*\Z/.match?(name) "\"#{name.upcase}\"" else # remove double quotes which cannot be used inside quoted identifier @@ -67,7 +69,7 @@ def self.mixed_case?(name) def quote_table_name(name) # :nodoc: name, _link = name.to_s.split("@") - self.class.quoted_table_names[name] ||= [name.split(".").map { |n| quote_column_name(n) }].join(".") + QUOTED_TABLE_NAMES[name] ||= [name.split(".").map { |n| quote_column_name(n) }].join(".") end def quote_string(s) # :nodoc: From 4f48ea4357cddb4c66e5d41007b95a471bb2000e Mon Sep 17 00:00:00 2001 From: Yasuo Honda Date: Mon, 20 Mar 2023 16:53:15 +0900 Subject: [PATCH 2/3] Address `Style/RedundantRegexpEscape` offense ``` $ bundle exec rubocop -a Inspecting 72 files ...................C.................................................... Offenses: lib/active_record/connection_adapters/oracle_enhanced/quoting.rb:29:33: C: [Corrected] Style/RedundantRegexpEscape: Redundant escape inside regexp literal when /^[a-z][a-z_0-9$#\-]*$/i ^^ 72 files inspected, 1 offense detected, 1 offense corrected $ ``` --- .../connection_adapters/oracle_enhanced/quoting.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/active_record/connection_adapters/oracle_enhanced/quoting.rb b/lib/active_record/connection_adapters/oracle_enhanced/quoting.rb index 5059e604e..c77b27df4 100644 --- a/lib/active_record/connection_adapters/oracle_enhanced/quoting.rb +++ b/lib/active_record/connection_adapters/oracle_enhanced/quoting.rb @@ -28,7 +28,7 @@ def quote_column_name_or_expression(name) # :nodoc: # if only valid lowercase column characters in name when /^[a-z][a-z_0-9$#]*$/ "\"#{name.upcase}\"" - when /^[a-z][a-z_0-9$#\-]*$/i + when /^[a-z][a-z_0-9$#-]*$/i "\"#{name}\"" # if other characters present then assume that it is expression # which should not be quoted From e130d94f400b57283d25d35ba5d4835b0941f051 Mon Sep 17 00:00:00 2001 From: Yasuo Honda Date: Mon, 31 Jul 2023 21:16:11 +0900 Subject: [PATCH 3/3] Address `NameError: uninitialized constant TestEmployee::AttributeSignature::Base64` https://github.com/rsim/oracle-enhanced/actions/runs/5714243566/job/15481185335?pr=2347 ``` Failures: 1) OracleEnhancedAdapter custom types handling should serialize LOBs when creating a record Failure/Error: Base64.encode64 value.raw NameError: uninitialized constant TestEmployee::AttributeSignature::Base64 Base64.encode64 value.raw ^^^^^^ # ./spec/active_record/oracle_enhanced/type/custom_spec.rb:30:in `serialize' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activemodel/lib/active_model/attribute.rb:56:in `value_for_database' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb:218:in `block in type_casted_binds' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb:216:in `map' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb:216:in `type_casted_binds' # ./lib/active_record/connection_adapters/oracle_enhanced/database_statements.rb:96:in `exec_insert' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:167:in `insert' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb:22:in `insert' # ./lib/active_record/connection_adapters/oracle_enhanced/database_statements.rb:90:in `insert' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/persistence.rb:496:in `_insert_record' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/persistence.rb:1096:in `_create_record' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/counter_cache.rb:166:in `_create_record' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/locking/optimistic.rb:84:in `_create_record' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/attribute_methods/dirty.rb:222:in `_create_record' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/callbacks.rb:459:in `block in _create_record' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activesupport/lib/active_support/callbacks.rb:99:in `run_callbacks' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activesupport/lib/active_support/callbacks.rb:929:in `_run_create_callbacks' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/callbacks.rb:459:in `_create_record' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/timestamp.rb:108:in `_create_record' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/persistence.rb:1067:in `create_or_update' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/callbacks.rb:455:in `block in create_or_update' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activesupport/lib/active_support/callbacks.rb:99:in `run_callbacks' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activesupport/lib/active_support/callbacks.rb:929:in `_run_save_callbacks' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/callbacks.rb:455:in `create_or_update' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/timestamp.rb:126:in `create_or_update' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/persistence.rb:648:in `save!' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/validations.rb:53:in `save!' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/transactions.rb:302:in `block in save!' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/transactions.rb:354:in `block in with_transaction_returning_status' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb:319:in `block in within_new_transaction' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activesupport/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activesupport/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activesupport/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activesupport/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb:317:in `within_new_transaction' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:316:in `transaction' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/transactions.rb:350:in `with_transaction_returning_status' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/transactions.rb:302:in `save!' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/suppressor.rb:54:in `save!' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/persistence.rb:55:in `create!' # ./spec/active_record/oracle_enhanced/type/custom_spec.rb:70:in `block (2 levels) in ' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:263:in `instance_exec' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:263:in `block in run' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:468:in `block in with_around_example_hooks' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:486:in `block in run' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:624:in `run_around_example_hooks_for' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:486:in `run' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:468:in `with_around_example_hooks' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:511:in `with_around_and_singleton_context_hooks' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:259:in `run' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/example_group.rb:646:in `block in run_examples' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/example_group.rb:642:in `map' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/example_group.rb:642:in `run_examples' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/example_group.rb:607:in `run' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:121:in `block (3 levels) in run_specs' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:121:in `map' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:121:in `block (2 levels) in run_specs' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/configuration.rb:2070:in `with_suite_hooks' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:116:in `block in run_specs' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/reporter.rb:74:in `report' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:115:in `run_specs' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:89:in `run' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:71:in `run' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:45:in `invoke' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/exe/rspec:4:in `' # /opt/hostedtoolcache/Ruby/3.1.4/x64/bin/rspec:25:in `load' # /opt/hostedtoolcache/Ruby/3.1.4/x64/bin/rspec:25:in `' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/3.1.0/bundler/cli/exec.rb:58:in `load' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/3.1.0/bundler/cli/exec.rb:58:in `kernel_load' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/3.1.0/bundler/cli/exec.rb:23:in `run' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/3.1.0/bundler/cli.rb:486:in `exec' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/3.1.0/bundler/vendor/thor/lib/thor/command.rb:27:in `run' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/3.1.0/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/3.1.0/bundler/vendor/thor/lib/thor.rb:392:in `dispatch' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/3.1.0/bundler/cli.rb:31:in `dispatch' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/3.1.0/bundler/vendor/thor/lib/thor/base.rb:485:in `start' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/3.1.0/bundler/cli.rb:25:in `start' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/bundler-2.3.26/libexec/bundle:48:in `block in ' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/3.1.0/bundler/friendly_errors.rb:120:in `with_friendly_errors' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/bundler-2.3.26/libexec/bundle:36:in `' # /opt/hostedtoolcache/Ruby/3.1.4/x64/bin/bundle:25:in `load' # /opt/hostedtoolcache/Ruby/3.1.4/x64/bin/bundle:25:in `
' 2) OracleEnhancedAdapter custom types handling should serialize LOBs when updating a record Failure/Error: Base64.encode64 value.raw NameError: uninitialized constant TestEmployee::AttributeSignature::Base64 Base64.encode64 value.raw ^^^^^^ # ./spec/active_record/oracle_enhanced/type/custom_spec.rb:30:in `serialize' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activemodel/lib/active_model/attribute.rb:56:in `value_for_database' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb:218:in `block in type_casted_binds' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb:216:in `map' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb:216:in `type_casted_binds' # ./lib/active_record/connection_adapters/oracle_enhanced/database_statements.rb:96:in `exec_insert' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:167:in `insert' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb:22:in `insert' # ./lib/active_record/connection_adapters/oracle_enhanced/database_statements.rb:90:in `insert' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/persistence.rb:496:in `_insert_record' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/persistence.rb:1096:in `_create_record' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/counter_cache.rb:166:in `_create_record' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/locking/optimistic.rb:84:in `_create_record' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/attribute_methods/dirty.rb:222:in `_create_record' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/callbacks.rb:459:in `block in _create_record' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activesupport/lib/active_support/callbacks.rb:99:in `run_callbacks' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activesupport/lib/active_support/callbacks.rb:929:in `_run_create_callbacks' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/callbacks.rb:459:in `_create_record' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/timestamp.rb:108:in `_create_record' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/persistence.rb:1067:in `create_or_update' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/callbacks.rb:455:in `block in create_or_update' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activesupport/lib/active_support/callbacks.rb:99:in `run_callbacks' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activesupport/lib/active_support/callbacks.rb:929:in `_run_save_callbacks' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/callbacks.rb:455:in `create_or_update' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/timestamp.rb:126:in `create_or_update' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/persistence.rb:648:in `save!' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/validations.rb:53:in `save!' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/transactions.rb:302:in `block in save!' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/transactions.rb:354:in `block in with_transaction_returning_status' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb:319:in `block in within_new_transaction' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activesupport/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activesupport/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activesupport/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activesupport/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb:317:in `within_new_transaction' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:316:in `transaction' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/transactions.rb:350:in `with_transaction_returning_status' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/transactions.rb:302:in `save!' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/suppressor.rb:54:in `save!' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/bundler/gems/rails-b18b9df65eb7/activerecord/lib/active_record/persistence.rb:55:in `create!' # ./spec/active_record/oracle_enhanced/type/custom_spec.rb:80:in `block (2 levels) in ' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:263:in `instance_exec' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:263:in `block in run' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:468:in `block in with_around_example_hooks' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:486:in `block in run' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:624:in `run_around_example_hooks_for' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:486:in `run' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:468:in `with_around_example_hooks' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:511:in `with_around_and_singleton_context_hooks' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:259:in `run' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/example_group.rb:646:in `block in run_examples' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/example_group.rb:642:in `map' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/example_group.rb:642:in `run_examples' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/example_group.rb:607:in `run' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:121:in `block (3 levels) in run_specs' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:121:in `map' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:121:in `block (2 levels) in run_specs' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/configuration.rb:2070:in `with_suite_hooks' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:116:in `block in run_specs' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/reporter.rb:74:in `report' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:115:in `run_specs' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:89:in `run' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:71:in `run' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:45:in `invoke' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/rspec-core-3.12.2/exe/rspec:4:in `' # /opt/hostedtoolcache/Ruby/3.1.4/x64/bin/rspec:25:in `load' # /opt/hostedtoolcache/Ruby/3.1.4/x64/bin/rspec:25:in `' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/3.1.0/bundler/cli/exec.rb:58:in `load' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/3.1.0/bundler/cli/exec.rb:58:in `kernel_load' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/3.1.0/bundler/cli/exec.rb:23:in `run' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/3.1.0/bundler/cli.rb:486:in `exec' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/3.1.0/bundler/vendor/thor/lib/thor/command.rb:27:in `run' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/3.1.0/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/3.1.0/bundler/vendor/thor/lib/thor.rb:392:in `dispatch' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/3.1.0/bundler/cli.rb:31:in `dispatch' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/3.1.0/bundler/vendor/thor/lib/thor/base.rb:485:in `start' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/3.1.0/bundler/cli.rb:25:in `start' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/bundler-2.3.26/libexec/bundle:48:in `block in ' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/3.1.0/bundler/friendly_errors.rb:120:in `with_friendly_errors' # /opt/hostedtoolcache/Ruby/3.1.4/x64/lib/ruby/gems/3.1.0/gems/bundler-2.3.26/libexec/bundle:36:in `' # /opt/hostedtoolcache/Ruby/3.1.4/x64/bin/bundle:25:in `load' # /opt/hostedtoolcache/Ruby/3.1.4/x64/bin/bundle:25:in `
' Finished in 5 minutes 57 seconds (files took 0.79453 seconds to load) 393 examples, 2 failures, 5 pending Failed examples: rspec ./spec/active_record/oracle_enhanced/type/custom_spec.rb:67 # OracleEnhancedAdapter custom types handling should serialize LOBs when creating a record rspec ./spec/active_record/oracle_enhanced/type/custom_spec.rb:77 # OracleEnhancedAdapter custom types handling should serialize LOBs when updating a record ``` --- spec/active_record/oracle_enhanced/type/custom_spec.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spec/active_record/oracle_enhanced/type/custom_spec.rb b/spec/active_record/oracle_enhanced/type/custom_spec.rb index e7e50a84c..bcc04feda 100644 --- a/spec/active_record/oracle_enhanced/type/custom_spec.rb +++ b/spec/active_record/oracle_enhanced/type/custom_spec.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require "base64" + describe "OracleEnhancedAdapter custom types handling" do include SchemaSpecHelper