1 // Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). |
1 // Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies). |
2 // All rights reserved. |
2 // All rights reserved. |
3 // This component and the accompanying materials are made available |
3 // This component and the accompanying materials are made available |
4 // under the terms of "Eclipse Public License v1.0" |
4 // under the terms of "Eclipse Public License v1.0" |
5 // which accompanies this distribution, and is available |
5 // which accompanies this distribution, and is available |
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html". |
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html". |
20 #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS |
20 #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS |
21 #include <tzusernames.h> |
21 #include <tzusernames.h> |
22 #include <tzuserdefineddata.h> |
22 #include <tzuserdefineddata.h> |
23 #endif |
23 #endif |
24 #include "tzidinternal.h" |
24 #include "tzidinternal.h" |
|
25 #include "OstTraceDefinitions.h" |
|
26 #ifdef OST_TRACE_COMPILER_IN_USE |
|
27 #include "tzuserdataTraces.h" |
|
28 #endif |
|
29 |
25 |
30 |
26 _LIT(KUserDatabaseName, "c:\\private\\1020383e\\SQLite__tzuserdata.db"); |
31 _LIT(KUserDatabaseName, "c:\\private\\1020383e\\SQLite__tzuserdata.db"); |
27 _LIT(KTzPrivatePath, "c:\\private\\1020383e\\"); |
32 _LIT(KTzPrivatePath, "c:\\private\\1020383e\\"); |
28 |
33 |
29 // Transaction constants |
34 // Transaction constants |
214 CreateSchemaL(); |
222 CreateSchemaL(); |
215 } |
223 } |
216 |
224 |
217 void CTzUserDataDb::CreateSchemaL() |
225 void CTzUserDataDb::CreateSchemaL() |
218 { |
226 { |
|
227 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_FLOW_PARAM, CTZUSERDATADB_CREATESCHEMAL_ENTRY, "CTzUserDataDb::CreateSchemaL ENtry" ); |
|
228 |
|
229 |
219 RSqlStatement stmt; |
230 RSqlStatement stmt; |
220 CleanupClosePushL(stmt); |
231 CleanupClosePushL(stmt); |
221 |
232 |
222 User::LeaveIfError(iDatabase.Open(KUserDatabaseName())); |
233 User::LeaveIfError(iDatabase.Open(KUserDatabaseName())); |
223 User::LeaveIfError(stmt.Prepare(iDatabase, KTzRulesCreateStmnt)); |
234 User::LeaveIfError(stmt.Prepare(iDatabase, KTzRulesCreateStmnt)); |
241 User::LeaveIfError(stmt.Prepare(iDatabase, KTzInitialStdOffsetCreateStmnt)); |
252 User::LeaveIfError(stmt.Prepare(iDatabase, KTzInitialStdOffsetCreateStmnt)); |
242 User::LeaveIfError(stmt.Exec()); |
253 User::LeaveIfError(stmt.Exec()); |
243 stmt.Close(); |
254 stmt.Close(); |
244 |
255 |
245 CleanupStack::PopAndDestroy(&stmt); |
256 CleanupStack::PopAndDestroy(&stmt); |
|
257 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_FLOW_PARAM, CTZUSERDATADB_CREATESCHEMAL_EXIT, "CTzUserDataDb::CreateSchemaL Exit" ); |
|
258 |
246 } |
259 } |
247 |
260 |
248 TInt CTzUserDataDb::CreateTzL(const CTzRules& aRules, const CTzUserNames& aNames) |
261 TInt CTzUserDataDb::CreateTzL(const CTzRules& aRules, const CTzUserNames& aNames) |
249 { |
262 { |
|
263 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_FLOW_PARAM, CTZUSERDATADB_CREATETZL_ENTRY, "CTzUserDataDb::CreateTzL Entry" ); |
|
264 |
250 if(iBackupInProgress || iRestoreInProgress) |
265 if(iBackupInProgress || iRestoreInProgress) |
251 { |
266 { |
|
267 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_ERROR, CTZUSERDATADB_CREATETZL_ERROR, "CTzUserDataDb::CreateTzL:Error:RestoreInProgress or RestoreInProgress" ); |
|
268 |
252 User::Leave(KErrLocked); |
269 User::Leave(KErrLocked); |
253 } |
270 } |
254 |
271 |
255 RSqlStatement stmt; |
272 RSqlStatement stmt; |
256 CleanupClosePushL(stmt); |
273 CleanupClosePushL(stmt); |
275 } |
292 } |
276 |
293 |
277 // If all the user IDs have been used, leave with KErrOverflow |
294 // If all the user IDs have been used, leave with KErrOverflow |
278 if(iNextCandidateTzId == KOutOfBoundsUserId) |
295 if(iNextCandidateTzId == KOutOfBoundsUserId) |
279 { |
296 { |
|
297 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_ERROR, CTZUSERDATADB_CREATETZL_ERROR1, "CTzUserDataDb::CreateTzL:All user ids has been used " ); |
|
298 |
280 User::Leave(KErrOverflow); |
299 User::Leave(KErrOverflow); |
281 } |
300 } |
282 |
301 |
283 TUint retId = iNextCandidateTzId; |
302 TUint retId = iNextCandidateTzId; |
284 TInt index; |
303 TInt index; |
365 TInt ret = stmt.Exec(); |
386 TInt ret = stmt.Exec(); |
366 stmt.Close(); |
387 stmt.Close(); |
367 |
388 |
368 if(ret < KErrNone) |
389 if(ret < KErrNone) |
369 { |
390 { |
|
391 OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_ERROR, CTZUSERDATADB_CREATETZL_ERROR3, "CTzUserDataDb::CreateTzL:Errror while inserting a row in Names;Error value=%d", ret ); |
|
392 |
370 User::Leave(ret); |
393 User::Leave(ret); |
371 } |
394 } |
372 |
395 |
373 User::LeaveIfError(stmt.Prepare(iDatabase, KInsertInitialStdOffsetStmnt)); |
396 User::LeaveIfError(stmt.Prepare(iDatabase, KInsertInitialStdOffsetStmnt)); |
374 index = stmt.ParameterIndex(KTzInitialStdOffsetTblTzIdParam); |
397 index = stmt.ParameterIndex(KTzInitialStdOffsetTblTzIdParam); |
410 CommitTransactionL(); |
433 CommitTransactionL(); |
411 NotifyTzRulesChange(retId, ETzUserDataCreated); |
434 NotifyTzRulesChange(retId, ETzUserDataCreated); |
412 NotifyTzNamesChange(retId, ETzUserDataCreated); |
435 NotifyTzNamesChange(retId, ETzUserDataCreated); |
413 |
436 |
414 CleanupStack::PopAndDestroy(&stmt); |
437 CleanupStack::PopAndDestroy(&stmt); |
|
438 OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_FLOW_PARAM, CTZUSERDATADB_CREATETZL_EXIT, "CTzUserDataDb::CreateTzL Exit;retId=%u", retId ); |
|
439 |
415 return retId; |
440 return retId; |
416 } |
441 } |
417 |
442 |
418 void CTzUserDataDb::ReadTzRulesL(CTzRules& aRules, TUint aTzId) |
443 void CTzUserDataDb::ReadTzRulesL(CTzRules& aRules, TUint aTzId) |
419 { |
444 { |
|
445 OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_FLOW_PARAM, CTZUSERDATADB_READTZRULESL_ENTRY, "CTzUserDataDb::ReadTzRulesL Entry;aTzId=%u", aTzId ); |
|
446 |
420 if(iBackupInProgress || iRestoreInProgress) |
447 if(iBackupInProgress || iRestoreInProgress) |
421 { |
448 { |
|
449 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_ERROR, CTZUSERDATADB_READTZRULESL_ERROR, "CTzUserDataDb::ReadTzRulesL:Error:BackupInProgress or RestoreInProgress" ); |
|
450 |
422 User::Leave(KErrLocked); |
451 User::Leave(KErrLocked); |
423 } |
452 } |
424 |
453 |
425 TSqlScalarFullSelectQuery fullSelectQuery(iDatabase); |
454 TSqlScalarFullSelectQuery fullSelectQuery(iDatabase); |
426 |
455 |
510 |
539 |
511 // This must be the only row. |
540 // This must be the only row. |
512 __ASSERT_ALWAYS(stmt.Next() == KSqlAtEnd, RTz::Panic(RTz::EPanicBadSchema)); |
541 __ASSERT_ALWAYS(stmt.Next() == KSqlAtEnd, RTz::Panic(RTz::EPanicBadSchema)); |
513 |
542 |
514 CleanupStack::PopAndDestroy(&stmt); |
543 CleanupStack::PopAndDestroy(&stmt); |
|
544 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_FLOW_PARAM, CTZUSERDATADB_READTZRULESL_EXIT, "CTzUserDataDb::ReadTzRulesL Exit" ); |
|
545 |
515 } |
546 } |
516 |
547 |
517 CTzUserNames* CTzUserDataDb::ReadTzNamesL(TUint aTzId) |
548 CTzUserNames* CTzUserDataDb::ReadTzNamesL(TUint aTzId) |
518 { |
549 { |
|
550 OstTraceDef1( OST_TRACE_CATEGORY_DEBUG,TRACE_FLOW_PARAM, CTZUSERDATADB_READTZNAMESL_ENTRY, "CTzUserDataDb::ReadTzNamesL Entry;aTzId=%u", aTzId ); |
|
551 |
519 if(iBackupInProgress || iRestoreInProgress) |
552 if(iBackupInProgress || iRestoreInProgress) |
520 { |
553 { |
|
554 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_ERROR, CTZUSERDATADB_READTZNAMESL_ERROR, "CTzUserDataDb::ReadTzNamesL:Error:RestoreInProgress or RestoreInProgress " ); |
|
555 |
521 User::Leave(KErrLocked); |
556 User::Leave(KErrLocked); |
522 } |
557 } |
523 |
558 |
524 RSqlStatement stmt; |
559 RSqlStatement stmt; |
525 CleanupClosePushL(stmt); |
560 CleanupClosePushL(stmt); |
584 |
619 |
585 // This must be the only row. |
620 // This must be the only row. |
586 __ASSERT_ALWAYS(stmt.Next() == KSqlAtEnd, RTz::Panic(RTz::EPanicBadSchema)); |
621 __ASSERT_ALWAYS(stmt.Next() == KSqlAtEnd, RTz::Panic(RTz::EPanicBadSchema)); |
587 |
622 |
588 CleanupStack::PopAndDestroy(&stmt); |
623 CleanupStack::PopAndDestroy(&stmt); |
|
624 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_FLOW_PARAM, CTZUSERDATADB_READTZNAMESL_EXIT, "CTzUserDataDb::ReadTzNamesL Exit" ); |
|
625 |
589 |
626 |
590 return userNames; |
627 return userNames; |
591 } |
628 } |
592 |
629 |
593 void CTzUserDataDb::ReadTzIdsL(RArray<TUint32>& aTzIds) |
630 void CTzUserDataDb::ReadTzIdsL(RArray<TUint32>& aTzIds) |
594 { |
631 { |
|
632 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_FLOW_PARAM, CTZUSERDATADB_READTZIDSL_ENTRY, "CTzUserDataDb::ReadTzIdsL Entry" ); |
|
633 |
595 if(iBackupInProgress || iRestoreInProgress ) |
634 if(iBackupInProgress || iRestoreInProgress ) |
596 { |
635 { |
|
636 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_ERROR, CTZUSERDATADB_READTZIDSL_ERROR, "CTzUserDataDb::ReadTzIdsL:Error : BackupInProgress or RestoreInProgress" ); |
|
637 |
597 User::Leave(KErrLocked); |
638 User::Leave(KErrLocked); |
598 } |
639 } |
599 |
640 |
600 RSqlStatement stmt; |
641 RSqlStatement stmt; |
601 CleanupClosePushL(stmt); |
642 CleanupClosePushL(stmt); |
612 TUint id = stmt.ColumnInt64(col); |
653 TUint id = stmt.ColumnInt64(col); |
613 aTzIds.AppendL(id); |
654 aTzIds.AppendL(id); |
614 } |
655 } |
615 |
656 |
616 CleanupStack::PopAndDestroy(&stmt); |
657 CleanupStack::PopAndDestroy(&stmt); |
|
658 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_FLOW_PARAM, CTZUSERDATADB_READTZIDSL_EXIT, "CTzUserDataDb::ReadTzIdsL Exit" ); |
|
659 |
617 } |
660 } |
618 |
661 |
619 void CTzUserDataDb::UpdateTzL(TUint aTzId, const CTzRules& aTzRules, const CTzUserNames& aTzNames) |
662 void CTzUserDataDb::UpdateTzL(TUint aTzId, const CTzRules& aTzRules, const CTzUserNames& aTzNames) |
620 { |
663 { |
|
664 OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_FLOW_PARAM, CTZUSERDATADB_UPDATETZL_ENTRY, "CTzUserDataDb::UpdateTzL Entry;aTzId=%u", aTzId ); |
|
665 |
621 if(iBackupInProgress || iRestoreInProgress) |
666 if(iBackupInProgress || iRestoreInProgress) |
622 { |
667 { |
|
668 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_ERROR, CTZUSERDATADB_UPDATETZL_ERROR, "CTzUserDataDb::UpdateTzL:Error:BackupInProgress or RestoreInProgress" ); |
|
669 |
|
670 |
623 User::Leave(KErrLocked); |
671 User::Leave(KErrLocked); |
624 } |
672 } |
625 |
673 |
626 RSqlStatement stmt; |
674 RSqlStatement stmt; |
627 CleanupClosePushL(stmt); |
675 CleanupClosePushL(stmt); |
795 |
843 |
796 NotifyTzRulesChange(aTzId, ETzUserDataUpdated); |
844 NotifyTzRulesChange(aTzId, ETzUserDataUpdated); |
797 NotifyTzNamesChange(aTzId, ETzUserDataUpdated); |
845 NotifyTzNamesChange(aTzId, ETzUserDataUpdated); |
798 |
846 |
799 CleanupStack::PopAndDestroy(&stmt); |
847 CleanupStack::PopAndDestroy(&stmt); |
|
848 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_FLOW_PARAM, CTZUSERDATADB_UPDATETZL_EXIT, "CTzUserDataDb::UpdateTzL Exit" ); |
|
849 |
800 } |
850 } |
801 |
851 |
802 /** |
852 /** |
803 Delete the time zone rule and name from the database that matches aTzId |
853 Delete the time zone rule and name from the database that matches aTzId |
804 */ |
854 */ |
805 void CTzUserDataDb::DeleteTzL(TUint aTzId) |
855 void CTzUserDataDb::DeleteTzL(TUint aTzId) |
806 { |
856 { |
|
857 OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_FLOW_PARAM, CTZUSERDATADB_DELETETZL_ENTRY, "CTzUserDataDb::DeleteTzL Entry;aTzId=%u", aTzId ); |
|
858 |
807 if(iBackupInProgress || iRestoreInProgress) |
859 if(iBackupInProgress || iRestoreInProgress) |
808 { |
860 { |
|
861 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_ERROR, CTZUSERDATADB_DELETETZL_ERROR, "CTzUserDataDb::DeleteTzL:Error :BackupInProgress or RestoreInProgress" ); |
|
862 |
809 User::Leave(KErrLocked); |
863 User::Leave(KErrLocked); |
810 } |
864 } |
811 |
865 |
812 RSqlStatement stmt; |
866 RSqlStatement stmt; |
813 CleanupClosePushL(stmt); |
867 CleanupClosePushL(stmt); |
853 |
907 |
854 NotifyTzRulesChange(aTzId, ETzUserDataDeleted); |
908 NotifyTzRulesChange(aTzId, ETzUserDataDeleted); |
855 NotifyTzNamesChange(aTzId, ETzUserDataDeleted); |
909 NotifyTzNamesChange(aTzId, ETzUserDataDeleted); |
856 |
910 |
857 CleanupStack::PopAndDestroy(&stmt); |
911 CleanupStack::PopAndDestroy(&stmt); |
|
912 OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_FLOW_PARAM, CTZUSERDATADB_DELETETZL_EXIT, "CTzUserDataDb::DeleteTzL Exit" ); |
|
913 |
858 } |
914 } |
859 |
915 |
860 void CTzUserDataDb::CleanupDatabaseRollback(TAny *aDatabase) |
916 void CTzUserDataDb::CleanupDatabaseRollback(TAny *aDatabase) |
861 { |
917 { |
862 ASSERT(aDatabase); |
918 ASSERT(aDatabase); |
912 RProperty::Set(NTzUpdate::KPropertyCategory, NTzUpdate::ETzRulesChange, bufRules); |
968 RProperty::Set(NTzUpdate::KPropertyCategory, NTzUpdate::ETzRulesChange, bufRules); |
913 } |
969 } |
914 |
970 |
915 void CTzUserDataDb::NotifyTzNamesChange(TUint aTzId, TTzUserDataChangeOp aChangeOp) |
971 void CTzUserDataDb::NotifyTzNamesChange(TUint aTzId, TTzUserDataChangeOp aChangeOp) |
916 { |
972 { |
|
973 |
917 TTzUserDataChange change; |
974 TTzUserDataChange change; |
918 change.iTzId = aTzId; |
975 change.iTzId = aTzId; |
919 change.iOperation = aChangeOp; |
976 change.iOperation = aChangeOp; |
920 |
977 |
921 TInt j = 0; |
978 TInt j = 0; |
928 |
985 |
929 //Publish ETzNamesChange property to the subscribed clients |
986 //Publish ETzNamesChange property to the subscribed clients |
930 NTzUpdate::TTzNamesChange namesChange; |
987 NTzUpdate::TTzNamesChange namesChange; |
931 namesChange.iUTCTimeOfNamesChange.UniversalTime(); |
988 namesChange.iUTCTimeOfNamesChange.UniversalTime(); |
932 TPckgBuf<NTzUpdate::TTzNamesChange> bufNames(namesChange); |
989 TPckgBuf<NTzUpdate::TTzNamesChange> bufNames(namesChange); |
|
990 OstTraceDef0( OST_TRACE_CATEGORY_DEBUG,PUBLISH_UPDATE_NOTIFICATION, TZNAMES_CHANGE_NOTIFICATION_3, "CTzUserDataDb::NotifyTzNamesChange:Time zone names change notification" ); |
|
991 |
933 RProperty::Set(NTzUpdate::KPropertyCategory, NTzUpdate::ETzNamesChange, bufNames); |
992 RProperty::Set(NTzUpdate::KPropertyCategory, NTzUpdate::ETzNamesChange, bufNames); |
934 } |
993 } |
935 |
994 |
936 // Backup and restore operations |
995 // Backup and restore operations |
937 void CTzUserDataDb::BackupBeginningL() |
996 void CTzUserDataDb::BackupBeginningL() |