--- a/persistentstorage/sql/TEST/t_sqlsecurity4.cpp Sat Feb 20 00:33:55 2010 +0200
+++ b/persistentstorage/sql/TEST/t_sqlsecurity4.cpp Fri Mar 12 15:51:02 2010 +0200
@@ -41,6 +41,7 @@
RTest TheTest(_L("t_sqlsecurity4 test"));
_LIT(KTestDbName, "c:[21212125]t_ab.db");
+_LIT(KTestDbName2, "c:\\test\\t_sqlsecurity4_2.db");
///////////////////////////////////////////////////////////////////////////////////////
//Restore original test database function
@@ -85,6 +86,65 @@
///////////////////////////////////////////////////////////////////////////////////////
+//This functnion is called while there is an open secure connection.
+//The function will create a new, non-secure connection and check that the non-secure database schema can be modified,
+//while there is another alive, secure database connection.
+void NonSecureDbTest()
+ {
+ (void)RSqlDatabase::Delete(KTestDbName2);
+ RSqlDatabase db;
+ TInt err = db.Create(KTestDbName2);
+ TEST2(err, KErrNone);
+
+ err = db.Exec(_L("CREATE TABLE A(I1 INTEGER, I2 INTEGER)"));
+ TEST(err >= 0);
+ err = db.Exec(_L("CREATE TEMP TABLE B(I1 INTEGER, I2 INTEGER)"));
+ TEST(err >= 0);
+
+ //"CREATE VIRTUAL TABLE" statement not supported
+ err = db.Exec(_L("CREATE VIRTUAL TABLE V1 USING FTS3(ColOne TEXT, ColTwo DATETIME)"));
+ TPtrC msg = db.LastErrorMessage();
+ TheTest.Printf(_L("*** \"CREATE VIRTUAL TABLE\" expected failure, msg=\"%S\", err=%d\r\n"), &msg, err);
+ TEST(err != KErrNone);
+
+ err = db.Exec(_L("CREATE TRIGGER T1 AFTER INSERT ON A BEGIN INSERT INTO B VALUES(new.I1, new.I2); END;"));
+ TEST(err >= 0);
+ err = db.Exec(_L("DROP TRIGGER T1"));
+ TEST(err >= 0);
+ err = db.Exec(_L("CREATE TEMP TRIGGER T2 AFTER UPDATE OF I1 ON A BEGIN UPDATE B SET I1 = new.I1; END;"));
+ TEST(err >= 0);
+ err = db.Exec(_L("DROP TRIGGER T2"));
+ TEST(err >= 0);
+
+ err = db.Exec(_L("CREATE VIEW V1 AS SELECT * FROM A"));
+ TEST(err >= 0);
+ err = db.Exec(_L("DROP VIEW V1"));
+ TEST(err >= 0);
+ err = db.Exec(_L("CREATE TEMP VIEW V2 AS SELECT * FROM A"));
+ TEST(err >= 0);
+ err = db.Exec(_L("DROP VIEW V2"));
+ TEST(err >= 0);
+
+ err = db.Exec(_L("CREATE INDEX Idx1 ON A(I1)"));
+ TEST(err >= 0);
+ err = db.Exec(_L("ANALYZE A"));
+ TEST(err >= 0);
+ err = db.Exec(_L("DROP INDEX Idx1"));
+ TEST(err >= 0);
+ err = db.Exec(_L("CREATE INDEX Idx2 ON B(I1)"));
+ TEST(err >= 0);
+ err = db.Exec(_L("DROP INDEX Idx2"));
+ TEST(err >= 0);
+
+ err = db.Exec(_L("DROP TABLE B"));
+ TEST(err >= 0);
+ err = db.Exec(_L("DROP TABLE A"));
+ TEST(err >= 0);
+
+ db.Close();
+ (void)RSqlDatabase::Delete(KTestDbName2);
+ }
+
/**
@SYMTestCaseID SYSLIB-SQL-CT-1646
@SYMTestCaseDesc Testing database operations on a secure database.
@@ -105,6 +165,26 @@
//Attempt to modify the database schema
err = TheDb.Exec(_L("CREATE TABLE C(FFF TEXT)"));
TEST2(err, KErrPermissionDenied);
+ err = TheDb.Exec(_L("CREATE TEMP TABLE TBL1(COL1 INTEGER, COL2 INTEGER)"));
+ TEST(err >= 0);
+ err = TheDb.Exec(_L("CREATE TEMP TRIGGER del1 AFTER DELETE ON TBL1 BEGIN DELETE FROM A; END;"));
+ TEST(err >= 0);
+ err = TheDb.Exec(_L("DROP TRIGGER del1"));
+ TEST(err >= 0);
+ err = TheDb.Exec(_L("CREATE TEMP VIEW V1 AS SELECT * FROM TBL1"));
+ TEST(err >= 0);
+ err = TheDb.Exec(_L("DROP VIEW V1"));
+ TEST(err >= 0);
+ err = TheDb.Exec(_L("CREATE INDEX I1 ON TBL1(COL2)"));
+ TEST(err >= 0);
+ err = TheDb.Exec(_L("DROP INDEX I1"));
+ TEST(err >= 0);
+ err = TheDb.Exec(_L("DROP TABLE TBL1"));
+ TEST(err >= 0);
+ err = TheDb.Exec(_L("ANALYZE A"));
+ TEST2(err, KErrPermissionDenied);
+ err = TheDb.Exec(_L("CREATE VIEW V2 AS SELECT * FROM A"));
+ TEST2(err, KErrPermissionDenied);
//Attempt to update the user data (but it includes a READ operation)
err = TheDb.Exec(_L("UPDATE A SET F1 = 11 WHERE F1 = 1"));
TEST(err >= 0);
@@ -156,6 +236,8 @@
RDebug::Print(_L("Value=%S\r\n"), &p);
stmt.Close();
+ NonSecureDbTest();
+
TheDb.Close();
}