13f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki/*
23f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki * Copyright 2018 The Android Open Source Project
33f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki *
43f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki * Licensed under the Apache License, Version 2.0 (the "License");
53f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki * you may not use this file except in compliance with the License.
63f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki * You may obtain a copy of the License at
73f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki *
83f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki *      http://www.apache.org/licenses/LICENSE-2.0
93f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki *
103f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki * Unless required by applicable law or agreed to in writing, software
113f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki * distributed under the License is distributed on an "AS IS" BASIS,
123f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki * See the License for the specific language governing permissions and
143f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki * limitations under the License.
153f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki */
163f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki
17bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viverettepackage androidx.room.writer
183f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki
19bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viveretteimport androidx.room.vo.Entity
203f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki
213f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki/**
223f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki * Sorts the entities by their foreign key dependencies. For example, when Entity A depends on
233f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki * Entity B, A is ordered before B.
243f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki */
253f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Arakiclass EntityDeleteComparator : Comparator<Entity> {
263f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki
273f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki    override fun compare(lhs: Entity, rhs: Entity): Int {
283f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki        val ltr = lhs.shouldBeDeletedAfter(rhs)
293f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki        val rtl = rhs.shouldBeDeletedAfter(lhs)
303f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki        return when {
313f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki            ltr == rtl -> 0
323f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki            ltr -> -1
333f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki            rtl -> 1
343f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki            else -> 0 // Never happens
353f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki        }
363f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki    }
373f426b1704c8037737ff3657d295ab23d978e9e2Yuichi Araki}
38