--- a/persistentstorage/sql/TEST/t_sqlapi2.cpp Wed Apr 14 17:46:32 2010 +0300
+++ b/persistentstorage/sql/TEST/t_sqlapi2.cpp Tue Apr 27 18:25:57 2010 +0300
@@ -1697,6 +1697,74 @@
}
}
+/**
+@SYMTestCaseID PDS-SQL-CT-4198
+@SYMTestCaseDesc Expired SQL statements test.
+ The test creates a database and opens 2 connections to that database.
+ Connection 2 prepares couple of SELECT and INSERT statements (8-bit and 16-bit).
+ Then connection 1 renames the table used in the already prepared statements.
+ Connection 2 attempts to execute the prepared statements. The execution should fail
+ because the statements are expired, the database schema has changed after they
+ were prepared.
+@SYMTestActions Expired SQL statements test.
+@SYMTestExpectedResults Test must not fail
+@SYMTestPriority High
+@SYMDEF DEF145236
+*/
+void ExpiredStmtTest()
+ {
+ (void)RSqlDatabase::Delete(KTestDbName1);
+ //Create a database and create db connection 1.
+ TInt err = TheDb.Create(KTestDbName1);
+ TEST2(err, KErrNone);
+ err = TheDb.Exec(_L("CREATE TABLE A(C1 INTEGER)"));
+ TEST(err >= 0);
+ err = TheDb.Exec(_L("INSERT INTO A(C1) VALUES(1)"));
+ TEST2(err, 1);
+
+ //Create db connection 2 to the same database, as db connection 1.
+ RSqlDatabase db2;
+ err = db2.Open(KTestDbName1);
+ TEST2(err, KErrNone);
+
+ //Db connection 2. Prepare SELECT and INSERT, 8-bit and 16-bit statements.
+ RSqlStatement stmt1, stmt2, stmt3, stmt4;
+ err = stmt1.Prepare(db2, _L("SELECT * FROM A"));
+ TEST2(err, KErrNone);
+ err = stmt2.Prepare(db2, _L8("SELECT * FROM A"));
+ TEST2(err, KErrNone);
+ err = stmt3.Prepare(db2, _L("INSERT INTO A(C1) VALUES(2)"));
+ TEST2(err, KErrNone);
+ err = stmt4.Prepare(db2, _L8("INSERT INTO A(C1) VALUES(3)"));
+ TEST2(err, KErrNone);
+
+ //Modify the A table structure from the other connection
+ //err = TheDb.Exec(_L("ALTER TABLE A ADD C2 INTEGER"));
+ err = TheDb.Exec(_L("ALTER TABLE A RENAME TO B"));
+ TEST(err >= 0);
+
+ //Try to execute the already prepared statements.
+ err = stmt1.Next();
+ TEST2(err, KSqlErrSchema);
+ err = stmt1.Next();
+ TEST2(err, KSqlErrStmtExpired);
+ err = stmt2.Next();
+ TEST2(err, KSqlErrStmtExpired);
+ err = stmt3.Exec();
+ TEST2(err, KSqlErrStmtExpired);
+ err = stmt4.Exec();
+ TEST2(err, KSqlErrStmtExpired);
+ //
+ stmt4.Close();
+ stmt3.Close();
+ stmt2.Close();
+ stmt1.Close();
+ db2.Close();
+ TheDb.Close();
+ err = RSqlDatabase::Delete(KTestDbName1);
+ TEST2(err, KErrNone);
+ }
+
void DoTestsL()
{
TheTest.Start(_L(" @SYMTestCaseID:SYSLIB-SQL-UT-3512 RSqlStatement::ColumnCount() tests "));
@@ -1735,6 +1803,8 @@
ProfilerTest();
TheTest.Next( _L(" Compound SELECT, stack overflow test"));
CompoundSelectStackOverflowTest();
+ TheTest.Next(_L(" @SYMTestCaseID:PDS-SQL-CT-4198 Expired statements test"));
+ ExpiredStmtTest();
}
TInt E32Main()