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