30 lines
		
	
	
	
		
			638 B
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			30 lines
		
	
	
	
		
			638 B
		
	
	
	
		
			Elixir
		
	
	
	
	
	
defmodule Pleroma.Repo.Migrations.DeleteNotificationWithoutActivity do
 | 
						|
  use Ecto.Migration
 | 
						|
 | 
						|
  import Ecto.Query
 | 
						|
  alias Pleroma.Repo
 | 
						|
 | 
						|
  def up do
 | 
						|
    from(
 | 
						|
      q in Pleroma.Notification,
 | 
						|
      left_join: c in assoc(q, :activity),
 | 
						|
      select: %{id: type(q.id, :integer)},
 | 
						|
      where: is_nil(c.id)
 | 
						|
    )
 | 
						|
    |> Repo.chunk_stream(1_000, :batches)
 | 
						|
    |> Stream.each(fn records ->
 | 
						|
      notification_ids = Enum.map(records, fn %{id: id} -> id end)
 | 
						|
 | 
						|
      Repo.delete_all(
 | 
						|
        from(n in "notifications",
 | 
						|
          where: n.id in ^notification_ids
 | 
						|
        )
 | 
						|
      )
 | 
						|
    end)
 | 
						|
    |> Stream.run()
 | 
						|
  end
 | 
						|
 | 
						|
  def down do
 | 
						|
    :ok
 | 
						|
  end
 | 
						|
end
 |