--- a/persistentstorage/sql/SRC/Server/SqlSrvStatement.cpp Tue Aug 31 16:57:14 2010 +0300
+++ b/persistentstorage/sql/SRC/Server/SqlSrvStatement.cpp Wed Sep 01 12:39:58 2010 +0100
@@ -9,7 +9,7 @@
// Nokia Corporation - initial contribution.
//
// Contributors:
-// NTT DOCOMO, INC - Fix for defect 1915 "SQL server panics when using long column type strings"
+// NTT DOCOMO, INC - Fix for Bug 1915 "SQL server panics when using long column type strings"
//
// Description:
//
@@ -21,12 +21,7 @@
#include "SqlSrvStatement.h"
#include "SqlBufIterator.h" //TSqlBufRIterator
#include "SqlSrvResourceProfiler.h"
-#include "OstTraceDefinitions.h"
-#ifdef OST_TRACE_COMPILER_IN_USE
-#include "SqlSrvStatementTraces.h"
-#endif
-#include "SqlTraceDef.h"
-
+#include "UTraceSql.h"
//////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////// local const data ////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -142,16 +137,14 @@
*/
CSqlSrvStatement* CSqlSrvStatement::NewLC(sqlite3* aDbHandle, const TDesC16& aSqlStmt, TInt& aColumnCount, TInt& aParamCount)
{
- __SQLTRACE_INTERNALSEXPR(TPtrC sqlprnptr(aSqlStmt.Left(aSqlStmt.Length() - 1)));
- SQL_TRACE_INTERNALS(OstTraceExt2(TRACE_INTERNALS, CSQLSRVSTATEMENT_NEWLC_ENTRY, "Entry;0;CSqlSrvStatement::NewLC-16;aDbHandle=0x%X;aSqlStmt=%S", (TUint)aDbHandle, __SQLPRNSTR(sqlprnptr)));
- __ASSERT_DEBUG(aSqlStmt.Length() > 0 ? (TInt)aSqlStmt[aSqlStmt.Length() - 1] == 0 : ETrue, __SQLPANIC2(ESqlPanicBadArgument));
+ __SQLASSERT(aSqlStmt.Length() > 0 ? (TInt)aSqlStmt[aSqlStmt.Length() - 1] == 0 : ETrue, ESqlPanicBadArgument);
CSqlSrvStatement* self = new (ELeave) CSqlSrvStatement;
CleanupStack::PushL(self);
self->ConstructL(aDbHandle, aSqlStmt);
+ SYMBIAN_TRACE_SQL_EVENTS_ONLY(UTF::Printf(UTF::TTraceContext(UTF::EInternals), KSrvStmtCreated, self));
aColumnCount = self->iColumnCount;
aParamCount = self->iParamCount;
- SQL_TRACE_INTERNALS(OstTraceExt4(TRACE_INTERNALS, CSQLSRVSTATEMENT_NEWLC_EXIT, "Exit;0x%X;CSqlSrvStatement::NewLC-16;iStmtHandle=0x%X;aColumnCount=%d;aParamCount=%d", (TUint)self, (TUint)self->iStmtHandle, aColumnCount, aParamCount));
return self;
}
@@ -176,17 +169,14 @@
*/
CSqlSrvStatement* CSqlSrvStatement::NewLC(sqlite3* aDbHandle, const TDesC8& aSqlStmt, TInt& aColumnCount, TInt& aParamCount)
{
- __SQLTRACE_INTERNALSEXPR(TPtrC8 sqlprnptr(aSqlStmt.Left(aSqlStmt.Length() - 1)));
- __SQLTRACE_INTERNALSVAR(TBuf<100> des16prnbuf);
- SQL_TRACE_INTERNALS(OstTraceExt2(TRACE_INTERNALS, CSQLSRVSTATEMENT_NEWLC_ENTRY2, "Entry;0;CSqlSrvStatement::NewLC-8;aDbHandle=0x%X;aSqlStmt=%s", (TUint)aDbHandle, __SQLPRNSTR8(sqlprnptr, des16prnbuf)));
- __ASSERT_DEBUG(aSqlStmt.Length() > 0 ? (TInt)aSqlStmt[aSqlStmt.Length() - 1] == 0 : ETrue, __SQLPANIC2(ESqlPanicBadArgument));
+ __SQLASSERT(aSqlStmt.Length() > 0 ? (TInt)aSqlStmt[aSqlStmt.Length() - 1] == 0 : ETrue, ESqlPanicBadArgument);
CSqlSrvStatement* self = new (ELeave) CSqlSrvStatement;
CleanupStack::PushL(self);
self->ConstructL(aDbHandle, aSqlStmt);
+ SYMBIAN_TRACE_SQL_EVENTS_ONLY(UTF::Printf(UTF::TTraceContext(UTF::EInternals), KSrvStmtCreated, self));
aColumnCount = self->iColumnCount;
aParamCount = self->iParamCount;
- SQL_TRACE_INTERNALS(OstTraceExt4(TRACE_INTERNALS, CSQLSRVSTATEMENT_NEWLC_EXIT2, "Exit;0x%X;CSqlSrvStatement::NewLC-8;iStmtHandle=0x%X;aColumnCount=%d;aParamCount=%d", (TUint)self, (TUint)self->iStmtHandle, aColumnCount, aParamCount));
return self;
}
@@ -195,19 +185,17 @@
*/
CSqlSrvStatement::~CSqlSrvStatement()
{
- SQL_TRACE_INTERNALS(OstTraceExt2(TRACE_INTERNALS, CSQLSRVSTATEMENT_CSQLSRVSTATEMENT2_ENTRY, "Entry;0x%X;CSqlSrvStatement::~CSqlSrvStatement;iStmtHandle=0x%X", (TUint)this, (TUint)iStmtHandle));
DestroyParamBufArray();
iBufFlat.Close();
if(iStmtHandle)
{
-#ifdef SYMBIAN_USE_SQLITE_VERSION_3_6_4
- __SQLTRACE_INTERNALSEXPR(TInt scanCount = sqlite3_stmt_status(iStmtHandle, SQLITE_STMTSTATUS_FULLSCAN_STEP, ETrue));
- __SQLTRACE_INTERNALSEXPR(TInt sortCount = sqlite3_stmt_status(iStmtHandle, SQLITE_STMTSTATUS_SORT, ETrue));
- SQL_TRACE_INTERNALS(OstTraceExt3(TRACE_INTERNALS, CSQLSRVSTATEMENT_CSQLSRVSTATEMENT2, "0x%X;CSqlSrvStatement::~CSqlSrvStatement;scan count=%d;sort count=%d", (TUint)this, scanCount, sortCount));
-#endif
+#ifdef SYMBIAN_TRACE_SQL_EVENTS
+ TInt scanCount = sqlite3_stmt_status(iStmtHandle, SQLITE_STMTSTATUS_FULLSCAN_STEP, ETrue);
+ TInt sortCount = sqlite3_stmt_status(iStmtHandle, SQLITE_STMTSTATUS_SORT, ETrue);
+ SYMBIAN_TRACE_SQL_EVENTS_ONLY(UTF::Printf(UTF::TTraceContext(UTF::EInternals), KSrvStmtStatus, this, scanCount, sortCount));
+#endif
(void)sqlite3_finalize(iStmtHandle);
}
- SQL_TRACE_INTERNALS(OstTrace1(TRACE_INTERNALS, CSQLSRVSTATEMENT_CSQLSRVSTATEMENT2_EXIT, "Exit;0x%X;CSqlSrvStatement::~CSqlSrvStatement", (TUint)this));
}
/**
@@ -226,7 +214,7 @@
*/
void CSqlSrvStatement::BindL(const RSqlBufFlat& aParamBuf)
{
- __ASSERT_DEBUG(iStmtHandle != NULL, __SQLPANIC(ESqlPanicInvalidObj));
+ __SQLASSERT(iStmtHandle != NULL, ESqlPanicInvalidObj);
(void)sqlite3SymbianLastOsError();//clear last OS error
@@ -294,7 +282,7 @@
*/
const RSqlBufFlat& CSqlSrvStatement::ColumnNamesL()
{
- __ASSERT_DEBUG(iStmtHandle != NULL, __SQLPANIC(ESqlPanicInvalidObj));
+ __SQLASSERT(iStmtHandle != NULL, ESqlPanicInvalidObj);
iBufFlatType = static_cast <TSqlBufFlatType> (-1);
__SQLLEAVE_IF_ERROR(iBufFlat.SetCount(iColumnCount));
TSqlBufWIterator it;
@@ -323,7 +311,7 @@
*/
const RSqlBufFlat& CSqlSrvStatement::ParamNamesL()
{
- __ASSERT_DEBUG(iStmtHandle != NULL, __SQLPANIC(ESqlPanicInvalidObj));
+ __SQLASSERT(iStmtHandle != NULL, ESqlPanicInvalidObj);
iBufFlatType = static_cast <TSqlBufFlatType> (-1);
__SQLLEAVE_IF_ERROR(iBufFlat.SetCount(iParamCount));
TSqlBufWIterator it;
@@ -365,7 +353,7 @@
*/
const RSqlBufFlat& CSqlSrvStatement::ColumnValuesL()
{
- __ASSERT_DEBUG(iStmtHandle != NULL, __SQLPANIC(ESqlPanicInvalidObj));
+ __SQLASSERT(iStmtHandle != NULL, ESqlPanicInvalidObj);
iBufFlatType = static_cast <TSqlBufFlatType> (-1);
iBufFlat.SetCount(iColumnCount);
@@ -405,7 +393,7 @@
{//sqlite3_column_bytes16() already allocated the needed memory if a UTF8->UTF16 conversion
//had to be performed. The sqlite3_column_text16() on the next line is guaranteed to succeed.
const TUint16* text = reinterpret_cast <const TUint16*> (sqlite3_column_text16(iStmtHandle, colIdx));
- __ASSERT_DEBUG(text != NULL, __SQLPANIC(ESqlPanicInternalError));
+ __SQLASSERT(text != NULL, ESqlPanicInternalError);
__SQLLEAVE_IF_ERROR(it.SetText(TPtrC16(text, charLength)));
}
}
@@ -427,7 +415,7 @@
it.SetNull();
break;
default:
- __ASSERT_DEBUG(EFalse, __SQLPANIC(ESqlPanicInternalError));
+ __SQLASSERT(EFalse, ESqlPanicInternalError);
break;
}//end of switch(...)
}//end of - while(it.Next())
@@ -449,15 +437,15 @@
*/
TInt CSqlSrvStatement::ColumnSource(TInt aColumnIndex, TPtrC8& aColumnSource) const
{
- __ASSERT_DEBUG(iStmtHandle != NULL, __SQLPANIC(ESqlPanicInvalidObj));
+ __SQLASSERT(iStmtHandle != NULL, ESqlPanicInvalidObj);
TInt colType = sqlite3_column_type(iStmtHandle, aColumnIndex);
if(colType == SQLITE_TEXT)
{//Since the first called function after the Next() operation is always CSqlSrvStatement::ColumnValuesL(), then
//sqlite3_column_bytes16() (called from ColumnValuesL()) already allocated the needed memory if a UTF8->UTF16
//conversion had to be performed. The sqlite3_column_text16() on the next line is guaranteed to succeed.
const void* text = sqlite3_column_text16(iStmtHandle, aColumnIndex);
- __ASSERT_DEBUG(text != NULL, __SQLPANIC2(ESqlPanicInternalError));
- TInt length = sqlite3_column_bytes16(iStmtHandle, aColumnIndex);
+ __SQLASSERT(text != NULL, ESqlPanicInternalError);
+ TInt length = sqlite3_column_bytes16(iStmtHandle, aColumnIndex);
aColumnSource.Set(reinterpret_cast <const TUint8*> (text), length);
}
else if(colType == SQLITE_BLOB)
@@ -480,7 +468,7 @@
*/
void CSqlSrvStatement::DoCommonConstructL()
{
- __ASSERT_DEBUG(iStmtHandle != NULL, __SQLPANIC(ESqlPanicInvalidObj));
+ __SQLASSERT(iStmtHandle != NULL, ESqlPanicInvalidObj);
iColumnCount = sqlite3_column_count(iStmtHandle);
iParamCount = sqlite3_bind_parameter_count(iStmtHandle);
__SQLLEAVE_IF_ERROR(iBufFlat.SetCount(Max(iColumnCount, iParamCount)));
@@ -519,10 +507,10 @@
*/
void CSqlSrvStatement::BindParamBufL(TInt aParamIndex)
{
- __ASSERT_DEBUG(iStmtHandle != NULL, __SQLPANIC(ESqlPanicInvalidObj));
- __ASSERT_DEBUG(aParamIndex >= 0 && aParamIndex < sqlite3_bind_parameter_count(iStmtHandle), __SQLPANIC(ESqlPanicBadArgument));
- __ASSERT_DEBUG(aParamIndex < iParamBufArray.Count(), __SQLPANIC(ESqlPanicBadArgument));
- __ASSERT_DEBUG(iParamBufArray[aParamIndex] != NULL, __SQLPANIC(ESqlPanicBadArgument));
+ __SQLASSERT(iStmtHandle != NULL, ESqlPanicInvalidObj);
+ __SQLASSERT(aParamIndex >= 0 && aParamIndex < sqlite3_bind_parameter_count(iStmtHandle), ESqlPanicBadArgument);
+ __SQLASSERT(aParamIndex < iParamBufArray.Count(), ESqlPanicBadArgument);
+ __SQLASSERT(iParamBufArray[aParamIndex] != NULL, ESqlPanicBadArgument);
(void)sqlite3SymbianLastOsError();//clear last OS error
//Bind the parameter value.
//SQLITE_STATIC is used as an argument, because the text/blob data will be kept and can be used by the next bind call
@@ -558,8 +546,8 @@
*/
TInt CSqlSrvStatement::ColumnInt(TInt aColIdx) const
{
- __ASSERT_DEBUG(iStmtHandle != NULL, __SQLPANIC(ESqlPanicInvalidObj));
- __ASSERT_DEBUG((TUint)aColIdx < iColumnCount, __SQLPANIC(ESqlPanicBadArgument));
+ __SQLASSERT(iStmtHandle != NULL, ESqlPanicInvalidObj);
+ __SQLASSERT((TUint)aColIdx < iColumnCount, ESqlPanicBadArgument);
TInt colType = sqlite3_column_type(iStmtHandle, aColIdx);
switch(colType)
{
@@ -598,8 +586,8 @@
*/
TInt64 CSqlSrvStatement::ColumnInt64(TInt aColIdx) const
{
- __ASSERT_DEBUG(iStmtHandle != NULL, __SQLPANIC(ESqlPanicInvalidObj));
- __ASSERT_DEBUG((TUint)aColIdx < iColumnCount, __SQLPANIC(ESqlPanicBadArgument));
+ __SQLASSERT(iStmtHandle != NULL, ESqlPanicInvalidObj);
+ __SQLASSERT((TUint)aColIdx < iColumnCount, ESqlPanicBadArgument);
TInt colType = sqlite3_column_type(iStmtHandle, aColIdx);
switch(colType)
{
@@ -635,8 +623,8 @@
*/
TReal CSqlSrvStatement::ColumnReal(TInt aColIdx) const
{
- __ASSERT_DEBUG(iStmtHandle != NULL, __SQLPANIC(ESqlPanicInvalidObj));
- __ASSERT_DEBUG((TUint)aColIdx < iColumnCount, __SQLPANIC(ESqlPanicBadArgument));
+ __SQLASSERT(iStmtHandle != NULL, ESqlPanicInvalidObj);
+ __SQLASSERT((TUint)aColIdx < iColumnCount, ESqlPanicBadArgument);
TInt colType = sqlite3_column_type(iStmtHandle, aColIdx);
switch(colType)
{
@@ -669,8 +657,8 @@
*/
TPtrC CSqlSrvStatement::ColumnTextL(TInt aColIdx) const
{
- __ASSERT_DEBUG(iStmtHandle != NULL, __SQLPANIC(ESqlPanicInvalidObj));
- __ASSERT_DEBUG((TUint)aColIdx < iColumnCount, __SQLPANIC(ESqlPanicBadArgument));
+ __SQLASSERT(iStmtHandle != NULL, ESqlPanicInvalidObj);
+ __SQLASSERT((TUint)aColIdx < iColumnCount, ESqlPanicBadArgument);
TPtrC res;
TInt colType = sqlite3_column_type(iStmtHandle, aColIdx);
if(colType == SQLITE_TEXT)
@@ -685,8 +673,8 @@
//sqlite3_column_bytes16() already allocated the needed memory if a UTF8->UTF16 conversion
//had to be performed. The sqlite3_column_text16() on the next line is guaranteed to succeed.
const TUint16* text = reinterpret_cast <const TUint16*> (sqlite3_column_text16(iStmtHandle, aColIdx));
- __ASSERT_DEBUG(text != NULL, __SQLPANIC(ESqlPanicInternalError));
- res.Set(text, charLength);
+ __SQLASSERT(text != NULL, ESqlPanicInternalError);
+ res.Set(text, charLength);
}
return res;
}
@@ -704,8 +692,8 @@
*/
TPtrC8 CSqlSrvStatement::ColumnBinary(TInt aColIdx) const
{
- __ASSERT_DEBUG(iStmtHandle != NULL, __SQLPANIC(ESqlPanicInvalidObj));
- __ASSERT_DEBUG((TUint)aColIdx < iColumnCount, __SQLPANIC(ESqlPanicBadArgument));
+ __SQLASSERT(iStmtHandle != NULL, ESqlPanicInvalidObj);
+ __SQLASSERT((TUint)aColIdx < iColumnCount, ESqlPanicBadArgument);
TPtrC8 res;
TInt colType = sqlite3_column_type(iStmtHandle, aColIdx);
if(colType == SQLITE_BLOB)
@@ -728,8 +716,8 @@
*/
const RSqlBufFlat& CSqlSrvStatement::GetDeclColumnTypesL()
{
- __ASSERT_DEBUG(iStmtHandle != NULL, __SQLPANIC(ESqlPanicInvalidObj));
- iBufFlatType = static_cast <TSqlBufFlatType> (-1);
+ __SQLASSERT(iStmtHandle != NULL, ESqlPanicInvalidObj);
+ iBufFlatType = static_cast <TSqlBufFlatType> (-1);
__SQLLEAVE_IF_ERROR(iBufFlat.SetCount(iColumnCount));
TSqlBufWIterator it;
it.Set(iBufFlat);
@@ -773,12 +761,12 @@
HSqlSrvStmtParamBuf* CSqlSrvStatement::GetParamBufL(TInt aParamIndex, HSqlSrvStmtParamBuf::TDataType aDataType,
HSqlSrvStmtParamBuf::TBufType aBufType)
{
- __ASSERT_DEBUG(aParamIndex >= 0 && aParamIndex < sqlite3_bind_parameter_count(iStmtHandle), __SQLPANIC(ESqlPanicBadArgument));
+ __SQLASSERT(aParamIndex >= 0 && aParamIndex < sqlite3_bind_parameter_count(iStmtHandle), ESqlPanicBadArgument);
ExtendParamBufArrayL(aParamIndex);
HSqlSrvStmtParamBuf*& paramBuf = iParamBufArray[aParamIndex];
if(paramBuf)
{//Reset and reuse the existing buffer
- __ASSERT_DEBUG(paramBuf->ParamIndex() == aParamIndex, __SQLPANIC(ESqlPanicInternalError));
+ __SQLASSERT(paramBuf->ParamIndex() == aParamIndex, ESqlPanicInternalError);
paramBuf->Reset(aDataType, aBufType);
}
else
@@ -801,8 +789,8 @@
*/
void CSqlSrvStatement::ExtendParamBufArrayL(TInt aParamIndex)
{
- __ASSERT_DEBUG(iStmtHandle != NULL, __SQLPANIC(ESqlPanicInvalidObj));
- __ASSERT_DEBUG(aParamIndex >= 0 && aParamIndex < sqlite3_bind_parameter_count(iStmtHandle), __SQLPANIC(ESqlPanicBadArgument));
+ __SQLASSERT(iStmtHandle != NULL, ESqlPanicInvalidObj);
+ __SQLASSERT(aParamIndex >= 0 && aParamIndex < sqlite3_bind_parameter_count(iStmtHandle), ESqlPanicBadArgument);
TInt ext = aParamIndex - iParamBufArray.Count() + 1;
while(ext-- > 0)
{
@@ -827,8 +815,8 @@
*/
TPtrC8 CSqlSrvStatement::CopyAndStoreParamL(TInt aParamIndex, HSqlSrvStmtParamBuf::TDataType aDataType, const TDesC8& aParamValue)
{
- __ASSERT_DEBUG(iStmtHandle != NULL, __SQLPANIC(ESqlPanicInvalidObj));
- __ASSERT_DEBUG(aParamIndex >= 0 && aParamIndex < sqlite3_bind_parameter_count(iStmtHandle), __SQLPANIC(ESqlPanicBadArgument));
+ __SQLASSERT(iStmtHandle != NULL, ESqlPanicInvalidObj);
+ __SQLASSERT(aParamIndex >= 0 && aParamIndex < sqlite3_bind_parameter_count(iStmtHandle), ESqlPanicBadArgument);
HSqlSrvStmtParamBuf* paramBuf = GetParamBufL(aParamIndex, aDataType, HSqlSrvStmtParamBuf::EBufSimpleBind);
return paramBuf->SetDataL(aParamValue);
}