changeset 55 | 44f437012c90 |
parent 31 | ba1c4f4a893f |
51:7d4490026038 | 55:44f437012c90 |
---|---|
27 /////////////////////////////////////////////////////////////////////////////////////// |
27 /////////////////////////////////////////////////////////////////////////////////////// |
28 |
28 |
29 RTest TheTest(_L("t_sqlperformance test")); |
29 RTest TheTest(_L("t_sqlperformance test")); |
30 RFs TheFs; |
30 RFs TheFs; |
31 TBuf<200> TheTestTitle; |
31 TBuf<200> TheTestTitle; |
32 TBuf<250> TheLogLine; |
|
33 TBuf8<250> TheLogLine8; |
|
32 TCmdLineParams TheCmdLineParams; |
34 TCmdLineParams TheCmdLineParams; |
33 TBuf8<200> TheSqlConfigString; |
35 TBuf8<200> TheSqlConfigString; |
34 |
36 |
35 _LIT(KUtf8, "UTF8 "); |
37 _LIT(KUtf8, "UTF8 "); |
36 _LIT(KUtf16, "UTF16"); |
38 _LIT(KUtf16, "UTF16"); |
39 TFileName TheNonSecureDbName; |
41 TFileName TheNonSecureDbName; |
40 TFileName TheNonSecureDbName2; |
42 TFileName TheNonSecureDbName2; |
41 TFileName TheNonSecureTmpDbName; |
43 TFileName TheNonSecureTmpDbName; |
42 TFileName TheSglRecDbFileName; |
44 TFileName TheSglRecDbFileName; |
43 |
45 |
44 _LIT(KSqlServerPrivateDir, "\\private\\10281e17\\"); |
46 //_LIT(KSqlServerPrivateDir, "\\private\\10281e17\\"); |
45 |
47 |
46 _LIT(KCreateDbScript, "z:\\test\\contacts_schema_to_vendors.sql"); |
48 _LIT(KCreateDbScript, "z:\\test\\contacts_schema_to_vendors.sql"); |
47 _LIT(KFillDbScript, "z:\\test\\add_simple_contacts.sql"); |
49 _LIT(KFillDbScript, "z:\\test\\add_simple_contacts.sql"); |
48 |
50 |
49 _LIT8(KCommitStr8, "COMMIT;"); |
51 _LIT8(KCommitStr8, "COMMIT;"); |
81 _LIT(KPrmName3, ":V3"); |
83 _LIT(KPrmName3, ":V3"); |
82 _LIT(KPrmName4, ":ID"); |
84 _LIT(KPrmName4, ":ID"); |
83 |
85 |
84 const TInt KTestTecordCount = 1000; |
86 const TInt KTestTecordCount = 1000; |
85 |
87 |
88 RFile TheLogFile; |
|
89 |
|
86 /////////////////////////////////////////////////////////////////////////////////////// |
90 /////////////////////////////////////////////////////////////////////////////////////// |
87 |
91 |
88 void TestEnvDestroy() |
92 void TestEnvDestroy() |
89 { |
93 { |
94 if(TheCmdLineParams.iLogFileName.Length() > 0) |
|
95 { |
|
96 (void)TheLogFile.Flush(); |
|
97 TheLogFile.Close(); |
|
98 } |
|
90 (void)RSqlDatabase::Delete(TheNonSecureTmpDbName); |
99 (void)RSqlDatabase::Delete(TheNonSecureTmpDbName); |
91 (void)RSqlDatabase::Delete(TheNonSecureDbName2); |
100 (void)RSqlDatabase::Delete(TheNonSecureDbName2); |
92 (void)RSqlDatabase::Delete(TheNonSecureDbName); |
101 (void)RSqlDatabase::Delete(TheNonSecureDbName); |
93 (void)RSqlDatabase::Delete(TheSecureDbName); |
102 (void)RSqlDatabase::Delete(TheSecureDbName); |
94 TheFs.Close(); |
103 TheFs.Close(); |
125 TInt err = TheFs.Connect(); |
134 TInt err = TheFs.Connect(); |
126 TEST2(err, KErrNone); |
135 TEST2(err, KErrNone); |
127 |
136 |
128 err = TheFs.MkDir(TheNonSecureDbName); |
137 err = TheFs.MkDir(TheNonSecureDbName); |
129 TEST(err == KErrNone || err == KErrAlreadyExists); |
138 TEST(err == KErrNone || err == KErrAlreadyExists); |
139 |
|
140 if(TheCmdLineParams.iLogFileName.Length() > 0) |
|
141 { |
|
142 err = TheLogFile.Replace(TheFs, TheCmdLineParams.iLogFileName, EFileRead | EFileWrite); |
|
143 TEST2(err, KErrNone); |
|
144 LogConfig(TheLogFile, TheCmdLineParams); |
|
145 } |
|
130 } |
146 } |
131 |
147 |
132 //Reads a SQL file and returns the file content as HBUFC string. |
148 //Reads a SQL file and returns the file content as HBUFC string. |
133 //The caller is responsible for destroying the returned HBUFC object. |
149 //The caller is responsible for destroying the returned HBUFC object. |
134 template <class HBUFC> HBUFC* ReadSqlScript(const TDesC& aSqlFileName) |
150 template <class HBUFC> HBUFC* ReadSqlScript(const TDesC& aSqlFileName) |
175 } |
191 } |
176 //Explicit GetNextTrans() template instantiations. |
192 //Explicit GetNextTrans() template instantiations. |
177 template TPtrC8 GetNextTrans<TPtrC8, TDesC8>(TPtrC8&, const TDesC8&); |
193 template TPtrC8 GetNextTrans<TPtrC8, TDesC8>(TPtrC8&, const TDesC8&); |
178 template TPtrC16 GetNextTrans<TPtrC16, TDesC16>(TPtrC16&, const TDesC16&); |
194 template TPtrC16 GetNextTrans<TPtrC16, TDesC16>(TPtrC16&, const TDesC16&); |
179 |
195 |
180 //Prints aTicks parameter (converted to ms) |
196 //Prints the test case title and execution time in microseconds |
181 void PrintStats(TUint32 aStartTicks, TUint32 aEndTicks) |
197 void PrintStats(TUint32 aStartTicks, TUint32 aEndTicks) |
182 { |
198 { |
183 static TInt freq = 0; |
199 static TInt freq = 0; |
184 if(freq == 0) |
200 if(freq == 0) |
185 { |
201 { |
190 { |
206 { |
191 diffTicks = KMaxTUint32 + diffTicks + 1; |
207 diffTicks = KMaxTUint32 + diffTicks + 1; |
192 } |
208 } |
193 const TInt KMicroSecIn1Sec = 1000000; |
209 const TInt KMicroSecIn1Sec = 1000000; |
194 TInt32 us = (diffTicks * KMicroSecIn1Sec) / freq; |
210 TInt32 us = (diffTicks * KMicroSecIn1Sec) / freq; |
195 TheTest.Printf(_L("####Execution time: %d ms\r\n"), us / 1000); |
211 TheTest.Printf(_L("%S: %d us\r\n"), &TheTestTitle, us); |
196 } |
212 if(TheCmdLineParams.iLogFileName.Length() > 0) |
197 |
213 { |
214 TheLogLine.Format(_L("%S¬%d¬us\r\n"), &TheTestTitle, us); |
|
215 TheLogLine8.Copy(TheLogLine); |
|
216 (void)TheLogFile.Write(TheLogLine8); |
|
217 } |
|
218 } |
|
219 |
|
220 /* |
|
198 void PrintFileSize(const TDesC& aFileName) |
221 void PrintFileSize(const TDesC& aFileName) |
199 { |
222 { |
200 TParse parse; |
223 TParse parse; |
201 parse.Set(aFileName, &KSqlServerPrivateDir(), 0); |
224 parse.Set(aFileName, &KSqlServerPrivateDir(), 0); |
202 RFile file; |
225 RFile file; |
206 err = file.Size(size); |
229 err = file.Size(size); |
207 TEST2(err, KErrNone); |
230 TEST2(err, KErrNone); |
208 TheTest.Printf(_L("####FileSize: %d\r\n"), size); |
231 TheTest.Printf(_L("####FileSize: %d\r\n"), size); |
209 file.Close(); |
232 file.Close(); |
210 } |
233 } |
234 */ |
|
211 |
235 |
212 ////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
236 ////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
213 /////// SQL SERVER performance tests |
237 /////// SQL SERVER performance tests |
214 ////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
238 ////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
215 |
239 |
312 /////////////////////////////////////////////////////////////////////////////////////// |
336 /////////////////////////////////////////////////////////////////////////////////////// |
313 |
337 |
314 //"INSERT" test function |
338 //"INSERT" test function |
315 template <class HBUFC, class PTRC, class DESC, TDbType TYPE> void InsertTest(const TDesC& aDbFileName, const DESC& aCommitStr) |
339 template <class HBUFC, class PTRC, class DESC, TDbType TYPE> void InsertTest(const TDesC& aDbFileName, const DESC& aCommitStr) |
316 { |
340 { |
317 TheTest.Printf(_L("\"Insert\" test\r\n")); |
|
318 RSqlDatabase db = TDbHelper<TYPE>::Open(aDbFileName); |
341 RSqlDatabase db = TDbHelper<TYPE>::Open(aDbFileName); |
319 ExecuteSqlScript<HBUFC, PTRC, DESC>(db, KFillDbScript, aCommitStr); |
342 ExecuteSqlScript<HBUFC, PTRC, DESC>(db, KFillDbScript, aCommitStr); |
320 db.Close(); |
343 db.Close(); |
321 } |
344 } |
322 //Explicit InsertTest() template instantiations. |
345 //Explicit InsertTest() template instantiations. |
326 template void InsertTest<HBufC16, TPtrC16, TDesC16, ESecureDb>(const TDesC&, const TDesC16&); |
349 template void InsertTest<HBufC16, TPtrC16, TDesC16, ESecureDb>(const TDesC&, const TDesC16&); |
327 |
350 |
328 //"UPDATE" test function (parametrized update) |
351 //"UPDATE" test function (parametrized update) |
329 template <class DESC, TDbType TYPE> void UpdateTest(const TDesC& aDbFileName, const DESC& aUpdateSql) |
352 template <class DESC, TDbType TYPE> void UpdateTest(const TDesC& aDbFileName, const DESC& aUpdateSql) |
330 { |
353 { |
331 TheTest.Printf(_L("\"Update (parametrized)\" test\r\n")); |
|
332 RSqlDatabase db = TDbHelper<TYPE>::Open(aDbFileName); |
354 RSqlDatabase db = TDbHelper<TYPE>::Open(aDbFileName); |
333 RSqlStatement stmt; |
355 RSqlStatement stmt; |
334 TInt err = stmt.Prepare(db, aUpdateSql); |
356 TInt err = stmt.Prepare(db, aUpdateSql); |
335 TEST2(err, KErrNone); |
357 TEST2(err, KErrNone); |
336 |
358 |
378 template void UpdateTest<TDesC16, ESecureDb>(const TDesC&, const TDesC16&); |
400 template void UpdateTest<TDesC16, ESecureDb>(const TDesC&, const TDesC16&); |
379 |
401 |
380 //"UPDATE" test function (without parameters) - SQL server |
402 //"UPDATE" test function (without parameters) - SQL server |
381 template <class BUF, class DESC, TDbType TYPE> void UpdateWPTest(const TDesC& aDbFileName, const DESC& aUpdateSql) |
403 template <class BUF, class DESC, TDbType TYPE> void UpdateWPTest(const TDesC& aDbFileName, const DESC& aUpdateSql) |
382 { |
404 { |
383 TheTest.Printf(_L("\"Update (without parameters)\" test\r\n")); |
|
384 RSqlDatabase db = TDbHelper<TYPE>::Open(aDbFileName); |
405 RSqlDatabase db = TDbHelper<TYPE>::Open(aDbFileName); |
385 TBuf<200> fmtstr; |
406 TBuf<200> fmtstr; |
386 fmtstr.Copy(aUpdateSql); |
407 fmtstr.Copy(aUpdateSql); |
387 |
408 |
388 TUint32 start = User::FastCounter(); |
409 TUint32 start = User::FastCounter(); |
396 TEST(err > 0); |
417 TEST(err > 0); |
397 } |
418 } |
398 TUint32 end = User::FastCounter(); |
419 TUint32 end = User::FastCounter(); |
399 PrintStats(start, end); |
420 PrintStats(start, end); |
400 db.Close(); |
421 db.Close(); |
401 PrintFileSize(aDbFileName); |
422 //PrintFileSize(aDbFileName); |
402 } |
423 } |
403 //Explicit UpdateWPTest() template instantiations. |
424 //Explicit UpdateWPTest() template instantiations. |
404 template void UpdateWPTest<TBuf8<200>, TDesC8, ENonSecureDb>(const TDesC&, const TDesC8&); |
425 template void UpdateWPTest<TBuf8<200>, TDesC8, ENonSecureDb>(const TDesC&, const TDesC8&); |
405 template void UpdateWPTest<TBuf8<200>, TDesC8, ESecureDb>(const TDesC&, const TDesC8&); |
426 template void UpdateWPTest<TBuf8<200>, TDesC8, ESecureDb>(const TDesC&, const TDesC8&); |
406 template void UpdateWPTest<TBuf16<200>, TDesC16, ENonSecureDb>(const TDesC&, const TDesC16&); |
427 template void UpdateWPTest<TBuf16<200>, TDesC16, ENonSecureDb>(const TDesC&, const TDesC16&); |
407 template void UpdateWPTest<TBuf16<200>, TDesC16, ESecureDb>(const TDesC&, const TDesC16&); |
428 template void UpdateWPTest<TBuf16<200>, TDesC16, ESecureDb>(const TDesC&, const TDesC16&); |
408 |
429 |
409 //"SELECT" test function |
430 //"SELECT" test function |
410 template <class DESC, TDbType TYPE> void SelectTest(const TDesC& aDbFileName, const DESC& aSelectSql) |
431 template <class DESC, TDbType TYPE> void SelectTest(const TDesC& aDbFileName, const DESC& aSelectSql) |
411 { |
432 { |
412 TheTest.Printf(_L("\"Select\" test\r\n")); |
|
413 RSqlDatabase db = TDbHelper<TYPE>::Open(aDbFileName); |
433 RSqlDatabase db = TDbHelper<TYPE>::Open(aDbFileName); |
414 RSqlStatement stmt; |
434 RSqlStatement stmt; |
415 TInt err = stmt.Prepare(db, aSelectSql); |
435 TInt err = stmt.Prepare(db, aSelectSql); |
416 TEST2(err, KErrNone); |
436 TEST2(err, KErrNone); |
417 TUint32 start = User::FastCounter(); |
437 TUint32 start = User::FastCounter(); |
441 template void SelectTest<TDesC16, ESecureDb>(const TDesC&, const TDesC16&); |
461 template void SelectTest<TDesC16, ESecureDb>(const TDesC&, const TDesC16&); |
442 |
462 |
443 //"DELETE" test function |
463 //"DELETE" test function |
444 template <class DESC, TDbType TYPE> void DeleteTest(const TDesC& aDbFileName, const DESC& aDeleteSql) |
464 template <class DESC, TDbType TYPE> void DeleteTest(const TDesC& aDbFileName, const DESC& aDeleteSql) |
445 { |
465 { |
446 TheTest.Printf(_L("\"Delete\" test\r\n")); |
|
447 RSqlDatabase db = TDbHelper<TYPE>::Open(aDbFileName); |
466 RSqlDatabase db = TDbHelper<TYPE>::Open(aDbFileName); |
448 TUint32 start = User::FastCounter(); |
467 TUint32 start = User::FastCounter(); |
449 TInt err = db.Exec(aDeleteSql); |
468 TInt err = db.Exec(aDeleteSql); |
450 TEST(err > 0); |
469 TEST(err > 0); |
451 TUint32 end = User::FastCounter(); |
470 TUint32 end = User::FastCounter(); |
468 CFileMan* fm = NULL; |
487 CFileMan* fm = NULL; |
469 TRAPD(err, fm = CFileMan::NewL(TheFs)); |
488 TRAPD(err, fm = CFileMan::NewL(TheFs)); |
470 TEST2(err, KErrNone); |
489 TEST2(err, KErrNone); |
471 |
490 |
472 TDbHelper<TYPE>::Create(aDbFileName); |
491 TDbHelper<TYPE>::Create(aDbFileName); |
492 TInt titleLen = TheTestTitle.Length(); |
|
493 TheTestTitle.Append(_L(", insert")); |
|
473 InsertTest<HBUFC, PTRC, DESC, TYPE>(aDbFileName, aCommitStr); |
494 InsertTest<HBUFC, PTRC, DESC, TYPE>(aDbFileName, aCommitStr); |
474 PrintFileSize(aDbFileName); |
495 //PrintFileSize(aDbFileName); |
475 (void)fm->Copy(aDbFileName, TheNonSecureTmpDbName); |
496 (void)fm->Copy(aDbFileName, TheNonSecureTmpDbName); |
476 |
497 |
498 TheTestTitle.Replace(titleLen, 8, _L(", update")); |
|
477 UpdateTest<DESC, TYPE>(aDbFileName, aUpdateSql); |
499 UpdateTest<DESC, TYPE>(aDbFileName, aUpdateSql); |
478 PrintFileSize(aDbFileName); |
500 //PrintFileSize(aDbFileName); |
479 SelectTest<DESC, TYPE>(aDbFileName, aSelectSql); |
501 SelectTest<DESC, TYPE>(aDbFileName, aSelectSql); |
480 |
502 |
503 TheTestTitle.Replace(titleLen, 8, _L(", delete")); |
|
481 DeleteTest<DESC, TYPE>(aDbFileName, aDeleteSql); |
504 DeleteTest<DESC, TYPE>(aDbFileName, aDeleteSql); |
482 PrintFileSize(aDbFileName); |
505 //PrintFileSize(aDbFileName); |
483 |
506 |
484 (void)fm->Copy(TheNonSecureTmpDbName, aDbFileName); |
507 (void)fm->Copy(TheNonSecureTmpDbName, aDbFileName); |
485 (void)fm->Delete(TheNonSecureTmpDbName); |
508 (void)fm->Delete(TheNonSecureTmpDbName); |
486 delete fm; |
509 delete fm; |
487 } |
510 } |
612 template <class HBUFC, class PTRC, class DESC> void InsertTest2(sqlite3* aDbHandle, const TDesC& aScriptFileName, const DESC& aCommitStr); |
635 template <class HBUFC, class PTRC, class DESC> void InsertTest2(sqlite3* aDbHandle, const TDesC& aScriptFileName, const DESC& aCommitStr); |
613 |
636 |
614 //Explicit InsertTest2() template specialization for UTF8 encoded SQL strings |
637 //Explicit InsertTest2() template specialization for UTF8 encoded SQL strings |
615 template <> void InsertTest2<HBufC8, TPtrC8, TDesC8>(sqlite3* aDbHandle, const TDesC& aScriptFileName, const TDesC8& aCommitStr) |
638 template <> void InsertTest2<HBufC8, TPtrC8, TDesC8>(sqlite3* aDbHandle, const TDesC& aScriptFileName, const TDesC8& aCommitStr) |
616 { |
639 { |
617 TheTest.Printf(_L("\"Insert\" test\r\n")); |
|
618 HBufC8* fillDbScript = ReadSqlScript<HBufC8>(aScriptFileName); |
640 HBufC8* fillDbScript = ReadSqlScript<HBufC8>(aScriptFileName); |
619 TUint32 start = User::FastCounter(); |
641 TUint32 start = User::FastCounter(); |
620 TPtrC8 ptr(fillDbScript->Des()); |
642 TPtrC8 ptr(fillDbScript->Des()); |
621 TPtrC8 sql(GetNextTrans<TPtrC8, TDesC8>(ptr, aCommitStr)); |
643 TPtrC8 sql(GetNextTrans<TPtrC8, TDesC8>(ptr, aCommitStr)); |
622 while(sql.Length() > 0) |
644 while(sql.Length() > 0) |
633 } |
655 } |
634 |
656 |
635 //Explicit InsertTest2() template specialization for UTF16 encoded SQL strings |
657 //Explicit InsertTest2() template specialization for UTF16 encoded SQL strings |
636 template <> void InsertTest2<HBufC16, TPtrC16, TDesC16>(sqlite3* aDbHandle, const TDesC& aScriptFileName, const TDesC16& aCommitStr) |
658 template <> void InsertTest2<HBufC16, TPtrC16, TDesC16>(sqlite3* aDbHandle, const TDesC& aScriptFileName, const TDesC16& aCommitStr) |
637 { |
659 { |
638 TheTest.Printf(_L("\"Insert\" test\r\n")); |
|
639 HBufC16* fillDbScript = ReadSqlScript<HBufC16>(aScriptFileName); |
660 HBufC16* fillDbScript = ReadSqlScript<HBufC16>(aScriptFileName); |
640 TUint32 start = User::FastCounter(); |
661 TUint32 start = User::FastCounter(); |
641 TPtrC16 ptr(fillDbScript->Des()); |
662 TPtrC16 ptr(fillDbScript->Des()); |
642 TPtrC16 sql(GetNextTrans<TPtrC16, TDesC16>(ptr, aCommitStr)); |
663 TPtrC16 sql(GetNextTrans<TPtrC16, TDesC16>(ptr, aCommitStr)); |
643 while(sql != KNullDesC16) |
664 while(sql != KNullDesC16) |
677 template <class HBUFC, class DESC> void UpdateTest2(sqlite3* aDbHandle, const DESC& aUpdateSql); |
698 template <class HBUFC, class DESC> void UpdateTest2(sqlite3* aDbHandle, const DESC& aUpdateSql); |
678 |
699 |
679 //Explicit UpdateTest2() template specialization for UTF8 encoded SQL strings |
700 //Explicit UpdateTest2() template specialization for UTF8 encoded SQL strings |
680 template <> void UpdateTest2<HBufC8, TDesC8>(sqlite3* aDbHandle, const TDesC8& aUpdateSql) |
701 template <> void UpdateTest2<HBufC8, TDesC8>(sqlite3* aDbHandle, const TDesC8& aUpdateSql) |
681 { |
702 { |
682 TheTest.Printf(_L("\"Update\" test\r\n")); |
|
683 HBufC8* sql = HBufC8::New(aUpdateSql.Length() + 1); |
703 HBufC8* sql = HBufC8::New(aUpdateSql.Length() + 1); |
684 TEST(sql != NULL); |
704 TEST(sql != NULL); |
685 sql->Des().Copy(aUpdateSql); |
705 sql->Des().Copy(aUpdateSql); |
686 sql->Des().Append(TChar(0)); |
706 sql->Des().Append(TChar(0)); |
687 |
707 |
736 } |
756 } |
737 |
757 |
738 //Explicit UpdateTest2() template specialization for UTF16 encoded SQL strings |
758 //Explicit UpdateTest2() template specialization for UTF16 encoded SQL strings |
739 template <> void UpdateTest2<HBufC16, TDesC16>(sqlite3* aDbHandle, const TDesC16& aUpdateSql) |
759 template <> void UpdateTest2<HBufC16, TDesC16>(sqlite3* aDbHandle, const TDesC16& aUpdateSql) |
740 { |
760 { |
741 TheTest.Printf(_L("\"Update\" test\r\n")); |
|
742 HBufC16* sql = HBufC16::New(aUpdateSql.Length() + 1); |
761 HBufC16* sql = HBufC16::New(aUpdateSql.Length() + 1); |
743 TEST(sql != NULL); |
762 TEST(sql != NULL); |
744 sql->Des().Copy(aUpdateSql); |
763 sql->Des().Copy(aUpdateSql); |
745 sql->Des().Append(TChar(0)); |
764 sql->Des().Append(TChar(0)); |
746 |
765 |
798 template <class DESC> void UpdateWPTest2(const TDesC& aDbName, const DESC& aUpdateSql); |
817 template <class DESC> void UpdateWPTest2(const TDesC& aDbName, const DESC& aUpdateSql); |
799 |
818 |
800 //Explicit UpdateWPTest2() template specialization for UTF8 encoded SQL strings |
819 //Explicit UpdateWPTest2() template specialization for UTF8 encoded SQL strings |
801 template <> void UpdateWPTest2<TDesC8>(const TDesC& aDbName, const TDesC8& aUpdateSql) |
820 template <> void UpdateWPTest2<TDesC8>(const TDesC& aDbName, const TDesC8& aUpdateSql) |
802 { |
821 { |
803 TheTest.Printf(_L("\"Update (without parameters)\" test\r\n")); |
|
804 TBuf<200> fmtstr; |
822 TBuf<200> fmtstr; |
805 fmtstr.Copy(aUpdateSql); |
823 fmtstr.Copy(aUpdateSql); |
806 |
824 |
807 sqlite3SymbianLibInit(); |
825 sqlite3SymbianLibInit(); |
808 sqlite3* dbHandle = TDbHelper2<TCmdLineParams::EDbUtf8>::Open(aDbName); |
826 sqlite3* dbHandle = TDbHelper2<TCmdLineParams::EDbUtf8>::Open(aDbName); |
828 } |
846 } |
829 |
847 |
830 //Explicit UpdateWPTest2() template specialization for UTF16 encoded SQL strings |
848 //Explicit UpdateWPTest2() template specialization for UTF16 encoded SQL strings |
831 template <> void UpdateWPTest2<TDesC16>(const TDesC& aDbName, const TDesC16& aUpdateSql) |
849 template <> void UpdateWPTest2<TDesC16>(const TDesC& aDbName, const TDesC16& aUpdateSql) |
832 { |
850 { |
833 TheTest.Printf(_L("\"Update (without parameters)\" test\r\n")); |
|
834 |
|
835 sqlite3SymbianLibInit(); |
851 sqlite3SymbianLibInit(); |
836 sqlite3* dbHandle = TDbHelper2<TCmdLineParams::EDbUtf16>::Open(aDbName); |
852 sqlite3* dbHandle = TDbHelper2<TCmdLineParams::EDbUtf16>::Open(aDbName); |
837 |
853 |
838 TUint32 start = User::FastCounter(); |
854 TUint32 start = User::FastCounter(); |
839 for(TInt id=1;id<=KTestTecordCount;++id) |
855 for(TInt id=1;id<=KTestTecordCount;++id) |
870 template <class HBUFC, class DESC> void SelectTest2(sqlite3* aDbHandle, const DESC& aSelectSql); |
886 template <class HBUFC, class DESC> void SelectTest2(sqlite3* aDbHandle, const DESC& aSelectSql); |
871 |
887 |
872 //Explicit SelectTest2() template specialization for UTF8 encoded SQL strings |
888 //Explicit SelectTest2() template specialization for UTF8 encoded SQL strings |
873 template <> void SelectTest2<HBufC8, TDesC8>(sqlite3* aDbHandle, const TDesC8& aSelectSql) |
889 template <> void SelectTest2<HBufC8, TDesC8>(sqlite3* aDbHandle, const TDesC8& aSelectSql) |
874 { |
890 { |
875 TheTest.Printf(_L("\"Select\" test\r\n")); |
|
876 HBufC8* sql = HBufC8::New(aSelectSql.Length() + 1); |
891 HBufC8* sql = HBufC8::New(aSelectSql.Length() + 1); |
877 TEST(sql != NULL); |
892 TEST(sql != NULL); |
878 sql->Des().Copy(aSelectSql); |
893 sql->Des().Copy(aSelectSql); |
879 sql->Des().Append(TChar(0)); |
894 sql->Des().Append(TChar(0)); |
880 |
895 |
906 } |
921 } |
907 |
922 |
908 //Explicit SelectTest2() template specialization for UTF16 encoded SQL strings |
923 //Explicit SelectTest2() template specialization for UTF16 encoded SQL strings |
909 template <> void SelectTest2<HBufC16, TDesC16>(sqlite3* aDbHandle, const TDesC16& aSelectSql) |
924 template <> void SelectTest2<HBufC16, TDesC16>(sqlite3* aDbHandle, const TDesC16& aSelectSql) |
910 { |
925 { |
911 TheTest.Printf(_L("\"Select\" test\r\n")); |
|
912 HBufC16* sql = HBufC16::New(aSelectSql.Length() + 1); |
926 HBufC16* sql = HBufC16::New(aSelectSql.Length() + 1); |
913 TEST(sql != NULL); |
927 TEST(sql != NULL); |
914 sql->Des().Copy(aSelectSql); |
928 sql->Des().Copy(aSelectSql); |
915 sql->Des().Append(TChar(0)); |
929 sql->Des().Append(TChar(0)); |
916 |
930 |
944 template <class HBUFC, class DESC> void DeleteTest2(sqlite3* aDbHandle, const DESC& aDeleteSql); |
958 template <class HBUFC, class DESC> void DeleteTest2(sqlite3* aDbHandle, const DESC& aDeleteSql); |
945 |
959 |
946 //Explicit DeleteTest2() template specialization for UTF8 encoded SQL strings |
960 //Explicit DeleteTest2() template specialization for UTF8 encoded SQL strings |
947 template <> void DeleteTest2<HBufC8, TDesC8>(sqlite3* aDbHandle, const TDesC8& aDeleteSql) |
961 template <> void DeleteTest2<HBufC8, TDesC8>(sqlite3* aDbHandle, const TDesC8& aDeleteSql) |
948 { |
962 { |
949 TheTest.Printf(_L("\"Delete\" test\r\n")); |
|
950 HBufC8* sql = HBufC8::New(aDeleteSql.Length() + 1); |
963 HBufC8* sql = HBufC8::New(aDeleteSql.Length() + 1); |
951 TEST(sql != NULL); |
964 TEST(sql != NULL); |
952 sql->Des().Copy(aDeleteSql); |
965 sql->Des().Copy(aDeleteSql); |
953 sql->Des().Append(TChar(0)); |
966 sql->Des().Append(TChar(0)); |
954 TUint32 start = User::FastCounter(); |
967 TUint32 start = User::FastCounter(); |
960 } |
973 } |
961 |
974 |
962 //Explicit DeleteTest2() template specialization for UTF16 encoded SQL strings |
975 //Explicit DeleteTest2() template specialization for UTF16 encoded SQL strings |
963 template <> void DeleteTest2<HBufC16, TDesC16>(sqlite3* aDbHandle, const TDesC16& aDeleteSql) |
976 template <> void DeleteTest2<HBufC16, TDesC16>(sqlite3* aDbHandle, const TDesC16& aDeleteSql) |
964 { |
977 { |
965 TheTest.Printf(_L("\"Delete\" test\r\n")); |
|
966 HBufC16* sql = HBufC16::New(aDeleteSql.Length() + 1); |
978 HBufC16* sql = HBufC16::New(aDeleteSql.Length() + 1); |
967 TEST(sql != NULL); |
979 TEST(sql != NULL); |
968 sql->Des().Copy(aDeleteSql); |
980 sql->Des().Copy(aDeleteSql); |
969 sql->Des().Append(TChar(0)); |
981 sql->Des().Append(TChar(0)); |
970 TUint32 start = User::FastCounter(); |
982 TUint32 start = User::FastCounter(); |
1002 |
1014 |
1003 sqlite3SymbianLibInit(); |
1015 sqlite3SymbianLibInit(); |
1004 TDbHelper2<TYPE>::Create(aDbFileName); |
1016 TDbHelper2<TYPE>::Create(aDbFileName); |
1005 |
1017 |
1006 sqlite3* dbHandle = TDbHelper2<TYPE>::Open(aDbFileName); |
1018 sqlite3* dbHandle = TDbHelper2<TYPE>::Open(aDbFileName); |
1019 TInt titleLen = TheTestTitle.Length(); |
|
1020 TheTestTitle.Append(_L(", insert")); |
|
1007 InsertTest2<HBUFC, PTRC, DESC>(dbHandle, KFillDbScript(), aCommitStr); |
1021 InsertTest2<HBUFC, PTRC, DESC>(dbHandle, KFillDbScript(), aCommitStr); |
1008 (void)sqlite3_close(dbHandle); dbHandle = NULL; |
1022 (void)sqlite3_close(dbHandle); dbHandle = NULL; |
1009 PrintFileSize(aDbFileName); |
1023 //PrintFileSize(aDbFileName); |
1010 |
1024 |
1011 dbHandle = TDbHelper2<TYPE>::Open(aDbFileName); |
1025 dbHandle = TDbHelper2<TYPE>::Open(aDbFileName); |
1026 TheTestTitle.Replace(titleLen, 8, _L(", update")); |
|
1012 UpdateTest2<HBUFC, DESC>(dbHandle, aUpdateSql); |
1027 UpdateTest2<HBUFC, DESC>(dbHandle, aUpdateSql); |
1013 (void)sqlite3_close(dbHandle); dbHandle = NULL; |
1028 (void)sqlite3_close(dbHandle); dbHandle = NULL; |
1014 |
1029 |
1015 dbHandle = TDbHelper2<TYPE>::Open(aDbFileName); |
1030 dbHandle = TDbHelper2<TYPE>::Open(aDbFileName); |
1031 TheTestTitle.Replace(titleLen, 8, _L(", select")); |
|
1016 SelectTest2<HBUFC, DESC>(dbHandle, aSelectSql); |
1032 SelectTest2<HBUFC, DESC>(dbHandle, aSelectSql); |
1017 (void)sqlite3_close(dbHandle); dbHandle = NULL; |
1033 (void)sqlite3_close(dbHandle); dbHandle = NULL; |
1018 |
1034 |
1019 (void)fm->Copy(aDbFileName, TheNonSecureTmpDbName); |
1035 (void)fm->Copy(aDbFileName, TheNonSecureTmpDbName); |
1020 |
1036 |
1021 dbHandle = TDbHelper2<TYPE>::Open(aDbFileName); |
1037 dbHandle = TDbHelper2<TYPE>::Open(aDbFileName); |
1038 TheTestTitle.Replace(titleLen, 8, _L(", delete")); |
|
1022 DeleteTest2<HBUFC, DESC>(dbHandle, aDeleteSql); |
1039 DeleteTest2<HBUFC, DESC>(dbHandle, aDeleteSql); |
1023 (void)sqlite3_close(dbHandle); dbHandle = NULL; |
1040 (void)sqlite3_close(dbHandle); dbHandle = NULL; |
1024 PrintFileSize(aDbFileName); |
1041 //PrintFileSize(aDbFileName); |
1025 |
1042 |
1026 sqlite3SymbianLibFinalize(); |
1043 sqlite3SymbianLibFinalize(); |
1027 CloseSTDLIB(); |
1044 CloseSTDLIB(); |
1028 |
1045 |
1029 (void)fm->Copy(TheNonSecureTmpDbName, aDbFileName); |
1046 (void)fm->Copy(TheNonSecureTmpDbName, aDbFileName); |
1238 */ |
1255 */ |
1239 void DoTests() |
1256 void DoTests() |
1240 { |
1257 { |
1241 TheTest.Start(_L(" @SYMTestCaseID:SYSLIB-SQL-CT-1648 SQL performance tests")); |
1258 TheTest.Start(_L(" @SYMTestCaseID:SYSLIB-SQL-CT-1648 SQL performance tests")); |
1242 |
1259 |
1243 TheTest.Printf(_L("Single \"update\" test\r\n")); |
1260 TheTestTitle.Copy(_L("Single update")); |
1244 SingleUpdateTest(); |
1261 SingleUpdateTest(); |
1245 |
1262 |
1246 TheTest.Printf(_L("Single \"insert\" test\r\n")); |
1263 TheTestTitle.Copy(_L("Single insert")); |
1247 SingleInsertTest(); |
1264 SingleInsertTest(); |
1248 |
1265 |
1249 TheTest.Printf(_L("Single \"delete\" test\r\n")); |
1266 TheTestTitle.Copy(_L("Single delete")); |
1250 SingleDeleteTest(); |
1267 SingleDeleteTest(); |
1251 |
1268 |
1252 TheTestTitle.Format(_L("SERVER, UTF8 SQL strings, non-secure, encoding: \"%S\", page size: %d\r\n"), |
1269 TheTestTitle.Format(_L("SERVER, sql:UTF8, dbencoding:%S, non-secure"), |
1253 TheCmdLineParams.iDbEncoding == TCmdLineParams::EDbUtf16 ? &KUtf16 : &KUtf8, TheCmdLineParams.iPageSize); |
1270 TheCmdLineParams.iDbEncoding == TCmdLineParams::EDbUtf16 ? &KUtf16 : &KUtf8); |
1254 TheTest.Printf(TheTestTitle); |
|
1255 PerformanceTest<HBufC8, TPtrC8, TDesC8, ENonSecureDb>(TheNonSecureDbName, KCommitStr8(), KUpdateSql8(), KSelectSql8(), KDeleteSql8()); |
1271 PerformanceTest<HBufC8, TPtrC8, TDesC8, ENonSecureDb>(TheNonSecureDbName, KCommitStr8(), KUpdateSql8(), KSelectSql8(), KDeleteSql8()); |
1256 |
1272 |
1257 TheTestTitle.Format(_L("SERVER, UTF8 SQL strings, non-secure, update test (without parameters), encoding: \"%S\", page size: %d\r\n"), |
1273 TheTestTitle.Format(_L("SERVER, sql:UTF8, dbencoding:%S, non-secure, update without parameters"), |
1258 TheCmdLineParams.iDbEncoding == TCmdLineParams::EDbUtf16 ? &KUtf16 : &KUtf8, TheCmdLineParams.iPageSize); |
1274 TheCmdLineParams.iDbEncoding == TCmdLineParams::EDbUtf16 ? &KUtf16 : &KUtf8); |
1259 TheTest.Printf(TheTestTitle); |
|
1260 UpdateWPTest<TBuf8<200>, TDesC8, ENonSecureDb>(TheNonSecureDbName, KUpdateSql2_8()); |
1275 UpdateWPTest<TBuf8<200>, TDesC8, ENonSecureDb>(TheNonSecureDbName, KUpdateSql2_8()); |
1261 |
1276 |
1262 TheTestTitle.Format(_L("SERVER, UTF8 SQL strings, secure, encoding: \"%S\", page size: %d\r\n"), |
1277 TheTestTitle.Format(_L("SERVER, sql:UTF8, dbencoding:%S, secure"), |
1263 TheCmdLineParams.iDbEncoding == TCmdLineParams::EDbUtf16 ? &KUtf16 : &KUtf8, TheCmdLineParams.iPageSize); |
1278 TheCmdLineParams.iDbEncoding == TCmdLineParams::EDbUtf16 ? &KUtf16 : &KUtf8); |
1264 TheTest.Printf(TheTestTitle); |
|
1265 PerformanceTest<HBufC8, TPtrC8, TDesC8, ESecureDb>(TheSecureDbName, KCommitStr8(), KUpdateSql8(), KSelectSql8(), KDeleteSql8()); |
1279 PerformanceTest<HBufC8, TPtrC8, TDesC8, ESecureDb>(TheSecureDbName, KCommitStr8(), KUpdateSql8(), KSelectSql8(), KDeleteSql8()); |
1266 |
1280 |
1267 TheTest.Printf(_L("SQLITE, UTF8 encoded database, UTF8 SQL strings\r\n")); |
1281 TheTestTitle.Copy(_L("SQLITE, sql:UTF8, dbencoding:UTF8")); |
1268 PerformanceTest2<TCmdLineParams::EDbUtf8, HBufC8, TPtrC8, TDesC8>(TheNonSecureDbName, KCommitStr8(), KUpdateSql8(), KSelectSql8(), KDeleteSql8()); |
1282 PerformanceTest2<TCmdLineParams::EDbUtf8, HBufC8, TPtrC8, TDesC8>(TheNonSecureDbName, KCommitStr8(), KUpdateSql8(), KSelectSql8(), KDeleteSql8()); |
1269 |
1283 |
1270 TheTest.Printf(_L("SQLITE, UTF8 encoded database, UTF8 SQL strings, update test (without parameters)\r\n")); |
1284 TheTestTitle.Copy(_L("SQLITE, sql:UTF8, dbencoding:UTF8, update without parameters")); |
1271 UpdateWPTest2<TDesC8>(TheNonSecureDbName, KUpdateSql2_8()); |
1285 UpdateWPTest2<TDesC8>(TheNonSecureDbName, KUpdateSql2_8()); |
1272 |
1286 |
1273 TheTest.Printf(_L("SQLITE, UTF16 encoded database, UTF8 SQL strings\r\n")); |
1287 TheTestTitle.Copy(_L("SQLITE, sql:UTF8, dbencoding:UTF16")); |
1274 PerformanceTest2<TCmdLineParams::EDbUtf16, HBufC8, TPtrC8, TDesC8>(TheNonSecureDbName, KCommitStr8(), KUpdateSql8(), KSelectSql8(), KDeleteSql8()); |
1288 PerformanceTest2<TCmdLineParams::EDbUtf16, HBufC8, TPtrC8, TDesC8>(TheNonSecureDbName, KCommitStr8(), KUpdateSql8(), KSelectSql8(), KDeleteSql8()); |
1275 |
1289 |
1276 TheTestTitle.Format(_L("SERVER, UTF16 SQL strings, non-secure, encoding: \"%S\", page size: %d\r\n"), |
1290 TheTestTitle.Format(_L("SERVER, sql:UTF16, dbencoding:%S, non-secure"), |
1277 TheCmdLineParams.iDbEncoding == TCmdLineParams::EDbUtf16 ? &KUtf16 : &KUtf8, TheCmdLineParams.iPageSize); |
1291 TheCmdLineParams.iDbEncoding == TCmdLineParams::EDbUtf16 ? &KUtf16 : &KUtf8); |
1278 TheTest.Printf(TheTestTitle); |
|
1279 PerformanceTest<HBufC16, TPtrC16, TDesC16, ENonSecureDb>(TheNonSecureDbName, KCommitStr16(), KUpdateSql16(), KSelectSql16(), KDeleteSql16()); |
1292 PerformanceTest<HBufC16, TPtrC16, TDesC16, ENonSecureDb>(TheNonSecureDbName, KCommitStr16(), KUpdateSql16(), KSelectSql16(), KDeleteSql16()); |
1280 |
1293 |
1281 TheTestTitle.Format(_L("SERVER, UTF16 SQL strings, non-secure, update test (without parameters), encoding: \"%S\", page size: %d\r\n"), |
1294 TheTestTitle.Format(_L("SERVER, sql:UTF16, dbencoding:%S, non-secure, update without parameters"), |
1282 TheCmdLineParams.iDbEncoding == TCmdLineParams::EDbUtf16 ? &KUtf16 : &KUtf8, TheCmdLineParams.iPageSize); |
1295 TheCmdLineParams.iDbEncoding == TCmdLineParams::EDbUtf16 ? &KUtf16 : &KUtf8); |
1283 TheTest.Printf(TheTestTitle); |
|
1284 UpdateWPTest<TBuf16<200>, TDesC16, ENonSecureDb>(TheNonSecureDbName, KUpdateSql2_16()); |
1296 UpdateWPTest<TBuf16<200>, TDesC16, ENonSecureDb>(TheNonSecureDbName, KUpdateSql2_16()); |
1285 |
1297 |
1286 TheTestTitle.Format(_L("SERVER, UTF16 SQL strings, secure, encoding: \"%S\", page size: %d\r\n"), |
1298 TheTestTitle.Format(_L("SERVER, sql:UTF16, dbencoding:%S, secure"), |
1287 TheCmdLineParams.iDbEncoding == TCmdLineParams::EDbUtf16 ? &KUtf16 : &KUtf8, TheCmdLineParams.iPageSize); |
1299 TheCmdLineParams.iDbEncoding == TCmdLineParams::EDbUtf16 ? &KUtf16 : &KUtf8); |
1288 TheTest.Printf(TheTestTitle); |
|
1289 PerformanceTest<HBufC16, TPtrC16, TDesC16, ESecureDb>(TheSecureDbName, KCommitStr16(), KUpdateSql16(), KSelectSql16(), KDeleteSql16()); |
1300 PerformanceTest<HBufC16, TPtrC16, TDesC16, ESecureDb>(TheSecureDbName, KCommitStr16(), KUpdateSql16(), KSelectSql16(), KDeleteSql16()); |
1290 |
1301 |
1291 TheTest.Printf(_L("SQLITE, UTF8 encoded database, UTF16 SQL strings\r\n")); |
1302 TheTestTitle.Copy(_L("SQLITE, sql:UTF16, dbencoding:UTF8")); |
1292 PerformanceTest2<TCmdLineParams::EDbUtf8, HBufC16, TPtrC16, TDesC16>(TheNonSecureDbName, KCommitStr16(), KUpdateSql16(), KSelectSql16(), KDeleteSql16()); |
1303 PerformanceTest2<TCmdLineParams::EDbUtf8, HBufC16, TPtrC16, TDesC16>(TheNonSecureDbName, KCommitStr16(), KUpdateSql16(), KSelectSql16(), KDeleteSql16()); |
1293 |
1304 |
1294 TheTest.Printf(_L("SQLITE, UTF16 encoded database, UTF16 SQL strings\r\n")); |
1305 TheTestTitle.Copy(_L("SQLITE, sql:UTF16, dbencoding:UTF16")); |
1295 PerformanceTest2<TCmdLineParams::EDbUtf16, HBufC16, TPtrC16, TDesC16>(TheNonSecureDbName, KCommitStr16(), KUpdateSql16(), KSelectSql16(), KDeleteSql16()); |
1306 PerformanceTest2<TCmdLineParams::EDbUtf16, HBufC16, TPtrC16, TDesC16>(TheNonSecureDbName, KCommitStr16(), KUpdateSql16(), KSelectSql16(), KDeleteSql16()); |
1296 |
1307 |
1297 TheTest.Printf(_L("SQLITE, UTF16 encoded database, UTF16 SQL strings, update test (without parameters)\r\n")); |
1308 TheTestTitle.Copy(_L("SQLITE, sql:UTF16, dbencoding:UTF16, update without parameters")); |
1298 UpdateWPTest2<TDesC16>(TheNonSecureDbName, KUpdateSql2_16()); |
1309 UpdateWPTest2<TDesC16>(TheNonSecureDbName, KUpdateSql2_16()); |
1299 |
1310 |
1300 TheTest.Printf(_L("Accessing column value by index or by name\r\n")); |
1311 TheTestTitle.Copy(_L("Accessing column value by index or by name")); |
1301 ColumnValueAccessTest(); |
1312 ColumnValueAccessTest(); |
1302 |
1313 |
1303 TheTest.Printf(_L("Retrieving data from UTF8 Database using SELECT LIKE statements\r\n")); |
1314 TheTestTitle.Copy(_L("Retrieving data from UTF8 Database using SELECT LIKE statements")); |
1304 SelectLikeQueryPerfTest(); |
1315 SelectLikeQueryPerfTest(); |
1305 |
1316 |
1306 } |
1317 } |
1307 |
1318 |
1308 TInt E32Main() |
1319 TInt E32Main() |