]> git.ktnx.net Git - mobile-ledger.git/blob - app/src/main/java/net/ktnx/mobileledger/db/DB.java
add a pattern flag for negation of amount
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / db / DB.java
1 /*
2  * Copyright © 2021 Damyan Ivanov.
3  * This file is part of MoLe.
4  * MoLe is free software: you can distribute it and/or modify it
5  * under the term of the GNU General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your opinion), any later version.
8  *
9  * MoLe is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License terms for details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with MoLe. If not, see <https://www.gnu.org/licenses/>.
16  */
17
18 package net.ktnx.mobileledger.db;
19
20 import androidx.annotation.NonNull;
21 import androidx.room.Database;
22 import androidx.room.Room;
23 import androidx.room.RoomDatabase;
24 import androidx.room.migration.Migration;
25 import androidx.sqlite.db.SupportSQLiteDatabase;
26
27 import net.ktnx.mobileledger.App;
28 import net.ktnx.mobileledger.dao.CurrencyDAO;
29 import net.ktnx.mobileledger.dao.PatternAccountDAO;
30 import net.ktnx.mobileledger.dao.PatternHeaderDAO;
31 import net.ktnx.mobileledger.utils.MobileLedgerDatabase;
32
33 @Database(version = 53, entities = {PatternHeader.class, PatternAccount.class, Currency.class})
34 abstract public class DB extends RoomDatabase {
35     private static DB instance;
36     public static DB get() {
37         if (instance != null)
38             return instance;
39         synchronized (DB.class) {
40             if (instance != null)
41                 return instance;
42
43             return instance =
44                     Room.databaseBuilder(App.instance, DB.class, MobileLedgerDatabase.DB_NAME)
45                         .addMigrations(new Migration[]{new Migration(51, 52) {
46                             @Override
47                             public void migrate(@NonNull SupportSQLiteDatabase db) {
48                                 db.beginTransaction();
49                                 try {
50                                     db.execSQL("create index fk_pattern_accounts_pattern on " +
51                                                "pattern_accounts(pattern_id);");
52                                     db.execSQL("create index fk_pattern_accounts_currency on " +
53                                                "pattern_accounts(currency);");
54                                     db.setTransactionSuccessful();
55                                 }
56                                 finally {
57                                     db.endTransaction();
58                                 }
59                             }
60                         }, new Migration(52, 53) {
61                             @Override
62                             public void migrate(@NonNull SupportSQLiteDatabase db) {
63                                 db.execSQL(
64                                         "alter table pattern_accounts add negate_amount boolean;");
65                             }
66                         }
67                         })
68                         .build();
69         }
70     }
71     public abstract PatternHeaderDAO getPatternDAO();
72
73     public abstract PatternAccountDAO getPatternAccountDAO();
74
75     public abstract CurrencyDAO getCurrencyDAO();
76 }