• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef NATIVE_RDB_SQLITE_GLOBAL_CONFIG_H
17 #define NATIVE_RDB_SQLITE_GLOBAL_CONFIG_H
18 
19 #include <string>
20 
21 #include "rdb_store_config.h"
22 
23 namespace OHOS {
24 namespace NativeRdb {
25 
26 class GlobalExpr {
27 public:
28     static constexpr bool CALLBACK_LOG_SWITCH = true;                  /* Sqlite callback log switch */
29     static constexpr int SOFT_HEAP_LIMIT = 8 * 1024 * 1024;            /* 8MB */
30     static constexpr int DB_PAGE_SIZE = 4096;                          /* default page size : 4k */
31     static constexpr int DB_JOURNAL_SIZE = 1024 * 1024;                /* default file size : 1M */
32     static constexpr int CLEAR_MEMORY_SIZE = 1024 * 1024;              /* default file size : 1M */
33     static constexpr ssize_t DB_WAL_SIZE_LIMIT_MIN = 20 * 1024 * 1024; /* default wal file maximum size : 20M */
34     static constexpr ssize_t DB_WAL_WARNING_SIZE = 256 * 1024 * 1024;  /* default wal file maximum size : 256M */
35     static constexpr ssize_t DB_WAL_DEFAULT_SIZE = 0x20000000;         /* default wal file size 512M */
36     static constexpr ssize_t DB_WAL_SIZE_LIMIT_MAX = 0x7FFFFFFF;       /* default wal file maximum size : 2G - 1 */
37     static constexpr int WAL_AUTO_CHECKPOINT = 100;                    /* 100 pages */
38     static constexpr int APP_DEFAULT_UMASK = 0002;
39     static constexpr int SQLITE_MAX_COLUMN = 2000;
40     static constexpr char ATTACH_BACKUP_SQL[] = "ATTACH ? AS backup KEY ?";
41     static constexpr char ATTACH_WITH_KEY_SQL[] = "ATTACH DATABASE ? AS ? KEY ?";
42     static constexpr char ATTACH_SQL[] = "ATTACH DATABASE ? AS ?";
43     static constexpr char DETACH_SQL[] = "DETACH DATABASE ?";
44     static constexpr char EXPORT_SQL[] = "SELECT export_database('backup')";
45     static constexpr char DETACH_BACKUP_SQL[] = "detach backup";
46     static constexpr char PRAGMA_JOUR_MODE_EXP[] = "PRAGMA journal_mode";
47     static constexpr char PRAGMA_BACKUP_JOUR_MODE_WAL[] = "PRAGMA backup.journal_mode=WAL";
48     static constexpr char PRAGMA_VERSION[] = "PRAGMA user_version";
49     static constexpr char JOURNAL_MODE_WAL[] = "WAL";
50     static constexpr char DEFAULE_SYNC_MODE[] = "FULL";
51     static constexpr char MEMORY_DB_PATH[] = ":memory:";
52     static constexpr char SHARED_MEMORY_DB_PATH_PREFIX[] = "file:";
53     static constexpr char SHARED_MEMORY_DB_PATH_SUFFIX[] = "?mode=memory&cache=shared";
54     static constexpr char CODEC_HMAC_ALGO[] = "PRAGMA codec_hmac_algo=sha256";
55     static constexpr char CODEC_HMAC_ALGO_PREFIX[] = "PRAGMA codec_hmac_algo='";
56     static constexpr char CODEC_KDF_ALGO_PREFIX[] = "PRAGMA codec_kdf_algo='";
57     static constexpr char CODEC_PAGE_SIZE_PREFIX[] = "PRAGMA codec_page_size=";
58     static constexpr char CODEC_REKEY_HMAC_ALGO[] = "PRAGMA codec_rekey_hmac_algo=sha256";
59     static constexpr char CIPHER_DEFAULT_ALGO[] = "PRAGMA codec_cipher='aes-256-gcm'";
60     static constexpr char CIPHER_ALGO_PREFIX[] = "PRAGMA codec_cipher='";
61     static constexpr char ALGO_SUFFIX[] = "'";
62     static constexpr char CIPHER_KDF_ITER[] = "PRAGMA codec_kdf_iter=";
63     static constexpr char CIPHER_DEFAULT_ATTACH_HMAC_ALGO[] = "PRAGMA cipher_default_attach_hmac_algo=sha256";
64     static constexpr char CIPHER_DEFAULT_ATTACH_CIPHER_PREFIX[] = "PRAGMA cipher_default_attach_cipher='";
65     static constexpr char CIPHER_DEFAULT_ATTACH_HMAC_ALGO_PREFIX[] = "PRAGMA cipher_default_attach_hmac_algo='";
66     static constexpr char CIPHER_DEFAULT_ATTACH_KDF_ALGO_PREFIX[] = "PRAGMA cipher_default_attach_kdf_algo='";
67     static constexpr char CIPHER_DEFAULT_ATTACH_PAGE_SIZE_PREFIX[] = "PRAGMA cipher_default_attach_page_size=";
68     static constexpr char CIPHER_DEFAULT_ATTACH_KDF_ITER_PREFIX[] = "PRAGMA cipher_default_attach_kdf_iter=";
69     static constexpr char PRAGMA_META_DOUBLE_WRITE[] = "PRAGMA meta_double_write=enabled";
70 };
71 
72 class SqliteGlobalConfig {
73 public:
74     SqliteGlobalConfig();
75     ~SqliteGlobalConfig();
76     static void InitSqliteGlobalConfig();
77     static void Log(const void *data, int err, const char *msg);
78     static std::string GetMemoryDbPath();
79     static std::string GetSharedMemoryDbPath(const std::string &name);
80     static int GetPageSize();
81     static std::string GetSyncMode();
82     static int GetJournalFileSize();
83     static int GetWalAutoCheckpoint();
84     static std::string GetDefaultJournalMode();
85     static int GetDbPath(const RdbStoreConfig &config, std::string &dbPath);
86     static void Corruption(void *arg, const void *msg);
87     static std::string GetLastCorruptionMsg();
88 
89 private:
90     static void SqliteErrReport(int err, const char *msg);
91 };
92 
93 } // namespace NativeRdb
94 } // namespace OHOS
95 
96 #endif
97