persistentstorage/sql/TEST/t_sqlprivcage.cpp
branchRCL_3
changeset 11 211563e4b919
parent 8 fa9941cf3867
--- a/persistentstorage/sql/TEST/t_sqlprivcage.cpp	Thu Apr 01 00:19:42 2010 +0300
+++ b/persistentstorage/sql/TEST/t_sqlprivcage.cpp	Wed Apr 14 17:46:32 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
 // All rights reserved.
 // This component and the accompanying materials are made available
 // under the terms of "Eclipse Public License v1.0"
@@ -242,6 +242,9 @@
     //Very long private database name
     err = db.Create(_L("c:\\private\\21212124\\hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh.db"));
     TEST2(err, KErrBadName);
+    //Private database name without drive letter
+    err = db.Create(_L("\\private\\21212124\\dbname_no_drive_letter.db"));
+    TEST2(err, KErrBadName);
     //Zero length private database name
     err = db.Create(_L(""));
     TEST2(err, KErrBadName);
@@ -302,10 +305,14 @@
 	TEST2(err, 1);
 	db2.Close();
 
-	//Open database 1, attach database 2
+	//Open database 1
 	RSqlDatabase db;
 	err = db.Open(KTestDb1);
 	TEST2(err, KErrNone);
+	//An attempt to attach a database with zero length name
+    err = db.Attach(_L(""), _L("Db2"));
+    TEST2(err, KErrBadName);
+    //Attach database 2
 	err = db.Attach(KTestDb2, _L("Db2"));
 	TEST2(err, KErrNone);
 
@@ -349,6 +356,32 @@
 	stmt.Close();
 	db.Close();
 		
+    //Open database 1, attach read-only database 2
+    err = db.Open(KTestDb1);
+    TEST2(err, KErrNone);
+    //Make database 2 read-only.
+    err = TheFs.SetAtt(KTestDb2, KEntryAttReadOnly, 0);
+    TEST2(err, KErrNone);
+    //Attach database 2
+    err = db.Attach(KTestDb2, _L("Db2"));
+    TEST2(err, KErrNone);
+    //
+    err = db.Exec(_L("INSERT INTO Db2.A(ID, T) VALUES(3, 'AAA')"));
+    TPtrC errmsg = db.LastErrorMessage();
+    TheTest.Printf(_L(" === Read-only private attached database. Msg=%S, err=%d\r\n"), &errmsg, err);
+    TEST(err != KErrNone);
+    TSqlScalarFullSelectQuery q(db);
+    TBuf<20> text2;
+    TRAP(err, q.SelectTextL(_L("SELECT T FROM Db2.A WHERE ID=2"), text2));
+    TEST2(err, KErrNone);
+    TEST(text2 == _L("AAA"));
+    //
+    err = db.Detach(_L("Db2"));
+    TEST2(err, KErrNone);
+    err = TheFs.SetAtt(KTestDb2, 0, KEntryAttReadOnly);
+    TEST2(err, KErrNone);
+    db.Close();
+    
 	err = RSqlDatabase::Delete(KTestDb2);
 	TEST2(err, KErrNone);
 	err = RSqlDatabase::Delete(KTestDb1);