Various message logging and async I/O changes.

git-svn-id: https://svn.code.sf.net/p/flaim/code/trunk@528 0109f412-320b-0410-ab79-c3e0c5ffbbe6
This commit is contained in:
ahodgkinson
2006-06-06 22:49:49 +00:00
parent 6e5b224a5f
commit d64d1bc5c0
15 changed files with 126 additions and 1589 deletions

View File

@@ -25,41 +25,41 @@
#include "flaimsys.h"
FSTATIC void flmLogIndent(
F_LogMessage * pLogMsg,
FLMUINT uiIndent);
IF_LogMessageClient * pLogMsg,
FLMUINT uiIndent);
FSTATIC void flmLogOperator(
F_LogMessage * pLogMsg,
QTYPES eOperator,
FLMBOOL bEndLine);
IF_LogMessageClient * pLogMsg,
QTYPES eOperator,
FLMBOOL bEndLine);
FSTATIC void flmLogBinary(
F_LogMessage * pLogMsg,
FLMBYTE * pucBuf,
FLMUINT uiBufLen);
IF_LogMessageClient * pLogMsg,
FLMBYTE * pucBuf,
FLMUINT uiBufLen);
FSTATIC void flmLogText(
F_LogMessage * pLogMsg,
const char * pucBuf,
FLMUINT uiBufLen);
IF_LogMessageClient * pLogMsg,
const char * pucBuf,
FLMUINT uiBufLen);
FSTATIC void flmLogPredicate(
F_LogMessage * pLogMsg,
FLMUINT uiIndent,
FQNODE * pQNode);
IF_LogMessageClient * pLogMsg,
FLMUINT uiIndent,
FQNODE * pQNode);
FSTATIC void flmLogSubQuery(
F_LogMessage * pLogMsg,
FLMUINT uiIndent,
QTYPES eParentOp,
SUBQUERY * pSubQuery);
IF_LogMessageClient * pLogMsg,
FLMUINT uiIndent,
QTYPES eParentOp,
SUBQUERY * pSubQuery);
/****************************************************************************
Desc: This routine indents in the log.
****************************************************************************/
FSTATIC void flmLogIndent(
F_LogMessage * pLogMsg,
FLMUINT uiIndent)
IF_LogMessageClient * pLogMsg,
FLMUINT uiIndent)
{
char szIndent [100];
@@ -67,7 +67,7 @@ FSTATIC void flmLogIndent(
{
f_memset( szIndent, ' ', uiIndent);
szIndent [uiIndent] = 0;
pLogMsg->setColor( FLM_LIGHTGRAY, FLM_BLACK);
pLogMsg->changeColor( FLM_LIGHTGRAY, FLM_BLACK);
pLogMsg->appendString( szIndent);
}
}
@@ -76,10 +76,9 @@ FSTATIC void flmLogIndent(
Desc: This routine logs an operator
****************************************************************************/
FSTATIC void flmLogOperator(
F_LogMessage * pLogMsg,
QTYPES eOperator,
FLMBOOL bEndLine
)
IF_LogMessageClient * pLogMsg,
QTYPES eOperator,
FLMBOOL bEndLine)
{
const char * pszOperator;
@@ -163,11 +162,11 @@ FSTATIC void flmLogOperator(
pLogMsg->pushBackgroundColor();
if (eOperator == FLM_LPAREN_OP || eOperator == FLM_RPAREN_OP)
{
pLogMsg->setColor( FLM_CYAN, FLM_BLACK);
pLogMsg->changeColor( FLM_CYAN, FLM_BLACK);
}
else
{
pLogMsg->setColor( FLM_BLUE, FLM_LIGHTGRAY);
pLogMsg->changeColor( FLM_BLUE, FLM_LIGHTGRAY);
}
pLogMsg->appendString( pszOperator);
@@ -202,9 +201,9 @@ FINLINE void flmFormatByteToHex(
Desc: This routine logs a buffer of binary bytes as ASCII hex.
****************************************************************************/
FSTATIC void flmLogBinary(
F_LogMessage * pLogMsg,
FLMBYTE * pucBuf,
FLMUINT uiBufLen)
IF_LogMessageClient * pLogMsg,
FLMBYTE * pucBuf,
FLMUINT uiBufLen)
{
FLMUINT uiLoop;
FLMUINT uiOffset;
@@ -303,9 +302,9 @@ FSTATIC void flmLogBinary(
Desc: This routine logs text data.
****************************************************************************/
FSTATIC void flmLogText(
F_LogMessage * pLogMsg,
const char * pucBuf,
FLMUINT uiBufLen)
IF_LogMessageClient * pLogMsg,
const char * pucBuf,
FLMUINT uiBufLen)
{
FLMUINT uiLoop;
FLMUINT uiOffset;
@@ -412,10 +411,9 @@ FSTATIC void flmLogText(
Desc: This routine logs the query criteria for a cursor.
****************************************************************************/
FSTATIC void flmLogPredicate(
F_LogMessage * pLogMsg,
FLMUINT uiIndent,
FQNODE * pQNode
)
IF_LogMessageClient * pLogMsg,
FLMUINT uiIndent,
FQNODE * pQNode)
{
FLMUINT uiNestLevel = 0;
QTYPES eCurrentOp;
@@ -441,20 +439,20 @@ FSTATIC void flmLogPredicate(
if (IS_VAL( eCurrentOp))
{
pLogMsg->setColor( FLM_WHITE, FLM_BLACK);
pLogMsg->changeColor( FLM_WHITE, FLM_BLACK);
switch (eCurrentOp)
{
case FLM_BOOL_VAL:
flmLogPrintf( pLogMsg, "%u",
f_logPrintf( pLogMsg, "%u",
(unsigned)pQNode->pQAtom->val.uiBool);
break;
case FLM_REC_PTR_VAL:
case FLM_UINT32_VAL:
flmLogPrintf( pLogMsg, "%u",
f_logPrintf( pLogMsg, "%u",
(unsigned)pQNode->pQAtom->val.uiVal);
break;
case FLM_INT32_VAL:
flmLogPrintf( pLogMsg, "%d",
f_logPrintf( pLogMsg, "%d",
(int)pQNode->pQAtom->val.iVal);
break;
case FLM_BINARY_VAL:
@@ -480,7 +478,7 @@ FSTATIC void flmLogPredicate(
FLMUINT uiCnt;
flmAssert( IS_FIELD( eCurrentOp));
pLogMsg->setColor( FLM_YELLOW, FLM_BLACK);
pLogMsg->changeColor( FLM_YELLOW, FLM_BLACK);
pLogMsg->appendString( "FLD:");
// Fields are from child to parent order - must count fields
@@ -496,11 +494,11 @@ FSTATIC void flmLogPredicate(
uiCnt--;
if (uiCnt)
{
flmLogPrintf( pLogMsg, "%u.", (unsigned)puiFldPath [uiCnt]);
f_logPrintf( pLogMsg, "%u.", (unsigned)puiFldPath [uiCnt]);
}
else
{
flmLogPrintf( pLogMsg, "%u", (unsigned)puiFldPath [uiCnt]);
f_logPrintf( pLogMsg, "%u", (unsigned)puiFldPath [uiCnt]);
}
}
}
@@ -540,11 +538,10 @@ Exit:
Desc: This routine logs the query criteria for a cursor.
****************************************************************************/
FSTATIC void flmLogSubQuery(
F_LogMessage * pLogMsg,
FLMUINT uiIndent,
QTYPES eParentOp,
SUBQUERY * pSubQuery
)
IF_LogMessageClient * pLogMsg,
FLMUINT uiIndent,
QTYPES eParentOp,
SUBQUERY * pSubQuery)
{
FQNODE * pQNode;
QTYPES eCurrentOp;
@@ -560,7 +557,7 @@ FSTATIC void flmLogSubQuery(
{
flmLogIndent( pLogMsg, uiIndent);
flmLogOperator( pLogMsg, FLM_LPAREN_OP, FALSE);
pLogMsg->setColor( FLM_WHITE, FLM_BLACK);
pLogMsg->changeColor( FLM_WHITE, FLM_BLACK);
pLogMsg->appendString( "<empty>");
flmLogOperator( pLogMsg, FLM_RPAREN_OP, TRUE);
goto Output_Opt_Info;
@@ -603,13 +600,13 @@ FSTATIC void flmLogSubQuery(
flmLogOperator( pLogMsg, FLM_LPAREN_OP, FALSE);
if (hCursor == HFCURSOR_NULL)
{
pLogMsg->setColor( FLM_WHITE, FLM_BLACK);
pLogMsg->changeColor( FLM_WHITE, FLM_BLACK);
pLogMsg->appendString( " [EmbeddedPredicate] ");
flmLogOperator( pLogMsg, FLM_RPAREN_OP, TRUE);
}
else
{
pLogMsg->setColor( FLM_LIGHTGRAY, FLM_BLACK);
pLogMsg->changeColor( FLM_LIGHTGRAY, FLM_BLACK);
pLogMsg->appendString( " [BeginEmbedded");
if (pSubQuery->OptInfo.eOptType == QOPT_USING_PREDICATE &&
pSubQuery->pPredicate == pQNode->pQAtom->val.pPredicate)
@@ -627,7 +624,7 @@ FSTATIC void flmLogSubQuery(
uiIndent -= 2;
flmLogIndent( pLogMsg, uiIndent);
flmLogOperator( pLogMsg, FLM_RPAREN_OP, FALSE);
pLogMsg->setColor( FLM_LIGHTGRAY, FLM_BLACK);
pLogMsg->changeColor( FLM_LIGHTGRAY, FLM_BLACK);
pLogMsg->appendString( " [EndEmbedded]");
pLogMsg->newline();
}
@@ -684,26 +681,26 @@ Output_Opt_Info:
switch (pSubQuery->OptInfo.eOptType)
{
case QOPT_USING_INDEX:
flmLogPrintf( pLogMsg, F_WHITE "UsingIX=" F_YELLOW "%u",
f_logPrintf( pLogMsg, F_WHITE "UsingIX=" F_YELLOW "%u",
pSubQuery->OptInfo.uiIxNum);
flmLogPrintf( pLogMsg, F_LIGHTGRAY ", KeyMatch=");
f_logPrintf( pLogMsg, F_LIGHTGRAY ", KeyMatch=");
if (pSubQuery->OptInfo.bDoKeyMatch)
{
flmLogPrintf( pLogMsg, F_GREEN "YES");
f_logPrintf( pLogMsg, F_GREEN "YES");
}
else
{
flmLogPrintf( pLogMsg, F_RED "NO");
f_logPrintf( pLogMsg, F_RED "NO");
}
flmLogPrintf( pLogMsg, F_LIGHTGRAY ", RecMatch=");
f_logPrintf( pLogMsg, F_LIGHTGRAY ", RecMatch=");
if (pSubQuery->OptInfo.bDoRecMatch)
{
flmLogPrintf( pLogMsg, F_GREEN "YES");
f_logPrintf( pLogMsg, F_GREEN "YES");
}
else
{
flmLogPrintf( pLogMsg, F_RED "NO");
f_logPrintf( pLogMsg, F_RED "NO");
}
pucFromKey = NULL;
@@ -716,24 +713,24 @@ Output_Opt_Info:
// Show the from key
flmLogPrintf( pLogMsg,
f_logPrintf( pLogMsg,
F_LIGHTGRAY ", FromKeyLen=" F_YELLOW "%u"
F_LIGHTGRAY ", FromKey=(",
uiFromKeyLen);
if (uiFromKeyLen)
{
pLogMsg->setColor( FLM_YELLOW, FLM_BLACK);
pLogMsg->changeColor( FLM_YELLOW, FLM_BLACK);
flmLogBinary( pLogMsg, pucFromKey, uiFromKeyLen);
}
else
{
flmLogPrintf( pLogMsg, F_YELLOW "<empty>");
f_logPrintf( pLogMsg, F_YELLOW "<empty>");
}
flmLogPrintf( pLogMsg, F_LIGHTGRAY ")");
f_logPrintf( pLogMsg, F_LIGHTGRAY ")");
// Show the until key.
flmLogPrintf( pLogMsg,
f_logPrintf( pLogMsg,
F_LIGHTGRAY ", UntilKeyLen=" F_YELLOW "%u"
F_LIGHTGRAY ", UntilExcl=" F_YELLOW "%s"
F_LIGHTGRAY ", UntilKey=(",
@@ -743,68 +740,68 @@ Output_Opt_Info:
: "No"));
if (uiUntilKeyLen)
{
pLogMsg->setColor( FLM_YELLOW, FLM_BLACK);
pLogMsg->changeColor( FLM_YELLOW, FLM_BLACK);
flmLogBinary( pLogMsg, pucUntilKey, uiUntilKeyLen);
}
else
{
flmLogPrintf( pLogMsg, F_YELLOW "<empty>");
f_logPrintf( pLogMsg, F_YELLOW "<empty>");
}
flmLogPrintf( pLogMsg, F_LIGHTGRAY ")");
f_logPrintf( pLogMsg, F_LIGHTGRAY ")");
f_free( &pucFromKey);
f_free( &pucUntilKey);
}
break;
case QOPT_USING_PREDICATE:
flmLogPrintf( pLogMsg, F_WHITE "Using Embedded Predicate");
f_logPrintf( pLogMsg, F_WHITE "Using Embedded Predicate");
break;
case QOPT_SINGLE_RECORD_READ:
flmLogPrintf( pLogMsg, F_WHITE "Single Record Read, DRN: "
f_logPrintf( pLogMsg, F_WHITE "Single Record Read, DRN: "
F_YELLOW "%u", pSubQuery->OptInfo.uiDrn);
break;
case QOPT_PARTIAL_CONTAINER_SCAN:
flmLogPrintf( pLogMsg, F_WHITE "Partial Container Scan");
f_logPrintf( pLogMsg, F_WHITE "Partial Container Scan");
//VISIT: Output from and until DRNs - need a method from
//pSubQuery->pFSDataCursor to return them.
break;
case QOPT_FULL_CONTAINER_SCAN:
flmLogPrintf( pLogMsg, F_WHITE "Full Container Scan");
f_logPrintf( pLogMsg, F_WHITE "Full Container Scan");
break;
default:
flmLogPrintf( pLogMsg, F_WHITE "Unknown optimization");
f_logPrintf( pLogMsg, F_WHITE "Unknown optimization");
break;
}
flmLogPrintf( pLogMsg, F_LIGHTGRAY "}\n");
f_logPrintf( pLogMsg, F_LIGHTGRAY "}\n");
flmLogIndent( pLogMsg, uiIndent);
pLogMsg->appendString( "{Stats: ");
flmLogPrintf( pLogMsg, F_LIGHTGRAY "Container=" F_WHITE "%u",
f_logPrintf( pLogMsg, F_LIGHTGRAY "Container=" F_WHITE "%u",
(unsigned)pSubQuery->SQStatus.uiContainerNum);
flmLogPrintf( pLogMsg, F_LIGHTGRAY ", Matched=" F_WHITE "%u",
f_logPrintf( pLogMsg, F_LIGHTGRAY ", Matched=" F_WHITE "%u",
(unsigned)pSubQuery->SQStatus.uiMatchedCnt);
if (pSubQuery->SQStatus.uiNumRejectedByCallback)
{
flmLogPrintf( pLogMsg, F_LIGHTGRAY ", CallbackRejected=" F_WHITE "%u",
f_logPrintf( pLogMsg, F_LIGHTGRAY ", CallbackRejected=" F_WHITE "%u",
(unsigned)pSubQuery->SQStatus.uiNumRejectedByCallback);
}
if (pSubQuery->SQStatus.uiDupsEliminated)
{
flmLogPrintf( pLogMsg, F_LIGHTGRAY ", DupsElim=" F_WHITE "%u",
f_logPrintf( pLogMsg, F_LIGHTGRAY ", DupsElim=" F_WHITE "%u",
(unsigned)pSubQuery->SQStatus.uiDupsEliminated);
}
if (pSubQuery->SQStatus.uiKeysTraversed ||
pSubQuery->SQStatus.uiKeysRejected)
{
flmLogPrintf( pLogMsg, F_LIGHTGRAY ", KeysFailed=" F_WHITE "%u of %u",
f_logPrintf( pLogMsg, F_LIGHTGRAY ", KeysFailed=" F_WHITE "%u of %u",
(unsigned)pSubQuery->SQStatus.uiKeysRejected,
(unsigned)pSubQuery->SQStatus.uiKeysTraversed);
}
@@ -812,7 +809,7 @@ Output_Opt_Info:
if (pSubQuery->SQStatus.uiRefsTraversed ||
pSubQuery->SQStatus.uiRefsRejected)
{
flmLogPrintf( pLogMsg, F_LIGHTGRAY ", RefsFailed=" F_WHITE "%u of %u",
f_logPrintf( pLogMsg, F_LIGHTGRAY ", RefsFailed=" F_WHITE "%u of %u",
(unsigned)pSubQuery->SQStatus.uiRefsRejected,
(unsigned)pSubQuery->SQStatus.uiRefsTraversed);
}
@@ -821,7 +818,7 @@ Output_Opt_Info:
pSubQuery->SQStatus.uiRecsRejected ||
pSubQuery->SQStatus.uiRecsNotFound)
{
flmLogPrintf( pLogMsg, F_LIGHTGRAY ", RecsFetched=" F_WHITE "%u"
f_logPrintf( pLogMsg, F_LIGHTGRAY ", RecsFetched=" F_WHITE "%u"
F_LIGHTGRAY ", RecsRejected=" F_WHITE "%u"
F_LIGHTGRAY ", RecsNotFound=" F_WHITE "%u",
(unsigned)pSubQuery->SQStatus.uiRecsFetchedForEval,
@@ -829,7 +826,7 @@ Output_Opt_Info:
(unsigned)pSubQuery->SQStatus.uiRecsNotFound);
}
flmLogPrintf( pLogMsg, F_LIGHTGRAY "}\n");
f_logPrintf( pLogMsg, F_LIGHTGRAY "}\n");
if (bIndentOptInfo)
{
@@ -842,9 +839,9 @@ Output_Opt_Info:
Desc: This routine logs the query criteria for a cursor.
****************************************************************************/
void flmLogQuery(
F_LogMessage * pLogMsg,
FLMUINT uiIndent,
CURSOR * pCursor)
IF_LogMessageClient * pLogMsg,
FLMUINT uiIndent,
CURSOR * pCursor)
{
SUBQUERY * pSubQuery;
QTYPES eParentOp = (pCursor->pSubQueryList &&
@@ -854,7 +851,7 @@ void flmLogQuery(
if (!uiIndent)
{
pLogMsg->setColor( FLM_LIGHTGRAY, FLM_BLACK);
pLogMsg->changeColor( FLM_LIGHTGRAY, FLM_BLACK);
pLogMsg->appendString( "QUERY CRITERIA:");
if (!pCursor->pSubQueryList)
{