persistentstorage/sql/TEST/t_sqlload.cpp
author hgs
Mon, 27 Sep 2010 11:59:56 +0100
changeset 51 7d4490026038
parent 29 cce6680bbf1c
child 55 44f437012c90
permissions -rw-r--r--
201037_06
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
28
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
     1
// Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     2
// All rights reserved.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     3
// This component and the accompanying materials are made available
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     5
// which accompanies this distribution, and is available
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     7
//
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     8
// Initial Contributors:
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    10
//
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    11
// Contributors:
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    12
//
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    13
// Description:
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    14
//
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    15
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    16
#include <e32test.h>
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    17
#include <e32math.h>
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    18
#include <bautils.h>
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    19
#include <sqldb.h>
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    20
#include "SqlResourceTester.h"
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    21
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    22
///////////////////////////////////////////////////////////////////////////////////////
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    23
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    24
#define UNUSED_VAR(a) (a) = (a)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    25
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    26
RTest TheTest(_L("t_sqlload test"));
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    27
51
7d4490026038 201037_06
hgs
parents: 29
diff changeset
    28
TDriveNumber KTestDrive = EDriveC;
7d4490026038 201037_06
hgs
parents: 29
diff changeset
    29
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    30
_LIT(KTestDir, "c:\\test\\");
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    31
_LIT(KTestDbName1, "c:\\test\\t_sqlload_1.db");
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    32
_LIT(KTestDbName2, "c:\\test\\t_sqlload_2.db");
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    33
_LIT(KTestDbName3, "c:\\test\\t_sqlload_3.db");
51
7d4490026038 201037_06
hgs
parents: 29
diff changeset
    34
_LIT(KTestDbName4, "c:\\test\\t_sqlload_4.db");
7d4490026038 201037_06
hgs
parents: 29
diff changeset
    35
_LIT(KTestDbName5, "c:\\test\\t_sqlload_5.db");
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    36
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    37
//Test thread count
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    38
const TInt KTestThreadCnt = 4;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    39
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    40
//Test database names
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    41
const TPtrC KTestDbNames[] =
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    42
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    43
	KTestDbName1(),
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    44
	KTestDbName2(),
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    45
	KTestDbName3()
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    46
	};
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    47
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    48
//Test database count
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    49
const TInt KTestDbCnt = sizeof(KTestDbNames) / sizeof(KTestDbNames[0]);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    50
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    51
//Test duration
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    52
const TInt KTestDuration = 120;//seconds
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    53
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    54
//Test record count
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    55
const TInt KRecordCnt = 100;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    56
//Record count which will be used in the test SQL queries
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    57
const TInt KQueriedRecordCnt = 40;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    58
//Every SQL query will be processed (stepped) in KTestStepCnt steps.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    59
const TInt KTestStepCnt = 4;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    60
//RSqlStatement object count which will be used in the tests
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    61
const TInt KStatementCnt = 10;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    62
//Max allowed alive RSqlStatement objects per thread
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    63
const TInt KMaxStatementPerThread = 30;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    64
//Binary data length
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    65
const TInt KBinDataLen = 2003;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    66
29
cce6680bbf1c 201023_05
hgs
parents: 28
diff changeset
    67
//StatementMaxNumberTest() time limit in seconds.
cce6680bbf1c 201023_05
hgs
parents: 28
diff changeset
    68
