class CreatePackageStatus < ActiveRecord::Migration[4.2]
  def up
    create_table :package_statuses do |t|
      t.integer :package_id
      t.integer :job_id
      t.string :suite, null: false
      t.string :arch, null: false

      t.index [:package_id, :suite, :arch], unique: true
    end
    add_foreign_key :package_statuses, :packages
    add_foreign_key :package_statuses, :jobs, primary_key: :run_id

    ids = exec_query(%[
      SELECT max(run_id) as run_id
      FROM jobs
      WHERE pin_packages is NULL
            AND status is not NULL
      GROUP BY package_id, suite, arch
    ]).map { |item| item['run_id'] }
    return if ids.empty?

    populate_sql = %[
      INSERT INTO package_statuses(package_id, job_id, suite, arch)
      SELECT package_id, run_id, suite, arch
      FROM jobs
      WHERE run_id IN (%s)
    ] % ids.join(',')
    exec_query(populate_sql)
  end

  def down
    drop_table :package_statuses
  end
end
