persistentstorage/sql/SRC/Common/SqlBufIterator.h
changeset 0 08ec8eefde2f
child 23 26645d81f48d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/persistentstorage/sql/SRC/Common/SqlBufIterator.h	Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,131 @@
+// Copyright (c) 2006-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 __SQLBUFITERATOR_H__
+#define __SQLBUFITERATOR_H__
+
+#include <sqldb.h>			//TSqlColumnType
+#include "SqlBufFlat.h"		//RSqlBufFlat
+#include "SqlPanic.h"	
+
+//Forward declarations
+class MStreamBuf;
+
+/**
+ZeroBlob column type. Used internally.
+@internalComponent
+*/
+enum {ESqlZeroBlob = ESqlBinary + 1};
+
+inline TBool IsSequenceSqlType(TInt aType)
+	{
+	return aType == ESqlNull || aType == ESqlText || aType == ESqlBinary;
+	}
+
+//////////////////////////////////////////////////////////////////////////////////////
+/////////////////////  Column type conversion table  /////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////////
+//|--------------------------------------------------------------------------------|//
+//|Column type | ColumnInt() ColumnInt64() ColumnReal() ColumnText() ColumnBinary()|//
+//|--------------------------------------------------------------------------------|//
+//|Null........|.0...........0.............0.0..........KNullDesC....KNullDesC8....|//
+//|Int.........|.Int.........Int64.........Real.........KNullDesC....KNullDesC8....|//
+//|Int64.......|.clamp.......Int64.........Real.........KNullDesC....KNullDesC8....|//
+//|Real........|.round.......round.........Real.........KNullDesC....KNullDesC8....|//
+//|Text........|.0...........0.............0.0..........Text.........KNullDesC8....|//   
+//|Binary......|.0...........0.............0.0..........KNullDesC....Binary........|//
+//|--------------------------------------------------------------------------------|//
+//- "clamp": return KMinTInt or KMaxTInt if the value is outside the range that can //
+//  be represented by the type returned by the accessor function.                   //
+//- "round": the floating point value will be rounded up to the nearest integer.    //
+//  If the result is outside the range that can be represented by the type returned //
+//  by the accessor function, then it will be clamped.                              //
+//////////////////////////////////////////////////////////////////////////////////////
+
+/**
+TSqlBufRIterator iterator gives read-only access to the flat buffer content (RSqlBufFlat class).
+For convenience TSqlBufRIterator can represent the flat buffer fields content as one of the basic
+SQL types: TInt, TInt64, TReal, 16-bit text, 8-bit binary block.
+The text and binary fields may be accessed also as a byte stream.
+
+@see RSqlBufFlat
+
+@internalComponent
+*/
+class TSqlBufRIterator
+	{
+public:	
+	inline void Set(const RSqlBufFlat& aBuf);
+	inline TBool Next();
+	inline void MoveTo(TInt aIndex);
+	
+	inline TBool IsPresent() const;
+	inline TInt Type() const;
+	inline TInt Size() const;
+	
+	TInt Int() const;
+	TInt64 Int64() const;
+	TReal Real() const;
+	TPtrC8 Binary() const;
+	TPtrC16 Text() const;
+	
+	MStreamBuf* StreamL() const;
+
+private:
+	inline TInt AsInt() const;
+	inline TInt64 AsInt64() const;
+	inline TReal AsReal() const;
+	
+private:
+	const RSqlBufFlat::TCell*	iCurrent;
+	const RSqlBufFlat::TCell*	iBegin;
+	const RSqlBufFlat::TCell*	iEnd;
+	
+	};
+
+/**
+TSqlBufWIterator iterator gives write-only access to the flat buffer content (RSqlBufFlat class).
+For convenience, with TSqlBufWIterator flat buffer fields can be set as:
+TInt, TInt64, TReal, 16-bit text, 8-bit binary block.
+
+@see RSqlBufFlat
+
+@internalComponent
+*/
+class TSqlBufWIterator
+	{
+public:
+	inline void Set(RSqlBufFlat& aBuf);
+	inline TBool Next();
+	inline void MoveTo(TInt aIndex);
+	
+	inline void SetNull();
+	inline void SetAsNotPresent(TInt aType, TInt aLength);
+	inline TInt SetInt(TInt aValue);
+	inline TInt SetInt64(TInt64 aValue);
+	inline TInt SetReal(TReal aValue);
+	inline TInt SetBinary(const TDesC8& aValue);
+	inline TInt SetText(const TDesC16& aValue);
+	inline TInt SetZeroBlob(TInt aSize);
+	
+private:
+	RSqlBufFlat*	iBuf;
+	TInt			iIndex;
+	
+	};
+
+#include "SqlBufIterator.inl"
+
+#endif //__SQLBUFITERATOR_H__