diff -r 26645d81f48d -r cc28652e0254 persistentstorage/sql/SRC/Server/SqlSrvStatement.cpp --- 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 (-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 (-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 (-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 (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 (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 (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 (-1); + __SQLASSERT(iStmtHandle != NULL, ESqlPanicInvalidObj); + iBufFlatType = static_cast (-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); }