1 /* 2 * Copyright (c) 2021-2022 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 COMMON_H 17 #define COMMON_H 18 19 #include <string> 20 21 #include "contacts_path.h" 22 23 namespace OHOS { 24 namespace Contacts { 25 // error code 26 constexpr int RDB_EXECUTE_OK = 0; 27 constexpr int RDB_EXECUTE_FAIL = -1; 28 constexpr int OPERATION_ERROR = -1; 29 constexpr int OPERATION_OK = 0; 30 constexpr int RDB_OBJECT_EMPTY = -1; 31 constexpr int PARAMETER_EMPTY = -1; 32 33 constexpr int DELETE_MARK = 1; 34 constexpr int ID_EMPTY = 0; 35 constexpr int BATCH_INSERT_COUNT = 40; 36 37 // ResultSet get Num 38 constexpr int RESULT_GET_ONE = 1; 39 constexpr int RESULT_GET_TWO = 2; 40 41 // contact table has Judge 42 constexpr int HAS_NAME = 1; 43 constexpr int HAS_PHONE = 2; 44 constexpr int HAS_EMAIL = 3; 45 constexpr int HAS_GROUP = 4; 46 47 // Contacts DataBase Code 48 constexpr int CONTACTS_CONTACT = 10000; 49 constexpr int CONTACTS_RAW_CONTACT = 10001; 50 constexpr int CONTACTS_CONTACT_DATA = 10002; 51 constexpr int CONTACTS_CONTACT_TYPE = 10003; 52 constexpr int CONTACTS_DELETED_RAW_CONTACT = 10004; 53 constexpr int CONTACTS_GROUPS = 10005; 54 constexpr int CONTACTS_ACCOUNT = 10006; 55 constexpr int CONTACTS_BLOCKLIST = 10007; 56 constexpr int CONTACTS_SEARCH_CONTACT = 10008; 57 constexpr int CONTACTS_SYNC_STATUS = 10009; 58 constexpr int CONTACTS_PHOTO_FILES = 100010; 59 constexpr int CONTACTS_LOCAL_LANG = 10011; 60 constexpr int CONTACTS_DATABASE_BACKUP_TASK = 10012; 61 constexpr int CONTACTS_DELETE = 10013; 62 constexpr int QUERY_MERGE_LIST = 10014; 63 constexpr int SPLIT_CONTACT = 10015; 64 constexpr int MANUAL_MERGE = 10016; 65 constexpr int AUTO_MERGE = 10017; 66 constexpr int CONTACTS_DELETE_RECORD = 10018; 67 constexpr int CONTACT_TYPE = 10019; 68 constexpr int CONTACT_BACKUP = 10020; 69 constexpr int CONTACT_RECOVER = 10021; 70 71 constexpr int ACCOUNT = 10020; 72 constexpr int CALLLOG = 20000; 73 constexpr int VOICEMAIL = 20001; 74 constexpr int REPLAYING = 20002; 75 76 // PROFILE DATABASE CODE 77 constexpr int PROFILE_CONTACT = 30000; 78 constexpr int PROFILE_RAW_CONTACT = 30001; 79 constexpr int PROFILE_CONTACT_DATA = 30002; 80 constexpr int PROFILE_CONTACT_TYPE = 30003; 81 constexpr int PROFILE_DELETED_RAW_CONTACT = 30004; 82 constexpr int PROFILE_GROUPS = 30005; 83 constexpr int PROFILE_ACCOUNT = 30006; 84 constexpr int PROFILE_BLOCKLIST = 30007; 85 constexpr int PROFILE_SEARCH_CONTACT = 30008; 86 constexpr int PROFILE_SYNC_STATUS = 30009; 87 constexpr int PROFILE_PHOTO_FILES = 300010; 88 constexpr int PROFILE_LOCAL_LANG = 30011; 89 constexpr int PROFILE_DATABASE_BACKUP_TASK = 30012; 90 constexpr int PROFILE_DELETE_RECORD = 30013; 91 constexpr int PROFILE_TYPE = 30014; 92 constexpr int PROFILE_DELETE = 30015; 93 constexpr int PROFILE_BACKUP = 30016; 94 constexpr int PROFILE_RECOVER = 30017; 95 96 // DATABASE OPEN VERSION 97 constexpr int DATABASE_OPEN_VERSION = 1; 98 99 // DATABASE NEW VERSION 100 constexpr int DATABASE_NEW_VERSION = 2; 101 102 // REQUEST PARAMS ARGS NUM 103 constexpr int REQUEST_PARAMS_NUM = 2; 104 105 constexpr const char *PROFILE_DATABASE_NAME = "profile"; 106 constexpr const char *CONTACT_DATABASE_NAME = "contacts"; 107 108 // Rebase 109 constexpr int REBASE_SETTING = 0; 110 constexpr int REBASE_COUNT = 5; 111 112 // MergeMode Number 113 constexpr int MERGE_MODE_DEFAULT = 0; 114 constexpr int MERGE_MODE_MANUAL = 1; 115 constexpr int MERGE_MODE_AUTO = 2; 116 117 // Uri 118 constexpr const char *CONTACT_URI = "datashare:///com.ohos.contactsdataability"; 119 constexpr const char *VOICEMAIL_URI = "datashare:///com.ohos.voicemailability"; 120 constexpr const char *CALL_LOG_URI = "datashare:///com.ohos.calllogability"; 121 122 constexpr const char *CREATE_CALLLOG = 123 "CREATE TABLE IF NOT EXISTS [calllog](" 124 "[id] INTEGER PRIMARY KEY AUTOINCREMENT, " 125 "[slot_id] INTEGER NOT NULL DEFAULT 0, " 126 "[phone_number] TEXT, " 127 "[display_name] TEXT, " 128 "[call_direction] INTEGER NOT NULL DEFAULT 0, " 129 "[voicemail_uri] TEXT, " 130 "[sim_type] INTEGER , " 131 "[is_hd] INTEGER , " 132 "[is_read] INTEGER NOT NULL DEFAULT 0, " 133 "[ring_duration] INTEGER NOT NULL DEFAULT 0, " 134 "[talk_duration] INTEGER NOT NULL DEFAULT 0, " 135 "[format_number] TEXT, " 136 "[quicksearch_key] TEXT, " 137 "[number_type] INTEGER, " 138 "[number_type_name] TEXT, " 139 "[begin_time] INTEGER NOT NULL DEFAULT 0, " 140 "[end_time] INTEGER NOT NULL DEFAULT 0, " 141 "[answer_state] INTEGER , " 142 "[create_time] INTEGER, " 143 "[number_location] TEXT, " 144 "[photo_id] INTEGER, " 145 "[photo_uri] TEXT, " 146 "[country_iso_code] INTEGER, " 147 "[extra1] TEXT, " 148 "[extra2] TEXT, " 149 "[extra3] TEXT, " 150 "[extra4] TEXT, " 151 "[extra5] TEXT, " 152 "[extra6] TEXT)"; 153 154 constexpr const char *CREATE_VOICEMAIL = 155 "CREATE TABLE IF NOT EXISTS [voicemail](" 156 "[id] INTEGER PRIMARY KEY AUTOINCREMENT, " 157 "[phone_number] TEXT, " 158 "[quicksearch_key] TEXT, " 159 "[display_name] TEXT, " 160 "[voicemail_uri] TEXT, " 161 "[voicemail_type] INTEGER NOT NULL DEFAULT 0, " 162 "[voice_file_size] INTEGER NOT NULL DEFAULT 0, " 163 "[voice_duration] INTEGER NOT NULL DEFAULT 0, " 164 "[voice_status] INTEGER NOT NULL DEFAULT 0, " 165 "[origin_type] TEXT, " 166 "[create_time] INTEGER);"; 167 168 constexpr const char *CREATE_REPLYING = 169 "CREATE TABLE [replying](" 170 "[id] INTEGER PRIMARY KEY AUTOINCREMENT, " 171 "[name] TEXT, " 172 "[replying_uri] TEXT, " 173 "[replying_path] TEXT, " 174 "[phone_account_id] TEXT, " 175 "[has_content] NOT NULL DEFAULT 0, " 176 "[duration] INTEGER NOT NULL DEFAULT 0, " 177 "[content_type] TEXT, " 178 "[last_modified] INTEGER NOT NULL DEFAULT 0, " 179 "[synced] INTEGER NOT NULL DEFAULT 0 );"; 180 181 constexpr const char *CREATE_CONTACT = 182 "CREATE TABLE IF NOT EXISTS [contact](" 183 "[id] INTEGER PRIMARY KEY AUTOINCREMENT, " 184 "[name_raw_contact_id] INTEGER REFERENCES raw_contact(id), " 185 "[photo_id] INTEGER, " 186 "[photo_file_id] INTEGER REFERENCES [photo_files]([id]), " 187 "[personal_ringtone] TEXT, " 188 "[is_transfer_voicemail] INTEGER NOT NULL DEFAULT 0, " 189 "[company] TEXT, " 190 "[position] TEXT, " 191 "[quick_search_key] TEXT, " 192 "[read_only] INTEGER NOT NULL DEFAULT 0, " 193 "[personal_notification_ringtone] TEXT, " 194 "[has_phone_number] INTEGER NOT NULL DEFAULT 0, " 195 "[has_display_name] INTEGER NOT NULL DEFAULT 0, " 196 "[has_email] INTEGER NOT NULL DEFAULT 0, " 197 "[has_group] INTEGER NOT NULL DEFAULT 0)"; 198 199 constexpr const char *CREATE_CONTACT_INDEX = 200 "CREATE INDEX IF NOT EXISTS [contact_name_raw_contact_id_index] " 201 "ON [contact] ([name_raw_contact_id])"; 202 203 constexpr const char *CREATE_RAW_CONTACT = 204 "CREATE TABLE IF NOT EXISTS [raw_contact]( " 205 "[id] INTEGER PRIMARY KEY AUTOINCREMENT, " 206 "[contact_id] INTEGER REFERENCES [contact]([id]), " 207 "[photo_id] INTEGER, " 208 "[photo_file_id] INTEGER REFERENCES [photo_files]([id]), " 209 "[is_transfer_voicemail] INTEGER NOT NULL DEFAULT 0, " 210 "[personal_ringtone] TEXT, " 211 "[is_deleted] INTEGER NOT NULL DEFAULT 0, " 212 "[personal_notification_ringtone] TEXT, " 213 "[photo_first_name] TEXT, " 214 "[account_id] INTEGER, " 215 "[version] INTEGER NOT NULL DEFAULT 0, " 216 "[display_name] TEXT, " 217 "[sort] TEXT, " 218 "[contacted_count] INTEGER NOT NULL DEFAULT 0, " 219 "[lastest_contacted_time] INTEGER NOT NULL DEFAULT 0, " 220 "[favorite] INTEGER NOT NULL DEFAULT 0, " 221 "[favorite_order] TEXT, " 222 "[phonetic_name] TEXT, " 223 "[phonetic_name_type] INTEGER , " 224 "[company] TEXT, " 225 "[position] TEXT, " 226 "[read_only] INTEGER NOT NULL DEFAULT 0, " 227 "[sort_first_letter] TEXT, " 228 "[merge_mode] INTEGER NOT NULL DEFAULT 0, " 229 "[is_need_merge] INTEGER NOT NULL DEFAULT 1, " 230 "[merge_status] INTEGER NOT NULL DEFAULT 1, " 231 "[is_merge_target] INTEGER NOT NULL DEFAULT 0, " 232 "[vibration_setting] INTEGER NOT NULL DEFAULT 0, " 233 "[sync_id] INTEGER, " 234 "[syn_1] TEXT, " 235 "[syn_2] TEXT, " 236 "[syn_3] TEXT)"; 237 238 constexpr const char *CREATE_CONTACT_DATA = 239 "CREATE TABLE IF NOT EXISTS [contact_data]( " 240 "[id] INTEGER PRIMARY KEY AUTOINCREMENT, " 241 "[type_id] INTEGER REFERENCES [contact_type]([id]), " 242 "[raw_contact_id] INTEGER REFERENCES [raw_contact]([id]), " 243 "[read_only] INTEGER NOT NULL DEFAULT 0, " 244 "[version] INTEGER NOT NULL DEFAULT 0, " 245 "[is_preferred_number] INTEGER NOT NULL DEFAULT 0, " 246 "[detail_info] TEXT, " 247 "[family_name] TEXT, " 248 "[middle_name_phonetic] TEXT, " 249 "[given_name] TEXT, " 250 "[given_name_phonetic] TEXT, " 251 "[alias_detail_info] TEXT, " 252 "[phonetic_name] TEXT, " 253 "[position] TEXT, " 254 "[extend1] TEXT, " 255 "[extend2] TEXT, " 256 "[extend3] TEXT, " 257 "[extend4] TEXT, " 258 "[city] TEXT, " 259 "[country] TEXT, " 260 "[neighborhood] TEXT, " 261 "[pobox] TEXT, " 262 "[postcode] TEXT, " 263 "[region] TEXT, " 264 "[street] TEXT, " 265 "[alpha_name] TEXT, " 266 "[other_lan_last_name] TEXT, " 267 "[other_lan_first_name] TEXT, " 268 "[extend5] TEXT, " 269 "[lan_style] TEXT, " 270 "[custom_data] TEXT, " 271 "[extend6] TEXT, " 272 "[extend7] TEXT, " 273 "[blob_data] BLOB, " 274 "[syn_1] TEXT, " 275 "[syn_2] TEXT, " 276 "[syn_3] TEXT)"; 277 constexpr const char *CREATE_CONTACT_TYPE = 278 "CREATE TABLE IF NOT EXISTS [contact_type]( " 279 "[id] INTEGER PRIMARY KEY AUTOINCREMENT, " 280 "[content_type] TEXT )"; 281 282 constexpr const char *CREATE_DELETED_RAW_CONTACT = 283 "CREATE TABLE IF NOT EXISTS [deleted_raw_contact]( " 284 "[id] INTEGER PRIMARY KEY AUTOINCREMENT, " 285 "[contact_id] INTEGER REFERENCES [contact]([id])," 286 "[raw_contact_id] INTEGER REFERENCES [raw_contact]([id]), " 287 "[delete_source] TEXT, " 288 "[delete_time] INTEGER NOT NULL DEFAULT 0, " 289 "[display_name] TEXT, " 290 "[delete_account] TEXT, " 291 "[backup_data] TEXT, " 292 "[delete_date] TEXT, " 293 "[is_deleted] INTEGER NOT NULL DEFAULT 0)"; 294 295 constexpr const char *CREATE_GROUPS = 296 "CREATE TABLE IF NOT EXISTS [groups]( " 297 "[id] INTEGER PRIMARY KEY AUTOINCREMENT, " 298 "[account_id] INTEGER REFERENCES [account]([id]), " 299 "[group_name] TEXT, " 300 "[group_notes] TEXT, " 301 "[is_deleted] INTEGER NOT NULL DEFAULT 0, " 302 "[group_ringtone] TEXT, " 303 "[ringtone_modify_time] INTEGER NOT NULL DEFAULT 0, " 304 "[lastest_modify_time] INTEGER NOT NULL DEFAULT 0)"; 305 306 constexpr const char *CREATE_ACCOUNT = 307 "CREATE TABLE IF NOT EXISTS [account]( " 308 "[id] INTEGER PRIMARY KEY AUTOINCREMENT, " 309 "[account_name] TEXT, " 310 "[account_type] TEXT, " 311 "[data_info] TEXT)"; 312 313 constexpr const char *CREATE_CONTACT_BLOCKLIST = 314 "CREATE TABLE IF NOT EXISTS [contact_blocklist]( " 315 "[id] INTEGER PRIMARY KEY AUTOINCREMENT, " 316 "[types] INTEGER NOT NULL DEFAULT 0, " 317 "[phone_number] TEXT, " 318 "[content] TEXT, " 319 "[time_stamp] INTEGER NOT NULL DEFAULT 0)"; 320 321 constexpr const char *CREATE_SEARCH_CONTACT = 322 "CREATE TABLE IF NOT EXISTS [search_contact]( " 323 "[id] INTEGER PRIMARY KEY AUTOINCREMENT, " 324 "[account_id] INTEGER REFERENCES [account]([id]), " 325 "[contact_id] INTEGER REFERENCES [contact]([id]), " 326 "[raw_contact_id] INTEGER REFERENCES [raw_contact]([id]), " 327 "[search_name] TEXT, " 328 "[display_name] TEXT, " 329 "[phonetic_name] TEXT, " 330 "[photo_id] TEXT, " 331 "[photo_file_id] INTEGER REFERENCES [photo_files]([id]))"; 332 333 constexpr const char *CREATE_PHOTO_FILES = 334 "CREATE TABLE IF NOT EXISTS [photo_files]( " 335 "[id] INTEGER PRIMARY KEY AUTOINCREMENT, " 336 "[file_height] INTEGER NOT NULL DEFAULT 0, " 337 "[file_width] INTEGER NOT NULL DEFAULT 0, " 338 "[file_size] INTEGER NOT NULL DEFAULT 0)"; 339 340 constexpr const char *CREATE_LOCAL_LANG = 341 "CREATE TABLE IF NOT EXISTS[local_lang]( " 342 "[id] INTEGER PRIMARY KEY AUTOINCREMENT, " 343 "[local] TEXT)"; 344 345 constexpr const char *CREATE_DATABASE_BACKUP_TASK = 346 "CREATE TABLE IF NOT EXISTS[database_backup_task]( " 347 "[id] INTEGER PRIMARY KEY AUTOINCREMENT, " 348 "[backup_time] TEXT, " 349 "[backup_path] TEXT, " 350 "[remarks] TEXT)"; 351 352 constexpr const char *CREATE_INSERT_BACKUP_TIME = 353 "CREATE TRIGGER [insert_database_backup_task] AFTER INSERT ON [database_backup_task] " 354 " BEGIN " 355 " UPDATE " 356 " [database_backup_task] " 357 " SET " 358 " [backup_time] = STRFTIME ('%s', 'now') " 359 " WHERE " 360 " [id] = [NEW].[id]; " 361 " END "; 362 363 constexpr const char *CREATE_CONTACT_INDEX_DATA1 = 364 "CREATE INDEX IF NOT EXISTS [contact_data_type_contact_data_index] " 365 "ON [contact_data] ([type_id],[detail_info])"; 366 constexpr const char *CREATE_CONTACT_INDEX_DATA2 = 367 "CREATE INDEX IF NOT EXISTS [contact_data_raw_contact_id] " 368 "ON [contact_data] ([raw_contact_id])"; 369 370 constexpr const char *CREATE_SEARCH_CONTACT_INDEX1 = 371 "CREATE INDEX IF NOT EXISTS [search_contact_id_index] " 372 "ON [search_contact] ([contact_id])"; 373 constexpr const char *CREATE_SEARCH_CONTACT_INDEX2 = 374 "CREATE INDEX IF NOT EXISTS [search_raw_contact_id_index] " 375 "ON [search_contact] ([raw_contact_id])"; 376 377 constexpr const char *CREATE_RAW_CONTACT_INDEX = 378 "CREATE INDEX IF NOT EXISTS [raw_contact_id_index] " 379 "ON [raw_contact] ([contact_id])"; 380 381 constexpr const char *CREATE_VIEW_CONTACT = 382 "CREATE VIEW IF NOT EXISTS[view_contact] AS SELECT " 383 "[contact].[id] AS [id], " 384 "[contact].[photo_id] AS [photo_id], " 385 "[contact].[photo_file_id] AS [photo_file_id], " 386 "[contact].[quick_search_key] AS [quick_search_key], " 387 "[contact].[has_phone_number] AS [has_phone_number], " 388 "[contact].[has_display_name] AS [has_display_name], " 389 "[contact].[has_email] AS [has_email], " 390 "[contact].[has_group] AS [has_group], " 391 "[name_raw_contact_id], " 392 "[name_raw_contact].[account_id] AS [account_id], " 393 "[name_raw_contact].[is_transfer_voicemail] AS [is_transfer_voicemail], " 394 "[name_raw_contact].[personal_ringtone] AS [personal_ringtone], " 395 "[name_raw_contact].[is_deleted] AS [is_deleted], " 396 "[name_raw_contact].[photo_first_name] AS [photo_first_name], " 397 "[name_raw_contact].[version] AS [version], " 398 "[name_raw_contact].[display_name] AS [display_name], " 399 "[name_raw_contact].[sort] AS [sort], " 400 "[name_raw_contact].[contacted_count] AS [contacted_count], " 401 "[name_raw_contact].[lastest_contacted_time] AS [lastest_contacted_time], " 402 "[name_raw_contact].[favorite] AS [favorite], " 403 "[name_raw_contact].[favorite_order] AS [favorite_order], " 404 "[name_raw_contact].[phonetic_name] AS [phonetic_name], " 405 "[name_raw_contact].[phonetic_name_type] AS [phonetic_name_type], " 406 "[name_raw_contact].[company] AS [company], " 407 "[name_raw_contact].[position] AS [position], " 408 "[name_raw_contact].[read_only] AS [read_only], " 409 "[name_raw_contact].[sort_first_letter] AS [sort_first_letter], " 410 "[name_raw_contact].[merge_mode] AS [merge_mode], " 411 "[name_raw_contact].[personal_notification_ringtone] AS [personal_notification_ringtone], " 412 "[name_raw_contact].[is_need_merge] AS [is_need_merge], " 413 "[name_raw_contact].[merge_status] AS [merge_status], " 414 "[name_raw_contact].[is_merge_target] AS [is_merge_target], " 415 "[name_raw_contact].[vibration_setting] AS [vibration_setting], " 416 "[name_raw_contact].[sync_id] AS [sync_id], " 417 "[name_raw_contact].[syn_1] AS [syn_1], " 418 "[name_raw_contact].[syn_2] AS [syn_2], " 419 "[name_raw_contact].[syn_3] AS [syn_3], " 420 "[account].[account_name] AS [account_name], " 421 "[account].[account_type] AS [account_type], " 422 "[photo_files].[file_size] AS [file_size], " 423 "[photo_files].[file_height] AS [file_height], " 424 "[photo_files].[file_width] AS [file_width] " 425 "FROM [contact] " 426 "JOIN [raw_contact] AS [name_raw_contact] " 427 "ON ([name_raw_contact_id] = [name_raw_contact].[id]) " 428 "LEFT JOIN [account] ON " 429 "([name_raw_contact].[account_id] = [account].[id]) " 430 "LEFT JOIN [photo_files] ON " 431 "([photo_files].[id] = [contact].[photo_file_id])"; 432 433 constexpr const char *CREATE_VIEW_RAW_CONTACT = 434 "CREATE VIEW IF NOT EXISTS [view_raw_contact] AS SELECT " 435 "[contact_id], " 436 "[raw_contact].[id] AS [id], " 437 "[raw_contact].[account_id] AS [account_id], " 438 "[raw_contact].[photo_id] AS [photo_id], " 439 "[raw_contact].[photo_file_id] AS [photo_file_id], " 440 "[raw_contact].[is_transfer_voicemail] AS [is_transfer_voicemail], " 441 "[raw_contact].[personal_ringtone] AS [personal_ringtone], " 442 "[raw_contact].[is_deleted] AS [is_deleted], " 443 "[raw_contact].[photo_first_name] AS [photo_first_name], " 444 "[raw_contact].[version] AS [version], " 445 "[raw_contact].[display_name] AS [display_name], " 446 "[raw_contact].[sort] AS [sort], " 447 "[raw_contact].[contacted_count] AS [contacted_count], " 448 "[raw_contact].[lastest_contacted_time] AS [lastest_contacted_time], " 449 "[raw_contact].[favorite] AS [favorite], " 450 "[raw_contact].[favorite_order] AS [favorite_order], " 451 "[raw_contact].[phonetic_name] AS [phonetic_name], " 452 "[raw_contact].[phonetic_name_type] AS [phonetic_name_type], " 453 "[raw_contact].[company] AS [company], " 454 "[raw_contact].[position] AS [position], " 455 "[raw_contact].[read_only] AS [read_only], " 456 "[raw_contact].[sort_first_letter] AS [sort_first_letter], " 457 "[raw_contact].[merge_mode] AS [merge_mode], " 458 "[raw_contact].[is_need_merge] AS [is_need_merge], " 459 "[raw_contact].[merge_status] AS [merge_status], " 460 "[raw_contact].[is_merge_target] AS [is_merge_target], " 461 "[raw_contact].[vibration_setting] AS [vibration_setting], " 462 "[raw_contact].[sync_id] AS [sync_id], " 463 "[raw_contact].[personal_notification_ringtone] AS [personal_notification_ringtone], " 464 "[raw_contact].[syn_1] AS [syn_1], " 465 "[raw_contact].[syn_2] AS [syn_2], " 466 "[raw_contact].[syn_3] AS [syn_3], " 467 "[photo_files].[file_size] AS [file_size], " 468 "[photo_files].[file_height] AS [file_height], " 469 "[photo_files].[file_width] AS [file_width], " 470 "[account].[account_name] AS [account_name], " 471 "[account].[account_type] AS [account_type] " 472 "FROM [raw_contact] " 473 "LEFT JOIN [account] ON " 474 "([raw_contact].[account_id] = [account].[id]) " 475 "LEFT JOIN [photo_files] ON " 476 "([photo_files].[id] = [photo_file_id])"; 477 478 constexpr const char *CREATE_VIEW_CONTACT_DATA = 479 "CREATE VIEW IF NOT EXISTS [view_contact_data] AS SELECT " 480 "[contact_data].[id] AS [id], " 481 "[contact_data].[type_id] AS [type_id], " 482 "[contact_data].[raw_contact_id] AS [raw_contact_id], " 483 "[contact_data].[read_only] AS [read_only], " 484 "[contact_data].[version] AS [version], " 485 "[contact_data].[family_name] AS [family_name], " 486 "[contact_data].[middle_name_phonetic] AS [middle_name_phonetic], " 487 "[contact_data].[given_name] AS [given_name], " 488 "[contact_data].[given_name_phonetic] AS [given_name_phonetic], " 489 "[contact_data].[is_preferred_number] AS [is_preferred_number], " 490 "[contact_data].[phonetic_name] AS [phonetic_name], " 491 "[contact_data].[detail_info] AS [detail_info], " 492 "[contact_data].[alias_detail_info] AS [alias_detail_info], " 493 "[contact_data].[position] AS [position], " 494 "[contact_data].[extend1] AS [extend1], " 495 "[contact_data].[extend2] AS [extend2], " 496 "[contact_data].[extend3] AS [extend3], " 497 "[contact_data].[extend4] AS [extend4], " 498 "[contact_data].[alpha_name] AS [alpha_name], " 499 "[contact_data].[other_lan_last_name] AS [other_lan_last_name], " 500 "[contact_data].[other_lan_first_name] AS [other_lan_first_name], " 501 "[contact_data].[extend5] AS [extend5], " 502 "[contact_data].[lan_style] AS [lan_style], " 503 "[contact_data].[custom_data] AS [custom_data], " 504 "[contact_data].[extend6] AS [extend6], " 505 "[contact_data].[extend7] AS [extend7], " 506 "[contact_data].[blob_data] AS [blob_data], " 507 "[contact_data].[syn_1] AS [syn_1], " 508 "[contact_data].[city] AS [city], " 509 "[contact_data].[syn_2] AS [syn_2], " 510 "[contact_data].[syn_3] AS [syn_3], " 511 "[contact_data].[country] AS [country], " 512 "[contact_data].[neighborhood] AS [neighborhood], " 513 "[contact_data].[pobox] AS [pobox], " 514 "[contact_data].[postcode] AS [postcode], " 515 "[contact_data].[region] AS [region], " 516 "[contact_data].[street] AS [street], " 517 "[contact_type].[content_type] AS [content_type], " 518 "[account].[account_name] AS [account_name], " 519 "[account].[account_type] AS [account_type], " 520 "[account].[data_info] AS [data_info], " 521 "[account].[id] AS [account_id], " 522 "[groups].[id] AS [group_id], " 523 "[groups].[group_name] AS [group_name], " 524 "[groups].[group_notes] AS [group_notes], " 525 "[groups].[is_deleted] AS [group_is_deleted], " 526 "[groups].[group_ringtone] AS [group_ringtone], " 527 "[groups].[ringtone_modify_time] AS [ringtone_modify_time], " 528 "[groups].[lastest_modify_time] AS [lastest_modify_time], " 529 "[photo_files].[file_size] AS [file_size], " 530 "[photo_files].[file_height] AS [file_height], " 531 "[photo_files].[file_width] AS [file_width], " 532 "[contact].[id] AS [contact_id], " 533 "[contact].[photo_id] AS [photo_id], " 534 "[contact].[photo_file_id] AS [photo_file_id], " 535 "[contact].[personal_ringtone] AS [personal_ringtone], " 536 "[contact].[is_transfer_voicemail] AS [is_transfer_voicemail], " 537 "[contact].[company] AS [company], " 538 "[contact].[quick_search_key] AS [quick_search_key], " 539 "[contact].[personal_notification_ringtone] AS " 540 "[personal_notification_ringtone], " 541 "[contact].[has_phone_number] AS [has_phone_number], " 542 "[contact].[has_display_name] AS [has_display_name], " 543 "[contact].[has_email] AS [has_email], " 544 "[contact].[has_group] AS [has_group], " 545 "[raw_contact].[contacted_count] AS [contacted_count], " 546 "[raw_contact].[lastest_contacted_time] AS [lastest_contacted_time], " 547 "[raw_contact].[favorite] AS [favorite], " 548 "[raw_contact].[favorite_order] AS [favorite_order], " 549 "[raw_contact].[display_name] AS [display_name], " 550 "[raw_contact].[sort] AS [sort], " 551 "[raw_contact].[sort_first_letter] AS [sort_first_letter], " 552 "[raw_contact].[is_deleted] AS [is_deleted], " 553 "[raw_contact].[phonetic_name_type] AS [phonetic_name_type], " 554 "[raw_contact].[photo_first_name] AS [photo_first_name] " 555 "FROM [contact_data] " 556 "JOIN [raw_contact] ON " 557 "([contact_data].[raw_contact_id] = [raw_contact].[id]) " 558 "JOIN [contact] ON ([contact].[id] = [raw_contact].[contact_id]) " 559 "JOIN [raw_contact] AS [name_raw_contact] ON " 560 "([name_raw_contact_id] = [name_raw_contact].[id]) " 561 "LEFT JOIN [account] ON " 562 "([raw_contact].[account_id] = [account].[id]) " 563 "LEFT JOIN [contact_type] ON " 564 "([contact_type].[id] = [contact_data].[type_id]) " 565 "LEFT JOIN [groups] ON " 566 "([contact_type].[content_type] = 'group_membership' " 567 "AND [groups].[id] = [contact_data].[detail_info]) " 568 "LEFT JOIN [photo_files] ON " 569 "([contact_type].[content_type] = 'photo' " 570 "AND [photo_files].[id] = [raw_contact].[photo_file_id])"; 571 572 constexpr const char *CREATE_SEARCH_CONTACT_VIEW = 573 "CREATE VIEW IF NOT EXISTS [search_contact_view] AS SELECT " 574 "[search_contact].[id] AS [id], " 575 "[search_contact].[account_id] AS [account_id], " 576 "[search_contact].[contact_id] AS [contact_id], " 577 "[search_contact].[raw_contact_id] AS [raw_contact_id], " 578 "[search_contact].[search_name] AS [search_name], " 579 "[search_contact].[photo_id] AS [photo_id], " 580 "[search_contact].[photo_file_id] AS [photo_file_id], " 581 "[contact_type].[content_type] AS [content_type], " 582 "[account].[account_name] AS [account_name], " 583 "[account].[account_type] AS [account_type], " 584 "[account].[data_info] AS [data_info], " 585 "[groups].[group_name] AS [group_name], " 586 "[groups].[group_notes] AS [group_notes], " 587 "[groups].[is_deleted] AS [group_is_deleted], " 588 "[groups].[group_ringtone] AS [group_ringtone], " 589 "[groups].[ringtone_modify_time] AS [ringtone_modify_time], " 590 "[groups].[lastest_modify_time] AS [lastest_modify_time], " 591 "[photo_files].[file_size] AS [file_size], " 592 "[photo_files].[file_height] AS [file_height], " 593 "[photo_files].[file_width] AS [file_width], " 594 "[contact].[personal_ringtone] AS [personal_ringtone], " 595 "[contact].[is_transfer_voicemail] AS [is_transfer_voicemail], " 596 "[contact].[personal_notification_ringtone] AS " 597 "[personal_notification_ringtone], " 598 "[contact].[has_phone_number] AS [has_phone_number], " 599 "[contact].[has_display_name] AS [has_display_name], " 600 "[contact].[has_email] AS [has_email], " 601 "[contact].[has_group] AS [has_group], " 602 "[raw_contact].[contacted_count] AS [contacted_count], " 603 "[raw_contact].[favorite] AS [favorite], " 604 "[raw_contact].[favorite_order] AS [favorite_order], " 605 "[raw_contact].[display_name] AS [display_name], " 606 "[raw_contact].[lastest_contacted_time] AS [lastest_contacted_time], " 607 "[raw_contact].[sort_first_letter] AS [sort_first_letter], " 608 "[raw_contact].[sort] AS [sort], " 609 "[raw_contact].[photo_first_name] AS [photo_first_name], " 610 "[raw_contact].[personal_notification_ringtone] AS [personal_notification_ringtone], " 611 "[raw_contact].[is_deleted] AS [is_deleted], " 612 "[contact_data].[type_id] AS [type_id], " 613 "[contact_data].[phonetic_name] AS [phonetic_name], " 614 "[contact_data].[raw_contact_id] AS [raw_contact_id], " 615 "[contact_data].[read_only] AS [read_only], " 616 "[contact_data].[version] AS [version], " 617 "[contact_data].[alias_detail_info] AS [alias_detail_info], " 618 "[contact_data].[is_preferred_number] AS [is_preferred_number], " 619 "[contact_data].[detail_info] AS [detail_info], " 620 "[contact_data].[city] AS [city], " 621 "[contact_data].[position] AS [position], " 622 "[contact_data].[middle_name_phonetic] AS [middle_name_phonetic], " 623 "[contact_data].[given_name] AS [given_name], " 624 "[contact_data].[family_name] AS [family_name], " 625 "[contact_data].[given_name_phonetic] AS [given_name_phonetic], " 626 "[contact_data].[country] AS [country], " 627 "[contact_data].[neighborhood] AS [neighborhood], " 628 "[contact_data].[pobox] AS [pobox], " 629 "[contact_data].[postcode] AS [postcode], " 630 "[contact_data].[region] AS [region], " 631 "[contact_data].[street] AS [street], " 632 "[contact_data].[extend1] AS [extend1], " 633 "[contact_data].[extend2] AS [extend2], " 634 "[contact_data].[extend3] AS [extend3], " 635 "[contact_data].[extend4] AS [extend4], " 636 "[contact_data].[alpha_name] AS [alpha_name], " 637 "[contact_data].[other_lan_last_name] AS [other_lan_last_name], " 638 "[contact_data].[other_lan_first_name] AS [other_lan_first_name], " 639 "[contact_data].[extend5] AS [extend5], " 640 "[contact_data].[lan_style] AS [lan_style], " 641 "[contact_data].[custom_data] AS [custom_data], " 642 "[contact_data].[extend6] AS [extend6], " 643 "[contact_data].[extend7] AS [extend7], " 644 "[contact_data].[blob_data] AS [blob_data], " 645 "[contact_data].[syn_1] AS [syn_1], " 646 "[contact_data].[syn_2] AS [syn_2], " 647 "[contact_data].[syn_3] AS [syn_3] " 648 "FROM [search_contact] " 649 "JOIN [raw_contact] ON " 650 "([search_contact].[raw_contact_id] = [raw_contact].[id]) " 651 "JOIN [contact] ON " 652 "([contact].[id] = [raw_contact].[contact_id]) " 653 "JOIN [raw_contact] AS [name_raw_contact] ON " 654 "([name_raw_contact_id] = [name_raw_contact].[id]) " 655 "LEFT JOIN [account] ON " 656 "([search_contact].[account_id] = [account].[id]) " 657 "LEFT JOIN [contact_data] ON " 658 "([contact_data].[raw_contact_id] = [raw_contact].[id]) " 659 "LEFT JOIN [contact_type] ON " 660 "([contact_data].[type_id] = [contact_type].[id]) " 661 "LEFT JOIN [groups] ON " 662 "([contact_type].[content_type] = 'group_membership' " 663 "AND [groups].[id] = [contact_data].[detail_info]) " 664 "LEFT JOIN [photo_files] ON " 665 "([contact_type].[content_type] = 'photo' " 666 "AND [photo_files].[id] = [search_contact].[photo_file_id])"; 667 668 constexpr const char *CREATE_VIEW_GROUPS = 669 "CREATE VIEW IF NOT EXISTS [view_groups] " 670 "AS SELECT " 671 "[groups].[id] AS [id], " 672 "[groups].[account_id] AS [account_id], " 673 "[account].[account_name] AS [account_name], " 674 "[account].[account_type] AS [account_type], " 675 "[groups].[group_name] AS [group_name] , " 676 "[groups].[group_notes] AS [group_notes] , " 677 "[groups].[is_deleted] AS [is_deleted] , " 678 "[groups].[group_ringtone] AS [group_ringtone], " 679 "[groups].[ringtone_modify_time] AS [ringtone_modify_time] , " 680 "[groups].[lastest_modify_time] AS [lastest_modify_time] " 681 "FROM [groups] " 682 "LEFT JOIN [account] ON ([groups].[account_id] = [account].[id])"; 683 684 constexpr const char *CREATE_VIEW_DELETED = 685 "CREATE VIEW IF NOT EXISTS [view_deleted] " 686 "AS SELECT " 687 "[deleted_raw_contact].[id] AS [id], " 688 "[contact].[id] AS [contact_id], " 689 "[contact].[photo_id] AS [photo_id], " 690 "[contact].[photo_file_id] AS [photo_file_id], " 691 "[contact].[quick_search_key] AS [quick_search_key], " 692 "[contact].[has_phone_number] AS [has_phone_number], " 693 "[contact].[has_display_name] AS [has_display_name], " 694 "[contact].[has_email] AS [has_email], " 695 "[contact].[has_group] AS [has_group], " 696 "[name_raw_contact].[account_id] AS [account_id], " 697 "[name_raw_contact].[id] AS [raw_contact_id], " 698 "[name_raw_contact].[is_transfer_voicemail] AS [is_transfer_voicemail], " 699 "[name_raw_contact].[personal_ringtone] AS [personal_ringtone], " 700 "[name_raw_contact].[is_deleted] AS [is_deleted], " 701 "[name_raw_contact].[version] AS [version], " 702 "[name_raw_contact].[display_name] AS [display_name], " 703 "[name_raw_contact].[sort] AS [sort], " 704 "[name_raw_contact].[contacted_count] AS [contacted_count], " 705 "[name_raw_contact].[lastest_contacted_time] AS [lastest_contacted_time], " 706 "[name_raw_contact].[favorite] AS [favorite], " 707 "[name_raw_contact].[favorite_order] AS [favorite_order], " 708 "[name_raw_contact].[personal_notification_ringtone] AS [personal_notification_ringtone], " 709 "[name_raw_contact].[phonetic_name] AS [phonetic_name], " 710 "[name_raw_contact].[phonetic_name_type] AS [phonetic_name_type], " 711 "[name_raw_contact].[company] AS [company], " 712 "[name_raw_contact].[position] AS [position], " 713 "[name_raw_contact].[read_only] AS [read_only], " 714 "[name_raw_contact].[sort_first_letter] AS [sort_first_letter], " 715 "[name_raw_contact].[merge_mode] AS [merge_mode], " 716 "[name_raw_contact].[is_need_merge] AS [is_need_merge], " 717 "[name_raw_contact].[merge_status] AS [merge_status], " 718 "[name_raw_contact].[is_merge_target] AS [is_merge_target], " 719 "[name_raw_contact].[vibration_setting] AS [vibration_setting], " 720 "[name_raw_contact].[photo_first_name] AS [photo_first_name], " 721 "[name_raw_contact].[sync_id] AS [sync_id], " 722 "[name_raw_contact].[syn_1] AS [syn_1], " 723 "[name_raw_contact].[syn_2] AS [syn_2], " 724 "[name_raw_contact].[syn_3] AS [syn_3], " 725 "[deleted_raw_contact].[delete_source] AS [delete_source]," 726 "[deleted_raw_contact].[delete_time] AS [delete_time], " 727 "[deleted_raw_contact].[delete_account] AS [delete_account], " 728 "[deleted_raw_contact].[backup_data] AS [backup_data], " 729 "[account].[account_name] AS [account_name], " 730 "[account].[account_type] AS [account_type], " 731 "[photo_files].[file_size] AS [file_size], " 732 "[photo_files].[file_height] AS [file_height], " 733 "[photo_files].[file_width] AS [file_width] " 734 "FROM [deleted_raw_contact] " 735 "LEFT JOIN [contact] ON ([contact].[id] = [deleted_raw_contact].[contact_id]) " 736 "LEFT JOIN [raw_contact] AS [name_raw_contact] ON ([name_raw_contact].[id] = " 737 "[deleted_raw_contact].[raw_contact_id] " 738 "AND [name_raw_contact].[is_deleted] = 1)" 739 "LEFT JOIN [account] ON ([name_raw_contact].[account_id] = [account].[id]) " 740 "LEFT JOIN [photo_files] ON ([photo_files].[id] = [name_raw_contact].[photo_file_id]) "; 741 742 constexpr const char *UPDATE_CONTACT_BY_INSERT_CONTACT_DATA = 743 "CREATE TRIGGER IF NOT EXISTS [update_contact_by_insert_contact_data] AFTER INSERT ON [contact_data] FOR EACH ROW " 744 "BEGIN " 745 "UPDATE " 746 "[contact] " 747 "SET " 748 "[has_display_name] = 1 " 749 "WHERE " 750 "[NEW].[raw_contact_id] = [name_raw_contact_id] " 751 "AND [NEW].[type_id] = 6 " 752 "AND [NEW].[detail_info] IS NOT NULL; " 753 "UPDATE " 754 "[contact] " 755 "SET " 756 "[has_email] = 1 " 757 "WHERE " 758 "[NEW].[raw_contact_id] = [name_raw_contact_id] " 759 "AND [NEW].[type_id] = 1 " 760 "AND [NEW].[detail_info] IS NOT NULL; " 761 "UPDATE " 762 "[contact] " 763 "SET " 764 "[has_group] = 1 " 765 "WHERE " 766 "[NEW].[raw_contact_id] = [name_raw_contact_id] " 767 "AND [NEW].[type_id] = 9 " 768 "AND [NEW].[detail_info] IS NOT NULL; " 769 "UPDATE " 770 "[contact] " 771 "SET " 772 "[has_phone_number] = 1 " 773 "WHERE " 774 "[NEW].[raw_contact_id] = [name_raw_contact_id] " 775 "AND [NEW].[type_id] = 5 " 776 "AND [NEW].[detail_info] IS NOT NULL; " 777 "END"; 778 779 constexpr const char *UPDATE_CONTACT_BY_DELETE_CONTACT_DATA = 780 "CREATE TRIGGER IF NOT EXISTS [update_contact_by_delete_contact_data] AFTER DELETE ON [contact_data] FOR EACH ROW " 781 "BEGIN " 782 "UPDATE " 783 "[contact] " 784 "SET " 785 "[has_display_name] = 0 " 786 "WHERE " 787 "[OLD].[raw_contact_id] = [name_raw_contact_id] " 788 "AND [OLD].[type_id] = 6; " 789 "UPDATE " 790 "[contact] " 791 "SET " 792 "[has_email] = 0 " 793 "WHERE " 794 "[OLD].[raw_contact_id] = [name_raw_contact_id] " 795 "AND [OLD].[type_id] = 1; " 796 "UPDATE " 797 "[contact] " 798 "SET " 799 "[has_group] = 0 " 800 "WHERE " 801 "[OLD].[raw_contact_id] = [name_raw_contact_id] " 802 "AND [OLD].[type_id] = 9; " 803 "UPDATE " 804 "[contact] " 805 "SET " 806 "[has_phone_number] = 0 " 807 "WHERE " 808 "[OLD].[raw_contact_id] = [name_raw_contact_id] " 809 "AND [OLD].[type_id] = 5; " 810 "END"; 811 812 constexpr const char *UPDATE_CONTACT_BY_UPDATE_CONTACT_DATA = 813 "CREATE TRIGGER IF NOT EXISTS [update_contact_by_update_contact_data] AFTER UPDATE ON [contact_data] FOR EACH ROW " 814 "BEGIN " 815 "UPDATE " 816 "[contact] " 817 "SET " 818 "[has_display_name] = 1 " 819 "WHERE " 820 "[NEW].[raw_contact_id] = [name_raw_contact_id] " 821 "AND [NEW].[type_id] = 6 " 822 "AND [NEW].[detail_info] IS NOT NULL; " 823 "UPDATE " 824 "[contact] " 825 "SET " 826 "[has_email] = 1 " 827 "WHERE " 828 "[NEW].[raw_contact_id] = [name_raw_contact_id] " 829 "AND [NEW].[type_id] = 1 " 830 "AND [NEW].[detail_info] IS NOT NULL; " 831 "UPDATE " 832 "[contact] " 833 "SET " 834 "[has_group] = 1 " 835 "WHERE " 836 "[NEW].[raw_contact_id] = [name_raw_contact_id] " 837 "AND [NEW].[type_id] = 9 " 838 "AND [NEW].[detail_info] IS NOT NULL; " 839 "UPDATE " 840 "[contact] " 841 "SET " 842 "[has_phone_number] = 1 " 843 "WHERE " 844 "[NEW].[raw_contact_id] = [name_raw_contact_id] " 845 "AND [NEW].[type_id] = 5 " 846 "AND [NEW].[detail_info] IS NOT NULL; " 847 "END"; 848 849 constexpr const char *INSERT_DELETE_RAW_CONTACT = 850 "CREATE TRIGGER IF NOT EXISTS insert_delete_raw_contact AFTER INSERT ON deleted_raw_contact " 851 "BEGIN " 852 "UPDATE deleted_raw_contact SET delete_time = STRFTIME('%s','now') WHERE id = NEW.id; " 853 "END"; 854 855 constexpr const char *UPDATE_RAW_CONTACT_VERSION = 856 "CREATE TRIGGER IF NOT EXISTS [update_raw_contact_version] AFTER UPDATE ON [raw_contact] " 857 "BEGIN " 858 "UPDATE " 859 "[raw_contact] " 860 "SET " 861 "[version] = [OLD].[version] + 1 " 862 "WHERE " 863 "[id] = [OLD].[id] AND [NEW].[is_deleted] != [OLD].[is_deleted]; " 864 "END"; 865 866 constexpr const char *UPDATE_CONTACT_DATA_VERSION = 867 "CREATE TRIGGER IF NOT EXISTS [update_contact_data_version] AFTER UPDATE ON [contact_data] " 868 "BEGIN " 869 "UPDATE " 870 "[contact_data] " 871 "SET " 872 "[version] = [OLD].[version] + 1 " 873 "WHERE " 874 "[id] = [OLD].[id]; " 875 "END"; 876 877 constexpr const char *INSERT_CONTACT_QUICK_SEARCH = 878 "CREATE TRIGGER IF NOT EXISTS [insert_contact_quick_search]AFTER INSERT ON [contact] BEGIN " 879 "UPDATE [contact] SET [quick_search_key] = [NEW].[id] WHERE [id] = [NEW].[id]; END"; 880 881 constexpr const char *CALL_LOG_PHONE_NUMBER_INDEX = 882 "CREATE INDEX IF NOT EXISTS [calllog_phone_number_index] ON [calllog] ([phone_number])"; 883 884 constexpr const char *MERGE_INFO = 885 "CREATE TABLE IF NOT EXISTS [merge_info](" 886 "[id] INTEGER PRIMARY KEY AUTOINCREMENT, " 887 "[raw_contact_id] INTEGER NOT NULL DEFAULT 0 )"; 888 889 constexpr const char *MERGE_INFO_INDEX = 890 "CREATE INDEX IF NOT EXISTS [merge_info_index] ON [merge_info] ([raw_contact_id])"; 891 } // namespace Contacts 892 } // namespace OHOS 893 #endif // COMMON_H 894