Skip to content

Commit 044ca74

Browse files
the-undefinedmatthewtusker
authored andcommitted
Allow unmanaged autogenerated sequence names
To still support primary keys through db triggers, without adding back in support for generating and maintaining them with migrations, add an configuration boolen: unmanaged_autogenerated_sequences = false # default Which can be used in an initializer file. When set to `true` there will not be an exception raised when the sequence name is defined in the model with the previously supported value: self.sequence_name = :autogenerated This option allows for dbs managed outside of the application to use triggers for primary keys. Without the `autogenerated` option an error is raised when inserting the record: ORA-02289: sequence does not exist
1 parent 3eb404e commit 044ca74

File tree

1 file changed

+12
-0
lines changed

1 file changed

+12
-0
lines changed

lib/active_record/connection_adapters/oracle_enhanced_adapter.rb

+12
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,17 @@ class OracleEnhancedAdapter < AbstractAdapter
212212
cattr_accessor :default_sequence_start_value
213213
self.default_sequence_start_value = 1
214214

215+
##
216+
# :singleton-method:
217+
# By default trigger based sequences are not supported.
218+
# Enable this if you wish to manage your own primary key triggers, then you can avoid an
219+
# exception being raised when using autogenerated sequence names in your ActiveRecord models:
220+
#
221+
# self.sequence_name = :autogenerated
222+
#
223+
cattr_accessor :unmanaged_autogenerated_sequences
224+
self.unmanaged_autogenerated_sequences = false
225+
215226
##
216227
# :singleton-method:
217228
# By default, OracleEnhanced adapter will use longer 128 bytes identifier
@@ -493,6 +504,7 @@ def discard!
493504
# called directly; used by ActiveRecord to get the next primary key value
494505
# when inserting a new database record (see #prefetch_primary_key?).
495506
def next_sequence_value(sequence_name)
507+
return nil if unmanaged_autogenerated_sequences
496508
# if sequence_name is set to :autogenerated then it means that primary key will be populated by trigger
497509
raise ArgumentError.new "Trigger based primary key is not supported" if sequence_name == AUTOGENERATED_SEQUENCE_NAME
498510
# call directly connection method to avoid prepared statement which causes fetching of next sequence value twice

0 commit comments

Comments
 (0)