persistentstorage/dbms/tdbms/t_dbbench.cpp
author hgs
Tue, 19 Oct 2010 16:26:13 +0100
changeset 55 44f437012c90
parent 0 08ec8eefde2f
permissions -rw-r--r--
201041_01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
55
44f437012c90 201041_01
hgs
parents: 0
diff changeset
     1
// Copyright (c) 1998-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 <d32dbms.h>
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    17
#include <s32file.h>
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    18
#include <e32test.h>
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    19
#include <e32math.h>
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    20
#include <e32svr.h>
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    21
#include <hal.h>
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    22
#include <d32dbmsconstants.h>
55
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    23
#include "t_dbcmdlineutil.h"
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    24
55
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    25
TCmdLineParams TheCmdLineParams;
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    26
TFileName TheDbFileName;
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    27
RFile TheLogFile; 
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    28
RTest TheTest(_L("t_dbbench"));
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    29
RDbNamedDatabase TheDatabase;
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    30
RDbView TheView;
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    31
RFs TheFs;
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    32
55
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    33
TBuf<250> TheLogLine;
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    34
TBuf8<250> TheLogLine8;
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    35
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    36
const TPtrC KTableName=_S("Test");
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    37
const TPtrC KColCluster=_S("Cluster");
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    38
const TPtrC KColXcluster=_S("xCluster");
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    39
const TPtrC KColRandom=_S("Random");
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    40
const TPtrC KColXrandom=_S("xRandom");
55
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    41
const TInt  KRecords=2000;
0
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
struct TTest
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    44
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    45
	const TText* iName;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    46
	const TText* iQuery;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    47
	};
55
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    48
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    49
const TTest KQuery[]=
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
	{_S("project"),_S("select cluster,xcluster,random,xrandom from test")},
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    52
	{_S("restrict 1"),_S("select * from test where cluster=0")},
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    53
	{_S("restrict 2"),_S("select * from test where xrandom=0")},
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    54
	{_S("restrict 3"),_S("select * from test where xcluster<500 and xrandom <500")},
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    55
	{_S("order 1"),_S("select * from test order by xrandom")},
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    56
	{_S("order 2"),_S("select * from test order by cluster")},
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    57
	{_S("all 1"),_S("select * from test where random<500 order by xrandom")},
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    58
	{_S("all 2"),_S("select * from test where xcluster<500 order by xrandom")},
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    59
	{_S("all 3"),_S("select * from test where xcluster<500 order by xcluster")},
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    60
	{_S("all 4"),_S("select * from test where xcluster<500 and xrandom<200 order by xcluster")}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    61
	};
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    62
55
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    63
///////////////////////////////////////////////////////////////////////////////////////
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    64
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    65
void TestEnvDestroy()
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    66
	{
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    67
	TheView.Close();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    68
	TheDatabase.Close();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    69
	if(TheCmdLineParams.iLogFileName.Length() > 0)
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    70
		{
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    71
		(void)TheLogFile.Flush();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    72
		TheLogFile.Close();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    73
		}
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    74
	//T_BENCH.DB cannot be deleted here, because it is used by T_DBCOMP test!
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    75
	TheFs.Close();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    76
	}
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    77
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    78
///////////////////////////////////////////////////////////////////////////////////////
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    79
//Test macros and functions
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    80
void Check1(TInt aValue, TInt aLine)
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    81
	{
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    82
	if(!aValue)
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    83
		{
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    84
		TestEnvDestroy();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    85
		TheTest.Printf(_L("*** Line %d. Expression evaluated to false\r\n"), aLine);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    86
		TheTest(EFalse, aLine);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    87
		}
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    88
	}
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    89
void Check2(TInt aValue, TInt aExpected, TInt aLine)
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    90
	{
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    91
	if(aValue != aExpected)
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    92
		{
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    93
		TestEnvDestroy();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    94
		TheTest.Printf(_L("*** Line %d, Expected error: %d, got: %d\r\n"), aLine, aExpected, aValue);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    95
		TheTest(EFalse, aLine);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    96
		}
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    97
	}
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    98
#define TEST(arg) ::Check1((arg), __LINE__)
44f437012c90 201041_01
hgs
parents: 0
diff changeset
    99
