|
1 // Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). |
|
2 // All rights reserved. |
|
3 // This component and the accompanying materials are made available |
|
4 // under the terms of "Eclipse Public License v1.0" |
|
5 // which accompanies this distribution, and is available |
|
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
7 // |
|
8 // Initial Contributors: |
|
9 // Nokia Corporation - initial contribution. |
|
10 // |
|
11 // Contributors: |
|
12 // |
|
13 // Description: |
|
14 // |
|
15 |
|
16 #include <cntdef.hrh> |
|
17 |
|
18 const TInt KInitialValue = -1; |
|
19 const TInt KNumOfTables = 4; |
|
20 const TInt KNumColInPrefTable = 6; |
|
21 const TInt KNumColInContactTable = 16; |
|
22 const TInt KNumColInGroupTable = 3; |
|
23 const TInt KNumColInCommTable = 5; |
|
24 |
|
25 // tables in the contact database |
|
26 _LIT(KSqlContactTableName,"contact"); |
|
27 _LIT(KSqlContactGroupTableName,"groups"); |
|
28 _LIT(KSqlContactPrefTableName,"preferences"); |
|
29 _LIT(KSqlContactCommAddrTableName,"comm_addr"); |
|
30 |
|
31 enum TDatabaseTables |
|
32 { |
|
33 EContactPrefTableName, |
|
34 EContactTableName, |
|
35 EContactGroupTableName, |
|
36 EContactCommAddressTableName |
|
37 }; |
|
38 |
|
39 // columns for contact table |
|
40 _LIT(KContactId, "contact_id"); |
|
41 _LIT(KContactTemplateId, "template_id"); |
|
42 _LIT(KContactTypeFlags, "type_flags"); |
|
43 _LIT(KContactAccessCount, "access_count"); |
|
44 _LIT(KContactCreationDate, "creation_date"); |
|
45 _LIT(KContactLastModified, "last_modified"); |
|
46 _LIT(KContactGuidString, "guid_string"); |
|
47 _LIT(KContactFirstName, "first_name"); |
|
48 _LIT(KContactLastName, "last_name"); |
|
49 _LIT(KContactCompanyName, "company_name"); |
|
50 _LIT(KContactFirstNamePrn, "firstname_prn"); |
|
51 _LIT(KContactLastNamePrn, "lastname_prn"); |
|
52 _LIT(KContactCompanyNamePrn, "companyname_prn"); |
|
53 _LIT(KContactTextFieldHeader, "text_fields_header"); |
|
54 _LIT(KContactBinaryFieldHeader, "binary_fields_header"); |
|
55 _LIT(KContactTextFields, "text_fields"); |
|
56 _LIT(KContactBinaryFields, "binary_fields"); |
|
57 //end columns for contact table |
|
58 |
|
59 // parameters for contact table |
|
60 _LIT(KContactIdParam, ":contact_id"); |
|
61 _LIT(KContactTemplateIdParam, ":template_id"); |
|
62 _LIT(KContactTypeFlagsParam, ":type_flags"); |
|
63 _LIT(KContactTypeParam, ":contact_type"); |
|
64 _LIT(KAttributesAndHintParam, ":attr_and_hint"); |
|
65 _LIT(KContactAccessCountParam, ":access_count"); |
|
66 _LIT(KContactCreationDateParam, ":creation_date"); |
|
67 _LIT(KContactLastModifiedParam, ":last_modified"); |
|
68 _LIT(KContactGuidStringParam, ":guid_string"); |
|
69 _LIT(KContactFirstNameParam, ":first_name"); |
|
70 _LIT(KContactLastNameParam, ":last_name"); |
|
71 _LIT(KContactCompanyNameParam, ":company_name"); |
|
72 _LIT(KContactFirstNamePrnParam, ":firstname_prn"); |
|
73 _LIT(KContactLastNamePrnParam, ":lastname_prn"); |
|
74 _LIT(KContactCompanyNamePrnParam, ":companyname_prn"); |
|
75 _LIT(KContactTextFieldHeaderParam, ":text_fields_header"); |
|
76 _LIT(KContactBinaryFieldHeaderParam, ":binary_fields_header"); |
|
77 _LIT(KContactTextFieldsParam, ":text_fields"); |
|
78 _LIT(KContactBinaryFieldsParam, ":binary_fields"); |
|
79 //end parameters for contact table |
|
80 |
|
81 // create statements |
|
82 _LIT(KContactCreateStmnt, "CREATE TABLE contact (contact_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, template_id INTEGER, type_flags INTEGER, access_count INTEGER, creation_date , last_modified , guid_string VARCHAR(255) NULL, first_name VARCHAR(255) NULL, last_name VARCHAR(255) NULL, company_name VARCHAR(255) NULL, firstname_prn VARCHAR(255) NULL, lastname_prn VARCHAR(255) NULL, companyname_prn VARCHAR(255) NULL, text_fields_header BLOB, binary_fields_header BLOB, text_fields TEXT, binary_fields BLOB); CREATE INDEX contact_guid_string_idx ON contact (guid_string);"); |
|
83 // end contact table |
|
84 |
|
85 // comm-address table |
|
86 // columns |
|
87 _LIT(KCommAddrId, "comm_addr_id"); |
|
88 _LIT(KCommAddrType, "type"); |
|
89 _LIT(KCommAddrValue, "value"); |
|
90 _LIT(KCommAddrExtraValue, "extra_value"); |
|
91 _LIT(KCommAddrContactId, "contact_id"); |
|
92 // parameters |
|
93 _LIT(KCommAddrIdParam, ":comm_addr_id"); |
|
94 _LIT(KCommAddrTypeParam, ":type"); |
|
95 _LIT(KCommAddrValueParam, ":value"); |
|
96 _LIT(KCommAddrExtraValueParam, ":extra_value"); |
|
97 _LIT(KCommAddrContactIdParam, ":contact_id"); |
|
98 // create statements |
|
99 _LIT(KCommAddrCreateStmnt, "CREATE TABLE comm_addr (comm_addr_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, type INTEGER NOT NULL, value CHAR(255) NOT NULL, extra_value CHAR(255), contact_id INTEGER NOT NULL, FOREIGN KEY (contact_id) REFERENCES contact(contact_id)); CREATE INDEX comm_addr_val_idx ON comm_addr (value); CREATE INDEX comm_addr_contact_id_idx ON comm_addr (contact_id);"); |
|
100 // end comm_address table |
|
101 |
|
102 // groups table |
|
103 // columns |
|
104 _LIT(KGroupId, "group_id"); |
|
105 _LIT(KGroupContactGroupId, "contact_group_id"); |
|
106 _LIT(KGroupContactGroupMemberId, "contact_group_member_id"); |
|
107 // parameters |
|
108 _LIT(KGroupIdParam, ":group_id"); |
|
109 _LIT(KGroupContactGroupIdParam, ":contact_group_id"); |
|
110 _LIT(KGroupContactGroupMemberIdParam, ":contact_group_member_id"); |
|
111 // create statements |
|
112 _LIT(KGroupsCreateStmnt, "CREATE TABLE groups (group_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, contact_group_id INTEGER NOT NULL, contact_group_member_id INTEGER NOT NULL, FOREIGN KEY (contact_group_id) REFERENCES contact(contact_id), FOREIGN KEY (contact_group_member_id) REFERENCES contact(contact_id) ); CREATE INDEX contact_group_id_idx ON groups (contact_group_id); CREATE INDEX contact_group_member_id_idx ON groups (contact_group_member_id);"); |
|
113 // end groups table |
|
114 |
|
115 // preferences table |
|
116 // columns |
|
117 _LIT(KPrefPrefId,"preference_id"); |
|
118 _LIT(KPrefSchemaVersion,"data_schema_version"); |
|
119 _LIT(KPrefDatabaseUid,"database_uid"); |
|
120 _LIT(KPrefPrefCreationDate,"creation_date"); |
|
121 _LIT(KPrefMachineId, "machine_id"); |
|
122 _LIT(KPrefPreferredOrder, "preferred_sortorder"); |
|
123 _LIT(KPrefferredTemplateId,"preferred_cardtemplate_id"); |
|
124 |
|
125 // parameters |
|
126 _LIT(KPrefIdParam, ":preference_id"); |
|
127 _LIT(KPrefSchemaVersionParam, ":data_schema_version"); |
|
128 _LIT(KPrefDatabaseUidParam, ":database_uid"); |
|
129 _LIT(KPrefCreationDateParam, ":creation_date"); |
|
130 _LIT(KPrefMachineIdParam, ":machine_id"); |
|
131 _LIT(KPrefPreferredOrderParam, ":preferred_sortorder"); |
|
132 _LIT(KPrefferredTemplateIdParam,":preferred_cardtemplate_id"); |
|
133 |
|
134 // create statements |
|
135 _LIT(KPreferencesCreateStmnt, "CREATE TABLE preferences (preference_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, data_schema_version INTEGER NOT NULL, preferred_cardtemplate_id INTEGER, machine_id , creation_date , preferred_sortorder BLOB); "); |
|
136 // end preferences table |
|
137 |
|
138 |
|
139 // Condition strings for searching id |
|
140 _LIT(KSelectCondition_SearchForEqual, "%S == :SeekId"); |
|
141 |
|
142 // SQLITE_SEQUENCE table stuff for getting last row_id |
|
143 _LIT(KSelectLastIdSqlStmnt, "SELECT seq FROM SQLITE_SEQUENCE WHERE name = 'contact';"); |
|
144 |
|
145 |
|
146 // SQLITE_SEQUENCE table stuff for getting last row_id |
|
147 _LIT(KSqliteSequenceTableName, "SQLITE_SEQUENCE"); |
|
148 _LIT(KSqliteSequenceSeq, "seq"); |
|
149 _LIT(KSqliteSequenceName, "name"); |
|
150 |
|
151 _LIT(KSQLSelect, "SELECT "); |
|
152 _LIT(KFrom, "FROM "); |
|
153 |
|
154 _LIT(KSpace, " "); |
|
155 _LIT(KComma, ","); |
|
156 _LIT(KSelectTwoFields, "SELECT %S, %S FROM %S WHERE %S=%d"); |
|
157 _LIT(KSelectTwoFieldsWithGreater, "SELECT %S, %S FROM %S WHERE %S>=%d"); |
|
158 _LIT(KSelectFiveFields, "SELECT %S, %S, %S, %S, %S FROM %S"); |
|
159 _LIT(KCountSelect, "SELECT count(*) FROM %S"); |
|
160 _LIT(KCountTypeSelect, "SELECT count(*) FROM %S WHERE (%S>>%d)=%d AND ((%S>>%d)&%d)=0"); |
|
161 _LIT(KOneTypeField, "SELECT %S FROM %S WHERE (%S>>%d)=%d"); |
|
162 _LIT(KTwoTypeField, "SELECT %S, %S FROM %S WHERE (%S>>%d)=%d"); |
|
163 _LIT(KJoinConditionClause, "%S=%S and %S=%d"); |
|
164 _LIT(KConditionClause, "%S=%d"); |
|
165 _LIT(KTypeConditionClause, "(%S>>%d)=%d"); |
|
166 _LIT(KWhereStringEqualsStringFormatText, "%S = %S"); |
|
167 _LIT(KSelectFlagsSqlStmntFormat, "SELECT type_flags FROM contact WHERE contact_id = %d"); |
|
168 _LIT(KVar, ":var"); |
|
169 _LIT(KIntValue, "%d"); |
|
170 _LIT(KSelectCondition_SearchForContactId, "contact_id == :SeekId"); |
|
171 |
|
172 |
|
173 // COUNT function |
|
174 _LIT(KCount, " COUNT(%S) "); |
|
175 |
|
176 // NULL |
|
177 _LIT(KNullText, "NULL"); //think this should be deleted |
|
178 |
|
179 // AND |
|
180 _LIT(KSqlAnd, " AND "); |
|
181 |
|
182 // OR |
|
183 _LIT(KSqlOr, " OR "); |
|
184 |
|
185 // COUNT |
|
186 _LIT(KSqlCount, "count(*)"); |
|
187 |
|
188 const TInt KFirstParam = 0; |
|
189 |
|
190 /* constants defined for type_flags in contact table */ |
|
191 |
|
192 // definition for contact type flags |
|
193 |
|
194 //Bit flags in the byte of Contact Type |
|
195 enum TContactTypeFlags |
|
196 { |
|
197 EContactTypeFlags_ContactCard, |
|
198 EContactTypeFlags_OwnCard, |
|
199 EContactTypeFlags_ICCEntry, |
|
200 EContactTypeFlags_Group, |
|
201 EContactTypeFlags_Template, |
|
202 EContactTypeFlags_CardTemplate, |
|
203 EContactTypeFlags_UnknownType |
|
204 }; |
|
205 |
|
206 const TInt KContactTypeShiftBits = 24; //ContactType byte stored in highest(left most) byte in the type flags integer |
|
207 |
|
208 /* definition for contact attributes flags */ |
|
209 enum TContactAttrsFlags |
|
210 { |
|
211 EContactAttrsFlags_System = 1, |
|
212 EContactAttrsFlags_Hidden = 2, // 1 << 1 |
|
213 EContactAttrsFlags_CompressedGUID = 4, // 1 << 2 |
|
214 EContactAttrsFlags_Deleted = 8, // 1 << 3 |
|
215 EContactAttrsFlags_Mask = 0x00FF0000 |
|
216 }; |
|
217 const TInt KContactAttrsShiftBits = 16; //Contact Attributes byte stored in second highest byte in the type flags integer |
|
218 |
|
219 /* definition for contact hint flags */ |
|
220 const TInt KFastAccessFieldUids[] = |
|
221 { |
|
222 KUidContactFieldGivenNameValue, |
|
223 KUidContactFieldFamilyNameValue, |
|
224 KUidContactFieldCompanyNameValue, |
|
225 KUidContactFieldGivenNamePronunciationValue, |
|
226 KUidContactFieldFamilyNamePronunciationValue, |
|
227 KUidContactFieldCompanyNamePronunciationValue |
|
228 }; |
|
229 |
|
230 /* definition for contact hint flags */ |
|
231 enum TContactTypeFlagsMasks |
|
232 { |
|
233 EContactType_Mask = 0xFF000000, |
|
234 EContactAttributes_Mask = 0x00FF0000, |
|
235 EContactHintFlags_Mask = 0x0000FFFF // Hint value put lowest 2 bytes of the type flags integer |
|
236 }; |
|
237 |
|
238 enum TContactTypeFlagsShitfs |
|
239 { |
|
240 EContactAttributes_Shift = 16, |
|
241 EContactType_Shift = 24 |
|
242 }; |
|
243 |
|
244 enum TFastAccessField |
|
245 { |
|
246 EFirstFastAccessField = 0, |
|
247 EGivenName = EFirstFastAccessField, |
|
248 EFamilyName, |
|
249 ECompanyName, |
|
250 EGivenNamePrn, |
|
251 EFamilyNamePrn, |
|
252 ECompanyNamePrn, |
|
253 ENumberOfFastAccessFields, |
|
254 ENoSuchFastAccessField = -1 |
|
255 }; |
|
256 |
|
257 const TInt KFirstIndex = 0; |