1efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar/*
2efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar * Copyright (C) 2016 The Android Open Source Project
3efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar *
4efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar * Licensed under the Apache License, Version 2.0 (the "License");
5efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar * you may not use this file except in compliance with the License.
6efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar * You may obtain a copy of the License at
7efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar *
8efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar *      http://www.apache.org/licenses/LICENSE-2.0
9efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar *
10efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar * Unless required by applicable law or agreed to in writing, software
11efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar * distributed under the License is distributed on an "AS IS" BASIS,
12efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar * See the License for the specific language governing permissions and
14efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar * limitations under the License.
15efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar */
16efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar
17efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyarpackage foo.bar;
18bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viveretteimport androidx.room.*;
19efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyarimport java.util.List;
20bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viveretteimport androidx.lifecycle.LiveData;
21efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar@Dao
22efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyarabstract class ComplexDao {
2313a2048db98b1cc2dbd1692b73b794527975a446Yigit Boyar    static class FullName {
2413a2048db98b1cc2dbd1692b73b794527975a446Yigit Boyar        public int id;
2513a2048db98b1cc2dbd1692b73b794527975a446Yigit Boyar        public String fullName;
2613a2048db98b1cc2dbd1692b73b794527975a446Yigit Boyar    }
2717caba59e1fd850fe1381d7311d23afc4e07cdfbYuichi Araki
2817caba59e1fd850fe1381d7311d23afc4e07cdfbYuichi Araki    private final ComplexDatabase mDb;
2917caba59e1fd850fe1381d7311d23afc4e07cdfbYuichi Araki
3017caba59e1fd850fe1381d7311d23afc4e07cdfbYuichi Araki    public ComplexDao(ComplexDatabase db) {
3117caba59e1fd850fe1381d7311d23afc4e07cdfbYuichi Araki        mDb = db;
3217caba59e1fd850fe1381d7311d23afc4e07cdfbYuichi Araki    }
3317caba59e1fd850fe1381d7311d23afc4e07cdfbYuichi Araki
34b3c4d9308e4fd66beca3a7824a5db749ce2aace1Yuichi Araki    @Transaction
35b3c4d9308e4fd66beca3a7824a5db749ce2aace1Yuichi Araki    public boolean transactionMethod(int i, String s, long l) {
36b3c4d9308e4fd66beca3a7824a5db749ce2aace1Yuichi Araki        return true;
37b3c4d9308e4fd66beca3a7824a5db749ce2aace1Yuichi Araki    }
38b3c4d9308e4fd66beca3a7824a5db749ce2aace1Yuichi Araki
3913a2048db98b1cc2dbd1692b73b794527975a446Yigit Boyar    @Query("SELECT name || lastName as fullName, uid as id FROM user where uid = :id")
4013a2048db98b1cc2dbd1692b73b794527975a446Yigit Boyar    abstract public List<FullName> fullNames(int id);
4113a2048db98b1cc2dbd1692b73b794527975a446Yigit Boyar
42efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar    @Query("SELECT * FROM user where uid = :id")
43efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar    abstract public User getById(int id);
44efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar
45efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar    @Query("SELECT * FROM user where name LIKE :name AND lastName LIKE :lastName")
46efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar    abstract public User findByName(String name, String lastName);
47efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar
48efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar    @Query("SELECT * FROM user where uid IN (:ids)")
49efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar    abstract public List<User> loadAllByIds(int... ids);
50efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar
5188865f77c35657a2bc545a718ca16a648fc8b62eYigit Boyar    @Query("SELECT ageColumn FROM user where uid = :id")
52efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar    abstract int getAge(int id);
53efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar
5488865f77c35657a2bc545a718ca16a648fc8b62eYigit Boyar    @Query("SELECT ageColumn FROM user where uid IN(:ids)")
55efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar    abstract public int[] getAllAges(int... ids);
56efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar
5788865f77c35657a2bc545a718ca16a648fc8b62eYigit Boyar    @Query("SELECT ageColumn FROM user where uid IN(:ids)")
58efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar    abstract public List<Integer> getAllAgesAsList(List<Integer> ids);
59846dfcf52e22de6d912f8ece05ff939c2c9bd154Yigit Boyar
60846dfcf52e22de6d912f8ece05ff939c2c9bd154Yigit Boyar    @Query("SELECT * FROM user where uid = :id")
61846dfcf52e22de6d912f8ece05ff939c2c9bd154Yigit Boyar    abstract public LiveData<User> getByIdLive(int id);
62846dfcf52e22de6d912f8ece05ff939c2c9bd154Yigit Boyar
63846dfcf52e22de6d912f8ece05ff939c2c9bd154Yigit Boyar    @Query("SELECT * FROM user where uid IN (:ids)")
64846dfcf52e22de6d912f8ece05ff939c2c9bd154Yigit Boyar    abstract public LiveData<List<User>> loadUsersByIdsLive(int... ids);
651d3d9d6121d53a4c11223ba475d8954315952a09Yigit Boyar
661d3d9d6121d53a4c11223ba475d8954315952a09Yigit Boyar    @Query("SELECT ageColumn FROM user where uid IN(:ids1) OR uid IN (:ids2) OR uid IN (:ids3)")
671d3d9d6121d53a4c11223ba475d8954315952a09Yigit Boyar    abstract public List<Integer> getAllAgesAsList(List<Integer> ids1,
681d3d9d6121d53a4c11223ba475d8954315952a09Yigit Boyar            int[] ids2, int... ids3);
69efaf86afac3163868eda7f91a1c04e3f6e6d7520Yigit Boyar}
70