HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux vmi1674223.contaboserver.net 5.4.0-182-generic #202-Ubuntu SMP Fri Apr 26 12:29:36 UTC 2024 x86_64
User: root (0)
PHP: 7.4.3-4ubuntu2.22
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //opt/openproject/db/migrate/20200302100431_fix_attachable_journals.rb
class FixAttachableJournals < ActiveRecord::Migration[6.0]
  # Adds attachable_journals to all journals where the
  # attachment was created before the journal as long as there
  # is no attachable_journal associated to the journal yet.
  #
  # This does not fix journals where the attachment has been deleted in the meantime as
  # we no longer have the necessary information to recreate the journals.
  def up
    statement = <<~SQL
      WITH
        existing_attachments AS (
          SELECT
            id,
            created_at,
            file,
            container_id,
            container_type,
            author_id
          FROM attachments),
        existing_attachable_journals AS (
          SELECT
            journals.id journal_id,
            attachable_journals.attachment_id
          FROM journals
          LEFT OUTER JOIN attachable_journals ON journals.id = attachable_journals.journal_id
          LEFT OUTER JOIN attachments ON attachable_journals.attachment_id = attachments.id)

      INSERT INTO attachable_journals (journal_id, attachment_id, filename)
      SELECT
        journals.id journal_id,
        existing_attachments.id attachment_id,
        existing_attachments.file filename
      FROM journals
      JOIN existing_attachments
        ON journals.created_at >= existing_attachments.created_at
        AND journals.user_id = existing_attachments.author_id
        AND journals.journable_id = existing_attachments.container_id
        AND journals.journable_type = existing_attachments.container_type
      LEFT OUTER JOIN existing_attachable_journals
        ON existing_attachments.id = existing_attachable_journals.attachment_id
        AND journals.id = existing_attachable_journals.journal_id
      WHERE attachment_id IS NULL
    SQL

    ActiveRecord::Base.connection.execute statement
  end

  # Does not require a down statement as a bug is fixed.
end