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 SQLITE_SINGLE_VER_STORAGE_EXECUTOR_SQL_H 17 #define SQLITE_SINGLE_VER_STORAGE_EXECUTOR_SQL_H 18 19 #include <string> 20 21 #include "types_export.h" 22 23 namespace DistributedDB { 24 // cache.sync_data is design for migrating action after process restart 25 const std::string INSERT_LOCAL_SQL = 26 "INSERT OR REPLACE INTO local_data VALUES(?,?,?,?);"; 27 const std::string INSERT_LOCAL_SQL_FROM_CACHEHANDLE = 28 "INSERT OR REPLACE INTO maindb.local_data VALUES(?,?,?,?);"; 29 30 const std::string INSERT_CACHE_LOCAL_SQL = 31 "INSERT OR REPLACE INTO local_data VALUES(?,?,?,?,?);"; 32 33 const std::string UPDATE_LOCAL_SQL_FROM_CACHEHANDLE = 34 "UPDATE maindb.local_data SET key=?,value=?,timestamp=? where hash_key=?"; 35 36 const std::string UPDATE_CACHE_LOCAL_SQL = 37 "UPDATE local_data SET key=?,value=?,timestamp=? where hash_key=?"; 38 39 const std::string INSERT_META_SQL = 40 "INSERT OR REPLACE INTO meta_data VALUES(?,?);"; 41 42 const std::string INSERT_ATTACH_META_SQL = 43 "INSERT OR REPLACE INTO meta.meta_data VALUES(?,?);"; 44 45 const std::string INSERT_SYNC_SQL = 46 "INSERT INTO sync_data VALUES(?,?,?,?,?,?,?,?);"; 47 48 const std::string UPDATE_SYNC_SQL = 49 "UPDATE sync_data SET key=?,value=?,timestamp=?,flag=?,device=?,ori_device=?,w_timestamp=? WHERE hash_key=?;"; 50 51 const std::string INSERT_CACHE_SYNC_SQL = 52 "INSERT OR REPLACE INTO sync_data VALUES(?,?,?,?,?,?,?,?,?);"; 53 const std::string INSERT_CACHE_SYNC_SQL_FROM_MAINHANDLE = 54 "INSERT OR REPLACE INTO cache.sync_data VALUES(?,?,?,?,?,?,?,?,?);"; 55 56 const std::string UPDATE_CACHE_SYNC_SQL = 57 "UPDATE sync_data SET key=?,value=?,timestamp=?,flag=?,device=?,ori_device=?,w_timestamp=? WHERE hash_key=?;"; 58 59 const std::string UPDATE_CACHE_SYNC_SQL_FROM_MAINHANDLE = 60 "UPDATE cache.sync_data SET key=?,value=?,timestamp=?,flag=?,device=?,ori_device=?,w_timestamp=? " 61 "WHERE hash_key=?;"; 62 63 const std::string DELETE_LOCAL_SQL = 64 "DELETE FROM local_data WHERE key=?;"; 65 const std::string DELETE_LOCAL_SQL_FROM_CACHEHANDLE = 66 "DELETE FROM maindb.local_data WHERE key=?;"; 67 68 const std::string SELECT_ALL_META_KEYS = 69 "SELECT key FROM meta_data;"; 70 71 const std::string SELECT_ATTACH_ALL_META_KEYS = 72 "SELECT key FROM meta.meta_data;"; 73 74 const std::string SELECT_META_KEYS_BY_PREFIX = 75 "SELECT key FROM meta_data where key like ?;"; 76 77 const std::string SELECT_ATTACH_META_KEYS_BY_PREFIX = 78 "SELECT key FROM meta.meta_data where key like ?;"; 79 80 const std::string SELECT_ALL_SYNC_ENTRIES_BY_DEV = 81 "SELECT key, value FROM sync_data WHERE device=? AND (flag&0x03=0);"; 82 83 const std::string SELECT_ALL_SYNC_ENTRIES = 84 "SELECT key, value FROM sync_data WHERE (flag&0x03=0);"; 85 86 const std::string SELECT_ALL_SYNC_ENTRIES_BY_DEV_FROM_CACHEHANDLE = 87 "SELECT key, value FROM maindb.sync_data WHERE device=? AND (flag&0x03=0);"; 88 89 const std::string SELECT_ALL_SYNC_ENTRIES_FROM_CACHEHANDLE = 90 "SELECT key, value FROM maindb.sync_data WHERE (flag&0x03=0);"; 91 92 const std::string SELECT_LOCAL_VALUE_TIMESTAMP_SQL = 93 "SELECT value, timestamp FROM local_data WHERE key=?;"; 94 95 const std::string SELECT_SYNC_SQL = 96 "SELECT * FROM sync_data WHERE key=?;"; 97 98 const std::string SELECT_SYNC_VALUE_WTIMESTAMP_SQL = 99 "SELECT value, w_timestamp FROM sync_data WHERE key=?;"; 100 101 const std::string SELECT_SYNC_HASH_SQL = 102 "SELECT * FROM sync_data WHERE hash_key=?;"; 103 104 const std::string SELECT_CACHE_SYNC_HASH_SQL = 105 "SELECT * FROM sync_data WHERE hash_key=? AND version=?;"; 106 const std::string SELECT_CACHE_SYNC_HASH_SQL_FROM_MAINHANDLE = 107 "SELECT * FROM cache.sync_data WHERE hash_key=? AND version=?;"; 108 109 const std::string SELECT_LOCAL_HASH_SQL = 110 "SELECT * FROM local_data WHERE hash_key=?;"; 111 112 const std::string SELECT_CACHE_LOCAL_HASH_SQL = 113 "SELECT * FROM local_data WHERE hash_key=?;"; 114 115 const std::string SELECT_META_VALUE_SQL = 116 "SELECT value FROM meta_data WHERE key=?;"; 117 118 const std::string SELECT_ATTACH_META_VALUE_SQL = 119 "SELECT value FROM meta.meta_data WHERE key=?;"; 120 121 const std::string SELECT_MAX_TIMESTAMP_SQL = 122 "SELECT MAX(timestamp) FROM sync_data;"; 123 const std::string SELECT_MAX_TIMESTAMP_SQL_FROM_CACHEHANDLE = 124 "SELECT MAX(timestamp) FROM maindb.sync_data;"; 125 126 const std::string SELECT_NATIVE_MIN_TIMESTAMP_IN_CACHE_SYNC_DATA_SQL = 127 "SELECT MIN(timestamp) FROM sync_data WHERE flag&0x02=0x02;"; 128 const std::string SELECT_NATIVE_MIN_TIMESTAMP_IN_CACHE_SYNC_DATA_SQL_FROM_MAINHANDLE = 129 "SELECT MIN(timestamp) FROM cache.sync_data WHERE flag&0x02=0x02;"; 130 131 const std::string SELECT_SYNC_ENTRIES_SQL = 132 "SELECT * FROM sync_data WHERE timestamp >= ? AND timestamp < ? AND (flag&0x02=0x02) ORDER BY timestamp ASC;"; 133 134 const std::string SELECT_SYNC_DELETED_ENTRIES_SQL = 135 "SELECT * FROM sync_data WHERE timestamp >= ? AND timestamp < ? AND (flag&0x03=0x03) ORDER BY timestamp ASC;"; 136 137 const std::string SELECT_SYNC_MODIFY_SQL = 138 "SELECT * FROM sync_data WHERE timestamp >= ? AND timestamp < ? AND (flag&0x03=0x02) ORDER BY timestamp ASC;"; 139 140 const std::string SELECT_SYNC_PREFIX_SQL = 141 "SELECT key, value FROM sync_data WHERE key>=? AND key<=? AND (flag&0x01=0) ORDER BY key ASC;"; 142 143 const std::string SELECT_SYNC_KEY_PREFIX_SQL = 144 "SELECT key FROM sync_data WHERE key>=? AND key<=? AND (flag&0x01=0) ORDER BY key ASC;"; 145 146 const std::string SELECT_SYNC_ROWID_PREFIX_SQL = 147 "SELECT rowid FROM sync_data WHERE key>=? AND key<=? AND (flag&0x01=0) ORDER BY key ASC;"; 148 149 const std::string SELECT_SYNC_DATA_BY_ROWID_SQL = 150 "SELECT key, value FROM sync_data WHERE rowid=?;"; 151 152 const std::string SELECT_LOCAL_PREFIX_SQL = 153 "SELECT key, value FROM local_data WHERE key>=? AND key<=? ORDER BY key ASC;"; 154 155 const std::string SELECT_COUNT_SYNC_PREFIX_SQL = 156 "SELECT count(key) FROM sync_data WHERE key>=? AND key<=? AND (flag&0x01=0);"; 157 158 const std::string REMOVE_DEV_DATA_SQL = 159 "DELETE FROM sync_data WHERE device=? AND (flag&0x02=0);"; 160 161 const std::string REMOVE_ALL_DEV_DATA_SQL = 162 "DELETE FROM sync_data WHERE (flag&0x02=0);"; 163 164 const std::string REMOVE_DEV_DATA_SQL_FROM_CACHEHANDLE = 165 "DELETE FROM maindb.sync_data WHERE device=? AND (flag&0x02=0);"; 166 167 const std::string REMOVE_ALL_DEV_DATA_SQL_FROM_CACHEHANDLE = 168 "DELETE FROM maindb.sync_data WHERE (flag&0x02=0);"; 169 170 const std::string SELECT_ENTRY_DEVICE = 171 "SELECT ori_device, device FROM sync_data WHERE key=?;"; 172 173 // sql for migrating data 174 const std::string MIGRATE_LOCAL_SQL_FROM_CACHEHANDLE = 175 "INSERT OR REPLACE INTO maindb.local_data select key, value, timestamp, hash_key from main.local_data;"; 176 const std::string MIGRATE_LOCAL_SQL_FROM_MAINHANDLE = 177 "INSERT OR REPLACE INTO main.local_data select key, value, timestamp, hash_key from cache.local_data;"; 178 179 const std::string MIGRATE_VACUUM_LOCAL_SQL_FROM_CACHEHANDLE = 180 "DELETE FROM maindb.local_data where hash_key in (select hash_key FROM maindb.local_data where key is null);"; 181 const std::string MIGRATE_VACUUM_LOCAL_SQL_FROM_MAINHANDLE = 182 "DELETE FROM main.local_data where hash_key in (select hash_key FROM main.local_data where key is null);"; 183 184 // version is index, order by better than MIN() 185 const std::string MIGRATE_SELECT_MIN_VER_CACHEDATA_FROM_CACHEHANDLE = 186 "SELECT * FROM sync_data where version = (select version from sync_data order by version limit 1);"; 187 const std::string MIGRATE_SELECT_MIN_VER_CACHEDATA_FROM_MAINHANDLE = 188 "SELECT * FROM cache.sync_data where version = (select version from cache.sync_data order by version limit 1);"; 189 190 const std::string GET_MAX_VER_CACHEDATA_FROM_CACHEHANDLE = 191 "select version from sync_data order by version DESC limit 1;"; 192 const std::string GET_MAX_VER_CACHEDATA_FROM_MAINHANDLE = 193 "select version from cache.sync_data order by version DESC limit 1;"; 194 195 const std::string MIGRATE_INSERT_DATA_TO_MAINDB_FROM_CACHEHANDLE = 196 "INSERT INTO maindb.sync_data VALUES(?,?,?,?,?,?,?,?);"; 197 const std::string MIGRATE_UPDATE_DATA_TO_MAINDB_FROM_CACHEHANDLE = 198 "UPDATE maindb.sync_data SET key=?,value=?,timestamp=?,flag=?,device=?,ori_device=?,w_timestamp=? " 199 "WHERE hash_key=?;"; 200 201 const std::string MIGRATE_INSERT_DATA_TO_MAINDB_FROM_MAINHANDLE = 202 "INSERT INTO sync_data VALUES(?,?,?,?,?,?,?,?);"; 203 const std::string MIGRATE_UPDATE_DATA_TO_MAINDB_FROM_MAINHANDLE = 204 "UPDATE sync_data SET key=?,value=?,timestamp=?,flag=?,device=?,ori_device=?,w_timestamp=? WHERE hash_key=?;"; 205 206 const std::string MIGRATE_DEL_DATA_BY_VERSION_FROM_CACHEHANDLE = 207 "DELETE FROM sync_data WHERE version=?;"; 208 const std::string MIGRATE_DEL_DATA_BY_VERSION_FROM_MAINHANDLE = 209 "DELETE FROM cache.sync_data WHERE version=?;"; 210 211 const std::string SELECT_MAIN_SYNC_HASH_SQL_FROM_CACHEHANDLE = "SELECT * FROM maindb.sync_data WHERE hash_key=?;"; 212 213 const std::string REMOVE_META_VALUE_SQL = 214 "DELETE FROM meta_data WHERE key=?;"; 215 const std::string REMOVE_ATTACH_META_VALUE_SQL = 216 "DELETE FROM meta.meta_data WHERE key=?;"; 217 218 const std::string CHECK_DB_INTEGRITY_SQL = "PRAGMA integrity_check;"; 219 220 const std::string REMOVE_META_VALUE_BY_KEY_PREFIX_SQL = 221 "DELETE FROM meta_data WHERE key>=? AND key<=?;"; 222 const std::string REMOVE_ATTACH_META_VALUE_BY_KEY_PREFIX_SQL = 223 "DELETE FROM meta.meta_data WHERE key>=? AND key<=?;"; 224 225 const std::string DELETE_SYNC_DATA_WITH_HASHKEY = "DELETE FROM sync_data where hash_key = ?;"; 226 227 const std::string DELETE_SYNC_DATA_WITH_HASHKEY_FROM_CACHEHANDLE = 228 "DELETE FROM maindb.sync_data where hash_key = ?;"; 229 230 const std::string GET_SYNC_DATA_TIRGGER_SQL = 231 "SELECT name FROM SQLITE_MASTER WHERE TYPE = 'trigger' AND TBL_NAME = 'sync_data' AND name like ?;"; 232 233 constexpr const char *UPDATE_SYNC_DATA_KEY_SQL = 234 "UPDATE sync_data SET key=translate_key(key), hash_key=cal_hash_key(key) WHERE flag&0x01=0"; 235 236 constexpr const char *FUNC_NAME_TRANSLATE_KEY = "translate_key"; 237 238 constexpr const char *FUNC_NAME_CAL_HASH_KEY = "cal_hash_key"; 239 240 const int BIND_KV_KEY_INDEX = 1; 241 const int BIND_KV_VAL_INDEX = 2; 242 const int BIND_LOCAL_TIMESTAMP_INDEX = 3; 243 const int BIND_LOCAL_HASH_KEY_INDEX = 4; 244 245 // binding index just for the get sync data sql 246 const int BIND_BEGIN_STAMP_INDEX = 1; 247 const int BIND_END_STAMP_INDEX = 2; 248 249 // mainDB 250 const int BIND_SYNC_KEY_INDEX = 1; 251 const int BIND_SYNC_VAL_INDEX = 2; 252 const int BIND_SYNC_STAMP_INDEX = 3; 253 const int BIND_SYNC_FLAG_INDEX = 4; 254 const int BIND_SYNC_DEV_INDEX = 5; 255 const int BIND_SYNC_ORI_DEV_INDEX = 6; 256 const int BIND_SYNC_HASH_KEY_INDEX = 7; 257 const int BIND_SYNC_W_TIME_INDEX = 8; 258 259 const int BIND_SYNC_UPDATE_W_TIME_INDEX = 7; 260 const int BIND_SYNC_UPDATE_HASH_KEY_INDEX = 8; 261 262 // cacheDB 263 const int BIND_CACHE_LOCAL_KEY_INDEX = 1; 264 const int BIND_CACHE_LOCAL_VAL_INDEX = 2; 265 const int BIND_CACHE_LOCAL_TIMESTAMP_INDEX = 3; 266 const int BIND_CACHE_LOCAL_HASH_KEY_INDEX = 4; 267 const int BIND_CACHE_LOCAL_FLAG_INDEX = 5; 268 269 const int BIND_CACHE_SYNC_KEY_INDEX = 1; 270 const int BIND_CACHE_SYNC_VAL_INDEX = 2; 271 const int BIND_CACHE_SYNC_STAMP_INDEX = 3; 272 const int BIND_CACHE_SYNC_FLAG_INDEX = 4; 273 const int BIND_CACHE_SYNC_DEV_INDEX = 5; 274 const int BIND_CACHE_SYNC_ORI_DEV_INDEX = 6; 275 const int BIND_CACHE_SYNC_HASH_KEY_INDEX = 7; 276 const int BIND_CACHE_SYNC_W_TIME_INDEX = 8; 277 const int BIND_CACHE_SYNC_VERSION_INDEX = 9; 278 279 // select result index for the item for sync database 280 const int SYNC_RES_KEY_INDEX = 0; 281 const int SYNC_RES_VAL_INDEX = 1; 282 const int SYNC_RES_TIME_INDEX = 2; 283 const int SYNC_RES_FLAG_INDEX = 3; 284 const int SYNC_RES_DEVICE_INDEX = 4; 285 const int SYNC_RES_ORI_DEV_INDEX = 5; 286 const int SYNC_RES_HASH_KEY_INDEX = 6; 287 const int SYNC_RES_W_TIME_INDEX = 7; 288 const int SYNC_RES_VERSION_INDEX = 8; // Available in cacheDB. 289 290 // get kv data Response index 291 const int GET_KV_RES_LOCAL_TIME_INDEX = 1; 292 const int GET_KV_RES_SYNC_TIME_INDEX = 1; 293 294 const int BIND_ORI_DEVICE_ID = 0; 295 const int BIND_PRE_DEVICE_ID = 1; 296 297 const Key REMOVE_DEVICE_DATA_KEY = {'r', 'e', 'm', 'o', 'v', 'e'}; 298 } // namespace DistributedDB 299 300 #endif // SQLITE_SINGLE_VER_STORAGE_EXECUTOR_SQL_H 301