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