Skip to content

Instantly share code, notes, and snippets.

@yahonda
Last active February 14, 2018 23:28
Show Gist options
  • Save yahonda/69c31528a0f270258e429592640ce1b5 to your computer and use it in GitHub Desktop.
Save yahonda/69c31528a0f270258e429592640ce1b5 to your computer and use it in GitHub Desktop.
How disabling partial write workarounds to call `empty_insert_statement_value`
  • Enable partial writes (default)
$ ARCONN=oracle bin/test test/cases/attribute_methods_test.rb:120
Using oracle
Run options: --seed 2180

# Running:

E

Error:
AttributeMethodsTest#test_integers_as_nil:
NotImplementedError: NotImplementedError
    /home/yahonda/git/oracle-enhanced/lib/active_record/connection_adapters/oracle_enhanced/database_statements.rb:252:in `empty_insert_statement_value'
    /home/yahonda/git/rails/activerecord/lib/active_record/persistence.rb:182:in `_insert_record'
    /home/yahonda/git/rails/activerecord/lib/active_record/persistence.rb:724:in `_create_record'
    /home/yahonda/git/rails/activerecord/lib/active_record/counter_cache.rb:180:in `_create_record'
    /home/yahonda/git/rails/activerecord/lib/active_record/locking/optimistic.rb:77:in `_create_record'
    /home/yahonda/git/rails/activerecord/lib/active_record/attribute_methods/dirty.rb:135:in `_create_record'
    /home/yahonda/git/rails/activerecord/lib/active_record/callbacks.rb:342:in `block in _create_record'
    /home/yahonda/git/rails/activesupport/lib/active_support/callbacks.rb:132:in `run_callbacks'
    /home/yahonda/git/rails/activesupport/lib/active_support/callbacks.rb:816:in `_run_create_callbacks'
    /home/yahonda/git/rails/activerecord/lib/active_record/callbacks.rb:342:in `_create_record'
    /home/yahonda/git/rails/activerecord/lib/active_record/timestamp.rb:95:in `_create_record'
    /home/yahonda/git/rails/activerecord/lib/active_record/persistence.rb:698:in `create_or_update'
    /home/yahonda/git/rails/activerecord/lib/active_record/callbacks.rb:338:in `block in create_or_update'
    /home/yahonda/git/rails/activesupport/lib/active_support/callbacks.rb:98:in `run_callbacks'
    /home/yahonda/git/rails/activesupport/lib/active_support/callbacks.rb:816:in `_run_save_callbacks'
    /home/yahonda/git/rails/activerecord/lib/active_record/callbacks.rb:338:in `create_or_update'
    /home/yahonda/git/rails/activerecord/lib/active_record/persistence.rb:264:in `save'
    /home/yahonda/git/rails/activerecord/lib/active_record/validations.rb:46:in `save'
    /home/yahonda/git/rails/activerecord/lib/active_record/transactions.rb:310:in `block (2 levels) in save'
    /home/yahonda/git/rails/activerecord/lib/active_record/transactions.rb:386:in `block in with_transaction_returning_status'
    /home/yahonda/git/rails/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:254:in `block in transaction'
    /home/yahonda/git/rails/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb:230:in `block in within_new_transaction'
    /home/yahonda/.rbenv/versions/2.5.0/lib/ruby/2.5.0/monitor.rb:226:in `mon_synchronize'
    /home/yahonda/git/rails/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb:227:in `within_new_transaction'
    /home/yahonda/git/rails/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:254:in `transaction'
    /home/yahonda/git/rails/activerecord/lib/active_record/transactions.rb:212:in `transaction'
    /home/yahonda/git/rails/activerecord/lib/active_record/transactions.rb:383:in `with_transaction_returning_status'
    /home/yahonda/git/rails/activerecord/lib/active_record/transactions.rb:310:in `block in save'
    /home/yahonda/git/rails/activerecord/lib/active_record/transactions.rb:325:in `rollback_active_record_state!'
    /home/yahonda/git/rails/activerecord/lib/active_record/transactions.rb:309:in `save'
    /home/yahonda/git/rails/activerecord/lib/active_record/suppressor.rb:44:in `save'
    /home/yahonda/git/rails/activerecord/lib/active_record/persistence.rb:36:in `create'
    /home/yahonda/git/rails/activerecord/test/cases/attribute_methods_test.rb:121:in `block in <class:AttributeMethodsTest>'


bin/test test/cases/attribute_methods_test.rb:120



Finished in 7.946230s, 0.1258 runs/s, 0.0000 assertions/s.
1 runs, 0 assertions, 0 failures, 1 errors, 0 skips
$
  • Disable partial writes
[yahonda@li1885-190 activerecord (disable_partial_writes_for_auto_id)]$ git diff master
diff --git a/activerecord/test/models/auto_id.rb b/activerecord/test/models/auto_id.rb
index fd672603bb..19ec8e9943 100644
--- a/activerecord/test/models/auto_id.rb
+++ b/activerecord/test/models/auto_id.rb
@@ -1,6 +1,7 @@
 # frozen_string_literal: true

 class AutoId < ActiveRecord::Base
+  self.partial_writes = false
   self.table_name = "auto_id_tests"
   self.primary_key = "auto_id"
 end
$
ARCONN=oracle bin/test test/cases/attribute_methods_test.rb:120
Using oracle
Run options: --seed 33252

Running:

.

Finished in 8.774488s, 0.1140 runs/s, 0.1140 assertions/s.
1 runs, 1 assertions, 0 failures, 0 errors, 0 skips
$
  • SQL statement generated after disabling partial writes
AutoId Create (40.3ms) INSERT INTO "AUTO_ID_TESTS" ("VALUE") VALUES (:a1) RETURNING "AUTO_ID" INTO :returning_id [["value", nil], ["returning_id", nil]]

Note: Here RETURNING ... INTO is due to incorrect condition at poc_identity

  • AUTO_ID_TESTS table definition
SQL> desc auto_id_tests
 Name					   Null?    Type
 ----------------------------------------- -------- ----------------------------
 AUTO_ID				   NOT NULL NUMBER(38)
 VALUE						    NUMBER(38)

SQL>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment