persistentstorage/sql/TEST/t_sqldefect2.cpp
changeset 40 b8bdbc8f59c7
parent 31 ba1c4f4a893f
child 55 44f437012c90
equal deleted inserted replaced
33:5e4beccba4e9 40:b8bdbc8f59c7
    25 static RSqlDatabase TheDb2;
    25 static RSqlDatabase TheDb2;
    26 
    26 
    27 _LIT(KTestDir, "c:\\test\\");
    27 _LIT(KTestDir, "c:\\test\\");
    28 _LIT(KTestDatabase1, "c:\\test\\t_sqldefect2.db");
    28 _LIT(KTestDatabase1, "c:\\test\\t_sqldefect2.db");
    29 _LIT(KTestDatabaseJournal1, "c:\\test\\t_sqldefect2.db-journal");
    29 _LIT(KTestDatabaseJournal1, "c:\\test\\t_sqldefect2.db-journal");
    30 
    30 _LIT(KServerTempDir, "c:\\private\\10281e17\\temp\\");
    31 
    31 
    32 ///////////////////////////////////////////////////////////////////////////////////////
    32 ///////////////////////////////////////////////////////////////////////////////////////
    33 
    33 
    34 //Deletes all created test files.
    34 //Deletes all created test files.
    35 void DestroyTestEnv()
    35 void DestroyTestEnv()
   302 @SYMTestExpectedResults Test must not fail
   302 @SYMTestExpectedResults Test must not fail
   303 */
   303 */
   304 void DeleteTempFile()
   304 void DeleteTempFile()
   305     {   
   305     {   
   306     _LIT(KSqlSrvName, "sqlsrv.exe");
   306     _LIT(KSqlSrvName, "sqlsrv.exe");
   307     _LIT(KServerTempDir, "c:\\private\\10281e17\\temp\\");
       
   308     _LIT(KTempFile1, "TMP00052.$$$");
   307     _LIT(KTempFile1, "TMP00052.$$$");
   309     _LIT(KTempFile2, "TMP00044.$$$");
   308     _LIT(KTempFile2, "TMP00044.$$$");
   310     
   309     
   311     KillProcess(KSqlSrvName);
   310     KillProcess(KSqlSrvName);
   312  
   311  
   379     TheDb1.Close();
   378     TheDb1.Close();
   380     err = RSqlDatabase::Delete(KTestDatabase1);
   379     err = RSqlDatabase::Delete(KTestDatabase1);
   381     TEST2(err, KErrNone);
   380     TEST2(err, KErrNone);
   382 	}
   381 	}
   383 
   382 
       
   383 /**
       
   384 @SYMTestCaseID          PDS-SQL-CT-4213
       
   385 @SYMTestCaseDesc        Tests the ability of the SQL server to store empty strings and retrieve them as 
       
   386 						text column values, not NULLs.
       
   387 						Change: ou1cimx1#504388. 
       
   388 @SYMTestPriority        High
       
   389 @SYMTestActions         The test creates a database and a table and stores there empty strings.
       
   390 						Then the test retrieves the stored column values and verifies that the column type is
       
   391 						"text", not "null".
       
   392 @SYMTestExpectedResults Test must not fail
       
   393 */
       
   394 void EmptyTextColumnTest()
       
   395 	{
       
   396 	_LIT8(KEncUtf16, "encoding=\"UTF-16\"");
       
   397 	_LIT8(KEncUtf8, "encoding=\"UTF-8\"");
       
   398 	TPtrC8 enc[] = {KEncUtf16(), KEncUtf8()};
       
   399 	for(TInt i=0;i<(sizeof(enc)/sizeof(enc[0]));++i)
       
   400 		{
       
   401 		(void)RSqlDatabase::Delete(KTestDatabase1);
       
   402 		TInt err = TheDb1.Create(KTestDatabase1, &enc[i]);
       
   403 		TEST2(err, KErrNone);
       
   404 		//Insert records with empty text column values using RSqlDatabase::Exec()
       
   405 	    err = TheDb1.Exec(_L("CREATE TABLE A(ID INTEGER, T TEXT)"));
       
   406 	    TEST(err >= 0);
       
   407 	    err = TheDb1.Exec(_L("INSERT INTO A VALUES(1, '')"));
       
   408 	    TEST2(err, 1);
       
   409 	    err = TheDb1.Exec(_L8("INSERT INTO A VALUES(2, '')"));
       
   410 	    TEST2(err, 1);
       
   411 		//Insert a record with empty text column value using RSqlParamWriteStream
       
   412 	    RSqlStatement stmt;
       
   413 	    err = stmt.Prepare(TheDb1, _L("INSERT INTO A(ID, T) VALUES(:P1, :P2)"));
       
   414 	    TEST2(err, KErrNone);
       
   415 		err = stmt.BindInt(0, 3);
       
   416 	    TEST2(err, KErrNone);
       
   417 	    RSqlParamWriteStream strm;
       
   418 	    err = strm.BindText(stmt, 1);
       
   419 	    TEST2(err, KErrNone);
       
   420 	    TRAP(err, strm.WriteL(KNullDesC));
       
   421 	    TEST2(err, KErrNone);
       
   422 	    strm.Close();
       
   423 	    err = stmt.Exec();
       
   424 	    TEST2(err, 1);
       
   425 	    stmt.Close();
       
   426 		//Insert records with empty text column values using RSqlStatement::Bind()
       
   427 	    err = stmt.Prepare(TheDb1, _L("INSERT INTO A(ID, T) VALUES(:P1, :P2)"));
       
   428 	    TEST2(err, KErrNone);
       
   429 		err = stmt.BindInt(0, 4);
       
   430 	    TEST2(err, KErrNone);
       
   431 		err = stmt.BindText(1, KNullDesC);
       
   432 	    TEST2(err, KErrNone);
       
   433 	    err = stmt.Exec();
       
   434 	    TEST2(err, 1);
       
   435 	    //
       
   436 	    err = stmt.Reset();
       
   437 	    TEST2(err, KErrNone);
       
   438 		err = stmt.BindInt(0, 5);
       
   439 	    TEST2(err, KErrNone);
       
   440 	    _LIT(KEmptyStr, "");
       
   441 		err = stmt.BindText(1, KEmptyStr);
       
   442 	    TEST2(err, KErrNone);
       
   443 	    err = stmt.Exec();
       
   444 	    TEST2(err, 1);
       
   445 	    stmt.Close();
       
   446 	    //Read the empty text column values
       
   447 	    err = stmt.Prepare(TheDb1, _L("SELECT T FROM A"));
       
   448 	    TEST2(err, KErrNone);
       
   449 	    TInt cnt = 0;
       
   450 	    while((err = stmt.Next()) == KSqlAtRow)
       
   451 	    	{
       
   452 			++cnt;
       
   453 			TPtrC val;
       
   454 			err = stmt.ColumnText(0, val);
       
   455 			TEST2(err, KErrNone);
       
   456 			TEST2(val.Length(), 0);
       
   457 			TSqlColumnType type = stmt.ColumnType(0);
       
   458 			TEST2(type, ESqlText);
       
   459 	    	}
       
   460 	    stmt.Close();
       
   461 	    TEST2(err, KSqlAtEnd);
       
   462 	    TEST2(cnt, 5);
       
   463 	    //
       
   464 	    TheDb1.Close();
       
   465 	    err = RSqlDatabase::Delete(KTestDatabase1);
       
   466 	    TEST2(err, KErrNone);
       
   467 		}
       
   468 	}
       
   469 
       
   470 /**
       
   471 @SYMTestCaseID          PDS-SQL-CT-4214
       
   472 @SYMTestCaseDesc        Test for the change "After *#7370# Java apps are not preinstalled again" 
       
   473 @SYMTestPriority        High
       
   474 @SYMTestActions         The test makes sure there are no issues if the temp folder is removed after the server 
       
   475                         has already started. The test performs the following actions - 
       
   476                         1. Delete the 'temp' directory.
       
   477                         2. Create a transaction which creates temp files.
       
   478                         3. Check 'temp' folder exists at the end
       
   479 @SYMTestExpectedResults Test must not fail
       
   480 */
       
   481 void DeleteTempFolder()
       
   482     {
       
   483     //1. Delete 'temp' folder
       
   484     TInt err = TheFs.RmDir(KServerTempDir);
       
   485     TEST2(err, KErrNone);
       
   486 	
       
   487     //2. Create a transaction which creates temp files.
       
   488     (void)RSqlDatabase::Delete(KTestDatabase1);
       
   489     err = TheDb1.Create(KTestDatabase1);
       
   490     TEST2(err, KErrNone);
       
   491     
       
   492     err = TheDb1.Exec(_L("CREATE TABLE t1(x UNIQUE); INSERT INTO t1 VALUES(1)"));
       
   493     TEST(err >= 0);
       
   494     err = TheDb1.Exec(_L("BEGIN; UPDATE t1 SET x = 2; UPDATE t1 SET x = 3; COMMIT"));
       
   495     TEST(err >= 0);
       
   496     
       
   497     TheDb1.Close();
       
   498     err = RSqlDatabase::Delete(KTestDatabase1);
       
   499     TEST2(err, KErrNone);
       
   500     
       
   501     //3. Check 'temp' folder exists
       
   502     err = TheFs.MkDir(KServerTempDir);
       
   503     TEST2(err, KErrAlreadyExists);
       
   504     }	
       
   505 	
   384 void DoTestsL()
   506 void DoTestsL()
   385 	{
   507 	{
   386 	TheTest.Start(_L(" @SYMTestCaseID:SYSLIB-SQL-CT-4154 DEF143062: SQL, \"CREATE INDEX\" sql crashes SQL server"));
   508 	TheTest.Start(_L(" @SYMTestCaseID:SYSLIB-SQL-CT-4154 DEF143062: SQL, \"CREATE INDEX\" sql crashes SQL server"));
   387 	DEF143062();
   509 	DEF143062();
   388 
   510 
   390     DEF143061();
   512     DEF143061();
   391 
   513 
   392     TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-SQL-CT-4156 DEF143150: SQL, strftime() returns incorrect result"));
   514     TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-SQL-CT-4156 DEF143150: SQL, strftime() returns incorrect result"));
   393     DEF143150();
   515     DEF143150();
   394     
   516     
   395     TheTest.Next(_L(" @SYMTestCaseDesc Temp files created during sql operations are not deleted after rebooting the phone - 1"));
   517     TheTest.Next(_L(" @SYMTestCaseID:PDS-SQL-CT-4210 Temp files created during sql operations are not deleted after rebooting the phone - 1"));
   396     DeleteTempFile();
   518     DeleteTempFile();
   397     
   519     
   398     TheTest.Next(_L(" @SYMTestCaseDesc Temp files created during sql operations are not deleted after rebooting the phone - 2"));
   520     TheTest.Next(_L(" @SYMTestCaseID:PDS-SQL-CT-4211 Temp files created during sql operations are not deleted after rebooting the phone - 2"));
   399     TempFileTest();
   521     TempFileTest();
       
   522     
       
   523     TheTest.Next(_L(" @SYMTestCaseID:PDS-SQL-CT-4213 No support to store an empty string in symbian's sqlite."));
       
   524     EmptyTextColumnTest();
       
   525 	
       
   526 	TheTest.Next(_L(" @SYMTestCaseID:PDS-SQL-CT-4214 After *#7370# Java apps are not preinstalled again"));
       
   527     DeleteTempFolder();
   400 	}
   528 	}
   401 
   529 
   402 TInt E32Main()
   530 TInt E32Main()
   403 	{
   531 	{
   404 	TheTest.Title();
   532 	TheTest.Title();