diff -r 000000000000 -r 08ec8eefde2f persistentstorage/sql/SRC/Common/SqlUtil.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/persistentstorage/sql/SRC/Common/SqlUtil.h Fri Jan 22 11:06:30 2010 +0200 @@ -0,0 +1,340 @@ +// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#ifndef __SQLUTIL_H__ +#define __SQLUTIL_H__ + +#include //TInt + +/** +Defines the maximum length of text or binary data that can be transferred +from the SQL server to the SQL client in a single IPC call. + +This constant affects the behaviour of a number of functions, specifically: +- RSqlStatement::ColumnBinaryL() +- RSqlStatement::ColumnTextL() +. +It also affects the behaviour of member functions of the classes: +- RSqlParamWriteStream +- RSqlColumnReadStream + +@see RSqlStatement::ColumnBinaryL() +@see RSqlStatement::ColumnTextL() +@see RSqlParamWriteStream +@see RSqlColumnReadStream + +@internalComponent +*/ +#ifdef _DEBUG +const TInt KSqlMaxDesLen = 8; +#else +const TInt KSqlMaxDesLen = 256; +#endif + +/** +Used internally for making sure config manipulation buffers +are not exceeded +@internalComponent +*/ +const TInt KSqlSrvMaxConfigStrLen = 256; + +/** +If some server function retuns a non-negative error, which value is bigger than KSqlClientBufOverflowCode, +then it means the server wanted to send a data buffer to the client but the client's +buffer is not big enough. The client must increase the buffer size and try to retrieve the data only. +@internalComponent +*/ +const TInt KSqlClientBufOverflowCode = 0x1000; + +/** +@internalComponent +*/ +enum TSqlBufFlatType + { + ESqlColumnNamesBuf, + ESqlParamNamesBuf, + ESqlColumnValuesBuf + }; + +/** +This structure is used for IPC data transfers +@internalComponent +*/ +NONSHARABLE_STRUCT(TSqlIpcData) + { + inline TSqlIpcData() : + iPrm1(0), + iPrm2(0) + { + } + TUint32 iPrm1; + TUint32 iPrm2; + }; + +/** +IPC function codes used for communication between SqlDb.dll and SqlSrv.exe. + +The max function code allowed is 0xFF - see KSqlSrvFunctionMask declaration in the same file. + +The 32-bit RMessage2 function code format, which is used by the SQL client and server, is: + +@code +Bits: 31................................0 +Bytes: 0 1 2 3 + XXXXXXTT HHHHHHHH HHHHHHHH FFFFFFFF + +Where: +- "X" - unused bits; +- "T" - handle type: 0 - statement handle, 1 - stream handle, 2 - no handle; +- "H" - statement or stream handle, 16 bits; +- "F" - function code, 8 bits (see KSqlSrvFunctionMask); +@endcode + +@see RMessage2 +@see KSqlSrvFunctionMask +@see KSqlSrvHandleMask +@see KSqlSrvHandleTypeMask +@see KSqlSrvHandleShiftBits +@see CSqlSrvSession +@see CSqlSrvSession::ServiceL() + +@internalComponent +*/ +enum TSqlSrvFunction + { + //Test functions + ESqlSrvTestBase = 0x00, + ESqlSrvResourceMark = ESqlSrvTestBase + 0x01, + ESqlSrvResourceCheck = ESqlSrvTestBase + 0x02, + ESqlSrvResourceCount = ESqlSrvTestBase + 0x03, + ESqlSrvSetDbHeapFailure = ESqlSrvTestBase + 0x04, + ESqlSrvSetHeapFailure = ESqlSrvTestBase + 0x05, + //Profiling functions + ESqlSrvProfilerStart = ESqlSrvTestBase + 0x06, + ESqlSrvProfilerStop = ESqlSrvTestBase + 0x07, + ESqlSrvProfilerReset = ESqlSrvTestBase + 0x08, + ESqlSrvProfilerSetRange = ESqlSrvTestBase + 0x09,//not used + ESqlSrvProfilerQuery = ESqlSrvTestBase + 0x0A, + //Database functions + ESqlSrvDbBase = 0x10, + ESqlSrvDbCreate = ESqlSrvDbBase + 0x01, + ESqlSrvDbCreateSecure = ESqlSrvDbBase + 0x02, + ESqlSrvDbOpen = ESqlSrvDbBase + 0x03, + ESqlSrvDbOpenFromHandle = ESqlSrvDbBase + 0x04, + ESqlSrvDbClose = ESqlSrvDbBase + 0x05, + ESqlSrvDbCopy = ESqlSrvDbBase + 0x06, + ESqlSrvDbDelete = ESqlSrvDbBase + 0x07, + //All operations with opcode > ESqlSrvDbDelete require valid database object (on the server side) + ESqlSrvLastErrorMsg = ESqlSrvDbBase + 0x08, + ESqlSrvDbExec8 = ESqlSrvDbBase + 0x09, + ESqlSrvDbExec16 = ESqlSrvDbBase + 0x0A, + ESqlSrvDbSetIsolationLevel = ESqlSrvDbBase + 0x0C, + ESqlSrvDbGetSecurityPolicy = ESqlSrvDbBase + 0x0D, + ESqlSrvDbAttach = ESqlSrvDbBase + 0x0E, + ESqlSrvDbAttachFromHandle = ESqlSrvDbBase + 0x0F, + ESqlSrvDbDetach = ESqlSrvDbBase + 0x10, + ESqlSrvDbScalarFullSelect8 = ESqlSrvDbBase + 0x11, + ESqlSrvDbScalarFullSelect16 = ESqlSrvDbBase + 0x12, + ESqlSrvDbInTransaction = ESqlSrvDbBase + 0x13, + ESqlSrvDbSize = ESqlSrvDbBase + 0x14, + ESqlSrvDbSize2 = ESqlSrvDbBase + 0x15, + ESqlSrvDbBlobSource = ESqlSrvDbBase + 0x16, + ESqlSrvDbLastInsertedRowId = ESqlSrvDbBase + 0x17, + ESqlSrvDbCompact = ESqlSrvDbBase + 0x18, + //Database - reserved drive space management + ESqlSrvDbReserveDriveSpace = ESqlSrvDbBase + 0x19, + ESqlSrvDbFreeReservedSpace = ESqlSrvDbBase + 0x1A, + ESqlSrvDbGetReserveAccess = ESqlSrvDbBase + 0x1B, + ESqlSrvDbReleaseReserveAccess=ESqlSrvDbBase + 0x1C, + //Statement functions + ESqlSrvStmtBase = 0x50, + ESqlSrvStmtPrepare8 = ESqlSrvStmtBase + 0x01, + ESqlSrvStmtPrepare16 = ESqlSrvStmtBase + 0x02, + ESqlSrvStmtClose = ESqlSrvStmtBase + 0x03, + ESqlSrvStmtReset = ESqlSrvStmtBase + 0x04, + ESqlSrvStmtExec = ESqlSrvStmtBase + 0x05, + ESqlSrvStmtAsyncExec = ESqlSrvStmtBase + 0x06, + ESqlSrvStmtBindExec = ESqlSrvStmtBase + 0x07, + ESqlSrvStmtAsyncBindExec = ESqlSrvStmtBase + 0x09, + ESqlSrvStmtNext = ESqlSrvStmtBase + 0x0A, + ESqlSrvStmtBindNext = ESqlSrvStmtBase + 0x0B, + ESqlSrvStmtColumnNames = ESqlSrvStmtBase + 0x0C, + ESqlSrvStmtParamNames = ESqlSrvStmtBase + 0x0D, + ESqlSrvStmtColumnSource = ESqlSrvStmtBase + 0x0E, + ESqlSrvStmtBinParamSink = ESqlSrvStmtBase + 0x0F, + ESqlSrvStmtTxtParamSink16 = ESqlSrvStmtBase + 0x11, + ESqlSrvStmtBufFlat = ESqlSrvStmtBase + 0x12, + ESqlSrvStmtColumnValue = ESqlSrvStmtBase + 0x13, + ESqlSrvStmtDeclColumnTypes = ESqlSrvStmtBase + 0x14, + //Stream functions + ESqlSrvStreamBase = 0x70, + ESqlSrvStreamRead = ESqlSrvStreamBase + 0x01, + ESqlSrvStreamWrite = ESqlSrvStreamBase + 0x02, + ESqlSrvStreamSize = ESqlSrvStreamBase + 0x03, + ESqlSrvStreamSynch = ESqlSrvStreamBase + 0x04, + ESqlSrvStreamClose = ESqlSrvStreamBase + 0x05 + }; + +//////////////////////////////////////////////////////////////////////////////////////////////////////////// +////////// RMessage2, function code related macros //////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/** +SQL server function mask. +The SQL server function code must be less than 0x100. +(it occupies the lower 8 bits of the 32-bit message code) + +@see TSqlSrvFunction + +@internalComponent +*/ +const TUint KSqlSrvFunctionMask = 0x000000FF; + +/** +SQL server (statement or stream) handle mask. +The handle occupies 16 bits, right after the function code. + +@see KSqlSrvHandleTypeMask +@see KSqlSrvHandleShiftBits + +@internalComponent +*/ +const TUint KSqlSrvHandleMask = 0x00FFFF00; + +/** +SQL server (stream or statement) handle - shift bits. + +@see KSqlSrvFunctionMask +@see KSqlSrvHandleMask + +@internalComponent +*/ +const TInt KSqlSrvHandleShiftBits = 8; + +/** +SQL server handle type bit. + +@see KSqlSrvHandleMask +@see KSqlSrvHandleShiftBits + +@internalComponent +*/ +const TInt KSqlSrvHandleTypeMask = 0x03000000; + +/** +SQL server - handle type - statement or stream. + +@internalComponent +*/ +enum TSqlSrvHandleType + { + ESqlSrvNoHandle = 0x00000000, + ESqlSrvStreamHandle = 0x01000000, + ESqlSrvStatementHandle = 0x02000000 + }; + +inline TInt MakeMsgCode(TSqlSrvFunction aFunction, TSqlSrvHandleType aHandleType, TInt aHandle); + +//////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////// + +TInt Sql2OsErrCode(TInt aSqlError, TInt aOsError); + +//////////////////////////////////////////////////////////////////////////////////////////////////////////// +////////// Case insensitive string comparisons //////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////// + +inline TInt CompareNoCase8(const TDesC8& aLeft, const TDesC8& aRight); +inline TInt CompareNoCase16(const TDesC16& aLeft, const TDesC16& aRight); +#ifdef _UNICODE +#define CompareNoCase CompareNoCase16 +#else +#define CompareNoCase CompareNoCase8 +#endif//_UNICODE + +//////////////////////////////////////////////////////////////////////////////////////////////////////////// +////////// Buffer alignment functions ///////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////// + +inline TInt AlignedLen8(TInt aLen); +#ifdef _DEBUG +inline TBool IsAligned8(TInt aLen); +#endif + +//////////////////////////////////////////////////////////////////////////////////////////////////////////// +////////// Compaction modes /////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/** +Compaction modes. +@internalComponent +*/ +enum TSqlCompactionMode + { + ESqlCompactionNotSet, + ESqlCompactionManual, + ESqlCompactionBackground, + ESqlCompactionAuto + }; + +/** +SQLite vacuum modes. +@internalComponent +*/ +enum TSqliteVacuumMode + { + ESqliteVacuumOff = 0, + ESqliteVacuumAuto = 1, + ESqliteVacuumIncremental = 2 + }; + + +/** +Default compaction mode. +@internalComponent +*/ +const TSqlCompactionMode KSqlDefaultCompactionMode = ESqlCompactionBackground; + +/** +Exec free page threshold in Kb, after which the background compaction will be activated. +@internalComponent +*/ +const TInt KSqlCompactFreePageThresholdKb = 50; + +/** +One compaction step length in milliseconds. +@internalComponent +*/ +const TInt KSqlCompactStepLengthMs = 50; + +/** +Interval in milliseconds between the compaction steps. +@internalComponent +*/ +const TInt KSqlCompactStepIntervalMs = 50; + +//////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/** +The db config file version that is initially stored in the system settings table. +@internalComponent +*/ +const TInt KSqlNullDbConfigFileVersion = 0; + +//////////////////////////////////////////////////////////////////////////////////////////////////////////// + +#include "SqlUtil.inl" + +#endif //__SQLUTIL_H__