diff --git a/sql/src/fxml.h b/sql/src/fxml.h deleted file mode 100644 index c238fc1..0000000 --- a/sql/src/fxml.h +++ /dev/null @@ -1,582 +0,0 @@ -//------------------------------------------------------------------------------ -// Desc: This file contains the FLAIM XML wrapper class -// -// Tabs: 3 -// -// Copyright (c) 1999-2000, 2002-2006 Novell, Inc. All Rights Reserved. -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of version 2 of the GNU General Public -// License as published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, contact Novell, Inc. -// -// To contact Novell about this file by physical or electronic mail, -// you may find current contact information at www.novell.com -// -// $Id: fxml.h 3109 2006-01-19 13:07:07 -0700 (Thu, 19 Jan 2006) dsanders $ -//------------------------------------------------------------------------------ - -#ifndef FXML_H -#define FXML_H - -/*============================================================================ -Desc: FLAIM's XML namespace class -============================================================================*/ -class F_XMLNamespace : public F_Object -{ -public: - - FINLINE F_XMLNamespace() - { - m_puzPrefix = NULL; - m_puzURI = NULL; - m_pNext = NULL; - } - - FINLINE ~F_XMLNamespace() - { - flmAssert( !m_pNext); - - if( m_puzPrefix) - { - f_free( &m_puzPrefix); - } - - if( m_puzURI) - { - f_free( &m_puzURI); - } - } - - RCODE setPrefix( - FLMUNICODE * puzPrefix); - - RCODE setURI( - FLMUNICODE * puzURI); - - RCODE setup( - FLMUNICODE * puzPrefix, - FLMUNICODE * puzURI, - F_XMLNamespace * pNext); - - FINLINE FLMUNICODE * getPrefixPtr( void) - { - return( m_puzPrefix); - } - - FINLINE FLMUNICODE * getURIPtr( void) - { - return( m_puzURI); - } - -private: - - FLMUNICODE * m_puzPrefix; - FLMUNICODE * m_puzURI; - F_XMLNamespace * m_pNext; - -friend class F_XMLNamespaceMgr; -}; - -/*============================================================================ -Desc: Namespace manager class -============================================================================*/ -class F_XMLNamespaceMgr : public F_Object -{ -public: - - F_XMLNamespaceMgr(); - - ~F_XMLNamespaceMgr(); - - RCODE findNamespace( - FLMUNICODE * puzPrefix, - F_XMLNamespace ** ppNamespace, - FLMUINT uiMaxSearchSize = ~((FLMUINT)0)); - - RCODE pushNamespace( - FLMUNICODE * puzPrefix, - FLMUNICODE * puzNamespaceURI); - - RCODE pushNamespace( - F_XMLNamespace * pNamespace); - - void popNamespaces( - FLMUINT uiCount); - - FLMUINT getNamespaceCount( void) - { - return( m_uiNamespaceCount); - } - -private: - - F_XMLNamespace * m_pFirstNamespace; - FLMUINT m_uiNamespaceCount; -}; - -// Typedefs - -typedef enum -{ - XML_STATS -} eXMLStatus; - -// This callback is currently only used by the non-com utilities, -// which is why we haven't bothered to make it an interface -typedef RCODE (* XML_STATUS_HOOK)( - eXMLStatus eStatusType, - void * pvArg1, - void * pvArg2, - void * pvArg3, - void * pvUserData); - -/*============================================================================ -Desc: FLAIM's XML import class -============================================================================*/ -class F_XMLImport : public F_XMLNamespaceMgr -{ -public: - - F_XMLImport(); - - ~F_XMLImport(); - - RCODE setup( void); - - void reset( void); - - RCODE import( - IF_IStream * pStream, - F_Db * pDb, - FLMUINT uiCollection, - FLMUINT uiFlags, - F_DOMNode * pNodeToLinkTo, - eNodeInsertLoc eInsertLoc, - F_DOMNode ** ppNewNode, - XFLM_IMPORT_STATS * pImportStats); - - FINLINE void setStatusCallback( - XML_STATUS_HOOK fnStatus, - void * pvUserData) - { - m_fnStatus = fnStatus; - m_pvCallbackData = pvUserData; - } - -private: - - #define F_DEFAULT_NS_DECL 0x01 - #define F_PREFIXED_NS_DECL 0x02 - - typedef struct xmlattr - { - FLMUINT uiLineNum; - FLMUINT uiLineOffset; - FLMUINT uiLineFilePos; - FLMUINT uiLineBytes; - FLMUINT uiValueLineNum; - FLMUINT uiValueLineOffset; - FLMUNICODE * puzPrefix; - FLMUNICODE * puzLocalName; - FLMUNICODE * puzVal; - FLMUINT uiFlags; - xmlattr * pPrev; - xmlattr * pNext; - } XML_ATTR; - - // Methods - - RCODE getFieldTagAndType( - FLMUNICODE * puzName, - FLMBOOL bOkToAdd, - FLMUINT * puiTagNum, - FLMUINT * puiDataType); - - RCODE getByte( - FLMBYTE * pucByte); - - FINLINE void ungetByte( - FLMBYTE ucByte) - { - // Can only unget a single byte. - - flmAssert( !m_ucUngetByte); - m_ucUngetByte = ucByte; - m_importStats.uiChars--; - } - - RCODE getLine( void); - - FINLINE FLMUNICODE getChar( void) - { - if (m_uiCurrLineOffset == m_uiCurrLineNumChars) - { - return( (FLMUNICODE)0); - } - else - { - FLMUNICODE uzChar = m_puzCurrLineBuf [m_uiCurrLineOffset++]; - return( uzChar); - } - } - - FINLINE FLMUNICODE peekChar( void) - { - if (m_uiCurrLineOffset == m_uiCurrLineNumChars) - { - return( (FLMUNICODE)0); - } - else - { - return( m_puzCurrLineBuf [m_uiCurrLineOffset]); - } - } - - FINLINE void ungetChar( void) - { - - // There should never be a reason to unget past the beginning of the current - // line. - - flmAssert( m_uiCurrLineOffset); - m_uiCurrLineOffset--; - } - - RCODE getName( - FLMUINT * puiChars); - - RCODE getQualifiedName( - FLMUINT * puiChars, - FLMUNICODE ** ppuzPrefix, - FLMUNICODE ** ppuzLocal, - FLMBOOL * pbNamespaceDecl, - FLMBOOL * pbDefaultNamespaceDecl); - - void getNmtoken( - FLMUINT * puiChars); - - RCODE getPubidLiteral( void); - - RCODE getSystemLiteral( void); - - RCODE getElementValue( - FLMUNICODE * puBuf, - FLMUINT * puiMaxChars, - FLMBOOL * pbEntity); - - RCODE processEntityValue( void); - - RCODE getEntity( - FLMUNICODE * puBuf, - FLMUINT * puiChars, - FLMBOOL * pbTranslated, - FLMUNICODE * puTransChar); - - RCODE processReference( - FLMUNICODE * puChar = NULL); - - RCODE processCDATA( - F_DOMNode * pParent, - FLMUINT uiSavedLineNum, - FLMUINT uiSavedOffset, - FLMUINT uiSavedFilePos, - FLMUINT uiSavedLineBytes); - - RCODE processAttributeList( void); - - RCODE processComment( - F_DOMNode * pParent, - FLMUINT uiSavedLineNum, - FLMUINT uiSavedOffset, - FLMUINT uiSavedFilePos, - FLMUINT uiSavedLineBytes); - - RCODE processProlog( void); - - RCODE processXMLDecl( void); - - RCODE processVersion( void); - - RCODE processEncodingDecl( void); - - RCODE processSDDecl( void); - - RCODE processMisc( void); - - RCODE processDocTypeDecl( void); - - RCODE processPI( - F_DOMNode * pParent, - FLMUINT uiSavedLineNum, - FLMUINT uiSavedOffset, - FLMUINT uiSavedFilePos, - FLMUINT uiSavedLineBytes); - - RCODE processElement( - F_DOMNode * pNodeToLinkTo, - eNodeInsertLoc eInsertLoc, - F_DOMNode ** ppNewNode); - - RCODE unicodeToNumber64( - FLMUNICODE * puzVal, - FLMUINT64 * pui64Val, - FLMBOOL * pbNeg); - - RCODE flushElementValue( - F_DOMNode * pParent, - FLMBYTE * pucValue, - FLMUINT uiValueLen); - - RCODE getBinaryVal( - FLMUINT * puiLength); - - RCODE fixNamingTag( - F_DOMNode * pNode); - - FLMBOOL lineHasToken( - const char * pszToken); - - RCODE processMarkupDecl( void); - - RCODE processPERef( void); - - RCODE processElementDecl( void); - - RCODE processEntityDecl( void); - - RCODE processNotationDecl( void); - - RCODE processAttListDecl( void); - - RCODE processContentSpec( void); - - RCODE processMixedContent( void); - - RCODE processChildContent( void); - - RCODE processAttDef( void); - - RCODE processAttType( void); - - RCODE processAttValue( - XML_ATTR * pAttr); - - RCODE processDefaultDecl( void); - - RCODE processID( - FLMBOOL bPublicId); - - RCODE processSTag( - F_DOMNode * pNodeToLinkTo, - eNodeInsertLoc eInsertLoc, - FLMBOOL * pbHasContent, - F_DOMNode ** ppElement); - - RCODE skipWhitespace( - FLMBOOL bRequired); - - RCODE resizeValBuffer( - FLMUINT uiSize); - - // Attribute management - - void resetAttrList( void) - { - m_pFirstAttr = NULL; - m_pLastAttr = NULL; - m_attrPool.poolReset( NULL); - } - - RCODE allocAttribute( - XML_ATTR ** ppAttr) - { - XML_ATTR * pAttr = NULL; - RCODE rc = NE_SFLM_OK; - - if( RC_BAD( rc = m_attrPool.poolCalloc( - sizeof( XML_ATTR), (void **)&pAttr))) - { - goto Exit; - } - - if( (pAttr->pPrev = m_pLastAttr) == NULL) - { - m_pFirstAttr = pAttr; - } - else - { - m_pLastAttr->pNext = pAttr; - } - - m_pLastAttr = pAttr; - - Exit: - - *ppAttr = pAttr; - return( rc); - } - - RCODE setPrefix( - XML_ATTR * pAttr, - FLMUNICODE * puzPrefix) - { - RCODE rc = NE_SFLM_OK; - FLMUINT uiStrLen; - - if( !puzPrefix) - { - pAttr->puzPrefix = NULL; - goto Exit; - } - - uiStrLen = f_unilen( puzPrefix); - - if( RC_BAD( rc = m_attrPool.poolAlloc( - sizeof( FLMUNICODE) * (uiStrLen + 1), (void **)&pAttr->puzPrefix))) - { - goto Exit; - } - - f_memcpy( pAttr->puzPrefix, puzPrefix, - sizeof( FLMUNICODE) * (uiStrLen + 1)); - - Exit: - - return( rc); - } - - RCODE setLocalName( - XML_ATTR * pAttr, - FLMUNICODE * puzLocalName) - { - RCODE rc = NE_SFLM_OK; - FLMUINT uiStrLen; - - if( !puzLocalName) - { - pAttr->puzLocalName = NULL; - goto Exit; - } - - uiStrLen = f_unilen( puzLocalName); - - if( RC_BAD( rc = m_attrPool.poolAlloc( - sizeof( FLMUNICODE) * (uiStrLen + 1), - (void **)&pAttr->puzLocalName))) - { - goto Exit; - } - - f_memcpy( pAttr->puzLocalName, puzLocalName, - sizeof( FLMUNICODE) * (uiStrLen + 1)); - - Exit: - - return( rc); - } - - RCODE setUnicode( - XML_ATTR * pAttr, - FLMUNICODE * puzUnicode) - { - RCODE rc = NE_SFLM_OK; - FLMUINT uiStrLen; - - if( !puzUnicode) - { - pAttr->puzVal = NULL; - goto Exit; - } - - uiStrLen = f_unilen( puzUnicode); - - if( RC_BAD( rc = m_attrPool.poolAlloc( - sizeof( FLMUNICODE) * (uiStrLen + 1), - (void **)&pAttr->puzVal))) - { - goto Exit; - } - - f_memcpy( pAttr->puzVal, puzUnicode, - sizeof( FLMUNICODE) * (uiStrLen + 1)); - - Exit: - - return( rc); - } - - RCODE addAttributesToElement( - F_DOMNode * pElement); - - FINLINE void setErrInfo( - FLMUINT uiErrLineNum, - FLMUINT uiErrLineOffset, - XMLParseError eErrorType, - FLMUINT uiErrLineFilePos, - FLMUINT uiErrLineBytes) - { - m_importStats.uiErrLineNum = uiErrLineNum; - m_importStats.uiErrLineOffset = uiErrLineOffset; - m_importStats.eErrorType = eErrorType; - m_importStats.uiErrLineFilePos = uiErrLineFilePos; - m_importStats.uiErrLineBytes = uiErrLineBytes; - } - - // Data - - F_Db * m_pDb; - FLMUINT m_uiCollection; - FLMBYTE m_ucUngetByte; - FLMUNICODE * m_puzCurrLineBuf; - FLMUINT m_uiCurrLineBufMaxChars; - FLMUINT m_uiCurrLineNumChars; - FLMUINT m_uiCurrLineOffset; - FLMUINT m_uiCurrLineNum; - FLMUINT m_uiCurrLineFilePos; - FLMUINT m_uiCurrLineBytes; -#define FLM_XML_MAX_CHARS 128 - FLMUNICODE m_uChars[ FLM_XML_MAX_CHARS]; - FLMBOOL m_bSetup; - IF_IStream * m_pStream; - FLMBYTE * m_pucValBuf; - FLMUINT m_uiValBufSize; // Number of Unicode characters - FLMUINT m_uiFlags; - FLMBOOL m_bExtendDictionary; - XMLEncoding m_eXMLEncoding; - XML_STATUS_HOOK m_fnStatus; - void * m_pvCallbackData; - XFLM_IMPORT_STATS m_importStats; - F_Pool m_tmpPool; - - // Attribute management - - XML_ATTR * m_pFirstAttr; - XML_ATTR * m_pLastAttr; - F_Pool m_attrPool; -}; - -#define FLM_XML_EXTEND_DICT_FLAG 0x00000001 -#define FLM_XML_COMPRESS_WHITESPACE_FLAG 0x00000002 -#define FLM_XML_TRANSLATE_ESC_FLAG 0x00000004 - -FINLINE FLMBOOL isXMLNS( - FLMUNICODE * puzName) -{ - return( (puzName [0] == FLM_UNICODE_x || puzName [0] == FLM_UNICODE_X) && - (puzName [1] == FLM_UNICODE_m || puzName [1] == FLM_UNICODE_M) && - (puzName [2] == FLM_UNICODE_l || puzName [2] == FLM_UNICODE_L) && - (puzName [3] == FLM_UNICODE_n || puzName [3] == FLM_UNICODE_N) && - (puzName [4] == FLM_UNICODE_s || puzName [4] == FLM_UNICODE_S) - ? TRUE - : FALSE); -} - -#endif // FXML_H diff --git a/sql/src/fxpath.h b/sql/src/fxpath.h deleted file mode 100644 index 246cb16..0000000 --- a/sql/src/fxpath.h +++ /dev/null @@ -1,454 +0,0 @@ -//------------------------------------------------------------------------------ -// Desc: This file contains the FLAIM XML import and export utility classes -// -// Tabs: 3 -// -// Copyright (c) 1999-2006 Novell, Inc. All Rights Reserved. -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of version 2 of the GNU General Public -// License as published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, contact Novell, Inc. -// -// To contact Novell about this file by physical or electronic mail, -// you may find current contact information at www.novell.com -// -// $Id: fxpath.h 3109 2006-01-19 13:07:07 -0700 (Thu, 19 Jan 2006) dsanders $ -//------------------------------------------------------------------------------ - -#ifndef FXPATH_H -#define FXPATH_H - -typedef enum -{ - UNKNOWN_TOKEN = 0, // 0 - OP_AND_TOKEN = XFLM_AND_OP, // 1 - OP_OR_TOKEN = XFLM_OR_OP, // 2 - OP_NOT_TOKEN = XFLM_NOT_OP, // 3 - OP_EQ_TOKEN = XFLM_EQ_OP, // 4 - OP_NE_TOKEN = XFLM_NE_OP, // 5 - OP_APPROX_EQ_TOKEN = XFLM_APPROX_EQ_OP, // 6 - OP_LT_TOKEN = XFLM_LT_OP, // 7 - OP_LE_TOKEN = XFLM_LE_OP, // 8 - OP_GT_TOKEN = XFLM_GT_OP, // 9 - OP_GE_TOKEN = XFLM_GE_OP, // 10 - OP_BITAND_TOKEN = XFLM_BITAND_OP, // 11 - OP_BITOR_TOKEN = XFLM_BITOR_OP, // 12 - OP_BITXOR_TOKEN = XFLM_BITXOR_OP, // 13 - OP_MULT_TOKEN = XFLM_MULT_OP, // 14 - OP_DIV_TOKEN = XFLM_DIV_OP, // 15 - OP_MOD_TOKEN = XFLM_MOD_OP, // 16 - OP_PLUS_TOKEN = XFLM_PLUS_OP, // 17 - OP_MINUS_TOKEN = XFLM_MINUS_OP, // 18 - OP_NEG_TOKEN = XFLM_NEG_OP, // 19 - OP_LPAREN_TOKEN = XFLM_LPAREN_OP, // 20 - OP_RPAREN_TOKEN = XFLM_RPAREN_OP, // 21 - OP_COMMA_TOKEN = XFLM_COMMA_OP, // 22 - OP_LBRACKET_TOKEN = XFLM_LBRACKET_OP, // 23 - OP_RBRACKET_TOKEN = XFLM_RBRACKET_OP, // 24 - OP_FSLASH_TOKEN, // 25 - OP_DOUBLE_FSLASH_TOKEN, // 26 - OP_UNION_TOKEN, // 27 - PERIOD_TOKEN, // 28 - DOUBLE_PERIOD_TOKEN, // 29 - COMMA_TOKEN, // 30 - DOUBLE_COLON_TOKEN, // 31 - NAME_TEST_WILD_TOKEN, // 32 - NAME_TEST_NCWILD_TOKEN, // 33 - NAME_TEST_QNAME_TOKEN, // 34 - NODE_TYPE_COMMENT_TOKEN, // 35 - NODE_TYPE_TEXT_TOKEN, // 36 - NODE_TYPE_PI_TOKEN, // 37 - NODE_TYPE_NODE_TOKEN, // 38 - AXIS_ANCESTOR_TOKEN, // 39 - AXIS_ANCESTOR_OR_SELF_TOKEN, // 40 - AXIS_ATTRIB_TOKEN, // 41 - AXIS_CHILD_TOKEN, // 42 - AXIS_DESCENDANT_TOKEN, // 43 - AXIS_DESCENDANT_OR_SELF_TOKEN, // 44 - AXIS_FOLLOWING_TOKEN, // 45 - AXIS_FOLLOWING_SIB_TOKEN, // 46 - AXIS_NAMESPACE_TOKEN, // 47 - AXIS_PARENT_TOKEN, // 48 - AXIS_PRECEDING_TOKEN, // 49 - AXIS_PRECEDING_SIB_TOKEN, // 50 - AXIS_SELF_TOKEN, // 51 - AXIS_ATSIGN_TOKEN, // 52 - AXIS_META_TOKEN, // 53 - LITERAL_TOKEN, // 54 - NUMBER_TOKEN, // 55 - VAR_REF_TOKEN, // 56 - LBRACE_TOKEN, // 57 - RBRACE_TOKEN, // 58 - FUNC_LAST_TOKEN, // 59 - FUNC_POSITION_TOKEN, // 60 - FUNC_COUNT_TOKEN, // 61 - FUNC_ID_TOKEN, // 62 - FUNC_LOCAL_NAME_TOKEN, // 63 - FUNC_NAMESPACE_URI_TOKEN, // 64 - FUNC_NAME_TOKEN, // 65 - FUNC_STRING_TOKEN, // 66 - FUNC_CONCAT_TOKEN, // 67 - FUNC_STARTS_WITH_TOKEN, // 68 - FUNC_CONTAINS_TOKEN, // 69 - FUNC_SUBSTR_BEFORE_TOKEN, // 70 - FUNC_SUBSTR_AFTER_TOKEN, // 71 - FUNC_SUBSTR_TOKEN, // 72 - FUNC_STR_LEN_TOKEN, // 73 - FUNC_NORM_SPACE_TOKEN, // 74 - FUNC_TRANSLATE_TOKEN, // 75 - FUNC_NOT_TOKEN, // 76 - FUNC_TRUE_TOKEN, // 77 - FUNC_FALSE_TOKEN, // 78 - FUNC_UNKNOWN_TOKEN, // 79 - FUNC_LANG_TOKEN, // 80 - FUNC_NUMBER_TOKEN, // 81 - FUNC_SUM_TOKEN, // 82 - FUNC_FLOOR_TOKEN, // 83 - FUNC_CEILING_TOKEN, // 84 - FUNC_ROUND_TOKEN, // 85 - BINARY_TOKEN, // 86 - FUNC_CB_TOKEN, // 87 - END_TOKEN // 88 -} eXPathTokenType; - -class F_XPathBase : public F_Object -{ -public: - - FINLINE FLMBOOL isOperator( - eXPathTokenType eType) - { - switch( eType) - { - case OP_AND_TOKEN: - case OP_OR_TOKEN: - case OP_MOD_TOKEN: - case OP_DIV_TOKEN: - case OP_MULT_TOKEN: - case OP_FSLASH_TOKEN: - case OP_DOUBLE_FSLASH_TOKEN: - case OP_UNION_TOKEN: - case OP_PLUS_TOKEN: - case OP_MINUS_TOKEN: - case OP_EQ_TOKEN: - case OP_NE_TOKEN: - case OP_LT_TOKEN: - case OP_LE_TOKEN: - case OP_GT_TOKEN: - case OP_GE_TOKEN: - return( TRUE); - default: - break; - } - - return( FALSE); - } - - FINLINE FLMBOOL tokenCanHaveFlags( - eXPathTokenType eType) - { - switch( eType) - { - case OP_EQ_TOKEN: - case OP_NE_TOKEN: - case OP_LT_TOKEN: - case OP_LE_TOKEN: - case OP_GT_TOKEN: - case OP_GE_TOKEN: - return( TRUE); - default: - break; - } - - return( FALSE); - } - - FINLINE FLMBOOL isAxisSpecifier( - eXPathTokenType eType) - { - switch( eType) - { - case AXIS_ANCESTOR_TOKEN: - case AXIS_ANCESTOR_OR_SELF_TOKEN: - case AXIS_ATTRIB_TOKEN: - case AXIS_CHILD_TOKEN: - case AXIS_DESCENDANT_TOKEN: - case AXIS_DESCENDANT_OR_SELF_TOKEN: - case AXIS_FOLLOWING_TOKEN: - case AXIS_FOLLOWING_SIB_TOKEN: - case AXIS_NAMESPACE_TOKEN: - case AXIS_PARENT_TOKEN: - case AXIS_PRECEDING_TOKEN: - case AXIS_PRECEDING_SIB_TOKEN: - case AXIS_SELF_TOKEN: - case AXIS_ATSIGN_TOKEN: - return( TRUE); - default: - break; - } - - return( FALSE); - } -}; - -/***************************************************************************** -Desc: -******************************************************************************/ -class F_XPathToken : public F_XPathBase -{ -public: - - F_XPathToken() - { - m_pValBuf = NULL; - m_uiValBufSize = 0; - reset(); - } - - ~F_XPathToken() - { - if( m_pValBuf) - { - f_free( &m_pValBuf); - } - } - - FINLINE void reset( void) - { - m_eTokenType = UNKNOWN_TOKEN; - m_uiTokenFlags = 0; - m_ui64Val = 0; - m_puzPrefix = NULL; - m_puzLocal = NULL;; - } - - FINLINE RCODE resizeBuffer( - FLMUINT uiNewSize) - { - RCODE rc = NE_SFLM_OK; - void * pOrigBuf = m_pValBuf; - - if( !m_pValBuf) - { - if( RC_BAD( rc = f_alloc( uiNewSize, &m_pValBuf))) - { - goto Exit; - } - } - else - { - if( RC_BAD( rc = f_realloc( uiNewSize, &m_pValBuf))) - { - goto Exit; - } - - if( m_puzPrefix) - { - m_puzPrefix = (FLMUNICODE *)(((FLMBYTE *)m_puzPrefix - - (FLMBYTE *)pOrigBuf) + (FLMBYTE *)m_pValBuf); - } - - if( m_puzLocal) - { - m_puzLocal = (FLMUNICODE *)(((FLMBYTE *)m_puzLocal - - (FLMBYTE *)pOrigBuf) + (FLMBYTE *)m_pValBuf); - } - } - - m_uiValBufSize = uiNewSize; - - Exit: - - return( rc); - } - - FINLINE eXPathTokenType getType( void) - { - return( m_eTokenType); - } - - FINLINE FLMUNICODE * getPrefixPtr( void) - { - return( m_puzPrefix); - } - - FINLINE FLMUNICODE * getLocalPtr( void) - { - return( m_puzLocal); - } - - FINLINE FLMUINT64 getNumber( void) - { - return( m_ui64Val); - } - - FINLINE FLMUINT getTokenFlags( void) - { - return( m_uiTokenFlags); - } - -private: - - eXPathTokenType m_eTokenType; - FLMUINT m_uiTokenFlags; - void * m_pValBuf; - FLMUINT m_uiValBufSize; - FLMUINT m_uiValBufLen; - FLMUINT64 m_ui64Val; - FLMUNICODE * m_puzPrefix; - FLMUNICODE * m_puzLocal; - -friend class F_XPathTokenizer; -friend class F_XPath; -}; - -/***************************************************************************** -Desc: -******************************************************************************/ -class F_XPathTokenizer : public F_XPathBase, public F_XMLNamespaceMgr -{ -public: - - F_XPathTokenizer() - { - m_pIStream = NULL; - m_uiUngetCount = 0; - m_eLastTokenType = UNKNOWN_TOKEN; - } - - ~F_XPathTokenizer() - { - if( m_pIStream) - { - m_pIStream->Release(); - } - } - - RCODE setup( - IF_IStream * pIStream); - - RCODE getNextToken( - F_XPathToken * pToken); - -private: - - RCODE skipWhitespace( void); - - RCODE getChar( - FLMUNICODE * puChar); - - RCODE peekChar( - FLMUNICODE * puChar); - - RCODE ungetChar( - FLMUNICODE uChar); - - RCODE getNumber( - F_XPathToken * pToken); - - RCODE getName( - F_XPathToken * pToken); - - RCODE getBinary( - F_XPathToken * pToken); - - RCODE getLiteral( - F_XPathToken * pToken); - - IF_IStream * m_pIStream; - eXPathTokenType m_eLastTokenType; - FLMUINT m_uiUngetCount; -#define XPATH_MAX_UNGET_CHARS 4 - FLMUNICODE m_uUngetBuf[ XPATH_MAX_UNGET_CHARS]; -}; - -class F_XPathExpr; -class F_XPathPredicate; -class F_XPathAxisProducer; -class F_XPathStep; - -/***************************************************************************** -Desc: -******************************************************************************/ -class F_XPath : public F_XPathBase, public F_XMLNamespaceMgr -{ -public: - - F_XPath() - { - } - - ~F_XPath() - { - } - - RCODE parseQuery( - F_Db * pDb, - IF_IStream * pIStream, - IF_Query * pQuery); - - RCODE parseQuery( - F_Db * pDb, - char * pszQuery, - IF_Query * pQuery); - -private: - - RCODE processFilterExpr( - F_XPathExpr ** ppExpr); - - RCODE processPathExpr( - F_XPathExpr ** ppExpr); - - RCODE processUnionExpr( - F_XPathExpr ** ppExpr); - - RCODE processNodeTest( - FLMBOOL bAttr, - F_XPathExpr ** ppExpr); - - RCODE processStep( - F_XPathExpr ** ppExpr); - - RCODE processRelativeLocationPath( - F_XPathExpr ** ppExpr); - - RCODE processUnaryExpr( - F_XPathExpr ** ppExpr); - - RCODE processOrExpr( - F_XPathExpr ** ppExpr); - - RCODE processAndExpr( - F_XPathExpr ** ppExpr); - - RCODE processEqualityExpr( - F_XPathExpr ** ppExpr); - - RCODE processRelationalExpr( - F_XPathExpr ** ppExpr); - - RCODE processAdditiveExpr( - F_XPathExpr ** ppExpr); - - RCODE processMultiplicativeExpr( - F_XPathExpr ** ppExpr); - - RCODE processPrimaryExpr( - F_XPathExpr ** ppExpr); - - RCODE getNextToken( void); - - F_XPathTokenizer m_tokenizer; - F_XPathToken m_curToken; -}; - -#endif // FXPATH_H