persistentstorage/sql/SRC/Client/SqlScalarFullSelect.cpp
changeset 0 08ec8eefde2f
child 23 26645d81f48d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/persistentstorage/sql/SRC/Client/SqlScalarFullSelect.cpp	Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,309 @@
+// 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:
+//
+
+#include "SqlPanic.h"			//ESqlPanicInvalidObj, ESqlPanicObjExists
+#include "SqlDatabaseImpl.h"	//CSqlDatabaseImpl
+
+/**
+Returns a reference to the implementation object of RSqlDatabase - CSqlDatabaseImpl.
+
+@panic SqlDb 2 Create() or Open() has not previously been called on this RSqlDatabase object.
+
+@internalComponent
+*/
+inline CSqlDatabaseImpl& TSqlScalarFullSelectQuery::Impl() const
+	{
+	__SQLASSERT_ALWAYS(iDatabaseImpl != NULL, ESqlPanicInvalidObj);
+	return *iDatabaseImpl;	
+	}
+
+/**
+Initializes TSqlScalarFullSelectQuery data members with default values.
+*/
+EXPORT_C TSqlScalarFullSelectQuery::TSqlScalarFullSelectQuery() :
+	iDatabaseImpl(NULL)
+	{
+	}
+	
+/**
+Initializes TSqlScalarFullSelectQuery object.
+
+@param aDatabase	A reference to the RSqlDatabase object that represents 
+                    the database on which scalar fullselect queries will be executed.
+*/
+EXPORT_C TSqlScalarFullSelectQuery::TSqlScalarFullSelectQuery(RSqlDatabase& aDatabase) :
+	iDatabaseImpl(&aDatabase.Impl())
+	{
+	}
+	
+/**
+Initializes/reinitializes TSqlScalarFullSelectQuery object.
+
+@param aDatabase	A reference to the RSqlDatabase object that represents 
+                    the database on which scalar fullselect queries will be executed.
+*/
+EXPORT_C void TSqlScalarFullSelectQuery::SetDatabase(RSqlDatabase& aDatabase)
+	{
+	SQLUTRACE_PROFILER(this);
+	iDatabaseImpl = &aDatabase.Impl();
+	}
+	
+/**
+Executes a SELECT query which is expected to return a single row consisting of
+a single 32-bit integer value and returns that value.
+
+@param aSqlStmt 16-bit SELECT sql query
+
+@return 32-bit integer column value.
+
+@leave  KErrNotFound, If there is no record,
+        The function may leave with database specific errors categorised as ESqlDbError and
+  		other system-wide error codes.
+*/
+EXPORT_C TInt TSqlScalarFullSelectQuery::SelectIntL(const TDesC& aSqlStmt)
+	{
+	SQLUTRACE_PROFILER(this);
+	SYMBIAN_TRACE_SQL_EVENTS_ONLY(UTF::Printf(UTF::TTraceContext(UTF::EInternals), KStrParam16, 1, &aSqlStmt));
+
+	TInt res;
+	TPtr8 ptr(reinterpret_cast <TUint8*> (&res), sizeof(res));
+	(void)Impl().ExecScalarFullSelectL(aSqlStmt, ESqlInt, ptr);
+	return res;
+	}
+	
+/**
+Executes a SELECT query which is expected to return a single row consisting of
+a single 64-bit integer value and returns that value.
+
+@param aSqlStmt 16-bit SELECT sql query
+
+@return 64-bit integer column value.
+
+@leave  KErrNotFound, If there is no record,
+        The function may leave with database specific errors categorised as ESqlDbError and
+  		other system-wide error codes.
+*/
+EXPORT_C TInt64 TSqlScalarFullSelectQuery::SelectInt64L(const TDesC& aSqlStmt)
+	{
+	SQLUTRACE_PROFILER(this);
+	SYMBIAN_TRACE_SQL_EVENTS_ONLY(UTF::Printf(UTF::TTraceContext(UTF::EInternals), KStrParam16, 1, &aSqlStmt));
+
+	TInt64 res;
+	TPtr8 ptr(reinterpret_cast <TUint8*> (&res), sizeof(res));
+	(void)Impl().ExecScalarFullSelectL(aSqlStmt, ESqlInt64, ptr);
+	return res;
+	}
+	
+/**
+Executes a SELECT query which is expected to return a single row consisting of
+a single real value and returns that value.
+
+@param aSqlStmt 16-bit SELECT sql query
+
+@return Real column value.
+
+@leave  KErrNotFound, If there is no record,
+        The function may leave with database specific errors categorised as ESqlDbError and
+  		other system-wide error codes.
+*/
+EXPORT_C TReal TSqlScalarFullSelectQuery::SelectRealL(const TDesC& aSqlStmt)
+	{
+	SQLUTRACE_PROFILER(this);
+	SYMBIAN_TRACE_SQL_EVENTS_ONLY(UTF::Printf(UTF::TTraceContext(UTF::EInternals), KStrParam16, 1, &aSqlStmt));
+
+	TReal res;
+	TPtr8 ptr(reinterpret_cast <TUint8*> (&res), sizeof(res));
+	(void)Impl().ExecScalarFullSelectL(aSqlStmt, ESqlReal, ptr);
+	return res;
+	}
+	
+/**
+Executes a SELECT query which is expected to return a single row consisting of
+a single text value and copies that value to the place refered by aDest parameter.
+
+If the destination buffer is not big enough, the function will copy as much data as 
+possible and will return positive value - the character length of the text column.
+
+@param aSqlStmt 16-bit SELECT sql query
+@param aDest Refers to the place where the column data will be copied
+
+@return KErrNone, if the function completes successfully,
+		Positive value, The text column value length in characters, in case if the receiving buffer 
+						is not big enough.
+
+@leave  KErrNotFound, If there is no record,
+        The function may leave with database specific errors categorised as ESqlDbError and
+  		other system-wide error codes.
+*/
+EXPORT_C TInt TSqlScalarFullSelectQuery::SelectTextL(const TDesC& aSqlStmt, TDes& aDest)
+	{
+	SQLUTRACE_PROFILER(this);
+	SYMBIAN_TRACE_SQL_EVENTS_ONLY(UTF::Printf(UTF::TTraceContext(UTF::EInternals), KStrParam16, 1, &aSqlStmt));
+	
+	TPtr8 ptr(reinterpret_cast <TUint8*> (const_cast <TUint16*> (aDest.Ptr())), aDest.MaxLength() * sizeof(TUint16));
+	TInt err = Impl().ExecScalarFullSelectL(aSqlStmt, ESqlText, ptr);
+	aDest.SetLength(ptr.Length() / sizeof(TUint16));
+	return err;
+	}
+	
+/**
+Executes a SELECT query which is expected to return a single row consisting of
+a single binary value and copies that value to the place refered by aDest parameter.
+
+If the destination buffer is not big enough, the function will copy as much data as 
+possible and will return positive value - the byte length of the binary column.
+
+@param aSqlStmt 16-bit SELECT sql query
+@param aDest Refers to the place where the column data will be copied
+
+@return KErrNone, if the function completes successfully,
+		Positive value, The binary column value length in bytes, in case if the receiving buffer 
+						is not big enough.
+
+@leave  KErrNotFound, If there is no record,
+        The function may leave with database specific errors categorised as ESqlDbError and
+  		other system-wide error codes.
+*/
+EXPORT_C TInt TSqlScalarFullSelectQuery::SelectBinaryL(const TDesC& aSqlStmt, TDes8& aDest)
+	{
+	SQLUTRACE_PROFILER(this);
+	SYMBIAN_TRACE_SQL_EVENTS_ONLY(UTF::Printf(UTF::TTraceContext(UTF::EInternals), KStrParam16, 1, &aSqlStmt));
+	
+	return Impl().ExecScalarFullSelectL(aSqlStmt, ESqlBinary, aDest);
+	}
+	
+/**
+Executes a SELECT query which is expected to return a single row consisting of
+a single 32-bit integer value and returns that value.
+
+@param aSqlStmt 8-bit SELECT sql query
+
+@return 32-bit integer column value.
+
+@leave  KErrNotFound, If there is no record,
+        The function may leave with database specific errors categorised as ESqlDbError and
+  		other system-wide error codes.
+*/
+EXPORT_C TInt TSqlScalarFullSelectQuery::SelectIntL(const TDesC8& aSqlStmt)
+	{
+	SQLUTRACE_PROFILER(this);	
+	SYMBIAN_TRACE_SQL_EVENTS_ONLY(UTF::Printf(UTF::TTraceContext(UTF::EInternals), KStrParam, 1, &aSqlStmt));
+
+	TInt res;
+	TPtr8 ptr(reinterpret_cast <TUint8*> (&res), sizeof(res));
+	(void)Impl().ExecScalarFullSelectL(aSqlStmt, ESqlInt, ptr);
+	return res;
+	}
+	
+/**
+Executes a SELECT query which is expected to return a single row consisting of
+a single 64-bit integer value and returns that value.
+
+@param aSqlStmt 8-bit SELECT sql query
+
+@return 64-bit integer column value.
+
+@leave  KErrNotFound, If there is no record,
+        The function may leave with database specific errors categorised as ESqlDbError and
+  		other system-wide error codes.
+*/
+EXPORT_C TInt64 TSqlScalarFullSelectQuery::SelectInt64L(const TDesC8& aSqlStmt)
+	{
+	SQLUTRACE_PROFILER(this);
+	SYMBIAN_TRACE_SQL_EVENTS_ONLY(UTF::Printf(UTF::TTraceContext(UTF::EInternals), KStrParam, 1, &aSqlStmt));
+
+	TInt64 res;
+	TPtr8 ptr(reinterpret_cast <TUint8*> (&res), sizeof(res));
+	(void)Impl().ExecScalarFullSelectL(aSqlStmt, ESqlInt64, ptr);
+	return res;
+	}
+	
+/**
+Executes a SELECT query which is expected to return a single row consisting of
+a single real value and returns that value.
+
+@param aSqlStmt 8-bit SELECT sql query
+
+@return Real column value.
+
+@leave  KErrNotFound, If there is no record,
+        The function may leave with database specific errors categorised as ESqlDbError and
+  		other system-wide error codes.
+*/
+EXPORT_C TReal TSqlScalarFullSelectQuery::SelectRealL(const TDesC8& aSqlStmt)
+	{
+	SQLUTRACE_PROFILER(this);
+	SYMBIAN_TRACE_SQL_EVENTS_ONLY(UTF::Printf(UTF::TTraceContext(UTF::EInternals), KStrParam, 1, &aSqlStmt));
+	
+	TReal res;
+	TPtr8 ptr(reinterpret_cast <TUint8*> (&res), sizeof(res));
+	(void)Impl().ExecScalarFullSelectL(aSqlStmt, ESqlReal, ptr);
+	return res;
+	}
+	
+/**
+Executes a SELECT query which is expected to return a single row consisting of
+a single text value and copies that value to the place refered by aDest parameter.
+
+If the destination buffer is not big enough, the function will copy as much data as 
+possible and will return positive value - the character length of the text column.
+
+@param aSqlStmt 8-bit SELECT sql query
+@param aDest Refers to the place where the column data will be copied
+
+@return KErrNone, if the function completes successfully,
+		Positive value, The text column value length in characters, in case if the receiving buffer 
+						is not big enough.
+
+@leave  KErrNotFound, If there is no record,
+        The function may leave with database specific errors categorised as ESqlDbError and
+  		other system-wide error codes.
+*/
+EXPORT_C TInt TSqlScalarFullSelectQuery::SelectTextL(const TDesC8& aSqlStmt, TDes& aDest)
+	{
+	SQLUTRACE_PROFILER(this);
+	SYMBIAN_TRACE_SQL_EVENTS_ONLY(UTF::Printf(UTF::TTraceContext(UTF::EInternals), KStrParam, 1, &aSqlStmt));
+
+	TPtr8 ptr(reinterpret_cast <TUint8*> (const_cast <TUint16*> (aDest.Ptr())), aDest.MaxLength() * sizeof(TUint16));
+	TInt err = Impl().ExecScalarFullSelectL(aSqlStmt, ESqlText, ptr);
+	aDest.SetLength(ptr.Length() / sizeof(TUint16));
+	return err;
+	}
+	
+/**
+Executes a SELECT query which is expected to return a single row consisting of
+a single binary value and copies that value to the place refered by aDest parameter.
+
+If the destination buffer is not big enough, the function will copy as much data as 
+possible and will return positive value - the character length of the text column.
+
+@param aSqlStmt 8-bit SELECT sql query
+@param aDest Refers to the place where the column data will be copied
+
+@return KErrNone, if the function completes successfully,
+		Positive value, The binary column value length in bytes, in case if the receiving buffer 
+						is not big enough.
+
+@leave  KErrNotFound, If there is no record,
+        The function may leave with database specific errors categorised as ESqlDbError and
+  		other system-wide error codes.
+*/
+EXPORT_C TInt TSqlScalarFullSelectQuery::SelectBinaryL(const TDesC8& aSqlStmt, TDes8& aDest)
+	{
+	SQLUTRACE_PROFILER(this);
+	SYMBIAN_TRACE_SQL_EVENTS_ONLY(UTF::Printf(UTF::TTraceContext(UTF::EInternals), KStrParam, 1, &aSqlStmt));
+	
+	return Impl().ExecScalarFullSelectL(aSqlStmt, ESqlBinary, aDest);
+	}