|
1 /* |
|
2 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: |
|
15 * |
|
16 */ |
|
17 |
|
18 #include "cpredictivesearchsettingstable.h" |
|
19 #include "dbsqlconstants.h" |
|
20 |
|
21 // This macro suppresses log writes |
|
22 //#define NO_PRED_SEARCH_LOGS |
|
23 #include "predictivesearchlog.h" |
|
24 |
|
25 |
|
26 _LIT(KSqlContactPredSearchSettingsTable, "pred_search_settings"); |
|
27 |
|
28 _LIT(KCreatePredSearchSettingsTable, "CREATE TABLE pred_search_settings (language INTEGER);"); |
|
29 |
|
30 _LIT(KPredSearchSettingsLanguage, "language"); |
|
31 |
|
32 // How many characters the decimal representation of enum QLocale::Language |
|
33 // requires. |
|
34 const TInt KSizeOfLanguageValue = 8; |
|
35 |
|
36 //_LIT(KInsertFormat, "INSERT INTO pred_search_settings (language) VALUES (%d);"); |
|
37 // e.g. "INSERT INTO pred_search_settings (language) VALUES (8);" |
|
38 _LIT(KInsertFormat, "INSERT INTO %S (%S) VALUES (%d);"); |
|
39 |
|
40 // e.g. "UPDATE pred_search_settings SET language = 9;" |
|
41 _LIT(KUpdateFormat, "UPDATE %S SET %S = %d;"); |
|
42 |
|
43 // e.g. "SELECT language FROM pred_search_settings;" |
|
44 _LIT(KSelectFormat, "SELECT %S FROM %S;"); |
|
45 |
|
46 |
|
47 |
|
48 CPredictiveSearchSettingsTable* |
|
49 CPredictiveSearchSettingsTable::NewL(RSqlDatabase& aDatabase) |
|
50 { |
|
51 PRINT(_L("CPredictiveSearchSettingsTable::NewL")); |
|
52 CPredictiveSearchSettingsTable* self = |
|
53 CPredictiveSearchSettingsTable::NewLC(aDatabase); |
|
54 CleanupStack::Pop(self); |
|
55 PRINT(_L("CPredictiveSearchSettingsTable::NewL ends")); |
|
56 return self; |
|
57 } |
|
58 |
|
59 CPredictiveSearchSettingsTable* |
|
60 CPredictiveSearchSettingsTable::NewLC(RSqlDatabase& aDatabase) |
|
61 { |
|
62 PRINT(_L("CPredictiveSearchSettingsTable::NewLC")); |
|
63 CPredictiveSearchSettingsTable* self = |
|
64 new (ELeave) CPredictiveSearchSettingsTable(aDatabase); |
|
65 CleanupStack::PushL(self); |
|
66 self->ConstructL(); |
|
67 PRINT(_L("CPredictiveSearchSettingsTable::NewLC ends")); |
|
68 return self; |
|
69 } |
|
70 |
|
71 CPredictiveSearchSettingsTable::~CPredictiveSearchSettingsTable() |
|
72 { |
|
73 PRINT(_L("CPredictiveSearchSettingsTable dtor")); |
|
74 PRINT(_L("CPredictiveSearchSettingsTable dtor ends")); |
|
75 } |
|
76 |
|
77 void CPredictiveSearchSettingsTable::CreateInDbL(CContactItem& /*aItem*/) |
|
78 { |
|
79 } |
|
80 |
|
81 void CPredictiveSearchSettingsTable::UpdateL(const CContactItem& /*aItem*/) |
|
82 { |
|
83 } |
|
84 |
|
85 void CPredictiveSearchSettingsTable::DeleteL(const CContactItem& /*aItem*/, |
|
86 TBool& /*aLowDiskErrorOccurred*/) |
|
87 { |
|
88 } |
|
89 |
|
90 // Create table to an empty database, so there is no need to re-generate QWERTY |
|
91 // tables. |
|
92 void CPredictiveSearchSettingsTable::CreateTableL() |
|
93 { |
|
94 PRINT(_L("CPredictiveSearchSettingsTable::CreateTableL")); |
|
95 |
|
96 User::LeaveIfError(iDatabase.Exec(KCreatePredSearchSettingsTable)); |
|
97 enum QLocale::Language language = GetCurrentLanguageL(); |
|
98 HBufC* insert = HBufC::NewLC(KInsertFormat().Length() + |
|
99 KSqlContactPredSearchSettingsTable().Length() + |
|
100 KPredSearchSettingsLanguage().Length() + |
|
101 KSizeOfLanguageValue); |
|
102 insert->Des().AppendFormat(KInsertFormat, |
|
103 &KSqlContactPredSearchSettingsTable, |
|
104 &KPredSearchSettingsLanguage, |
|
105 language); |
|
106 User::LeaveIfError(iDatabase.Exec(*insert)); |
|
107 CleanupStack::PopAndDestroy(insert); |
|
108 |
|
109 PRINT(_L("CPredictiveSearchSettingsTable::CreateTableL ends")); |
|
110 } |
|
111 |
|
112 QList<QChar> CPredictiveSearchSettingsTable::FillAllTables() const |
|
113 { |
|
114 QList<QChar> tables; |
|
115 tables.append('1'); // Add one character (does not matter what the character is) |
|
116 return tables; |
|
117 } |
|
118 |
|
119 HBufC* CPredictiveSearchSettingsTable::TableNameL(const QChar /*aCh*/) const |
|
120 { |
|
121 return KSqlContactPredSearchSettingsTable().AllocL(); |
|
122 } |
|
123 |
|
124 TBool CPredictiveSearchSettingsTable::IsLanguageValidL() const |
|
125 { |
|
126 PRINT(_L("CPredictiveSearchSettingsTable::IsLanguageValidL")); |
|
127 return ReadStoredLanguageL() == GetCurrentLanguageL(); |
|
128 } |
|
129 |
|
130 void CPredictiveSearchSettingsTable::StoreCurrentLanguageL() const |
|
131 { |
|
132 PRINT(_L("CPredictiveSearchSettingsTable::StoreCurrentLanguageL")); |
|
133 |
|
134 enum QLocale::Language language = GetCurrentLanguageL(); |
|
135 HBufC* update = HBufC::NewLC(KUpdateFormat().Length() + |
|
136 KSqlContactPredSearchSettingsTable().Length() + |
|
137 KPredSearchSettingsLanguage().Length() + |
|
138 KSizeOfLanguageValue); |
|
139 update->Des().AppendFormat(KUpdateFormat, |
|
140 &KSqlContactPredSearchSettingsTable, |
|
141 &KPredSearchSettingsLanguage, |
|
142 language); |
|
143 User::LeaveIfError(iDatabase.Exec(*update)); |
|
144 CleanupStack::PopAndDestroy(update); |
|
145 |
|
146 PRINT(_L("CPredictiveSearchSettingsTable::StoreCurrentLanguageL ends")); |
|
147 } |
|
148 |
|
149 void CPredictiveSearchSettingsTable::ConstructL() |
|
150 { |
|
151 } |
|
152 |
|
153 enum QLocale::Language CPredictiveSearchSettingsTable::GetCurrentLanguageL() const |
|
154 { |
|
155 enum QLocale::Language language(QLocale::C); |
|
156 QT_TRYCATCH_LEAVING(language = QLocale::system().language()); |
|
157 PRINT1(_L("CPredictiveSearchSettingsTable::GetCurrentLanguageL ret=%d"), language); |
|
158 return language; |
|
159 } |
|
160 |
|
161 enum QLocale::Language CPredictiveSearchSettingsTable::ReadStoredLanguageL() const |
|
162 { |
|
163 TInt bufSize = KSelectFormat().Length() + |
|
164 KPredSearchSettingsLanguage().Length() + |
|
165 KSqlContactPredSearchSettingsTable().Length(); |
|
166 HBufC* select = HBufC::NewLC(bufSize); |
|
167 select->Des().AppendFormat(KSelectFormat, |
|
168 &KPredSearchSettingsLanguage, |
|
169 &KSqlContactPredSearchSettingsTable); |
|
170 |
|
171 RSqlStatement stmnt; |
|
172 CleanupClosePushL(stmnt); |
|
173 PRINT1(_L("CPredictiveSearchSettingsTable::ReadStoredLanguageL SQL:%S"), select); |
|
174 stmnt.PrepareL(iDatabase, *select); |
|
175 |
|
176 const TInt KLanguageIndex = 0; |
|
177 TInt err = stmnt.Next(); |
|
178 enum QLocale::Language language(QLocale::C); |
|
179 if (err == KSqlAtRow) |
|
180 { |
|
181 language = static_cast<QLocale::Language>(stmnt.ColumnInt(KLanguageIndex)); |
|
182 PRINT1(_L("read language=%d from DB"), language); |
|
183 } |
|
184 CleanupStack::PopAndDestroy(&stmnt); |
|
185 CleanupStack::PopAndDestroy(select); |
|
186 |
|
187 if (err != KSqlAtRow) |
|
188 { |
|
189 PRINT1(_L("CPredictiveSearchSettingsTable::ReadStoredLanguageL err=%d"), err); |
|
190 User::Leave(err); |
|
191 } |
|
192 PRINT1(_L("CPredictiveSearchSettingsTable::ReadStoredLanguageL ret=%d"), language); |
|
193 return language; |
|
194 } |
|
195 |
|
196 /** |
|
197 Constructor |
|
198 */ |
|
199 CPredictiveSearchSettingsTable::CPredictiveSearchSettingsTable( |
|
200 RSqlDatabase& aDatabase) : |
|
201 CPplPredictiveSearchTableBase(aDatabase, 0, 0) |
|
202 { |
|
203 } |