--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/omadmadapters/fota/src/nsmldmfotaadapterdb.cpp Tue Jul 06 14:06:19 2010 +0300
@@ -0,0 +1,881 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Fota adapter's DB implementation file
+*
+*/
+
+
+
+
+
+// INCLUDE FILES
+#include <sysutil.h>
+#include <bautils.h>
+
+#include "nsmldmfotaadapterdb.h"
+#include "nsmlconstants.h"
+#include "nsmldebug.h"
+
+#ifndef __WINS__
+ // This lowers the unnecessary compiler warning (armv5) to remark.
+ // "Warning: #174-D: expression has no effect..." is caused by
+ // DBG_ARGS8 macro in no-debug builds.
+#pragma diag_remark 174
+#endif
+
+// ============================ MEMBER FUNCTIONS =============================
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::NewL()
+// Creates a new instance of CNSmlDmFotaAdapterDb object.
+// ---------------------------------------------------------------------------
+//
+CNSmlDmFotaAdapterDb* CNSmlDmFotaAdapterDb::NewL()
+ {
+ _DBG_FILE("CNSmlDmFotaAdapterDb::NewL(): begin");
+
+ CNSmlDmFotaAdapterDb* self = CNSmlDmFotaAdapterDb::NewLC();
+ CleanupStack::Pop( self );
+
+ _DBG_FILE("CNSmlDmFotaAdapterDb::NewL(): end");
+
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::NewLC()
+// Creates a new instance of CNSmlDmFotaAdapterDb object.
+// Pushes and leaves new instance onto CleanupStack.
+// ---------------------------------------------------------------------------
+//
+CNSmlDmFotaAdapterDb* CNSmlDmFotaAdapterDb::NewLC()
+ {
+ _DBG_FILE("CNSmlDmFotaAdapterDb::NewLC(): begin");
+
+ CNSmlDmFotaAdapterDb* self = new( ELeave ) CNSmlDmFotaAdapterDb();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+
+ _DBG_FILE("CNSmlDmFotaAdapterDb::NewLC(): end");
+
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::ConstructL()
+// Second phase constructor.
+// ---------------------------------------------------------------------------
+//
+void CNSmlDmFotaAdapterDb::ConstructL()
+ {
+ _DBG_FILE("CNSmlDmFotaAdapterDb::ConstructL(): begin");
+
+ User::LeaveIfError( iFsSession.Connect() );
+ User::LeaveIfError( iRdbSession.Connect() );
+ iFsSession.SetSessionToPrivate( KNSmlFotaAdapterDbDrive );
+
+ TParse name;
+
+#ifdef SYMBIAN_SECURE_DBMS
+ name.Set( KNSmlFotaAdapterDbName(), NULL, NULL );
+#else
+ name.Set( KNSmlFotaAdapterDbName(), KNSmlDatabasesNonSecurePath, NULL );
+#endif
+
+ TInt err = iDatabase.Open( iRdbSession,
+ name.FullName(),
+ KNSmlDBMSSecureMDHostOneID );
+ if ( err == KErrNotFound )
+ {
+ CreateDatabaseL( name.FullName() );
+ err = iDatabase.Open( iRdbSession,
+ name.FullName(),
+ KNSmlDBMSSecureMDHostOneID );
+ User::LeaveIfError( err );
+ }
+ else
+ {
+
+ if ( ( err == KErrEof ) || ( err == KErrCorrupt ) ||
+ ( err == KErrArgument ) )
+ {
+ // something seriously wrong with the db, delete it and try
+ // to create new
+ iRdbSession.DeleteDatabase( name.FullName(),
+ KNSmlDMHostOnePolicyUID );
+ CreateDatabaseL( name.FullName() );
+ err = iDatabase.Open( iRdbSession,
+ name.FullName(),
+ KNSmlDBMSSecureMDHostOneID );
+ }
+
+ User::LeaveIfError( err );
+ }
+
+ User::LeaveIfError( iFwObjectTable.Open( iDatabase,
+ KNSmlTableFwMgmtObject ) );
+ iColSet = iFwObjectTable.ColSetL();
+
+ _DBG_FILE("CNSmlDmFotaAdapterDb::ConstructL(): end");
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::CNSmlDmFotaAdapterDb()
+// Constructor.
+// ---------------------------------------------------------------------------
+//
+CNSmlDmFotaAdapterDb::CNSmlDmFotaAdapterDb()
+ {
+ _DBG_FILE("CNSmlDmFotaAdapterDb::CNSmlDmFotaAdapterDb(): begin");
+ _DBG_FILE("CNSmlDmFotaAdapterDb::CNSmlDmFotaAdapterDb(): end");
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::~CNSmlDmFotaAdapterDb()
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CNSmlDmFotaAdapterDb::~CNSmlDmFotaAdapterDb()
+ {
+ _DBG_FILE("CNSmlDmFotaAdapterDb::~CNSmlDmFotaAdapterDb(): begin");
+
+ iView.Close();
+
+ delete iColSet;
+ iFwObjectTable.Close();
+
+ iDatabase.Close();
+ iFsSession.Close();
+ iRdbSession.Close();
+
+ _DBG_FILE("CNSmlDmFotaAdapterDb::~CNSmlDmFotaAdapterDb(): ends");
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::AddFwObjectL()
+// Inserts new uninitialized row to FwMgmtObject table and returns its id.
+// ---------------------------------------------------------------------------
+//
+TNSmlDmFwObjectId CNSmlDmFotaAdapterDb::AddFwObjectL()
+ {
+ _DBG_FILE("CNSmlDmFotaAdapterDb::AddFwObjectL(): begin");
+
+ // Check OOD before inserting new row into FwMgmtObject table
+ if ( SysUtil::FFSSpaceBelowCriticalLevelL( &iFsSession,
+ KNSmlMaxFwMgmtObjectRowSize ) )
+ {
+ User::Leave( KErrDiskFull );
+ }
+
+ iDatabase.Begin();
+
+ // Insert new row, and set finalt result to its null value
+ iFwObjectTable.InsertL();
+ iFwObjectTable.SetColL( iColSet->ColNo( KNSmlFwMgmtObjectResult ),
+ KNSmlFotaNullResult );
+ iFwObjectTable.PutL();
+
+ CommitAndCompact();
+
+ _DBG_FILE("CNSmlDmFotaAdapterDb::AddFwObjectL(): end");
+
+ return iFwObjectTable.ColUint( iColSet->ColNo( KNSmlFwMgmtObjectId ) );
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::DeleteFwObjectL()
+// Deletes a row from FwMgmtObject table identified by aId. If such row is
+// not found, returns KErrNotFound, KErrNone otherwise.
+// ---------------------------------------------------------------------------
+//
+TInt CNSmlDmFotaAdapterDb::DeleteFwObjectL( const TNSmlDmFwObjectId aId )
+ {
+ _DBG_FILE("CNSmlDmFotaAdapterDb::DeleteFwObjectL(): begin");
+
+ HBufC* sql = HBufC::NewL( KNSmlDeleteFwMgmtObject().Length() +
+ KNSmlFwMgmtObjectIntegerLength );
+ sql->Des().Format( KNSmlDeleteFwMgmtObject, aId );
+
+ iDatabase.Begin();
+ TInt result = iDatabase.Execute( *sql );
+ CommitAndCompact();
+
+ delete sql;
+
+ _DBG_FILE("CNSmlDmFotaAdapterDb::DeleteFwObjectL(): end");
+
+ return ( result == 0 ) ? KErrNotFound : KErrNone;
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::GetEmptyFinalResultsL()
+// Finds all the rows in FwMgmtObject table that have null final result and
+// puts the PkgIds of those rows to aArray.
+// ---------------------------------------------------------------------------
+//
+void CNSmlDmFotaAdapterDb::GetEmptyFinalResultsL( RNSmlDmFwObjectArray& aArray )
+ {
+ _DBG_FILE("CNSmlDmFotaAdapterDb::GetEmptyFinalResultsL(): begin");
+
+ aArray.Reset();
+
+ HBufC* sql = HBufC::NewLC( KNSmlGetUnfinishedFwMgmtObjects().Length() +
+ KNSmlFwMgmtObjectIntLength );
+ sql->Des().Format( KNSmlGetUnfinishedFwMgmtObjects, KNSmlFotaNullResult );
+
+ PrepareViewL( *sql, iView.EReadOnly );
+
+ CleanupStack::PopAndDestroy( sql );
+
+ while ( iView.NextL() )
+ {
+ // get final result and append it to aArray
+ iView.GetL();
+ aArray.AppendL( iView.ColUint(
+ iColSet->ColNo( KNSmlFwMgmtObjectId ) ) );
+ }
+
+ _DBG_FILE("CNSmlDmFotaAdapterDb::GetEmptyFinalResultsL(): end");
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::GetEmptyFinalResultsL()
+// Finds all the rows in FwMgmtObject table that have null final result,
+// server id equals to aServerId and management uri is not an empty string.
+// Puts the PkgIds of those rows to aArray.
+// ---------------------------------------------------------------------------
+//
+void CNSmlDmFotaAdapterDb::GetEmptyFinalResultsL( RNSmlDmFwObjectArray& aArray,
+ const TDesC8& aServerId )
+ {
+ _DBG_FILE("CNSmlDmFotaAdapterDb::GetEmptyFinalResultsL(serverid): begin");
+
+ aArray.Reset();
+
+ HBufC* serverId = ConvertTo16BitLC( aServerId );
+
+ HBufC* sql = HBufC::NewLC(
+ KNSmlGetUnfinishedFwMgmtObjectByServerId().Length() +
+ KNSmlFwMgmtObjectIntLength +
+ serverId->Length() );
+
+ sql->Des().Format( KNSmlGetUnfinishedFwMgmtObjectByServerId,
+ KNSmlFotaNullResult,
+ serverId );
+
+ PrepareViewL( *sql, iView.EReadOnly );
+
+ CleanupStack::PopAndDestroy( sql );
+ CleanupStack::PopAndDestroy( serverId );
+
+ while ( iView.NextL() )
+ {
+ // get final result and append it to aArray
+ iView.GetL();
+ aArray.AppendL( iView.ColUint(
+ iColSet->ColNo( KNSmlFwMgmtObjectId ) ) );
+ }
+
+ _DBG_FILE("CNSmlDmFotaAdapterDb::GetEmptyFinalResultsL( serverid ): end");
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::PkgNameL()
+// Returns the PkgName field from FW object identified by aId. If no such
+// object is found, returns NULL.
+// ---------------------------------------------------------------------------
+//
+HBufC8* CNSmlDmFotaAdapterDb::PkgNameL( const TNSmlDmFwObjectId aId )
+ {
+ return StrValueL( KNSmlFwMgmtObjectName, aId );
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::PkgVersionL()
+// Returns the PkgVersion field from FW object identified by aId. If no such
+// object is found, returns NULL.
+// ---------------------------------------------------------------------------
+//
+HBufC8* CNSmlDmFotaAdapterDb::PkgVersionL( const TNSmlDmFwObjectId aId )
+ {
+ return StrValueL( KNSmlFwMgmtObjectVersion, aId );
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::PkgUrlL()
+// Returns the PkgUrl field from FW object identified by aId. If no such
+// object is found, returns NULL.
+// ---------------------------------------------------------------------------
+//
+HBufC8* CNSmlDmFotaAdapterDb::PkgUrlL( const TNSmlDmFwObjectId aId )
+ {
+ return LongStrValueL( KNSmlFwMgmtObjectUrl, aId );
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::MgmtUriL()
+// Returns the MgmtUri field from FW object identified by aId. If no such
+// object is found, returns NULL.
+// ---------------------------------------------------------------------------
+//
+HBufC8* CNSmlDmFotaAdapterDb::MgmtUriL( const TNSmlDmFwObjectId aId )
+ {
+ return StrValueL( KNSmlFwMgmtObjectMgmtUri, aId );
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::ProfileIdL()
+// Returns the ProfileId field from FW object identified by aId. If no such
+// object is found, returns KErrNotFound.
+// ---------------------------------------------------------------------------
+//
+TSmlProfileId CNSmlDmFotaAdapterDb::ProfileIdL( const TNSmlDmFwObjectId aId )
+ {
+ return IntValueL( KNSmlFwMgmtObjectProfileId, aId );
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::ServerIdL()
+// Returns the ServerId field from FW object identified by aId. If no such
+// object is found, returns NULL.
+// ---------------------------------------------------------------------------
+//
+HBufC8* CNSmlDmFotaAdapterDb::ServerIdL( const TNSmlDmFwObjectId aId )
+ {
+ return StrValueL( KNSmlFwMgmtObjectServerId, aId );
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::FinalResultL()
+// Returns the FinalResult field from FW object identified by aId. If no such
+// object is found, returns KErrNotFound.
+// ---------------------------------------------------------------------------
+//
+TInt CNSmlDmFotaAdapterDb::FinalResultL( const TNSmlDmFwObjectId aId )
+ {
+ return IntValueL( KNSmlFwMgmtObjectResult, aId );
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::CorrelatorL()
+// Returns the Correlator field from FW object identified by aId. If no such
+// object is found, returns NULL.
+// ---------------------------------------------------------------------------
+//
+HBufC8* CNSmlDmFotaAdapterDb::CorrelatorL( const TNSmlDmFwObjectId aId )
+ {
+ return StrValueL( KNSmlFwMgmtObjectCorrelator, aId );
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::SetPkgNameL()
+// Sets aName as the value of PkgName in FW object identified by aId. If no
+// such object is found, returns KErrNotFound. If name is too large for the
+// database, returns KErrOverflow.
+// ---------------------------------------------------------------------------
+//
+TInt CNSmlDmFotaAdapterDb::SetPkgNameL( const TDesC8& aName,
+ const TNSmlDmFwObjectId aId )
+ {
+ if ( aName.Length() > KFotaMaxPkgNameLength )
+ {
+ return KErrOverflow;
+ }
+
+ return SetStrValueL( KNSmlFwMgmtObjectName, aName, aId );
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::SetPkgVersionL()
+// Sets aVersion as the value of PkgVersion in FW object identified by aId.
+// If no such object is found, returns KErrNotFound. If version is too
+// large for the database, returns KErrOverflow.
+// ---------------------------------------------------------------------------
+//
+TInt CNSmlDmFotaAdapterDb::SetPkgVersionL( const TDesC8& aVersion,
+ const TNSmlDmFwObjectId aId )
+ {
+ if ( aVersion.Length() > KFotaMaxPkgVersionLength )
+ {
+ return KErrOverflow;
+ }
+
+ return SetStrValueL( KNSmlFwMgmtObjectVersion, aVersion, aId );
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::SetPkgUrlL()
+// Sets aUrl as the value of PkgURL in FW object identified by aId. If no
+// such object is found, returns KErrNotFound. If url is too large for the
+// database, returns KErrOverflow.
+// ---------------------------------------------------------------------------
+//
+TInt CNSmlDmFotaAdapterDb::SetPkgUrlL( const TDesC8& aUrl,
+ const TNSmlDmFwObjectId aId )
+ {
+ if ( aUrl.Length() > KFotaMaxPkgURLLength )
+ {
+ return KErrOverflow;
+ }
+
+ return SetLongStrValueL( KNSmlFwMgmtObjectUrl, aUrl, aId );
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::SetMgmtUriL()
+// Sets aUri as the value of MgmtURI in FW object identified by aId. If no
+// such object is found, returns KErrNotFound. If uri is too large for the
+// database, returns KErrOverflow.
+// ---------------------------------------------------------------------------
+//
+TInt CNSmlDmFotaAdapterDb::SetMgmtUriL( const TDesC8& aUri,
+ const TNSmlDmFwObjectId aId )
+ {
+ if ( aUri.Length() > KNSmlMaxMgmtUriLength )
+ {
+ return KErrOverflow;
+ }
+
+ return SetStrValueL( KNSmlFwMgmtObjectMgmtUri, aUri, aId );
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::SetServerInfoL()
+// Sets aProfileId as the value of ProfileId and aServerId as the value of
+// ServerId in FW object identified by aId. If no such object is found,
+// returns KErrNotFound. If server id is too large for the database,
+// returns KErrOverflow.
+// ---------------------------------------------------------------------------
+//
+TInt CNSmlDmFotaAdapterDb::SetServerInfoL( const TSmlProfileId aProfile,
+ const TDesC8& aServerId,
+ const TNSmlDmFwObjectId aId )
+ {
+ _DBG_FILE("CNSmlDmFotaAdapterDb::SetServerInfoL(): begin");
+
+ if ( aServerId.Length() > KNSmlMaxServerIdLength )
+ {
+ return KErrOverflow;
+ }
+
+ HBufC* serverId = ConvertTo16BitLC( aServerId );
+ TInt ret = UpdateRowL( aId );
+
+ if ( ret == KErrNone )
+ {
+ // do update
+ iView.SetColL( iColSet->ColNo( KNSmlFwMgmtObjectProfileId ),
+ aProfile );
+ iView.SetColL( iColSet->ColNo( KNSmlFwMgmtObjectServerId ),
+ *serverId );
+ iView.PutL();
+ }
+
+ CommitAndCompact();
+
+ CleanupStack::PopAndDestroy( serverId );
+
+ _DBG_FILE("CNSmlDmFotaAdapterDb::SetServerInfoL(): end");
+
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::SetFinalResultL()
+// Sets aResult as the value of FinalResult in FW object identified by aId.
+// If no such object is found, returns KErrNotFound.
+// ---------------------------------------------------------------------------
+//
+TInt CNSmlDmFotaAdapterDb::SetFinalResultL( const TInt aResult,
+ const TNSmlDmFwObjectId aId )
+ {
+ return SetIntValueL( KNSmlFwMgmtObjectResult, aResult, aId );
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::SetCorrelatorL()
+// Sets aCorrealtor as the value of Correlator in FW object identified by aId.
+// If no such object is found, returns KErrNotFound. If given correlator is
+// too large for the database, returns KErrOverflow.
+// ---------------------------------------------------------------------------
+//
+TInt CNSmlDmFotaAdapterDb::SetCorrelatorL( const TDesC8& aCorrelator,
+ const TNSmlDmFwObjectId aId )
+ {
+ if ( aCorrelator.Length() > KNSmlMaxCorrelatorLength )
+ {
+ return KErrOverflow;
+ }
+
+ return SetStrValueL( KNSmlFwMgmtObjectCorrelator, aCorrelator, aId );
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::CreateDatabaseL()
+// Creates Fota database.
+// ---------------------------------------------------------------------------
+//
+void CNSmlDmFotaAdapterDb::CreateDatabaseL( const TDesC& aFullName )
+ {
+ _DBG_FILE("CNSmlDmFotaAdapterDb::CreateDatabaseL(): begin");
+
+ // Check OOD before creating new Fota DB
+ if ( SysUtil::FFSSpaceBelowCriticalLevelL( &iFsSession,
+ KNSmlFotaAdapterEmptyDbSize ) )
+ {
+ User::Leave( KErrDiskFull );
+ }
+
+ // create sql query string, 5 = amount of length integers used in Format()
+ HBufC* createFwMgmtTable = HBufC::NewLC(
+ KNSmlCreateFwMgmtObjectTable().Length() +
+ KNSmlFwMgmtObjectIntLength*5 );
+
+ createFwMgmtTable->Des().Format( KNSmlCreateFwMgmtObjectTable,
+ KFotaMaxPkgNameLength,
+ KFotaMaxPkgVersionLength,
+ KNSmlMaxMgmtUriLength,
+ KNSmlMaxServerIdLength,
+ KNSmlMaxCorrelatorLength );
+
+ User::LeaveIfError( iDatabase.Create( iRdbSession,
+ aFullName,
+ KNSmlDBMSSecureMDHostOneID ) );
+ iDatabase.Begin();
+ iDatabase.Execute( *createFwMgmtTable );
+
+ CommitAndCompact();
+ iDatabase.Close();
+
+ CleanupStack::PopAndDestroy( createFwMgmtTable );
+
+ _DBG_FILE("CNSmlDmFotaAdapterDb::CreateDatabaseL(): end");
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::SetStrValueL()
+// Sets aValue as the value of aColumn in FW object identified by aObject.
+// ---------------------------------------------------------------------------
+//
+TInt CNSmlDmFotaAdapterDb::SetStrValueL( const TDesC& aColumn,
+ const TDesC8& aValue,
+ const TNSmlDmFwObjectId aObject )
+ {
+ _DBG_FILE("CNSmlDmFotaAdapterDb::SetStrValueL(): begin");
+
+ HBufC* value = ConvertTo16BitLC( aValue );
+
+ DBG_ARGS( _S16("CNSmlDmFotaAdapterDb::SetStrValueL(): ('%S', '%S', %d)"),
+ &aColumn, value, aObject );
+
+ TInt ret = UpdateRowL( aObject );
+
+ if ( ret == KErrNone )
+ {
+ // do update
+ iView.SetColL( iColSet->ColNo( aColumn ), *value );
+ iView.PutL();
+ }
+
+ CommitAndCompact();
+
+ CleanupStack::PopAndDestroy( value );
+
+ _DBG_FILE("CNSmlDmFotaAdapterDb::SetStrValueL(): end");
+
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::SetLongStrValueL()
+// Streams aValue and its length as the value of aColumn in FW object
+// identified by aObject.
+// ---------------------------------------------------------------------------
+//
+TInt CNSmlDmFotaAdapterDb::SetLongStrValueL( const TDesC& aColumn,
+ const TDesC8& aValue,
+ const TNSmlDmFwObjectId aObject )
+ {
+ _DBG_FILE("CNSmlDmFotaAdapterDb::SetLongStrValueL(): begin");
+
+ HBufC* value = ConvertTo16BitLC( aValue );
+
+ DBG_ARGS( _S16("CNSmlDmFotaAdapterDb::SetStrValueL(): ('%S', '%S', %d)"),
+ &aColumn, value, aObject );
+
+ TInt ret = UpdateRowL( aObject );
+
+ if ( ret == KErrNone )
+ {
+ // do update
+
+ RDbColWriteStream wStream;
+ wStream.OpenL( iView, iColSet->ColNo( aColumn ) );
+ CleanupClosePushL( wStream );
+
+ wStream.WriteInt32L( value->Length() );
+ wStream.WriteL( *value, value->Length() );
+
+ CleanupStack::PopAndDestroy( &wStream );
+
+ iView.PutL();
+ }
+
+ CommitAndCompact();
+
+ CleanupStack::PopAndDestroy( value );
+
+ _DBG_FILE("CNSmlDmFotaAdapterDb::SetLongStrValueL(): end");
+
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::SetIntValueL()
+// Sets aValue as the value of aColumn in FW object identified by aObject.
+// ---------------------------------------------------------------------------
+//
+TInt CNSmlDmFotaAdapterDb::SetIntValueL( const TDesC& aColumn,
+ const TInt aValue,
+ const TNSmlDmFwObjectId aObject )
+ {
+ _DBG_FILE("CNSmlDmFotaAdapterDb::SetIntValueL(): begin");
+ DBG_ARGS( _S16("CNSmlDmFotaAdapterDb::SetIntValueL(): ('%S', %d, %d)"),
+ &aColumn, aValue, aObject );
+
+ TInt ret = UpdateRowL( aObject );
+
+ if ( ret == KErrNone )
+ {
+ // do update
+ iView.SetColL( iColSet->ColNo( aColumn ), aValue );
+ iView.PutL();
+ }
+
+ CommitAndCompact();
+
+ _DBG_FILE("CNSmlDmFotaAdapterDb::SetIntValueL(): end");
+
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::UpdateRowL()
+// Prepares iView when setting a value to one of the rows in DB table.
+// ---------------------------------------------------------------------------
+//
+TInt CNSmlDmFotaAdapterDb::UpdateRowL( const TNSmlDmFwObjectId aObject )
+ {
+ TInt ret = KErrNone;
+
+ HBufC* sql = FwMgmtObjectRowSqlLC( aObject );
+ PrepareViewL( *sql, iView.EUpdatable );
+ iDatabase.Begin();
+
+ CleanupStack::PopAndDestroy( sql );
+
+ if ( iView.FirstL() )
+ {
+ // fw object exists
+ // Get current row for accessing and initiate update
+ iView.GetL();
+ iView.UpdateL();
+ }
+ else
+ {
+ // fw object does not exists, cannot update
+ ret = KErrNotFound;
+ }
+
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::StrValueL()
+// Returns the value in FW object identified by aObject in column aColumn.
+// ---------------------------------------------------------------------------
+//
+HBufC8* CNSmlDmFotaAdapterDb::StrValueL( const TDesC& aColumn,
+ const TNSmlDmFwObjectId aObject )
+ {
+ DBG_ARGS( _S16("CNSmlDmFotaAdapterDb::StrValueL('%S', %d): begin"),
+ &aColumn, aObject );
+
+ HBufC8* value = NULL;
+
+ FetchRowL( aObject );
+
+ if ( iView.FirstL() )
+ {
+ // get value
+ iView.GetL();
+ TPtrC res = iView.ColDes( iColSet->ColNo( aColumn ) );
+
+ // convert to 8-bit
+ value = HBufC8::NewL( res.Length() );
+ value->Des().Copy( res );
+ }
+
+ _DBG_FILE("CNSmlDmFotaAdapterDb::StrValueL(): end");
+
+ return value;
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::LongStrValueL()
+// Returns the value in FW object identified by aObject in column aColumn.
+// ---------------------------------------------------------------------------
+//
+HBufC8* CNSmlDmFotaAdapterDb::LongStrValueL( const TDesC& aColumn,
+ const TNSmlDmFwObjectId aObject )
+ {
+ DBG_ARGS( _S16("CNSmlDmFotaAdapterDb::LongStrValueL('%S', %d): begin"),
+ &aColumn, aObject );
+
+ HBufC8* value = NULL;
+
+ FetchRowL( aObject );
+
+ if ( iView.FirstL() )
+ {
+ // get value
+ iView.GetL();
+
+ RDbColReadStream rStream;
+ rStream.OpenL( iView, iColSet->ColNo( aColumn ) );
+ CleanupClosePushL( rStream );
+
+ TInt length = 0;
+ TRAPD( err, length = rStream.ReadInt32L() );
+
+ HBufC* buf = HBufC::NewLC( length );
+ TPtr bufPtr = buf->Des();
+
+ if ( err == KErrNone )
+ {
+ rStream.ReadL( bufPtr, length );
+ }
+
+ // convert to 8-bit
+ value = HBufC8::NewL( bufPtr.Length() );
+ value->Des().Copy( bufPtr );
+
+ CleanupStack::PopAndDestroy( buf );
+ CleanupStack::PopAndDestroy( &rStream );
+ }
+
+ _DBG_FILE("CNSmlDmFotaAdapterDb::LongStrValueL(): end");
+
+ return value;
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::IntValueL()
+// Returns the value in FW object identified by aObject in column aColumn.
+// ---------------------------------------------------------------------------
+//
+TInt CNSmlDmFotaAdapterDb::IntValueL( const TDesC& aColumn,
+ const TNSmlDmFwObjectId aObject )
+ {
+ DBG_ARGS( _S16("CNSmlDmFotaAdapterDb::IntValueL('%S', %d): begin"),
+ &aColumn, aObject );
+
+ TInt value = KErrNotFound;
+
+ FetchRowL( aObject );
+
+ if ( iView.FirstL() )
+ {
+ iView.GetL();
+ value = iView.ColInt( iColSet->ColNo( aColumn ) );
+ }
+
+ _DBG_FILE("CNSmlDmFotaAdapterDb::IntValueL(): end");
+
+ return value;
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::FetchRowL()
+// Prepares iView when getting a single row from DB.
+// ---------------------------------------------------------------------------
+//
+void CNSmlDmFotaAdapterDb::FetchRowL( const TNSmlDmFwObjectId aObject )
+ {
+ HBufC* sql = FwMgmtObjectRowSqlLC( aObject );
+
+ PrepareViewL( *sql, iView.EReadOnly );
+
+ CleanupStack::PopAndDestroy( sql );
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::FwMgmtObjectRowSqlLC()
+// Returns a buffer containing formatted SQL statement for getting a FW object
+// identified by aId.
+// ---------------------------------------------------------------------------
+//
+HBufC* CNSmlDmFotaAdapterDb::FwMgmtObjectRowSqlLC( TNSmlDmFwObjectId aId ) const
+ {
+ HBufC* sql = HBufC::NewLC( KNSmlGetFwMgmtObject().Length() +
+ KNSmlFwMgmtObjectIntegerLength );
+
+ TPtr sqlPtr = sql->Des();
+ sqlPtr.Format( KNSmlGetFwMgmtObject, aId );
+ return sql;
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::PrepareViewL()
+// Closes and prepares the view
+// ---------------------------------------------------------------------------
+//
+void CNSmlDmFotaAdapterDb::PrepareViewL( const TDesC& aSql,
+ RDbRowSet::TAccess aAccess )
+ {
+ iView.Close();
+ User::LeaveIfError( iView.Prepare( iDatabase, TDbQuery(aSql), aAccess ) );
+
+ if ( iView.Unevaluated() )
+ {
+ User::LeaveIfError( iView.EvaluateAll() );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::CommitAndCompact()
+// Commits update and compacts the database
+// ---------------------------------------------------------------------------
+//
+void CNSmlDmFotaAdapterDb::CommitAndCompact()
+ {
+ iDatabase.Commit();
+ iDatabase.Compact();
+ }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmFotaAdapterDb::ConvertTo16BitLC()
+// Returns a pointer to a unicode copy of the given 8-bit descriptor.
+// The pointer to the copy is allocated from heap and pushed on the
+// CleanupStack.
+// ---------------------------------------------------------------------------
+//
+HBufC* CNSmlDmFotaAdapterDb::ConvertTo16BitLC( const TDesC8& aDes ) const
+ {
+ HBufC* buf = HBufC::NewLC( aDes.Length() );
+ buf->Des().Copy( aDes );
+
+ return buf;
+ }