tzservices/tzserver/Server/Source/tzuserdata.cpp
changeset 81 676b6116ca93
parent 0 2e3d3ce01487
equal deleted inserted replaced
78:175a0d824084 81:676b6116ca93
     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 
   180 	iDatabase.Close();
   185 	iDatabase.Close();
   181 	}
   186 	}
   182 		
   187 		
   183 void CTzUserDataDb::OpenL()
   188 void CTzUserDataDb::OpenL()
   184 	{
   189 	{
       
   190     
   185 	RFs fs;
   191 	RFs fs;
   186 	CleanupClosePushL(fs);
   192 	CleanupClosePushL(fs);
   187 	
   193 	
   188 	// Open the database
   194 	// Open the database
   189 	TInt ret = iDatabase.Open(KUserDatabaseName());
   195 	TInt ret = iDatabase.Open(KUserDatabaseName());
   200 			CreateL();	
   206 			CreateL();	
   201 			}
   207 			}
   202 		}
   208 		}
   203 	else
   209 	else
   204 		{
   210 		{
       
   211 	    OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_FATAL, CTZUSERDATADB_OPENL, "CTzUserDataDb::OpenL:Error while creating path;return value=%d", ret );
       
   212 	    
   205 		User::LeaveIfError(ret);
   213 		User::LeaveIfError(ret);
   206 		}
   214 		}
   207 	CleanupStack::PopAndDestroy(&fs);
   215 	CleanupStack::PopAndDestroy(&fs);
   208 	}
   216 	}
   209 	
   217 	
   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;	
   333 		TInt ret = stmt.Exec();
   352 		TInt ret = stmt.Exec();
   334 		stmt.Close();
   353 		stmt.Close();
   335 		
   354 		
   336 		if(ret < KErrNone)
   355 		if(ret < KErrNone)
   337 			{
   356 			{
       
   357 		    OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_ERROR, CTZUSERDATADB_CREATETZL_ERROR2, "CTzUserDataDb::CreateTzL:Error while inserting rule:Error value=%d", ret );
       
   358 		    
   338 			User::Leave(ret);
   359 			User::Leave(ret);
   339 			}			
   360 			}			
   340 		}
   361 		}
   341 		
   362 		
   342 	// Insert a row in the names
   363 	// Insert a row in the names
   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()