• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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