Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow unmanaged autogenerated sequence names #2345

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions lib/active_record/connection_adapters/oracle_enhanced_adapter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,17 @@ class OracleEnhancedAdapter < AbstractAdapter
cattr_accessor :default_sequence_start_value
self.default_sequence_start_value = 1

##
# :singleton-method:
# By default trigger based sequences are not supported.
# Enable this if you wish to manage your own primary key triggers, then you can avoid an
# exception being raised when using autogenerated sequence names in your ActiveRecord models:
#
# self.sequence_name = :autogenerated
#
cattr_accessor :unmanaged_autogenerated_sequences
self.unmanaged_autogenerated_sequences = false

##
# :singleton-method:
# By default, OracleEnhanced adapter will use longer 128 bytes identifier
Expand Down Expand Up @@ -493,6 +504,7 @@ def discard!
# called directly; used by ActiveRecord to get the next primary key value
# when inserting a new database record (see #prefetch_primary_key?).
def next_sequence_value(sequence_name)
return nil if unmanaged_autogenerated_sequences
# if sequence_name is set to :autogenerated then it means that primary key will be populated by trigger
raise ArgumentError.new "Trigger based primary key is not supported" if sequence_name == AUTOGENERATED_SEQUENCE_NAME
# call directly connection method to avoid prepared statement which causes fetching of next sequence value twice
Expand Down