/* ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- */ void CScheduleDB::DeleteFromDatabaseL(TInt& aIndex) { TFileName QueryBuffer; QueryBuffer.Copy(_L("SELECT * FROM ")); QueryBuffer.Append(KtxtItemlist); QueryBuffer.Append(_L(" WHERE ")); QueryBuffer.Append(NCol0); QueryBuffer.Append(_L(" = ")); QueryBuffer.AppendNum(aIndex); iItemsDatabase.Begin(); RDbView Myview; // query buffr with index finds only the selected item row. Myview.Prepare(iItemsDatabase,TDbQuery(QueryBuffer)); CleanupClosePushL(Myview); Myview.EvaluateAll(); Myview.FirstL(); // we have autoincrement in index so it should be unique // but just to make sure, we use 'while', instead of 'if' while(Myview.AtRow()) { Myview.GetL(); Myview.DeleteL(); Myview.NextL(); } CleanupStack::PopAndDestroy(1); // Myview iItemsDatabase.Commit(); // compacts the databse, by physicaly removig deleted data. iItemsDatabase.Compact(); }
// ----------------------------------------------------------------------------- // CWPInternetAPDB::DeleteFromDatabaseL // ----------------------------------------------------------------------------- // TBool CWPInternetAPDB::DeleteFromDatabaseL(TUint aAPId) { FLOG( _L( "[Provisioning] CWPInternetAPDB::DeleteFromDatabaseL" ) ); TBool rowsdeleted = EFalse; TFileName QueryBuffer; QueryBuffer.Copy(_L("SELECT * FROM ")); QueryBuffer.Append(KtxtItemlist); QueryBuffer.Append(_L(" WHERE ")); QueryBuffer.Append(NCol2); QueryBuffer.Append(_L(" = ")); QueryBuffer.AppendNum(aAPId); iItemsDatabase.Begin(); RDbView Myview; // query buffer with index finds only the selected item row. Myview.Prepare(iItemsDatabase, TDbQuery(QueryBuffer)); CleanupClosePushL(Myview); Myview.EvaluateAll(); if( Myview.FirstL()) { if (!Myview.IsEmptyL()) { // we have autoincrement in index so it should be unique // but just to make sure, we use 'while', instead of 'if' while (Myview.AtRow()) { Myview.GetL(); Myview.DeleteL(); Myview.NextL(); } iItemsDatabase.Commit(); // compacts the databse, by physically removig deleted data. iItemsDatabase.Compact(); rowsdeleted = ETrue; } } CleanupStack::PopAndDestroy(1); // Myview FLOG( _L( "[Provisioning] CWPInternetAPDB::DeleteFromDatabaseL: done" ) ); return rowsdeleted; }
// ----------------------------------------------------------------------------- // CWPInternetAPDB::DeleteFromDatabaseL // ----------------------------------------------------------------------------- // TBool CSCOMOAdapterDb::DeleteFromDatabaseL(TUint32 aLuid) { TBool rowsdeleted = EFalse; TFileName sqlQuery; PrepareLuidQuery(aLuid, sqlQuery); BeginDatabaseTransaction(); RDbView view; // query buffer with index finds only the selected item row. view.Prepare(iDatabase, TDbQuery(sqlQuery)); CleanupClosePushL(view); view.EvaluateAll(); view.FirstL(); if (!view.IsEmptyL()) { // we have autoincrement in index so it should be unique // but just to make sure, we use 'while', instead of 'if' while (view.AtRow()) { view.GetL(); view.DeleteL(); view.NextL(); } CommitDatabaseTransaction(); // compacts the databse, by physically removig deleted data. iDatabase.Compact(); rowsdeleted = ETrue; } CleanupStack::PopAndDestroy(1); // view return rowsdeleted; }
/** @SYMTestCaseID SYSLIB-DBMS-CT-3407 @SYMTestCaseDesc Test for defect DEF103023 - DBMS requires ReadDeviceData and WriteDeviceData capability to read from the db. The current test application has no capabilities at all. "C:TestDB.DB" database is a secure shared database with: - no "READ" polycy (no restrictions apply to the database read operations); - "WRITE" policy with "WriteUserData" capability defined; - "SCHEMA" policy with "NetworkServices" capability defined; - table C has no defined securoty policy, so the database security policy will be used; The current test application should be able to: - begin/commit/rollback a "read-only" transaction; But should fail if: - begin a transaction and try to modify the database within the transaction; This test function asserts the test cases described above. @SYMTestPriority High @SYMTestActions Test for defect DEF103023 - DBMS requires ReadDeviceData and WriteDeviceData capability to read from the db. @SYMTestExpectedResults Test must not fail @SYMDEF DEF103023 */ void DEF103023L() { TheTest.Printf(_L("Begin a transaction. Read-only operations tested\n")); TInt err = TheDb.Begin(); TEST2(err, KErrNone); TheTest.Printf(_L("Perform some read-only operations inside the transaction\n")); err = TheView.Prepare(TheDb, _L("SELECT * FROM C")); TEST2(err, KErrNone); err = TheView.EvaluateAll(); TEST2(err, KErrNone); TInt cnt = TheView.CountL(); TEST(cnt > 0); TBool rc = TheView.FirstL(); TEST(rc); TheView.GetL(); TInt val = TheView.ColInt32(1); rc = TheView.LastL(); TEST(rc); rc = TheView.NextL(); TEST(!rc); rc = TheView.PreviousL(); TEST(rc); TheView.BeginningL(); TheView.EndL(); TheView.Close(); TheTest.Printf(_L("Commit a transaction\n")); err = TheDb.Commit(); TEST2(err, KErrNone); // TheTest.Printf(_L("Begin a transaction. Read-only operations tested\n")); err = TheDb.Begin(); TEST2(err, KErrNone); err = TheView.Prepare(TheDb, _L("SELECT * FROM C")); TEST2(err, KErrNone); err = TheView.EvaluateAll(); TEST2(err, KErrNone); cnt = TheView.CountL(); TEST(cnt > 0); TheView.Close(); TheTest.Printf(_L("Rollback a transaction\n")); TheDb.Rollback(); // TheTest.Printf(_L("Begin a transaction. Tested operations violate the database security\n")); err = TheDb.Begin(); TEST2(err, KErrNone); err = TheView.Prepare(TheDb, _L("SELECT * FROM C")); TEST2(err, KErrNone); err = TheView.EvaluateAll(); TEST2(err, KErrNone); rc = TheView.FirstL(); TEST(rc); TheView.GetL(); TheTest.Printf(_L("An attempt to update a record within the transaction\n")); TRAP(err, TheView.UpdateL()); TEST2(err, KErrPermissionDenied); TheTest.Printf(_L("An attempt to delete a record within the transaction\n")); TRAP(err, TheView.DeleteL()); TEST2(err, KErrPermissionDenied); TheTest.Printf(_L("An attempt to insert a record within the transaction\n")); TRAP(err, TheView.InsertL()); TEST2(err, KErrPermissionDenied); TheView.Close(); TheTest.Printf(_L("An attempt to modify the database schema within the transaction\n")); err = TheDb.Execute(_L("CREATE TABLE C2(Id INTEGER, Z INTEGER)")); TEST2(err, KErrPermissionDenied); TheTest.Printf(_L("An attempt to execute an INSERT statement within the transaction\n")); err = TheDb.Execute(_L("INSERT INTO C VALUES(100)")); TEST2(err, KErrPermissionDenied); TheTest.Printf(_L("An attempt to modify the database within the transaction using RDbUpdate\n")); RDbUpdate update; err = update.Execute(TheDb, _L("INSERT INTO C VALUES(200)")); TEST2(err, KErrPermissionDenied); update.Close(); TheTest.Printf(_L("Rollback a transaction\n")); TheDb.Rollback(); }
void eapol_am_wlan_authentication_symbian_c::SavePSKL(TPSKEntry& entry) { EAP_TRACE_DEBUG( m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("eapol_am_wlan_authentication_symbian_c::SavePSKL(): this = 0x%08x\n"), this)); EAP_TRACE_RETURN_STRING(m_am_tools, "returns: eapol_am_wlan_authentication_symbian_c::SavePSKL()"); // Connect to CommDBif so that we can delete PSK entries that have no IAP associated anymore. CWLanSettings* wlan_settings = new(ELeave) CWLanSettings; CleanupStack::PushL(wlan_settings); SWLANSettings wlanSettings; if (wlan_settings->Connect() != KErrNone) { // Could not connect to CommDB User::Leave(KErrCouldNotConnect); } // Open database RDbNamedDatabase db; TFileName aPrivateDatabasePathName; EapPluginTools::GetPrivatePathL( m_session, aPrivateDatabasePathName); aPrivateDatabasePathName.Append(KEapolDatabaseName); EAP_TRACE_DATA_DEBUG_SYMBIAN(("aPrivateDatabasePathName", aPrivateDatabasePathName.Ptr(), aPrivateDatabasePathName.Size())); User::LeaveIfError(db.Open(m_session, aPrivateDatabasePathName)); CleanupClosePushL(db); HBufC* sqlbuf = HBufC::NewLC(KMaxSqlQueryLength); TPtr sqlStatement = sqlbuf->Des(); RDbView view; _LIT(KSQL, "SELECT %S, %S, %S, %S, %S FROM %S"); sqlStatement.Format(KSQL, &KServiceType, &KServiceIndex, &KSSID, &KPassword, &KPSK, &KEapolPSKTableName); User::LeaveIfError(view.Prepare(db, TDbQuery(sqlStatement), TDbWindow::EUnlimited)); CleanupClosePushL(view); User::LeaveIfError(view.EvaluateAll()); // Get column set so we get the correct column numbers CDbColSet* colSet = view.ColSetL(); CleanupStack::PushL(colSet); // Delete old row and also rows that have no associated IAP settings. if (view.FirstL()) { do { view.GetL(); if ((wlan_settings->GetWlanSettingsForService(view.ColUint32(colSet->ColNo(KServiceIndex)), wlanSettings) != KErrNone) || (view.ColUint32(colSet->ColNo(KServiceType)) == static_cast<TUint>(entry.indexType) && view.ColUint32(colSet->ColNo(KServiceIndex)) == static_cast<TUint>(entry.index))) { // Not found or current IAP view.DeleteL(); } } while (view.NextL() != EFalse); } wlan_settings->Disconnect(); view.InsertL(); view.SetColL(colSet->ColNo(KServiceType), (TUint)entry.indexType); view.SetColL(colSet->ColNo(KServiceIndex), (TUint)entry.index); view.SetColL(colSet->ColNo(KSSID), entry.ssid); view.SetColL(colSet->ColNo(KPassword), entry.password); view.SetColL(colSet->ColNo(KPSK), entry.psk); view.PutL(); CleanupStack::PopAndDestroy( colSet ); // Delete colSet. CleanupStack::PopAndDestroy(&view); CleanupStack::PopAndDestroy(sqlbuf); CleanupStack::PopAndDestroy(&db); CleanupStack::PopAndDestroy(wlan_settings); }