#define TEST2(aValue, aExpected) ::Check2(aValue, aExpected, __LINE__)
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   100
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   101
///////////////////////////////////////////////////////////////////////////////////////
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   102
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   103
TInt FastCounterFrequency()
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   104
	{
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   105
	static TInt freq = 0;
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   106
	if(freq == 0)
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   107
		{
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   108
		TEST2(HAL::Get(HAL::EFastCounterFrequency, freq), KErrNone);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   109
		}
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   110
	return freq;
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   111
	}
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   112
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   113
//Prints the test case title and execution time in microseconds
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   114
void PrintResult(const TDesC& aTitle, TUint32 aStartTicks, TUint32 aEndTicks, TInt aIterations = 0)
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   115
	{
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   116
	TInt freq = FastCounterFrequency();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   117
	TInt64 diffTicks = (TInt64)aEndTicks - (TInt64)aStartTicks;
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   118
	if(diffTicks < 0)
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   119
		{
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   120
		diffTicks = KMaxTUint32 + diffTicks + 1;
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   121
		}
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   122
	const TInt KMicroSecIn1Sec = 1000000;
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   123
	TInt32 us = (diffTicks * KMicroSecIn1Sec) / freq;
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   124
	if(aIterations > 0)
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   125
		{
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   126
		us /= aIterations;
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   127
		}
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   128
	TheTest.Printf(_L("%S: %d us\r\n"), &aTitle, us);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   129
	if(TheCmdLineParams.iLogFileName.Length() > 0)
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   130
		{
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   131
		TheLogLine.Format(_L("%S¬%d¬us\r\n"), &aTitle, us);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   132
		TheLogLine8.Copy(TheLogLine);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   133
		(void)TheLogFile.Write(TheLogLine8);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   134
		}
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   135
	}
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   136
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   137
//Calculates time in microseconds
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   138
TInt CalcTime(TUint32 aStartTicks, TUint32 aEndTicks)
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   139
	{
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   140
	TInt freq = FastCounterFrequency();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   141
	TInt64 diffTicks = (TInt64)aEndTicks - (TInt64)aStartTicks;
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   142
	if(diffTicks < 0)
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   143
		{
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   144
		diffTicks = KMaxTUint32 + diffTicks + 1;
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   145
		}
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   146
	const TInt KMicroSecIn1Sec = 1000000;
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   147
	TInt32 us = (diffTicks * KMicroSecIn1Sec) / freq;
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   148
	return us;
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   149
	}
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   150
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   151
///////////////////////////////////////////////////////////////////////////////////////
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   152
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   153
/**
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   154
Create the database: keep the code 050 compatible
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   155
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   156
@SYMTestCaseID          SYSLIB-DBMS-CT-0577
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   157
@SYMTestCaseDesc        Benchmark Tests. Creation of a local Database test
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   158
@SYMTestPriority        Medium
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   159
@SYMTestActions        	Attempt to test RDbNamedDatabase::CreateTable(),RDbNamedDatabase::CreateIndex(),
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   160
						RDbNamedDatabase::Compact(),RDbView::Prepare() functions
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   161
@SYMTestExpectedResults Test must not fail
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   162
@SYMREQ                 REQ0000
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   163
*/
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   164
void CreateDatabaseL()
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   165
	{
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   166
	TInt err = TheDatabase.Replace(TheFs, TheDbFileName);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   167
	TEST2(err, KErrNone);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   168
	
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   169
	CDbColSet* set = CDbColSet::NewLC();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   170
	TDbCol col(KColCluster,EDbColInt32);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   171
	col.iAttributes=col.ENotNull;
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   172
	set->AddL(col);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   173
	col.iName=KColXcluster;
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   174
	set->AddL(col);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   175
	col.iName=KColRandom;
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   176
	set->AddL(col);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   177
	col.iName=KColXrandom;
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   178
	set->AddL(col);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   179
	
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   180
	err = TheDatabase.CreateTable(KTableName, *set);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   181
	TEST2(err, KErrNone);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   182
	CleanupStack::PopAndDestroy(set);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   183
	
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   184
	TUint32 ticksStart = User::FastCounter();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   185
	err = TheView.Prepare(TheDatabase,_L("select * from test"),TheView.EInsertOnly);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   186
	TEST2(err, KErrNone);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   187
	TheDatabase.Begin();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   188
	TInt jj=0;
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   189
	for (TInt ii=0;ii<KRecords;++ii)
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   190
		{
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   191
		TheView.InsertL();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   192
		jj=(jj+23);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   193
		if (jj>=KRecords)
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   194
			jj-=KRecords;
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   195
		TheView.SetColL(1,ii);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   196
		TheView.SetColL(2,ii);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   197
		TheView.SetColL(3,jj);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   198
		TheView.SetColL(4,jj);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   199
		TheView.PutL();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   200
		}
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   201
	err = TheDatabase.Commit();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   202
	TEST2(err, KErrNone);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   203
	TheView.Close();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   204
	TUint32 ticksEnd = User::FastCounter();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   205
	PrintResult(_L("Build table"), ticksStart, ticksEnd);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   206
	
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   207
	ticksStart = User::FastCounter();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   208
	CDbKey* key = CDbKey::NewLC();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   209
	key->AddL(KColXcluster);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   210
	key->MakeUnique();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   211
	err = TheDatabase.CreateIndex(KColXcluster,KTableName,*key);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   212
	TEST2(err, KErrNone);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   213
	ticksEnd = User::FastCounter();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   214
	PrintResult(_L("Cluster index"), ticksStart, ticksEnd);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   215
	
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   216
	ticksStart = User::FastCounter();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   217
	key->Clear();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   218
	key->AddL(KColXrandom);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   219
	err = TheDatabase.CreateIndex(KColXrandom,KTableName,*key);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   220
	TEST2(err, KErrNone);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   221
	CleanupStack::PopAndDestroy(key);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   222
	ticksEnd = User::FastCounter();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   223
	PrintResult(_L("Random index"), ticksStart, ticksEnd);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   224
	
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   225
	ticksStart = User::FastCounter();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   226
	err = TheDatabase.Compact();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   227
	ticksEnd = User::FastCounter();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   228
	PrintResult(_L("Compact"), ticksStart, ticksEnd);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   229
	TEST2(err, KErrNone);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   230
	}
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   231
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   232
void Evaluate(const TDesC& aTitle, const TDesC& aSql)
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   233
	{
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   234
	TInt m = 1;
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   235
	for(;;)
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   236
		{
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   237
		TUint32 ticksStart = User::FastCounter();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   238
		for(TInt i=0; i<m; ++i)
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   239
			{
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   240
			TInt err = TheView.Prepare(TheDatabase,aSql,KDbUnlimitedWindow,TheView.EReadOnly);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   241
			TEST2(err, KErrNone);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   242
			err = TheView.EvaluateAll();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   243
			TEST2(err, KErrNone);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   244
			TheView.Close();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   245
			}
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   246
		TUint32 ticksEnd = User::FastCounter();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   247
		TInt us = CalcTime(ticksStart, ticksEnd);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   248
		if(us > 100000)
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   249
			{
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   250
			PrintResult(aTitle, ticksStart, ticksEnd, m);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   251
			return;
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   252
			}
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   253
		m *= 4;
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   254
		}
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   255
	}
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   256
0
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
@SYMTestCaseID          SYSLIB-DBMS-CT-0578
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   259
@SYMTestCaseDesc        Benchmark Test.Querying a local Database Test
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   260
@SYMTestPriority        Medium
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   261
@SYMTestActions        	Evaluate SELECT queries on the created database
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   262
@SYMTestExpectedResults Test must not fail
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   263
@SYMREQ                 REQ0000
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   264
*/
55
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   265
void Queries()
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   266
	{
55
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   267
	for(TUint ii=0;ii<sizeof(KQuery)/sizeof(KQuery[0]);++ii)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   268
		{
55
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   269
		Evaluate(TPtrC(KQuery[ii].iName), TPtrC(KQuery[ii].iQuery));
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   270
		}
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
55
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   273
void BenchTestL()
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   274
	{
55
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   275
	TheTest.Start(_L("@SYMTestCaseID:SYSLIB-DBMS-CT-0577 RDbNamedDatabase performance test"));
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   276
	CreateDatabaseL();
55
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   277
	
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   278
	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-DBMS-CT-0578 SQL queries performance test"));
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   279
	Queries();
55
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   280
	
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   281
	TheDatabase.Close();
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   282
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   283
55
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   284
void TestEnvInit()
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   285
    {
55
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   286
	TInt err = TheFs.Connect();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   287
	TEST2(err, KErrNone);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   288
	
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   289
	err = TheFs.MkDirAll(TheDbFileName);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   290
	TEST(err == KErrNone || err == KErrAlreadyExists);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   291
	
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   292
	if(TheCmdLineParams.iLogFileName.Length() > 0)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   293
		{
55
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   294
		err = TheLogFile.Replace(TheFs, TheCmdLineParams.iLogFileName, EFileRead | EFileWrite);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   295
		TEST2(err, KErrNone);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   296
		LogConfig(TheLogFile, TheCmdLineParams);
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   297
		}
55
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   298
    }
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   299
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   300
TInt E32Main()
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   301
    {
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   302
	TheTest.Title();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   303
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   304
	CTrapCleanup* tc = CTrapCleanup::New();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   305
	TheTest(tc != NULL);
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   306
55
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   307
	GetCmdLineParams(TheTest, _L("t_dbbench"), TheCmdLineParams);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   308
	_LIT(KDbName, "c:\\dbms-tst\\t_bench.db");
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   309
	PrepareDbName(KDbName, TheCmdLineParams.iDriveName, TheDbFileName);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   310
	TheTest.Printf(_L("==Database: %S\r\n"), &TheDbFileName); 
0
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
	__UHEAP_MARK;
55
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   313
	
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   314
	TestEnvInit();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   315
	TRAPD(err, BenchTestL());
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   316
	TEST2(err, KErrNone);
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   317
	TestEnvDestroy();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   318
	
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   319
	__UHEAP_MARKEND;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   320
55
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   321
	User::Heap().Check();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   322
	
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   323
	TheTest.End();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   324
	TheTest.Close();
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   325
	
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   326
	delete tc;
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   327
	
44f437012c90 201041_01
hgs
parents: 0
diff changeset
   328
	return KErrNone;
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   329
    }