summaryrefslogtreecommitdiff
path: root/libopie2
Unidiff
Diffstat (limited to 'libopie2') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiepim/backend/odatebookaccessbackend_sql.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/libopie2/opiepim/backend/odatebookaccessbackend_sql.cpp b/libopie2/opiepim/backend/odatebookaccessbackend_sql.cpp
index 495a8dd..6c32b40 100644
--- a/libopie2/opiepim/backend/odatebookaccessbackend_sql.cpp
+++ b/libopie2/opiepim/backend/odatebookaccessbackend_sql.cpp
@@ -133,212 +133,214 @@ void ODateBookAccessBackend_SQL::initFields()
133 m_fieldMap.insert( OPimEvent::FEnd, "End" ); 133 m_fieldMap.insert( OPimEvent::FEnd, "End" );
134 m_fieldMap.insert( OPimEvent::FNote, "Note" ); 134 m_fieldMap.insert( OPimEvent::FNote, "Note" );
135 m_fieldMap.insert( OPimEvent::FTimeZone, "TimeZone" ); 135 m_fieldMap.insert( OPimEvent::FTimeZone, "TimeZone" );
136 m_fieldMap.insert( OPimEvent::FRecParent, "RecParent" ); 136 m_fieldMap.insert( OPimEvent::FRecParent, "RecParent" );
137 m_fieldMap.insert( OPimEvent::FRecChildren, "Recchildren" ); 137 m_fieldMap.insert( OPimEvent::FRecChildren, "Recchildren" );
138 138
139 // Create a map that maps the column name to the id 139 // Create a map that maps the column name to the id
140 QMapConstIterator<int, QString> it; 140 QMapConstIterator<int, QString> it;
141 for ( it = ++m_fieldMap.begin(); it != m_fieldMap.end(); ++it ){ 141 for ( it = ++m_fieldMap.begin(); it != m_fieldMap.end(); ++it ){
142 m_reverseFieldMap.insert( it.data(), it.key() ); 142 m_reverseFieldMap.insert( it.data(), it.key() );
143 } 143 }
144 144
145} 145}
146 146
147bool ODateBookAccessBackend_SQL::load() 147bool ODateBookAccessBackend_SQL::load()
148{ 148{
149 if (!m_driver->open() ) 149 if (!m_driver->open() )
150 return false; 150 return false;
151 151
152 // Don't expect that the database exists. 152 // Don't expect that the database exists.
153 // It is save here to create the table, even if it 153 // It is save here to create the table, even if it
154 // do exist. ( Is that correct for all databases ?? ) 154 // do exist. ( Is that correct for all databases ?? )
155 QStringqu = "create table datebook( uid INTEGER PRIMARY KEY "; 155 QStringqu = "create table datebook( uid INTEGER PRIMARY KEY ";
156 156
157 QMap<int, QString>::Iterator it; 157 QMap<int, QString>::Iterator it;
158 for ( it = ++m_fieldMap.begin(); it != m_fieldMap.end(); ++it ){ 158 for ( it = ++m_fieldMap.begin(); it != m_fieldMap.end(); ++it ){
159 qu += QString( ",%1 VARCHAR(10)" ).arg( it.data() ); 159 qu += QString( ",%1 VARCHAR(10)" ).arg( it.data() );
160 } 160 }
161 qu += " );"; 161 qu += " );";
162 162
163 qu += "create table custom_data( uid INTEGER, id INTEGER, type VARCHAR(10), priority INTEGER, value VARCHAR(10), PRIMARY KEY /* identifier */ (uid, id) );"; 163 qu += "create table custom_data( uid INTEGER, id INTEGER, type VARCHAR(10), priority INTEGER, value VARCHAR(10), PRIMARY KEY /* identifier */ (uid, id) );";
164 164
165 qWarning( "command: %s", qu.latin1() ); 165 qWarning( "command: %s", qu.latin1() );
166 166
167 OSQLRawQuery raw( qu ); 167 OSQLRawQuery raw( qu );
168 OSQLResult res = m_driver->query( &raw ); 168 OSQLResult res = m_driver->query( &raw );
169 if ( res.state() != OSQLResult::Success ) 169 if ( res.state() != OSQLResult::Success )
170 return false; 170 return false;
171 171
172 update(); 172 update();
173 173
174 return true; 174 return true;
175} 175}
176 176
177void ODateBookAccessBackend_SQL::update() 177void ODateBookAccessBackend_SQL::update()
178{ 178{
179 179
180 QString qu = "select uid from datebook"; 180 QString qu = "select uid from datebook";
181 OSQLRawQuery raw( qu ); 181 OSQLRawQuery raw( qu );
182 OSQLResult res = m_driver->query( &raw ); 182 OSQLResult res = m_driver->query( &raw );
183 if ( res.state() != OSQLResult::Success ){ 183 if ( res.state() != OSQLResult::Success ){
184 // m_uids.clear(); 184 // m_uids.clear();
185 return; 185 return;
186 } 186 }
187 187
188 m_uids = extractUids( res ); 188 m_uids = extractUids( res );
189 189
190} 190}
191 191
192bool ODateBookAccessBackend_SQL::reload() 192bool ODateBookAccessBackend_SQL::reload()
193{ 193{
194 return load(); 194 return load();
195} 195}
196 196
197bool ODateBookAccessBackend_SQL::save() 197bool ODateBookAccessBackend_SQL::save()
198{ 198{
199 return m_driver->close(); // Shouldn't m_driver->sync be better than close ? (eilers) 199 return m_driver->close(); // Shouldn't m_driver->sync be better than close ? (eilers)
200} 200}
201 201
202QArray<int> ODateBookAccessBackend_SQL::allRecords()const 202QArray<int> ODateBookAccessBackend_SQL::allRecords()const
203{ 203{
204 return m_uids; 204 return m_uids;
205} 205}
206 206
207QArray<int> ODateBookAccessBackend_SQL::queryByExample(const OPimEvent&, int, const QDateTime& ) { 207QArray<int> ODateBookAccessBackend_SQL::queryByExample(const OPimEvent&, int, const QDateTime& ) {
208 return QArray<int>(); 208 return QArray<int>();
209} 209}
210 210
211void ODateBookAccessBackend_SQL::clear() 211void ODateBookAccessBackend_SQL::clear()
212{ 212{
213 QString qu = "drop table datebook;"; 213 QString qu = "drop table datebook;";
214 qu += "drop table custom_data;"; 214 qu += "drop table custom_data;";
215 215
216 OSQLRawQuery raw( qu ); 216 OSQLRawQuery raw( qu );
217 OSQLResult res = m_driver->query( &raw ); 217 OSQLResult res = m_driver->query( &raw );
218 218
219 reload(); 219 reload();
220} 220}
221 221
222 222
223OPimEvent ODateBookAccessBackend_SQL::find( int uid ) const{ 223OPimEvent ODateBookAccessBackend_SQL::find( int uid ) const{
224 qDebug( "ODateBookAccessBackend_SQL::find( %d )", uid ); 224 qDebug( "ODateBookAccessBackend_SQL::find( %d )", uid );
225 225
226 QString qu = "select *"; 226 QString qu = "select *";
227 qu += "from datebook where uid = " + QString::number(uid); 227 qu += "from datebook where uid = " + QString::number(uid);
228 228
229 qDebug( "Query: %s", qu.latin1() );
230
229 OSQLRawQuery raw( qu ); 231 OSQLRawQuery raw( qu );
230 OSQLResult res = m_driver->query( &raw ); 232 OSQLResult res = m_driver->query( &raw );
231 233
232 OSQLResultItem resItem = res.first(); 234 OSQLResultItem resItem = res.first();
233 235
234 // Create Map for date event and insert UID 236 // Create Map for date event and insert UID
235 QMap<int,QString> dateEventMap; 237 QMap<int,QString> dateEventMap;
236 dateEventMap.insert( OPimEvent::FUid, QString::number( uid ) ); 238 dateEventMap.insert( OPimEvent::FUid, QString::number( uid ) );
237 239
238 // Now insert the data out of the columns into the map. 240 // Now insert the data out of the columns into the map.
239 QMapConstIterator<int, QString> it; 241 QMapConstIterator<int, QString> it;
240 for ( it = ++m_fieldMap.begin(); it != m_fieldMap.end(); ++it ){ 242 for ( it = ++m_fieldMap.begin(); it != m_fieldMap.end(); ++it ){
241 dateEventMap.insert( m_reverseFieldMap[*it], resItem.data( *it ) ); 243 dateEventMap.insert( m_reverseFieldMap[*it], resItem.data( *it ) );
242 } 244 }
243 245
244 // Last step: Put map into date event, add custom map and return it 246 // Last step: Put map into date event, add custom map and return it
245 OPimEvent retDate( dateEventMap ); 247 OPimEvent retDate( dateEventMap );
246 retDate.setExtraMap( requestCustom( uid ) ); 248 retDate.setExtraMap( requestCustom( uid ) );
247 249
248 qDebug( "ODateBookAccessBackend_SQL::find() end", uid ); 250 qDebug( "ODateBookAccessBackend_SQL::find( %d ) end", uid );
249 return retDate; 251 return retDate;
250} 252}
251 253
252// FIXME: Speed up update of uid's.. 254// FIXME: Speed up update of uid's..
253bool ODateBookAccessBackend_SQL::add( const OPimEvent& ev ) 255bool ODateBookAccessBackend_SQL::add( const OPimEvent& ev )
254{ 256{
255 QMap<int,QString> eventMap = ev.toMap(); 257 QMap<int,QString> eventMap = ev.toMap();
256 258
257 QString qu = "insert into datebook VALUES( " + QString::number( ev.uid() ); 259 QString qu = "insert into datebook VALUES( " + QString::number( ev.uid() );
258 QMap<int, QString>::Iterator it; 260 QMap<int, QString>::Iterator it;
259 for ( it = ++m_fieldMap.begin(); it != m_fieldMap.end(); ++it ){ 261 for ( it = ++m_fieldMap.begin(); it != m_fieldMap.end(); ++it ){
260 if ( !eventMap[it.key()].isEmpty() ) 262 if ( !eventMap[it.key()].isEmpty() )
261 qu += QString( ",\"%1\"" ).arg( eventMap[it.key()] ); 263 qu += QString( ",\"%1\"" ).arg( eventMap[it.key()] );
262 else 264 else
263 qu += QString( ",\"\"" ); 265 qu += QString( ",\"\"" );
264 } 266 }
265 qu += " );"; 267 qu += " );";
266 268
267 // Add custom entries 269 // Add custom entries
268 int id = 0; 270 int id = 0;
269 QMap<QString, QString> customMap = ev.toExtraMap(); 271 QMap<QString, QString> customMap = ev.toExtraMap();
270 for( QMap<QString, QString>::Iterator it = customMap.begin(); 272 for( QMap<QString, QString>::Iterator it = customMap.begin();
271 it != customMap.end(); ++it ){ 273 it != customMap.end(); ++it ){
272 qu += "insert into custom_data VALUES(" 274 qu += "insert into custom_data VALUES("
273 + QString::number( ev.uid() ) 275 + QString::number( ev.uid() )
274 + "," 276 + ","
275 + QString::number( id++ ) 277 + QString::number( id++ )
276 + ",'" 278 + ",'"
277 + it.key() //.latin1() 279 + it.key() //.latin1()
278 + "'," 280 + "',"
279 + "0" // Priority for future enhancements 281 + "0" // Priority for future enhancements
280 + ",'" 282 + ",'"
281 + it.data() //.latin1() 283 + it.data() //.latin1()
282 + "');"; 284 + "');";
283 } 285 }
284 qWarning("add %s", qu.latin1() ); 286 qWarning("add %s", qu.latin1() );
285 287
286 OSQLRawQuery raw( qu ); 288 OSQLRawQuery raw( qu );
287 OSQLResult res = m_driver->query( &raw ); 289 OSQLResult res = m_driver->query( &raw );
288 if ( res.state() != OSQLResult::Success ){ 290 if ( res.state() != OSQLResult::Success ){
289 return false; 291 return false;
290 } 292 }
291 293
292 // Update list of uid's 294 // Update list of uid's
293 update(); 295 update();
294 296
295 return true; 297 return true;
296} 298}
297 299
298// FIXME: Speed up update of uid's.. 300// FIXME: Speed up update of uid's..
299bool ODateBookAccessBackend_SQL::remove( int uid ) 301bool ODateBookAccessBackend_SQL::remove( int uid )
300{ 302{
301 QString qu = "DELETE from datebook where uid = " 303 QString qu = "DELETE from datebook where uid = "
302 + QString::number( uid ) + ";"; 304 + QString::number( uid ) + ";";
303 qu += "DELETE from custom_data where uid = " 305 qu += "DELETE from custom_data where uid = "
304 + QString::number( uid ) + ";"; 306 + QString::number( uid ) + ";";
305 307
306 OSQLRawQuery raw( qu ); 308 OSQLRawQuery raw( qu );
307 OSQLResult res = m_driver->query( &raw ); 309 OSQLResult res = m_driver->query( &raw );
308 if ( res.state() != OSQLResult::Success ){ 310 if ( res.state() != OSQLResult::Success ){
309 return false; 311 return false;
310 } 312 }
311 313
312 // Update list of uid's 314 // Update list of uid's
313 update(); 315 update();
314 316
315 return true; 317 return true;
316} 318}
317 319
318bool ODateBookAccessBackend_SQL::replace( const OPimEvent& ev ) 320bool ODateBookAccessBackend_SQL::replace( const OPimEvent& ev )
319{ 321{
320 remove( ev.uid() ); 322 remove( ev.uid() );
321 return add( ev ); 323 return add( ev );
322} 324}
323 325
324QArray<int> ODateBookAccessBackend_SQL::rawEvents()const 326QArray<int> ODateBookAccessBackend_SQL::rawEvents()const
325{ 327{
326 return allRecords(); 328 return allRecords();
327} 329}
328 330
329QArray<int> ODateBookAccessBackend_SQL::rawRepeats()const 331QArray<int> ODateBookAccessBackend_SQL::rawRepeats()const
330{ 332{
331 QString qu = "select uid from datebook where RType!=\"\" AND RType!=\"NoRepeat\""; 333 QString qu = "select uid from datebook where RType!=\"\" AND RType!=\"NoRepeat\"";
332 OSQLRawQuery raw( qu ); 334 OSQLRawQuery raw( qu );
333 OSQLResult res = m_driver->query( &raw ); 335 OSQLResult res = m_driver->query( &raw );
334 if ( res.state() != OSQLResult::Success ){ 336 if ( res.state() != OSQLResult::Success ){
335 QArray<int> nix; 337 QArray<int> nix;
336 return nix; 338 return nix;
337 } 339 }
338 340
339 return extractUids( res ); 341 return extractUids( res );
340} 342}
341 343
342QArray<int> ODateBookAccessBackend_SQL::nonRepeats()const 344QArray<int> ODateBookAccessBackend_SQL::nonRepeats()const
343{ 345{
344 QString qu = "select uid from datebook where RType=\"\" or RType=\"NoRepeat\""; 346 QString qu = "select uid from datebook where RType=\"\" or RType=\"NoRepeat\"";