const TInt KTestTimeLimit = 60;//seconds
cce6680bbf1c 201023_05
hgs
parents: 28
diff changeset
    69
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    70
///////////////////////////////////////////////////////////////////////////////////////
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    71
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    72
void DeleteTestFiles()
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    73
	{
51
7d4490026038 201037_06
hgs
parents: 29
diff changeset
    74
	RSqlDatabase::Delete(KTestDbName5);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
    75
	RSqlDatabase::Delete(KTestDbName4);
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    76
	RSqlDatabase::Delete(KTestDbName3);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    77
	RSqlDatabase::Delete(KTestDbName2);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    78
	RSqlDatabase::Delete(KTestDbName1);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    79
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    80
28
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
    81
void GetHomeTimeAsString(TDes& aStr)
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
    82
	{
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
    83
	TTime time;
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
    84
	time.HomeTime();
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
    85
	TDateTime dt = time.DateTime();
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
    86
	aStr.Format(_L("%02d:%02d:%02d.%06d"), dt.Hour(), dt.Minute(), dt.Second(), dt.MicroSecond());
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
    87
	}
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
    88
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    89
///////////////////////////////////////////////////////////////////////////////////////
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    90
///////////////////////////////////////////////////////////////////////////////////////
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    91
//Test macros and functions
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    92
void Check1(TInt aValue, TInt aLine, TBool aPrintThreadName = EFalse)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    93
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    94
	if(!aValue)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    95
		{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    96
		DeleteTestFiles();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    97
		if(aPrintThreadName)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    98
			{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    99
			RThread th;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   100
			TName name = th.Name();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   101
			RDebug::Print(_L("*** Thread %S, Line %d\r\n"), &name, aLine);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   102
			}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   103
		else
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   104
			{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   105
			RDebug::Print(_L("*** Line %d\r\n"), aLine);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   106
			}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   107
		TheTest(EFalse, aLine);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   108
		}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   109
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   110
void Check2(TInt aValue, TInt aExpected, TInt aLine, TBool aPrintThreadName = EFalse)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   111
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   112
	if(aValue != aExpected)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   113
		{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   114
		DeleteTestFiles();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   115
		if(aPrintThreadName)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   116
			{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   117
			RThread th;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   118
			TName name = th.Name();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   119
			RDebug::Print(_L("*** Thread %S, Line %d Expected error: %d, got: %d\r\n"), &name, aLine, aExpected, aValue);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   120
			}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   121
		else
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   122
			{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   123
			RDebug::Print(_L("*** Line %d, Expected error: %d, got: %d\r\n"), aLine, aExpected, aValue);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   124
			}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   125
		TheTest(EFalse, aLine);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   126
		}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   127
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   128
#define TEST(arg) ::Check1((arg), __LINE__)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   129
#define TEST2(aValue, aExpected) ::Check2(aValue, aExpected, __LINE__)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   130
#define TTEST(arg) ::Check1((arg), __LINE__, ETrue)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   131
#define TTEST2(aValue, aExpected) ::Check2(aValue, aExpected, __LINE__, ETrue)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   132
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   133
///////////////////////////////////////////////////////////////////////////////////////
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   134
28
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   135
//StatementMaxNumberTest() timeouts in WDP builds.
51
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   136
//This function is used to return the seconds passed from the start of the test case.
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   137
TTimeIntervalSeconds ExecutionTimeSeconds(TTime& aStartTime)
28
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   138
	{
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   139
	TTime currTime;
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   140
	currTime.HomeTime();
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   141
	
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   142
	TTimeIntervalSeconds s;
51
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   143
	TInt err = currTime.SecondsFrom(aStartTime, s);
28
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   144
	TEST2(err, KErrNone);
29
cce6680bbf1c 201023_05
hgs
parents: 28
diff changeset
   145
	return s;
28
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   146
	}
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   147
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   148
void CreateTestDir()
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   149
    {
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   150
    RFs fs;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   151
	TInt err = fs.Connect();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   152
	TEST2(err, KErrNone);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   153
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   154
	err = fs.MkDir(KTestDir);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   155
	TEST(err == KErrNone || err == KErrAlreadyExists);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   156
51
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   157
	err = fs.CreatePrivatePath(KTestDrive);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   158
	TEST(err == KErrNone || err == KErrAlreadyExists);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   159
	
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   160
	fs.Close();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   161
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   162
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   163
///////////////////////////////////////////////////////////////////////////////////////
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   164
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   165
void CreateTestDatabases()
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   166
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   167
	HBufC8* recData = HBufC8::New(KBinDataLen * 2 + 50);//"* 2" - hex values for the INSERT SQL statement
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   168
	TEST(recData != NULL);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   169
	TPtr8 sql = recData->Des();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   170
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   171
	for(TInt dbIdx=0;dbIdx<KTestDbCnt;++dbIdx)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   172
		{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   173
		//Create test database
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   174
		RSqlDatabase db;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   175
		TInt err = db.Create(KTestDbNames[dbIdx]);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   176
		TEST2(err, KErrNone);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   177
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   178
		//Create test table
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   179
		_LIT8(KCreateSql, "CREATE TABLE A(F1 INTEGER, F2 BLOB)");
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   180
		err = db.Exec(KCreateSql);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   181
		TEST(err >= 0);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   182
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   183
		//Insert records in the test table
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   184
		for(TInt recIdx=1;recIdx<=KRecordCnt;++recIdx)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   185
			{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   186
			_LIT8(KInsertSql, "INSERT INTO A(F1, F2) VALUES(");
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   187
			sql.Copy(KInsertSql);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   188
			sql.AppendNum((TInt64)recIdx);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   189
			sql.Append(_L(", X'"));
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   190
			for(TInt k=0;k<KBinDataLen;++k)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   191
				{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   192
				sql.AppendFormat(_L8("%02X"), recIdx);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   193
				}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   194
			sql.Append(_L("')"));
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   195
			err = db.Exec(sql);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   196
			TEST2(err, 1);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   197
			}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   198
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   199
		db.Close();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   200
		}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   201
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   202
	delete recData;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   203
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   204
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   205
//Structure used by the test thread function for orginizing its set of test data.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   206
struct TSqlStatement
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   207
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   208
	RSqlStatement	iObj;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   209
	TBool 			iAlive;			//Non-zero if iObj is alive
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   210
	TInt			iCurIndex;		//The number of the current record in the set controlled by iObj statement
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   211
	TInt			iEndIndex;		//The last record number in the set controlled by iObj statement
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   212
	TInt			iCount;			//Records count in the set controlled by iObj statement
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   213
	};
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   214
	
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   215
typedef RArray<TSqlStatement> RSqlStatementArray;	
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   216
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   217
//Inits the random numbers generator.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   218
//Opens one of the test databases.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   219
void PreTest(RSqlDatabase& aDb, TInt64& aSeed, TName& aThreadName)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   220
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   221
	RThread currThread;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   222
	
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   223
	//Init the random numbers generator
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   224
	TTime now;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   225
	now.UniversalTime();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   226
	aSeed = now.Int64() + currThread.Id();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   227
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   228
	//Open one of the test databases
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   229
	const TInt KDbIndex = Math::Rand(aSeed) % KTestDbCnt;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   230
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   231
	aThreadName = currThread.Name();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   232
	RDebug::Print(_L("=== Thread %S, database %S\r\n"), &aThreadName, &KTestDbNames[KDbIndex]);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   233
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   234
	TInt err = aDb.Open(KTestDbNames[KDbIndex]);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   235
	TTEST2(err, KErrNone);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   236
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   237
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   238
//Creates N statements, where 0 < N < KStatementCnt
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   239
TInt CreateStatements(RSqlDatabase& aDb, TInt64& aSeed, RSqlStatementArray& aStmtArray)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   240
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   241
	TInt stmtCount = Math::Rand(aSeed) % KStatementCnt;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   242
	if(stmtCount == 0)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   243
		{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   244
		stmtCount = 1;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   245
		}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   246
	for(TInt i=0;i<stmtCount;++i)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   247
		{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   248
		TSqlStatement stmt;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   249
		stmt.iAlive = EFalse;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   250
		stmt.iCount = KQueriedRecordCnt;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   251
		stmt.iCurIndex = Math::Rand(aSeed) % KRecordCnt;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   252
		if(stmt.iCurIndex == 0)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   253
			{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   254
			stmt.iCurIndex = 1;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   255
			}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   256
		if(stmt.iCurIndex > (KRecordCnt - KQueriedRecordCnt))
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   257
			{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   258
			stmt.iCurIndex = KRecordCnt - KQueriedRecordCnt;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   259
			}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   260
		stmt.iEndIndex = stmt.iCurIndex + KQueriedRecordCnt;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   261
		TBuf8<100> sql;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   262
		sql.Copy(_L8("SELECT * FROM A WHERE F1 >= "));
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   263
		sql.AppendNum(stmt.iCurIndex);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   264
		sql.Append(_L8(" AND F1 < "));
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   265
		sql.AppendNum(stmt.iEndIndex);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   266
		TInt err = stmt.iObj.Prepare(aDb, sql);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   267
		TTEST2(err, KErrNone);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   268
		stmt.iAlive = ETrue;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   269
		err = aStmtArray.Append(stmt);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   270
		TTEST2(err, KErrNone);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   271
		}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   272
	return stmtCount;		
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   273
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   274
	
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   275
//For each alive statement object - do (TSqlStatement::iCount / KTestStepCnt)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   276
//RSqlStatement::Next() calls. If the Next() call reaches the end - close the statement object.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   277
TInt ProcessStatements(RSqlStatementArray& aStmtArray)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   278
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   279
	const TInt KTotalStmtCount = aStmtArray.Count();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   280
	TInt alive = 0;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   281
	TInt completed = 0;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   282
	for(TInt k=0;k<KTotalStmtCount;++k)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   283
		{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   284
		TSqlStatement& stmt = aStmtArray[k];
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   285
		if(stmt.iAlive)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   286
			{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   287
			++alive;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   288
			TInt endIndex = stmt.iCurIndex + stmt.iCount / KTestStepCnt;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   289
			if(endIndex <= stmt.iEndIndex)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   290
				{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   291
				while(stmt.iCurIndex < endIndex)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   292
					{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   293
					TInt err = stmt.iObj.Next();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   294
					TTEST2(err, KSqlAtRow);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   295
					//test column values
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   296
					TInt val1 = stmt.iObj.ColumnInt(0);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   297
					TTEST(val1 == stmt.iCurIndex);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   298
					RSqlColumnReadStream strm;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   299
					err = strm.ColumnBinary(stmt.iObj, 1);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   300
					TTEST2(err, KErrNone);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   301
					for(TInt ii=0;ii<KBinDataLen;++ii)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   302
						{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   303
						TUint8 byte = 0;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   304
						TRAP(err, byte = strm.ReadUint8L());
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   305
						TTEST2(err, KErrNone);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   306
						TTEST(byte == (TUint8)val1);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   307
						}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   308
					strm.Close();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   309
					++stmt.iCurIndex;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   310
					}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   311
				}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   312
			if(stmt.iCurIndex >= stmt.iEndIndex)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   313
				{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   314
				stmt.iObj.Close();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   315
				stmt.iAlive = EFalse;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   316
				++completed;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   317
				}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   318
			}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   319
		}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   320
	return completed;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   321
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   322
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   323
//Close up to N statements, where 0 < N < KStatementCnt
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   324
TInt CloseStatements(RSqlStatementArray& aStmtArray, TInt64& aSeed)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   325
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   326
	TInt stmtCount = Math::Rand(aSeed) % KStatementCnt;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   327
	if(stmtCount == 0)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   328
		{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   329
		stmtCount = 1;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   330
		}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   331
	const TInt KTotalStmtCount = aStmtArray.Count();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   332
	TInt closed = 0;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   333
	for(TInt j=0;j<stmtCount;++j)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   334
		{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   335
		const TInt KIdx = Math::Rand(aSeed) % KTotalStmtCount;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   336
		TInt idx = KIdx;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   337
		while((idx = (++idx % KTotalStmtCount)) != KIdx)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   338
			{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   339
			if(aStmtArray[idx].iAlive)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   340
				{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   341
				aStmtArray[idx].iObj.Close();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   342
				aStmtArray[idx].iAlive = EFalse;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   343
				++closed;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   344
				break;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   345
				}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   346
			}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   347
		}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   348
	return closed;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   349
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   350
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   351
//Counts the alive statements
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   352
TInt AliveStatementsCount(RSqlStatementArray& aStmtArray)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   353
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   354
	TInt aliveCnt = 0;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   355
	const TInt KTotalStmtCount = aStmtArray.Count();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   356
	for(TInt l=0;l<KTotalStmtCount;++l)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   357
		{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   358
		if(aStmtArray[l].iAlive)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   359
			{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   360
			++aliveCnt;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   361
			}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   362
		}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   363
	return aliveCnt;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   364
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   365
	
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   366
//Close all alive statements
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   367
void CloseAllStatements(RSqlStatementArray& aStmtArray)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   368
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   369
	const TInt KTotalStmtCount = aStmtArray.Count();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   370
	for(TInt i=0;i<KTotalStmtCount;++i)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   371
		{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   372
		if(aStmtArray[i].iAlive)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   373
			{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   374
			aStmtArray[i].iObj.Close();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   375
			}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   376
		}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   377
	TTEST2(TSqlResourceTester::Count(), 0);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   378
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   379
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   380
//Removes the already closed statements and compresses the array
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   381
void RemoveDeadStatements(RSqlStatementArray& aStmtArray)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   382
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   383
	for(TInt i=aStmtArray.Count()-1;i>=0;--i)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   384
		{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   385
		if(!aStmtArray[i].iAlive)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   386
			{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   387
			aStmtArray.Remove(i);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   388
			}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   389
		}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   390
	aStmtArray.Compress();		
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   391
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   392
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   393
//Close statement objects, statements array and the database object
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   394
TInt PostTest(RSqlDatabase& aDb, RSqlStatementArray& aStmtArray)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   395
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   396
	TInt statementsAlive = AliveStatementsCount(aStmtArray);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   397
	CloseAllStatements(aStmtArray);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   398
	aStmtArray.Close();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   399
	aDb.Close();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   400
	return statementsAlive;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   401
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   402
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   403
//Test thread function
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   404
//The thread function works with a set of TSqlStatement objects
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   405
//The test consists of 4 steps:
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   406
//Step 1: the test thread creates m TSqlStatement objects, 0 < m < KStatementCnt.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   407
//		  With each of the created TSqlStatement objects the test thread prepares SELECT SQL query
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   408
//        "SELECT * FROM A WHERE F1 >= K1 AND F1 < K2", where K1 is random generated number, such that:
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   409
//        0 < K1 < (KRecordCnt - KQueriedRecordCnt)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   410
//        K2 = K1 + KQueriedRecordCnt
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   411
//		  All just created TSqlStatement objects are marked as alive.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   412
//Step 2: For each alive TSqlStatement object the test thread calls iObj.Next() method KTestStepCnt times,
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   413
//        KTestStepCnt < KQueriedRecordCnt.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   414
//        The column values are retrieved and checked.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   415
//Step 3: the test thread closes n TSqlStatement objects, 0 < n < KStatementCnt.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   416
//Step 4: the test thread counts how many alive TSqlStatement objects are there.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   417
//        If this count > KMaxStatementPerThread then the test thread closes all alive TSqlStatement objects
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   418
//		  to avoid OOM errors during the test.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   419
//
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   420
//		  Each test thread does steps 1..4 for a period of KTestDuration seconds.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   421
//		  At the end all TSqlStatement objects are closed.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   422
//
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   423
//		  The idea of the test is to load the SQL server creating several amount of statement and stream objects
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   424
//		  and see that it is working stable and without problems.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   425
TInt ThreadFunc(void*)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   426
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   427
	__UHEAP_MARK;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   428
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   429
	CTrapCleanup* tc = CTrapCleanup::New();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   430
	TTEST(tc != NULL);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   431
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   432
	TInt64 seed = 0;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   433
	RSqlDatabase db;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   434
	TName threadName;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   435
	RSqlStatementArray statements;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   436
	
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   437
	//Init the random numbers generator, opens the database
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   438
	PreTest(db, seed, threadName);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   439
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   440
	//Main test loop
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   441
	TInt iteration = 0;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   442
	TTime currTime;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   443
	currTime.UniversalTime();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   444
	TTime endTime = currTime + TTimeIntervalSeconds(KTestDuration);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   445
	while(currTime < endTime)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   446
		{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   447
		++iteration;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   448
		///////////////////////////////////////////////////////////////////////
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   449
		TInt statementsAliveBegin = statements.Count();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   450
		//Step 1: Create N statements, where 0 < N < KStatementCnt
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   451
		TInt statementsCreated = CreateStatements(db, seed, statements);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   452
		///////////////////////////////////////////////////////////////////////
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   453
		//Step 2: For each alive statement object - do (TSqlStatement::iCount / KTestStepCnt)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   454
		//        RSqlStatement::Next() calls. If the Next() call reaches the end - close the statement object.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   455
		TInt statementsCompleted = ProcessStatements(statements);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   456
		///////////////////////////////////////////////////////////////////////
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   457
		//Step 3: Close up to N statements, where 0 < N < KStatementCnt
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   458
		TInt statementsClosed = CloseStatements(statements, seed);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   459
		///////////////////////////////////////////////////////////////////////
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   460
		//Step 4: If the alive statement count is more than KMaxStatementPerThread, then close them all
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   461
		TInt statementsAliveEnd = AliveStatementsCount(statements);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   462
		if(statementsAliveEnd > KMaxStatementPerThread)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   463
			{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   464
			RDebug::Print(_L("!!! Thread %S, iteration %d, alive %d, close all\r\n"), &threadName, iteration, statementsAliveEnd);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   465
			CloseAllStatements(statements);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   466
			statementsAliveEnd = 0;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   467
			}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   468
		///////////////////////////////////////////////////////////////////////
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   469
		RemoveDeadStatements(statements);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   470
		RDebug::Print(_L("=== Thread %S, iteration % 4d, begin: % 3d, created % 2d, closed % 2d, completed % 2d, end % 3d, \r\n"),
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   471
							&threadName, iteration, statementsAliveBegin, 
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   472
													statementsCreated, statementsClosed, statementsCompleted, 
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   473
													statementsAliveEnd);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   474
		currTime.UniversalTime();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   475
		}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   476
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   477
	//Close statement objects and the database object
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   478
	TInt statementsAlive = PostTest(db, statements);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   479
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   480
	delete tc;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   481
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   482
	__UHEAP_MARKEND;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   483
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   484
	RDebug::Print(_L("=== Thread %S exit, still alive %d\r\n"), &threadName, statementsAlive);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   485
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   486
	return KErrNone;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   487
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   488
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   489
void CreateTestThreads(RThread aThreads[], TRequestStatus aStatuses[], TInt aMaxCount)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   490
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   491
	_LIT(KThreadName, "TstThr");
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   492
	for(TInt i=0;i<aMaxCount;++i)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   493
		{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   494
		TBuf<20> threadName(KThreadName);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   495
		threadName.AppendNum((TInt64)(i + 1));
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   496
		TEST2(aThreads[i].Create(threadName, &ThreadFunc, 0x2000, 0x1000, 0x10000, NULL, EOwnerProcess), KErrNone);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   497
		aThreads[i].Logon(aStatuses[i]);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   498
		TEST2(aStatuses[i].Int(), KRequestPending);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   499
		}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   500
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   501
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   502
void ResumeTestThreads(RThread aThreads[], TInt aMaxCount)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   503
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   504
	for(TInt i=0;i<aMaxCount;++i)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   505
		{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   506
		aThreads[i].Resume();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   507
		}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   508
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   509
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   510
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   511
void CloseTestThreads(RThread aThreads[], TRequestStatus aStatuses[], TInt aMaxCount)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   512
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   513
	for(TInt i=0;i<aMaxCount;++i)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   514
		{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   515
		User::WaitForRequest(aStatuses[i]);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   516
		TEST(aThreads[i].ExitType() != EExitPanic);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   517
		aThreads[i].Close();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   518
		}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   519
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   520
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   521
/**
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   522
@SYMTestCaseID			SYSLIB-SQL-CT-1627-0001
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   523
@SYMTestCaseDesc		SQL server load test. The test creates KTestThreadCnt threads, KTestDbCnt test databases and
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   524
						inserts in each of them KRecordCnt test records.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   525
						Pre-test step: each test thread randomly chooses and opens one of the test databases.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   526
						Then, each of the test threads is doing the following 4 test steps:
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   527
						Step 1: the test thread creates m TSqlStatement objects, 0 < m < KStatementCnt.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   528
						With each of the created TSqlStatement objects the test thread prepares SELECT SQL query
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   529
						"SELECT * FROM A WHERE F1 >= K1 AND F1 < K2", where K1 is random generated number, such that:
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   530
						0 < K1 < (KRecordCnt - KQueriedRecordCnt)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   531
						K2 = K1 + KQueriedRecordCnt
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   532
						All just created TSqlStatement objects are marked as alive.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   533
						Step 2: For each alive TSqlStatement object the test thread calls iObj.Next() method KTestStepCnt times,
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   534
						KTestStepCnt < KQueriedRecordCnt.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   535
						The column values are retrieved and checked.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   536
						Step 3: the test thread closes n TSqlStatement objects, 0 < n < KStatementCnt.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   537
						Step 4: the test thread counts how many alive TSqlStatement objects are there.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   538
						If this count > KMaxStatementPerThread then the test thread closes all alive TSqlStatement objects
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   539
						to avoid OOM errors during the test.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   540
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   541
						Each test thread does steps 1..4 for a period of KTestDuration seconds.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   542
						At the end all TSqlStatement objects are closed.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   543
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   544
						The idea of the test is to load the SQL server creating several amount of statement and stream objects
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   545
						and see that it is working stable and without problems.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   546
@SYMTestPriority		High
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   547
@SYMTestActions			SQL server load test
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   548
@SYMTestExpectedResults Test must not fail
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   549
@SYMREQ					REQ5792
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   550
                        REQ5793
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   551
*/
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   552
void SqlLoadTest()
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   553
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   554
	CreateTestDatabases();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   555
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   556
	RThread threads[KTestThreadCnt];
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   557
	TRequestStatus statuses[KTestThreadCnt];
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   558
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   559
	CreateTestThreads(threads, statuses, KTestThreadCnt);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   560
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   561
	ResumeTestThreads(threads, KTestThreadCnt);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   562
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   563
	User::After(2000000);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   564
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   565
	CloseTestThreads(threads, statuses, KTestThreadCnt);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   566
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   567
28
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   568
/**
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   569
@SYMTestCaseID          PDS-SQL-CT-4201
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   570
@SYMTestCaseDesc        Max number of SQL statements test.
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   571
@SYMTestPriority        High
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   572
@SYMTestActions         The test creates a table with couple of records and then
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   573
						creates as many as possible SQL statements. The expected result is
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   574
						that either the statement creation process will fail with KErrNoMemory or
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   575
						the max number of statements to be created is reached (100000).
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   576
						Then the test deletes 1/2 of the created statements objects and
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   577
						after that attempts to execute Next() on the rest of them.
51
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   578
						Note that the test has a time limit of 120 seconds. Otherwise on some platforms
28
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   579
						with WDP feature switched on the test may timeout.
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   580
@SYMTestExpectedResults Test must not fail
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   581
@SYMDEF                 DEF145236
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   582
*/  
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   583
void StatementMaxNumberTest()
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   584
	{
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   585
	TBuf<30> time;
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   586
	GetHomeTimeAsString(time);
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   587
	TheTest.Printf(_L("=== %S: Create database\r\n"), &time);
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   588
	
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   589
	(void)RSqlDatabase::Delete(KTestDbName1);
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   590
	RSqlDatabase db;
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   591
	TInt err = db.Create(KTestDbName1);
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   592
	TEST2(err, KErrNone);
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   593
	err = db.Exec(_L("CREATE TABLE A(I INTEGER); INSERT INTO A(I) VALUES(1); INSERT INTO A(I) VALUES(2);"));
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   594
	TEST(err >= 0);
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   595
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   596
	GetHomeTimeAsString(time);
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   597
	TheTest.Printf(_L("=== %S: Create statements array\r\n"), &time);
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   598
	
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   599
	//Reserve memory for the statement objects
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   600
	const TInt KMaxStmtCount = 100000;
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   601
	RSqlStatement* stmt = new RSqlStatement[KMaxStmtCount];
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   602
	TEST(stmt != NULL);
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   603
51
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   604
	TTime startTime;
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   605
	startTime.HomeTime();
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   606
	
28
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   607
	//Create as many statement objects as possible
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   608
	TInt idx = 0;
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   609
	err = KErrNone;
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   610
	for(;idx<KMaxStmtCount;++idx)
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   611
		{
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   612
		err = stmt[idx].Prepare(db, _L("SELECT * FROM A WHERE I>=0 AND I<10"));
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   613
		if(err != KErrNone)
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   614
			{
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   615
			break;
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   616
			}
51
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   617
		TTimeIntervalSeconds s = ExecutionTimeSeconds(startTime);
28
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   618
		if((idx % 100) == 0)
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   619
			{
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   620
			GetHomeTimeAsString(time);
29
cce6680bbf1c 201023_05
hgs
parents: 28
diff changeset
   621
			TheTest.Printf(_L("=== %S: Create % 5d statements. %d seconds.\r\n"), &time, idx + 1, s.Int());
51
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   622
			}
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   623
		if(s.Int() > KTestTimeLimit)
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   624
			{
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   625
			GetHomeTimeAsString(time);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   626
			TheTest.Printf(_L("=== %S: The time limit reached.\r\n"), &time);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   627
			++idx;//The idx-th statement is valid, the statement count is idx + 1.
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   628
			break;
28
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   629
			}
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   630
		}
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   631
	
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   632
	TInt stmtCnt = idx;
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   633
	TheTest.Printf(_L("%d created statement objects. Last error: %d.\r\n"), stmtCnt, err);
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   634
	TEST(err == KErrNone || err == KErrNoMemory);
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   635
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   636
	//Close 1/2 of the statements to free some memory
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   637
	idx = 0;
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   638
	for(;idx<(stmtCnt/2);++idx)
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   639
		{
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   640
		stmt[idx].Close();
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   641
		if((idx % 100) == 0)
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   642
			{
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   643
			GetHomeTimeAsString(time);
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   644
			TheTest.Printf(_L("=== %S: % 5d statements closed\r\n"), &time, idx + 1);
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   645
			}
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   646
		}
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   647
	
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   648
	//Now, there should be enough memory to be able to execute Next() on the rest of the statements
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   649
	for(TInt j=0;idx<stmtCnt;++idx,++j)
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   650
		{
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   651
		err = stmt[idx].Next();
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   652
		TEST2(err, KSqlAtRow);
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   653
		err = stmt[idx].Next();
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   654
		TEST2(err, KSqlAtRow);
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   655
		err = stmt[idx].Next();
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   656
		TEST2(err, KSqlAtEnd);
29
cce6680bbf1c 201023_05
hgs
parents: 28
diff changeset
   657
		GetHomeTimeAsString(time);
51
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   658
		TTimeIntervalSeconds s = ExecutionTimeSeconds(startTime);
28
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   659
		if((j % 100) == 0)
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   660
			{
29
cce6680bbf1c 201023_05
hgs
parents: 28
diff changeset
   661
			TheTest.Printf(_L("=== %S: % 5d statements processed. %d seconds.\r\n"), &time, j + 1, s.Int());
28
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   662
			}
29
cce6680bbf1c 201023_05
hgs
parents: 28
diff changeset
   663
		if(s.Int() > KTestTimeLimit)
28
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   664
			{
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   665
			TheTest.Printf(_L("=== %S: The time limit reached.\r\n"), &time);
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   666
			break;
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   667
			}
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   668
		}
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   669
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   670
	//Cleanup
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   671
	for(idx=0;idx<stmtCnt;++idx)
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   672
		{
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   673
		stmt[idx].Close();
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   674
		if((idx % 100) == 0)
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   675
			{
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   676
			GetHomeTimeAsString(time);
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   677
			TheTest.Printf(_L("=== %S: % 5d statements closed\r\n"), &time, idx + 1);
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   678
			}
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   679
		}
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   680
	delete [] stmt;
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   681
	db.Close();
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   682
	(void)RSqlDatabase::Delete(KTestDbName1);
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   683
	GetHomeTimeAsString(time);
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   684
	TheTest.Printf(_L("=== %S: Test case end\r\n"), &time);
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   685
	}
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   686
51
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   687
TInt CreateFileSessions(TInt& aIdx, RFs aFs[], TInt aMaxFsSessCount)
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   688
	{
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   689
	TBuf<30> time;
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   690
	TTime startTime;
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   691
	startTime.HomeTime();
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   692
	//Create as many file session objects as possible
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   693
	TInt err = KErrNone;
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   694
	for(;aIdx<aMaxFsSessCount;++aIdx)
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   695
		{
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   696
		err = aFs[aIdx].Connect();
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   697
		if(err != KErrNone)
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   698
			{
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   699
			break;
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   700
			}
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   701
		TTimeIntervalSeconds s = ExecutionTimeSeconds(startTime);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   702
		if((aIdx % 500) == 0)
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   703
			{
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   704
			GetHomeTimeAsString(time);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   705
			TheTest.Printf(_L("=== %S: Create % 5d file sessions. %d seconds.\r\n"), &time, aIdx + 1, s.Int());
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   706
			}
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   707
		if(s.Int() > KTestTimeLimit)
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   708
			{
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   709
			GetHomeTimeAsString(time);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   710
			TheTest.Printf(_L("=== %S: The time limit reached.\r\n"), &time);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   711
			++aIdx;//The idx-th file session object is valid, the file session count is idx + 1.
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   712
			break;
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   713
			}
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   714
		}
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   715
	return err;
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   716
	}
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   717
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   718
/**
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   719
@SYMTestCaseID          PDS-SQL-CT-4237
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   720
@SYMTestCaseDesc        Max file session number test.
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   721
@SYMTestPriority        High
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   722
@SYMTestActions         The test creates as many as possible file session objects. The expected result is
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   723
						that either the file session creation process will fail with KErrNoMemory or
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   724
						the max number of file sessions to be created is reached (100000).
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   725
						Then the test attempts to create a database. If there is no memory, the test
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   726
						closes some of the file session objects. The test also attempts to copy
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   727
						the created database and to delete it after that, both operations performed
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   728
						with all file session objects still open. The expectation is that the test
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   729
						will not crash the SQL server or the client side SQL dll.
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   730
						Note that the test has a time limit of 120 seconds. Otherwise on some platforms
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   731
						with WDP feature switched on the test may timeout.
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   732
@SYMTestExpectedResults Test must not fail
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   733
*/  
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   734
void FileSessionMaxNumberTest()
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   735
	{
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   736
	TBuf<30> time;
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   737
	GetHomeTimeAsString(time);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   738
	TheTest.Printf(_L("=== %S: Create file sessions\r\n"), &time);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   739
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   740
	const TInt KMaxFsCount = 100000;
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   741
	RFs* fs = new RFs[KMaxFsCount];
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   742
	TEST(fs != NULL);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   743
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   744
	//Create as many file session objects as possible
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   745
	TInt idx = 0;
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   746
	TInt err = CreateFileSessions(idx, fs, KMaxFsCount);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   747
	TheTest.Printf(_L("%d created file session objects. Last error: %d.\r\n"), idx, err);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   748
	TEST(err == KErrNone || err == KErrNoMemory);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   749
	
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   750
	TBool dbCreated = EFalse;
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   751
	RSqlDatabase db;
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   752
	
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   753
	//An attempt to create a database
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   754
	while(idx > 0 && err == KErrNoMemory)
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   755
		{
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   756
		(void)RSqlDatabase::Delete(KTestDbName1);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   757
		err = db.Create(KTestDbName1);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   758
		if(err == KErrNone)
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   759
			{
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   760
			err = db.Exec(_L("CREATE TABLE A(I INTEGER); INSERT INTO A(I) VALUES(1); INSERT INTO A(I) VALUES(2);"));
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   761
			}
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   762
		TheTest.Printf(_L("Database creation. Last error: %d.\r\n"), err);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   763
		TEST(err == KErrNoMemory || err >= 0);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   764
		if(err == KErrNoMemory)
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   765
			{
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   766
			fs[--idx].Close();
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   767
			}
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   768
		else
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   769
			{
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   770
			dbCreated = ETrue;
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   771
			}
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   772
		db.Close();
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   773
		}
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   774
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   775
	if(dbCreated)
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   776
		{
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   777
		//Create again file session objects - as many as possible
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   778
		err = CreateFileSessions(idx, fs, KMaxFsCount);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   779
		TEST(err == KErrNone || err == KErrNoMemory);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   780
		//Try to copy the database
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   781
		err = RSqlDatabase::Copy(KTestDbName1, KTestDbName4);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   782
		TheTest.Printf(_L("Copy database. Last error: %d.\r\n"), err);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   783
		TEST(err == KErrNone || err == KErrNoMemory);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   784
		//Try to delete the databases
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   785
		if(err == KErrNone)
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   786
			{
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   787
			err = RSqlDatabase::Delete(KTestDbName4);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   788
			TheTest.Printf(_L("Delete database copy. Last error: %d.\r\n"), err);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   789
			TEST(err == KErrNone || err == KErrNoMemory);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   790
			}
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   791
		err = RSqlDatabase::Delete(KTestDbName1);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   792
		TheTest.Printf(_L("Delete database. Last error: %d.\r\n"), err);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   793
		TEST(err == KErrNone || err == KErrNoMemory);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   794
		}
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   795
	
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   796
	//Cleanup
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   797
	for(TInt i=0;i<idx;++i)
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   798
		{
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   799
		fs[i].Close();
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   800
		if((i % 500) == 0)
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   801
			{
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   802
			GetHomeTimeAsString(time);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   803
			TheTest.Printf(_L("=== %S: % 5d file sessions closed\r\n"), &time, i + 1);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   804
			}
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   805
		}
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   806
	delete [] fs;
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   807
	err = RSqlDatabase::Delete(KTestDbName4);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   808
	TEST(err == KErrNone || err == KErrNotFound);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   809
	err = RSqlDatabase::Delete(KTestDbName1);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   810
	TEST(err == KErrNone || err == KErrNotFound);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   811
	}
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   812
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   813
TInt CreateSqlConnections(TInt& aIdx, RSqlDatabase aDb[], TInt aMaxSqlConnCount)
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   814
	{
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   815
	TBuf<30> time;
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   816
	TTime startTime;
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   817
	startTime.HomeTime();
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   818
	//Create as many file session objects as possible
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   819
	TInt err = KErrNone;
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   820
	for(;aIdx<aMaxSqlConnCount;++aIdx)
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   821
		{
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   822
		err = aDb[aIdx].Open(KTestDbName1);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   823
		if(err != KErrNone)
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   824
			{
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   825
			break;
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   826
			}
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   827
		TTimeIntervalSeconds s = ExecutionTimeSeconds(startTime);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   828
		if((aIdx % 100) == 0)
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   829
			{
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   830
			GetHomeTimeAsString(time);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   831
			TheTest.Printf(_L("=== %S: Create % 5d sql connections. %d seconds.\r\n"), &time, aIdx + 1, s.Int());
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   832
			}
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   833
		if(s.Int() > KTestTimeLimit)
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   834
			{
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   835
			GetHomeTimeAsString(time);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   836
			TheTest.Printf(_L("=== %S: The time limit reached.\r\n"), &time);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   837
			++aIdx;//The idx-th sql connection is valid, the sql connection count is idx + 1.
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   838
			break;
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   839
			}
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   840
		}
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   841
	return err;
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   842
	}
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   843
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   844
/**
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   845
@SYMTestCaseID          PDS-SQL-CT-4238
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   846
@SYMTestCaseDesc        Max sql connection number test.
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   847
@SYMTestPriority        High
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   848
@SYMTestActions         The test creates as many as possible sql connection objects. The expected result is
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   849
						that either the sql connection creation process will fail with KErrNoMemory or
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   850
						the max number of sql connection to be created is reached (100000).
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   851
						Then the test attempts to create a database. If there is no memory, the test
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   852
						closes some of the sql connection objects. The test also attempts to copy
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   853
						the created database and to delete it after that, both operations performed
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   854
						with all sql connection objects still open. The expectation is that the test
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   855
						will not crash the SQL server or the client side SQL dll.
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   856
						Note that the test has a time limit of 120 seconds. Otherwise on some platforms
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   857
						with WDP feature switched on the test may timeout.
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   858
@SYMTestExpectedResults Test must not fail
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   859
*/  
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   860
void SqlConnectionMaxNumberTest()
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   861
	{
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   862
	TBuf<30> time;
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   863
	GetHomeTimeAsString(time);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   864
	TheTest.Printf(_L("=== %S: Create sql connections\r\n"), &time);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   865
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   866
	(void)RSqlDatabase::Delete(KTestDbName1);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   867
	RSqlDatabase db1;
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   868
	TInt err = db1.Create(KTestDbName1);//CreateSqlConnections() opens the already existing KTestDbName1 database
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   869
	TEST2(err, KErrNone);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   870
	
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   871
	const TInt KMaxConnCount = 100000;
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   872
	RSqlDatabase* db = new RSqlDatabase[KMaxConnCount];
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   873
	TEST(db != NULL);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   874
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   875
	//Create as many sql connection objects as possible
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   876
	TInt idx = 0;
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   877
	err = CreateSqlConnections(idx, db, KMaxConnCount);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   878
	TheTest.Printf(_L("%d created sql connection objects. Last error: %d.\r\n"), idx, err);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   879
	TEST(err == KErrNone || err == KErrNoMemory);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   880
	
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   881
	TBool dbCreated = EFalse;
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   882
	RSqlDatabase db2;
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   883
	
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   884
	//An attempt to create a database
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   885
	while(idx > 0 && err == KErrNoMemory)
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   886
		{
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   887
		(void)RSqlDatabase::Delete(KTestDbName4);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   888
		err = db2.Create(KTestDbName4);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   889
		if(err == KErrNone)
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   890
			{
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   891
			err = db2.Exec(_L("CREATE TABLE A(I INTEGER); INSERT INTO A(I) VALUES(1); INSERT INTO A(I) VALUES(2);"));
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   892
			}
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   893
		TheTest.Printf(_L("Database creation. Last error: %d.\r\n"), err);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   894
		TEST(err == KErrNoMemory || err >= 0);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   895
		if(err == KErrNoMemory)
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   896
			{
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   897
			db[--idx].Close();
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   898
			}
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   899
		else
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   900
			{
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   901
			dbCreated = ETrue;
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   902
			}
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   903
		db2.Close();
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   904
		}
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   905
	
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   906
	if(dbCreated)
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   907
		{
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   908
		//Create again sql connection objects - as many as possible
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   909
		err = CreateSqlConnections(idx, db, KMaxConnCount);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   910
		TEST(err == KErrNone || err == KErrNoMemory);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   911
		//Try to copy the database
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   912
		err = RSqlDatabase::Copy(KTestDbName4, KTestDbName5);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   913
		TheTest.Printf(_L("Copy database. Last error: %d.\r\n"), err);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   914
		TEST(err == KErrNone || err == KErrNoMemory);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   915
		//Try to delete the databases
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   916
		if(err == KErrNone)
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   917
			{
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   918
			err = RSqlDatabase::Delete(KTestDbName5);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   919
			TheTest.Printf(_L("Delete database copy. Last error: %d.\r\n"), err);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   920
			TEST(err == KErrNone || err == KErrNoMemory);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   921
			}
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   922
		err = RSqlDatabase::Delete(KTestDbName4);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   923
		TheTest.Printf(_L("Delete database. Last error: %d.\r\n"), err);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   924
		TEST(err == KErrNone || err == KErrNoMemory);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   925
		}
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   926
	
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   927
	//Cleanup
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   928
	for(TInt i=0;i<idx;++i)
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   929
		{
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   930
		db[i].Close();
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   931
		if((i % 100) == 0)
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   932
			{
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   933
			GetHomeTimeAsString(time);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   934
			TheTest.Printf(_L("=== %S: % 5d sql connections closed\r\n"), &time, i + 1);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   935
			}
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   936
		}
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   937
	delete [] db;
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   938
	db1.Close();
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   939
	err = RSqlDatabase::Delete(KTestDbName5);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   940
	TEST(err == KErrNone || err == KErrNotFound);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   941
	err = RSqlDatabase::Delete(KTestDbName4);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   942
	TEST(err == KErrNone || err == KErrNotFound);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   943
	err = RSqlDatabase::Delete(KTestDbName1);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   944
	TEST(err == KErrNone || err == KErrNotFound);
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   945
	}
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   946
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   947
void DoTests()
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   948
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   949
	TheTest.Start(_L(" @SYMTestCaseID:SYSLIB-SQL-CT-1627-0001 SQL server load test "));
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   950
	SqlLoadTest();
28
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   951
	TheTest.Next(_L(" @SYMTestCaseID:PDS-SQL-CT-4201 Statement max number test"));
7a522c0700d3 201019_09
hgs
parents: 0
diff changeset
   952
	StatementMaxNumberTest();
51
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   953
#if defined __WINS__ ||	defined __WINSCW__
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   954
	//The next two tests are likely to timeout on hardware because they create a lot of file sessions and sql connections.
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   955
	//The SQL server heap is 32Mb on hardware but only 6Mb on the Emulator. 
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   956
	TheTest.Next(_L(" @SYMTestCaseID:PDS-SQL-CT-4237 File session max number test"));
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   957
	FileSessionMaxNumberTest();
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   958
	TheTest.Next(_L(" @SYMTestCaseID:PDS-SQL-CT-4238 Sql connection max number test"));
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   959
	SqlConnectionMaxNumberTest();
7d4490026038 201037_06
hgs
parents: 29
diff changeset
   960
#endif	
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   961
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   962
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   963
TInt E32Main()
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   964
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   965
	TheTest.Title();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   966
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   967
	CTrapCleanup* tc = CTrapCleanup::New();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   968
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   969
	__UHEAP_MARK;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   970
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   971
	CreateTestDir();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   972
	DeleteTestFiles();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   973
	DoTests();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   974
	DeleteTestFiles();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   975
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   976
	__UHEAP_MARKEND;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   977
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   978
	TheTest.End();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   979
	TheTest.Close();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   980
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   981
	delete tc;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   982
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   983
	User::Heap().Check();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   984
	return KErrNone;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   985
	}