Top Level Namespace
Defined Under Namespace
Modules: Rails
Instance Method Summary collapse
- #enhance_snowflake_db_task(name) ⇒ Object
-
#ensure_snowflake_sequences ⇒ Object
Ensures that any tables using a snowflake primary key (:id with timestamp_id default) have their backing <table>_id_seq sequences present.
Instance Method Details
#enhance_snowflake_db_task(name) ⇒ Object
28 29 30 31 32 33 34 |
# File 'lib/rails/snowflake/database_tasks.rb', line 28 def enhance_snowflake_db_task(name) return unless Rake::Task.task_defined?(name) Rake::Task[name].enhance do ensure_snowflake_sequences end end |
#ensure_snowflake_sequences ⇒ Object
Ensures that any tables using a snowflake primary key (:id with timestamp_id default) have their backing <table>_id_seq sequences present. This is necessary for tables created with ‘id: false` and a subsequent `t.snowflake :id, primary_key: true` where Rails does not auto-create the normal sequence.
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/rails/snowflake/database_tasks.rb', line 7 def ensure_snowflake_sequences begin # Avoid establishing a new connection too early; skip if not connected yet. return unless ActiveRecord::Base.connection_pool.connected? adapter = ActiveRecord::Base.connection.adapter_name unless adapter == "PostgreSQL" Rails.logger.debug("Rails::Snowflake: Skipping sequence check (adapter=#{adapter})") if defined?(Rails) return end Rails.logger.debug "Rails::Snowflake: Ensuring sequences for timestamp_id columns" if defined?(Rails) Rails::Snowflake::Id.ensure_id_sequences_exist rescue ActiveRecord::NoDatabaseError, ActiveRecord::ConnectionNotEstablished => e Rails.logger.debug "Rails::Snowflake: Skipping sequence ensure (#{e.class}: #{e.})" if defined?(Rails) rescue StandardError => e Rails.logger.warn "Rails::Snowflake: Unexpected error while ensuring sequences: #{e.class}: #{e.}" if defined?(Rails) end end |