package db2 import androidx.room.* import app.cash.paging.PagingSource import com.ustadmobile.door.DoorQuery import com.ustadmobile.door.annotation.DoorDao import kotlinx.coroutines.flow.Flow @Suppress("unused") //Even if functions here are unused, they are still testing that the generated code compiles @DoorDao expect abstract class ExampleDao2 { @Insert abstract fun insertAndReturnId(entity: ExampleEntity2): Long @Insert abstract suspend fun insertAsync(entity: ExampleEntity2) @Insert abstract suspend fun insertAsyncAndGiveId(entity: ExampleEntity2) : Long @Insert(onConflict = OnConflictStrategy.IGNORE) abstract suspend fun insertOrIgnore(entity: ExampleEntity2) @Insert abstract fun insertList(entityList: List) @Insert abstract suspend fun insertListAsync(entityList: List) @Insert abstract fun insertOtherList(entityList: List) @Insert abstract fun insertAndReturnList(entityList: List): List @Insert abstract fun insertListAndReturnIdsArray(entityList: List): Array @Insert(onConflict = OnConflictStrategy.REPLACE) abstract fun replace(entityList: List) @Query("SELECT * FROM ExampleEntity2 WHERE uid = :uid") abstract fun findByUid(uid: Long): ExampleEntity2? @Query("SELECT * FROM ExampleEntity2 WHERE uid = :uid") abstract suspend fun findByUidAsync(uid: Long): ExampleEntity2? @Query("SELECT * FROM ExampleEntity2 WHERE uid > :uid AND someNumber > :min") abstract suspend fun findLarge(uid: Long, min: Long): ExampleEntity2? @Query("SELECT * FROM ExampleEntity2 WHERE uid > :uid AND someNumber > :min") abstract suspend fun findLargeAsync(uid: Long, min: Long): List @Query("SELECT * FROM ExampleEntity2 WHERE name = :name") abstract fun findWithNullableParam(name: String?): List @Query("SELECT name FROM ExampleEntity2 WHERE uid = :uid") abstract fun findNameByUid(uid: Long): String? @Query("SELECT name FROM ExampleEntity2 WHERE uid = :uid") abstract suspend fun findNameByUidAsync(uid: Long): String? @Query("SELECT ExampleEntity2.*, ExampleLinkEntity.* FROM " + " ExampleEntity2 LEFT JOIN ExampleLinkEntity ON ExampleEntity2.uid = ExampleLinkEntity.fkValue " + "WHERE ExampleEntity2.uid = :uid") abstract suspend fun findByUidWithLinkEntityAsync(uid: Long): ExampleEntity2WithExampleLinkEntity? @Query("SELECT * FROM ExampleEntity2 ORDER BY uid") abstract fun findAll(): List @Query("SELECT * FROM ExampleEntity2") abstract suspend fun findAllAsync(): List @Query("SELECT name FROM ExampleEntity2") abstract suspend fun findAllStrings(): List @Query("SELECT name FROM ExampleEntity2") abstract fun findAllStringsSync(): List @Update abstract suspend fun updateSingleItemAsync(entity: ExampleEntity2) @Update abstract suspend fun updateSingleItemAndReturnCountAsync(entity: ExampleEntity2): Int @Update abstract suspend fun updateListAsync(updateEntityList: List) @Query("UPDATE ExampleEntity2 SET name = :newName WHERE someNumber >= :num") abstract fun updateByParam(newName: String, num: Long) : Int @Query("UPDATE ExampleEntity2 SET name = :newName WHERE someNumber >= :num") abstract suspend fun updateByParamAsync(newName: String, num: Long) : Int @Query("UPDATE exampleentity2 SET name = :newName WHERE someNumber >= :number") abstract fun updateByParamNoReturn(newName: String, number: Long) @Delete abstract fun deleteSingle(entity: ExampleEntity2) @Delete abstract fun deleteList(deleteList: List) @Delete abstract suspend fun deleteListAsync(deleteList: List): Int @Query("SELECT COUNT(*) FROM ExampleEntity2") abstract fun countNumEntities(): Int @Query("SELECT COUNT(*) FROM ExampleEntity2") abstract suspend fun countNumEntitiesAsync(): Int @Query("SELECT * FROM ExampleEntity2 WHERE uid IN (:uidList)") abstract fun queryUsingArray(uidList: List): List @RawQuery abstract fun rawQueryForList(query: DoorQuery): List @RawQuery abstract suspend fun rawQueryForListAsyc(query: DoorQuery): List @RawQuery abstract fun rawQueryForListWithEmbeddedVals(query: DoorQuery): List @RawQuery abstract fun rawQueryForSingleValue(query: DoorQuery): ExampleEntity2? @RawQuery abstract fun rawQueryWithArrParam(query: DoorQuery): List @Query(""" INSERT INTO ExampleEntity2(uid, name, someNumber) SELECT (uid + 1) AS uid, name AS name, (someNumber * 2) AS someNumber FROM ExampleEntity2 WHERE uid = :uid """) abstract fun insertFromSelectQuery(uid: Int) @Query("SELECT * FROM ExampleEntity2") abstract fun queryAllAsFlow(): Flow> @Query("SELECT * FROM ExampleEntity2 WHERE someNumber > :greaterThan LIMIT 1") abstract fun findSingleNotNullableEntity(greaterThan: Int): ExampleEntity2 @Query("SELECT * FROM ExampleEntity2 WHERE someNumber > :greaterThan LIMIT 1") abstract suspend fun findSingleNotNullableEntityAsync(greaterThan: Int): ExampleEntity2 @Query("SELECT someNumber FROM ExampleEntity2 WHERE someNumber > :greaterThan LIMIT 1") abstract fun findSingleNotNullablePrimitive(greaterThan: Int): Int @Query("SELECT someNumber FROM ExampleEntity2 WHERE someNumber > :greaterThan LIMIT 1") abstract suspend fun findSingleNotNullablePrimitiveAsync(greaterThan: Int): Int @Query("SELECT someNumber FROM ExampleEntity2 WHERE someNumber > :greaterThan LIMIT 1") abstract fun findSingleNullablePrimitive(greaterThan: Int): Int? @Query("SELECT someNumber FROM ExampleEntity2 WHERE someNumber > :greaterThan LIMIT 1") abstract suspend fun findSingleNullablePrimitiveAsync(greaterThan: Long): Long? @Query(""" SELECT ExampleEntity2.* FROM ExampleEntity2 WHERE (CASE WHEN :rewardsNum IS NULL THEN (ExampleEntity2.rewardsCardNumber IS NULL) ELSE (ExampleEntity2.rewardsCardNumber = :rewardsNum) END) """) abstract suspend fun findWithNullableIntAsync(rewardsNum: Int?): ExampleEntity2? @Query(""" SELECT * FROM ExampleEntity2 WHERE rewardsCardNumber IS NOT NULL AND rewardsCardNumber >= :minNumber ORDER BY rewardsCardNumber """) abstract fun findAllWithRewardNumberAsPagingSource(minNumber: Int): PagingSource @Query(""" SELECT * FROM ExampleEntity2 WHERE rewardsCardNumber IS NOT NULL AND rewardsCardNumber >= :minNumber ORDER BY rewardsCardNumber """) abstract suspend fun findAllWithRewardNumberAsListAsync(minNumber: Int): List @Query(""" SELECT * FROM ExampleEntity2 WHERE someNumber >= :minNumber """) abstract suspend fun findByMinSomeNumber(minNumber: Long): List }