diff -r 000000000000 -r 08ec8eefde2f persistentstorage/sql/SRC/Client/SqlScalarFullSelect.cpp --- /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 (&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 (&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 (&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 (const_cast (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 (&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 (&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 (&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 (const_cast (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); + }