//Deletes some records from the test table using "delete" transaction. //Do not put TEST or TEST2 macro calls here (except for record count checks)! //The method must leave if some of the calls inside fail. static void DeleteRecordsL() { RDbTable tbl; CleanupClosePushL(tbl); LEAVE_IF_ERROR(tbl.Open(TheDb, KTestTableName, RDbRowSet::EUpdatable)); TEST(tbl.CountL() == KTestRecordsCount); TheDb.Begin(); tbl.FirstL(); for(TInt i=0;i<(KTestRecordsCount/2);++i) { tbl.DeleteL(); tbl.NextL(); } TInt err = TheDb.Commit(); if(err != KErrNone) { TheDb.Rollback(); LEAVE(err); } TEST(tbl.CountL() == (KTestRecordsCount / 2)); CleanupStack::PopAndDestroy(&tbl); }
//Adds some data to the test table static void AddTestDataL(RDbNamedDatabase& aDb) { RDbTable tbl; CleanupClosePushL(tbl); TEST2(tbl.Open(aDb, KTestTableName, RDbRowSet::EUpdatable), KErrNone); for(TInt i=0;i<KTestRecordsCount;++i) { tbl.InsertL(); tbl.SetColL(2, _L8("1ABCDEFGHI2ABCDEFGHI3ABCDEFGHI4ABCDEFGHI5ABCDEFGHI6ABCDEFGHI7ABCDEFGHI8ABCDEFGHI9ABCDEFGHI0ABCDEFGHI")); tbl.PutL(); } TEST(tbl.CountL() == KTestRecordsCount); CleanupStack::PopAndDestroy(&tbl); }
// --------------------------------------------------------------------------- // CIRNmsLogDb:AddNmsLogStartL() // adds the NmsLog log entry into data base // --------------------------------------------------------------------------- // void CIRNmsLogDb::AddNmsLogStartL( CIRNmsLogger& aNmsLog ) { IRLOG_DEBUG( "CIRNmsLogDb::AddNmsLogStartL" ); OpenDbL(); RDbTable nmsLogtable; TInt error=nmsLogtable.Open( iNmsLogDb, KNmsLogTable, nmsLogtable. EUpdatable ); CleanupClosePushL( nmsLogtable ); if ( error ) { CloseDb(); User::LeaveIfError( error ); } //! arrange the presets in incresing order of index nmsLogtable.SetIndex( KNmsLogIndex ); nmsLogtable.Reset(); //if NmsLog log is greater or equal to than 5 if ( nmsLogtable.CountL() >= KMaxNoNmsLog ) { //first row is selected nmsLogtable.FirstL(); //the current row is selected nmsLogtable.GetL(); //delete that entry nmsLogtable.DeleteL(); } CleanupStack::PopAndDestroy( &nmsLogtable ); //Algorithm : else condition need not handle seperatly //Algorithm : add NmsLogid and informations like //starttime,connectedfrom,NmsLogid,connectiontype,channelid //currentnetwork,homenetwork,NmsLogtable //Algorithm: if no. of NmsLog is greater than 5 _LIT( query, "SELECT * FROM %S" ); HBufC* sqlStr=HBufC::NewLC( query().Length() + KNmsLogTable().Length() ); sqlStr->Des().Format( query, &KNmsLogTable ); // Create a view on the database RDbView view; error = view.Prepare( iNmsLogDb, *sqlStr ); if ( error ) { CloseDb(); User::LeaveIfError( error ); } CleanupStack::PopAndDestroy( sqlStr ); CleanupClosePushL( view ); error = view.EvaluateAll(); if ( error ) { CloseDb(); User::LeaveIfError( error ); } CDbColSet* columns = view.ColSetL(); CleanupStack::PushL( columns ); RDbColWriteStream writeStream; TRAP( error, //trap start // Insert a row. Column order matches sql select statement view.InsertL(); //get index view.SetColL( columns->ColNo( KID ), aNmsLog.NmsLogId() ); //!open stream writeStream.OpenLC( view, columns->ColNo( KNmsLogCol ) ); aNmsLog.ExternalizeL( writeStream ); writeStream.CommitL(); CleanupStack::PopAndDestroy( &writeStream ); );
// ----------------------------------------------------------------------------- // CLogTask::DoExecuteL // Helper to executes the task. // (other items were commented in a header). // ----------------------------------------------------------------------------- // void CLogTask::DoExecuteL() { RDbs dbSession; User::LeaveIfError( dbSession.Connect() ); CleanupClosePushL( dbSession ); // Construct the db format string HBufC* formatString = HBufC::NewLC( KLogSecureFormat().Length() + KLogAccessPolicyUid.Name().Length() ); TPtr ptr( formatString->Des() ); TUidName uidStr = KLogAccessPolicyUid.Name(); ptr.Format( KLogSecureFormat, &uidStr ); RDbNamedDatabase dbs; // Try to open the db TInt err = dbs.Open( dbSession, KLogDatabaseName, *formatString ); if ( err == KErrNotFound ) { // DB not exist, create it User::LeaveIfError( dbs.Create( dbSession, KLogDatabaseName, *formatString ) ); } else if ( err != KErrNone ) { User::Leave( err ); } CleanupClosePushL( dbs ); // See if the log table already exists TBool needCompact( EFalse ); RDbTable table; err = table.Open( dbs, KLogTableName ); if ( err != KErrNone ) { // Table does not exist // Create the table User::LeaveIfError( dbs.Execute( KLogCreateTableSQL ) ); } else { // Check that we don't have too many rows CleanupClosePushL( table ); if ( table.CountL( RDbTable::EQuick ) >= KMaxLogEntryCount ) { // Delete the first row table.FirstL(); table.DeleteL(); needCompact = ETrue; } CleanupStack::PopAndDestroy( &table ); } // Add entry to the table // Time HBufC* timeString = HBufC::NewLC( KMaxTimeStringLength ); TPtr timePtr( timeString->Des() ); timePtr.Num( iLogEntry.iTime.Int64() ); // Version HBufC* version = ConstructVersionStringLC( iLogEntry.iVersion.iMajor, iLogEntry.iVersion.iMinor, iLogEntry.iVersion.iBuild ); // Construct the sql query HBufC* sqlQuery = HBufC::NewLC( KLogInsertSQLFormat().Length() + KMaxLogNameLength + KMaxLogVendorLength + version->Length() + timeString->Length() + KExtraCharsInSql ); TPtr sqlPtr( sqlQuery->Des() ); sqlPtr.Format( KLogInsertSQLFormat, timeString, iLogEntry.iUid.iUid, &(iLogEntry.iName), &(iLogEntry.iVendor), version, iLogEntry.iAction, iLogEntry.iIsStartup ); // Execute the query User::LeaveIfError( dbs.Execute( *sqlQuery ) ); // Compact the db if needed if ( needCompact ) { dbs.Compact(); } CleanupStack::PopAndDestroy( 6 ); // sqlQuery, version, timeString, dbs, formatString, dbSession }
/** @SYMTestCaseID SYSLIB-DBMS-CT-0016 @SYMTestCaseDesc R/W operations at a table level. This test app has "PowerMgmt" (TABLE A: READ) capability, which allows it to read data from table A. B and C tables can be read too, because they do not have read security policy. @SYMTestPriority High @SYMTestActions R/W table operations. @SYMTestExpectedResults The test must not fail. @SYMREQ REQ2429 DBMS shall provide an API to apply security policies to database tables. */ static void TblRWL() { TheTest.Printf(_L("Table A - Write\n")); TInt err = TheTbl.Open(TheDb, KTblNameA, RDbRowSet::EReadOnly); TEST2(err, KErrNone); //The test must fail, because the test app cannot satisfy table A, policy W. TRAP(err, TheTbl.InsertL()); TEST2(err, KErrPermissionDenied); err = TheDb.Execute(_L("UPDATE A SET DATA1 = 400 WHERE ID < 10")); TEST2(err, KErrPermissionDenied); TheTest.Printf(_L("Table A - Read\n")); //The test must pass, because the test app can satisfy table A, policy R. TBool res = EFalse; TRAP(err, res = TheTbl.FirstL()); TEST2(err, KErrNone); TEST(res); TInt cnt = TheTbl.CountL(); TEST(cnt > 0); err = TheView.Prepare(TheDb, TDbQuery(_L("SELECT * FROM A"))); TEST2(err, KErrNone); cnt = TheView.CountL(); TEST(cnt > 0); TheView.Close(); TheTbl.Close(); TheTest.Printf(_L("Table B - Write\n")); err = TheTbl.Open(TheDb, KTblNameB, RDbRowSet::EReadOnly); TEST2(err, KErrNone); //The test must fail, because the test app cannot satisfy table B, policy W. TRAP(err, TheTbl.InsertL()); TEST2(err, KErrPermissionDenied); err = TheDb.Execute(_L("INSERT INTO B (DATA2) VALUES (45)")); TEST2(err, KErrPermissionDenied); TheTest.Printf(_L("Table B - Read\n")); //The test must pass, because table B has no R policy. TRAP(err, res = TheTbl.FirstL()); TEST2(err, KErrNone); TEST(res); cnt = TheTbl.CountL(); TEST(cnt > 0); err = TheView.Prepare(TheDb, TDbQuery(_L("SELECT * FROM B"))); TEST2(err, KErrNone); cnt = TheView.CountL(); TEST(cnt > 0); TheView.Close(); TheTbl.Close(); TheTest.Printf(_L("Table C - Write\n")); err = TheTbl.Open(TheDb, KTblNameC); //The test must fail, because the test app cannot satisfy table C, policy W. TEST2(err, KErrPermissionDenied); err = TheTbl.Open(TheDb, KTblNameC, RDbRowSet::EReadOnly); TEST2(err, KErrNone); TRAP(err, TheTbl.InsertL()); TEST2(err, KErrPermissionDenied); err = TheDb.Execute(_L("UPDATE C SET DATA1 = 400 WHERE ID < 10")); TEST2(err, KErrPermissionDenied); TheTest.Printf(_L("Table C - Read\n")); //The test must pass, because table C has no R policy. TRAP(err, res = TheTbl.FirstL()); TEST2(err, KErrNone); TEST(res); cnt = TheTbl.CountL(); TEST(cnt > 0); err = TheView.Prepare(TheDb, TDbQuery(_L("SELECT * FROM C"))); TEST2(err, KErrNone); cnt = TheView.CountL(); TEST(cnt > 0); TheView.Close(); TheTbl.Close(); }