unepwcmc/SAPI

View on GitHub
lib/tasks/db_migrate_plpgsql.rake

Summary

Maintainability
Test Coverage
namespace :db do
  namespace :migrate do
    desc "Run custom sql scripts"
    task :sql => :environment do
      ApplicationRecord.transaction do
        connection = ApplicationRecord.connection

        ['helpers', 'mviews', 'plpgsql'].each do |dir|
          files = Dir.glob(Rails.root.join("db/#{dir}/*.sql"))

          # Within the current transaction, set work_mem to a higher-than-usual
          # value, so that matviews can be built more efficiently.
          #
          # The default low value of work_mem (default 4MB) is suitable for
          # small queries with high concurrency (for instance, those performed
          # by a web server), but the restriction just hampers jobs like this.
          connection.execute("SET work_mem TO '64MB';")

          files.sort.each do |file|
            puts "Executing #{file}"
            connection.execute(File.read(file))
          end
        end
      end
    end

    desc "Rebuild all computed values"
    task :rebuild => :migrate do
      SapiModule::rebuild
    end

    task :drop_indexes => :migrate do
      SapiModule::drop_indexes
    end

    task :create_indexes => :migrate do
      SapiModule::create_indexes
    end
  end

  task :migrate do
    Rake::Task['db:migrate:sql'].invoke
  end

  desc "Drop sandboxes in progress"
  task :drop_sandboxes => :environment do
    Trade::AnnualReportUpload.where(:is_done => false).each do |aru|
      aru.destroy
    end
  end

  desc "Drop all trade (shipments, permits, arus & sandboxes - use responsibly)"
  task :drop_trade => [:environment] do
    puts "Deleting shipments"
    ApplicationRecord.connection.execute('DELETE FROM trade_shipments')
    puts "Deleting permits"
    ApplicationRecord.connection.execute('DELETE FROM trade_permits')
    puts "Deleting annual report uploads & dropping sandboxes"
    Trade::AnnualReportUpload.all.each { |aru| aru.destroy }
  end
end