// ---------------------------------------------------------------------------
//  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;
    }
//--------------------------------------------------------------------
//--------------------------------------------------------------------
//
void CPosLmNameIndex::LoadL()
    {
    // Skip index loading for empty databases
    TInt numLandmarks = PosLmServerUtility::TotalLandmarkCountL( iDbAccess );
    if ( numLandmarks == 0 )
        {
        iTimeStamp.UniversalTime();
        iStatus = KErrNone;
        return;
        }
    
    RDbTable table;
    TInt err = table.Open( iDatabase, KPosLmIndexTable, RDbRowSet::EReadOnly );
    if ( err )
        {
        LOG("NameIndex::LoadL: index table not found"); 
        User::Leave( err );
        }
    CleanupClosePushL( table );

    table.FirstL();
    if ( table.AtEnd() )
        {
        LOG("NameIndex::LoadL: index not found"); 
        User::Leave( KErrNotFound  );
        }

    table.GetL();

    // verify that index is valid for current language
    if ( !table.IsColNull( EPosLmIncLanguageCol ) )
        {
        TLanguage lang = (TLanguage) table.ColInt32( EPosLmIncLanguageCol );
        if ( User::Language() != lang ) 
            {
            LOG2("NameIndex::LoadL: index not valid, lang %d, current lang %d", 
                lang, User::Language() );
            User::Leave( KErrCorrupt );
            }
        }
    else
        {
        LOG("NameIndex::LoadL: index lang not found"); 
        User::Leave( KErrCorrupt );
        }

    // read the index
    if ( !table.IsColNull( EPosLmIncIndexDataCol ) )
        {
        RDbColReadStream readStream;
        readStream.OpenL( table, EPosLmIncIndexDataCol );
        CleanupClosePushL( readStream );
        InternalizeL( readStream );
        CleanupStack::PopAndDestroy( &readStream );

        // basic check for the index
        if ( Count() != numLandmarks )
            {
            LOG2("NameIndex::LoadL: index not valid, count %d, landmarks in db %d", 
                Count(), numLandmarks );
            User::Leave( KErrCorrupt );
            }
        }
    else
        {
        LOG("NameIndex::LoadL: index data not found"); 
        User::Leave( KErrCorrupt );
        }

    // read the time stamp
    iTimeStamp.UniversalTime();
    if ( !table.IsColNull( EPosLmIncTimestampCol ) )
        {
        iTimeStamp = table.ColTime( EPosLmIncTimestampCol );
        }
    else
        {
        LOG("NameIndex::LoadL: index timestamp not found"); 
        User::Leave( KErrCorrupt );
        }

    CleanupStack::PopAndDestroy ( &table );

    // index is valid
    iStatus = KErrNone;
    }