diff --git a/xflaim/src/xflaim.h b/xflaim/src/xflaim.h
index 8c82dfa..f4b287a 100644
--- a/xflaim/src/xflaim.h
+++ b/xflaim/src/xflaim.h
@@ -1,6141 +1,6162 @@
-//------------------------------------------------------------------------------
-// Desc: XFLAIM public definitions and interfaces
-//
-// Tabs: 3
-//
-// Copyright (c) 2003-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: xflaim.h 3123 2006-01-24 17:19:50 -0700 (Tue, 24 Jan 2006) ahodgkinson $
-//------------------------------------------------------------------------------
-
-#ifndef XFLAIM_H
-#define XFLAIM_H
-
- #ifndef FLM_PLATFORM_CONFIGURED
- #define FLM_PLATFORM_CONFIGURED
-
- // Determine the build platform
-
- #undef FLM_WIN
- #undef FLM_NLM
- #undef FLM_UNIX
- #undef FLM_AIX
- #undef FLM_LINUX
- #undef FLM_SOLARIS
- #undef FLM_SPARC
- #undef FLM_HPUX
- #undef FLM_OSX
- #undef FLM_BIG_ENDIAN
- #undef FLM_POWER_PC
- #undef FLM_STRICT_ALIGNMENT
-
- #if defined( __NETWARE__) || defined( NLM) || defined( N_PLAT_NLM)
- #define FLM_NLM
- #if defined( __WATCOMC__)
- #define FLM_WATCOM_NLM
- #elif defined( __MWERKS__)
- #define FLM_MWERKS_NLM
- #endif
- #elif defined( _WIN64)
- #define FLM_WIN
- #define FLM_64BIT
- #define FLM_STRICT_ALIGNMENT
- #elif defined( _WIN32)
- #define FLM_WIN
- #elif defined( _AIX)
- #define FLM_UNIX
- #define FLM_AIX
- #define FLM_BIG_ENDIAN
- #define FLM_STRICT_ALIGNMENT
- #elif defined( linux)
- #define FLM_UNIX
- #define FLM_LINUX
- #if defined( __PPC__)
- #define FLM_POWER_PC
- #define FLM_BIG_ENDIAN
- #define FLM_STRICT_ALIGNMENT
- #endif
- #elif defined( sun)
- #define FLM_UNIX
- #define FLM_SOLARIS
- #define FLM_STRICT_ALIGNMENT
- #if defined( sparc) || defined( __sparc)
- #define FLM_SPARC
- #define FLM_BIG_ENDIAN
- #endif
- #elif defined( __hpux) || defined( hpux)
- #define FLM_UNIX
- #define FLM_HPUX
- #define FLM_BIG_ENDIAN
- #define FLM_STRICT_ALIGNMENT
- #elif (defined( __ppc__) || defined( __ppc64__)) && defined( __APPLE__)
- #define FLM_UNIX
- #define FLM_OSX
- #define FLM_BIG_ENDIAN
- #define FLM_STRICT_ALIGNMENT
- #else
- #error Platform architecture is undefined.
- #endif
-
- #if !defined( FLM_64BIT) && !defined( FLM_32BIT)
- #if defined( FLM_UNIX)
- #if defined( __x86_64__) || defined( _LP64) || defined( __LP64__)
- #define FLM_64BIT
- #endif
- #endif
- #endif
-
- #if !defined( FLM_64BIT)
- #define FLM_32BIT
- #elif defined( FLM_32BIT)
- #error Cannot define both FLM_32BIT and FLM_64BIT
- #endif
-
- // Debug or release build?
-
- #ifndef FLM_DEBUG
- #if defined( DEBUG) || (defined( PRECHECKIN) && PRECHECKIN != 0)
- #define FLM_DEBUG
- #endif
- #endif
-
- // Alignment
-
- #if defined( FLM_UNIX) || defined( FLM_64BIT)
- #define FLM_ALLOC_ALIGN 0x0007
- #define FLM_ALIGN_SIZE 8
- #elif defined( FLM_WIN) || defined( FLM_NLM)
- #define FLM_ALLOC_ALIGN 0x0003
- #define FLM_ALIGN_SIZE 4
- #else
- #error Platform not supported
- #endif
-
- // Basic type definitions
-
- #if defined( FLM_UNIX)
- typedef unsigned long FLMUINT;
- typedef long FLMINT;
- typedef unsigned char FLMBYTE;
- typedef unsigned short FLMUNICODE;
-
- typedef unsigned long long FLMUINT64;
- typedef unsigned int FLMUINT32;
- typedef unsigned short FLMUINT16;
- typedef unsigned char FLMUINT8;
- typedef long long FLMINT64;
- typedef int FLMINT32;
- typedef short FLMINT16;
- typedef signed char FLMINT8;
-
- #if defined( FLM_64BIT) || defined( FLM_OSX)
- typedef unsigned long FLMSIZET;
- #else
- typedef unsigned FLMSIZET;
- #endif
- #else
- #if defined( FLM_WIN)
- #if defined( FLM_64BIT)
- typedef unsigned __int64 FLMUINT;
- typedef __int64 FLMINT;
- typedef unsigned long FLMSIZET;
- typedef unsigned int FLMUINT32;
- #elif _MSC_VER >= 1300
- typedef unsigned long __w64 FLMUINT;
- typedef long __w64 FLMINT;
- typedef unsigned int FLMUINT32;
- #else
- typedef unsigned long FLMUINT;
- typedef long FLMINT;
- typedef unsigned int FLMUINT32;
- #endif
- #elif defined( FLM_NLM)
- typedef unsigned long int FLMUINT;
- typedef long int FLMINT;
- typedef unsigned long int FLMUINT32;
- #endif
-
- typedef unsigned char FLMBYTE;
- typedef unsigned short int FLMUNICODE;
-
- typedef unsigned short int FLMUINT16;
- typedef unsigned char FLMUINT8;
- typedef signed int FLMINT32;
- typedef signed short int FLMINT16;
- typedef signed char FLMINT8;
- typedef unsigned FLMSIZET;
-
- #if defined( __MWERKS__)
- typedef unsigned long long FLMUINT64;
- typedef long long FLMINT64;
- #else
- typedef unsigned __int64 FLMUINT64;
- typedef __int64 FLMINT64;
- #endif
-
- #endif
-
- typedef FLMINT RCODE;
- typedef FLMINT FLMBOOL;
-
- #define F_FILENAME_SIZE 256
- #define F_PATH_MAX_SIZE 256
-
- #define FLM_MAX_UINT ((FLMUINT)(-1L))
- #define FLM_MAX_INT ((FLMINT)(((FLMUINT)(-1L)) >> 1))
- #define FLM_MIN_INT ((FLMINT)((((FLMUINT)(-1L)) >> 1) + 1))
- #define FLM_MAX_UINT32 ((FLMUINT32)(0xFFFFFFFFL))
- #define FLM_MAX_INT32 ((FLMINT32)(0x7FFFFFFFL))
- #define FLM_MIN_INT32 ((FLMINT32)(0x80000000L))
- #define FLM_MAX_UINT16 ((FLMUINT16)(0xFFFF))
- #define FLM_MAX_INT16 ((FLMINT16)(0x7FFF))
- #define FLM_MIN_INT16 ((FLMINT16)(0x8000))
- #define FLM_MAX_UINT8 ((FLMUINT8)0xFF)
-
- #if( _MSC_VER >= 1200) && (_MSC_VER < 1300)
- #define FLM_MAX_UINT64 ((FLMUINT64)(0xFFFFFFFFFFFFFFFFL))
- #define FLM_MAX_INT64 ((FLMINT64)(0x7FFFFFFFFFFFFFFFL))
- #define FLM_MIN_INT64 ((FLMINT64)(0x8000000000000000L))
- #else
- #define FLM_MAX_UINT64 ((FLMUINT64)(0xFFFFFFFFFFFFFFFFLL))
- #define FLM_MAX_INT64 ((FLMINT64)(0x7FFFFFFFFFFFFFFFLL))
- #define FLM_MIN_INT64 ((FLMINT64)(0x8000000000000000LL))
- #endif
-
- #endif
-
- // xpcselany keeps MS compilers from complaining about multiple definitions
-
- #if defined(_MSC_VER)
- #define xpcselany __declspec(selectany)
- #else
- #define xpcselany
- #endif
-
- typedef struct
- {
- FLMUINT32 l;
- FLMUINT16 w1;
- FLMUINT16 w2;
- FLMUINT8 b[ 8];
- } XFLM_GUID;
-
- #define RXFLMIID const XFLM_GUID &
- #define RXFLMCLSID const XFLM_GUID &
- #define XFLMGUID XFLM_GUID
- #define XFLMCLSID XFLM_GUID
-
- // XFLM_DEFINE_GUID may be used to define or declare a GUID
- // #define XFLM_INIT_GUID before including this header file when
- // you want to define the guid, all other inclusions will only declare
- // the guid, not define it.
-
- #if !defined( PCOM_INIT_GUID)
- #define XFLM_DEFINE_GUID( name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
- extern const XFLMGUID name
- #else
- #define XFLM_DEFINE_GUID( name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
- extern const xpcselany XFLMGUID name \
- = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
- #endif
-
- // Make sure we define XFLMAPI based on the way
- // it is defined in PSA (see psaapi.h)
-
- #if defined( FLM_WIN)
- #define XFLMAPI __stdcall
- #ifdef FLM_DEBUG
- #define FINLINE inline
- #else
- #define FINLINE __forceinline
- #endif
- #elif defined( FLM_NLM)
- #define XFLMAPI __stdcall
- #define FINLINE inline
- #elif defined( FLM_UNIX)
- #define XFLMAPI
- #define FINLINE inline
- #else
- #error Platform not supported
- #endif
-
- #define XFLMEXTC extern "C"
-
- // xflmnovtbl keeps MS compilers from generating vtables for interfaces
-
- #ifdef _MSC_VER
- #define xflmnovtbl __declspec( novtable)
- #else
- #define xflmnovtbl
- #endif
-
- #define xflminterface struct xflmnovtbl
-
- XFLM_DEFINE_GUID( Internal_IID_XFLMIUnknown, 0x00000000, 0x0000, 0x0000,
- 0xC0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x46);
-
- xflminterface XFLMIUnknown
- {
- virtual ~XFLMIUnknown()
- {
- }
-
- virtual RCODE XFLMAPI QueryInterface(
- RXFLMIID riid,
- void ** ppv) = 0;
-
- virtual FLMUINT32 XFLMAPI AddRef( void) = 0;
-
- virtual FLMUINT32 XFLMAPI Release( void) = 0;
- };
-
- // XFLMIClassFactory
- // uuid: 00000001-0000-0000-C000-000000000046 (same as MSCOM IClassFactory)
-
- XFLM_DEFINE_GUID( Internal_IID_XFLMIClassFactory, 0x00000001, 0x0000, 0x0000,
- 0xC0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x46);
-
- xflminterface XFLMIClassFactory : public XFLMIUnknown
- {
- virtual RCODE XFLMAPI CreateInstance(
- XFLMIUnknown * piuouter,
- RXFLMIID riid,
- void ** ppv) = 0;
-
- virtual RCODE XFLMAPI LockServer(
- bool lockf) = 0;
- };
-
- /****************************************************************************
- Forward References
- ****************************************************************************/
- xflminterface IF_Backup;
- xflminterface IF_DataVector;
- xflminterface IF_Db;
- xflminterface IF_DbInfo;
- xflminterface IF_DirHdl;
- xflminterface IF_DOMNode;
- xflminterface IF_FileHdl;
- xflminterface IF_FileSystem;
- xflminterface IF_IStream;
- xflminterface IF_PosIStream;
- xflminterface IF_ResultSet;
- xflminterface IF_Query;
- xflminterface IF_ThreadInfo;
- xflminterface IF_Pool;
- xflminterface IF_DynaBuf;
- xflminterface IF_NodeInfo;
- xflminterface IF_BTreeInfo;
-
- // These are interfaces that need to be implemented by
- // applications. XFlaim uses them to report status or to do
- // callbacks of various kinds.
-
- xflminterface IF_OStream;
- xflminterface IF_BackupClient;
- xflminterface IF_BackupStatus;
- xflminterface IF_CommitClient;
- xflminterface IF_DbCheckStatus;
- xflminterface IF_DbCopyStatus;
- xflminterface IF_DbRebuildStatus;
- xflminterface IF_DbRenameStatus;
- xflminterface IF_DeleteStatus;
- xflminterface IF_EventClient;
- xflminterface IF_IxClient;
- xflminterface IF_IxStatus;
- xflminterface IF_LockInfoClient;
- xflminterface IF_LoggerClient;
- xflminterface IF_LogMessageClient;
- xflminterface IF_OperandComparer;
- xflminterface IF_RestoreClient;
- xflminterface IF_RestoreStatus;
- xflminterface IF_ResultSetSortStatus;
- xflminterface IF_ResultSetCompare;
- xflminterface IF_QueryStatus;
- xflminterface IF_QueryValidator;
- xflminterface IF_QueryValFunc;
- xflminterface IF_QueryNodeSource;
- xflminterface IF_UpgradeClient;
- xflminterface IF_BTreeInfoStatus;
-
- /****************************************************************************
- CROSS PLATFORM DEFINITIONS
- ****************************************************************************/
-
- #ifndef NULL
- #define NULL 0
- #endif
-
- #ifndef TRUE
- #define TRUE 1
- #endif
-
- #ifndef FALSE
- #define FALSE 0
- #endif
-
- // Language definitions - to get rid of testing "US" or multiple bytes
- // will define needed languages as a number with backward conversions.
- // Keep these defines synchronized with the table in wps6cmpc.c
-
- #define XFLM_US_LANG 0 // English, United States
- #define XFLM_AF_LANG 1 // Afrikaans
- #define XFLM_AR_LANG 2 // Arabic
- #define XFLM_CA_LANG 3 // Catalan
- #define XFLM_HR_LANG 4 // Croatian
- #define XFLM_CZ_LANG 5 // Czech
- #define XFLM_DK_LANG 6 // Danish
- #define XFLM_NL_LANG 7 // Dutch
- #define XFLM_OZ_LANG 8 // English, Australia
- #define XFLM_CE_LANG 9 // English, Canada
- #define XFLM_UK_LANG 10 // English, United Kingdom
- #define XFLM_FA_LANG 11 // Farsi
- #define XFLM_SU_LANG 12 // Finnish
- #define XFLM_CF_LANG 13 // French, Canada
- #define XFLM_FR_LANG 14 // French, France
- #define XFLM_GA_LANG 15 // Galician
- #define XFLM_DE_LANG 16 // German, Germany
- #define XFLM_SD_LANG 17 // German, Switzerland
- #define XFLM_GR_LANG 18 // Greek
- #define XFLM_HE_LANG 19 // Hebrew
- #define XFLM_HU_LANG 20 // Hungarian
- #define XFLM_IS_LANG 21 // Icelandic
- #define XFLM_IT_LANG 22 // Italian
- #define XFLM_NO_LANG 23 // Norwegian
- #define XFLM_PL_LANG 24 // Polish
- #define XFLM_BR_LANG 25 // Portuguese, Brazil
- #define XFLM_PO_LANG 26 // Portuguese, Portugal
- #define XFLM_RU_LANG 27 // Russian
- #define XFLM_SL_LANG 28 // Slovak
- #define XFLM_ES_LANG 29 // Spanish
- #define XFLM_SV_LANG 30 // Swedish
- #define XFLM_YK_LANG 31 // Ukrainian
- #define XFLM_UR_LANG 32 // Urdu
- #define XFLM_TK_LANG 33 // Turkey
- #define XFLM_JP_LANG 34 // Japanese
- #define XFLM_KO_LANG 35 // Korean
- #define XFLM_CT_LANG 36 // Chinese-Traditional
- #define XFLM_CS_LANG 37 // Chinese-Simplified
- #define XFLM_LA_LANG 38 // another Asian language
-
- /****************************************************************************
- Desc: This structure is used as a parameter to dbCreate to specify
- the create options for a database. It is also optionally returned
- when calling dbOpen.
- ****************************************************************************/
- typedef struct
- {
- FLMUINT uiBlockSize;
- #define XFLM_DEFAULT_BLKSIZ 4096
-
- FLMUINT uiVersionNum; // Database version number
- #define XFLM_VER_5_12 512
- #define XFLM_CURRENT_VERSION_NUM XFLM_VER_5_12
- #define XFLM_CURRENT_VER_STR "5.12"
-
- FLMUINT uiMinRflFileSize; // Minimum bytes per RFL file
- #define XFLM_DEFAULT_MIN_RFL_FILE_SIZE ((FLMUINT)100 * (FLMUINT)1024 * (FLMUINT)1024)
- FLMUINT uiMaxRflFileSize; // Maximum bytes per RFL file
- #define XFLM_DEFAULT_MAX_RFL_FILE_SIZE XFLM_MAXIMUM_FILE_SIZE
- FLMBOOL bKeepRflFiles; // Keep RFL files?
- #define XFLM_DEFAULT_KEEP_RFL_FILES_FLAG FALSE
- FLMBOOL bLogAbortedTransToRfl; // Log aborted transactions to RFL?
- #define XFLM_DEFAULT_LOG_ABORTED_TRANS_FLAG FALSE
-
- FLMUINT uiDefaultLanguage;
- #define XFLM_DEFAULT_LANG (XFLM_US_LANG)
-
- } XFLM_CREATE_OPTS, F_CREATE_OPTS;
-
- typedef enum
- {
- XML_NO_ERROR = 0,
- XML_ERR_BAD_ELEMENT_NAME, // 1 Invalid element name - does not start with a valid character for element names
- XML_ERR_XMLNS_IN_ELEMENT_NAME, // 2 Element names cannot be "xmlns" or have "xmlns:" as a prefix
- XML_ERR_ELEMENT_NAME_MISMATCH, // 3 The element name inside the "" does not match the element name in the opening "<"
- XML_ERR_PREFIX_NOT_DEFINED, // 4 The prefix for the element or attribute has not been defined with an "xmlns:prefix=" attribute somewhere
- XML_ERR_EXPECTING_GT, // 5 Expecting a '>'
- XML_ERR_EXPECTING_ELEMENT_LT, // 6 Expecting a '<' to begin an element name
- XML_ERR_EXPECTING_EQ, // 7 Expecting a '=' after the attribute name
- XML_ERR_MULTIPLE_XMLNS_DECLS, // 8 Multiple "xmlns" default namespace declarations in an element
- XML_ERR_MULTIPLE_PREFIX_DECLS, // 9 Multiple definitions for the same prefix ("xmlns:prefix=...") in an element
- XML_ERR_EXPECTING_QUEST_GT, // 10 Expecting "?>" to terminate " FDB.ui64CurrTransID
- // ui32LogicalEOF --> FDB.uiLogicalEOF
- // ui32FirstAvailBlkAddr --> FDB.uiFirstAvailBlkAddr;
- // IMPORTANT NOTE: The following items cannot currently be changed
- // during an update transaction:
- // ui32DbVersion
- // ui16BlockSize
- // ui8DefaultLanguage
- // ui32MaxFileSize
- // ui32FirstLFBlkAddr
- // This is because they are always accessed from pFile->lastCommittedDbHdr
- // regardless of transaction type. If we ever want to change them in an
- // update transaction, we will need to modify flmGetDbHdrInfo to copy them
- // into the FDB, and then only access them from within the FDB.
-
- FLMUINT32 ui32DbVersion; // LOG_FLAIM_VERSION
- FLMUINT8 ui8BlkChkSummingEnabled; // Is block checksumming enabled?
- // Not currently used.
- FLMUINT8 ui8RflKeepFiles; // LOG_KEEP_RFL_FILES
- FLMUINT8 ui8RflAutoTurnOffKeep; // LOG_AUTO_TURN_OFF_KEEP_RFL
- FLMUINT8 ui8RflKeepAbortedTrans; // LOG_KEEP_ABORTED_TRANS_IN_RFL
- FLMUINT32 ui32RflCurrFileNum; // LOG_RFL_FILE_NUM
- FLMUINT64 ui64LastRflCommitID; // LOG_LAST_RFL_COMMIT_ID
- FLMUINT32 ui32RflLastFileNumDeleted; // LOG_LAST_RFL_FILE_DELETED
- FLMUINT32 ui32RflLastTransOffset; // LOG_RFL_LAST_TRANS_OFFSET
- FLMUINT32 ui32RflLastCPFileNum; // LOG_RFL_LAST_CP_FILE_NUM
- FLMUINT32 ui32RflLastCPOffset; // LOG_RFL_LAST_CP_OFFSET
- FLMUINT64 ui64RflLastCPTransID; // LOG_LAST_CP_TRANS_ID
- FLMUINT32 ui32RflMinFileSize; // LOG_RFL_MIN_FILE_SIZE
- FLMUINT32 ui32RflMaxFileSize; // LOG_RFL_MAX_FILE_SIZE
- FLMUINT64 ui64CurrTransID; // LOG_CURR_TRANS_ID
- FLMUINT64 ui64TransCommitCnt; // LOG_COMMIT_COUNT
- FLMUINT32 ui32RblEOF; // LOG_ROLLBACK_EOF
- FLMUINT32 ui32RblFirstCPBlkAddr; // LOG_PL_FIRST_CP_BLOCK_ADDR
- FLMUINT32 ui32FirstAvailBlkAddr; // LOG_PF_AVAIL_BLKS
- FLMUINT32 ui32FirstLFBlkAddr; // First logical file block.
- FLMUINT32 ui32LogicalEOF; // LOG_LOGICAL_EOF
- FLMUINT32 ui32MaxFileSize; // LOG_MAX_FILE_SIZE
- FLMUINT64 ui64LastBackupTransID; // LOG_LAST_BACKUP_TRANS_ID
- FLMUINT32 ui32IncBackupSeqNum; // LOG_INC_BACKUP_SEQ_NUM
- FLMUINT32 ui32BlksChangedSinceBackup;// LOG_BLK_CHG_SINCE_BACKUP
-
- #define XFLM_SERIAL_NUM_SIZE 16
-
- FLMBYTE ucDbSerialNum[ XFLM_SERIAL_NUM_SIZE];
- // LOG_DB_SERIAL_NUM
- FLMBYTE ucLastTransRflSerialNum[ XFLM_SERIAL_NUM_SIZE];
- // LOG_LAST_TRANS_RFL_SERIAL_NUM
- FLMBYTE ucNextRflSerialNum[ XFLM_SERIAL_NUM_SIZE];
- // LOG_RFL_NEXT_SERIAL_NUM
- FLMBYTE ucIncBackupSerialNum[ XFLM_SERIAL_NUM_SIZE];
- // LOG_INC_BACKUP_SERIAL_NUM
- FLMUINT32 ui32DbKeyLen; // LOG_DATABASE_KEY_LEN
-
- // IMPORTANT NOTE: If anything is changed in here, need to make
- // corresponding changes to convertDbHdr routine and
- // flmVerifyDiskStructOffsets routine.
-
- FLMBYTE ucReserved[ 64]; // Reserved for future
- // Always initialized to zero
-
- // Checksum should ALWAYS be last
-
- FLMUINT32 ui32HdrCRC; // LOG_HDR_CHECKSUM
-
- // Encryption Key stuff
-
- #define XFLM_MAX_ENC_KEY_SIZE 256
-
- FLMBYTE DbKey[ XFLM_MAX_ENC_KEY_SIZE];
- // LOG_DATABASE_KEY
-
- // Offsets of variables in the structure
-
- #define XFLM_DB_HDR_szSignature_OFFSET 0
- #define XFLM_DB_HDR_ui8IsLittleEndian_OFFSET 8
- #define XFLM_DB_HDR_ui8DefaultLanguage_OFFSET 9
- #define XFLM_DB_HDR_ui16BlockSize_OFFSET 10
- #define XFLM_DB_HDR_ui32DbVersion_OFFSET 12
- #define XFLM_DB_HDR_ui8BlkChkSummingEnabled_OFFSET 16
- #define XFLM_DB_HDR_ui8RflKeepFiles_OFFSET 17
- #define XFLM_DB_HDR_ui8RflAutoTurnOffKeep_OFFSET 18
- #define XFLM_DB_HDR_ui8RflKeepAbortedTrans_OFFSET 19
- #define XFLM_DB_HDR_ui32RflCurrFileNum_OFFSET 20
- #define XFLM_DB_HDR_ui64LastRflCommitID_OFFSET 24
- #define XFLM_DB_HDR_ui32RflLastFileNumDeleted_OFFSET 32
- #define XFLM_DB_HDR_ui32RflLastTransOffset_OFFSET 36
- #define XFLM_DB_HDR_ui32RflLastCPFileNum_OFFSET 40
- #define XFLM_DB_HDR_ui32RflLastCPOffset_OFFSET 44
- #define XFLM_DB_HDR_ui64RflLastCPTransID_OFFSET 48
- #define XFLM_DB_HDR_ui32RflMinFileSize_OFFSET 56
- #define XFLM_DB_HDR_ui32RflMaxFileSize_OFFSET 60
- #define XFLM_DB_HDR_ui64CurrTransID_OFFSET 64
- #define XFLM_DB_HDR_ui64TransCommitCnt_OFFSET 72
- #define XFLM_DB_HDR_ui32RblEOF_OFFSET 80
- #define XFLM_DB_HDR_ui32RblFirstCPBlkAddr_OFFSET 84
- #define XFLM_DB_HDR_ui32FirstAvailBlkAddr_OFFSET 88
- #define XFLM_DB_HDR_ui32FirstLFBlkAddr_OFFSET 92
- #define XFLM_DB_HDR_ui32LogicalEOF_OFFSET 96
- #define XFLM_DB_HDR_ui32MaxFileSize_OFFSET 100
- #define XFLM_DB_HDR_ui64LastBackupTransID_OFFSET 104
- #define XFLM_DB_HDR_ui32IncBackupSeqNum_OFFSET 112
- #define XFLM_DB_HDR_ui32BlksChangedSinceBackup_OFFSET 116
- #define XFLM_DB_HDR_ucDbSerialNum_OFFSET 120
- #define XFLM_DB_HDR_ucLastTransRflSerialNum_OFFSET 136
- #define XFLM_DB_HDR_ucNextRflSerialNum_OFFSET 152
- #define XFLM_DB_HDR_ucIncBackupSerialNum_OFFSET 168
- #define XFLM_DB_HDR_ui32DbKeyLen 184
- #define XFLM_DB_HDR_ucReserved_OFFSET 188
- #define XFLM_DB_HDR_ui32HdrCRC_OFFSET 252
- #define XFLM_DB_HDR_DbKey 256
- } XFLM_DB_HDR;
-
- /****************************************************************************
- Desc: IO Flags
- ****************************************************************************/
- #define XFLM_IO_CURRENT_POS FLM_MAX_UINT64
-
- #define XFLM_IO_RDONLY 0x0001
- #define XFLM_IO_RDWR 0x0002
- #define XFLM_IO_EXCL 0x0004
- #define XFLM_IO_CREATE_DIR 0x0008
- #define XFLM_IO_SH_DENYRW 0x0010
- #define XFLM_IO_SH_DENYWR 0x0020
- #define XFLM_IO_SH_DENYNONE 0x0040
- #define XFLM_IO_DIRECT 0x0080
-
- // File Positioning Definitions
-
- #define XFLM_IO_SEEK_SET 0 // Beginning of File
- #define XFLM_IO_SEEK_CUR 1 // Current File Pointer Position
- #define XFLM_IO_SEEK_END 2 // End of File
-
- // uiFlags values for keyRetrieve() method
-
- #define XFLM_INCL 0x0010
- #define XFLM_EXCL 0x0020
- #define XFLM_EXACT 0x0040
- #define XFLM_KEY_EXACT 0x0080
- #define XFLM_FIRST 0x0100
- #define XFLM_LAST 0x0200
- #define XFLM_MATCH_IDS 0x0400
- #define XFLM_MATCH_DOC_ID 0x0800
-
- // Flags used by openDb method
-
- #define XFLM_ONLINE 0x0020
- #define XFLM_DONT_REDO_LOG 0x0040
- #define XFLM_DONT_RESUME_THREADS 0x0080
- #define XFLM_DO_LOGICAL_CHECK 0x0100
- #define XFLM_SKIP_DOM_LINK_CHECK 0x0200 // Used only in dbCheck.
- #define XFLM_ALLOW_LIMITED_MODE 0x0400
-
- // Maximum file size
-
- #define XFLM_MAXIMUM_FILE_SIZE 0xFFFC0000
-
- // Maximum key size
-
- #define XFLM_MAX_KEY_SIZE 1024
-
- // Node types. The order of these enums
- // must be preserved as the code sometimes
- // depends on the order to test ranges of
- // node types.
-
- typedef enum
- {
- INVALID_NODE = 0x00,
- DOCUMENT_NODE = 0x01,
- ELEMENT_NODE = 0x02,
- DATA_NODE = 0x03,
- COMMENT_NODE = 0x04,
- CDATA_SECTION_NODE = 0x05,
- ANNOTATION_NODE = 0x06,
- PROCESSING_INSTRUCTION_NODE = 0x07,
- ATTRIBUTE_NODE = 0x08,
- ANY_NODE_TYPE = 0xFFFF
- } eDomNodeType;
-
- // NOTE: The eNodeInsertLoc enum values cannot
- // be changed. The RFL uses these values
- // when logging packets.
-
- typedef enum
- {
- XFLM_ROOT = 0,
- XFLM_FIRST_CHILD,
- XFLM_LAST_CHILD,
- XFLM_PREV_SIB,
- XFLM_NEXT_SIB,
- XFLM_ATTRIBUTE
- } eNodeInsertLoc;
-
- // NOTE: The order of the eDbTransType enum values
- // cannot be changed. XFLAIM tests ranges of these
- // values.
-
- typedef enum
- {
- XFLM_NO_TRANS = 0,
- XFLM_READ_TRANS,
- XFLM_UPDATE_TRANS
- } eDbTransType;
-
- typedef enum
- {
- XFLM_LOCK_NONE = 0,
- XFLM_LOCK_EXCLUSIVE,
- XFLM_LOCK_SHARED
- } eDbLockType;
-
- // Transaction flags
-
- #define XFLM_DONT_KILL_TRANS 0x1
- #define XFLM_DONT_POISON_CACHE 0x2
-
- // Defines used for uiMaxLockWait parameter
-
- #define XFLM_NO_TIMEOUT 0xFF
-
- // Backup types
-
- typedef enum
- {
- // These values are stored in the header of the
- // backup, so do not change their values.
- XFLM_FULL_BACKUP = 0,
- XFLM_INCREMENTAL_BACKUP
- } eDbBackupType;
-
- // FLAIM Data types.
-
- #define XFLM_NODATA_TYPE 0
- #define XFLM_TEXT_TYPE 1
- #define XFLM_NUMBER_TYPE 2
- #define XFLM_BINARY_TYPE 3
- #define XFLM_NUM_OF_TYPES 4
- #define XFLM_UNKNOWN_TYPE 0xF
-
- #define XFLM_STRING_OPTION_STR "string"
- #define XFLM_INTEGER_OPTION_STR "integer"
- #define XFLM_BINARY_OPTION_STR "binary"
- #define XFLM_NODATA_OPTION_STR "nodata"
- #define XFLM_CHECKING_OPTION_STR "checking"
- #define XFLM_PURGE_OPTION_STR "purge"
- #define XFLM_ACTIVE_OPTION_STR "active"
- #define XFLM_INDEX_SUSPENDED_STR "suspended"
- #define XFLM_INDEX_OFFLINE_STR "offline"
- #define XFLM_INDEX_ONLINE_STR "online"
- #define XFLM_CASE_INSENSITIVE_OPTION_STR "caseinsensitive"
- #define XFLM_DESCENDING_OPTION_STR "sortdescending"
- #define XFLM_MISSING_HIGH_OPTION_STR "sortmissinghigh"
- #define XFLM_MINSPACES_OPTION_STR "minspaces"
- #define XFLM_WHITESPACE_AS_SPACE_STR "whitespaceasspace"
- #define XFLM_IGNORE_LEADINGSPACES_OPTION_STR "ignoreleadingspaces"
- #define XFLM_IGNORE_TRAILINGSPACES_OPTION_STR "ignoretrailingspaces"
- #define XFLM_NOUNDERSCORE_OPTION_STR "nounderscores"
- #define XFLM_NOSPACE_OPTION_STR "nospaces"
- #define XFLM_NODASH_OPTION_STR "nodashes"
- #define XFLM_VALUE_OPTION_STR "value"
- #define XFLM_PRESENCE_OPTION_STR "presence"
- #define XFLM_SUBSTRING_OPTION_STR "substring"
- #define XFLM_EACHWORD_OPTION_STR "eachword"
- #define XFLM_ABS_POS_OPTION_STR "abspos"
- #define XFLM_METAPHONE_OPTION_STR "metaphone"
-
- // Encryption Schemes
-
- #define XFLM_ENC_AES_OPTION_STR "aes"
- #define XFLM_ENC_DES3_OPTION_STR "des3"
-
- // Recovery actions
-
- typedef enum
- {
- XFLM_RESTORE_ACTION_CONTINUE = 0, // Continue recovery
- XFLM_RESTORE_ACTION_STOP, // Stop recovery
- XFLM_RESTORE_ACTION_SKIP, // Skip operation (future)
- XFLM_RESTORE_ACTION_RETRY // Retry the operation
- } eRestoreAction;
-
- // Events
-
- typedef enum
- {
- XFLM_EVENT_LOCKS,
- XFLM_EVENT_UPDATES,
- XFLM_MAX_EVENT_CATEGORIES // Should always be last.
- } eEventCategory;
-
- typedef enum
- {
- XFLM_EVENT_LOCK_WAITING,
- XFLM_EVENT_LOCK_GRANTED,
- XFLM_EVENT_LOCK_SUSPENDED,
- XFLM_EVENT_LOCK_RESUMED,
- XFLM_EVENT_LOCK_RELEASED,
- XFLM_EVENT_LOCK_TIMEOUT,
- XFLM_EVENT_BEGIN_TRANS,
- XFLM_EVENT_COMMIT_TRANS,
- XFLM_EVENT_ABORT_TRANS,
- XFLM_EVENT_CREATE_NODE,
- XFLM_EVENT_MODIFY_NODE,
- XFLM_EVENT_DELETE_NODE,
- XFLM_EVENT_LINK_NODE,
- XFLM_EVENT_UNLINK_NODE,
- XFLM_EVENT_INDEXING_PROGRESS,
- XFLM_MAX_EVENT_TYPES // Should always be last.
- } eEventType;
-
- // Logical files
-
- typedef enum
- {
- XFLM_LF_INVALID = 0,
- XFLM_LF_COLLECTION,
- XFLM_LF_INDEX
- } eLFileType;
-
- // Message logging
-
- typedef enum
- {
- XFLM_QUERY_MESSAGE,
- XFLM_TRANSACTION_MESSAGE,
- XFLM_GENERAL_MESSAGE,
- XFLM_NUM_MESSAGE_TYPES
- } eLogMessageType;
-
- typedef enum
- {
- XFLM_CURRENT_COLOR,
- XFLM_BLACK,
- XFLM_BLUE,
- XFLM_GREEN,
- XFLM_CYAN,
- XFLM_RED,
- XFLM_PURPLE,
- XFLM_BROWN,
- XFLM_LIGHTGRAY,
- XFLM_DARKGRAY,
- XFLM_LIGHTBLUE,
- XFLM_LIGHTGREEN,
- XFLM_LIGHTCYAN,
- XFLM_LIGHTRED,
- XFLM_LIGHTPURPLE,
- XFLM_YELLOW,
- XFLM_WHITE,
- XFLM_NUM_COLORS
- } eColorType;
-
- typedef struct
- {
- FLMBOOL bRunning;
- FLMUINT uiRunningTime;
- FLMBOOL bForcingCheckpoint;
- FLMUINT uiForceCheckpointRunningTime;
- FLMINT iForceCheckpointReason;
- #define XFLM_CP_TIME_INTERVAL_REASON 1
- #define XFLM_CP_SHUTTING_DOWN_REASON 2
- #define XFLM_CP_RFL_VOLUME_PROBLEM 3
- FLMBOOL bWritingDataBlocks;
- FLMUINT uiLogBlocksWritten;
- FLMUINT uiDataBlocksWritten;
- FLMUINT uiDirtyCacheBytes;
- FLMUINT uiBlockSize;
- FLMUINT uiWaitTruncateTime;
- } XFLM_CHECKPOINT_INFO;
-
- typedef struct
- {
- FLMUINT64 ui64Slabs;
- FLMUINT64 ui64SlabBytes;
- FLMUINT64 ui64AllocatedCells;
- FLMUINT64 ui64FreeCells;
- } XFLM_SLAB_USAGE;
-
- typedef struct
- {
- FLMUINT uiByteCount;
- FLMUINT uiCount;
- FLMUINT uiOldVerCount;
- FLMUINT uiOldVerBytes;
- FLMUINT uiCacheHits;
- FLMUINT uiCacheHitLooks;
- FLMUINT uiCacheFaults;
- FLMUINT uiCacheFaultLooks;
- XFLM_SLAB_USAGE slabUsage;
- } XFLM_CACHE_USAGE;
-
- typedef struct
- {
- FLMUINT64 ui64TotalExtendedMemory;
- FLMUINT64 ui64RemainingExtendedMemory;
- FLMUINT64 ui64TotalBytesAllocated;
- FLMUINT64 ui64CacheHits;
- FLMUINT64 ui64CacheFaults;
- } XFLM_ECACHE_USAGE;
-
- typedef struct
- {
- FLMUINT uiMaxBytes;
- FLMUINT uiTotalBytesAllocated;
- FLMBOOL bDynamicCacheAdjust;
- FLMUINT uiCacheAdjustPercent;
- FLMUINT uiCacheAdjustMin;
- FLMUINT uiCacheAdjustMax;
- FLMUINT uiCacheAdjustMinToLeave;
- FLMUINT uiDirtyCount;
- FLMUINT uiDirtyBytes;
- FLMUINT uiNewCount;
- FLMUINT uiNewBytes;
- FLMUINT uiLogCount;
- FLMUINT uiLogBytes;
- FLMUINT uiFreeCount;
- FLMUINT uiFreeBytes;
- FLMUINT uiReplaceableCount;
- FLMUINT uiReplaceableBytes;
- FLMBOOL bPreallocatedCache;
- XFLM_CACHE_USAGE BlockCache;
- XFLM_CACHE_USAGE NodeCache;
- XFLM_ECACHE_USAGE ECache;
- } XFLM_CACHE_INFO;
-
- typedef struct
- {
- FLMUINT64 ui64Count; // Number of times operation
- // was performed.
- FLMUINT64 ui64ElapMilli; // Total elapsed time for the
- // operations.
- } XFLM_COUNT_TIME_STAT;
-
- typedef struct
- {
- FLMUINT64 ui64Count; // Number of times read or
- // write operation was
- // performed.
- FLMUINT64 ui64TotalBytes; // Total number of bytes
- // involved in the read or
- // write operations.
- FLMUINT64 ui64ElapMilli; // Total elapsed time for the
- // read or write operations.
- } XFLM_DISKIO_STAT;
-
- typedef struct
- {
- XFLM_COUNT_TIME_STAT CommittedTrans; // Transactions committed
- XFLM_COUNT_TIME_STAT AbortedTrans; // Transactions aborted
- } XFLM_RTRANS_STATS;
-
- typedef struct
- {
- XFLM_COUNT_TIME_STAT CommittedTrans; // Transactions committed
- XFLM_COUNT_TIME_STAT GroupCompletes; // Group completes.
- FLMUINT64 ui64GroupFinished; // Transactions finished in group
- XFLM_COUNT_TIME_STAT AbortedTrans; // Transactions aborted
- } XFLM_UTRANS_STATS;
-
- typedef struct
- {
- XFLM_DISKIO_STAT BlockReads; // Statistics on block reads.
- XFLM_DISKIO_STAT OldViewBlockReads; // Statistics on old view
- // block reads.
- FLMUINT uiBlockChkErrs; // Number of times we had
- // check errors reading
- // blocks.
- FLMUINT uiOldViewBlockChkErrs; // Number of times we had
- // check errors reading an
- // old view of a block.
- FLMUINT uiOldViewErrors; // Number of times we had an
- // old view error when
- // reading.
- XFLM_DISKIO_STAT BlockWrites; // Statistics on Block writes.
- } XFLM_BLOCKIO_STATS;
-
- typedef struct
- {
- FLMBOOL bHaveStats; // Flag indicating whether or
- // not there are statistics
- // for this LFILE.
- XFLM_BLOCKIO_STATS RootBlockStats; // Block I/O statistics for root
- // blocks.
- XFLM_BLOCKIO_STATS MiddleBlockStats; // Block I/O statistics for
- // blocks that are not root
- // blocks or leaf blocks.
- XFLM_BLOCKIO_STATS LeafBlockStats; // Block I/O statistics for leaf
- // blocks.
- FLMUINT64 ui64BlockSplits; // Number of block splits that
- // have occurred in this logical
- // file.
- FLMUINT64 ui64BlockCombines; // Number of block combines that
- // have occurred in this LFile
- FLMUINT uiLFileNum; // Logical file number.
- eLFileType eLfType; // Logical file type.
- } XFLM_LFILE_STATS;
-
- typedef struct
- {
- char * pszDbName; // Database name - from pFile.
- FLMBOOL bHaveStats; // Flag indicating whether or
- // not there are statistics
- // for this database.
- XFLM_RTRANS_STATS ReadTransStats; // Read Transaction
- // Statistics.
- XFLM_UTRANS_STATS UpdateTransStats; // Update Transaction
- // Statistics.
- FLMUINT uiLFileAllocSeq; // Allocation sequence number
- // for LFILE array.
- XFLM_LFILE_STATS * pLFileStats; // Pointer to LFILE statistics
- // array.
- FLMUINT uiLFileStatArraySize; // Size of LFILE statistics
- // array.
- FLMUINT uiNumLFileStats; // Number of elements in LFILE
- // array currently in use.
- XFLM_BLOCKIO_STATS LFHBlockStats; // Block I/O statistics for
- // LFH blocks.
- XFLM_BLOCKIO_STATS AvailBlockStats; // Block I/O statistics for
- // AVAIL blocks.
-
- // Write statistics
-
- XFLM_DISKIO_STAT DbHdrWrites; // Statistics on DB header
- // writes.
- XFLM_DISKIO_STAT LogBlockWrites; // Statistics on log block
- // writes
- XFLM_DISKIO_STAT LogBlockRestores; // Statistics on log block
- // restores
-
- // Read statistics.
-
- XFLM_DISKIO_STAT LogBlockReads; // Statistics on log block
- // reads.
- FLMUINT uiLogBlockChkErrs; // Number of times we had
- // checksum errors reading
- // blocks from the rollback
- // log.
- FLMUINT uiReadErrors; // Number of times we got read
- // errors.
- FLMUINT uiWriteErrors; // Number of times we got write
- // errors.
- // Lock statistics
-
- XFLM_COUNT_TIME_STAT NoLocks; // Times when no lock was held
- XFLM_COUNT_TIME_STAT WaitingForLock; // Time waiting for lock
- XFLM_COUNT_TIME_STAT HeldLock; // Time holding lock
-
- } XFLM_DB_STATS;
-
- typedef struct
- {
- XFLM_DB_STATS * pDbStats; // Pointer to array of database
- // statistics.
- FLMUINT uiDBAllocSeq; // Allocation sequence number
- // for database statistics.
- FLMUINT uiDbStatArraySize; // Size of the database statistics
- // array.
- FLMUINT uiNumDbStats; // Number of elements in the
- // database statistics array that
- // are currently in use.
- FLMBOOL bCollectingStats; // Flag indicating whether or
- // not we are currently
- // collecting statistics.
- FLMUINT uiStartTime; // Time we started collecting
- // statistics.
- FLMUINT uiStopTime; // Time we stopped collecting
- // statistics.
- } XFLM_STATS;
-
- typedef enum
- {
- XFLM_INDEX_ONLINE = 0,
- XFLM_INDEX_BRINGING_ONLINE,
- XFLM_INDEX_SUSPENDED
- } eXFlmIndexState;
-
- typedef struct
- {
- FLMUINT uiIndexNum; // Index number
- eXFlmIndexState eState;
-
- // Statistics when eState is INDEX_BRINGING_ONLINE
-
- FLMUINT uiStartTime; // Start time of the offline process or zero.
- FLMUINT64 ui64LastDocumentIndexed;// If ~0 then index is online,
- // otherwise this is the value of the last
- // document ID that was indexed.
- FLMUINT64 ui64KeysProcessed; // Keys processed for offline thread.
- FLMUINT64 ui64DocumentsProcessed; // Documents processed for offline thread.
- FLMUINT64 ui64Transactions; // Number of transactions started by the
- // indexing thread
- } XFLM_INDEX_STATUS;
-
- /****************************************************************************
- Desc: The following structures are used to pass data to the client via the
- IF_DbRebuildStatus interface
- ****************************************************************************/
- typedef struct
- {
- FLMINT iDoingFlag;
- #define REBUILD_GET_BLK_SIZ 1
- #define REBUILD_RECOVER_DICT 2
- #define REBUILD_RECOVER_DATA 3
- FLMBOOL bStartFlag;
- FLMUINT64 ui64FileSize;
- FLMUINT64 ui64BytesExamined;
- FLMUINT64 ui64TotNodes;
- FLMUINT64 ui64NodesRecov;
- FLMUINT64 ui64DiscardedDocs;
- } XFLM_REBUILD_INFO;
-
- typedef struct
- {
- FLMINT iErrCode; // Zero means no error is being reported
- FLMUINT uiErrLocale;
- #define XFLM_LOCALE_NONE 0
- #define XFLM_LOCALE_LFH_LIST 1
- #define XFLM_LOCALE_AVAIL_LIST 2
- #define XFLM_LOCALE_B_TREE 3
- #define XFLM_LOCALE_INDEX 4
- FLMUINT uiErrLfNumber;
- FLMUINT uiErrLfType;
- FLMUINT uiErrBTreeLevel;
- FLMUINT uiErrBlkAddress;
- FLMUINT uiErrParentBlkAddress;
- FLMUINT uiErrElmOffset;
- FLMUINT64 ui64ErrNodeId;
-
- IF_DataVector * ifpErrIxKey;
- } XFLM_CORRUPT_INFO;
-
- typedef struct
- {
- FLMINT iCheckPhase;
- #define XFLM_CHECK_LFH_BLOCKS 1
- #define XFLM_CHECK_B_TREE 2
- #define XFLM_CHECK_AVAIL_BLOCKS 3
- #define XFLM_CHECK_RS_SORT 4
- #define XFLM_CHECK_DOM_LINKS 5
- FLMBOOL bStartFlag;
- FLMUINT64 ui64FileSize;
- FLMUINT uiNumLFs;
- FLMUINT uiCurrLF;
- FLMUINT uiLfNumber; /* Logical File Pass */
- FLMUINT uiLfType;
- FLMUINT64 ui64BytesExamined;
- FLMUINT uiNumProblemsFixed; /* Number of corruptions repaired */
- FLMUINT64 ui64NumDomNodes; /* in the current Lf */
- FLMUINT64 ui64NumDomLinksVerified; /* in the current Lf */
- FLMUINT64 ui64NumBrokenDomLinks; /* in the current Lf */
-
- /* Index check progress */
-
- FLMUINT64 ui64NumKeys; /* Number of keys in the result set */
- FLMUINT64 ui64NumDuplicateKeys; /* Number of duplicate keys generated */
- FLMUINT64 ui64NumKeysExamined; /* Number of keys checked */
- FLMUINT64 ui64NumKeysNotFound; /* Keys in index but missing from document */
- FLMUINT64 ui64NumDocKeysNotFound; /* Keys in documents but missing from indexes */
- FLMUINT64 ui64NumConflicts; /* # of non-corruption conflicts */
- } XFLM_PROGRESS_CHECK_INFO;
-
- /**************************************************************************
- Desc: STUFF FOR IF_Query interface
- **************************************************************************/
- typedef enum
- {
- XFLM_UNKNOWN_OP = 0,
-
- // NOTE: These operators MUST stay in this order - this order is assumed
- // by the precedence table - see fquery.cpp
-
- XFLM_AND_OP = 1,
- XFLM_OR_OP = 2,
- XFLM_NOT_OP = 3,
- XFLM_EQ_OP = 4,
- XFLM_NE_OP = 5,
- XFLM_APPROX_EQ_OP = 6,
- XFLM_LT_OP = 7,
- XFLM_LE_OP = 8,
- XFLM_GT_OP = 9,
- XFLM_GE_OP = 10,
- XFLM_BITAND_OP = 11,
- XFLM_BITOR_OP = 12,
- XFLM_BITXOR_OP = 13,
- XFLM_MULT_OP = 14,
- XFLM_DIV_OP = 15,
- XFLM_MOD_OP = 16,
- XFLM_PLUS_OP = 17,
- XFLM_MINUS_OP = 18,
- XFLM_NEG_OP = 19,
- XFLM_LPAREN_OP = 20,
- XFLM_RPAREN_OP = 21,
- XFLM_COMMA_OP = 22,
- XFLM_LBRACKET_OP = 23,
- XFLM_RBRACKET_OP = 24,
-
- // IMPORTANT NOTE: If operators are added after this point,
- // modify the isLegalOperator method below.
-
- // The following operators are only used internally. They
- // may NOT be passed into the addOperator method.
-
- XFLM_EXISTS_OP = 25,
- XFLM_RANGE_OP = 26,
- XFLM_MATCH_OP = 27
- } eQueryOperators;
-
- #define XFLM_FIRST_ARITH_OP XFLM_BITAND_OP
- #define XFLM_LAST_ARITH_OP XFLM_NEG_OP
-
- // Comparison rules for strings
-
- #define XFLM_COMP_CASE_INSENSITIVE 0x0001
- #define XFLM_COMP_COMPRESS_WHITESPACE 0x0002
- // Compress consecutive spaces to single space
- #define XFLM_COMP_NO_WHITESPACE 0x0004
- // Ignore all whitespace. This and
- // COMP_COMPRESS_WHITESPACE cannot be used
- // together.
- #define XFLM_COMP_NO_UNDERSCORES 0x0008
- // Convert underscores to whitespace. NOTE: This
- // should be applied before COMP_COMPRESS_WHITESPACE
- // or COMP_NO_WHITESPACE
- #define XFLM_COMP_NO_DASHES 0x0010
- // Remove all dashes
- #define XFLM_COMP_WHITESPACE_AS_SPACE 0x0020
- // Convert tab, NL, and CR characters
- // to space
- #define XFLM_COMP_IGNORE_LEADING_SPACE 0x0040
- // Ignore leading space characters
- #define XFLM_COMP_IGNORE_TRAILING_SPACE 0x0080
- // Ignore trailing space characters
-
- typedef enum
- {
- XFLM_QUERY_NOT_POSITIONED,
- XFLM_QUERY_AT_BOF,
- XFLM_QUERY_AT_FIRST,
- XFLM_QUERY_AT_FIRST_AND_LAST,
- XFLM_QUERY_POSITIONED,
- XFLM_QUERY_AT_LAST,
- XFLM_QUERY_AT_EOF
- } eQueryStates;
-
- typedef enum
- {
- XFLM_FUNC_xxx = 0
- } eQueryFunctions;
-
- typedef enum
- {
- ROOT_AXIS = 0,
- CHILD_AXIS,
- PARENT_AXIS,
- ANCESTOR_AXIS,
- DESCENDANT_AXIS,
- FOLLOWING_SIBLING_AXIS,
- PRECEDING_SIBLING_AXIS,
- FOLLOWING_AXIS,
- PRECEDING_AXIS,
- ATTRIBUTE_AXIS,
- NAMESPACE_AXIS,
- SELF_AXIS,
- DESCENDANT_OR_SELF_AXIS,
- ANCESTOR_OR_SELF_AXIS,
- META_AXIS
- } eXPathAxisTypes;
-
- typedef enum
- {
- XFLM_FALSE = 0,
- XFLM_TRUE,
- XFLM_UNKNOWN
- } XFlmBoolType;
-
- typedef enum QueryValueTypes
- {
- XFLM_MISSING_VAL = 0,
-
- // WARNING: Don't renumber below _VAL enums without
- // re-doing gv_DoValAndDictTypesMatch table
-
- XFLM_BOOL_VAL = 1, // 1 // XFlmBoolType
- XFLM_UINT_VAL, // 2 // FLMUINT
- XFLM_UINT64_VAL, // 3 // FLMUINT64
- XFLM_INT_VAL, // 4 // FLMINT
- XFLM_INT64_VAL, // 5 // FLMINT64
- XFLM_BINARY_VAL, // 6 // FLMBYTE *
- XFLM_UTF8_VAL, // 7 // FLMBYTE *
-
- // XFLM_PASSING_VAL passes all criteria.
-
- XFLM_PASSING_VAL = 0xFFFF
- } eValTypes;
-
- typedef enum
- {
- GET_FIRST_VAL = 0,
- GET_LAST_VAL,
- GET_NEXT_VAL,
- GET_PREV_VAL
- } ValIterator;
-
- typedef enum
- {
- XFLM_QOPT_NONE = 0,
- XFLM_QOPT_USING_INDEX,
- XFLM_QOPT_FULL_COLLECTION_SCAN,
- XFLM_QOPT_SINGLE_NODE_ID,
- XFLM_QOPT_NODE_ID_RANGE
- } eQOptTypes;
-
- typedef struct
- {
- eQOptTypes eOptType; // Type of optimization done
- FLMUINT uiCost; // Cost calculated for predicate
- FLMUINT64 ui64NodeId; // Only valid if eOptType is
- // XFLM_QOPT_SINGLE_NODE_ID or
- // XFLM_QOPT_NODE_ID_RANGE
- FLMUINT64 ui64EndNodeId; // Only valid if eOptType is
- // XFLM_QOPT_NODE_ID_RANGE
- FLMUINT uiIxNum; // Index used to execute query if
- // eOptType == QOPT_USING_INDEX
- FLMBYTE szIxName[ 80];
- FLMBOOL bMustVerifyPath; // Must verify node path.
- FLMBOOL bDoNodeMatch; // Node must be retrieved to exe
- // query. Only valid if eOptType
- // is XFLM_QOPT_USING_INDEX.
- FLMUINT bCanCompareOnKey; // Can we compare on index keys? Only
- // valid if eOptType == XFLM_QOPT_USING_INDEX.
- FLMUINT64 ui64KeysRead;
- FLMUINT64 ui64KeyHadDupDoc;
- FLMUINT64 ui64KeysPassed;
- FLMUINT64 ui64NodesRead;
- FLMUINT64 ui64NodesTested;
- FLMUINT64 ui64NodesPassed;
- FLMUINT64 ui64DocsRead;
- FLMUINT64 ui64DupDocsEliminated;
- FLMUINT64 ui64NodesFailedValidation;
- FLMUINT64 ui64DocsFailedValidation;
- FLMUINT64 ui64DocsPassed;
- } XFLM_OPT_INFO;
-
- /**************************************************************************
- * XFLAIM Dictionary Tag Numbers
- *
- * NOTES:
- * 1) These numbers cannot be changed for backward compatibility reasons.
- * 2) IF ANY NEW TAGS ARE INSERTED - Then you MUST change the database
- * version number, because old databases will become invalid.....
- *
- ***************************************************************************/
-
- // Special purpose collections
- // NOTE: Do not change the order of these definitions. The
- // getNextCollection routine assumes they are in this order.
-
- // We have reserved from 65501 to 65535 for internal collections
- // These should be allocated starting from 65535 and going down.
-
- #define XFLM_MAX_COLLECTION_NUM 65500
-
- #define XFLM_MAINT_COLLECTION 65533
- #define XFLM_DATA_COLLECTION 65534
- #define XFLM_DICT_COLLECTION 65535
-
- FINLINE FLMBOOL isDictCollection(
- FLMUINT uiCollectionNum)
- {
- return( (uiCollectionNum == XFLM_DICT_COLLECTION) ? TRUE : FALSE);
- }
-
- // Special purpose indexes
- // NOTE: Do not change the order of these definitions. The
- // getNextIndex routine assumes they are in this order.
-
- // We have reserved from 65501 to 65535 for internal indexes
- // These should be allocated starting from 65535 and going down.
-
- #define XFLM_MAX_INDEX_NUM 65500
- #define XFLM_DICT_NUMBER_INDEX 65534
- #define XFLM_DICT_NAME_INDEX 65535
-
- // This is the reserved dictionary document that maintains
- // information about dictionary IDs
-
- #define XFLM_DICTINFO_DOC_ID ((FLMUINT64)1)
-
- // Prefixes
-
- #define XFLM_MAX_PREFIX_NUM 65500
-
- // Encryption Defs
-
- #define XFLM_MAX_ENCDEF_NUM 65500
-
- /****************************************************************************
- Dictionary Identifiers
- ****************************************************************************/
- #define XFLM_FIRST_RESERVED_ELEMENT_TAG 0xFFFFFE00
- // Special definitions - cannot actually be used for an element name ID, but
- // in indexing specifies the root tag
- #define ELM_ROOT_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG - 1)
-
- #define ELM_ELEMENT_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 0)
- #define ELM_ELEMENT_TAG_NAME "element"
- #define ELM_ATTRIBUTE_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 1)
- #define ELM_ATTRIBUTE_TAG_NAME "attribute"
- #define ELM_INDEX_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 2)
- #define ELM_INDEX_TAG_NAME "Index"
- #define ELM_ELEMENT_COMPONENT_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 4)
- #define ELM_ELEMENT_COMPONENT_TAG_NAME "ElementComponent"
- #define ELM_ATTRIBUTE_COMPONENT_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 5)
- #define ELM_ATTRIBUTE_COMPONENT_TAG_NAME "AttributeComponent"
- #define ELM_COLLECTION_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 6)
- #define ELM_COLLECTION_TAG_NAME "Collection"
- #define ELM_PREFIX_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 7)
- #define ELM_PREFIX_TAG_NAME "Prefix"
- #define ELM_NEXT_DICT_NUMS_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 8)
- #define ELM_NEXT_DICT_NUMS_TAG_NAME "NextDictNums"
- #define ELM_DOCUMENT_TITLE_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 9)
- #define ELM_DOCUMENT_TITLE_TAG_NAME "DocumentTitle"
- #define ELM_INVALID_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 10)
- #define ELM_INVALID_TAG_NAME "Invalid"
- #define ELM_QUARANTINED_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 11)
- #define ELM_QUARANTINED_TAG_NAME "Quarantined"
- #define ELM_ALL_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 12)
- #define ELM_ALL_TAG_NAME "All"
- #define ELM_ANNOTATION_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 13)
- #define ELM_ANNOTATION_TAG_NAME "Annotation"
- #define ELM_ANY_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 14)
- #define ELM_ANY_TAG_NAME "Any"
- #define ELM_ATTRIBUTE_GROUP_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 15)
- #define ELM_ATTRIBUTE_GROUP_TAG_NAME "AttributeGroup"
- #define ELM_CHOICE_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 16)
- #define ELM_CHOICE_TAG_NAME "Choice"
- #define ELM_COMPLEX_CONTENT_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 17)
- #define ELM_COMPLEX_CONTENT_TAG_NAME "ComplexContent"
- #define ELM_COMPLEX_TYPE_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 18)
- #define ELM_COMPLEX_TYPE_TAG_NAME "ComplexType"
- #define ELM_DOCUMENTATION_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 19)
- #define ELM_DOCUMENTATION_TAG_NAME "Documentation"
- #define ELM_ENUMERATION_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 20)
- #define ELM_ENUMERATION_TAG_NAME "enumeration"
- #define ELM_EXTENSION_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 21)
- #define ELM_EXTENSION_TAG_NAME "extension"
- #define ELM_DELETE_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 22)
- #define ELM_DELETE_TAG_NAME "Delete"
- #define ELM_BLOCK_CHAIN_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 23)
- #define ELM_BLOCK_CHAIN_TAG_NAME "BlockChain"
- #define ELM_ENCDEF_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 24)
- #define ELM_ENCDEF_TAG_NAME "EncDef"
- #define ELM_SWEEP_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 25)
- #define ELM_SWEEP_TAG_NAME "Sweep"
-
- // IMPORTANT NOTE: Change this value whenever adding new reserved element tags!
- #define XFLM_LAST_RESERVED_ELEMENT_TAG ELM_SWEEP_TAG
-
-
- #define XFLM_FIRST_RESERVED_ATTRIBUTE_TAG 0xFFFFFE00
-
- #define ATTR_DICT_NUMBER_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 0)
- #define ATTR_DICT_NUMBER_TAG_NAME "DictNumber"
- #define ATTR_COLLECTION_NUMBER_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 1)
- #define ATTR_COLLECTION_NUMBER_TAG_NAME "CollectionNumber"
- #define ATTR_COLLECTION_NAME_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 2)
- #define ATTR_COLLECTION_NAME_TAG_NAME "CollectionName"
- #define ATTR_NAME_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 3)
- #define ATTR_NAME_TAG_NAME "name"
- #define ATTR_TARGET_NAMESPACE_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 4)
- #define ATTR_TARGET_NAMESPACE_TAG_NAME "targetNameSpace"
- #define ATTR_TYPE_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 5)
- #define ATTR_TYPE_TAG_NAME "type"
- #define ATTR_STATE_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 6)
- #define ATTR_STATE_TAG_NAME "State"
- #define ATTR_LANGUAGE_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 7)
- #define ATTR_LANGUAGE_TAG_NAME "Language"
- #define ATTR_INDEX_OPTIONS_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 8)
- #define ATTR_INDEX_OPTIONS_TAG_NAME "IndexOptions"
- #define ATTR_INDEX_ON_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 9)
- #define ATTR_INDEX_ON_TAG_NAME "IndexOn"
- #define ATTR_REQUIRED_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 10)
- #define ATTR_REQUIRED_TAG_NAME "Required"
- #define ATTR_LIMIT_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 11)
- #define ATTR_LIMIT_TAG_NAME "Limit"
- #define ATTR_COMPARE_RULES_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 12)
- #define ATTR_COMPARE_RULES_TAG_NAME "CompareRules"
- #define ATTR_KEY_COMPONENT_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 13)
- #define ATTR_KEY_COMPONENT_TAG_NAME "KeyComponent"
- #define ATTR_DATA_COMPONENT_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 14)
- #define ATTR_DATA_COMPONENT_TAG_NAME "DataComponent"
- #define ATTR_LAST_DOC_INDEXED_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 15)
- #define ATTR_LAST_DOC_INDEXED_TAG_NAME "LastDocumentIndexed"
- #define ATTR_NEXT_ELEMENT_NUM_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 16)
- #define ATTR_NEXT_ELEMENT_NUM_TAG_NAME "NextElementNum"
- #define ATTR_NEXT_ATTRIBUTE_NUM_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 17)
- #define ATTR_NEXT_ATTRIBUTE_NUM_TAG_NAME "NextAttributeNum"
- #define ATTR_NEXT_INDEX_NUM_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 18)
- #define ATTR_NEXT_INDEX_NUM_TAG_NAME "NextIndexNum"
- #define ATTR_NEXT_COLLECTION_NUM_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 19)
- #define ATTR_NEXT_COLLECTION_NUM_TAG_NAME "NextCollectionNum"
- #define ATTR_NEXT_PREFIX_NUM_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 20)
- #define ATTR_NEXT_PREFIX_NUM_TAG_NAME "NextPrefixNum"
- #define ATTR_SOURCE_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 21)
- #define ATTR_SOURCE_TAG_NAME "Source"
- #define ATTR_STATE_CHANGE_COUNT_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 22)
- #define ATTR_STATE_CHANGE_COUNT_TAG_NAME "StateChangeCount"
- #define ATTR_XMLNS_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 23)
- #define ATTR_XMLNS_TAG_NAME "xmlns"
- #define ATTR_ABSTRACT_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 24)
- #define ATTR_ABSTRACT_TAG_NAME "abstract"
- #define ATTR_BASE_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 25)
- #define ATTR_BASE_TAG_NAME "base"
- #define ATTR_BLOCK_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 26)
- #define ATTR_BLOCK_TAG_NAME "block"
- #define ATTR_DEFAULT_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 27)
- #define ATTR_DEFAULT_TAG_NAME "default"
- #define ATTR_FINAL_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 28)
- #define ATTR_FINAL_TAG_NAME "final"
- #define ATTR_FIXED_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 29)
- #define ATTR_FIXED_TAG_NAME "fixed"
- #define ATTR_ITEM_TYPE_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 30)
- #define ATTR_ITEM_TYPE_TAG_NAME "itemtype"
- #define ATTR_MEMBER_TYPES_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 31)
- #define ATTR_MEMBER_TYPES_TAG_NAME "membertypes"
- #define ATTR_MIXED_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 32)
- #define ATTR_MIXED_TAG_NAME "mixed"
- #define ATTR_NILLABLE_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 33)
- #define ATTR_NILLABLE_TAG_NAME "nillable"
- #define ATTR_REF_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 34)
- #define ATTR_REF_TAG_NAME "ref"
- #define ATTR_USE_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 35)
- #define ATTR_USE_TAG_NAME "use"
- #define ATTR_VALUE_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 36)
- #define ATTR_VALUE_TAG_NAME "value"
- #define ATTR_ADDRESS_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 37)
- #define ATTR_ADDRESS_TAG_NAME "address"
- #define ATTR_XMLNS_XFLAIM_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 38)
- #define ATTR_XMLNS_XFLAIM_TAG_NAME "xmlns:xflaim"
- #define ATTR_ENCRYPTION_KEY_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 39)
- #define ATTR_ENCRYPTION_KEY_TAG_NAME "Key"
- #define ATTR_TRANSACTION_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 40)
- #define ATTR_TRANSACTION_TAG_NAME "Transaction"
- #define ATTR_NEXT_ENCDEF_NUM_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 41)
- #define ATTR_NEXT_ENCDEF_NUM_TAG_NAME "NextEncDefNum"
- #define ATTR_ENCRYPTION_ID_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 42)
- #define ATTR_ENCRYPTION_ID_TAG_NAME "encId"
- #define ATTR_ENCRYPTION_KEY_SIZE_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 43)
- #define ATTR_ENCRYPTION_KEY_SIZE_TAG_NAME "keySize"
- #define ATTR_UNIQUE_SUB_ELEMENTS_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 44)
- #define ATTR_UNIQUE_SUB_ELEMENTS_TAG_NAME "UniqueSubElements"
-
- // IMPORTANT NOTE: Change this value whenever adding new reserved attribute tags!
-
- #define XFLM_LAST_RESERVED_ATTRIBUTE_TAG ATTR_UNIQUE_SUB_ELEMENTS_TAG
-
- // max element number is first reserved -2 instead of -1 because we don't want
- // anyone using ELM_ROOT_TAG either.
-
- #define XFLM_MAX_ELEMENT_NUM (XFLM_FIRST_RESERVED_ELEMENT_TAG - 2)
- #define XFLM_MAX_ATTRIBUTE_NUM (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG - 1)
-
- // Types of metadata available on DOM nodes - can index on these.
- // Also, can search on these via the META_AXIS
-
- #define XFLM_META_NODE_ID 1
- #define XFLM_META_DOCUMENT_ID 2
- #define XFLM_META_PARENT_ID 3
- #define XFLM_META_FIRST_CHILD_ID 4
- #define XFLM_META_LAST_CHILD_ID 5
- #define XFLM_META_NEXT_SIBLING_ID 6
- #define XFLM_META_PREV_SIBLING_ID 7
- #define XFLM_META_VALUE 8
-
- #define XFLM_INI_CACHE "cache"
- #define XFLM_INI_CACHE_ADJUST_INTERVAL "cacheadjustinterval"
- #define XFLM_INI_CACHE_CLEANUP_INTERVAL "cachecleanupinterval"
- #define XFLM_INI_MAX_DIRTY_CACHE "maxdirtycache"
- #define XFLM_INI_LOW_DIRTY_CACHE "lowdirtycache"
-
- /****************************************************************************
- Desc: Reference Counting class
- ****************************************************************************/
- class XF_RefCount
- {
- public:
-
- XF_RefCount()
- {
- m_ui32RefCnt = 1;
- }
-
- virtual ~XF_RefCount()
- {
- }
-
- virtual FINLINE FLMUINT getRefCount( void)
- {
- return( m_ui32RefCnt);
- }
-
- virtual FINLINE FLMUINT32 XFLMAPI AddRef( void)
- {
- m_ui32RefCnt++;
- return m_ui32RefCnt;
- }
-
- virtual FINLINE FLMUINT32 XFLMAPI Release( void)
- {
- FLMUINT32 ui32RefCnt = --m_ui32RefCnt;
-
- if( !ui32RefCnt)
- {
- delete this;
- }
-
- return( ui32RefCnt);
- }
-
- protected:
-
- FLMUINT32 m_ui32RefCnt;
- };
-
- // Class ID for the F_DbSystemFactory class (which is defined in fcompub.h).
- // We don't need a separate interface definition because it implements the
- // well-known PCIClassFactory interface.
-
- // {EBF905EE-43F1-45e1-A477-6C459AF26F76}
- XFLM_DEFINE_GUID( Internal_CLSID_F_DbSystemFactory, 0xebf905ee, 0x43f1,
- 0x45e1, 0xa4, 0x77, 0x6c, 0x45, 0x9a, 0xf2, 0x6f, 0x76);
-
- #define CLSID_F_DbSystemFactory (s_guid &)(Internal_CLSID_F_DbSystemFactory)
-
- // {B3A01545-F5F9-4618-AC6E-5FD606BF8F92}
- XFLM_DEFINE_GUID(Internal_IID_IF_DbSystem, 0xb3a01545, 0xf5f9, 0x4618,
- 0xac, 0x6e, 0x5f, 0xd6, 0x6, 0xbf, 0x8f, 0x92);
-
- #define IID_IF_DbSystem (s_guid &)(Internal_IID_IF_DbSystem)
-
- // Defaults for certain other settable items in the IF_DbSystem
-
- #define XFLM_DEFAULT_MAX_CP_INTERVAL 180
- #define XFLM_DEFAULT_CACHE_ADJUST_PERCENT 70
- #define XFLM_DEFAULT_CACHE_ADJUST_MIN (16 * 1024 * 1024)
- #define XFLM_DEFAULT_CACHE_ADJUST_MAX 0xE0000000
- #define XFLM_DEFAULT_CACHE_ADJUST_MIN_TO_LEAVE 0
- #define XFLM_DEFAULT_CACHE_ADJUST_INTERVAL 15
- #define XFLM_DEFAULT_CACHE_CLEANUP_INTERVAL 15
- #define XFLM_DEFAULT_UNUSED_CLEANUP_INTERVAL 2
- #define XFLM_DEFAULT_MAX_UNUSED_TIME 120
- #define XFLM_DEFAULT_FILE_EXTEND_SIZE (8192 * 1024)
- #define XFLM_MIN_BLOCK_SIZE 4096
- #define XFLM_MAX_BLOCK_SIZE 8192
- #define XFLM_DEFAULT_OPEN_THRESHOLD 100 // 100 file handles to cache
- #define XFLM_DEFAULT_MAX_AVAIL_TIME 900 // 15 minutes
- #define XFLM_DEFAULT_REHASH_BACKOFF_INTERVAL 60 // 1 minute
-
- /**
- * @brief The IF_DbSystem is actually an interface definition that provides public access
- * to the XFlaim database environment.
- *
- * This class represents the XFlaim database system. It extends XFLMIUnknown.
- * The IF_DbSystem interface is used to represent the actual database system object.
- * The database system object incorporates functionality to startup, shutdown, create,
- * open and copy an XFlaim database. Note that the database system when XFlaim is
- * running is more than the files that store the data. The database system also
- * includes all of the in-memory structures and objects that are used, either
- * intermittently or throughout the life of the database system. The class id for
- * this interface is CLSID_F_DbSystemFactory and the interface id is IID_IF_DbSystem.
- */
- xflminterface IF_DbSystem : public XFLMIUnknown
- {
- /**
- * @brief Initializes the database system object.
- *
- * The init method is used to startup the database system engine. This routine may
- * be called multiple times within the same process space. For each time the init
- * method is called, there must be a corresponding call to exit. The database engine
- * will only shut down on the last call to exit.
- */
- virtual RCODE XFLMAPI init( void) = 0;
-
- virtual RCODE XFLMAPI updateIniFile(
- const char * pszParamName,
- const char * pszValue) = 0;
-
- /**
- * @brief Shuts down the database system and closes any open databases.
- *
- * The exit method is used to shutdown the database system engine. This routine allows
- * itself to be called multiple times, even before init is called or if the call to init fails.
- */
- virtual void XFLMAPI exit() = 0;
-
- /**
- * @brief Return an IF_FileSystem object for performing file system operations.
- *
- * The getFileSystem method returns an IF_FileSystem object that can be used to
- * perform various operations on files.
- *
- * @param ppFileSystem A pointer to a file system object that can
- * be used to perform various operations on files.
- */
- virtual void XFLMAPI getFileSystem(
- IF_FileSystem ** ppFileSystem) = 0;
-
- /**
- * @brief Creates a new database.
- *
- * A pointer to a database object (IF_Db) is returned in the ppDb parameter. The database system
- * engine must first be started using the init method. After creating a new XFlaim database,
- * the database is open and ready to use.
- *
- * @param pszDbFileName Name of the control file for the database. See the XFlaim Concepts/Database
- * Files for a discussion on the different database files, including the control file.
- * @param pszDataDir The directory where the data files are to be created. If a NULL is passed in,
- * data files will be created in the same directory as the control file (as specified by the
- * pszDbFileName parameter). See the XFlaim Concepts/Database Files for a discussion on the different
- * database files.
- * @param pszRflDir The directory where the RFL (roll forward log) files are to be located. If a
- * NULL is passed, roll forward log files will reside in the same directory as the control file
- * (as specified by the pszDbFileName parameter). See the XFlaim Concepts/Database Files for a
- * discussion on the different database files, including the rfl (Roll-forward log) file.
- * @param pszDictFileName Name of file containing dictionary definitions to be imported into the
- * dictionary collection during database creation. Note that this parameter is ignored if pzDictBuf
- * is non-NULL. See the XFlaim Concepts section for more information about the XFlaim Dictionary.
- * @param pszDictBuf Null-terminated string buffer containing dictionary definitions in external
- * XML format. If the value of this parameter is NULL, pszDictFileName will be used. If both
- * pszDictFileName and pszDictBuf are NULL, the database will be created with an empty dictionary.
- * See the XFlaim Concepts section for more information about the XFlaim Dictionary.
- * @param pCreateOpts Create options for the database. All members of the structure should be
- * initialized to specify options desired when the database is created. If NULL is passed as
- * the value of this parameter, default options will be used. See the glossary for a description
- * of the XFLM_CREATE_OPTS structure and the default value for each field.
- * @param ppDb A pointer to a database object that references the newly created database.
- * @return RCODE
- */
- virtual RCODE XFLMAPI dbCreate(
- const char * pszDbFileName,
- const char * pszDataDir,
- const char * pszRflDir,
- const char * pDictFileName,
- const char * pszDictBuf,
- XFLM_CREATE_OPTS * pCreateOpts,
- IF_Db ** ppDb) = 0;
-
- /**
- * @brief Opens an existing database.
- *
- * The dbOpen method opens an existing database. A pointer to a database object (IF_Db) is returned
- * in the ppDb parameter. The database system engine must first be started using the init method.
- * After opening an XFlaim database, the database is ready to use.
- *
- * @param pszDbFileName Name of the control file for the database that is to be opened. See the
- * XFlaim Concepts/Database Files for a discussion on the different database files, including the control file.
- * @param pszDataDir The directory where the data files are located. If a NULL is passed in,
- * it is assumed that the data files are located in the same directory as the control file
- * (as specified by the pszDbFileName parameter). See the XFlaim Concepts/Database Files for a
- * discussion on the different database files.
- * @param pszRflDir The directory where the RFL (roll forward log) files are located. If a NULL
- * is passed, roll forward log files are assumed to reside in the same directory as the control file
- * (as specified by the pszDbFileName parameter). See the XFlaim Concepts/Database Files for a
- * discussion on the different database files, including the rfl (Roll-forward log) file.
- * @param ppDb A pointer to a database object that references the newly created database.
- * @return RCODE
- */
- virtual RCODE XFLMAPI dbOpen(
- const char * pszDbFileName,
- const char * pszDataDir,
- const char * pszRflDir,
- const char * pszPassword,
- FLMBOOL bAllowLimited,
- IF_Db ** ppDb) = 0;
-
- /**
- * @brief Rebuilds a database.
- *
- * The dbRebuild method will attempt to reconstruct a database, recovering everything that it can
- * from the blocks of the database.
- *
- * @param pszSourceDbFileName Name of the source control file for the database that is to be rebuilt.
- * See the XFlaim Concepts/Database Files for a discussion on the different database files,
- * including the control file.
- * @param pszSourceDataDir The directory where the data files are located. If a NULL is passed in,
- * it is assumed that the data files are located in the same directory as the control file
- * (as specified by the pszSourceDbFileName parameter). See the XFlaim Concepts/Database Files
- * for a discussion on the different database files.
- * @param pszDestDbFileName Name of the destination control file for the recovered database.
- * See the XFlaim Concepts/Database Files for a discussion on the different database files,
- * including the control file.
- * @param pszDestDataDir The directory where the data files are to be located. If a NULL is
- * passed in, it is assumed that the data files are to be located in the same directory as
- * the control file (as specified by the pszDestDbFileName parameter). See the XFlaim
- * Concepts/Database Files for a discussion on the different database files.
- * @param pszDestRflDir The directory where the RFL (roll forward log) files of the
- * destination database are to be created. If a NULL is passed, roll forward log files are
- * assumed to reside in the same directory as the control file (as specified by the
- * pszDestDbFileName parameter). See the XFlaim Concepts/Database Files for a discussion
- * on the different database files, including the rfl (Roll-forward log) file.
- * @param pszDictFileName The name of a file containing the dictionary definitions that
- * will be used when rebuilding the database. A NULL may be passed in this parameter.
- * In addition to using the definitions specified in this file, dbRebuild will attempt
- * to recover any additional dictionary entries from the dictionary collection.
- * See XFlaim Concepts / Dictionary for a discussion on the dictionary in XFlaim.
- * @param pCreateOpts Create options for the database. All members of the structure should
- * be initialized to specify options desired when the database is created. If NULL is passed
- * as the value of this parameter, default options will be used. See the glossary for a description
- * of the XFLM_CREATE_OPTS structure and the default value for each field.
- * @param pDbRebuild A pointer to an application defined status reporting object. Methods
- * on this object are used by dbRebuild to report progress during the rebuild. A NULL may be
- * passed in this parameter. This object is NOT implemented by XFlaim, but is implemented by
- * the application. The application must create a class that inherits from the IF_DbRebuildStatus
- * interface and implements the pure virtual methods of that interface.
- * @param pui64TotalNodes The total number of DOM nodes.
- * @param pui64NodesRecovered The total number of DOM nodes recovered.
- * @param pui64NodesDiscardedDocs The total number of documents that couldn't be recovered.
- * @return RCODE
- */
- virtual RCODE XFLMAPI dbRebuild(
- const char * pszSourceDbPath,
- const char * pszSourceDataDir,
- const char * pszDestDbPath,
- const char * pszDestDataDir,
- const char * pszDestRflDir,
- const char * pszDictPath,
- const char * pszPassword,
- XFLM_CREATE_OPTS * pCreateOpts,
- FLMUINT64 * pui64TotNodes,
- FLMUINT64 * pui64NodesRecov,
- FLMUINT64 * pui64DiscardedDocs,
- IF_DbRebuildStatus * pDbRebuild) = 0;
-
- /**
- * @brief Checks a database for corruptions.
- *
- * The dbCheck method will check the database for corruptions ans in certain cases it can repair them.
- *
- * @param pszDbFileName Name of the control file for the database that is to be checked.
- * See the XFlaim Concepts/Database Files for a discussion on the different database files,
- * including the control file.
- * @param pszDataDir The directory where the data files are located. If a NULL is passed in,
- * it is assumed that the data files are located in the same directory as the control file
- * (as specified by the pszDbFileName parameter). See the XFlaim Concepts/Database Files for a
- * discussion on the different database files.
- * @param pszRflDir The directory where the RFL (roll forward log) files are located. If a NULL is
- * passed, roll forward log files are assumed to reside in the same directory as the control file
- * (as specified by the pszDbFileName parameters). See the XFlaim Concepts/Database Files for a
- * discussion on the different database files, including the rfl (Roll-forward log) file.
- * @param pDbCheckStatus A pointer to an application defined status reporting object. Methods
- * on this object are used by dbCheck to report progress and corruptions to the calling application.
- * A NULL may be passed in this parameter. This object is NOT implemented by XFlaim, but is
- * implemented by the application. The application must create a class that inherits from the
- * IF_DbCheckStatus interface and implements the pure virtual methods of that interface.
- * @param ppDbInfo If a non-NULL ppDbInfo pointer is passed, an IF_DbInfo object will be returned
- * that contains detailed statistical information about the various B-trees in the database.
- * The information includes things like percent utilization of various blocks at each level in
- * a B-tree, number of keys, etc. Methods of the IF_DbInfo object provide for retrieval of this information.
- * @return RCODE
- */
- virtual RCODE XFLMAPI dbCheck(
- const char * pszDbFileName,
- const char * pszDataDir,
- const char * pszRflDir,
- const char * pszPassword,
- FLMUINT uiFlags,
- IF_DbInfo ** ppDbInfo,
- IF_DbCheckStatus * pDbCheckStatus) = 0;
-
- /**
- * @brief Copies a database.
- *
- * Copies a database to a new database. The destination database will be created if it
- * does not exist and overwritten if it does exist.
- *
- * @param pszSrcDbName Name of the control file for the database that is to be copied.
- * See the XFlaim Concepts/Database Files for a discussion on the different database files,
- * including the control file.
- * @param pszSrcDataDir The directory where the source database's data files are located.
- * If a NULL is passed in, it is assumed that the source database's data files are located in
- * the same directory as the source database's control file (as specified by the pszSrcDbName
- * parameter). See the XFlaim Concepts/Database Files for a discussion on the different database files.
- * @param pszSrcRflDir The directory where the RFL (roll forward log) files of the source database
- * are located. If a NULL is passed, the roll forward log files of the source database are assumed
- * to reside in the same directory as the source database's control file (as specified by the pszSrcDbName
- * parameter). See the XFlaim Concepts/Database Files for a discussion on the different database files,
- * including the rfl (Roll-forward log) file.
- * @param pszDestDbName Name of the control file for the destination database. If the destination
- * database already exists, it will be overwritten. See the XFlaim Concepts/Database Files for a
- * discussion on the different database files, including the control file.
- * @param pszDestDataDir The directory where the destination database's data files are to be stored.
- * If a NULL is passed in, the destination database's data files will be put in the same directory
- * as the destination database's control file (as specified by the pszDestDbName parameter).
- * See the XFlaim Concepts/Database Files for a discussion on the different database files.
- * @param pszDestRflDir The directory where the RFL (roll forward log) files of the destination database
- * are to be put. If a NULL is passed, the roll forward log files of the destination database will be
- * put in the same directory as the destination database's control file (as specified by the
- * pszDestDbName parameter). See the XFlaim Concepts/Database Files for a discussion on the different
- * database files, including the rfl (Roll-forward log) file.
- * @param ifpStatus A pointer to an application defined status reporting object. Methods on this object
- * are used by dbCopy to report progress during the copy. A NULL may be passed in this parameter.
- * This object is NOT implemented by XFlaim, but is implemented by the application. The application
- * must create a class that inherits from the IF_DbCopyStatus interface and implements the pure virtual
- * methods of that interface. Those methods may be called by dbCopy to report copy progress.
- * @return RCODE
- */
- virtual RCODE XFLMAPI dbCopy(
- const char * pszSrcDbName,
- const char * pszSrcDataDir,
- const char * pszSrcRflDir,
- const char * pszDestDbName,
- const char * pszDestDataDir,
- const char * pszDestRflDir,
- IF_DbCopyStatus * ifpStatus) = 0;
-
- /**
- * @brief Renames a database.
- *
- * This method will rename an existing database to a specified new name.
- *
- * @param pszDbName Name of the control file for the database that is to be renamed.
- * See the XFlaim Concepts/Database Files for a discussion on the different database files,
- * including the control file.
- * @param pszDataDir The directory where the database's data files are located. If a NULL
- * is passed in, it is assumed that the data files are located in the same directory as the
- * control file (as specified by the pszDbName parameter). See the XFlaim Concepts/Database
- * Files for a discussion on the different database files.
- * @param pszRflDir The directory where the RFL (roll forward log) files of the database
- * are located. If a NULL is passed, the roll forward log files of the database are assumed
- * to reside in the same directory as the control file (as specified by the pszDbName parameter).
- * See the XFlaim Concepts/Database Files for a discussion on the different database files,
- * including the RFL (Roll-forward log) file.
- * @param pszNewDbName Name the control file is to be renamed to. This name also determines
- * what data files and RFL files will be renamed to. See the XFlaim Concepts/Database Files
- * for a discussion on the different database files, including the control file. Note that the
- * directory of the new database name must be the same as the directory specified in pszDbName.
- * @param bOverwriteDestOk If pszNewDbName specifies the name of a file that already exists,
- * this flag indicates whether that file should be deleted so that the rename can proceed.
- * If FALSE, the rename will fail.
- * @param ifpStatus A pointer to an application defined status reporting object. Methods on
- * this object are used by dbRename to report progress during the rename. A NULL may be passed
- * in this parameter. This object is NOT implemented by XFlaim, but is implemented by the
- * application. The application must create a class that inherits from the IF_DbRenameStatus
- * interface and implements the pure virtual methods of that interface.
- * @return RCODE
- */
- virtual RCODE XFLMAPI dbRename(
- const char * pszDbName,
- const char * pszDataDir,
- const char * pszRflDir,
- const char * pszNewDbName,
- FLMBOOL bOverwriteDestOk,
- IF_DbRenameStatus * ifpStatus) = 0;
-
- /**
- * @brief Removes a database.
- *
- * This method will remove (delete) an existing database.
- *
- * @param pszDbName Name of the control file for the database that is to be removed.
- * See the XFlaim Concepts/Database Files for a discussion on the different database
- * files, including the control file.
- * @param pszDataDir The directory where the database's data files are located. If a
- * NULL is passed in, it is assumed that the data files are located in the same directory
- * as the control file (as specified by the pszDbName parameter). See the XFlaim
- * Concepts/Database Files for a discussion on the different database files.
- * @param pszRflDir The directory where the RFL (roll forward log) files of the database are
- * located. If a NULL is passed, the roll forward log files of the database are assumed to
- * reside in the same directory as the control file (as specified by the pszDbName parameter).
- * See the XFlaim Concepts/Database Files for a discussion on the different database files,
- * including the RFL (Roll-forward log) file.
- * @param bRemoveRflFiles A flag that indicate whether or not the RFL file(s) should be removed as well.
- * @return RCODE
- */
- virtual RCODE XFLMAPI dbRemove(
- const char * pszDbName,
- const char * pszDataDir,
- const char * pszRflDir,
- FLMBOOL bRemoveRflFiles) = 0;
-
- /**
- * @brief Restores a database from a backup set.
- *
- * This method will restore a database from a backup set. The client is responsible for
- * providing an implementation of the IF_RestoreClient and IF_RestoreStatus interfaces.
- *
- * @param pszDbPath Name of the control file (including path) for the database that is to
- * be restored. See the XFlaim Concepts/Database Files for a discussion on the different
- * database files, including the control file.
- * @param pszDataDir The directory where the database's data files are located. If a
- * NULL is passed in, it is assumed that the data files are located in the same directory
- * as the control file (as specified by the pszDbName parameter). See the XFlaim
- * Concepts/Database Files for a discussion on the different database files.
- * @param pszBackupPath The path to the backup file set.
- * @param pszRflDir The directory where the RFL (roll forward log) files of the database
- * are located. If a NULL is passed, the roll forward log files of the database are
- * assumed to reside in the same directory as the control file (as specified by the
- * pszDbName parameter). See the XFlaim Concepts/Database Files for a discussion on
- * the different database files, including the RFL (Roll-forward log) file.
- * @param pRestoreObj A pointer to an application defined restore client object. Methods
- * on this object are used by dbRestore to read the backed-up data from the location it is
- * stored in. The application is responsible for implementing this object. In this way,
- * an application can have a database restored from virtually any media.
- * If a NULL is passed in this parameter, pszBackupPath is used to restore from.
- * Visit: Need to say something about the default backup file set.
- * @param pRestoreStatus A pointer to an application defined restore status object.
- * Methods on this object are used by dbRestore to report progress during the restore.
- * The application is responsible for implementing this object.
- * @return RCODE
- */
- virtual RCODE XFLMAPI dbRestore(
- const char * pszDbPath,
- const char * pszDataDir,
- const char * pszRflDir,
- const char * pszBackupPath,
- const char * pszPassword,
- IF_RestoreClient * pRestoreObj,
- IF_RestoreStatus * pRestoreStatus) = 0;
-
- /**
- * @brief Duplicates the IF_Db interface object.
- *
- * @par
- * This method will duplicate the IF_Db interface object. It is similar to the dbOpen method,
- * except that it doesn't take a database file name as input, but takes an already open IF_Db
- * object as input. The returned IF_Db object is the same as if it had been created by the dbOpen
- * method. However, calling dbDup is slightly more efficient than calling dbOpen.
- * @par
- * Since IF_Db objects cannot be shared between threads (they are not thread-safe), an application
- * would normally have each of its threads call dbOpen to obtain an IF_Db object. The dbDup
- * method provides an alternative way to create IF_Db objects for multiple threads.
- * For example, one thread could call dbOpen to obtain the first IF_Db object. Thereafter,
- * it could call dbDup and pass the created IF_Db objects to different threads.
- * @par
- * Although the most common use of dbDup is to create IF_Db objects and pass them to different
- * threads, it is conceivable that one thread might want multiple IF_Db objects on the same
- * database. The uses for this are probably somewhat exotic. For example, a single thread
- * using multiple IF_Db objects could have multiple different transactions open simultaneously.
- *
- * @param pDb The database object to be duplicated.
- * @param ppDb A new database object.
- * @return RCODE
- */
- virtual RCODE XFLMAPI dbDup(
- IF_Db * pDb,
- IF_Db ** ppDb) = 0;
-
- /**
- * @brief Converts an RCODE error number to a string equivalent.
- *
- * This method converts an RCODE error number to a string equivalent that can then be printed in
- * a diagnostic log or some other human readable output.
- *
- * @param rc The RCODE to be translated.
- * @return const char *
- */
- virtual const char * XFLMAPI errorString(
- RCODE rc) = 0;
-
- /**
- * @brief Converts a corruption code to a string equivalent.
- *
- * This method converts a corruption code to a string equivalent that can then be printed in
- * a diagnostic log or some other human readable output.
- *
- * @param iErrCode The error code to be translated.
- * @return const char *
- */
- virtual const char * XFLMAPI checkErrorToStr(
- FLMINT iCheckErrorCode) = 0;
-
- /**
- * @brief Opens a buffered input stream.
- *
- * This method opens a buffered input stream. The pucBuffer buffer holds that data that is to be
- * streamed through the IF_PosIStream object. NOTE: The returned IF_PosIStream object's Release()
- * method should be called when the application is done using the object.
- *
- * @param pucBuffer The buffer that will be associated with the input stream.
- * @param uiLength The size of the buffer (bytes).
- * @param ppIStream The input stream object used to read the data in.
- * @return RCODE
- */
- virtual RCODE XFLMAPI openBufferIStream(
- const char * pucBuffer,
- FLMUINT uiLength,
- IF_PosIStream ** ppIStream) = 0;
-
- /**
- * @brief Opens a file input stream.
- *
- * This method opens a file input stream. The pszPath parameter points to a file that holds the data
- * that is to be streamed through the IF_PosIStream object. NOTE: The returned IF_PosIStream object's
- * Release() method should be called when the application is done using the object.
- *
- * @param pszPath The name of file whose data is to be read via the IF_PosIStream object.
- * @param ppIStream The input stream object used to read the data in.
- * @return RCODE
- */
- virtual RCODE XFLMAPI openFileIStream(
- const char * pszPath,
- IF_PosIStream ** ppIStream) = 0;
-
- /**
- * @brief Open a multi-file input stream.
- *
- * (*ppIStream)->read() will read data from the files in the directory (pszDirectory)
- * that match the base name given (pszBaseName). EOF is returned when there are no
- * more files to read from. File names start with pszBaseName, then
- * pszBaseName.00000001, pszBaseName.00000002, etc. The extension is a hex number.
- */
- virtual RCODE XFLMAPI openMultiFileIStream(
- const char * pszDirectory,
- const char * pszBaseName,
- IF_IStream ** ppIStream) = 0;
-
- /**
- * @brief Convert an input stream (pIStream) into a buffered input stream (*ppIStream)
- *
- * When (*ppIStream)->read() is called, it will fill an internal buffer of
- * uiBufferSize by reading from pIStream. Data is returned from the buffer until
- * the buffer is emptied, at which time another read will be done from pIStream,
- * until pIStream has no more data to return. This method allows any input stream
- * to be turned into a buffered stream.
- */
- virtual RCODE XFLMAPI openBufferedIStream(
- IF_IStream * pIStream,
- FLMUINT uiBufferSize,
- IF_IStream ** ppIStream) = 0;
-
- /**
- * @brief Read uncompressed data from a compressed stream (pIStream)
- *
- * When (*ppIStream)->read() is called, it will read and uncompress data from
- * pIStream.
- */
- virtual RCODE XFLMAPI openUncompressingIStream(
- IF_IStream * pIStream,
- IF_IStream ** ppIStream) = 0;
-
- // METHODS FOR GETTING OUTPUT STREAM OBJECTS
-
- /**
- * @brief Create a file output stream.
- *
- * Data is written out to the specified file. The file may be created, overwritten, or
- * appended to, depending on iAccessFlags.
- */
- virtual RCODE XFLMAPI openFileOStream(
- const char * pszFileName,
- FLMBOOL bTruncateIfExists,
- IF_OStream ** ppOStream) = 0;
-
- /**
- * @brief Create a multi-file output stream.
- *
- * Data is written to the specified directory, creating files using the given
- * base file name. When a file reaches the specified size, another file will
- * be created by appending a suffix with an incrementing HEX number. The
- * bOverwrite flag indicates whether to overwrite files that already exist.
- */
- virtual RCODE XFLMAPI openMultiFileOStream(
- const char * pszDirectory,
- const char * pszBaseName,
- FLMUINT uiMaxFileSize,
- FLMBOOL bOkToOverwrite,
- IF_OStream ** ppStream) = 0;
-
- /**
- * @brief Remove a multi-file stream
- */
- virtual RCODE XFLMAPI removeMultiFileStream(
- const char * pszDirectory,
- const char * pszBaseName) = 0;
-
- /**
- * @brief Convert an output stream (pOStream) into a buffered output stream (*ppOStream)
- *
- * As data is written to *ppOStream, it is buffered before ultimately being
- * written to pOStream.
- */
- virtual RCODE XFLMAPI openBufferedOStream(
- IF_OStream * pOStream,
- FLMUINT uiBufferSize,
- IF_OStream ** ppOStream) = 0;
-
- /**
- * @brief Convert an output stream (pOStream) into a compressed output stream (*ppOStream)
- *
- * As data is written to *ppOStream, it is compressed before ultimately being
- * written to pOStream.
- */
- virtual RCODE XFLMAPI openCompressingOStream(
- IF_OStream * pOStream,
- IF_OStream ** ppOStream) = 0;
-
- /**
- * @brief All data is read from the input stream (pIStream) and written
- * to the output stream (pOStream). This goes until pIStream returns EOF.
- */
- virtual RCODE XFLMAPI writeToOStream(
- IF_IStream * pIStream,
- IF_OStream * pOStream) = 0;
-
- /**
- * @brief Opens a base64 encoder stream
- *
- * This method opens a stream for encoding a user-supplied input stream to
- * base64 (ASCII).
- *
- * @param pInputStream The stream to be encoded
- * @param bInsertLineBreaks A line break will be inserted every 72
- * characters
- * @param ppEncodedStream The stream object used to read the encoded data.
- * @return RCODE
- */
- virtual RCODE XFLMAPI openBase64Encoder(
- IF_IStream * pInputStream,
- FLMBOOL bInsertLineBreaks,
- IF_IStream ** ppEncodedStream) = 0;
-
- /**
- * @brief Opens a base64 decoder stream
- *
- * This method opens a stream for decoding a user-supplied input stream from
- * base64 (ASCII) to binary.
- *
- * @param pInputStream The stream to be decoded
- * @param ppDecodedStream The stream object used to read the decoded data.
- * @return RCODE
- */
- virtual RCODE XFLMAPI openBase64Decoder(
- IF_IStream * pInputStream,
- IF_IStream ** ppDecodedStream) = 0;
-
- /**
- * @brief Creates an IF_DataVector interface object.
- *
- * This method creates an IF_DataVector interface object. The IF_DataVector
- * is used in index key searches.
- *
- * @param ifppDV The IF_DataVector object.
- * @return RCODE
- */
- virtual RCODE XFLMAPI createIFDataVector(
- IF_DataVector ** ifppDV) = 0;
-
- /**
- * @brief Creates an IF_ResultSet interface object.
- *
- * This method creates an IF_ResultSet interface object.
- *
- * @param ifppResultSet The IF_ResultSet object.
- * @return RCODE
- */
- virtual RCODE XFLMAPI createIFResultSet(
- IF_ResultSet ** ifppResultSet) = 0;
-
- /**
- * @brief Creates an IF_Query interface object.
- *
- * This method creates an IF_Query interface object.
- *
- * @param ifppQuery The IF_Query object.
- * @return RCODE
- */
- virtual RCODE XFLMAPI createIFQuery(
- IF_Query ** ifppQuery) = 0;
-
- /**
- * @brief Frees memory for allocations that are returned from various XFlaim methods.
- *
- * This method frees memory that has been allocated by various methods in XFlaim. If
- * a method allocates memory that needs to be freed by this method, it will be documented
- * in that method.
- *
- * @param ppMem Pointer to the pointer of the memory to be freed. When the memory is
- * successfully freed, the pointer will be set to NULL
- */
- virtual void XFLMAPI freeMem(
- void ** ppMem) = 0;
-
- // Various configuration routines
-
- /**
- * @brief Set a dynamic memory limit in the XFlaim database system.
- *
- * This method sets the dynamic memory parameters in the XFlaim database system. When this
- * method is called, XFlaim is put into a mode where it periodically (every 15 seconds unless
- * otherwise specified - see setCacheAdjustInterval) adjusts its cache limit. The parameters
- * passed into this method are used to calculate the new limit. The new limit remains in
- * effect until the next adjustment is made.
- *
- * @param uiCacheAdjustPercent Percentage of available physical memory to set or adjust to.
- * @param uiCacheAdjustMin Minimum bytes to adjust down to.
- * @param uiCacheAdjustMax Maximum bytes to adjust up to. NOTE: If this parameter is non-zero,
- * the uiCacheAdjustMinToLeave parameter is ignored.
- * @param uiCacheAdjustMinToLeave Minimum bytes to leave available after making adjustment.
- * This is an alternative way to specify a maximum to adjust to. Using this value, XFlaim will
- * calculate the maximum by subtracting this number from the total bytes it thinks is available.
- * That calculated number becomes the effective maximum to adjust to.
- * @return RCODE
- */
- virtual RCODE XFLMAPI setDynamicMemoryLimit(
- FLMUINT uiCacheAdjustPercent,
- FLMUINT uiCacheAdjustMin,
- FLMUINT uiCacheAdjustMax,
- FLMUINT uiCacheAdjustMinToLeave) = 0;
-
- /**
- * @brief Set a hard limit on the amount of memory that the database system can access.
- *
- * This method sets a hard limit on the amount of memory that the database system can access.
- * The important difference between this routine and the setDynamicMemoryLimit routine is that
- * the limit remains in force until a subsequent call to setHardMemoryLimit is made, or until
- * a call to setDynamicMemoryLimit is made. The setDynamicMemoryLimit routine, on the other
- * hand, puts XFlaim into a mode where a new limit is automatically calculated on a preset
- * interval (see setCacheAdjustInterval). Thus, the purpose of the setHardMemoryLimit routine
- * is to let the application control the limit instead of having it automatically adjusted periodically.
- *
- * @param uiPercent If this parameter is zero, the uiMax parameter determines the hard cache limit.
- * Otherwise, this parameter (which must contain a number between 1 and 100) is used to determine
- * a hard cache limit. The hard limit will be calculated as a percentage of available physical
- * memory on the system.
- * @param bPercentOfAvail A flag to indicate that the percentage (uiPercent) is to be interpreted
- * as a percentage of available memory as opposed to a percentage of all of physical memory.
- * This parameter is only used if uiPercent is non-zero.
- * @param uiMin Minimum bytes to set the hard cache limit to. Note that this parameter is only used
- * if uiPercent is non-zero and we are calculating a hard limit to set.
- * @param uiMax Maximum bytes to set the hard limit to. Note that if uiPercent is zero,
- * this number contains the hard limit.
- * @param uiMinToLeave This parameter is only used if uiPercent is non-zero and we are calculating
- * a hard limit to set. Instead of uiMax determining the maximum cache limit we could set, this
- * value will determine the maximum. This number will be subtracted from the total memory on the
- * system or the total memory currently available (if bPercentOfAvail is TRUE) to establish a maximum.
- * @param bPreallocate Boolean flag. Used to indicate that the cache should be preallocated when XFlaim
- * starts up, rather than allow it to grow as needed. The default value to FALSE.
- * @return RCODE
- */
- virtual RCODE XFLMAPI setHardMemoryLimit(
- FLMUINT uiPercent,
- FLMBOOL bPercentOfAvail,
- FLMUINT uiMin,
- FLMUINT uiMax,
- FLMUINT uiMinToLeave,
- FLMBOOL bPreallocate = FALSE) = 0;
-
- /**
- * @brief Get a flag which indicates whether or not dynamic cache adjusting
- * is allowed.
- *
- * This method returns a boolean TRUE or FALSE.
- *
- * @return FLMBOOL TRUE=supported or FALSE=not supported.
- */
- virtual FLMBOOL XFLMAPI getDynamicCacheSupported( void) = 0;
-
- /**
- * @brief Query the database system for information regarding the current cache usage.
- *
- * This method is used to query the database system for information regarding the current cache usage.
- *
- * @param pCacheInfo The cache info structure.
- */
- virtual void XFLMAPI getCacheInfo(
- XFLM_CACHE_INFO * pCacheInfo) = 0;
-
- /**
- * @brief A method to either enable or disable cache debug mode.
- *
- * This is a method to either enable or disable cache debug mode. If bDebug is TRUE (1),
- * then cache debug will be enabled. If bDebug is FALSE (0), cache debug will be disabled.
- *
- * @param bDebug A boolean to indicate whether to enable or disable cache debug mode.
- */
- virtual void XFLMAPI enableCacheDebug(
- FLMBOOL bDebug) = 0;
-
- /**
- * @brief A method to find out if cache debug mode is either enabled or disabled.
- *
- * This is a method to find out if cache debug mode is either enabled or disabled.
- *
- * @return FLMBOOL True or False
- */
- virtual FLMBOOL XFLMAPI cacheDebugEnabled( void) = 0;
-
- /**
- * @brief Close all file handles (descriptors) that have not been used for a specified
- * amount of time.
- *
- * This is a method to close all file handles (descriptors) that have not been used or
- * accessed for a specified number of seconds.
- *
- * @param uiSeconds The number of seconds. File handles (descriptors) that have been
- * unused for a period of time greater than or equal to this number of seconds will be
- * closed. A value of zero will have the effect of closing all unused file handles
- * (descriptors), regardless of how long they have been unused.
- * @return RCODE
- */
- virtual RCODE XFLMAPI closeUnusedFiles(
- FLMUINT uiSeconds) = 0;
-
- /**
- * @brief Set the threshold for the number of file handles (descriptors) that can be
- * opened by the database system.
- *
- * This is a method to set the maximum number of file handles (descriptors) that can
- * be kept open by the database system.
- *
- * @param uiThreshold The number of file handles (descriptors) that can be open at any
- * one time. The default threshold is 65535. IMPORTANT NOTE: It is possible for the
- * database system to temporarily have more file handles (descriptors) open than the
- * specified threshold. It does this when all available file handles (descriptors)
- * are in use and it needs to open a file to perform database work. However, as soon as
- * it can, the database system will close file handles (descriptors) until it comes back
- * down below the specified threshold.
- */
- virtual void XFLMAPI setOpenThreshold(
- FLMUINT uiThreshold) = 0;
-
- /**
- * @brief Get the threshold for the number of file handles that can be opened by the
- * database system.
- *
- * This method returns the threshold for the number of file handles (descriptors) that
- * can be held open by the database system.
- *
- * @return FLMUINT The open threshold.
- */
- virtual FLMUINT XFLMAPI getOpenThreshold( void) = 0;
-
- /**
- * @brief Get the number of files that are currently open in the database system.
- *
- * This method returns the number of file handles (descriptors) that are currently
- * open in the database system.
- *
- * @return FLMUINT The open file count
- */
- virtual FLMUINT XFLMAPI getOpenFileCount( void) = 0;
-
- /**
- * @brief Start the collection of statistics on the database system.
- *
- * This method starts the collection of statistics on the database system.
- */
- virtual void XFLMAPI startStats( void) = 0;
-
- /**
- * @brief Stop the collection of statistics on the database system.
- *
- * This method stops the collection of statistics on the database system.
- */
- virtual void XFLMAPI stopStats( void) = 0;
-
- /**
- * @brief Reset the statistics counters on the database system.
- *
- * This method resets the statistics counters on the database system.
- */
- virtual void XFLMAPI resetStats( void) = 0;
-
- /**
- * @brief Retrieve the statistics from the database system.
- *
- * This method returns the current set of statistics from the database system.
- *
- * @param pFlmStats The structure where statistics are returned.
- * @return RCODE
- */
- virtual RCODE XFLMAPI getStats(
- XFLM_STATS * pFlmStats) = 0;
-
- /**
- * @brief Free the statistic object in the database system.
- *
- * This method frees any memory allocations that are associated with the FLM_STATS
- * structure. The FLM_STATS structure will have been populated by a call to the
- * getStats method.
- *
- * @param pFlmStats The statistics structure whose memory allocations are to be freed.
- */
- virtual void XFLMAPI freeStats(
- XFLM_STATS * pFlmStats) = 0;
-
- /**
- * @brief Set the directory where temporary files are created.
- *
- * This method sets the directory where temporary files are to be created.
- *
- * @param pszPath The temporary directory path.
- * @return RCODE
- */
- virtual RCODE XFLMAPI setTempDir(
- const char * pszPath) = 0;
-
- /**
- * @brief Get the directory where temporary files are created.
- *
- * This method returns the directory name where temporary files are created.
- * If no temporary directory is set, this function returns NE_XFLM_IO_PATH_NOT_FOUND.
- *
- * @param pszPath The temporary directory path is returned here.
- * @return RCODE
- */
- virtual RCODE XFLMAPI getTempDir(
- char * pszPath) = 0;
-
- /**
- * @brief Set the time between checkpoints in the database.
- *
- *
- * This method sets the maximum time between completed checkpoints in the database.
- * This is NOT the same thing as how often a checkpoint will be performed. Checkpoints
- * are actually performed and completed much more frequently, depending on how much
- * update transaction activity there is. A background thread (often referred to as the
- * checkpoint thread) is responsible for performing database checkpoints. The checkpoint
- * thread wakes up about once a second to see if there are dirty blocks in the cache
- * that need to be written to disk. If there are, and there is no currently active
- * update transaction, it will begin performing a checkpoint. If no update
- * transactions occur while it is performing the checkpoint, it will be able to complete
- * the checkpoint. If the application attempts to start an update transaction while
- * the checkpoint is being done, the checkpoint thread has the option of yielding
- * to the update transaction and not completing the checkpoint. The checkpoint
- * thread may also choose to not yield and complete the checkpoint. One of the
- * conditions under which it will not yield is if the elapsed time since the last
- * completed checkpoint is greater than the time specified by this method. In that
- * case, the update transaction is held off until the checkpoint completes.
- * Note that it is possible for the time between completed checkpoints to be longer than
- * the interval specified in this routine. The checkpoint thread cannot interrupt an
- * active transaction when it wakes up. If it wakes up and finds that a transaction
- * is active, it must wait for the transaction to complete before it can start a checkpoint.
- * Thus, if that transaction runs a long time, the time between completed checkpoints
- * could exceed the time specified in this method.
- *
- * @param uiSeconds The maximum number of seconds allowed to elapse between completed
- * checkpoints. Default is 180 seconds. NOTE: It is possible that the time
- * between completed checkpoints can be greater than this value. This is because the
- * checkpoint thread cannot run if there is an update transaction that is currently
- * active. If an update transaction is active and runs for a long time, the time
- * between completed checkpoints could exceed the time specified in this method.
- */
- virtual void XFLMAPI setCheckpointInterval(
- FLMUINT uiSeconds) = 0;
-
- /**
- * @brief Get the current checkpoint interval.
- *
- * This method returns the current checkpoint interval.
- * @return FLMUINT The current checkpoint interval (seconds).
- */
- virtual FLMUINT XFLMAPI getCheckpointInterval( void) = 0;
-
- /**
- * @brief Set the time interval for dynamically adjusting the cache limit.
- *
- * This method sets the time interval for dynamically adjusting the cache limit.
- *
- * @param uiSeconds The time interval for dynamically adjusting the cache limit.
- */
- virtual void XFLMAPI setCacheAdjustInterval(
- FLMUINT uiSeconds) = 0;
-
- /**
- * @brief Get the time interval for dynamically adjusting the cache limit.
- *
- * This method returns the time interval (in seconds) for dynamically adjusting the cache limit.
- *
- * @return FLMUINT The curernt cache adjust interval (seconds).
- */
- virtual FLMUINT XFLMAPI getCacheAdjustInterval( void) = 0;
-
- /**
- * @brief Set the time interval for dynamically cleaning out old cache blocks from block cache.
- *
- * This method sets the time interval for cleaning out old cache blocks from block cache.
- *
- * @param uiSeconds The time interval for dynamically cleaning out old cache blocks.
- */
- virtual void XFLMAPI setCacheCleanupInterval(
- FLMUINT uiSeconds) = 0;
-
- /**
- * @brief Get the time interval for dynamically cleaning out old cache blocks from block cache.
- *
- * This method returns the time interval (in seconds) for cleaning out old cache blocks from block cache.
- *
- * @return FLMUINT The current cache cleanup inerval (seconds).
- */
- virtual FLMUINT XFLMAPI getCacheCleanupInterval( void) = 0;
-
- /**
- * @brief Set time interval for cleaning up unused resources (such as file handles).
- *
- * This method sets the time interval for cleaning up unused resources (such as file handles).
- *
- * @param uiSeconds The time interval for cleaning up unused resources (such as file handles).
- */
- virtual void XFLMAPI setUnusedCleanupInterval(
- FLMUINT uiSeconds) = 0;
-
- /**
- * @brief Get time interval for cleaning up unused resources (such as file handles).
- *
- * This method returns the time interval (in seconds) for cleaning up unused resources (such as file handles).
- *
- * @return FLMUINT The current unused cleanup interval (seconds).
- */
- virtual FLMUINT XFLMAPI getUnusedCleanupInterval( void) = 0;
-
- /**
- * @brief Set maximum time for a resource (such as a file handle) to be unused before it is cleaned up.
- *
- * This method sets the maximum time for a resource (such as a file handle) to be unused before it
- * is cleaned up.
- *
- * @param uiSeconds The maximum time for a resource (such as a file handle) to be unused before it is
- * cleaned up.
- */
- virtual void XFLMAPI setMaxUnusedTime(
- FLMUINT uiSeconds) = 0;
-
- /**
- * @brief Get maximum time for a resource (such as a file handle) to be unused before it is cleaned up.
- *
- * This method returns the maximum time for a resource (such as a file handle) to be unused
- * before it is cleaned up.
- *
- * @return FLMUINT The current maximum unused time (seconds).
- */
- virtual FLMUINT XFLMAPI getMaxUnusedTime( void) = 0;
-
- /**
- * @brief Set the logger client.
- *
- * @param pLogger Pointer to the logger client object.
- */
- virtual void XFLMAPI setLogger(
- IF_LoggerClient * pLogger) = 0;
-
- /**
- * @brief Enable or disable extended server memory (ESM).
- *
- * @param bEnable A boolean flag. When TRUE, Extended Server Memory is enabled.
- * When FALSE, Extended Server Memory is disabled.
- */
- virtual void XFLMAPI enableExtendedServerMemory(
- FLMBOOL bEnable) = 0;
-
- /**
- * @brief Determine if extended server memory (ESM) is enabled or disabled.
- *
- * @return FLMBOOL True if enabled, otherwise False.
- */
- virtual FLMBOOL XFLMAPI extendedServerMemoryEnabled( void) = 0;
-
- /**
- * @brief Deactivate open database objects, forcing the database(s) to eventually be closed.
- *
- * This method deactivates all open database objects (IF_Db objects) for a particular
- * database, forcing the database to eventually be closed. Passing NULL in the pszDbFileName
- * parameter will deactivate all active database objects for all open databases.
- *
- * @param pszDatabasePath Name of the control file ( including path ) for the database that
- * is to be deactivated. See the XFlaim Concepts/Database Files for a discussion on the
- * different database files, including the control file. NOTE: Passing a NULL in this
- * parameter will cause all open databases to be deactivated.
- * @param pszDataFilePath The directory where the data files are located. If a NULL is passed
- * in, it is assumed that the data files are located in the same directory as the control file
- * (as specified by the pszDbFileName parameter). See the XFlaim Concepts/Database Files for
- * a discussion on the different database files.
- */
- virtual void XFLMAPI deactivateOpenDb(
- const char * pszDatabasePath,
- const char * pszDataFilePath) = 0;
-
- /**
- * @brief Set the maximum number of queries to save when statistics gathering is enabled.
- *
- * This method sets the maximum number of queries to save when statistics gathering is enabled.
- *
- * @param uiMaxToSave The maximum number of queries to save.
- */
- virtual void XFLMAPI setQuerySaveMax(
- FLMUINT uiMaxToSave) = 0;
-
- /**
- * @brief Get the maximum number of queries to save when statistics gathering is enabled.
- *
- * This method returns the maximum number of queries to save when statistics gathering is enabled.
- *
- * @return FLMUINT The maximum number of queries to save.
- */
- virtual FLMUINT XFLMAPI getQuerySaveMax( void) = 0;
-
- /**
- * @brief Set the minimum and maximum dirty cache limits.
- *
- * This method sets dirty cache limits - a "maximum" and a "low." The maximum specifies the maximum
- * dirty cache to be allowed. When a database exceeds this amount, the checkpoint thread will kick
- * in and write out dirty blocks until the dirty cache comes back down below the amount specified by
- * the "low" value. In this way, the application can control how much dirty cache builds up between
- * forced checkpoints (see setCheckpointInterval). The more dirty cache there is when the checkpoint
- * forces a checkpoint, the longer it will take to complete the checkpoint. It should be noted that
- * the overall time that will be needed to write out dirty blocks is still the same. It's just that
- * the writing gets spread out more over time. Instead of doing it all in one big chunk, it gets done
- * in lots of little chunks. This has both pros and cons, so this method should be used with extreme caution!
- * In a bulk load situation, where there is one thread doing the bulk loading, lowering the maximum
- * dirty cache could actually lengthen out the overall time it takes to complete the bulk load. This
- * is because the bulk load will be interrupted more often by the checkpoint thread to do smaller units
- * of writing than it otherwise would. There will also be less piggy-backing of writes. Piggy-backing
- * occurs when multiple transactions write to the same data block before the block is flushed out of
- * cache. If the database system is flushing dirty blocks out of cache more often, it could end up
- * writing the same block multiple times, whereas it might not not have had to if it had waited longer between flushes.
- * The advantage to spreading out the flushing of dirty cache blocks occurs when there are multiple threads
- * trying to do update transactions. When the checkpoint thread forces a checkpoint, it holds back all
- * pending update transactions. If it has to do more writing when it forces a checkpoint, it may cause
- * many threads to wait for a longer period of time than it would if there were less writing to do.
- * This is less efficient to the overall throughput of the system, because it is likely that each of the
- * threads could be doing other useful work instead of waiting.
- *
- * @param uiMaxDirty The maximum amount (in bytes) of dirty cache allowed.
- * @param uiLowDirty The low threshold (in bytes) for dirty cache.
- */
- virtual void XFLMAPI setDirtyCacheLimits(
- FLMUINT uiMaxDirty,
- FLMUINT uiLowDirty) = 0;
-
- /**
- * @brief Get the minimum and maximum dirty cache limits.
- *
- * This method returns the minimum and maximum dirty cache limits.
- *
- * @param puiMaxDirty The maximum number of dirty blocks allowed in the cache.
- * @param puiLowDirty The low threshold for the number of dirty blocks in cache.
- */
- virtual void XFLMAPI getDirtyCacheLimits(
- FLMUINT * puiMaxDirty,
- FLMUINT * puiLowDirty) = 0;
-
- /**
- * @brief Get an information object that can be used to get information about threads owned by the database system.
- *
- * This method returns a thread information object which has methods for retrieving various pieces of information
- * about threads owned by the database system. NOTE: When the application is done using the returned IF_ThreadInfo
- * object, it should call its Release method.
- *
- * @param ifppThreadInfo A pointer to the allocated thread info object is returned here.
- *
- * @return RCODE
- */
- virtual RCODE XFLMAPI getThreadInfo(
- IF_ThreadInfo ** ifppThreadInfo) = 0;
-
- /**
- * @brief Register a catcher object to catch database events in a particular category.
- *
- * This method registers an object to catch events in a particular category of database events.
- *
- * @param eCategory The category of events the application is registering for.
- * @param ifpEventClient The client object whose methods are to be invoked when the event occurs.
- *
- * @return RCODE
- */
- virtual RCODE XFLMAPI registerForEvent(
- eEventCategory eCategory,
- IF_EventClient * ifpEventClient) = 0;
-
- /**
- * @brief Deregister a catcher object from catching database events in a particular category.
- *
- * This method deregisters an object from catching events in a particular
- * category of database events.
- *
- * @param eCategory The type of event.
- * @param ifpEventClient The client object that was passed into the registerForEvent
- * method. This is necessary so that if there are multiple objects that have
- * registered for an event, XFlaim can know exactly which object to
- * deregister.
- */
- virtual void XFLMAPI deregisterForEvent(
- eEventCategory eCategory,
- IF_EventClient * ifpEventClient) = 0;
-
- /**
- * @brief Returns the metaphone codes for the next word in an input stream.
- *
- * This parses the next word from the input stream (ifpIStream) and returns the metaphone codes for it. This
- * method returns NE_XFLM_EOF_HIT when it hits the end of the input stream. Visit: This should probably be a
- * method on the IF_IStream interface, not the IF_DbSystem interface.
- *
- * @param ifpIStream Input stream object.
- * @param puiMetaphone Primary metaphone returned for the next word in the input stream.
- * @param puiAltMetaphone Alternate metaphone returned for the next word in the input stream.
- *
- * @return RCODE
- */
- virtual RCODE XFLMAPI getNextMetaphone(
- IF_IStream * ifpIStream,
- FLMUINT * puiMetaphone,
- FLMUINT * puiAltMetaphone = NULL) = 0;
-
- /**
- * @brief Return an IF_Pool object for memory allocations
- */
- virtual RCODE XFLMAPI createMemoryPool(
- IF_Pool ** ppPool) = 0;
-
- /**
- * @brief Compares two UTF-8 strings
- */
- virtual RCODE XFLMAPI compareUTF8Strings(
- const FLMBYTE * pucLString,
- FLMUINT uiLStrBytes,
- FLMBOOL bLeftWild,
- const FLMBYTE * pucRString,
- FLMUINT uiRStrBytes,
- FLMBOOL bRightWild,
- FLMUINT uiCompareRules,
- FLMUINT uiLanguage,
- FLMINT * piResult) = 0;
-
- /**
- * @brief Compares two Unicode strings
- */
- virtual RCODE XFLMAPI compareUnicodeStrings(
- const FLMUNICODE * puzLString,
- FLMUINT uiLStrBytes,
- FLMBOOL bLeftWild,
- const FLMUNICODE * puzRString,
- FLMUINT uiRStrBytes,
- FLMBOOL bRightWild,
- FLMUINT uiCompareRules,
- FLMUINT uiLanguage,
- FLMINT * piResult) = 0;
-
- virtual RCODE XFLMAPI utf8IsSubStr(
- const FLMBYTE * pszString,
- const FLMBYTE * pszSubString,
- FLMUINT uiCompareRules,
- FLMUINT uiLanguage,
- FLMBOOL * pbExists) = 0;
-
- virtual FLMBOOL XFLMAPI uniIsUpper(
- FLMUNICODE uzChar) = 0;
-
- virtual FLMBOOL XFLMAPI uniIsLower(
- FLMUNICODE uzChar) = 0;
-
- virtual FLMBOOL XFLMAPI uniIsAlpha(
- FLMUNICODE uzChar) = 0;
-
- virtual FLMBOOL XFLMAPI uniIsDecimalDigit(
- FLMUNICODE uzChar) = 0;
-
- virtual FLMUNICODE XFLMAPI uniToLower(
- FLMUNICODE uzChar) = 0;
-
- // When the nextUCS2Char method is called, the UCS-2 version of the character
- // pointed to by *ppszUTF8 is stored in *puzChar and *ppszUTF8 is updated to
- // point to the next the next character. If *ppszUTF8 >= pszEndOfUTF8String
- // or if **ppszUTF8 == 0, *puzChar returns 0, but no error is returned.
- // Note: Remember to keep a copy of the pointer to the start of the
- // string, because whatever is passed in as ppszUTF8 will be modified.
-
- virtual RCODE XFLMAPI nextUCS2Char(
- const FLMBYTE ** ppszUTF8,
- const FLMBYTE * pszEndOfUTF8String,
- FLMUNICODE * puzChar) = 0;
-
- virtual RCODE XFLMAPI numUCS2Chars(
- const FLMBYTE * pszUTF8,
- FLMUINT * puiNumChars) = 0;
-
- /**
- * @brief Waits for a specific database to close
- *
- * @param pszDbName Name of the control file for the database that we
- * want to have closed.
- *
- * @return RCODE
- */
- virtual RCODE XFLMAPI waitToClose(
- const char * pszDbFileName) = 0;
-
- /**
- * @brief Creates an IF_NodeInfo interface object.
- *
- * This method creates an IF_NodeInfo interface object.
- *
- * @param ifppNodeInfo The IF_NodeInfo object.
- * @return RCODE
- */
- virtual RCODE XFLMAPI createIFNodeInfo(
- IF_NodeInfo ** ifppNodeInfo) = 0;
-
- /**
- * @brief Creates an IF_BTreeInfo interface object.
- *
- * This method creates an IF_BTreeInfo interface object.
- *
- * @param ifppBTreeInfo The IF_BTreeInfo object.
- * @return RCODE
- */
- virtual RCODE XFLMAPI createIFBTreeInfo(
- IF_BTreeInfo ** ifppBTreeInfo) = 0;
-
- /**
- * @brief A method to attempt to remove everything from cache
- *
- * This method will attempt to remove all blocks and nodes from
- * cache. The pDb parameter is optional. If provided (and an update
- * transaction is active), any dirty cache items associated with the
- * database will be flushed.
- *
- * @return RCODE
- */
- virtual RCODE XFLMAPI clearCache(
- IF_Db * pDb) = 0;
- };
-
- typedef enum
- {
- XFLM_EXPORT_NO_FORMAT = 0x00, // No Formatting
- XFLM_EXPORT_NEW_LINE = 0x01, // New Line For Each Element
- XFLM_EXPORT_INDENT = 0x02, // Indent Elements
- XFLM_EXPORT_INDENT_DATA = 0x03 // Indent Data - this changes the data
- } eExportFormatType;
-
- /* --------------------------------------------------------------------
- * An alternative way to get a DbSystem object when not
- * using COM.
- * -------------------------------------------------------------------- */
-
- XFLMEXTC RCODE FlmAllocDbSystem(
- IF_DbSystem ** ppDbSystem);
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_Db : public XF_RefCount
- {
- virtual RCODE XFLMAPI transBegin(
- eDbTransType eTransType,
- FLMUINT uiMaxLockWait = XFLM_NO_TIMEOUT,
- FLMUINT uiFlags = 0,
- XFLM_DB_HDR * pDbHeader = NULL) = 0;
-
- virtual RCODE XFLMAPI transBegin(
- IF_Db * pDb) = 0;
-
- virtual RCODE XFLMAPI transCommit(
- FLMBOOL * pbEmpty = NULL) = 0;
-
- virtual RCODE XFLMAPI transAbort( void) = 0;
-
- virtual eDbTransType XFLMAPI getTransType( void) = 0;
-
- virtual RCODE XFLMAPI doCheckpoint(
- FLMUINT uiTimeout) = 0;
-
- virtual RCODE XFLMAPI dbLock(
- eDbLockType eLockType,
- FLMINT iPriority,
- FLMUINT uiTimeout) = 0;
-
- virtual RCODE XFLMAPI dbUnlock( void) = 0;
-
- virtual RCODE XFLMAPI getLockType(
- eDbLockType * peLockType,
- FLMBOOL * pbImplicit) = 0;
-
- virtual RCODE XFLMAPI getLockInfo(
- FLMINT iPriority,
- eDbLockType * peCurrLockType,
- FLMUINT * puiThreadId,
- FLMUINT * puiNumExclQueued,
- FLMUINT * puiNumSharedQueued,
- FLMUINT * puiPriorityCount) = 0;
-
- virtual RCODE XFLMAPI indexStatus(
- FLMUINT uiIndexNum,
- XFLM_INDEX_STATUS * pIndexStatus) = 0;
-
- virtual RCODE XFLMAPI indexGetNext(
- FLMUINT * puiIndexNum) = 0;
-
- virtual RCODE XFLMAPI indexSuspend(
- FLMUINT uiIndexNum) = 0;
-
- virtual RCODE XFLMAPI indexResume(
- FLMUINT uiIndexNum) = 0;
-
- virtual RCODE XFLMAPI keyRetrieve(
- FLMUINT uiIndex,
- IF_DataVector * pSearchKey,
- FLMUINT uiFlags,
- IF_DataVector * pFoundKey) = 0;
-
- virtual RCODE XFLMAPI enableEncryption( void) = 0;
-
- virtual RCODE XFLMAPI wrapKey(
- const char * pszPassword = NULL) = 0;
-
- virtual RCODE XFLMAPI rollOverDbKey( void) = 0;
-
- virtual RCODE XFLMAPI changeItemState(
- FLMUINT uiDictType,
- FLMUINT uiDictNum,
- const char * pszState) = 0;
-
- virtual RCODE XFLMAPI reduceSize(
- FLMUINT uiCount,
- FLMUINT * puiCount) = 0;
-
- virtual RCODE XFLMAPI upgrade(
- IF_UpgradeClient * pUpgradeClient) = 0;
-
- virtual RCODE XFLMAPI createRootElement(
- FLMUINT uiCollection,
- FLMUINT uiNameId,
- IF_DOMNode ** ppElementNode,
- FLMUINT64 * pui64NodeId = NULL) = 0;
-
- virtual RCODE XFLMAPI createDocument(
- FLMUINT uiCollection,
- IF_DOMNode ** ppDocumentNode,
- FLMUINT64 * pui64NodeId = NULL) = 0;
-
- virtual RCODE XFLMAPI getFirstDocument(
- FLMUINT uiCollection,
- IF_DOMNode ** ppDocumentNode) = 0;
-
- virtual RCODE XFLMAPI getLastDocument(
- FLMUINT uiCollection,
- IF_DOMNode ** ppDocumentNode) = 0;
-
- virtual RCODE XFLMAPI getDocument(
- FLMUINT uiCollection,
- FLMUINT uiFlags,
- FLMUINT64 ui64DocumentId,
- IF_DOMNode ** ppDocumentNode) = 0;
-
- virtual RCODE XFLMAPI documentDone(
- FLMUINT uiCollection,
- FLMUINT64 ui64RootId) = 0;
-
- virtual RCODE XFLMAPI documentDone(
- IF_DOMNode * pDocNode) = 0;
-
- virtual RCODE XFLMAPI createElementDef(
- const char * pszNamespaceURI,
- const char * pszElementName,
- FLMUINT uiDataType,
- FLMUINT * puiElementNameId = NULL,
- IF_DOMNode ** ppDocumentNode = NULL) = 0;
-
- virtual RCODE XFLMAPI createElementDef(
- const FLMUNICODE * puzNamespaceURI,
- const FLMUNICODE * puzElementName,
- FLMUINT uiDataType,
- FLMUINT * puiElementNameId = NULL,
- IF_DOMNode ** ppDocumentNode = NULL) = 0;
-
- virtual RCODE XFLMAPI createUniqueElmDef(
- const char * pszNamespaceURI,
- const char * pszElementName,
- FLMUINT * puiElementNameId = NULL,
- IF_DOMNode ** ppDocumentNode = NULL) = 0;
-
- virtual RCODE XFLMAPI createUniqueElmDef(
- const FLMUNICODE * puzNamespaceURI,
- const FLMUNICODE * puzElementName,
- FLMUINT * puiElementNameId = NULL,
- IF_DOMNode ** ppDocumentNode = NULL) = 0;
-
- virtual RCODE XFLMAPI getElementNameId(
- const char * pszNamespaceURI,
- const char * pszElementName,
- FLMUINT * puiElementNameId) = 0;
-
- virtual RCODE XFLMAPI getElementNameId(
- const FLMUNICODE * puzNamespaceURI,
- const FLMUNICODE * puzElementName,
- FLMUINT * puiElementNameId) = 0;
-
- virtual RCODE XFLMAPI createAttributeDef(
- const char * pszNamespaceURI,
- const char * pszAttributeName,
- FLMUINT uiDataType,
- FLMUINT * puiAttributeNameId,
- IF_DOMNode ** ppDocumentNode = NULL) = 0;
-
- virtual RCODE XFLMAPI createAttributeDef(
- const FLMUNICODE * puzNamespaceURI,
- const FLMUNICODE * puzAttributeName,
- FLMUINT uiDataType,
- FLMUINT * puiAttributeNameId,
- IF_DOMNode ** ppDocumentNode = NULL) = 0;
-
- virtual RCODE XFLMAPI getAttributeNameId(
- const char * pszNamespaceURI,
- const char * pszAttributeName,
- FLMUINT * puiAttributeNameId) = 0;
-
- virtual RCODE XFLMAPI getAttributeNameId(
- const FLMUNICODE * puzNamespaceURI,
- const FLMUNICODE * puzAttributeName,
- FLMUINT * puiAttributeNameId) = 0;
-
- virtual RCODE XFLMAPI createPrefixDef(
- const char * pszPrefixName,
- FLMUINT * puiPrefixNumber) = 0;
-
- virtual RCODE XFLMAPI createPrefixDef(
- const FLMUNICODE * puzPrefixName,
- FLMUINT * puiPrefixNumber) = 0;
-
- virtual RCODE XFLMAPI getPrefixId(
- const char * pszPrefixName,
- FLMUINT * puiPrefixNumber) = 0;
-
- virtual RCODE XFLMAPI getPrefixId(
- const FLMUNICODE * puzPrefixName,
- FLMUINT * puiPrefixNumber) = 0;
-
- virtual RCODE XFLMAPI createEncDef(
- const char * pszEncType,
- const char * pszEncName,
- FLMUINT uiKeySize,
- FLMUINT * puiEncDefNumber) = 0;
-
- virtual RCODE XFLMAPI createEncDef(
- const FLMUNICODE * puzEncType,
- const FLMUNICODE * puzEncName,
- FLMUINT uiKeySize,
- FLMUINT * puiEncDefNumber) = 0;
-
- virtual RCODE XFLMAPI getEncDefId(
- const char * pszEncDefName,
- FLMUINT * puiPrefixNumber) = 0;
-
- virtual RCODE XFLMAPI getEncDefId(
- const FLMUNICODE * puzEncDefName,
- FLMUINT * puiEncDefNumber) = 0;
-
- virtual RCODE XFLMAPI createCollectionDef(
- const char * pszCollectionName,
- FLMUINT * puiCollectionNumber,
- FLMUINT uiEncNumber = 0) = 0;
-
- virtual RCODE XFLMAPI createCollectionDef(
- const FLMUNICODE * puzCollectionName,
- FLMUINT * puiCollectionNumber,
- FLMUINT uiEncNumber = 0) = 0;
-
- virtual RCODE XFLMAPI getCollectionNumber(
- const char * pszCollectionName,
- FLMUINT * puiCollectionNumber) = 0;
-
- virtual RCODE XFLMAPI getCollectionNumber(
- const FLMUNICODE * puzCollectionName,
- FLMUINT * puiCollectionNumber) = 0;
-
- virtual RCODE XFLMAPI getIndexNumber(
- const char * pszIndexName,
- FLMUINT * puiIndexNumber) = 0;
-
- virtual RCODE XFLMAPI getIndexNumber(
- const FLMUNICODE * puzIndexName,
- FLMUINT * puiIndexNumber) = 0;
-
- virtual RCODE XFLMAPI getDictionaryDef(
- FLMUINT uiDictType,
- FLMUINT uiDictNumber,
- IF_DOMNode ** ppDocumentNode) = 0;
-
- virtual RCODE XFLMAPI getDictionaryName(
- FLMUINT uiDictType,
- FLMUINT uiDictNumber,
- char * pszName,
- FLMUINT * puiNameBufSize,
- char * pszNamespace = NULL,
- FLMUINT * puiNamespaceBufSize = NULL) = 0;
-
- virtual RCODE XFLMAPI getDictionaryName(
- FLMUINT uiDictType,
- FLMUINT uiDictNumber,
- FLMUNICODE * puzName,
- FLMUINT * puiNameBufSize,
- FLMUNICODE * puzNamespace = NULL,
- FLMUINT * puiNamespaceBufSize = NULL) = 0;
-
- virtual RCODE XFLMAPI getNode(
- FLMUINT uiCollection,
- FLMUINT64 ui64NodeId,
- IF_DOMNode ** ppNode) = 0;
-
- virtual RCODE XFLMAPI getAttribute(
- FLMUINT uiCollection,
- FLMUINT64 ui64ElementNodeId,
- FLMUINT uiAttrNameId,
- IF_DOMNode ** ppNode) = 0;
-
- virtual RCODE XFLMAPI getDataType(
- FLMUINT uiDictType,
- FLMUINT uiNameId,
- FLMUINT * puiDataType) = 0;
-
- virtual RCODE XFLMAPI backupBegin(
- eDbBackupType eBackupType,
- eDbTransType eTransType,
- FLMUINT uiMaxLockWait,
- IF_Backup ** ppBackup) = 0;
-
- virtual void XFLMAPI getRflFileName(
- FLMUINT uiFileNum,
- FLMBOOL bBaseOnly,
- char * pszFileName,
- FLMUINT * puiFileNameBufSize,
- FLMBOOL * pbNameTruncated = NULL) = 0;
-
- virtual RCODE XFLMAPI import(
- IF_IStream * pIStream,
- FLMUINT uiCollection,
- IF_DOMNode * pNodeToLinkTo = NULL,
- eNodeInsertLoc eInsertLoc = XFLM_LAST_CHILD,
- XFLM_IMPORT_STATS * pImportStats = NULL) = 0;
-
- virtual RCODE XFLMAPI importDocument(
- IF_IStream * ifpStream,
- FLMUINT uiCollection,
- IF_DOMNode ** ppDocumentNode = NULL,
- XFLM_IMPORT_STATS * pImportStats = NULL) = 0;
-
- virtual RCODE XFLMAPI exportXML(
- IF_DOMNode * pStartNode,
- IF_OStream * pOStream,
- eExportFormatType eFormat = XFLM_EXPORT_INDENT) = 0;
-
- virtual RCODE XFLMAPI setNextNodeId(
- FLMUINT uiCollection,
- FLMUINT64 ui64NextNodeId) = 0;
-
- virtual RCODE XFLMAPI setNextDictNum(
- FLMUINT uiDictType,
- FLMUINT uiDictNumber) = 0;
-
- // Configuration "set" and "get" methods
-
- virtual RCODE XFLMAPI setRflKeepFilesFlag(
- FLMBOOL bKeep) = 0;
-
- virtual RCODE XFLMAPI getRflKeepFlag(
- FLMBOOL * pbKeep) = 0;
-
- virtual RCODE XFLMAPI setRflDir(
- const char * pszNewRflDir) = 0;
-
- virtual void XFLMAPI getRflDir(
- char * pszRflDir) = 0;
-
- virtual RCODE XFLMAPI getRflFileNum(
- FLMUINT * puiRflFileNum) = 0;
-
- virtual RCODE XFLMAPI getHighestNotUsedRflFileNum(
- FLMUINT * puiHighestNotUsedRflFileNum) = 0;
-
- virtual RCODE XFLMAPI setRflFileSizeLimits(
- FLMUINT uiMinRflSize,
- FLMUINT uiMaxRflSize) = 0;
-
- virtual RCODE XFLMAPI getRflFileSizeLimits(
- FLMUINT * puiRflMinFileSize,
- FLMUINT * puiRflMaxFileSize) = 0;
-
- virtual RCODE XFLMAPI rflRollToNextFile( void) = 0;
-
- virtual RCODE XFLMAPI setKeepAbortedTransInRflFlag(
- FLMBOOL bKeep) = 0;
-
- virtual RCODE XFLMAPI getKeepAbortedTransInRflFlag(
- FLMBOOL * pbKeep) = 0;
-
- virtual RCODE XFLMAPI setAutoTurnOffKeepRflFlag(
- FLMBOOL bAutoTurnOff) = 0;
-
- virtual RCODE XFLMAPI getAutoTurnOffKeepRflFlag(
- FLMBOOL * pbAutoTurnOff) = 0;
-
- virtual void XFLMAPI setFileExtendSize(
- FLMUINT uiFileExtendSize) = 0;
-
- virtual FLMUINT XFLMAPI getFileExtendSize( void) = 0;
-
- virtual void XFLMAPI setAppData(
- void * pvAppData) = 0;
-
- virtual void * XFLMAPI getAppData( void) = 0;
-
- virtual void XFLMAPI setDeleteStatusObject(
- IF_DeleteStatus * pDeleteStatus) = 0;
-
- virtual void XFLMAPI setCommitClientObject(
- IF_CommitClient * pCommitClient) = 0;
-
- virtual void XFLMAPI setIndexingClientObject(
- IF_IxClient * pIxClient) = 0;
-
- virtual void XFLMAPI setIndexingStatusObject(
- IF_IxStatus * pIxStatus) = 0;
-
- // Configuration information getting methods
-
- virtual FLMUINT XFLMAPI getDbVersion( void) = 0;
-
- virtual FLMUINT XFLMAPI getBlockSize( void) = 0;
-
- virtual FLMUINT XFLMAPI getDefaultLanguage( void) = 0;
-
- virtual FLMUINT64 XFLMAPI getTransID( void) = 0;
-
- virtual void XFLMAPI getCheckpointInfo(
- XFLM_CHECKPOINT_INFO * pCheckpointInfo) = 0;
-
- virtual RCODE XFLMAPI getDbControlFileName(
- char * pszControlFileName,
- FLMUINT uiControlFileBufSize) = 0;
-
- virtual RCODE XFLMAPI getLockWaiters(
- IF_LockInfoClient * pLockInfo) = 0;
-
- virtual RCODE XFLMAPI getLastBackupTransID(
- FLMUINT64 * pui64LastBackupTransID) = 0;
-
- virtual RCODE XFLMAPI getBlocksChangedSinceBackup(
- FLMUINT * puiBlocksChangedSinceBackup) = 0;
-
- virtual RCODE XFLMAPI getNextIncBackupSequenceNum(
- FLMUINT * puiNextIncBackupSequenceNum) = 0;
-
- virtual void XFLMAPI getSerialNumber(
- char * pucSerialNumber) = 0;
-
- virtual RCODE XFLMAPI getDiskSpaceUsage(
- FLMUINT64 * pui64DataSize,
- FLMUINT64 * pui64RollbackSize,
- FLMUINT64 * pui64RflSize) = 0;
-
- virtual RCODE XFLMAPI getMustCloseRC( void) = 0;
-
- virtual RCODE XFLMAPI getAbortRC( void) = 0;
-
- virtual void XFLMAPI setMustAbortTrans(
- RCODE rc) = 0;
- };
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_DOMNode : public XF_RefCount
- {
- virtual RCODE XFLMAPI createNode(
- IF_Db * pDb,
- eDomNodeType eNodeType,
- FLMUINT uiNameId,
- eNodeInsertLoc eLocation,
- IF_DOMNode ** ppNewNode,
- FLMUINT64 * pui64NodeId = NULL) = 0;
-
- virtual RCODE XFLMAPI createChildElement(
- IF_Db * pDb,
- FLMUINT uiChildElementNameId,
- eNodeInsertLoc eLocation,
- IF_DOMNode ** ppNewChildElementNode,
- FLMUINT64 * pui64NodeId = NULL) = 0;
-
- virtual RCODE XFLMAPI deleteNode(
- IF_Db * pDb) = 0;
-
- virtual RCODE XFLMAPI deleteChildren(
- IF_Db * pDb,
- FLMUINT uiNameId = 0) = 0;
-
- virtual RCODE XFLMAPI createAttribute(
- IF_Db * pDb,
- FLMUINT uiAttrNameId,
- IF_DOMNode ** ppAttrNode) = 0;
-
- virtual RCODE XFLMAPI getFirstAttribute(
- IF_Db * pDb,
- IF_DOMNode ** ppAttrNode) = 0;
-
- virtual RCODE XFLMAPI getLastAttribute(
- IF_Db * pDb,
- IF_DOMNode ** ppAttrNode) = 0;
-
- virtual RCODE XFLMAPI getAttribute(
- IF_Db * pDb,
- FLMUINT uiAttrNameId,
- IF_DOMNode ** ppAttrNode) = 0;
-
- virtual RCODE XFLMAPI deleteAttribute(
- IF_Db * pDb,
- FLMUINT uiAttrNameId) = 0;
-
- virtual RCODE XFLMAPI hasAttribute(
- IF_Db * pDb,
- FLMUINT uiAttrNameId,
- IF_DOMNode ** ppAttrNode = NULL) = 0;
-
- virtual RCODE XFLMAPI hasAttributes(
- IF_Db * pDb,
- FLMBOOL * pbHasAttrs) = 0;
-
- virtual RCODE XFLMAPI hasNextSibling(
- IF_Db * pDb,
- FLMBOOL * pbHasNextSibling) = 0;
-
- virtual RCODE XFLMAPI hasPreviousSibling(
- IF_Db * pDb,
- FLMBOOL * pbHasPreviousSibling) = 0;
-
- virtual RCODE XFLMAPI hasChildren(
- IF_Db * pDb,
- FLMBOOL * pbHasChildren) = 0;
-
- virtual RCODE XFLMAPI isNamespaceDecl(
- IF_Db * pDb,
- FLMBOOL * pbIsNamespaceDecl) = 0;
-
- virtual eDomNodeType XFLMAPI getNodeType( void) = 0;
-
- virtual RCODE XFLMAPI getNodeId(
- IF_Db * pDb,
- FLMUINT64 * pui64NodeId) = 0;
-
- virtual RCODE XFLMAPI getParentId(
- IF_Db * pDb,
- FLMUINT64 * pui64ParentId) = 0;
-
- virtual RCODE XFLMAPI getDocumentId(
- IF_Db * pDb,
- FLMUINT64 * pui64DocumentId) = 0;
-
- virtual RCODE XFLMAPI getPrevSibId(
- IF_Db * pDb,
- FLMUINT64 * pui64PrevSibId) = 0;
-
- virtual RCODE XFLMAPI getNextSibId(
- IF_Db * pDb,
- FLMUINT64 * pui64NextSibId) = 0;
-
- virtual RCODE XFLMAPI getFirstChildId(
- IF_Db * pDb,
- FLMUINT64 * pui64FirstChildId) = 0;
-
- virtual RCODE XFLMAPI getLastChildId(
- IF_Db * pDb,
- FLMUINT64 * pui64LastChildId) = 0;
-
- virtual RCODE XFLMAPI getNameId(
- IF_Db * pDb,
- FLMUINT * puiNameId) = 0;
-
- virtual RCODE XFLMAPI getEncDefId(
- IF_Db * pDb,
- FLMUINT * puiEncDefId) = 0;
-
- virtual RCODE XFLMAPI getDataType(
- IF_Db * pDb,
- FLMUINT * puiDataType) = 0;
-
- virtual RCODE XFLMAPI getDataLength(
- IF_Db * pDb,
- FLMUINT * puiLength) = 0;
-
- virtual RCODE XFLMAPI getUINT32(
- IF_Db * pDb,
- FLMUINT32 * pui32Value) = 0;
-
- virtual RCODE XFLMAPI getUINT(
- IF_Db * pDb,
- FLMUINT * puiValue) = 0;
-
- virtual RCODE XFLMAPI getUINT64(
- IF_Db * pDb,
- FLMUINT64 * pui64Value) = 0;
-
- virtual RCODE XFLMAPI getINT32(
- IF_Db * pDb,
- FLMINT32 * pi32Value) = 0;
-
- virtual RCODE XFLMAPI getINT(
- IF_Db * pDb,
- FLMINT * piValue) = 0;
-
- virtual RCODE XFLMAPI getINT64(
- IF_Db * pDb,
- FLMINT64 * pi64Value) = 0;
-
- virtual RCODE XFLMAPI getMetaValue(
- IF_Db * pDb,
- FLMUINT64 * pui64Value) = 0;
-
- virtual RCODE XFLMAPI getUnicodeChars(
- IF_Db * pDb,
- FLMUINT * puiNumChars) = 0;
-
- virtual RCODE XFLMAPI getUnicode(
- IF_Db * pDb,
- FLMUNICODE * puzValueBuffer,
- FLMUINT uiBufferSize,
- FLMUINT uiCharOffset,
- FLMUINT uiMaxCharsRequested,
- FLMUINT * puiCharsReturned = NULL,
- FLMUINT * puiBufferBytesUsed = NULL) = 0;
-
- virtual RCODE XFLMAPI getUnicode(
- IF_Db * pDb,
- FLMUNICODE ** ppuzUnicodeValue) = 0;
-
- virtual RCODE XFLMAPI getUnicode(
- IF_Db * pDb,
- IF_DynaBuf * pDynaBuf) = 0;
-
- virtual RCODE XFLMAPI getUTF8(
- IF_Db * pDb,
- FLMBYTE * pucValueBuffer,
- FLMUINT uiBufferSize,
- FLMUINT uiCharOffset,
- FLMUINT uiMaxCharsRequested,
- FLMUINT * puiCharsReturned = NULL,
- FLMUINT * puiBufferBytesUsed = NULL) = 0;
-
- virtual RCODE XFLMAPI getUTF8(
- IF_Db * pDb,
- FLMBYTE ** ppszUTF8Value) = 0;
-
- virtual RCODE XFLMAPI getUTF8(
- IF_Db * pDb,
- IF_DynaBuf * pDynaBuf) = 0;
-
- virtual RCODE XFLMAPI getBinary(
- IF_Db * pDb,
- void * pvValue,
- FLMUINT uiByteOffset,
- FLMUINT uiBytesRequested,
- FLMUINT * puiBytesReturned) = 0;
-
- virtual RCODE XFLMAPI getBinary(
- IF_Db * pDb,
- IF_DynaBuf * pBuffer) = 0;
-
- virtual RCODE XFLMAPI getAttributeValueUINT32(
- IF_Db * pDb,
- FLMUINT uiAttrNameId,
- FLMUINT32 * pui32Num) = 0;
-
- virtual RCODE XFLMAPI getAttributeValueUINT32(
- IF_Db * pDb,
- FLMUINT uiAttrNameId,
- FLMUINT32 * pui32Num,
- FLMUINT32 ui32NotFoundDefault) = 0;
-
- virtual RCODE XFLMAPI getAttributeValueUINT(
- IF_Db * pDb,
- FLMUINT uiAttrNameId,
- FLMUINT * puiNum) = 0;
-
- virtual RCODE XFLMAPI getAttributeValueUINT(
- IF_Db * pDb,
- FLMUINT uiAttrNameId,
- FLMUINT * puiNum,
- FLMUINT uiNotFoundDefault) = 0;
-
- virtual RCODE XFLMAPI getAttributeValueUINT64(
- IF_Db * pDb,
- FLMUINT uiAttrNameId,
- FLMUINT64 * pui64Num) = 0;
-
- virtual RCODE XFLMAPI getAttributeValueUINT64(
- IF_Db * pDb,
- FLMUINT uiAttrNameId,
- FLMUINT64 * pui64Num,
- FLMUINT64 ui64NotFoundDefault) = 0;
-
- virtual RCODE XFLMAPI getAttributeValueINT(
- IF_Db * pDb,
- FLMUINT uiAttrNameId,
- FLMINT * piNum) = 0;
-
- virtual RCODE XFLMAPI getAttributeValueINT(
- IF_Db * pDb,
- FLMUINT uiAttrNameId,
- FLMINT * piNum,
- FLMINT iNotFoundDefault) = 0;
-
- virtual RCODE XFLMAPI getAttributeValueINT64(
- IF_Db * pDb,
- FLMUINT uiAttrNameId,
- FLMINT64 * pi64Num) = 0;
-
- virtual RCODE XFLMAPI getAttributeValueINT64(
- IF_Db * pDb,
- FLMUINT uiAttrNameId,
- FLMINT64 * pi64Num,
- FLMINT64 i64NotFoundDefault) = 0;
-
- virtual RCODE XFLMAPI getAttributeValueUnicode(
- IF_Db * pDb,
- FLMUINT uiAttrNameId,
- FLMUNICODE * puzValueBuffer,
- FLMUINT uiBufferSize,
- FLMUINT * puiCharsReturned = NULL,
- FLMUINT * puiBufferBytesUsed = NULL) = 0;
-
- virtual RCODE XFLMAPI getAttributeValueUnicode(
- IF_Db * pDb,
- FLMUINT uiAttrNameId,
- FLMUNICODE ** ppuzValueBuffer) = 0;
-
- virtual RCODE XFLMAPI getAttributeValueUnicode(
- IF_Db * pDb,
- FLMUINT uiAttrNameId,
- IF_DynaBuf * pDynaBuf) = 0;
-
- virtual RCODE XFLMAPI getAttributeValueUTF8(
- IF_Db * pDb,
- FLMUINT uiAttrNameId,
- FLMBYTE * pucValueBuffer,
- FLMUINT uiBufferSize,
- FLMUINT * puiCharsReturned = NULL,
- FLMUINT * puiBufferBytesUsed = NULL) = 0;
-
- virtual RCODE XFLMAPI getAttributeValueUTF8(
- IF_Db * pDb,
- FLMUINT uiAttrNameId,
- FLMBYTE ** ppszValueBuffer) = 0;
-
- virtual RCODE XFLMAPI getAttributeValueUTF8(
- IF_Db * pDb,
- FLMUINT uiAttrNameId,
- IF_DynaBuf * pDynaBuf) = 0;
-
- virtual RCODE XFLMAPI getAttributeValueBinary(
- IF_Db * pDb,
- FLMUINT uiAttrNameId,
- void * pvValueBuffer,
- FLMUINT uiBufferSize,
- FLMUINT * puiValueLength) = 0;
-
- virtual RCODE XFLMAPI getAttributeValueBinary(
- IF_Db * pDb,
- FLMUINT uiAttrNameId,
- IF_DynaBuf * pDynaBuf) = 0;
-
- virtual RCODE XFLMAPI setUINT(
- IF_Db * pDb,
- FLMUINT uiValue,
- FLMUINT uiEncDefId = 0) = 0;
-
- virtual RCODE XFLMAPI setUINT64(
- IF_Db * pDb,
- FLMUINT64 ui64Value,
- FLMUINT uiEncDefId = 0) = 0;
-
- virtual RCODE XFLMAPI setINT(
- IF_Db * pDb,
- FLMINT iValue,
- FLMUINT uiEncDefId = 0) = 0;
-
- virtual RCODE XFLMAPI setINT64(
- IF_Db * pDb,
- FLMINT64 i64Value,
- FLMUINT uiEncDefId = 0) = 0;
-
- virtual RCODE XFLMAPI setMetaValue(
- IF_Db * pDb,
- FLMUINT64 ui64Value) = 0;
-
- virtual RCODE XFLMAPI setUnicode(
- IF_Db * pDb,
- const FLMUNICODE * puzValue,
- FLMUINT uiValueLength = 0,
- FLMBOOL bLast = TRUE,
- FLMUINT uiEncDefId = 0) = 0;
-
- virtual RCODE XFLMAPI setUTF8(
- IF_Db * pDb,
- const FLMBYTE * pszValue,
- FLMUINT uiValueLength = 0,
- FLMBOOL bLast = TRUE,
- FLMUINT uiEncDefId = 0) = 0;
-
- virtual RCODE XFLMAPI setBinary(
- IF_Db * pDb,
- const void * pvValue,
- FLMUINT uiValueLength,
- FLMBOOL bLast = TRUE,
- FLMUINT uiEncDefId = 0) = 0;
-
- virtual RCODE XFLMAPI setAttributeValueUINT(
- IF_Db * pDb,
- FLMUINT uiAttrNameId,
- FLMUINT uiValue,
- FLMUINT uiEncDefId = 0) = 0;
-
- virtual RCODE XFLMAPI setAttributeValueUINT64(
- IF_Db * pDb,
- FLMUINT uiAttrNameId,
- FLMUINT64 ui64Value,
- FLMUINT uiEncDefId = 0) = 0;
-
- virtual RCODE XFLMAPI setAttributeValueINT(
- IF_Db * pDb,
- FLMUINT uiAttrNameId,
- FLMINT iValue,
- FLMUINT uiEncDefId = 0) = 0;
-
- virtual RCODE XFLMAPI setAttributeValueINT64(
- IF_Db * pDb,
- FLMUINT uiAttrNameId,
- FLMINT64 i64Value,
- FLMUINT uiEncDefId = 0) = 0;
-
- virtual RCODE XFLMAPI setAttributeValueUnicode(
- IF_Db * pDb,
- FLMUINT uiAttrNameId,
- const FLMUNICODE * puzValue,
- FLMUINT uiEncDefId = 0) = 0;
-
- virtual RCODE XFLMAPI setAttributeValueUTF8(
- IF_Db * pDb,
- FLMUINT uiAttrNameId,
- const FLMBYTE * pucValue,
- FLMUINT uiLength = 0,
- FLMUINT uiEncDefId = 0) = 0;
-
- virtual RCODE XFLMAPI setAttributeValueBinary(
- IF_Db * pDb,
- FLMUINT uiAttrNameId,
- const void * pvValue,
- FLMUINT uiLength,
- FLMUINT uiEncDefId = 0) = 0;
-
- virtual RCODE XFLMAPI getDocumentNode(
- IF_Db * pDb,
- IF_DOMNode ** ppDocument) = 0;
-
- virtual RCODE XFLMAPI getNextDocument(
- IF_Db * pDb,
- IF_DOMNode ** ppNextDocument) = 0;
-
- virtual RCODE XFLMAPI getPreviousDocument(
- IF_Db * pDb,
- IF_DOMNode ** ppPrevDocument) = 0;
-
- virtual RCODE XFLMAPI getParentNode(
- IF_Db * pDb,
- IF_DOMNode ** ppParent) = 0;
-
- virtual RCODE XFLMAPI getFirstChild(
- IF_Db * pDb,
- IF_DOMNode ** ppFirstChild) = 0;
-
- virtual RCODE XFLMAPI getLastChild(
- IF_Db * pDb,
- IF_DOMNode ** ppLastChild) = 0;
-
- virtual RCODE XFLMAPI getNextSibling(
- IF_Db * pDb,
- IF_DOMNode ** ppNextSibling) = 0;
-
- virtual RCODE XFLMAPI getPreviousSibling(
- IF_Db * pDb,
- IF_DOMNode ** ppPrevSibling) = 0;
-
- virtual RCODE XFLMAPI getChild(
- IF_Db * pDb,
- eDomNodeType eNodeType,
- IF_DOMNode ** ppChild) = 0;
-
- virtual RCODE XFLMAPI getChildElement(
- IF_Db * pDb,
- FLMUINT uiElementNameId,
- IF_DOMNode ** ppChild,
- FLMUINT uiFlags = 0) = 0;
-
- virtual RCODE XFLMAPI getSiblingElement(
- IF_Db * pDb,
- FLMUINT uiElementNameId,
- FLMBOOL bNext,
- IF_DOMNode ** ppSibling) = 0;
-
- virtual RCODE XFLMAPI getAncestorElement(
- IF_Db * pDb,
- FLMUINT uiElementNameId,
- IF_DOMNode ** ppAncestor) = 0;
-
- virtual RCODE XFLMAPI getDescendantElement(
- IF_Db * pDb,
- FLMUINT uiElementNameId,
- IF_DOMNode ** ppDescendant) = 0;
-
- virtual RCODE XFLMAPI insertBefore(
- IF_Db * pDb,
- IF_DOMNode * pNewChild,
- IF_DOMNode * pRefChild) = 0;
-
- virtual RCODE XFLMAPI getPrefix(
- IF_Db * pDb,
- FLMUNICODE * puzPrefixBuffer,
- FLMUINT uiBufferSize,
- FLMUINT * puiCharsReturned = NULL) = 0;
-
- virtual RCODE XFLMAPI getPrefix(
- IF_Db * pDb,
- char * pszPrefixBuffer,
- FLMUINT uiBufferSize,
- FLMUINT * puiCharsReturned = NULL) = 0;
-
- virtual RCODE XFLMAPI getPrefixId(
- IF_Db * pDb,
- FLMUINT * puiPrefixId) = 0;
-
- virtual RCODE XFLMAPI setPrefix(
- IF_Db * pDb,
- const FLMUNICODE * puzPrefix) = 0;
-
- virtual RCODE XFLMAPI setPrefix(
- IF_Db * pDb,
- const char * pszPrefix) = 0;
-
- virtual RCODE XFLMAPI setPrefixId(
- IF_Db * pDb,
- FLMUINT uiPrefixId) = 0;
-
- virtual RCODE XFLMAPI getNamespaceURI(
- IF_Db * pDb,
- FLMUNICODE * puzNamespaceURIBuffer,
- FLMUINT uiBufferSize,
- FLMUINT * puiCharsReturned = NULL) = 0;
-
- virtual RCODE XFLMAPI getNamespaceURI(
- IF_Db * pDb,
- char * pszNamespaceURIBuffer,
- FLMUINT uiBufferSize,
- FLMUINT * puiCharsReturned = NULL) = 0;
-
- virtual RCODE XFLMAPI getLocalName(
- IF_Db * pDb,
- FLMUNICODE * puzLocalNameBuffer,
- FLMUINT uiBufferSize,
- FLMUINT * puiCharsReturned = NULL) = 0;
-
- virtual RCODE XFLMAPI getLocalName(
- IF_Db * pDb,
- char * pszLocalNameBuffer,
- FLMUINT uiBufferSize,
- FLMUINT * puiCharsReturned = NULL) = 0;
-
- virtual RCODE XFLMAPI getQualifiedName(
- IF_Db * pDb,
- FLMUNICODE * puzQualifiedNameBuffer,
- FLMUINT uiBufferSize,
- FLMUINT * puiCharsReturned = NULL) = 0;
-
- virtual RCODE XFLMAPI getQualifiedName(
- IF_Db * pDb,
- char * pszQualifiedNameBuffer,
- FLMUINT uiBufferSize,
- FLMUINT * puiCharsReturned = NULL) = 0;
-
- virtual RCODE XFLMAPI getCollection(
- IF_Db * pDb,
- FLMUINT * puiCollection) = 0;
-
- virtual RCODE XFLMAPI createAnnotation(
- IF_Db * pDb,
- IF_DOMNode ** ppAnnotation,
- FLMUINT64 * pui64NodeId = NULL) = 0;
-
- virtual RCODE XFLMAPI getAnnotation(
- IF_Db * pDb,
- IF_DOMNode ** ppAnnotation) = 0;
-
- virtual RCODE XFLMAPI getAnnotationId(
- IF_Db * pDb,
- FLMUINT64 * pui64AnnotationId) = 0;
-
- virtual RCODE XFLMAPI hasAnnotation(
- IF_Db * pDb,
- FLMBOOL * pbHasAnnotation) = 0;
-
- virtual RCODE XFLMAPI getIStream(
- IF_Db * pDb,
- IF_PosIStream ** ppIStream,
- FLMUINT * puiDataType = NULL,
- FLMUINT * puiDataLength = NULL) = 0;
-
- virtual RCODE XFLMAPI getTextIStream(
- IF_Db * pDb,
- IF_PosIStream ** ppIStream,
- FLMUINT * puiNumChars = NULL) = 0;
-
- virtual FLMUINT XFLMAPI compareNode(
- IF_DOMNode * pNode,
- IF_Db * pDb1,
- IF_Db * pDb2,
- char * pszErrBuff,
- FLMUINT uiErrBuffLen) = 0;
-
- virtual RCODE XFLMAPI isDataLocalToNode(
- IF_Db * pDb,
- FLMBOOL * pbDataIsLocal) = 0;
- };
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_DataVector : public XF_RefCount
- {
- virtual void XFLMAPI setDocumentID(
- FLMUINT64 ui64DocumentID) = 0;
-
- virtual RCODE XFLMAPI setID(
- FLMUINT uiElementNumber,
- FLMUINT64 ui64ID) = 0;
-
- virtual RCODE XFLMAPI setNameId(
- FLMUINT uiElementNumber,
- FLMUINT uiNameId,
- FLMBOOL bIsAttr,
- FLMBOOL bIsData) = 0;
-
- virtual RCODE XFLMAPI setINT(
- FLMUINT uiElementNumber,
- FLMINT iNum) = 0;
-
- virtual RCODE XFLMAPI setINT64(
- FLMUINT uiElementNumber,
- FLMINT64 i64Num) = 0;
-
- virtual RCODE XFLMAPI setUINT(
- FLMUINT uiElementNumber,
- FLMUINT uiNum) = 0;
-
- virtual RCODE XFLMAPI setUINT64(
- FLMUINT uiElementNumber,
- FLMUINT64 ui64Num) = 0;
-
- virtual RCODE XFLMAPI setUnicode(
- FLMUINT uiElementNumber,
- const FLMUNICODE * puzUnicode) = 0;
-
- virtual RCODE XFLMAPI setUTF8(
- FLMUINT uiElementNumber,
- const FLMBYTE * pszUtf8,
- FLMUINT uiBytesInBuffer = 0) = 0;
-
- virtual RCODE XFLMAPI setBinary(
- FLMUINT uiElementNumber,
- const void * pvBinary,
- FLMUINT uiBinaryLen) = 0;
-
- virtual void XFLMAPI setRightTruncated(
- FLMUINT uiElementNumber) = 0;
-
- virtual void XFLMAPI setLeftTruncated(
- FLMUINT uiElementNumber) = 0;
-
- virtual void XFLMAPI clearRightTruncated(
- FLMUINT uiElementNumber) = 0;
-
- virtual void XFLMAPI clearLeftTruncated(
- FLMUINT uiElementNumber) = 0;
-
- virtual FLMBOOL XFLMAPI isRightTruncated(
- FLMUINT uiElementNumber) = 0;
-
- virtual FLMBOOL XFLMAPI isLeftTruncated(
- FLMUINT uiElementNumber) = 0;
-
- virtual FLMUINT64 XFLMAPI getDocumentID( void) = 0;
-
- virtual FLMUINT64 XFLMAPI getID(
- FLMUINT uiElementNumber) = 0;
-
- virtual FLMUINT XFLMAPI getNameId(
- FLMUINT uiElementNumber) = 0;
-
- virtual FLMBOOL XFLMAPI isAttr(
- FLMUINT uiElementNumber) = 0;
-
- virtual FLMBOOL XFLMAPI isDataComponent(
- FLMUINT uiElementNumber) = 0;
-
- virtual FLMBOOL XFLMAPI isKeyComponent(
- FLMUINT uiElementNumber) = 0;
-
- virtual FLMUINT XFLMAPI getDataLength(
- FLMUINT uiElementNumber) = 0;
-
- virtual FLMUINT XFLMAPI getDataType(
- FLMUINT uiElementNumber) = 0;
-
- virtual RCODE XFLMAPI getUTF8Ptr(
- FLMUINT uiElementNumber,
- const FLMBYTE ** ppszUTF8,
- FLMUINT * puiBufLen) = 0;
-
- virtual RCODE XFLMAPI getINT(
- FLMUINT uiElementNumber,
- FLMINT * piNum) = 0;
-
- virtual RCODE XFLMAPI getINT64(
- FLMUINT uiElementNumber,
- FLMINT64 * pi64Num) = 0;
-
- virtual RCODE XFLMAPI getUINT(
- FLMUINT uiElementNumber,
- FLMUINT * puiNum) = 0;
-
- virtual RCODE XFLMAPI getUINT64(
- FLMUINT uiElementNumber,
- FLMUINT64 * pui64Num) = 0;
-
- virtual RCODE XFLMAPI getUnicode(
- FLMUINT uiElementNumber,
- FLMUNICODE ** ppuzUnicode) = 0;
-
- virtual RCODE XFLMAPI getUnicode(
- FLMUINT uiElementNumber,
- FLMUNICODE * puzUnicode,
- FLMUINT * puiBufLen) = 0;
-
- virtual RCODE XFLMAPI getUnicode(
- FLMUINT uiElementNumber,
- IF_DynaBuf * pBuffer) = 0;
-
- virtual RCODE XFLMAPI getUTF8(
- FLMUINT uiElementNumber,
- FLMBYTE * pszUTF8,
- FLMUINT * puiBufLen) = 0;
-
- virtual RCODE XFLMAPI getBinary(
- FLMUINT uiElementNumber,
- void * pvBuffer,
- FLMUINT * puiBufferLen) = 0;
-
- virtual RCODE XFLMAPI outputKey(
- IF_Db * pDb,
- FLMUINT uiIndexNum,
- FLMUINT uiMatchFlags,
- FLMBYTE * pucKeyBuf,
- FLMUINT uiKeyBufSize,
- FLMUINT * puiKeyLen) = 0;
-
- virtual RCODE XFLMAPI outputData(
- IF_Db * pDb,
- FLMUINT uiIndexNum,
- FLMBYTE * pucDataBuf,
- FLMUINT uiDataBufSize,
- FLMUINT * puiDataLen) = 0;
-
- virtual RCODE XFLMAPI inputKey(
- IF_Db * pDb,
- FLMUINT uiIndexNum,
- const FLMBYTE * pucKey,
- FLMUINT uiKeyLen) = 0;
-
- virtual RCODE XFLMAPI inputData(
- IF_Db * pDb,
- FLMUINT uiIndexNum,
- const FLMBYTE * pucData,
- FLMUINT uiDataLen) = 0;
-
- // Miscellaneous methods
-
- virtual void XFLMAPI reset( void) = 0;
-
- virtual const void * XFLMAPI getDataPtr(
- FLMUINT uiElementNumber) = 0;
- };
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_Backup : public XF_RefCount
- {
- virtual FLMUINT64 XFLMAPI getBackupTransId( void) = 0;
-
- virtual FLMUINT64 XFLMAPI getLastBackupTransId( void) = 0;
-
- virtual RCODE XFLMAPI backup(
- const char * pszBackupPath,
- const char * pszPassword,
- IF_BackupClient * ifpClient,
- IF_BackupStatus * ifpStatus,
- FLMUINT * puiIncSeqNum) = 0;
-
- virtual RCODE XFLMAPI endBackup( void) = 0;
- };
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_ThreadInfo : public XF_RefCount
- {
- virtual FLMUINT XFLMAPI getNumThreads( void) = 0;
-
- virtual void XFLMAPI getThreadInfo(
- FLMUINT uiThreadNum,
- FLMUINT * puiThreadId,
- FLMUINT * puiThreadGroup,
- FLMUINT * puiAppId,
- FLMUINT * puiStartTime,
- const char ** ppszThreadName,
- const char ** ppszThreadStatus) = 0;
- };
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_IStream : public XF_RefCount
- {
- /**
- * @brief Reads data from the input stream.
- *
- */
- virtual RCODE XFLMAPI read(
- void * pvBuffer,
- FLMUINT uiBytesToRead,
- FLMUINT * puiBytesRead = NULL) = 0;
-
- /**
- * @brief Close the input stream.
- *
- */
- virtual void XFLMAPI close( void) = 0;
- };
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_PosIStream : public IF_IStream
- {
- virtual FLMUINT64 XFLMAPI totalSize( void) = 0;
-
- virtual FLMUINT64 XFLMAPI remainingSize( void) = 0;
-
- virtual RCODE XFLMAPI positionTo(
- FLMUINT64 ui64Position) = 0;
-
- virtual FLMUINT64 XFLMAPI getCurrPosition( void) = 0;
- };
-
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_OStream : public XF_RefCount
- {
- /**
- * @brief Writes data to the output stream.
- *
- */
- virtual RCODE XFLMAPI write(
- const void * pvBuffer,
- FLMUINT uiBytesToWrite,
- FLMUINT * puiBytesWritten = NULL) = 0;
-
- /**
- * @brief Close the output stream.
- *
- */
- virtual RCODE XFLMAPI close( void) = 0;
- };
-
-
- // Note: Any interfaces ending in Client or Status are interfaces
- // that XFlaim does not provide implementations of. They exist to
- // allow XFlaim to pass data back to the client. Interfaces ending in
- // Status are, generally, informational only, while interfaces ending
- // in Client exist to allow the client to modify the data or take
- // other action.
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_BackupClient : public XF_RefCount
- {
- virtual RCODE XFLMAPI WriteData(
- const void * pvBuffer,
- FLMUINT uiBytesToWrite) = 0;
- };
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_BackupStatus : public XF_RefCount
- {
- virtual RCODE XFLMAPI backupStatus(
- FLMUINT64 ui64BytesToDo,
- FLMUINT64 ui64BytesDone) = 0;
- };
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_CommitClient : public XF_RefCount
- {
- virtual void XFLMAPI commit(
- IF_Db * pDb) = 0;
- };
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_EventClient : public XF_RefCount
- {
- virtual void XFLMAPI catchEvent(
- eEventType eEvent,
- IF_Db * pDb,
- FLMUINT uiThreadId,
- FLMUINT64 ui64TransID,
- FLMUINT uiIndexOrCollection,
- FLMUINT64 ui64NodeId,
- RCODE rc) = 0;
- };
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_IxClient : public XF_RefCount
- {
- virtual RCODE XFLMAPI doIndexing(
- IF_Db * pDb,
- FLMUINT uiIndexNum,
- FLMUINT uiCollectionNum,
- IF_DOMNode * pDocNode) = 0;
- };
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_LockInfoClient : public XF_RefCount
- {
- virtual FLMBOOL XFLMAPI setLockCount( // Return TRUE to continue, FALSE to stop
- FLMUINT uiTotalLocks) = 0;
-
- virtual FLMBOOL XFLMAPI addLockInfo( // Return TRUE to continue, FALSE to stop
- FLMUINT uiLockNum, // Position in queue (0 = lock holder,
- // 1 ... n = lock waiter)
- FLMUINT uiThreadID, // Thread ID of the lock holder/waiter
- FLMUINT uiTime) = 0; // For the lock holder, this is the
- // time when the lock was obtained.
- // For a lock waiter, this is the time
- // that the waiter was placed in the queue.
- // Both times are presented in milliseconds.
- };
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_LoggerClient : public XF_RefCount
- {
- virtual IF_LogMessageClient * XFLMAPI beginMessage(
- eLogMessageType eMsgType) = 0;
- };
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_LogMessageClient : public XF_RefCount
- {
- virtual void XFLMAPI changeColor(
- eColorType eForeColor,
- eColorType eBackColor) = 0;
-
- virtual void XFLMAPI appendString(
- const char * pszStr) = 0;
-
- virtual void XFLMAPI newline( void) = 0;
-
- virtual void XFLMAPI endMessage( void) = 0;
-
- virtual void XFLMAPI pushForegroundColor( void) = 0;
-
- virtual void XFLMAPI popForegroundColor( void) = 0;
-
- virtual void XFLMAPI pushBackgroundColor( void) = 0;
-
- virtual void XFLMAPI popBackgroundColor( void) = 0;
- };
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_RestoreStatus : public XF_RefCount
- {
- virtual RCODE XFLMAPI reportProgress(
- eRestoreAction * peAction,
- FLMUINT64 ui64BytesToDo,
- FLMUINT64 ui64BytesDone) = 0;
-
- virtual RCODE XFLMAPI reportError(
- eRestoreAction * peAction,
- RCODE rcErr) = 0;
-
- virtual RCODE XFLMAPI reportOpenRflFile(
- eRestoreAction * peAction,
- FLMUINT uiFileNum) = 0;
-
- virtual RCODE XFLMAPI reportRflRead(
- eRestoreAction * peAction,
- FLMUINT uiFileNum,
- FLMUINT uiBytesRead) = 0;
-
- virtual RCODE XFLMAPI reportBeginTrans(
- eRestoreAction * peAction,
- FLMUINT64 ui64TransId) = 0;
-
- virtual RCODE XFLMAPI reportCommitTrans(
- eRestoreAction * peAction,
- FLMUINT64 ui64TransId) = 0;
-
- virtual RCODE XFLMAPI reportAbortTrans(
- eRestoreAction * peAction,
- FLMUINT64 ui64TransId) = 0;
-
- virtual RCODE XFLMAPI reportBlockChainFree(
- eRestoreAction * peAction,
- FLMUINT64 ui64TransId,
- FLMUINT64 ui64MaintDocNum,
- FLMUINT uiStartBlkAddr,
- FLMUINT uiEndBlkAddr,
- FLMUINT uiCount) = 0;
-
- virtual RCODE XFLMAPI reportIndexSuspend(
- eRestoreAction * peAction,
- FLMUINT64 ui64TransId,
- FLMUINT uiIndexNum) = 0;
-
- virtual RCODE XFLMAPI reportIndexResume(
- eRestoreAction * peAction,
- FLMUINT64 ui64TransId,
- FLMUINT uiIndexNum) = 0;
-
- virtual RCODE XFLMAPI reportReduce(
- eRestoreAction * peAction,
- FLMUINT64 ui64TransId,
- FLMUINT uiCount) = 0;
-
- virtual RCODE XFLMAPI reportUpgrade(
- eRestoreAction * peAction,
- FLMUINT64 ui64TransId,
- FLMUINT uiOldDbVersion,
- FLMUINT uiNewDbVersion) = 0;
-
- virtual RCODE XFLMAPI reportEnableEncryption(
- eRestoreAction * peAction,
- FLMUINT64 ui64TransId) = 0;
-
- virtual RCODE XFLMAPI reportWrapKey(
- eRestoreAction * peAction,
- FLMUINT64 ui64TransId) = 0;
-
- virtual RCODE XFLMAPI reportRollOverDbKey(
- eRestoreAction * peAction,
- FLMUINT64 ui64TransId) = 0;
-
- virtual RCODE XFLMAPI reportDocumentDone(
- eRestoreAction * peAction,
- FLMUINT64 ui64TransId,
- FLMUINT uiCollection,
- FLMUINT64 ui64DocumentId) = 0;
-
- virtual RCODE XFLMAPI reportNodeDelete(
- eRestoreAction * peAction,
- FLMUINT64 ui64TransId,
- FLMUINT uiCollection,
- FLMUINT64 ui64NodeId) = 0;
-
- virtual RCODE XFLMAPI reportAttributeDelete(
- eRestoreAction * peAction,
- FLMUINT64 ui64TransId,
- FLMUINT uiCollection,
- FLMUINT64 ui64ElementId,
- FLMUINT uiAttrNameId) = 0;
-
- virtual RCODE XFLMAPI reportNodeChildrenDelete(
- eRestoreAction * peAction,
- FLMUINT64 ui64TransId,
- FLMUINT uiCollection,
- FLMUINT64 ui64ParentNodeId,
- FLMUINT uiNameId) = 0;
-
- virtual RCODE XFLMAPI reportNodeCreate(
- eRestoreAction * peAction,
- FLMUINT64 ui64TransId,
- FLMUINT uiCollection,
- FLMUINT64 ui64RefNodeId,
- eDomNodeType eNodeType,
- FLMUINT uiNameId,
- eNodeInsertLoc eLocation) = 0;
-
- virtual RCODE XFLMAPI reportInsertBefore(
- eRestoreAction * peAction,
- FLMUINT64 ui64TransId,
- FLMUINT uiCollection,
- FLMUINT64 ui64ParentNodeId,
- FLMUINT64 ui64NewChildNodeId,
- FLMUINT64 ui64RefChildNodeId) = 0;
-
- virtual RCODE XFLMAPI reportNodeUpdate(
- eRestoreAction * peAction,
- FLMUINT64 ui64TransId,
- FLMUINT uiCollection,
- FLMUINT64 ui64NodeId) = 0;
-
- virtual RCODE XFLMAPI reportNodeSetValue(
- eRestoreAction * peAction,
- FLMUINT64 ui64TransId,
- FLMUINT uiCollection,
- FLMUINT64 ui64NodeId) = 0;
-
- virtual RCODE XFLMAPI reportAttributeSetValue(
- eRestoreAction * peAction,
- FLMUINT64 ui64TransId,
- FLMUINT uiCollection,
- FLMUINT64 ui64ElementNodeId,
- FLMUINT uiAttrNameId) = 0;
-
- virtual RCODE XFLMAPI reportNodeFlagsUpdate(
- eRestoreAction * peAction,
- FLMUINT64 ui64TransId,
- FLMUINT uiCollection,
- FLMUINT64 ui64NodeId,
- FLMUINT uiFlags,
- FLMBOOL bAdd) = 0;
-
- virtual RCODE XFLMAPI reportNodeSetPrefixId(
- eRestoreAction * peAction,
- FLMUINT64 ui64TransId,
- FLMUINT uiCollection,
- FLMUINT64 ui64NodeId,
- FLMUINT uiAttrNameId,
- FLMUINT uiPrefixId) = 0;
-
- virtual RCODE XFLMAPI reportNodeSetMetaValue(
- eRestoreAction * peAction,
- FLMUINT64 ui64TransId,
- FLMUINT uiCollection,
- FLMUINT64 ui64NodeId,
- FLMUINT64 ui64MetaValue) = 0;
-
- virtual RCODE XFLMAPI reportSetNextNodeId(
- eRestoreAction * peAction,
- FLMUINT64 ui64TransId,
- FLMUINT uiCollection,
- FLMUINT64 ui64NextNodeId) = 0;
- };
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_RestoreClient : public XF_RefCount
- {
- virtual RCODE XFLMAPI openBackupSet( void) = 0;
-
- virtual RCODE XFLMAPI openRflFile( // Open an RFL file
- FLMUINT uiFileNum) = 0;
-
- virtual RCODE XFLMAPI openIncFile( // Open an incremental backup file
- FLMUINT uiFileNum) = 0;
-
- virtual RCODE XFLMAPI read(
- FLMUINT uiLength, // Number of bytes to read
- void * pvBuffer, // Buffer to place read bytes into
- FLMUINT * puiBytesRead) = 0; // [out] Number of bytes read
-
- virtual RCODE XFLMAPI close( void) = 0; // Close the current file
-
- virtual RCODE XFLMAPI abortFile( void) = 0; // Abort processing the file
- // and close file handles, etc.
- };
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_UpgradeClient : public XF_RefCount
- {
- };
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_DeleteStatus : public XF_RefCount
- {
- virtual RCODE XFLMAPI reportDelete(
- FLMUINT uiIndexOrCollectionNum,
- FLMBOOL bIsIndex,
- FLMUINT uiBlocksDeleted,
- FLMUINT uiBlockSize) = 0;
- };
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_DbCopyStatus : public XF_RefCount
- {
- virtual RCODE XFLMAPI dbCopyStatus(
- FLMUINT64 ui64BytesToCopy,
- FLMUINT64 ui64BytesCopied,
- FLMBOOL bNewSrcFile,
- const char * pszSrcFileName,
- const char * pszDestFileName) = 0;
- };
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_DbRebuildStatus : public XF_RefCount
- {
- virtual RCODE XFLMAPI reportRebuild(
- XFLM_REBUILD_INFO * pRebuild) = 0;
-
- virtual RCODE XFLMAPI reportRebuildErr(
- XFLM_CORRUPT_INFO * pCorruptInfo) = 0;
- };
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_DbCheckStatus : public XF_RefCount
- {
- virtual RCODE XFLMAPI reportProgress(
- XFLM_PROGRESS_CHECK_INFO * pProgCheck) = 0;
-
- virtual RCODE XFLMAPI reportCheckErr(
- XFLM_CORRUPT_INFO * pCorruptInfo,
- FLMBOOL * pbFix) = 0;
- // [OUT] - If the client sets this to true, then XFlaim will
- // attempt to fix the problem. NOTE: It is allowable for
- // XFlaim to pass in NULL here!! (This means that the client
- // doesn't have a choice regarding XFlaim's actions.) The
- // client must check for NULL before attempting to assing a
- // value to this parameter!!
- };
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_DbRenameStatus : public XF_RefCount
- {
- virtual RCODE XFLMAPI dbRenameStatus(
- const char * pszSrcFileName,
- const char * pszDstFileName) = 0;
- };
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_IxStatus : public XF_RefCount
- {
- virtual RCODE XFLMAPI reportIndex(
- FLMUINT64 ui64LastDocumentId) = 0;
- };
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_FileSystem : public XF_RefCount
- {
- virtual RCODE XFLMAPI Create(
- const char * pszFileName,
- FLMUINT uiIoFlags,
- IF_FileHdl ** ppFileHdl) = 0;
-
- virtual RCODE XFLMAPI CreateBlockFile(
- const char * pszFileName,
- FLMUINT uiIoFlags,
- FLMUINT uiBlockSize,
- IF_FileHdl ** ppFileHdl) = 0;
-
- virtual RCODE XFLMAPI CreateUnique(
- const char * pszDirName,
- const char * pszFileExtension,
- FLMUINT uiIoFlags,
- IF_FileHdl ** ppFileHdl) = 0;
-
- virtual RCODE XFLMAPI Open(
- const char * pszFileName,
- FLMUINT uiIoFlags,
- IF_FileHdl ** ppFileHdl) = 0;
-
- virtual RCODE XFLMAPI OpenBlockFile(
- const char * pszFileName,
- FLMUINT uiIoFlags,
- FLMUINT uiBlockSize,
- IF_FileHdl ** ppFileHdl) = 0;
-
- virtual RCODE XFLMAPI OpenDir(
- const char * pszDirName,
- const char * pszPattern,
- IF_DirHdl ** ppDirHdl) = 0;
-
- virtual RCODE XFLMAPI CreateDir(
- const char * pszDirName) = 0;
-
- virtual RCODE XFLMAPI RemoveDir(
- const char * pszDirName,
- FLMBOOL bClear = FALSE) = 0;
-
- virtual RCODE XFLMAPI Exists(
- const char * pszFileName) = 0;
-
- virtual FLMBOOL XFLMAPI IsDir(
- const char * pszFileName) = 0;
-
- virtual RCODE XFLMAPI GetTimeStamp(
- const char * pszFileName,
- FLMUINT * puiTimeStamp) = 0;
-
- virtual RCODE XFLMAPI Delete(
- const char * pszFileName) = 0;
-
- virtual RCODE XFLMAPI Copy(
- const char * pszSrcFileName,
- const char * pszDestFileName,
- FLMBOOL bOverwrite,
- FLMUINT64 * pui64BytesCopied) = 0;
-
- virtual RCODE XFLMAPI Rename(
- const char * pszFileName,
- const char * pszNewFileName) = 0;
-
- virtual RCODE XFLMAPI GetSectorSize(
- const char * pszFileName,
- FLMUINT * puiSectorSize) = 0;
-
- virtual void XFLMAPI pathParse(
- const char * pszPath,
- char * pszServer,
- char * pszVolume,
- char * pszDirPath,
- char * pszFileName) = 0;
-
- virtual RCODE XFLMAPI pathReduce(
- const char * pszSourcePath,
- char * pszDestPath,
- char * pszString) = 0;
-
- virtual RCODE XFLMAPI pathAppend(
- char * pszPath,
- const char * pszPathComponent) = 0;
-
- virtual RCODE XFLMAPI pathToStorageString(
- const char * pPath,
- char * pszString) = 0;
-
- virtual void XFLMAPI pathCreateUniqueName(
- FLMUINT * puiTime,
- char * pFileName,
- const char * pFileExt,
- FLMBYTE * pHighChars,
- FLMBOOL bModext) = 0;
-
- virtual FLMBOOL XFLMAPI doesFileMatch(
- const char * pszFileName,
- const char * pszTemplate) = 0;
- };
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_FileHdl : public XF_RefCount
- {
- virtual RCODE XFLMAPI Close( void) = 0;
-
- virtual RCODE XFLMAPI Create(
- const char * pszFileName,
- FLMUINT uiIoFlags) = 0;
-
- virtual RCODE XFLMAPI CreateUnique(
- const char * pszDirName,
- const char * pszFileExtension,
- FLMUINT uiIoFlags) = 0;
-
- virtual RCODE XFLMAPI Open(
- const char * pszFileName,
- FLMUINT uiIoFlags) = 0;
-
- virtual RCODE XFLMAPI Flush( void) = 0;
-
- virtual RCODE XFLMAPI Read(
- FLMUINT64 ui64Offset,
- FLMUINT uiLength,
- void * pvBuffer,
- FLMUINT * puiBytesRead) = 0;
-
- virtual RCODE XFLMAPI Seek(
- FLMUINT64 ui64Offset,
- FLMINT iWhence,
- FLMUINT64 * pui64NewOffset) = 0;
-
- virtual RCODE XFLMAPI Size(
- FLMUINT64 * pui64Size) = 0;
-
- virtual RCODE XFLMAPI Tell(
- FLMUINT64 * pui64Offset) = 0;
-
- virtual RCODE XFLMAPI Truncate(
- FLMUINT64 ui64Size) = 0;
-
- virtual RCODE XFLMAPI Write(
- FLMUINT64 ui64Offset,
- FLMUINT uiLength,
- const void * pvBuffer,
- FLMUINT * puiBytesWritten) = 0;
-
- // Some I/O subsystems (such as direct IO) can only read and write sectors
- // (512 byte chunks). If uiOffset is not on a sector boundary or
- // uiLength is not an exact multiple of a sector size, the I/O system
- // would have to try to read or write a partial sector - something that
- // requires extra overhead, particularly for write operations - because
- // in order to write a partial sector, the I/O subsystem first has to
- // read the sector in to memory before writing it out in order to
- // preserve the part of the sector that was not being written to.
-
- // The SectorRead and SectorWrite routines are provided to allow
- // the caller to tell the I/O subsystem that it is OK to do full
- // sector reads or writes if it needs to, because pvBuffer is
- // guaranteed to be a multiple of 512 bytes big. If the I/O
- // subsystem can only do sector reads and writes, it can use the
- // extra buffer space in pvBuffer. When a program calls SectorWrite
- // it is also telling the I/O subsystem that it does not need to
- // read a partially written sector from disk before writing it out.
- // It will be OK to write whatever data is in the pvBuffer to fill out
- // the sector.
-
- virtual RCODE XFLMAPI SectorRead(
- FLMUINT64 ui64ReadOffset,
- FLMUINT uiBytesToRead,
- void * pvBuffer,
- FLMUINT * puiBytesReadRV) = 0;
-
- virtual RCODE XFLMAPI SectorWrite(
- FLMUINT64 ui64WriteOffset,
- FLMUINT uiBytesToWrite,
- const void * pvBuffer,
- FLMUINT uiBufferSize,
- void * pvBufferObj,
- FLMUINT * puiBytesWrittenRV,
- FLMBOOL bZeroFill = TRUE) = 0;
-
- virtual FLMBOOL XFLMAPI CanDoAsync( void) = 0;
-
- virtual void XFLMAPI setExtendSize(
- FLMUINT uiExtendSize) = 0;
-
- virtual void XFLMAPI setMaxAutoExtendSize(
- FLMUINT uiMaxAutoExtendSize) = 0;
- };
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_DirHdl : public XF_RefCount
- {
- virtual RCODE XFLMAPI Next( void) = 0;
-
- virtual const char * XFLMAPI CurrentItemName( void) = 0;
-
- virtual void XFLMAPI CurrentItemPath(
- char * pszPath) = 0;
-
- virtual FLMUINT64 XFLMAPI CurrentItemSize( void) = 0;
-
- virtual FLMBOOL XFLMAPI CurrentItemIsDir( void) = 0;
-
- virtual RCODE XFLMAPI OpenDir(
- const char * pszDirName,
- const char * pszPattern) = 0;
-
- virtual RCODE XFLMAPI CreateDir(
- const char * pDirName) = 0;
-
- virtual RCODE XFLMAPI RemoveDir(
- const char * pDirPath) = 0;
- };
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_DbInfo : public XF_RefCount
- {
- virtual FLMUINT XFLMAPI getNumCollections( void) = 0;
-
- virtual FLMUINT XFLMAPI getNumIndexes( void) = 0;
-
- virtual FLMUINT XFLMAPI getNumLogicalFiles( void) = 0;
-
- virtual FLMUINT64 XFLMAPI getFileSize( void) = 0;
-
- virtual const XFLM_DB_HDR * XFLMAPI getDbHdr( void) = 0;
-
- virtual void XFLMAPI getAvailBlockStats(
- FLMUINT64 * pui64BytesUsed,
- FLMUINT * puiBlockCount,
- FLMINT * piLastError,
- FLMUINT * puiNumErrors) = 0;
-
- virtual void XFLMAPI getLFHBlockStats(
- FLMUINT64 * pui64BytesUsed,
- FLMUINT * puiBlockCount,
- FLMINT * piLastError,
- FLMUINT * puiNumErrors) = 0;
-
- virtual void XFLMAPI getBTreeInfo(
- FLMUINT uiNthLogicalFile,
- FLMUINT * puiLfNum,
- eLFileType * peLfType,
- FLMUINT * puiRootBlkAddress,
- FLMUINT * puiNumLevels) = 0;
-
- virtual void XFLMAPI getBTreeBlockStats(
- FLMUINT uiNthLogicalFile,
- FLMUINT uiLevel,
- FLMUINT64 * pui64KeyCount,
- FLMUINT64 * pui64BytesUsed,
- FLMUINT64 * pui64ElementCount,
- FLMUINT64 * pui64ContElementCount,
- FLMUINT64 * pui64ContElmBytes,
- FLMUINT * puiBlockCount,
- FLMINT * piLastError,
- FLMUINT * puiNumErrors) = 0;
- };
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_ResultSetCompare : public XF_RefCount
- {
- virtual RCODE XFLMAPI compare(
- const void * pvData1,
- FLMUINT uiLength1,
- const void * pvData2,
- FLMUINT uiLength2,
- FLMINT * piCompare) = 0;
- };
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_ResultSetSortStatus : public XF_RefCount
- {
- virtual RCODE XFLMAPI reportSortStatus(
- FLMUINT64 ui64EstTotalUnits,
- FLMUINT64 ui64UnitsDone) = 0;
- };
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_ResultSet : public XF_RefCount
- {
- virtual RCODE XFLMAPI setupResultSet(
- const char * pszPath,
- IF_ResultSetCompare * pCompare,
- FLMUINT uiEntrySize,
- FLMBOOL bDropDuplicates = TRUE,
- FLMBOOL bEntriesInOrder = FALSE,
- const char * pszFileName = NULL) = 0;
-
- virtual void XFLMAPI setSortStatus(
- IF_ResultSetSortStatus * pSortStatus) = 0;
-
- virtual FLMUINT64 XFLMAPI getTotalEntries( void) = 0;
-
- // Methods for building a result set.
-
- virtual RCODE XFLMAPI addEntry(
- const void * pvEntry,
- FLMUINT uiEntryLength = 0) = 0;
-
- virtual RCODE XFLMAPI finalizeResultSet(
- FLMUINT64 * pui64TotalEntries = NULL) = 0;
-
- // Methods for reading entries from a result set
-
- virtual RCODE XFLMAPI getFirst(
- void * pvEntryBuffer,
- FLMUINT uiBufferLength = 0,
- FLMUINT * puiEntryLength = NULL) = 0;
-
- virtual RCODE XFLMAPI getNext(
- void * pvEntryBuffer,
- FLMUINT uiBufferLength = 0,
- FLMUINT * puiEntryLength = NULL) = 0;
-
- virtual RCODE XFLMAPI getLast(
- void * pvEntryBuffer,
- FLMUINT uiBufferLength = 0,
- FLMUINT * puiEntryLength = NULL) = 0;
-
- virtual RCODE XFLMAPI getPrev(
- void * pvEntryBuffer,
- FLMUINT uiBufferLength = 0,
- FLMUINT * puiEntryLength = NULL) = 0;
-
- virtual RCODE XFLMAPI getCurrent(
- void * pvEntryBuffer,
- FLMUINT uiBufferLength = 0,
- FLMUINT * puiEntryLength = NULL) = 0;
-
- virtual RCODE XFLMAPI findMatch(
- const void * pvMatchEntry,
- void * pvFoundEntry) = 0;
-
- virtual RCODE XFLMAPI findMatch(
- const void * pvMatchEntry,
- FLMUINT uiMatchEntryLength,
- void * pvFoundEntry,
- FLMUINT * puiFoundEntryLength) = 0;
-
- virtual RCODE XFLMAPI modifyCurrent(
- const void * pvEntry,
- FLMUINT uiEntryLength = 0) = 0;
-
- virtual FLMUINT64 XFLMAPI getPosition( void) = 0;
-
- virtual RCODE XFLMAPI setPosition(
- FLMUINT64 ui64Position) = 0;
-
- virtual RCODE XFLMAPI resetResultSet(
- FLMBOOL bDelete = TRUE) = 0;
-
- virtual RCODE XFLMAPI flushToFile( void) = 0;
-
- };
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_QueryStatus : public XF_RefCount
- {
- virtual RCODE XFLMAPI queryStatus(
- XFLM_OPT_INFO * pOptInfo) = 0;
-
- virtual RCODE XFLMAPI newSource(
- XFLM_OPT_INFO * pOptInfo) = 0;
-
- virtual RCODE XFLMAPI resultSetStatus(
- FLMUINT64 ui64TotalDocsRead,
- FLMUINT64 ui64TotalDocsPassed,
- FLMBOOL bCanRetrieveDocs) = 0;
-
- virtual RCODE XFLMAPI resultSetComplete(
- FLMUINT64 ui64TotalDocsRead,
- FLMUINT64 ui64TotalDocsPassed) = 0;
- };
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_QueryValidator : public XF_RefCount
- {
- virtual RCODE XFLMAPI validateNode(
- IF_Db * pDb,
- IF_DOMNode * pNode,
- FLMBOOL * pbPassed) = 0;
- };
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_QueryValFunc : public XF_RefCount
- {
- // NOTE: pDynaBuf should only be used when returning XFLM_UTF8_VAL or
- // XFLM_BINARY_VAL. pvVal should be used for all other types.
- // If there are no more values, return NE_XFLM_EOF_HIT or
- // NE_XFLM_BOF_HIT, depending on eValueToGet.
-
- virtual RCODE XFLMAPI getValue(
- IF_Db * pDb,
- IF_DOMNode * pContextNode,
- ValIterator eValueToGet,
- eValTypes * peValType,
- FLMBOOL * pbLastValue,
- void * pvVal,
- IF_DynaBuf * pDynaBuf = NULL) = 0;
-
- virtual RCODE XFLMAPI cloneSelf(
- IF_QueryValFunc ** ppNewObj) = 0;
- };
-
- /*============================================================================
- Desc: Abstract base class which provides the interface that
- XFLAIM uses to allow an application to embed a node source
- inside an XPATH component.
- ============================================================================*/
- xflminterface IF_QueryNodeSource : public XF_RefCount
- {
- public:
-
- // Method that returns the search cost of this object in providing
- // nodes for a query.
-
- virtual RCODE XFLMAPI searchCost(
- IF_Db * pDb,
- FLMBOOL bNotted,
- FLMUINT * puiCost,
- FLMBOOL * pbMustScan) = 0;
-
- // Position to and return the first node that satisfies the predicate.
-
- virtual RCODE XFLMAPI getFirst(
- IF_Db * pDb,
- IF_DOMNode * pContextNode,
- IF_DOMNode ** ppNode,
- FLMUINT uiTimeLimit, // milliseconds
- IF_QueryStatus * pQueryStatus) = 0;
-
- // Position to and return the last node that satisfies the predicate.
-
- virtual RCODE XFLMAPI getLast(
- IF_Db * pDb,
- IF_DOMNode * pContextNode,
- IF_DOMNode ** ppNode,
- FLMUINT uiTimeLimit, // milliseconds
- IF_QueryStatus * pQueryStatus) = 0;
-
- // Position to and return the next node that satisfies the predicate.
- // If no prior positioning has been done,
- // position to and return the first node.
-
- virtual RCODE XFLMAPI getNext(
- IF_Db * pDb,
- IF_DOMNode * pContextNode,
- IF_DOMNode ** ppNode,
- FLMUINT uiTimeLimit, // milliseconds
- IF_QueryStatus * pQueryStatus) = 0;
-
- // Position to and return the previous node that satisfies the predicate.
- // If no prior positioning has been done,
- // position to and return the last node.
-
- virtual RCODE XFLMAPI getPrev(
- IF_Db * pDb,
- IF_DOMNode * pContextNode,
- IF_DOMNode ** ppNode,
- FLMUINT uiTimeLimit, // milliseconds
- IF_QueryStatus * pQueryStatus) = 0;
-
- // Return index being used, 0 if none.
-
- virtual RCODE XFLMAPI getIndex(
- IF_Db * pDb,
- FLMUINT * puiIndex,
- FLMBOOL * pbHaveMultiple) = 0;
-
- virtual RCODE XFLMAPI getOptInfoCount(
- IF_Db * pDb,
- FLMUINT * puiOptInfoCount) = 0;
-
- virtual RCODE XFLMAPI getOptInfo(
- IF_Db * pDb,
- XFLM_OPT_INFO * pOptInfoArray,
- FLMUINT uiNumOptInfoStructsToGet) = 0;
-
- // Return a copy of the object. Result set should be
- // emptied, score should be unset - only the predicate
- // should be preserved.
- // Returns NULL if the copy fails.
-
- virtual RCODE copy(
- IF_QueryNodeSource ** ppNodeSourceCopy) = 0;
-
- virtual void releaseResources( void) = 0;
- };
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_OperandComparer : public XF_RefCount
- {
- virtual RCODE XFLMAPI compare(
- IF_PosIStream * pLeftOperandStream,
- IF_PosIStream * pRightOperandStream,
- FLMINT * piCompare) = 0;
- };
-
- #define XFLM_MAX_SORT_KEYS 32
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_Query : public XF_RefCount
- {
- virtual RCODE XFLMAPI setLanguage(
- FLMUINT uiLanguage) = 0;
-
- virtual RCODE XFLMAPI setCollection(
- FLMUINT uiCollection) = 0;
-
- virtual RCODE XFLMAPI setupQueryExpr(
- IF_Db * pDb,
- const FLMUNICODE * puzQuery) = 0;
-
- virtual RCODE XFLMAPI setupQueryExpr(
- IF_Db * pDb,
- const char * pszQueryExpr) = 0;
-
- virtual RCODE XFLMAPI copyCriteria(
- IF_Query * pSrcQuery) = 0;
-
- virtual RCODE XFLMAPI addXPathComponent(
- eXPathAxisTypes eXPathAxis,
- eDomNodeType eNodeType,
- FLMUINT uiNameId,
- IF_QueryNodeSource * pNodeSource = NULL) = 0;
-
- virtual RCODE XFLMAPI addOperator(
- eQueryOperators eOperator,
- FLMUINT uiCompareRules = 0,
- IF_OperandComparer * pOpComparer = NULL) = 0;
-
- virtual RCODE XFLMAPI addUnicodeValue(
- const FLMUNICODE * puzVal) = 0;
-
- virtual RCODE XFLMAPI addUTF8Value(
- const char * pszVal,
- FLMUINT uiUTF8Len = 0) = 0;
-
- virtual RCODE XFLMAPI addBinaryValue(
- const void * pvVal,
- FLMUINT uiValLen) = 0;
-
- virtual RCODE XFLMAPI addUINTValue(
- FLMUINT uiVal) = 0;
-
- virtual RCODE XFLMAPI addINTValue(
- FLMINT iVal) = 0;
-
- virtual RCODE XFLMAPI addUINT64Value(
- FLMUINT64 ui64Val) = 0;
-
- virtual RCODE XFLMAPI addINT64Value(
- FLMINT64 i64Val) = 0;
-
- virtual RCODE XFLMAPI addBoolean(
- FLMBOOL bVal,
- FLMBOOL bUnknown = FALSE) = 0;
-
- virtual RCODE XFLMAPI addFunction(
- eQueryFunctions eFunction) = 0;
-
- virtual RCODE XFLMAPI addFunction(
- IF_QueryValFunc * pFuncObj,
- FLMBOOL bHasXPathExpr) = 0;
-
- virtual RCODE XFLMAPI getFirst(
- IF_Db * pDb,
- IF_DOMNode ** ppNode,
- FLMUINT uiTimeLimit = 0) = 0; // milliseconds
-
- virtual RCODE XFLMAPI getLast(
- IF_Db * pDb,
- IF_DOMNode ** ppNode,
- FLMUINT uiTimeLimit = 0) = 0; // milliseconds
-
- virtual RCODE XFLMAPI getNext(
- IF_Db * pDb,
- IF_DOMNode ** ppNode,
- FLMUINT uiTimeLimit = 0, // milliseconds
- FLMUINT uiNumToSkip = 0,
- FLMUINT * puiNumSkipped = NULL) = 0;
-
- virtual RCODE XFLMAPI getPrev(
- IF_Db * pDb,
- IF_DOMNode ** ppNode,
- FLMUINT uiTimeLimit = 0, // milliseconds
- FLMUINT uiNumToSkip = 0,
- FLMUINT * puiNumSkipped = NULL) = 0;
-
- virtual RCODE XFLMAPI getCurrent(
- IF_Db * pDb,
- IF_DOMNode ** ppNode) = 0;
-
- virtual void XFLMAPI resetQuery( void) = 0;
-
- virtual RCODE XFLMAPI getStatsAndOptInfo(
- FLMUINT * puiNumOptInfos,
- XFLM_OPT_INFO ** ppOptInfo) = 0;
-
- virtual void XFLMAPI freeStatsAndOptInfo(
- XFLM_OPT_INFO ** ppOptInfo) = 0;
-
- virtual void XFLMAPI setDupHandling(
- FLMBOOL bRemoveDups) = 0;
-
- virtual RCODE XFLMAPI setIndex(
- FLMUINT uiIndex) = 0;
-
- virtual RCODE XFLMAPI getIndex(
- IF_Db * pDb,
- FLMUINT * puiIndex,
- FLMBOOL * pbHaveMultiple) = 0;
-
- virtual RCODE XFLMAPI addSortKey(
- void * pvSortKeyContext,
- FLMBOOL bChildToContext,
- FLMBOOL bElement,
- FLMUINT uiNameId,
- FLMUINT uiCompareRules,
- FLMUINT uiLimit,
- FLMUINT uiKeyComponent,
- FLMBOOL bSortDescending,
- FLMBOOL bSortMissingHigh,
- void ** ppvContext) = 0;
-
- virtual RCODE XFLMAPI enablePositioning( void) = 0;
-
- virtual RCODE XFLMAPI positionTo(
- IF_Db * pDb,
- IF_DOMNode ** ppNode,
- FLMUINT uiTimeLimit,
- FLMUINT uiPosition) = 0;
-
- virtual RCODE XFLMAPI positionTo(
- IF_Db * pDb,
- IF_DOMNode ** ppNode,
- FLMUINT uiTimeLimit,
- IF_DataVector * pSearchKey,
- FLMUINT uiFlags) = 0;
-
- virtual RCODE XFLMAPI getPosition(
- IF_Db * pDb,
- FLMUINT * puiPosition) = 0;
-
- virtual RCODE XFLMAPI buildResultSet(
- IF_Db * pDb,
- FLMUINT uiTimeLimit) = 0;
-
- virtual void XFLMAPI stopBuildingResultSet( void) = 0;
-
- virtual RCODE XFLMAPI getCounts(
- IF_Db * pDb,
- FLMUINT uiTimeLimit,
- FLMBOOL bPartialCountOk,
- FLMUINT * puiReadCount,
- FLMUINT * puiPassedCount,
- FLMUINT * puiPositionableToCount,
- FLMBOOL * pbDoneBuildingResultSet = NULL) = 0;
-
- virtual void XFLMAPI enableResultSetEncryption( void) = 0;
-
- virtual void XFLMAPI setQueryStatusObject(
- IF_QueryStatus * pQueryStatus) = 0;
-
- virtual void XFLMAPI setQueryValidatorObject(
- IF_QueryValidator * pQueryValidator) = 0;
- };
-
- /****************************************************************************
- Desc: Pool memory allocator
- ****************************************************************************/
- xflminterface IF_Pool : public XF_RefCount
- {
- virtual void poolInit(
- FLMUINT uiBlockSize) = 0;
-
- virtual RCODE poolAlloc(
- FLMUINT uiSize,
- void ** ppvPtr) = 0;
-
- virtual RCODE poolCalloc(
- FLMUINT uiSize,
- void ** ppvPtr) = 0;
-
- virtual void poolFree( void) = 0;
-
- virtual void poolReset(
- void * pvMark,
- FLMBOOL bReduceFirstBlock = FALSE) = 0;
-
- virtual void * poolMark( void) = 0;
-
- virtual FLMUINT getBlockSize( void) = 0;
-
- virtual FLMUINT getBytesAllocated( void) = 0;
- };
-
- /****************************************************************************
- Desc: Dynamic buffer
- ****************************************************************************/
- xflminterface IF_DynaBuf : public XF_RefCount
- {
- virtual void truncateData(
- FLMUINT uiSize) = 0;
-
- virtual RCODE appendData(
- const void * pvData,
- FLMUINT uiSize) = 0;
-
- virtual RCODE allocSpace(
- FLMUINT uiSize,
- void ** ppvAlloc) = 0;
- };
-
-
- typedef struct XFLM_NODE_INFO_ITEM
- {
- FLMUINT64 ui64Count;
- FLMUINT64 ui64Bytes;
- } XFLM_NODE_INFO_ITEM;
-
- typedef struct XFLM_NODE_INFO
- {
- XFLM_NODE_INFO_ITEM headerSize;
- XFLM_NODE_INFO_ITEM nodeAndDataType;
- XFLM_NODE_INFO_ITEM flags;
- XFLM_NODE_INFO_ITEM nameId;
- XFLM_NODE_INFO_ITEM prefixId;
- XFLM_NODE_INFO_ITEM baseId;
- XFLM_NODE_INFO_ITEM documentId;
- XFLM_NODE_INFO_ITEM parentId;
- XFLM_NODE_INFO_ITEM prevSibId;
- XFLM_NODE_INFO_ITEM nextSibId;
- XFLM_NODE_INFO_ITEM firstChildId;
- XFLM_NODE_INFO_ITEM lastChildId;
- XFLM_NODE_INFO_ITEM childElmCount;
- XFLM_NODE_INFO_ITEM dataChildCount;
- XFLM_NODE_INFO_ITEM attrCount;
- XFLM_NODE_INFO_ITEM attrBaseId;
- XFLM_NODE_INFO_ITEM attrFlags;
- XFLM_NODE_INFO_ITEM attrPayloadLen;
- XFLM_NODE_INFO_ITEM annotationId;
- XFLM_NODE_INFO_ITEM metaValue;
- XFLM_NODE_INFO_ITEM encDefId;
- XFLM_NODE_INFO_ITEM unencDataLen;
- XFLM_NODE_INFO_ITEM childElmNameId;
- XFLM_NODE_INFO_ITEM childElmNodeId;
- XFLM_NODE_INFO_ITEM encIV;
- XFLM_NODE_INFO_ITEM encPadding;
-
- // Total overhead - sum of all of the above types of overhead.
-
- XFLM_NODE_INFO_ITEM totalOverhead;
-
- // Data totals
-
- XFLM_NODE_INFO_ITEM dataNodata;
- XFLM_NODE_INFO_ITEM dataString;
- XFLM_NODE_INFO_ITEM dataNumeric;
- XFLM_NODE_INFO_ITEM dataBinary;
-
- // Summary - contains both overhead and data for each type of node
-
- XFLM_NODE_INFO_ITEM attributeNode;
- XFLM_NODE_INFO_ITEM elementNode;
- XFLM_NODE_INFO_ITEM dataNode;
- XFLM_NODE_INFO_ITEM commentNode;
- XFLM_NODE_INFO_ITEM otherNode;
- } XFLM_NODE_INFO;
-
- /****************************************************************************
- Desc: Node Info. Gatherer
- ****************************************************************************/
- xflminterface IF_NodeInfo : public XF_RefCount
- {
- virtual void XFLMAPI clearNodeInfo( void) = 0;
-
- virtual RCODE XFLMAPI addNodeInfo(
- IF_Db * pDb,
- IF_DOMNode * pNode,
- FLMBOOL bDoSubTree,
- FLMBOOL bDoSelf = TRUE) = 0;
-
- virtual FLMUINT64 XFLMAPI getTotalNodeCount( void) = 0;
-
- virtual void XFLMAPI getNodeInfo(
- XFLM_NODE_INFO * pNodeInfo) = 0;
- };
-
- /****************************************************************************
- Desc: Types of information that can be gathered about a B-Tree.
- ****************************************************************************/
- typedef struct XFLM_BTREE_LEVEL_INFO
- {
- FLMUINT64 ui64BlockCount;
- FLMUINT64 ui64BlockLength;
- FLMUINT64 ui64BlockFreeSpace;
- FLMUINT64 ui64ElmOffsetOverhead;
- FLMUINT64 ui64ElmCount;
- FLMUINT64 ui64ContElmCount;
- FLMUINT64 ui64ElmFlagOvhd;
- FLMUINT64 ui64ElmKeyLengthOvhd;
- FLMUINT64 ui64ElmCountsOvhd;
- FLMUINT64 ui64ElmChildAddrsOvhd;
- FLMUINT64 ui64ElmDataLenOvhd;
- FLMUINT64 ui64ElmOADataLenOvhd;
- FLMUINT64 ui64ElmKeyLength;
- FLMUINT64 ui64ElmDataLength;
-
- // The following three are how ui64ElmKeyLength is subdivided.
- // They are only applicable to index keys.
-
- FLMUINT64 ui64KeyDataSize;
- FLMUINT64 ui64KeyIdSize;
- FLMUINT64 ui64KeyComponentLengthsSize;
-
- // Data only blocks
-
- FLMUINT64 ui64DataOnlyBlockCount;
- FLMUINT64 ui64DataOnlyBlockLength;
- FLMUINT64 ui64DataOnlyBlockFreeSpace;
- } XFLM_BTREE_LEVEL_INFO;
-
- /****************************************************************************
- Desc:
- ****************************************************************************/
- xflminterface IF_BTreeInfoStatus : public XF_RefCount
- {
- virtual RCODE XFLMAPI infoStatus(
- FLMUINT uiCurrLfNum,
- FLMBOOL bIsCollection,
- char * pszCurrLfName,
- FLMUINT uiCurrLevel,
- FLMUINT64 ui64CurrLfBlockCount,
- FLMUINT64 ui64CurrLevelBlockCount,
- FLMUINT64 ui64TotalBlockCount) = 0;
- };
-
- /****************************************************************************
- Desc: BTree Info. Gatherer
- ****************************************************************************/
- xflminterface IF_BTreeInfo : public XF_RefCount
- {
- virtual void XFLMAPI clearBTreeInfo( void) = 0;
-
- virtual RCODE XFLMAPI collectIndexInfo(
- IF_Db * pDb,
- FLMUINT uiIndexNum,
- IF_BTreeInfoStatus * pInfoStatus) = 0;
-
- virtual RCODE XFLMAPI collectCollectionInfo(
- IF_Db * pDb,
- FLMUINT uiCollectionNum,
- IF_BTreeInfoStatus * pInfoStatus) = 0;
-
- virtual FLMUINT XFLMAPI getNumIndexes( void) = 0;
-
- virtual FLMUINT XFLMAPI getNumCollections( void) = 0;
-
- virtual FLMBOOL XFLMAPI getIndexInfo(
- FLMUINT uiNthIndex,
- FLMUINT * puiIndexNum,
- char ** ppszIndexName,
- FLMUINT * puiNumLevels) = 0;
-
- virtual FLMBOOL XFLMAPI getCollectionInfo(
- FLMUINT uiNthCollection,
- FLMUINT * puiCollectionNum,
- char ** ppszCollectionName,
- FLMUINT * puiNumLevels) = 0;
-
- virtual FLMBOOL XFLMAPI getIndexLevelInfo(
- FLMUINT uiNthIndex,
- FLMUINT uiBTreeLevel,
- XFLM_BTREE_LEVEL_INFO * pLevelInfo) = 0;
-
- virtual FLMBOOL XFLMAPI getCollectionLevelInfo(
- FLMUINT uiNthCollection,
- FLMUINT uiBTreeLevel,
- XFLM_BTREE_LEVEL_INFO * pLevelInfo) = 0;
- };
-
- /****************************************************************************
- Desc: Status and return codes
- ****************************************************************************/
- #ifndef RC_OK
- #define RC_OK( rc) ((rc) == 0)
- #endif
-
- #ifndef RC_BAD
- #define RC_BAD( rc) ((rc) != 0)
- #endif
-
- #define XFLM_ERROR_BASE(e) ((RCODE)((int)(0x81050000+(e))))
-
- /****************************************************************************
- Desc: General FLAIM errors
- ****************************************************************************/
- #define NE_XFLM_OK 0
-
- #define NE_XFLM_FIRST_COMMON_ERROR XFLM_ERROR_BASE( 0x0000) // NOTE: This is not an error code - do not document it
- #define NE_XFLM_NOT_IMPLEMENTED XFLM_ERROR_BASE( 0x0001) // NE_NOT_IMPLEMENTED - Attempt was made to use a feature that is not implemented.
- #define NE_XFLM_MEM XFLM_ERROR_BASE( 0x0002) // NE_INSUFFICIENT_MEMORY - Attempt to allocate memory failed.
- #define NE_XFLM_INVALID_PARM XFLM_ERROR_BASE( 0x0005) // NE_INVALID_PARAMETER - Invalid parameter passed into a function.
- #define NE_XFLM_TIMEOUT XFLM_ERROR_BASE( 0x0009) // NE_WAIT_TIMEOUT - Database operation timed out (usually a query operation).
- #define NE_XFLM_NOT_FOUND XFLM_ERROR_BASE( 0x000A) // NE_OBJECT_NOT_FOUND - An object was not found.
- #define NE_XFLM_EXISTS XFLM_ERROR_BASE( 0x000C) // NE_OBJECT_ALREADY_EXISTS - Object already exists.
- #define NE_XFLM_USER_ABORT XFLM_ERROR_BASE( 0x0010) // NE_CALLBACK_CANCELLED - User or application aborted (canceled) the operation
- #define NE_XFLM_FAILURE XFLM_ERROR_BASE( 0x0011) // NE_RECOVERABLE_FAILURE - Internal failure.
- #define NE_XFLM_LAST_COMMON_ERROR XFLM_ERROR_BASE( 0x0012) // NOTE: This is not an error code - do not document.
-
- #define NE_XFLM_FIRST_GENERAL_ERROR XFLM_ERROR_BASE( 0x0100) // NOTE: This is not an error code - do not document
- #define NE_XFLM_BOF_HIT XFLM_ERROR_BASE( 0x0101) // Beginning of results encountered. This error is may be returned when reading query results in reverse order (from last to first).
- #define NE_XFLM_EOF_HIT XFLM_ERROR_BASE( 0x0102) // End of results encountered. This error may be returned when reading query results in forward order (first to last).
- #define NE_XFLM_END XFLM_ERROR_BASE( 0x0103) // End of roll-forward log packets encountered. NOTE: This error code should never be returned to an application.
- #define NE_XFLM_BAD_PREFIX XFLM_ERROR_BASE( 0x0104) // Invalid XLM namespace prefix specified. Either a prefix name or number that was specified was not defined.
- #define NE_XFLM_ATTRIBUTE_PURGED XFLM_ERROR_BASE( 0x0105) // XML attribute cannot be used - it is being deleted from the database.
- #define NE_XFLM_BAD_COLLECTION XFLM_ERROR_BASE( 0x0106) // Invalid collection number specified. Collection is not defined.
- #define NE_XFLM_DATABASE_LOCK_REQ_TIMEOUT XFLM_ERROR_BASE( 0x0107) // Request to lock the database timed out.
- #define NE_XFLM_ILLEGAL_DATA_COMPONENT XFLM_ERROR_BASE( 0x0108) // Cannot use ELM_ROOT_TAG as a data component in an index.
- #define NE_XFLM_BAD_DATA_TYPE XFLM_ERROR_BASE( 0x0109) // Attempt to set/get data on an XML element or attribute using a data type that is incompatible with the data type specified in the dictionary.
- #define NE_XFLM_MUST_INDEX_ON_PRESENCE XFLM_ERROR_BASE( 0x010A) // When using ELM_ROOT_TAG in an index component, must specify PRESENCE indexing only.
- #define NE_XFLM_BAD_IX XFLM_ERROR_BASE( 0x010B) // Invalid index number specified. Index is not defined.
- #define NE_XFLM_BACKUP_ACTIVE XFLM_ERROR_BASE( 0x010C) // Operation could not be performed because a backup is currently in progress.
- #define NE_XFLM_SERIAL_NUM_MISMATCH XFLM_ERROR_BASE( 0x010D) // Serial number on backup file does not match the serial number that is expected.
- #define NE_XFLM_BAD_RFL_DB_SERIAL_NUM XFLM_ERROR_BASE( 0x010E) // Bad database serial number in roll-forward log file header.
- #define NE_XFLM_BTREE_ERROR XFLM_ERROR_BASE( 0x010F) // A B-Tree in the database is bad.
- #define NE_XFLM_BTREE_FULL XFLM_ERROR_BASE( 0x0110) // A B-tree in the database is full, or a b-tree being used for a temporary result set is full.
- #define NE_XFLM_BAD_RFL_FILE_NUMBER XFLM_ERROR_BASE( 0x0111) // Bad roll-forward log file number in roll-forward log file header.
- #define NE_XFLM_CANNOT_DEL_ELEMENT XFLM_ERROR_BASE( 0x0112) // Cannot delete an XML element definition in the dictionary because it is in use.
- #define NE_XFLM_CANNOT_MOD_DATA_TYPE XFLM_ERROR_BASE( 0x0113) // Cannot modify the data type for an XML element or attribute definition in the dictionary.
- #define NE_XFLM_CANNOT_INDEX_DATA_TYPE XFLM_ERROR_BASE( 0x0114) // Data type of XML element or attribute is not one that can be indexed.
- #define NE_XFLM_CONV_BAD_DIGIT XFLM_ERROR_BASE( 0x0115) // Non-numeric digit found in text to numeric conversion.
- #define NE_XFLM_CONV_DEST_OVERFLOW XFLM_ERROR_BASE( 0x0116) // Destination buffer not large enough to hold data.
- #define NE_XFLM_CONV_ILLEGAL XFLM_ERROR_BASE( 0x0117) // Attempt to convert between data types is an unsupported conversion.
- #define NE_XFLM_CONV_NULL_SRC XFLM_ERROR_BASE( 0x0118) // Data source cannot be NULL when doing data conversion.
- #define NE_XFLM_CONV_NUM_OVERFLOW XFLM_ERROR_BASE( 0x0119) // Numeric overflow (> upper bound) converting to numeric type.
- #define NE_XFLM_CONV_NUM_UNDERFLOW XFLM_ERROR_BASE( 0x011A) // Numeric underflow (< lower bound) converting to numeric type.
- #define NE_XFLM_BAD_ELEMENT_NUM XFLM_ERROR_BASE( 0x011B) // Bad element number specified - element not defined in dictionary.
- #define NE_XFLM_BAD_ATTRIBUTE_NUM XFLM_ERROR_BASE( 0x011C) // Bad attribute number specified - attribute not defined in dictionary.
- #define NE_XFLM_BAD_ENCDEF_NUM XFLM_ERROR_BASE( 0x011D) // Bad encryption number specified - encryption definition not defined in dictionary.
- #define NE_XFLM_DATA_ERROR XFLM_ERROR_BASE( 0x011E) // Encountered data in the database that was corrupted.
- #define NE_XFLM_INVALID_FILE_SEQUENCE XFLM_ERROR_BASE( 0x011F) // Incremental backup file number provided during a restore is invalid.
- #define NE_XFLM_ILLEGAL_OP XFLM_ERROR_BASE( 0x0120) // Attempt to perform an illegal operation.
- #define NE_XFLM_DUPLICATE_ELEMENT_NUM XFLM_ERROR_BASE( 0x0121) // Element number specified in element definition is already in use.
- #define NE_XFLM_ILLEGAL_TRANS_TYPE XFLM_ERROR_BASE( 0x0122) // Illegal transaction type specified for transaction begin operation.
- #define NE_XFLM_UNSUPPORTED_VERSION XFLM_ERROR_BASE( 0x0123) // Version of database found in database header is not supported.
- #define NE_XFLM_ILLEGAL_TRANS_OP XFLM_ERROR_BASE( 0x0124) // Illegal operation for transaction type.
- #define NE_XFLM_INCOMPLETE_LOG XFLM_ERROR_BASE( 0x0125) // Incomplete rollback log.
- #define NE_XFLM_ILLEGAL_INDEX_DEF XFLM_ERROR_BASE( 0x0126) // Index definition document is illegal - does not conform to the expected form of an index definition document.
- #define NE_XFLM_ILLEGAL_INDEX_ON XFLM_ERROR_BASE( 0x0127) // The "IndexOn" attribute of an index definition has an illegal value.
- #define NE_XFLM_ILLEGAL_STATE_CHANGE XFLM_ERROR_BASE( 0x0128) // Attempted an illegal state change on an element or attribute definition.
- #define NE_XFLM_BAD_RFL_SERIAL_NUM XFLM_ERROR_BASE( 0x0129) // Serial number in roll-forward log file header does not match expected serial number.
- #define NE_XFLM_NEWER_FLAIM XFLM_ERROR_BASE( 0x012A) // Running old code on a newer version of database. Newer code must be used.
- #define NE_XFLM_CANNOT_MOD_ELEMENT_STATE XFLM_ERROR_BASE( 0x012B) // Attempted to change state of a predefined element definition.
- #define NE_XFLM_CANNOT_MOD_ATTRIBUTE_STATE XFLM_ERROR_BASE( 0x012C) // Attempted to change state of a predefined attribute definition.
- #define NE_XFLM_NO_MORE_ELEMENT_NUMS XFLM_ERROR_BASE( 0x012D) // The highest element number has already been used, cannot create more element definitions.
- #define NE_XFLM_NO_TRANS_ACTIVE XFLM_ERROR_BASE( 0x012E) // Operation must be performed inside a database transaction.
- #define NE_XFLM_NOT_UNIQUE XFLM_ERROR_BASE( 0x012F) // Attempt was made to insert a key into a b-tree that was already in the b-tree.
- #define NE_XFLM_NOT_FLAIM XFLM_ERROR_BASE( 0x0130) // The file specified is not a FLAIM database.
- #define NE_XFLM_OLD_VIEW XFLM_ERROR_BASE( 0x0131) // Unable to maintain read transaction's view of the database.
- #define NE_XFLM_SHARED_LOCK XFLM_ERROR_BASE( 0x0132) // Attempted to perform an operation on the database that requires exclusive access, but cannot because there is a shared lock.
- #define NE_XFLM_SYNTAX XFLM_ERROR_BASE( 0x0133) // Syntax error while parsing XML or query.
- #define NE_XFLM_TRANS_ACTIVE XFLM_ERROR_BASE( 0x0134) // Operation cannot be performed while a transaction is active.
- #define NE_XFLM_RFL_TRANS_GAP XFLM_ERROR_BASE( 0x0135) // A gap was found in the transaction sequence in the roll-forward log.
- #define NE_XFLM_BAD_COLLATED_KEY XFLM_ERROR_BASE( 0x0136) // Something in collated key is bad.
- #define NE_XFLM_UNSUPPORTED_FEATURE XFLM_ERROR_BASE( 0x0137) // Attempting to use a feature for which full support has been disabled.
- #define NE_XFLM_MUST_DELETE_INDEXES XFLM_ERROR_BASE( 0x0138) // Attempting to delete a collection that has indexes defined for it. Associated indexes must be deleted before the collection can be deleted.
- #define NE_XFLM_RFL_INCOMPLETE XFLM_ERROR_BASE( 0x0139) // Roll-forward log file is incomplete.
- #define NE_XFLM_CANNOT_RESTORE_RFL_FILES XFLM_ERROR_BASE( 0x013A) // Cannot restore roll-forward log files - not using multiple roll-forward log files.
- #define NE_XFLM_INCONSISTENT_BACKUP XFLM_ERROR_BASE( 0x013B) // A problem (corruption, etc.) was detected in a backup set.
- #define NE_XFLM_BLOCK_CRC XFLM_ERROR_BASE( 0x013C) // CRC for database block was invalid. May indicate problems in reading from or writing to disk.
- #define NE_XFLM_ABORT_TRANS XFLM_ERROR_BASE( 0x013D) // Attempted operation after a critical error - transaction should be aborted.
- #define NE_XFLM_NOT_RFL XFLM_ERROR_BASE( 0x013E) // File was not a roll-forward log file as expected.
- #define NE_XFLM_BAD_RFL_PACKET XFLM_ERROR_BASE( 0x013F) // Roll-forward log file packet was bad.
- #define NE_XFLM_DATA_PATH_MISMATCH XFLM_ERROR_BASE( 0x0140) // Bad data path specified to open database. Does not match data path specified for prior opens of the database.
- #define NE_XFLM_STREAM_EXISTS XFLM_ERROR_BASE( 0x0141) // Attempt to create stream, but the file(s) already exists.
- #define NE_XFLM_FILE_EXISTS XFLM_ERROR_BASE( 0x0142) // Attempt to create a database, but the file already exists.
- #define NE_XFLM_COULD_NOT_CREATE_SEMAPHORE XFLM_ERROR_BASE( 0x0143) // Could not create a semaphore.
- #define NE_XFLM_MUST_CLOSE_DATABASE XFLM_ERROR_BASE( 0x0144) // Database must be closed due to a critical error.
- #define NE_XFLM_INVALID_ENCKEY_CRC XFLM_ERROR_BASE( 0x0145) // Encryption key CRC could not be verified.
- #define NE_XFLM_BAD_UTF8 XFLM_ERROR_BASE( 0x0146) // An invalid byte sequence was found in a UTF-8 string
- #define NE_XFLM_COULD_NOT_CREATE_MUTEX XFLM_ERROR_BASE( 0x0147) // Could not create a mutex.
- #define NE_XFLM_ERROR_WAITING_ON_SEMPAHORE XFLM_ERROR_BASE( 0x0148) // Error occurred while waiting on a sempahore.
- #define NE_XFLM_BAD_PLATFORM_FORMAT XFLM_ERROR_BASE( 0x0149) // Cannot support platform format. NOTE: No need to document this one, it is strictly internal.
- #define NE_XFLM_HDR_CRC XFLM_ERROR_BASE( 0x014A) // Database header has a bad CRC.
- #define NE_XFLM_NO_NAME_TABLE XFLM_ERROR_BASE( 0x014B) // No name table was set up for the database.
- #define NE_XFLM_MULTIPLE_MATCHES XFLM_ERROR_BASE( 0x014C) // Multiple entries match the name in the name table. Need to pass a namespace to disambiguate.
- #define NE_XFLM_UNALLOWED_UPGRADE XFLM_ERROR_BASE( 0x014D) // Cannot upgrade database from one version to another.
- #define NE_XFLM_BTREE_BAD_STATE XFLM_ERROR_BASE( 0x014E) // Btree function called before proper setup steps taken.
- #define NE_XFLM_DUPLICATE_ATTRIBUTE_NUM XFLM_ERROR_BASE( 0x014F) // Attribute number specified in attribute definition is already in use.
- #define NE_XFLM_DUPLICATE_INDEX_NUM XFLM_ERROR_BASE( 0x0150) // Index number specified in index definition is already in use.
- #define NE_XFLM_DUPLICATE_COLLECTION_NUM XFLM_ERROR_BASE( 0x0151) // Collection number specified in collection definition is already in use.
- #define NE_XFLM_DUPLICATE_ELEMENT_NAME XFLM_ERROR_BASE( 0x0152) // Element name+namespace specified in element definition is already in use.
- #define NE_XFLM_DUPLICATE_ATTRIBUTE_NAME XFLM_ERROR_BASE( 0x0153) // Attribute name+namespace specified in attribute definition is already in use.
- #define NE_XFLM_DUPLICATE_INDEX_NAME XFLM_ERROR_BASE( 0x0154) // Index name specified in index definition is already in use.
- #define NE_XFLM_DUPLICATE_COLLECTION_NAME XFLM_ERROR_BASE( 0x0155) // Collection name specified in collection definition is already in use.
- #define NE_XFLM_ELEMENT_PURGED XFLM_ERROR_BASE( 0x0156) // XML element cannot be used - it is deleted from the database.
- #define NE_XFLM_TOO_MANY_OPEN_DATABASES XFLM_ERROR_BASE( 0x0157) // Too many open databases, cannot open another one.
- #define NE_XFLM_DATABASE_OPEN XFLM_ERROR_BASE( 0x0158) // Operation cannot be performed because the database is currently open.
- #define NE_XFLM_CACHE_ERROR XFLM_ERROR_BASE( 0x0159) // Cached database block has been compromised while in cache.
- #define NE_XFLM_BTREE_KEY_SIZE XFLM_ERROR_BASE( 0x015A) // Key too large to insert/lookup in a b-tree.
- #define NE_XFLM_DB_FULL XFLM_ERROR_BASE( 0x015B) // Database is full, cannot create more blocks.
- #define NE_XFLM_QUERY_SYNTAX XFLM_ERROR_BASE( 0x015C) // Query expression had improper syntax.
- #define NE_XFLM_COULD_NOT_START_THREAD XFLM_ERROR_BASE( 0x015D) // Error occurred while attempting to start a thread.
- #define NE_XFLM_INDEX_OFFLINE XFLM_ERROR_BASE( 0x015E) // Index is offline, cannot be used in a query.
- #define NE_XFLM_RFL_DISK_FULL XFLM_ERROR_BASE( 0x015F) // Disk which contains roll-forward log is full.
- #define NE_XFLM_MUST_WAIT_CHECKPOINT XFLM_ERROR_BASE( 0x0160) // Must wait for a checkpoint before starting transaction - due to disk problems - usually in disk containing roll-forward log files.
- #define NE_XFLM_MISSING_ENC_ALGORITHM XFLM_ERROR_BASE( 0x0161) // Encryption definition is missing an encryption algorithm.
- #define NE_XFLM_INVALID_ENC_ALGORITHM XFLM_ERROR_BASE( 0x0162) // Invalid encryption algorithm specified in encryption definition.
- #define NE_XFLM_INVALID_ENC_KEY_SIZE XFLM_ERROR_BASE( 0x0163) // Invalid key size specified in encryption definition.
- #define NE_XFLM_ILLEGAL_DATA_TYPE XFLM_ERROR_BASE( 0x0164) // Data type specified for XML element or attribute definition is illegal.
- #define NE_XFLM_ILLEGAL_STATE XFLM_ERROR_BASE( 0x0165) // State specified for index definition or XML element or attribute definition is illegal.
- #define NE_XFLM_ILLEGAL_ELEMENT_NAME XFLM_ERROR_BASE( 0x0166) // XML element name specified in element definition is illegal.
- #define NE_XFLM_ILLEGAL_ATTRIBUTE_NAME XFLM_ERROR_BASE( 0x0167) // XML attribute name specified in attribute definition is illegal.
- #define NE_XFLM_ILLEGAL_COLLECTION_NAME XFLM_ERROR_BASE( 0x0168) // Collection name specified in collection definition is illegal.
- #define NE_XFLM_ILLEGAL_INDEX_NAME XFLM_ERROR_BASE( 0x0169) // Index name specified is illegal
- #define NE_XFLM_ILLEGAL_ELEMENT_NUMBER XFLM_ERROR_BASE( 0x016A) // Element number specified in element definition or index definition is illegal.
- #define NE_XFLM_ILLEGAL_ATTRIBUTE_NUMBER XFLM_ERROR_BASE( 0x016B) // Attribute number specified in attribute definition or index definition is illegal.
- #define NE_XFLM_ILLEGAL_COLLECTION_NUMBER XFLM_ERROR_BASE( 0x016C) // Collection number specified in collection definition or index definition is illegal.
- #define NE_XFLM_ILLEGAL_INDEX_NUMBER XFLM_ERROR_BASE( 0x016D) // Index number specified in index definition is illegal.
- #define NE_XFLM_ILLEGAL_ENCDEF_NUMBER XFLM_ERROR_BASE( 0x016E) // Encryption definition number specified in encryption definition is illegal.
- #define NE_XFLM_COLLECTION_NAME_MISMATCH XFLM_ERROR_BASE( 0x016F) // Collection name and number specified in index definition do not correspond to each other.
- #define NE_XFLM_ELEMENT_NAME_MISMATCH XFLM_ERROR_BASE( 0x0170) // Element name+namespace and number specified in index definition do not correspond to each other.
- #define NE_XFLM_ATTRIBUTE_NAME_MISMATCH XFLM_ERROR_BASE( 0x0171) // Attribute name+namespace and number specified in index definition do not correspond to each other.
- #define NE_XFLM_INVALID_COMPARE_RULE XFLM_ERROR_BASE( 0x0172) // Invalid comparison rule specified in index definition.
- #define NE_XFLM_DUPLICATE_KEY_COMPONENT XFLM_ERROR_BASE( 0x0173) // Duplicate key component number specified in index definition.
- #define NE_XFLM_DUPLICATE_DATA_COMPONENT XFLM_ERROR_BASE( 0x0174) // Duplicate data component number specified in index definition.
- #define NE_XFLM_MISSING_KEY_COMPONENT XFLM_ERROR_BASE( 0x0175) // Index definition is missing a key component.
- #define NE_XFLM_MISSING_DATA_COMPONENT XFLM_ERROR_BASE( 0x0176) // Index definition is missing a data component.
- #define NE_XFLM_INVALID_INDEX_OPTION XFLM_ERROR_BASE( 0x0177) // Invalid index option specified on index definition.
- #define NE_XFLM_NO_MORE_ATTRIBUTE_NUMS XFLM_ERROR_BASE( 0x0178) // The highest attribute number has already been used, cannot create more.
- #define NE_XFLM_MISSING_ELEMENT_NAME XFLM_ERROR_BASE( 0x0179) // Missing element name in XML element definition.
- #define NE_XFLM_MISSING_ATTRIBUTE_NAME XFLM_ERROR_BASE( 0x017A) // Missing attribute name in XML attribute definition.
- #define NE_XFLM_MISSING_ELEMENT_NUMBER XFLM_ERROR_BASE( 0x017B) // Missing element number in XML element definition.
- #define NE_XFLM_MISSING_ATTRIBUTE_NUMBER XFLM_ERROR_BASE( 0x017C) // Missing attribute number from XML attribute definition.
- #define NE_XFLM_MISSING_INDEX_NAME XFLM_ERROR_BASE( 0x017D) // Missing index name in index definition.
- #define NE_XFLM_MISSING_INDEX_NUMBER XFLM_ERROR_BASE( 0x017E) // Missing index number in index definition.
- #define NE_XFLM_MISSING_COLLECTION_NAME XFLM_ERROR_BASE( 0x017F) // Missing collection name in collection definition.
- #define NE_XFLM_MISSING_COLLECTION_NUMBER XFLM_ERROR_BASE( 0x0180) // Missing collection number in collection definition.
- #define NE_XFLM_BAD_SEN XFLM_ERROR_BASE( 0x0181) // Invalid simple encoded number.
- #define NE_XFLM_MISSING_ENCDEF_NAME XFLM_ERROR_BASE( 0x0182) // Missing encryption definition name in encryption definition.
- #define NE_XFLM_MISSING_ENCDEF_NUMBER XFLM_ERROR_BASE( 0x0183) // Missing encryption definition number in encryption definition.
- #define NE_XFLM_NO_MORE_INDEX_NUMS XFLM_ERROR_BASE( 0x0184) // The highest index number has already been used, cannot create more.
- #define NE_XFLM_NO_MORE_COLLECTION_NUMS XFLM_ERROR_BASE( 0x0185) // The highest collection number has already been used, cannot create more.
- #define NE_XFLM_CANNOT_DEL_ATTRIBUTE XFLM_ERROR_BASE( 0x0186) // Cannot delete an XML attribute definition because it is in use.
- #define NE_XFLM_TOO_MANY_PENDING_NODES XFLM_ERROR_BASE( 0x0187) // Too many documents in the pending document list.
- #define NE_XFLM_UNSUPPORTED_INTERFACE XFLM_ERROR_BASE( 0x0188) // Requested COM interface is not supported.
- #define NE_XFLM_BAD_USE_OF_ELM_ROOT_TAG XFLM_ERROR_BASE( 0x0189) // ELM_ROOT_TAG, if used, must be the sole root component of an index definition.
- #define NE_XFLM_DUP_SIBLING_IX_COMPONENTS XFLM_ERROR_BASE( 0x018A) // Sibling components in an index definition cannot have the same XML element or attribute number.
- #define NE_XFLM_RFL_FILE_NOT_FOUND XFLM_ERROR_BASE( 0x018B) // Could not open a roll-forward log file - was not found in the roll-forward log directory.
- #define NE_XFLM_BAD_RCODE_TABLE XFLM_ERROR_BASE( 0x018C) // The error code tables are incorrect. NOTE: This is an internal error that does not need to be documented.
- #define NE_XFLM_ILLEGAL_KEY_COMPONENT_NUM XFLM_ERROR_BASE( 0x018D) // Key component of zero in index definition is not allowed.
- #define NE_XFLM_ILLEGAL_DATA_COMPONENT_NUM XFLM_ERROR_BASE( 0x018E) // Data component of zero in index definition is not allowed.
- #define NE_XFLM_CLASS_NOT_AVAILABLE XFLM_ERROR_BASE( 0x018F) // Requested COM class is not available.
- #define NE_XFLM_BUFFER_OVERFLOW XFLM_ERROR_BASE( 0x0190) // Buffer overflow.
- #define NE_XFLM_ILLEGAL_PREFIX_NUMBER XFLM_ERROR_BASE( 0x0191) // Prefix number specified in prefix definition is illegal.
- #define NE_XFLM_MISSING_PREFIX_NAME XFLM_ERROR_BASE( 0x0192) // Missing prefix name in prefix definition.
- #define NE_XFLM_MISSING_PREFIX_NUMBER XFLM_ERROR_BASE( 0x0193) // Missing prefix number in prefix definition.
- #define NE_XFLM_UNDEFINED_ELEMENT_NAME XFLM_ERROR_BASE( 0x0194) // XML element name+namespace that was specified in index definition or XML document is not defined in dictionary.
- #define NE_XFLM_UNDEFINED_ATTRIBUTE_NAME XFLM_ERROR_BASE( 0x0195) // XML attribute name+namespace that was specified in index definition or XML document is not defined in dictionary.
- #define NE_XFLM_DUPLICATE_PREFIX_NAME XFLM_ERROR_BASE( 0x0196) // Prefix name specified in prefix definition is already in use.
- #define NE_XFLM_KEY_OVERFLOW XFLM_ERROR_BASE( 0x0197) // Generated index key too large.
- #define NE_XFLM_UNESCAPED_METACHAR XFLM_ERROR_BASE( 0x0198) // Unescaped metacharacter in regular expression.
- #define NE_XFLM_ILLEGAL_QUANTIFIER XFLM_ERROR_BASE( 0x0199) // Illegal quantifier in regular expression.
- #define NE_XFLM_UNEXPECTED_END_OF_EXPR XFLM_ERROR_BASE( 0x019A) // Unexpected end of regular expression.
- #define NE_XFLM_ILLEGAL_MIN_COUNT XFLM_ERROR_BASE( 0x019B) // Illegal minimum count in regular expression quantifier.
- #define NE_XFLM_ILLEGAL_MAX_COUNT XFLM_ERROR_BASE( 0x019C) // Illegal maximum count in regular expression quantifier.
- #define NE_XFLM_EMPTY_BRANCH_IN_EXPR XFLM_ERROR_BASE( 0x019D) // Illegal empty branch in a regular expression.
- #define NE_XFLM_ILLEGAL_RPAREN_IN_EXPR XFLM_ERROR_BASE( 0x019E) // Illegal right paren in a regular expression.
- #define NE_XFLM_ILLEGAL_CLASS_SUBTRACTION XFLM_ERROR_BASE( 0x019F) // Illegal class subtraction in regular expression.
- #define NE_XFLM_ILLEGAL_CHAR_RANGE_IN_EXPR XFLM_ERROR_BASE( 0x01A0) // Illegal character range in regular expression.
- #define NE_XFLM_BAD_BASE64_ENCODING XFLM_ERROR_BASE( 0x01A1) // Illegal character(s) found in a base64 stream.
- #define NE_XFLM_NAMESPACE_NOT_ALLOWED XFLM_ERROR_BASE( 0x01A2) // Cannot define a namespace for XML attributes whose name begins with "xmlns:" or that is equal to "xmlns"
- #define NE_XFLM_INVALID_NAMESPACE_DECL XFLM_ERROR_BASE( 0x01A3) // Name for namespace declaration attribute must be "xmlns" or begin with "xmlns:"
- #define NE_XFLM_ILLEGAL_NAMESPACE_DECL_DATATYPE XFLM_ERROR_BASE( 0x01A4) // Data type for XML attributes that are namespace declarations must be text.
- #define NE_XFLM_UNEXPECTED_END_OF_INPUT XFLM_ERROR_BASE( 0x01A5) // Encountered unexpected end of input when parsing XPATH expression.
- #define NE_XFLM_NO_MORE_PREFIX_NUMS XFLM_ERROR_BASE( 0x01A6) // The highest prefix number has already been used, cannot create more.
- #define NE_XFLM_NO_MORE_ENCDEF_NUMS XFLM_ERROR_BASE( 0x01A7) // The highest encryption definition number has already been used, cannot create more.
- #define NE_XFLM_COLLECTION_OFFLINE XFLM_ERROR_BASE( 0x01A8) // Collection is encrypted, cannot be accessed while in operating in limited mode.
- #define NE_XFLM_INVALID_XML XFLM_ERROR_BASE( 0x01A9) // Invalid XML encountered while parsing document.
- #define NE_XFLM_READ_ONLY XFLM_ERROR_BASE( 0x01AA) // Item is read-only and cannot be updated.
- #define NE_XFLM_DELETE_NOT_ALLOWED XFLM_ERROR_BASE( 0x01AB) // Item cannot be deleted.
- #define NE_XFLM_RESET_NEEDED XFLM_ERROR_BASE( 0x01AC) // Used during check operations to indicate we need to reset the view. NOTE: This is an internal error code and should not be documented.
- #define NE_XFLM_ILLEGAL_REQUIRED_VALUE XFLM_ERROR_BASE( 0x01AD) // An illegal value was specified for the "Required" attribute in an index definition.
- #define NE_XFLM_ILLEGAL_INDEX_COMPONENT XFLM_ERROR_BASE( 0x01AE) // A leaf index component in an index definition was not marked as a data component or key component.
- #define NE_XFLM_ILLEGAL_UNIQUE_SUB_ELEMENT_VALUE XFLM_ERROR_BASE( 0x01AF) // Illegal value for the "UniqueSubElements" attribute in an element definition.
- #define NE_XFLM_DATA_TYPE_MUST_BE_NO_DATA XFLM_ERROR_BASE( 0x01B0) // Data type for an element definition with UniqueSubElements="yes" must be nodata.
- #define NE_XFLM_ILLEGAL_FLAG XFLM_ERROR_BASE( 0x01B1) // Illegal flag passed to getChildElement method. Must be zero for elements that can have non-unique child elements.
- #define NE_XFLM_CANNOT_SET_REQUIRED XFLM_ERROR_BASE( 0x01B2) // Cannot set the "Required" attribute on a non-key index component in index definition.
- #define NE_XFLM_CANNOT_SET_LIMIT XFLM_ERROR_BASE( 0x01B3) // Cannot set the "Limit" attribute on a non-key index component in index definition.
- #define NE_XFLM_CANNOT_SET_INDEX_ON XFLM_ERROR_BASE( 0x01B4) // Cannot set the "IndexOn" attribute on a non-key index component in index definition.
- #define NE_XFLM_CANNOT_SET_COMPARE_RULES XFLM_ERROR_BASE( 0x01B5) // Cannot set the "CompareRules" on a non-key index component in index definition.
- #define NE_XFLM_INPUT_PENDING XFLM_ERROR_BASE( 0x01B6) // Attempt to set a value while an input stream is still open.
- #define NE_XFLM_INVALID_NODE_TYPE XFLM_ERROR_BASE( 0x01B7) // Bad node type
- #define NE_XFLM_INVALID_CHILD_ELM_NODE_ID XFLM_ERROR_BASE( 0x01B8) // Attempt to insert a unique child element that has a lower node ID than the parent element
- #define NE_XFLM_LAST_GENERAL_ERROR XFLM_ERROR_BASE( 0x01B9) // NOTE: This is not an error code - do not document
-
- /****************************************************************************
- Desc: DOM Errors
- ****************************************************************************/
-
- #define NE_XFLM_FIRST_DOM_ERROR XFLM_ERROR_BASE( 0x1100) // NOTE: This is not an error code - do not document
- #define NE_XFLM_DOM_HIERARCHY_REQUEST_ERR XFLM_ERROR_BASE( 0x1101) // Attempt to insert a DOM node somewhere it doesn't belong.
- #define NE_XFLM_DOM_WRONG_DOCUMENT_ERR XFLM_ERROR_BASE( 0x1102) // A DOM node is being used in a different document than the one that created it.
- #define NE_XFLM_DOM_DATA_ERROR XFLM_ERROR_BASE( 0x1103) // Links between DOM nodes in a document are corrupt.
- #define NE_XFLM_DOM_NODE_NOT_FOUND XFLM_ERROR_BASE( 0x1104) // The requested DOM node does not exist.
- #define NE_XFLM_DOM_INVALID_CHILD_TYPE XFLM_ERROR_BASE( 0x1105) // Attempting to insert a child DOM node whose type cannot be inserted as a child node.
- #define NE_XFLM_DOM_NODE_DELETED XFLM_ERROR_BASE( 0x1106) // DOM node being accessed has been deleted.
- #define NE_XFLM_DOM_DUPLICATE_ELEMENT XFLM_ERROR_BASE( 0x1107) // Node already has a child element with the given name id - this node's child nodes must all be unique.
- #define NE_XFLM_LAST_DOM_ERROR XFLM_ERROR_BASE( 0x1108) // NOTE: This is not an error code - do not document
-
- /****************************************************************************
- Desc: I/O Errors
- ****************************************************************************/
-
- #define NE_XFLM_FIRST_IO_ERROR XFLM_ERROR_BASE( 0x2100) // NOTE: This is not an error code - do not document
- #define NE_XFLM_IO_ACCESS_DENIED XFLM_ERROR_BASE( 0x2101) // Access to file is denied. Caller is not allowed access to a file.
- #define NE_XFLM_IO_BAD_FILE_HANDLE XFLM_ERROR_BASE( 0x2102) // Bad file handle or file descriptor.
- #define NE_XFLM_IO_COPY_ERR XFLM_ERROR_BASE( 0x2103) // Error occurred while copying a file.
- #define NE_XFLM_IO_DISK_FULL XFLM_ERROR_BASE( 0x2104) // Disk full.
- #define NE_XFLM_IO_END_OF_FILE XFLM_ERROR_BASE( 0x2105) // End of file reached while reading from the file.
- #define NE_XFLM_IO_OPEN_ERR XFLM_ERROR_BASE( 0x2106) // Error while opening the file.
- #define NE_XFLM_IO_SEEK_ERR XFLM_ERROR_BASE( 0x2107) // Error occurred while positioning (seeking) within a file.
- #define NE_XFLM_IO_DIRECTORY_ERR XFLM_ERROR_BASE( 0x2108) // Error occurred while accessing or deleting a directory.
- #define NE_XFLM_IO_PATH_NOT_FOUND XFLM_ERROR_BASE( 0x2109) // File not found.
- #define NE_XFLM_IO_TOO_MANY_OPEN_FILES XFLM_ERROR_BASE( 0x210A) // Too many files open.
- #define NE_XFLM_IO_PATH_TOO_LONG XFLM_ERROR_BASE( 0x210B) // File name too long.
- #define NE_XFLM_IO_NO_MORE_FILES XFLM_ERROR_BASE( 0x210C) // No more files in directory.
- #define NE_XFLM_IO_DELETING_FILE XFLM_ERROR_BASE( 0x210D) // Error occurred while deleting a file.
- #define NE_XFLM_IO_FILE_LOCK_ERR XFLM_ERROR_BASE( 0x210E) // Error attempting to acquire a byte-range lock on a file.
- #define NE_XFLM_IO_FILE_UNLOCK_ERR XFLM_ERROR_BASE( 0x210F) // Error attempting to release a byte-range lock on a file.
- #define NE_XFLM_IO_PATH_CREATE_FAILURE XFLM_ERROR_BASE( 0x2110) // Error occurred while attempting to create a directory or sub-directory.
- #define NE_XFLM_IO_RENAME_FAILURE XFLM_ERROR_BASE( 0x2111) // Error occurred while renaming a file.
- #define NE_XFLM_IO_INVALID_PASSWORD XFLM_ERROR_BASE( 0x2112) // Invalid file password.
- #define NE_XFLM_SETTING_UP_FOR_READ XFLM_ERROR_BASE( 0x2113) // Error occurred while setting up to perform a file read operation.
- #define NE_XFLM_SETTING_UP_FOR_WRITE XFLM_ERROR_BASE( 0x2114) // Error occurred while setting up to perform a file write operation.
- #define NE_XFLM_IO_CANNOT_REDUCE_PATH XFLM_ERROR_BASE( 0x2115) // Cannot reduce file name into more components.
- #define NE_XFLM_INITIALIZING_IO_SYSTEM XFLM_ERROR_BASE( 0x2116) // Error occurred while setting up to access the file system.
- #define NE_XFLM_FLUSHING_FILE XFLM_ERROR_BASE( 0x2117) // Error occurred while flushing file data buffers to disk.
- #define NE_XFLM_IO_INVALID_FILENAME XFLM_ERROR_BASE( 0x2118) // Invalid file name.
- #define NE_XFLM_IO_CONNECT_ERROR XFLM_ERROR_BASE( 0x2119) // Error connecting to a remote network resource.
- #define NE_XFLM_OPENING_FILE XFLM_ERROR_BASE( 0x211A) // Unexpected error occurred while opening a file.
- #define NE_XFLM_DIRECT_OPENING_FILE XFLM_ERROR_BASE( 0x211B) // Unexpected error occurred while opening a file in direct access mode.
- #define NE_XFLM_CREATING_FILE XFLM_ERROR_BASE( 0x211C) // Unexpected error occurred while creating a file.
- #define NE_XFLM_DIRECT_CREATING_FILE XFLM_ERROR_BASE( 0x211D) // Unexpected error occurred while creating a file in direct access mode.
- #define NE_XFLM_READING_FILE XFLM_ERROR_BASE( 0x211E) // Unexpected error occurred while reading a file.
- #define NE_XFLM_DIRECT_READING_FILE XFLM_ERROR_BASE( 0x211F) // Unexpected error occurred while reading a file in direct access mode.
- #define NE_XFLM_WRITING_FILE XFLM_ERROR_BASE( 0x2120) // Unexpected error occurred while writing to a file.
- #define NE_XFLM_DIRECT_WRITING_FILE XFLM_ERROR_BASE( 0x2121) // Unexpected error occurred while writing a file in direct access mode.
- #define NE_XFLM_POSITIONING_IN_FILE XFLM_ERROR_BASE( 0x2122) // Unexpected error occurred while positioning within a file.
- #define NE_XFLM_GETTING_FILE_SIZE XFLM_ERROR_BASE( 0x2123) // Unexpected error occurred while getting a file's size.
- #define NE_XFLM_TRUNCATING_FILE XFLM_ERROR_BASE( 0x2124) // Unexpected error occurred while truncating a file.
- #define NE_XFLM_PARSING_FILE_NAME XFLM_ERROR_BASE( 0x2125) // Unexpected error occurred while parsing a file's name.
- #define NE_XFLM_CLOSING_FILE XFLM_ERROR_BASE( 0x2126) // Unexpected error occurred while closing a file.
- #define NE_XFLM_GETTING_FILE_INFO XFLM_ERROR_BASE( 0x2127) // Unexpected error occurred while getting information about a file.
- #define NE_XFLM_EXPANDING_FILE XFLM_ERROR_BASE( 0x2128) // Unexpected error occurred while expanding a file.
- #define NE_XFLM_CHECKING_FILE_EXISTENCE XFLM_ERROR_BASE( 0x2129) // Unexpected error occurred while checking to see if a file exists.
- #define NE_XFLM_RENAMING_FILE XFLM_ERROR_BASE( 0x212A) // Unexpected error occurred while renaming a file.
- #define NE_XFLM_SETTING_FILE_INFO XFLM_ERROR_BASE( 0x212B) // Unexpected error occurred while setting a file's information.
- #define NE_XFLM_LAST_IO_ERROR XFLM_ERROR_BASE( 0x212C) // NOTE: This is not an error code - do not document
-
- /****************************************************************************
- Desc: Network Errors
- ****************************************************************************/
-
- #define NE_XFLM_FIRST_NET_ERROR XFLM_ERROR_BASE( 0x3100) // NOTE: This is not an error code - do not document
- #define NE_XFLM_SVR_NOIP_ADDR XFLM_ERROR_BASE( 0x3101) // IP address not found
- #define NE_XFLM_SVR_SOCK_FAIL XFLM_ERROR_BASE( 0x3102) // IP socket failure
- #define NE_XFLM_SVR_CONNECT_FAIL XFLM_ERROR_BASE( 0x3103) // TCP/IP connection failure
- #define NE_XFLM_SVR_BIND_FAIL XFLM_ERROR_BASE( 0x3104) // The TCP/IP services on your system may not be configured or installed. If this POA is not to run Client/Server, use the /notcpip startup switch or disable TCP/IP through the NWADMIN snapin
- #define NE_XFLM_SVR_LISTEN_FAIL XFLM_ERROR_BASE( 0x3105) // TCP/IP listen failed
- #define NE_XFLM_SVR_ACCEPT_FAIL XFLM_ERROR_BASE( 0x3106) // TCP/IP accept failed
- #define NE_XFLM_SVR_SELECT_ERR XFLM_ERROR_BASE( 0x3107) // TCP/IP select failed
- #define NE_XFLM_SVR_SOCKOPT_FAIL XFLM_ERROR_BASE( 0x3108) // TCP/IP socket operation failed
- #define NE_XFLM_SVR_DISCONNECT XFLM_ERROR_BASE( 0x3109) // TCP/IP disconnected
- #define NE_XFLM_SVR_READ_FAIL XFLM_ERROR_BASE( 0x310A) // TCP/IP read failed
- #define NE_XFLM_SVR_WRT_FAIL XFLM_ERROR_BASE( 0x310B) // TCP/IP write failed
- #define NE_XFLM_SVR_READ_TIMEOUT XFLM_ERROR_BASE( 0x310C) // TCP/IP read timeout
- #define NE_XFLM_SVR_WRT_TIMEOUT XFLM_ERROR_BASE( 0x310D) // TCP/IP write timeout
- #define NE_XFLM_SVR_ALREADY_CLOSED XFLM_ERROR_BASE( 0x310E) // Connection already closed
- #define NE_XFLM_LAST_NET_ERROR XFLM_ERROR_BASE( 0x310F) // NOTE: This is not an error code - do not document
-
- /****************************************************************************
- Desc: Query Errors
- ****************************************************************************/
-
- #define NE_XFLM_FIRST_QUERY_ERROR XFLM_ERROR_BASE( 0x4100) // NOTE: This is not an error code - do not document
- #define NE_XFLM_Q_UNMATCHED_RPAREN XFLM_ERROR_BASE( 0x4101) // Query setup error: Unmatched right paren.
- #define NE_XFLM_Q_UNEXPECTED_LPAREN XFLM_ERROR_BASE( 0x4102) // Query setup error: Unexpected left paren.
- #define NE_XFLM_Q_UNEXPECTED_RPAREN XFLM_ERROR_BASE( 0x4103) // Query setup error: Unexpected right paren.
- #define NE_XFLM_Q_EXPECTING_OPERAND XFLM_ERROR_BASE( 0x4104) // Query setup error: Expecting an operand.
- #define NE_XFLM_Q_EXPECTING_OPERATOR XFLM_ERROR_BASE( 0x4105) // Query setup error: Expecting an operator.
- #define NE_XFLM_Q_UNEXPECTED_COMMA XFLM_ERROR_BASE( 0x4106) // Query setup error: Unexpected comma.
- #define NE_XFLM_Q_EXPECTING_LPAREN XFLM_ERROR_BASE( 0x4107) // Query setup error: Expecting a left paren.
- #define NE_XFLM_Q_UNEXPECTED_VALUE XFLM_ERROR_BASE( 0x4108) // Query setup error: Unexpected value.
- #define NE_XFLM_Q_INVALID_NUM_FUNC_ARGS XFLM_ERROR_BASE( 0x4109) // Query setup error: Invalid number of arguments for a function.
- #define NE_XFLM_Q_UNEXPECTED_XPATH_COMPONENT XFLM_ERROR_BASE( 0x410A) // Query setup error: Unexpected XPATH componenent.
- #define NE_XFLM_Q_ILLEGAL_LBRACKET XFLM_ERROR_BASE( 0x410B) // Query setup error: Illegal left bracket ([).
- #define NE_XFLM_Q_ILLEGAL_RBRACKET XFLM_ERROR_BASE( 0x410C) // Query setup error: Illegal right bracket (]).
- #define NE_XFLM_Q_ILLEGAL_OPERAND XFLM_ERROR_BASE( 0x410D) // Query setup error: Operand for some operator is not valid for that operator type.
- #define NE_XFLM_Q_ALREADY_OPTIMIZED XFLM_ERROR_BASE( 0x410E) // Operation is illegal, cannot change certain things after query has been optimized.
- #define NE_XFLM_Q_MISMATCHED_DB XFLM_ERROR_BASE( 0x410F) // Database handle passed in does not match database associated with query.
- #define NE_XFLM_Q_ILLEGAL_OPERATOR XFLM_ERROR_BASE( 0x4110) // Illegal operator - cannot pass this operator into the addOperator method.
- #define NE_XFLM_Q_ILLEGAL_COMPARE_RULES XFLM_ERROR_BASE( 0x4111) // Illegal combination of comparison rules passed to addOperator method.
- #define NE_XFLM_Q_INCOMPLETE_QUERY_EXPR XFLM_ERROR_BASE( 0x4112) // Query setup error: Query expression is incomplete.
- #define NE_XFLM_Q_NOT_POSITIONED XFLM_ERROR_BASE( 0x4113) // Query not positioned due to previous error, cannot call getNext, getPrev, or getCurrent
- #define NE_XFLM_Q_INVALID_NODE_ID_VALUE XFLM_ERROR_BASE( 0x4114) // Query setup error: Invalid type of value constant used for node id value comparison.
- #define NE_XFLM_Q_INVALID_META_DATA_TYPE XFLM_ERROR_BASE( 0x4115) // Query setup error: Invalid meta data type specified.
- #define NE_XFLM_Q_NEW_EXPR_NOT_ALLOWED XFLM_ERROR_BASE( 0x4116) // Query setup error: Cannot add an expression to an XPATH component after having added an expression that tests context position.
- #define NE_XFLM_Q_INVALID_CONTEXT_POS XFLM_ERROR_BASE( 0x4117) // Invalid context position value encountered - must be a positive number.
- #define NE_XFLM_Q_INVALID_FUNC_ARG XFLM_ERROR_BASE( 0x4118) // Query setup error: Parameter to user-defined functions must be a single XPATH only.
- #define NE_XFLM_Q_EXPECTING_RPAREN XFLM_ERROR_BASE( 0x4119) // Query setup error: Expecting right paren.
- #define NE_XFLM_Q_TOO_LATE_TO_ADD_SORT_KEYS XFLM_ERROR_BASE( 0x411A) // Query setup error: Cannot add sort keys after having called getFirst, getLast, getNext, or getPrev.
- #define NE_XFLM_Q_INVALID_SORT_KEY_COMPONENT XFLM_ERROR_BASE( 0x411B) // Query setup error: Invalid sort key component number specified in query.
- #define NE_XFLM_Q_DUPLICATE_SORT_KEY_COMPONENT XFLM_ERROR_BASE( 0x411C) // Query setup error: Duplicate sort key component number specified in query.
- #define NE_XFLM_Q_MISSING_SORT_KEY_COMPONENT XFLM_ERROR_BASE( 0x411D) // Query setup error: Missing sort key component number in sort keys that were specified for query.
- #define NE_XFLM_Q_NO_SORT_KEY_COMPONENTS_SPECIFIED XFLM_ERROR_BASE( 0x411E) // Query setup error: addSortKeys was called, but no sort key components were specified.
- #define NE_XFLM_Q_SORT_KEY_CONTEXT_MUST_BE_ELEMENT XFLM_ERROR_BASE( 0x411F) // Query setup error: A sort key context cannot be an XML attribute.
- #define NE_XFLM_Q_INVALID_ELEMENT_NUM_IN_SORT_KEYS XFLM_ERROR_BASE( 0x4120) // Query setup error: The XML element number specified for a sort key in a query is invalid - no element definition in the dictionary.
- #define NE_XFLM_Q_INVALID_ATTR_NUM_IN_SORT_KEYS XFLM_ERROR_BASE( 0x4121) // Query setup error: The XML attribute number specified for a sort key in a query is invalid - no attribute definition in the dictionary.
- #define NE_XFLM_Q_NON_POSITIONABLE_QUERY XFLM_ERROR_BASE( 0x4122) // Attempt is being made to position in a query that is not positionable.
- #define NE_XFLM_Q_INVALID_POSITION XFLM_ERROR_BASE( 0x4123) // Attempt is being made to position to an invalid position in the result set.
- #define NE_XFLM_LAST_QUERY_ERROR XFLM_ERROR_BASE( 0x4124) // NOTE: This is not an error code - do not document
-
- /****************************************************************************
- Desc: Stream Errors
- ****************************************************************************/
-
- #define NE_XFLM_FIRST_STREAM_ERROR XFLM_ERROR_BASE( 0x6100) // NOTE: This is not an error code - do not document
- #define NE_XFLM_STREAM_DECOMPRESS_ERROR XFLM_ERROR_BASE( 0x6101) // Error decompressing data stream.
- #define NE_XFLM_STREAM_NOT_COMPRESSED XFLM_ERROR_BASE( 0x6102) // Attempting to decompress a data stream that is not compressed.
- #define NE_XFLM_STREAM_TOO_MANY_FILES XFLM_ERROR_BASE( 0x6103) // Too many files in input stream.
- #define NE_XFLM_LAST_STREAM_ERROR XFLM_ERROR_BASE( 0x6104) // NOTE: This is not an error code - do not document
-
- /****************************************************************************
- Desc: NICI / Encryption Errors
- ****************************************************************************/
-
- #define NE_XFLM_FIRST_NICI_ERROR XFLM_ERROR_BASE( 0x7100) // NOTE: This is not an error code - do not document
- #define NE_XFLM_NICI_CONTEXT XFLM_ERROR_BASE( 0x7101) // Error occurred while creating NICI context for encryption/decryption.
- #define NE_XFLM_NICI_ATTRIBUTE_VALUE XFLM_ERROR_BASE( 0x7102) // Error occurred while accessing an attribute on a NICI encryption key.
- #define NE_XFLM_NICI_BAD_ATTRIBUTE XFLM_ERROR_BASE( 0x7103) // Value retrieved from an attribute on a NICI encryption key was bad.
- #define NE_XFLM_NICI_WRAPKEY_FAILED XFLM_ERROR_BASE( 0x7104) // Error occurred while wrapping a NICI encryption key in another NICI encryption key.
- #define NE_XFLM_NICI_UNWRAPKEY_FAILED XFLM_ERROR_BASE( 0x7105) // Error occurred while unwrapping a NICI encryption key that is wrapped in another NICI encryption key.
- #define NE_XFLM_NICI_INVALID_ALGORITHM XFLM_ERROR_BASE( 0x7106) // Attempt to use invalid NICI encryption algorithm.
- #define NE_XFLM_NICI_GENKEY_FAILED XFLM_ERROR_BASE( 0x7107) // Error occurred while attempting to generate a NICI encryption key.
- #define NE_XFLM_NICI_BAD_RANDOM XFLM_ERROR_BASE( 0x7108) // Error occurred while generating random data using NICI.
- #define NE_XFLM_PBE_ENCRYPT_FAILED XFLM_ERROR_BASE( 0x7109) // Error occurred while attempting to wrap a NICI encryption key in a password.
- #define NE_XFLM_PBE_DECRYPT_FAILED XFLM_ERROR_BASE( 0x710A) // Error occurred while attempting to unwrap a NICI encryption key that was previously wrapped in a password.
- #define NE_XFLM_DIGEST_INIT_FAILED XFLM_ERROR_BASE( 0x710B) // Error occurred while attempting to initialize the NICI digest functionality.
- #define NE_XFLM_DIGEST_FAILED XFLM_ERROR_BASE( 0x710C) // Error occurred while attempting to create a NICI digest.
- #define NE_XFLM_INJECT_KEY_FAILED XFLM_ERROR_BASE( 0x710D) // Error occurred while attempting to inject an encryption key into NICI.
- #define NE_XFLM_NICI_FIND_INIT XFLM_ERROR_BASE( 0x710E) // Error occurred while attempting to initialize NICI to find information on a NICI encryption key.
- #define NE_XFLM_NICI_FIND_OBJECT XFLM_ERROR_BASE( 0x710F) // Error occurred while attempting to find information on a NICI encryption key.
- #define NE_XFLM_NICI_KEY_NOT_FOUND XFLM_ERROR_BASE( 0x7110) // Could not find the NICI encryption key or information on the NICI encryption key.
- #define NE_XFLM_NICI_ENC_INIT_FAILED XFLM_ERROR_BASE( 0x7111) // Error occurred while initializing NICI to encrypt data.
- #define NE_XFLM_NICI_ENCRYPT_FAILED XFLM_ERROR_BASE( 0x7112) // Error occurred while encrypting data.
- #define NE_XFLM_NICI_DECRYPT_INIT_FAILED XFLM_ERROR_BASE( 0x7113) // Error occurred while initializing NICI to decrypt data.
- #define NE_XFLM_NICI_DECRYPT_FAILED XFLM_ERROR_BASE( 0x7114) // Error occurred while decrypting data.
- #define NE_XFLM_NICI_WRAPKEY_NOT_FOUND XFLM_ERROR_BASE( 0x7115) // Could not find the NICI encryption key used to wrap another NICI encryption key.
- #define NE_XFLM_NOT_EXPECTING_PASSWORD XFLM_ERROR_BASE( 0x7116) // Password supplied when none was expected.
- #define NE_XFLM_EXPECTING_PASSWORD XFLM_ERROR_BASE( 0x7117) // No password supplied when one was required.
- #define NE_XFLM_EXTRACT_KEY_FAILED XFLM_ERROR_BASE( 0x7118) // Error occurred while attempting to extract a NICI encryption key.
- #define NE_XFLM_NICI_INIT_FAILED XFLM_ERROR_BASE( 0x7119) // Error occurred while initializing NICI.
- #define NE_XFLM_BAD_ENCKEY_SIZE XFLM_ERROR_BASE( 0x711A) // Bad encryption key size found in roll-forward log packet.
- #define NE_XFLM_ENCRYPTION_UNAVAILABLE XFLM_ERROR_BASE( 0x711B) // Attempt was made to encrypt data when NICI is unavailable.
- #define NE_XFLM_LAST_NICI_ERROR XFLM_ERROR_BASE( 0x711C) // NOTE: This is not an error code - do not document
-
- /****************************************************************************
- Dictionary Document Definitions - below are comments that document valid
- dictionary objects and their structure.
- ****************************************************************************/
-
- /*
- Element Definition
- Desc: The XML syntax given below is used to define an element in the
- dictionary collection.
-
-
-
- Notes:
-
- 1) If the xflaim:type attribute is missing, any type of data may be stored on the attribute.
- 2) If the xflaim:State attribute is missing, the attribute's state is, by default, active.
-
- */
-
- /*
- Attribute Definition
- Desc: The XML syntax given below is used to define an attribute in the
- dictionary collection.
-
-
-
- Notes:
-
- 1) If the xflaim:type attribute is missing, any type of data may be stored on the attribute.
- 2) If the xflaim:State attribute is missing, the attribute's state is, by default, active.
-
- */
-
- /*
- Collection Definition
- Desc: The XML syntax given below is used to define a collection in the
- dictionary collection.
-
-
- */
-
- /*
- Prefix Definition
- Desc: The XML syntax given below is used to define a namespace prefix in the
- dictionary collection.
-
-
- */
-
- /*
- Index Definition
- Desc: The XML syntax given below is used to define an index in the
- dictionary collection.
-
-
-
- ...
-
- NOTE: The IndexOn, Required, Limit, and CompareRules attributes can only be set for
- key components - i.e., when the KeyComponent attribute is also specified.
-
- xflaim:ElementComponent elements may have one or more xflaim:ElementComponent
- or xflaim:AttributeComponent sub-elements.
-
- ...
-
- NOTE: The IndexOn, Required, Limit, and CompareRules attributes can only be set for
- key components - i.e., when the KeyComponent attribute is also specified.
-
- xflaim:AttributeComponent elements must be subordinate to a xflaim:ElementComponent
- element. They may not have any elements subordinate to them.
-
-
-
- Notes:
-
- 1) It is not valid to specify both an xflaim:CollectionName and an xflaim:CollectionNumber
- unless they refer to the same collection. Only one of the two is needed. If both
- are omitted, the collection that will be indexed is the default data collection.
- 2) Valid values for the IndexOptions attribute are any combination of the following:
- a) abspos - enables storing of absolute positioning information
- 3) For the xflaim:ElementComponent and xflaim:AttributeComponent, it is not
- valid to have both an xflaim:DictNumber and an xflaim:name attribute, unless they both specify the
- same element or attribute. One or the other must be specified.
- 4) If the xflaim:type attribute is specified on the xflaim:ElementComponent or xflaim:AttributeComponent
- element, it indicates what type the component is to be coerced to for indexing purposes.
- This is only relevant if the xflaim:IndexOn attribute is set to "value". For example, if a
- type of integer is specified, then the value will be coerced to an integer before putting it
- into the index. If the value were a string of "123" it would be coerced to an integer value of
- 123 for indexing purposes. If the xflaim:type attribute is omitted, then the element or attribute
- specified by the component must have a type specified in the element or attribute definition,
- and that is the type that will be used.
- 5) If the xflaim:Required attribute is missing from the xflaim:ElementComponent or xflaim:AttributeComponent
- element, or does not have a value of "yes", "on", "1", or "true", the index component is assumed to
- be optional.
- 6) The xflaim:CompareRules attribute specifies special comparison rules for the index component if the
- element or attribute is of type xflaim:string. Rules may be any combination of the following key words:
-
- a) caseinsensitive - don't compare case
- b) whitespaceasspace - treat whitespace as space (must be applied before minspaces,
- ignoreleadingspaces, ignoretrailingspaces, or nospaces)
- c) minspaces - compress out extra spaces
- d) ignoreleadingspaces - remove leading spaces
- e) ignoretrailingspaces - remove trailing spaces
- f) nospaces - remove all whitespace
- g) nounderscore - change all underscores to spaces (must be applied before minspaces,
- ignoreleadingspaces, ignoretrailingspaces, or nospaces)
- h) nodashes - remove all dashes.
- i) sortdescending - sort in descending order.
- j) sortmissinghigh - sort missing values high.
-
- Note that if the xflaim:CompareRules attribute is omitted, the default comparison rule for xflaim:string
- values is case sensitive. Note also that the xflaim:CompareRules attribute is ignored if the
- xflaim:IndexOn attribute is set to "presence". In that case, comparison rules are irrelevant.
- */
-
-
- /*
- EncDef Definition
- Desc: The XML syntax given below is used to define an encryption definition in the
- dictionary collection.
-
-
-
- Notes:
-
- 1) Only AES and DES3 (Triple DES) encryption algorithms are supported
-
- 2) AES supports three key lengths: 256, 192 and 128 bits in length.
-
- 3) DES3 keys are 168 bits in length.
-
- 4. The xflaim:keySize attribute is optional. If it is not specified, the maximum
- key size allowed for the chosen algorithm will be selected. For AES, the key size
- chosen will depend on what is supported by the NICI installation.
-
- */
-
-
-#endif // XFLAIM_H
+//------------------------------------------------------------------------------
+// Desc: XFLAIM public definitions and interfaces
+//
+// Tabs: 3
+//
+// Copyright (c) 2003-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: xflaim.h 3123 2006-01-24 17:19:50 -0700 (Tue, 24 Jan 2006) ahodgkinson $
+//------------------------------------------------------------------------------
+
+#ifndef XFLAIM_H
+#define XFLAIM_H
+
+ #ifndef FLM_PLATFORM_CONFIGURED
+ #define FLM_PLATFORM_CONFIGURED
+
+ // Determine the build platform
+
+ #undef FLM_WIN
+ #undef FLM_NLM
+ #undef FLM_UNIX
+ #undef FLM_AIX
+ #undef FLM_LINUX
+ #undef FLM_SOLARIS
+ #undef FLM_SPARC
+ #undef FLM_HPUX
+ #undef FLM_OSX
+ #undef FLM_BIG_ENDIAN
+ #undef FLM_POWER_PC
+ #undef FLM_STRICT_ALIGNMENT
+ #undef FLM_S390
+ #undef FLM_IA64
+
+ #if defined( __NETWARE__) || defined( NLM) || defined( N_PLAT_NLM)
+ #define FLM_NLM
+ #if defined( __WATCOMC__)
+ #define FLM_WATCOM_NLM
+ #elif defined( __MWERKS__)
+ #define FLM_MWERKS_NLM
+ #endif
+ #elif defined( _WIN64)
+ #define FLM_WIN
+ #ifndef FLM_64BIT
+ #define FLM_64BIT
+ #endif
+ #define FLM_STRICT_ALIGNMENT
+ #elif defined( _WIN32)
+ #define FLM_WIN
+ #elif defined( _AIX)
+ #define FLM_UNIX
+ #define FLM_AIX
+ #define FLM_BIG_ENDIAN
+ #define FLM_STRICT_ALIGNMENT
+ #elif defined( linux)
+ #define FLM_UNIX
+ #define FLM_LINUX
+ #if defined( __PPC__)
+ #define FLM_POWER_PC
+ #define FLM_BIG_ENDIAN
+ #define FLM_STRICT_ALIGNMENT
+ #elif defined( __s390__)
+ #define FLM_S390
+ #define FLM_BIG_ENDIAN
+ #define FLM_STRICT_ALIGNMENT
+ #elif defined( __s390x__)
+ #define FLM_S390
+ #ifndef FLM_64BIT
+ #define FLM_64BIT
+ #endif
+ #define FLM_BIG_ENDIAN
+ #define FLM_STRICT_ALIGNMENT
+ #elif defined( __ia64__)
+ #define FLM_IA64
+ #ifndef FLM_64BIT
+ #define FLM_64BIT
+ #endif
+ #define FLM_STRICT_ALIGNMENT
+ #endif
+ #elif defined( sun)
+ #define FLM_UNIX
+ #define FLM_SOLARIS
+ #define FLM_STRICT_ALIGNMENT
+ #if defined( sparc) || defined( __sparc)
+ #define FLM_SPARC
+ #define FLM_BIG_ENDIAN
+ #endif
+ #elif defined( __hpux) || defined( hpux)
+ #define FLM_UNIX
+ #define FLM_HPUX
+ #define FLM_BIG_ENDIAN
+ #define FLM_STRICT_ALIGNMENT
+ #elif (defined( __ppc__) || defined( __ppc64__)) && defined( __APPLE__)
+ #define FLM_UNIX
+ #define FLM_OSX
+ #define FLM_BIG_ENDIAN
+ #define FLM_STRICT_ALIGNMENT
+ #else
+ #error Platform architecture is undefined.
+ #endif
+
+ #if !defined( FLM_64BIT) && !defined( FLM_32BIT)
+ #if defined( FLM_UNIX)
+ #if defined( __x86_64__) || defined( _LP64) || defined( __LP64__)
+ #define FLM_64BIT
+ #endif
+ #endif
+ #endif
+
+ #if !defined( FLM_64BIT)
+ #define FLM_32BIT
+ #elif defined( FLM_32BIT)
+ #error Cannot define both FLM_32BIT and FLM_64BIT
+ #endif
+
+ // Debug or release build?
+
+ #ifndef FLM_DEBUG
+ #if defined( DEBUG) || (defined( PRECHECKIN) && PRECHECKIN != 0)
+ #define FLM_DEBUG
+ #endif
+ #endif
+
+ // Alignment
+
+ #if defined( FLM_UNIX) || defined( FLM_64BIT)
+ #define FLM_ALLOC_ALIGN 0x0007
+ #define FLM_ALIGN_SIZE 8
+ #elif defined( FLM_WIN) || defined( FLM_NLM)
+ #define FLM_ALLOC_ALIGN 0x0003
+ #define FLM_ALIGN_SIZE 4
+ #else
+ #error Platform not supported
+ #endif
+
+ // Basic type definitions
+
+ #if defined( FLM_UNIX)
+ typedef unsigned long FLMUINT;
+ typedef long FLMINT;
+ typedef unsigned char FLMBYTE;
+ typedef unsigned short FLMUNICODE;
+
+ typedef unsigned long long FLMUINT64;
+ typedef unsigned int FLMUINT32;
+ typedef unsigned short FLMUINT16;
+ typedef unsigned char FLMUINT8;
+ typedef long long FLMINT64;
+ typedef int FLMINT32;
+ typedef short FLMINT16;
+ typedef signed char FLMINT8;
+
+ #if defined( FLM_64BIT) || defined( FLM_OSX) || defined( FLM_S390)
+ typedef unsigned long FLMSIZET;
+ #else
+ typedef unsigned FLMSIZET;
+ #endif
+ #else
+ #if defined( FLM_WIN)
+ #if defined( FLM_64BIT)
+ typedef unsigned __int64 FLMUINT;
+ typedef __int64 FLMINT;
+ typedef unsigned long FLMSIZET;
+ typedef unsigned int FLMUINT32;
+ #elif _MSC_VER >= 1300
+ typedef unsigned long __w64 FLMUINT;
+ typedef long __w64 FLMINT;
+ typedef unsigned int FLMUINT32;
+ #else
+ typedef unsigned long FLMUINT;
+ typedef long FLMINT;
+ typedef unsigned int FLMUINT32;
+ #endif
+ #elif defined( FLM_NLM)
+ typedef unsigned long int FLMUINT;
+ typedef long int FLMINT;
+ typedef unsigned long int FLMUINT32;
+ #endif
+
+ typedef unsigned char FLMBYTE;
+ typedef unsigned short int FLMUNICODE;
+
+ typedef unsigned short int FLMUINT16;
+ typedef unsigned char FLMUINT8;
+ typedef signed int FLMINT32;
+ typedef signed short int FLMINT16;
+ typedef signed char FLMINT8;
+ typedef unsigned FLMSIZET;
+
+ #if defined( __MWERKS__)
+ typedef unsigned long long FLMUINT64;
+ typedef long long FLMINT64;
+ #else
+ typedef unsigned __int64 FLMUINT64;
+ typedef __int64 FLMINT64;
+ #endif
+
+ #endif
+
+ typedef FLMINT RCODE;
+ typedef FLMINT FLMBOOL;
+
+ #define F_FILENAME_SIZE 256
+ #define F_PATH_MAX_SIZE 256
+
+ #define FLM_MAX_UINT ((FLMUINT)(-1L))
+ #define FLM_MAX_INT ((FLMINT)(((FLMUINT)(-1L)) >> 1))
+ #define FLM_MIN_INT ((FLMINT)((((FLMUINT)(-1L)) >> 1) + 1))
+ #define FLM_MAX_UINT32 ((FLMUINT32)(0xFFFFFFFFL))
+ #define FLM_MAX_INT32 ((FLMINT32)(0x7FFFFFFFL))
+ #define FLM_MIN_INT32 ((FLMINT32)(0x80000000L))
+ #define FLM_MAX_UINT16 ((FLMUINT16)(0xFFFF))
+ #define FLM_MAX_INT16 ((FLMINT16)(0x7FFF))
+ #define FLM_MIN_INT16 ((FLMINT16)(0x8000))
+ #define FLM_MAX_UINT8 ((FLMUINT8)0xFF)
+
+ #if( _MSC_VER >= 1200) && (_MSC_VER < 1300)
+ #define FLM_MAX_UINT64 ((FLMUINT64)(0xFFFFFFFFFFFFFFFFL))
+ #define FLM_MAX_INT64 ((FLMINT64)(0x7FFFFFFFFFFFFFFFL))
+ #define FLM_MIN_INT64 ((FLMINT64)(0x8000000000000000L))
+ #else
+ #define FLM_MAX_UINT64 ((FLMUINT64)(0xFFFFFFFFFFFFFFFFLL))
+ #define FLM_MAX_INT64 ((FLMINT64)(0x7FFFFFFFFFFFFFFFLL))
+ #define FLM_MIN_INT64 ((FLMINT64)(0x8000000000000000LL))
+ #endif
+
+ #endif
+
+ // xpcselany keeps MS compilers from complaining about multiple definitions
+
+ #if defined(_MSC_VER)
+ #define xpcselany __declspec(selectany)
+ #else
+ #define xpcselany
+ #endif
+
+ typedef struct
+ {
+ FLMUINT32 l;
+ FLMUINT16 w1;
+ FLMUINT16 w2;
+ FLMUINT8 b[ 8];
+ } XFLM_GUID;
+
+ #define RXFLMIID const XFLM_GUID &
+ #define RXFLMCLSID const XFLM_GUID &
+ #define XFLMGUID XFLM_GUID
+ #define XFLMCLSID XFLM_GUID
+
+ // XFLM_DEFINE_GUID may be used to define or declare a GUID
+ // #define XFLM_INIT_GUID before including this header file when
+ // you want to define the guid, all other inclusions will only declare
+ // the guid, not define it.
+
+ #if !defined( PCOM_INIT_GUID)
+ #define XFLM_DEFINE_GUID( name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+ extern const XFLMGUID name
+ #else
+ #define XFLM_DEFINE_GUID( name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+ extern const xpcselany XFLMGUID name \
+ = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
+ #endif
+
+ // Make sure we define XFLMAPI based on the way
+ // it is defined in PSA (see psaapi.h)
+
+ #if defined( FLM_WIN)
+ #define XFLMAPI __stdcall
+ #ifdef FLM_DEBUG
+ #define FINLINE inline
+ #else
+ #define FINLINE __forceinline
+ #endif
+ #elif defined( FLM_NLM)
+ #define XFLMAPI __stdcall
+ #define FINLINE inline
+ #elif defined( FLM_UNIX)
+ #define XFLMAPI
+ #define FINLINE inline
+ #else
+ #error Platform not supported
+ #endif
+
+ #define XFLMEXTC extern "C"
+
+ // xflmnovtbl keeps MS compilers from generating vtables for interfaces
+
+ #ifdef _MSC_VER
+ #define xflmnovtbl __declspec( novtable)
+ #else
+ #define xflmnovtbl
+ #endif
+
+ #define xflminterface struct xflmnovtbl
+
+ XFLM_DEFINE_GUID( Internal_IID_XFLMIUnknown, 0x00000000, 0x0000, 0x0000,
+ 0xC0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x46);
+
+ xflminterface XFLMIUnknown
+ {
+ virtual ~XFLMIUnknown()
+ {
+ }
+
+ virtual RCODE XFLMAPI QueryInterface(
+ RXFLMIID riid,
+ void ** ppv) = 0;
+
+ virtual FLMUINT32 XFLMAPI AddRef( void) = 0;
+
+ virtual FLMUINT32 XFLMAPI Release( void) = 0;
+ };
+
+ // XFLMIClassFactory
+ // uuid: 00000001-0000-0000-C000-000000000046 (same as MSCOM IClassFactory)
+
+ XFLM_DEFINE_GUID( Internal_IID_XFLMIClassFactory, 0x00000001, 0x0000, 0x0000,
+ 0xC0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x46);
+
+ xflminterface XFLMIClassFactory : public XFLMIUnknown
+ {
+ virtual RCODE XFLMAPI CreateInstance(
+ XFLMIUnknown * piuouter,
+ RXFLMIID riid,
+ void ** ppv) = 0;
+
+ virtual RCODE XFLMAPI LockServer(
+ bool lockf) = 0;
+ };
+
+ /****************************************************************************
+ Forward References
+ ****************************************************************************/
+ xflminterface IF_Backup;
+ xflminterface IF_DataVector;
+ xflminterface IF_Db;
+ xflminterface IF_DbInfo;
+ xflminterface IF_DirHdl;
+ xflminterface IF_DOMNode;
+ xflminterface IF_FileHdl;
+ xflminterface IF_FileSystem;
+ xflminterface IF_IStream;
+ xflminterface IF_PosIStream;
+ xflminterface IF_ResultSet;
+ xflminterface IF_Query;
+ xflminterface IF_ThreadInfo;
+ xflminterface IF_Pool;
+ xflminterface IF_DynaBuf;
+ xflminterface IF_NodeInfo;
+ xflminterface IF_BTreeInfo;
+
+ // These are interfaces that need to be implemented by
+ // applications. XFlaim uses them to report status or to do
+ // callbacks of various kinds.
+
+ xflminterface IF_OStream;
+ xflminterface IF_BackupClient;
+ xflminterface IF_BackupStatus;
+ xflminterface IF_CommitClient;
+ xflminterface IF_DbCheckStatus;
+ xflminterface IF_DbCopyStatus;
+ xflminterface IF_DbRebuildStatus;
+ xflminterface IF_DbRenameStatus;
+ xflminterface IF_DeleteStatus;
+ xflminterface IF_EventClient;
+ xflminterface IF_IxClient;
+ xflminterface IF_IxStatus;
+ xflminterface IF_LockInfoClient;
+ xflminterface IF_LoggerClient;
+ xflminterface IF_LogMessageClient;
+ xflminterface IF_OperandComparer;
+ xflminterface IF_RestoreClient;
+ xflminterface IF_RestoreStatus;
+ xflminterface IF_ResultSetSortStatus;
+ xflminterface IF_ResultSetCompare;
+ xflminterface IF_QueryStatus;
+ xflminterface IF_QueryValidator;
+ xflminterface IF_QueryValFunc;
+ xflminterface IF_QueryNodeSource;
+ xflminterface IF_UpgradeClient;
+ xflminterface IF_BTreeInfoStatus;
+
+ /****************************************************************************
+ CROSS PLATFORM DEFINITIONS
+ ****************************************************************************/
+
+ #ifndef NULL
+ #define NULL 0
+ #endif
+
+ #ifndef TRUE
+ #define TRUE 1
+ #endif
+
+ #ifndef FALSE
+ #define FALSE 0
+ #endif
+
+ // Language definitions - to get rid of testing "US" or multiple bytes
+ // will define needed languages as a number with backward conversions.
+ // Keep these defines synchronized with the table in wps6cmpc.c
+
+ #define XFLM_US_LANG 0 // English, United States
+ #define XFLM_AF_LANG 1 // Afrikaans
+ #define XFLM_AR_LANG 2 // Arabic
+ #define XFLM_CA_LANG 3 // Catalan
+ #define XFLM_HR_LANG 4 // Croatian
+ #define XFLM_CZ_LANG 5 // Czech
+ #define XFLM_DK_LANG 6 // Danish
+ #define XFLM_NL_LANG 7 // Dutch
+ #define XFLM_OZ_LANG 8 // English, Australia
+ #define XFLM_CE_LANG 9 // English, Canada
+ #define XFLM_UK_LANG 10 // English, United Kingdom
+ #define XFLM_FA_LANG 11 // Farsi
+ #define XFLM_SU_LANG 12 // Finnish
+ #define XFLM_CF_LANG 13 // French, Canada
+ #define XFLM_FR_LANG 14 // French, France
+ #define XFLM_GA_LANG 15 // Galician
+ #define XFLM_DE_LANG 16 // German, Germany
+ #define XFLM_SD_LANG 17 // German, Switzerland
+ #define XFLM_GR_LANG 18 // Greek
+ #define XFLM_HE_LANG 19 // Hebrew
+ #define XFLM_HU_LANG 20 // Hungarian
+ #define XFLM_IS_LANG 21 // Icelandic
+ #define XFLM_IT_LANG 22 // Italian
+ #define XFLM_NO_LANG 23 // Norwegian
+ #define XFLM_PL_LANG 24 // Polish
+ #define XFLM_BR_LANG 25 // Portuguese, Brazil
+ #define XFLM_PO_LANG 26 // Portuguese, Portugal
+ #define XFLM_RU_LANG 27 // Russian
+ #define XFLM_SL_LANG 28 // Slovak
+ #define XFLM_ES_LANG 29 // Spanish
+ #define XFLM_SV_LANG 30 // Swedish
+ #define XFLM_YK_LANG 31 // Ukrainian
+ #define XFLM_UR_LANG 32 // Urdu
+ #define XFLM_TK_LANG 33 // Turkey
+ #define XFLM_JP_LANG 34 // Japanese
+ #define XFLM_KO_LANG 35 // Korean
+ #define XFLM_CT_LANG 36 // Chinese-Traditional
+ #define XFLM_CS_LANG 37 // Chinese-Simplified
+ #define XFLM_LA_LANG 38 // another Asian language
+
+ /****************************************************************************
+ Desc: This structure is used as a parameter to dbCreate to specify
+ the create options for a database. It is also optionally returned
+ when calling dbOpen.
+ ****************************************************************************/
+ typedef struct
+ {
+ FLMUINT uiBlockSize;
+ #define XFLM_DEFAULT_BLKSIZ 4096
+
+ FLMUINT uiVersionNum; // Database version number
+ #define XFLM_VER_5_12 512
+ #define XFLM_CURRENT_VERSION_NUM XFLM_VER_5_12
+ #define XFLM_CURRENT_VER_STR "5.12"
+
+ FLMUINT uiMinRflFileSize; // Minimum bytes per RFL file
+ #define XFLM_DEFAULT_MIN_RFL_FILE_SIZE ((FLMUINT)100 * (FLMUINT)1024 * (FLMUINT)1024)
+ FLMUINT uiMaxRflFileSize; // Maximum bytes per RFL file
+ #define XFLM_DEFAULT_MAX_RFL_FILE_SIZE XFLM_MAXIMUM_FILE_SIZE
+ FLMBOOL bKeepRflFiles; // Keep RFL files?
+ #define XFLM_DEFAULT_KEEP_RFL_FILES_FLAG FALSE
+ FLMBOOL bLogAbortedTransToRfl; // Log aborted transactions to RFL?
+ #define XFLM_DEFAULT_LOG_ABORTED_TRANS_FLAG FALSE
+
+ FLMUINT uiDefaultLanguage;
+ #define XFLM_DEFAULT_LANG (XFLM_US_LANG)
+
+ } XFLM_CREATE_OPTS, F_CREATE_OPTS;
+
+ typedef enum
+ {
+ XML_NO_ERROR = 0,
+ XML_ERR_BAD_ELEMENT_NAME, // 1 Invalid element name - does not start with a valid character for element names
+ XML_ERR_XMLNS_IN_ELEMENT_NAME, // 2 Element names cannot be "xmlns" or have "xmlns:" as a prefix
+ XML_ERR_ELEMENT_NAME_MISMATCH, // 3 The element name inside the "" does not match the element name in the opening "<"
+ XML_ERR_PREFIX_NOT_DEFINED, // 4 The prefix for the element or attribute has not been defined with an "xmlns:prefix=" attribute somewhere
+ XML_ERR_EXPECTING_GT, // 5 Expecting a '>'
+ XML_ERR_EXPECTING_ELEMENT_LT, // 6 Expecting a '<' to begin an element name
+ XML_ERR_EXPECTING_EQ, // 7 Expecting a '=' after the attribute name
+ XML_ERR_MULTIPLE_XMLNS_DECLS, // 8 Multiple "xmlns" default namespace declarations in an element
+ XML_ERR_MULTIPLE_PREFIX_DECLS, // 9 Multiple definitions for the same prefix ("xmlns:prefix=...") in an element
+ XML_ERR_EXPECTING_QUEST_GT, // 10 Expecting "?>" to terminate " FDB.ui64CurrTransID
+ // ui32LogicalEOF --> FDB.uiLogicalEOF
+ // ui32FirstAvailBlkAddr --> FDB.uiFirstAvailBlkAddr;
+ // IMPORTANT NOTE: The following items cannot currently be changed
+ // during an update transaction:
+ // ui32DbVersion
+ // ui16BlockSize
+ // ui8DefaultLanguage
+ // ui32MaxFileSize
+ // ui32FirstLFBlkAddr
+ // This is because they are always accessed from pFile->lastCommittedDbHdr
+ // regardless of transaction type. If we ever want to change them in an
+ // update transaction, we will need to modify flmGetDbHdrInfo to copy them
+ // into the FDB, and then only access them from within the FDB.
+
+ FLMUINT32 ui32DbVersion; // LOG_FLAIM_VERSION
+ FLMUINT8 ui8BlkChkSummingEnabled; // Is block checksumming enabled?
+ // Not currently used.
+ FLMUINT8 ui8RflKeepFiles; // LOG_KEEP_RFL_FILES
+ FLMUINT8 ui8RflAutoTurnOffKeep; // LOG_AUTO_TURN_OFF_KEEP_RFL
+ FLMUINT8 ui8RflKeepAbortedTrans; // LOG_KEEP_ABORTED_TRANS_IN_RFL
+ FLMUINT32 ui32RflCurrFileNum; // LOG_RFL_FILE_NUM
+ FLMUINT64 ui64LastRflCommitID; // LOG_LAST_RFL_COMMIT_ID
+ FLMUINT32 ui32RflLastFileNumDeleted; // LOG_LAST_RFL_FILE_DELETED
+ FLMUINT32 ui32RflLastTransOffset; // LOG_RFL_LAST_TRANS_OFFSET
+ FLMUINT32 ui32RflLastCPFileNum; // LOG_RFL_LAST_CP_FILE_NUM
+ FLMUINT32 ui32RflLastCPOffset; // LOG_RFL_LAST_CP_OFFSET
+ FLMUINT64 ui64RflLastCPTransID; // LOG_LAST_CP_TRANS_ID
+ FLMUINT32 ui32RflMinFileSize; // LOG_RFL_MIN_FILE_SIZE
+ FLMUINT32 ui32RflMaxFileSize; // LOG_RFL_MAX_FILE_SIZE
+ FLMUINT64 ui64CurrTransID; // LOG_CURR_TRANS_ID
+ FLMUINT64 ui64TransCommitCnt; // LOG_COMMIT_COUNT
+ FLMUINT32 ui32RblEOF; // LOG_ROLLBACK_EOF
+ FLMUINT32 ui32RblFirstCPBlkAddr; // LOG_PL_FIRST_CP_BLOCK_ADDR
+ FLMUINT32 ui32FirstAvailBlkAddr; // LOG_PF_AVAIL_BLKS
+ FLMUINT32 ui32FirstLFBlkAddr; // First logical file block.
+ FLMUINT32 ui32LogicalEOF; // LOG_LOGICAL_EOF
+ FLMUINT32 ui32MaxFileSize; // LOG_MAX_FILE_SIZE
+ FLMUINT64 ui64LastBackupTransID; // LOG_LAST_BACKUP_TRANS_ID
+ FLMUINT32 ui32IncBackupSeqNum; // LOG_INC_BACKUP_SEQ_NUM
+ FLMUINT32 ui32BlksChangedSinceBackup;// LOG_BLK_CHG_SINCE_BACKUP
+
+ #define XFLM_SERIAL_NUM_SIZE 16
+
+ FLMBYTE ucDbSerialNum[ XFLM_SERIAL_NUM_SIZE];
+ // LOG_DB_SERIAL_NUM
+ FLMBYTE ucLastTransRflSerialNum[ XFLM_SERIAL_NUM_SIZE];
+ // LOG_LAST_TRANS_RFL_SERIAL_NUM
+ FLMBYTE ucNextRflSerialNum[ XFLM_SERIAL_NUM_SIZE];
+ // LOG_RFL_NEXT_SERIAL_NUM
+ FLMBYTE ucIncBackupSerialNum[ XFLM_SERIAL_NUM_SIZE];
+ // LOG_INC_BACKUP_SERIAL_NUM
+ FLMUINT32 ui32DbKeyLen; // LOG_DATABASE_KEY_LEN
+
+ // IMPORTANT NOTE: If anything is changed in here, need to make
+ // corresponding changes to convertDbHdr routine and
+ // flmVerifyDiskStructOffsets routine.
+
+ FLMBYTE ucReserved[ 64]; // Reserved for future
+ // Always initialized to zero
+
+ // Checksum should ALWAYS be last
+
+ FLMUINT32 ui32HdrCRC; // LOG_HDR_CHECKSUM
+
+ // Encryption Key stuff
+
+ #define XFLM_MAX_ENC_KEY_SIZE 256
+
+ FLMBYTE DbKey[ XFLM_MAX_ENC_KEY_SIZE];
+ // LOG_DATABASE_KEY
+
+ // Offsets of variables in the structure
+
+ #define XFLM_DB_HDR_szSignature_OFFSET 0
+ #define XFLM_DB_HDR_ui8IsLittleEndian_OFFSET 8
+ #define XFLM_DB_HDR_ui8DefaultLanguage_OFFSET 9
+ #define XFLM_DB_HDR_ui16BlockSize_OFFSET 10
+ #define XFLM_DB_HDR_ui32DbVersion_OFFSET 12
+ #define XFLM_DB_HDR_ui8BlkChkSummingEnabled_OFFSET 16
+ #define XFLM_DB_HDR_ui8RflKeepFiles_OFFSET 17
+ #define XFLM_DB_HDR_ui8RflAutoTurnOffKeep_OFFSET 18
+ #define XFLM_DB_HDR_ui8RflKeepAbortedTrans_OFFSET 19
+ #define XFLM_DB_HDR_ui32RflCurrFileNum_OFFSET 20
+ #define XFLM_DB_HDR_ui64LastRflCommitID_OFFSET 24
+ #define XFLM_DB_HDR_ui32RflLastFileNumDeleted_OFFSET 32
+ #define XFLM_DB_HDR_ui32RflLastTransOffset_OFFSET 36
+ #define XFLM_DB_HDR_ui32RflLastCPFileNum_OFFSET 40
+ #define XFLM_DB_HDR_ui32RflLastCPOffset_OFFSET 44
+ #define XFLM_DB_HDR_ui64RflLastCPTransID_OFFSET 48
+ #define XFLM_DB_HDR_ui32RflMinFileSize_OFFSET 56
+ #define XFLM_DB_HDR_ui32RflMaxFileSize_OFFSET 60
+ #define XFLM_DB_HDR_ui64CurrTransID_OFFSET 64
+ #define XFLM_DB_HDR_ui64TransCommitCnt_OFFSET 72
+ #define XFLM_DB_HDR_ui32RblEOF_OFFSET 80
+ #define XFLM_DB_HDR_ui32RblFirstCPBlkAddr_OFFSET 84
+ #define XFLM_DB_HDR_ui32FirstAvailBlkAddr_OFFSET 88
+ #define XFLM_DB_HDR_ui32FirstLFBlkAddr_OFFSET 92
+ #define XFLM_DB_HDR_ui32LogicalEOF_OFFSET 96
+ #define XFLM_DB_HDR_ui32MaxFileSize_OFFSET 100
+ #define XFLM_DB_HDR_ui64LastBackupTransID_OFFSET 104
+ #define XFLM_DB_HDR_ui32IncBackupSeqNum_OFFSET 112
+ #define XFLM_DB_HDR_ui32BlksChangedSinceBackup_OFFSET 116
+ #define XFLM_DB_HDR_ucDbSerialNum_OFFSET 120
+ #define XFLM_DB_HDR_ucLastTransRflSerialNum_OFFSET 136
+ #define XFLM_DB_HDR_ucNextRflSerialNum_OFFSET 152
+ #define XFLM_DB_HDR_ucIncBackupSerialNum_OFFSET 168
+ #define XFLM_DB_HDR_ui32DbKeyLen 184
+ #define XFLM_DB_HDR_ucReserved_OFFSET 188
+ #define XFLM_DB_HDR_ui32HdrCRC_OFFSET 252
+ #define XFLM_DB_HDR_DbKey 256
+ } XFLM_DB_HDR;
+
+ /****************************************************************************
+ Desc: IO Flags
+ ****************************************************************************/
+ #define XFLM_IO_CURRENT_POS FLM_MAX_UINT64
+
+ #define XFLM_IO_RDONLY 0x0001
+ #define XFLM_IO_RDWR 0x0002
+ #define XFLM_IO_EXCL 0x0004
+ #define XFLM_IO_CREATE_DIR 0x0008
+ #define XFLM_IO_SH_DENYRW 0x0010
+ #define XFLM_IO_SH_DENYWR 0x0020
+ #define XFLM_IO_SH_DENYNONE 0x0040
+ #define XFLM_IO_DIRECT 0x0080
+
+ // File Positioning Definitions
+
+ #define XFLM_IO_SEEK_SET 0 // Beginning of File
+ #define XFLM_IO_SEEK_CUR 1 // Current File Pointer Position
+ #define XFLM_IO_SEEK_END 2 // End of File
+
+ // uiFlags values for keyRetrieve() method
+
+ #define XFLM_INCL 0x0010
+ #define XFLM_EXCL 0x0020
+ #define XFLM_EXACT 0x0040
+ #define XFLM_KEY_EXACT 0x0080
+ #define XFLM_FIRST 0x0100
+ #define XFLM_LAST 0x0200
+ #define XFLM_MATCH_IDS 0x0400
+ #define XFLM_MATCH_DOC_ID 0x0800
+
+ // Flags used by openDb method
+
+ #define XFLM_ONLINE 0x0020
+ #define XFLM_DONT_REDO_LOG 0x0040
+ #define XFLM_DONT_RESUME_THREADS 0x0080
+ #define XFLM_DO_LOGICAL_CHECK 0x0100
+ #define XFLM_SKIP_DOM_LINK_CHECK 0x0200 // Used only in dbCheck.
+ #define XFLM_ALLOW_LIMITED_MODE 0x0400
+
+ // Maximum file size
+
+ #define XFLM_MAXIMUM_FILE_SIZE 0xFFFC0000
+
+ // Maximum key size
+
+ #define XFLM_MAX_KEY_SIZE 1024
+
+ // Node types. The order of these enums
+ // must be preserved as the code sometimes
+ // depends on the order to test ranges of
+ // node types.
+
+ typedef enum
+ {
+ INVALID_NODE = 0x00,
+ DOCUMENT_NODE = 0x01,
+ ELEMENT_NODE = 0x02,
+ DATA_NODE = 0x03,
+ COMMENT_NODE = 0x04,
+ CDATA_SECTION_NODE = 0x05,
+ ANNOTATION_NODE = 0x06,
+ PROCESSING_INSTRUCTION_NODE = 0x07,
+ ATTRIBUTE_NODE = 0x08,
+ ANY_NODE_TYPE = 0xFFFF
+ } eDomNodeType;
+
+ // NOTE: The eNodeInsertLoc enum values cannot
+ // be changed. The RFL uses these values
+ // when logging packets.
+
+ typedef enum
+ {
+ XFLM_ROOT = 0,
+ XFLM_FIRST_CHILD,
+ XFLM_LAST_CHILD,
+ XFLM_PREV_SIB,
+ XFLM_NEXT_SIB,
+ XFLM_ATTRIBUTE
+ } eNodeInsertLoc;
+
+ // NOTE: The order of the eDbTransType enum values
+ // cannot be changed. XFLAIM tests ranges of these
+ // values.
+
+ typedef enum
+ {
+ XFLM_NO_TRANS = 0,
+ XFLM_READ_TRANS,
+ XFLM_UPDATE_TRANS
+ } eDbTransType;
+
+ typedef enum
+ {
+ XFLM_LOCK_NONE = 0,
+ XFLM_LOCK_EXCLUSIVE,
+ XFLM_LOCK_SHARED
+ } eDbLockType;
+
+ // Transaction flags
+
+ #define XFLM_DONT_KILL_TRANS 0x1
+ #define XFLM_DONT_POISON_CACHE 0x2
+
+ // Defines used for uiMaxLockWait parameter
+
+ #define XFLM_NO_TIMEOUT 0xFF
+
+ // Backup types
+
+ typedef enum
+ {
+ // These values are stored in the header of the
+ // backup, so do not change their values.
+ XFLM_FULL_BACKUP = 0,
+ XFLM_INCREMENTAL_BACKUP
+ } eDbBackupType;
+
+ // FLAIM Data types.
+
+ #define XFLM_NODATA_TYPE 0
+ #define XFLM_TEXT_TYPE 1
+ #define XFLM_NUMBER_TYPE 2
+ #define XFLM_BINARY_TYPE 3
+ #define XFLM_NUM_OF_TYPES 4
+ #define XFLM_UNKNOWN_TYPE 0xF
+
+ #define XFLM_STRING_OPTION_STR "string"
+ #define XFLM_INTEGER_OPTION_STR "integer"
+ #define XFLM_BINARY_OPTION_STR "binary"
+ #define XFLM_NODATA_OPTION_STR "nodata"
+ #define XFLM_CHECKING_OPTION_STR "checking"
+ #define XFLM_PURGE_OPTION_STR "purge"
+ #define XFLM_ACTIVE_OPTION_STR "active"
+ #define XFLM_INDEX_SUSPENDED_STR "suspended"
+ #define XFLM_INDEX_OFFLINE_STR "offline"
+ #define XFLM_INDEX_ONLINE_STR "online"
+ #define XFLM_CASE_INSENSITIVE_OPTION_STR "caseinsensitive"
+ #define XFLM_DESCENDING_OPTION_STR "sortdescending"
+ #define XFLM_MISSING_HIGH_OPTION_STR "sortmissinghigh"
+ #define XFLM_MINSPACES_OPTION_STR "minspaces"
+ #define XFLM_WHITESPACE_AS_SPACE_STR "whitespaceasspace"
+ #define XFLM_IGNORE_LEADINGSPACES_OPTION_STR "ignoreleadingspaces"
+ #define XFLM_IGNORE_TRAILINGSPACES_OPTION_STR "ignoretrailingspaces"
+ #define XFLM_NOUNDERSCORE_OPTION_STR "nounderscores"
+ #define XFLM_NOSPACE_OPTION_STR "nospaces"
+ #define XFLM_NODASH_OPTION_STR "nodashes"
+ #define XFLM_VALUE_OPTION_STR "value"
+ #define XFLM_PRESENCE_OPTION_STR "presence"
+ #define XFLM_SUBSTRING_OPTION_STR "substring"
+ #define XFLM_EACHWORD_OPTION_STR "eachword"
+ #define XFLM_ABS_POS_OPTION_STR "abspos"
+ #define XFLM_METAPHONE_OPTION_STR "metaphone"
+
+ // Encryption Schemes
+
+ #define XFLM_ENC_AES_OPTION_STR "aes"
+ #define XFLM_ENC_DES3_OPTION_STR "des3"
+
+ // Recovery actions
+
+ typedef enum
+ {
+ XFLM_RESTORE_ACTION_CONTINUE = 0, // Continue recovery
+ XFLM_RESTORE_ACTION_STOP, // Stop recovery
+ XFLM_RESTORE_ACTION_SKIP, // Skip operation (future)
+ XFLM_RESTORE_ACTION_RETRY // Retry the operation
+ } eRestoreAction;
+
+ // Events
+
+ typedef enum
+ {
+ XFLM_EVENT_LOCKS,
+ XFLM_EVENT_UPDATES,
+ XFLM_MAX_EVENT_CATEGORIES // Should always be last.
+ } eEventCategory;
+
+ typedef enum
+ {
+ XFLM_EVENT_LOCK_WAITING,
+ XFLM_EVENT_LOCK_GRANTED,
+ XFLM_EVENT_LOCK_SUSPENDED,
+ XFLM_EVENT_LOCK_RESUMED,
+ XFLM_EVENT_LOCK_RELEASED,
+ XFLM_EVENT_LOCK_TIMEOUT,
+ XFLM_EVENT_BEGIN_TRANS,
+ XFLM_EVENT_COMMIT_TRANS,
+ XFLM_EVENT_ABORT_TRANS,
+ XFLM_EVENT_CREATE_NODE,
+ XFLM_EVENT_MODIFY_NODE,
+ XFLM_EVENT_DELETE_NODE,
+ XFLM_EVENT_LINK_NODE,
+ XFLM_EVENT_UNLINK_NODE,
+ XFLM_EVENT_INDEXING_PROGRESS,
+ XFLM_MAX_EVENT_TYPES // Should always be last.
+ } eEventType;
+
+ // Logical files
+
+ typedef enum
+ {
+ XFLM_LF_INVALID = 0,
+ XFLM_LF_COLLECTION,
+ XFLM_LF_INDEX
+ } eLFileType;
+
+ // Message logging
+
+ typedef enum
+ {
+ XFLM_QUERY_MESSAGE,
+ XFLM_TRANSACTION_MESSAGE,
+ XFLM_GENERAL_MESSAGE,
+ XFLM_NUM_MESSAGE_TYPES
+ } eLogMessageType;
+
+ typedef enum
+ {
+ XFLM_CURRENT_COLOR,
+ XFLM_BLACK,
+ XFLM_BLUE,
+ XFLM_GREEN,
+ XFLM_CYAN,
+ XFLM_RED,
+ XFLM_PURPLE,
+ XFLM_BROWN,
+ XFLM_LIGHTGRAY,
+ XFLM_DARKGRAY,
+ XFLM_LIGHTBLUE,
+ XFLM_LIGHTGREEN,
+ XFLM_LIGHTCYAN,
+ XFLM_LIGHTRED,
+ XFLM_LIGHTPURPLE,
+ XFLM_YELLOW,
+ XFLM_WHITE,
+ XFLM_NUM_COLORS
+ } eColorType;
+
+ typedef struct
+ {
+ FLMBOOL bRunning;
+ FLMUINT uiRunningTime;
+ FLMBOOL bForcingCheckpoint;
+ FLMUINT uiForceCheckpointRunningTime;
+ FLMINT iForceCheckpointReason;
+ #define XFLM_CP_TIME_INTERVAL_REASON 1
+ #define XFLM_CP_SHUTTING_DOWN_REASON 2
+ #define XFLM_CP_RFL_VOLUME_PROBLEM 3
+ FLMBOOL bWritingDataBlocks;
+ FLMUINT uiLogBlocksWritten;
+ FLMUINT uiDataBlocksWritten;
+ FLMUINT uiDirtyCacheBytes;
+ FLMUINT uiBlockSize;
+ FLMUINT uiWaitTruncateTime;
+ } XFLM_CHECKPOINT_INFO;
+
+ typedef struct
+ {
+ FLMUINT64 ui64Slabs;
+ FLMUINT64 ui64SlabBytes;
+ FLMUINT64 ui64AllocatedCells;
+ FLMUINT64 ui64FreeCells;
+ } XFLM_SLAB_USAGE;
+
+ typedef struct
+ {
+ FLMUINT uiByteCount;
+ FLMUINT uiCount;
+ FLMUINT uiOldVerCount;
+ FLMUINT uiOldVerBytes;
+ FLMUINT uiCacheHits;
+ FLMUINT uiCacheHitLooks;
+ FLMUINT uiCacheFaults;
+ FLMUINT uiCacheFaultLooks;
+ XFLM_SLAB_USAGE slabUsage;
+ } XFLM_CACHE_USAGE;
+
+ typedef struct
+ {
+ FLMUINT64 ui64TotalExtendedMemory;
+ FLMUINT64 ui64RemainingExtendedMemory;
+ FLMUINT64 ui64TotalBytesAllocated;
+ FLMUINT64 ui64CacheHits;
+ FLMUINT64 ui64CacheFaults;
+ } XFLM_ECACHE_USAGE;
+
+ typedef struct
+ {
+ FLMUINT uiMaxBytes;
+ FLMUINT uiTotalBytesAllocated;
+ FLMBOOL bDynamicCacheAdjust;
+ FLMUINT uiCacheAdjustPercent;
+ FLMUINT uiCacheAdjustMin;
+ FLMUINT uiCacheAdjustMax;
+ FLMUINT uiCacheAdjustMinToLeave;
+ FLMUINT uiDirtyCount;
+ FLMUINT uiDirtyBytes;
+ FLMUINT uiNewCount;
+ FLMUINT uiNewBytes;
+ FLMUINT uiLogCount;
+ FLMUINT uiLogBytes;
+ FLMUINT uiFreeCount;
+ FLMUINT uiFreeBytes;
+ FLMUINT uiReplaceableCount;
+ FLMUINT uiReplaceableBytes;
+ FLMBOOL bPreallocatedCache;
+ XFLM_CACHE_USAGE BlockCache;
+ XFLM_CACHE_USAGE NodeCache;
+ XFLM_ECACHE_USAGE ECache;
+ } XFLM_CACHE_INFO;
+
+ typedef struct
+ {
+ FLMUINT64 ui64Count; // Number of times operation
+ // was performed.
+ FLMUINT64 ui64ElapMilli; // Total elapsed time for the
+ // operations.
+ } XFLM_COUNT_TIME_STAT;
+
+ typedef struct
+ {
+ FLMUINT64 ui64Count; // Number of times read or
+ // write operation was
+ // performed.
+ FLMUINT64 ui64TotalBytes; // Total number of bytes
+ // involved in the read or
+ // write operations.
+ FLMUINT64 ui64ElapMilli; // Total elapsed time for the
+ // read or write operations.
+ } XFLM_DISKIO_STAT;
+
+ typedef struct
+ {
+ XFLM_COUNT_TIME_STAT CommittedTrans; // Transactions committed
+ XFLM_COUNT_TIME_STAT AbortedTrans; // Transactions aborted
+ } XFLM_RTRANS_STATS;
+
+ typedef struct
+ {
+ XFLM_COUNT_TIME_STAT CommittedTrans; // Transactions committed
+ XFLM_COUNT_TIME_STAT GroupCompletes; // Group completes.
+ FLMUINT64 ui64GroupFinished; // Transactions finished in group
+ XFLM_COUNT_TIME_STAT AbortedTrans; // Transactions aborted
+ } XFLM_UTRANS_STATS;
+
+ typedef struct
+ {
+ XFLM_DISKIO_STAT BlockReads; // Statistics on block reads.
+ XFLM_DISKIO_STAT OldViewBlockReads; // Statistics on old view
+ // block reads.
+ FLMUINT uiBlockChkErrs; // Number of times we had
+ // check errors reading
+ // blocks.
+ FLMUINT uiOldViewBlockChkErrs; // Number of times we had
+ // check errors reading an
+ // old view of a block.
+ FLMUINT uiOldViewErrors; // Number of times we had an
+ // old view error when
+ // reading.
+ XFLM_DISKIO_STAT BlockWrites; // Statistics on Block writes.
+ } XFLM_BLOCKIO_STATS;
+
+ typedef struct
+ {
+ FLMBOOL bHaveStats; // Flag indicating whether or
+ // not there are statistics
+ // for this LFILE.
+ XFLM_BLOCKIO_STATS RootBlockStats; // Block I/O statistics for root
+ // blocks.
+ XFLM_BLOCKIO_STATS MiddleBlockStats; // Block I/O statistics for
+ // blocks that are not root
+ // blocks or leaf blocks.
+ XFLM_BLOCKIO_STATS LeafBlockStats; // Block I/O statistics for leaf
+ // blocks.
+ FLMUINT64 ui64BlockSplits; // Number of block splits that
+ // have occurred in this logical
+ // file.
+ FLMUINT64 ui64BlockCombines; // Number of block combines that
+ // have occurred in this LFile
+ FLMUINT uiLFileNum; // Logical file number.
+ eLFileType eLfType; // Logical file type.
+ } XFLM_LFILE_STATS;
+
+ typedef struct
+ {
+ char * pszDbName; // Database name - from pFile.
+ FLMBOOL bHaveStats; // Flag indicating whether or
+ // not there are statistics
+ // for this database.
+ XFLM_RTRANS_STATS ReadTransStats; // Read Transaction
+ // Statistics.
+ XFLM_UTRANS_STATS UpdateTransStats; // Update Transaction
+ // Statistics.
+ FLMUINT uiLFileAllocSeq; // Allocation sequence number
+ // for LFILE array.
+ XFLM_LFILE_STATS * pLFileStats; // Pointer to LFILE statistics
+ // array.
+ FLMUINT uiLFileStatArraySize; // Size of LFILE statistics
+ // array.
+ FLMUINT uiNumLFileStats; // Number of elements in LFILE
+ // array currently in use.
+ XFLM_BLOCKIO_STATS LFHBlockStats; // Block I/O statistics for
+ // LFH blocks.
+ XFLM_BLOCKIO_STATS AvailBlockStats; // Block I/O statistics for
+ // AVAIL blocks.
+
+ // Write statistics
+
+ XFLM_DISKIO_STAT DbHdrWrites; // Statistics on DB header
+ // writes.
+ XFLM_DISKIO_STAT LogBlockWrites; // Statistics on log block
+ // writes
+ XFLM_DISKIO_STAT LogBlockRestores; // Statistics on log block
+ // restores
+
+ // Read statistics.
+
+ XFLM_DISKIO_STAT LogBlockReads; // Statistics on log block
+ // reads.
+ FLMUINT uiLogBlockChkErrs; // Number of times we had
+ // checksum errors reading
+ // blocks from the rollback
+ // log.
+ FLMUINT uiReadErrors; // Number of times we got read
+ // errors.
+ FLMUINT uiWriteErrors; // Number of times we got write
+ // errors.
+ // Lock statistics
+
+ XFLM_COUNT_TIME_STAT NoLocks; // Times when no lock was held
+ XFLM_COUNT_TIME_STAT WaitingForLock; // Time waiting for lock
+ XFLM_COUNT_TIME_STAT HeldLock; // Time holding lock
+
+ } XFLM_DB_STATS;
+
+ typedef struct
+ {
+ XFLM_DB_STATS * pDbStats; // Pointer to array of database
+ // statistics.
+ FLMUINT uiDBAllocSeq; // Allocation sequence number
+ // for database statistics.
+ FLMUINT uiDbStatArraySize; // Size of the database statistics
+ // array.
+ FLMUINT uiNumDbStats; // Number of elements in the
+ // database statistics array that
+ // are currently in use.
+ FLMBOOL bCollectingStats; // Flag indicating whether or
+ // not we are currently
+ // collecting statistics.
+ FLMUINT uiStartTime; // Time we started collecting
+ // statistics.
+ FLMUINT uiStopTime; // Time we stopped collecting
+ // statistics.
+ } XFLM_STATS;
+
+ typedef enum
+ {
+ XFLM_INDEX_ONLINE = 0,
+ XFLM_INDEX_BRINGING_ONLINE,
+ XFLM_INDEX_SUSPENDED
+ } eXFlmIndexState;
+
+ typedef struct
+ {
+ FLMUINT uiIndexNum; // Index number
+ eXFlmIndexState eState;
+
+ // Statistics when eState is INDEX_BRINGING_ONLINE
+
+ FLMUINT uiStartTime; // Start time of the offline process or zero.
+ FLMUINT64 ui64LastDocumentIndexed;// If ~0 then index is online,
+ // otherwise this is the value of the last
+ // document ID that was indexed.
+ FLMUINT64 ui64KeysProcessed; // Keys processed for offline thread.
+ FLMUINT64 ui64DocumentsProcessed; // Documents processed for offline thread.
+ FLMUINT64 ui64Transactions; // Number of transactions started by the
+ // indexing thread
+ } XFLM_INDEX_STATUS;
+
+ /****************************************************************************
+ Desc: The following structures are used to pass data to the client via the
+ IF_DbRebuildStatus interface
+ ****************************************************************************/
+ typedef struct
+ {
+ FLMINT iDoingFlag;
+ #define REBUILD_GET_BLK_SIZ 1
+ #define REBUILD_RECOVER_DICT 2
+ #define REBUILD_RECOVER_DATA 3
+ FLMBOOL bStartFlag;
+ FLMUINT64 ui64FileSize;
+ FLMUINT64 ui64BytesExamined;
+ FLMUINT64 ui64TotNodes;
+ FLMUINT64 ui64NodesRecov;
+ FLMUINT64 ui64DiscardedDocs;
+ } XFLM_REBUILD_INFO;
+
+ typedef struct
+ {
+ FLMINT iErrCode; // Zero means no error is being reported
+ FLMUINT uiErrLocale;
+ #define XFLM_LOCALE_NONE 0
+ #define XFLM_LOCALE_LFH_LIST 1
+ #define XFLM_LOCALE_AVAIL_LIST 2
+ #define XFLM_LOCALE_B_TREE 3
+ #define XFLM_LOCALE_INDEX 4
+ FLMUINT uiErrLfNumber;
+ FLMUINT uiErrLfType;
+ FLMUINT uiErrBTreeLevel;
+ FLMUINT uiErrBlkAddress;
+ FLMUINT uiErrParentBlkAddress;
+ FLMUINT uiErrElmOffset;
+ FLMUINT64 ui64ErrNodeId;
+
+ IF_DataVector * ifpErrIxKey;
+ } XFLM_CORRUPT_INFO;
+
+ typedef struct
+ {
+ FLMINT iCheckPhase;
+ #define XFLM_CHECK_LFH_BLOCKS 1
+ #define XFLM_CHECK_B_TREE 2
+ #define XFLM_CHECK_AVAIL_BLOCKS 3
+ #define XFLM_CHECK_RS_SORT 4
+ #define XFLM_CHECK_DOM_LINKS 5
+ FLMBOOL bStartFlag;
+ FLMUINT64 ui64FileSize;
+ FLMUINT uiNumLFs;
+ FLMUINT uiCurrLF;
+ FLMUINT uiLfNumber; /* Logical File Pass */
+ FLMUINT uiLfType;
+ FLMUINT64 ui64BytesExamined;
+ FLMUINT uiNumProblemsFixed; /* Number of corruptions repaired */
+ FLMUINT64 ui64NumDomNodes; /* in the current Lf */
+ FLMUINT64 ui64NumDomLinksVerified; /* in the current Lf */
+ FLMUINT64 ui64NumBrokenDomLinks; /* in the current Lf */
+
+ /* Index check progress */
+
+ FLMUINT64 ui64NumKeys; /* Number of keys in the result set */
+ FLMUINT64 ui64NumDuplicateKeys; /* Number of duplicate keys generated */
+ FLMUINT64 ui64NumKeysExamined; /* Number of keys checked */
+ FLMUINT64 ui64NumKeysNotFound; /* Keys in index but missing from document */
+ FLMUINT64 ui64NumDocKeysNotFound; /* Keys in documents but missing from indexes */
+ FLMUINT64 ui64NumConflicts; /* # of non-corruption conflicts */
+ } XFLM_PROGRESS_CHECK_INFO;
+
+ /**************************************************************************
+ Desc: STUFF FOR IF_Query interface
+ **************************************************************************/
+ typedef enum
+ {
+ XFLM_UNKNOWN_OP = 0,
+
+ // NOTE: These operators MUST stay in this order - this order is assumed
+ // by the precedence table - see fquery.cpp
+
+ XFLM_AND_OP = 1,
+ XFLM_OR_OP = 2,
+ XFLM_NOT_OP = 3,
+ XFLM_EQ_OP = 4,
+ XFLM_NE_OP = 5,
+ XFLM_APPROX_EQ_OP = 6,
+ XFLM_LT_OP = 7,
+ XFLM_LE_OP = 8,
+ XFLM_GT_OP = 9,
+ XFLM_GE_OP = 10,
+ XFLM_BITAND_OP = 11,
+ XFLM_BITOR_OP = 12,
+ XFLM_BITXOR_OP = 13,
+ XFLM_MULT_OP = 14,
+ XFLM_DIV_OP = 15,
+ XFLM_MOD_OP = 16,
+ XFLM_PLUS_OP = 17,
+ XFLM_MINUS_OP = 18,
+ XFLM_NEG_OP = 19,
+ XFLM_LPAREN_OP = 20,
+ XFLM_RPAREN_OP = 21,
+ XFLM_COMMA_OP = 22,
+ XFLM_LBRACKET_OP = 23,
+ XFLM_RBRACKET_OP = 24,
+
+ // IMPORTANT NOTE: If operators are added after this point,
+ // modify the isLegalOperator method below.
+
+ // The following operators are only used internally. They
+ // may NOT be passed into the addOperator method.
+
+ XFLM_EXISTS_OP = 25,
+ XFLM_RANGE_OP = 26,
+ XFLM_MATCH_OP = 27
+ } eQueryOperators;
+
+ #define XFLM_FIRST_ARITH_OP XFLM_BITAND_OP
+ #define XFLM_LAST_ARITH_OP XFLM_NEG_OP
+
+ // Comparison rules for strings
+
+ #define XFLM_COMP_CASE_INSENSITIVE 0x0001
+ #define XFLM_COMP_COMPRESS_WHITESPACE 0x0002
+ // Compress consecutive spaces to single space
+ #define XFLM_COMP_NO_WHITESPACE 0x0004
+ // Ignore all whitespace. This and
+ // COMP_COMPRESS_WHITESPACE cannot be used
+ // together.
+ #define XFLM_COMP_NO_UNDERSCORES 0x0008
+ // Convert underscores to whitespace. NOTE: This
+ // should be applied before COMP_COMPRESS_WHITESPACE
+ // or COMP_NO_WHITESPACE
+ #define XFLM_COMP_NO_DASHES 0x0010
+ // Remove all dashes
+ #define XFLM_COMP_WHITESPACE_AS_SPACE 0x0020
+ // Convert tab, NL, and CR characters
+ // to space
+ #define XFLM_COMP_IGNORE_LEADING_SPACE 0x0040
+ // Ignore leading space characters
+ #define XFLM_COMP_IGNORE_TRAILING_SPACE 0x0080
+ // Ignore trailing space characters
+
+ typedef enum
+ {
+ XFLM_QUERY_NOT_POSITIONED,
+ XFLM_QUERY_AT_BOF,
+ XFLM_QUERY_AT_FIRST,
+ XFLM_QUERY_AT_FIRST_AND_LAST,
+ XFLM_QUERY_POSITIONED,
+ XFLM_QUERY_AT_LAST,
+ XFLM_QUERY_AT_EOF
+ } eQueryStates;
+
+ typedef enum
+ {
+ XFLM_FUNC_xxx = 0
+ } eQueryFunctions;
+
+ typedef enum
+ {
+ ROOT_AXIS = 0,
+ CHILD_AXIS,
+ PARENT_AXIS,
+ ANCESTOR_AXIS,
+ DESCENDANT_AXIS,
+ FOLLOWING_SIBLING_AXIS,
+ PRECEDING_SIBLING_AXIS,
+ FOLLOWING_AXIS,
+ PRECEDING_AXIS,
+ ATTRIBUTE_AXIS,
+ NAMESPACE_AXIS,
+ SELF_AXIS,
+ DESCENDANT_OR_SELF_AXIS,
+ ANCESTOR_OR_SELF_AXIS,
+ META_AXIS
+ } eXPathAxisTypes;
+
+ typedef enum
+ {
+ XFLM_FALSE = 0,
+ XFLM_TRUE,
+ XFLM_UNKNOWN
+ } XFlmBoolType;
+
+ typedef enum QueryValueTypes
+ {
+ XFLM_MISSING_VAL = 0,
+
+ // WARNING: Don't renumber below _VAL enums without
+ // re-doing gv_DoValAndDictTypesMatch table
+
+ XFLM_BOOL_VAL = 1, // 1 // XFlmBoolType
+ XFLM_UINT_VAL, // 2 // FLMUINT
+ XFLM_UINT64_VAL, // 3 // FLMUINT64
+ XFLM_INT_VAL, // 4 // FLMINT
+ XFLM_INT64_VAL, // 5 // FLMINT64
+ XFLM_BINARY_VAL, // 6 // FLMBYTE *
+ XFLM_UTF8_VAL, // 7 // FLMBYTE *
+
+ // XFLM_PASSING_VAL passes all criteria.
+
+ XFLM_PASSING_VAL = 0xFFFF
+ } eValTypes;
+
+ typedef enum
+ {
+ GET_FIRST_VAL = 0,
+ GET_LAST_VAL,
+ GET_NEXT_VAL,
+ GET_PREV_VAL
+ } ValIterator;
+
+ typedef enum
+ {
+ XFLM_QOPT_NONE = 0,
+ XFLM_QOPT_USING_INDEX,
+ XFLM_QOPT_FULL_COLLECTION_SCAN,
+ XFLM_QOPT_SINGLE_NODE_ID,
+ XFLM_QOPT_NODE_ID_RANGE
+ } eQOptTypes;
+
+ typedef struct
+ {
+ eQOptTypes eOptType; // Type of optimization done
+ FLMUINT uiCost; // Cost calculated for predicate
+ FLMUINT64 ui64NodeId; // Only valid if eOptType is
+ // XFLM_QOPT_SINGLE_NODE_ID or
+ // XFLM_QOPT_NODE_ID_RANGE
+ FLMUINT64 ui64EndNodeId; // Only valid if eOptType is
+ // XFLM_QOPT_NODE_ID_RANGE
+ FLMUINT uiIxNum; // Index used to execute query if
+ // eOptType == QOPT_USING_INDEX
+ FLMBYTE szIxName[ 80];
+ FLMBOOL bMustVerifyPath; // Must verify node path.
+ FLMBOOL bDoNodeMatch; // Node must be retrieved to exe
+ // query. Only valid if eOptType
+ // is XFLM_QOPT_USING_INDEX.
+ FLMUINT bCanCompareOnKey; // Can we compare on index keys? Only
+ // valid if eOptType == XFLM_QOPT_USING_INDEX.
+ FLMUINT64 ui64KeysRead;
+ FLMUINT64 ui64KeyHadDupDoc;
+ FLMUINT64 ui64KeysPassed;
+ FLMUINT64 ui64NodesRead;
+ FLMUINT64 ui64NodesTested;
+ FLMUINT64 ui64NodesPassed;
+ FLMUINT64 ui64DocsRead;
+ FLMUINT64 ui64DupDocsEliminated;
+ FLMUINT64 ui64NodesFailedValidation;
+ FLMUINT64 ui64DocsFailedValidation;
+ FLMUINT64 ui64DocsPassed;
+ } XFLM_OPT_INFO;
+
+ /**************************************************************************
+ * XFLAIM Dictionary Tag Numbers
+ *
+ * NOTES:
+ * 1) These numbers cannot be changed for backward compatibility reasons.
+ * 2) IF ANY NEW TAGS ARE INSERTED - Then you MUST change the database
+ * version number, because old databases will become invalid.....
+ *
+ ***************************************************************************/
+
+ // Special purpose collections
+ // NOTE: Do not change the order of these definitions. The
+ // getNextCollection routine assumes they are in this order.
+
+ // We have reserved from 65501 to 65535 for internal collections
+ // These should be allocated starting from 65535 and going down.
+
+ #define XFLM_MAX_COLLECTION_NUM 65500
+
+ #define XFLM_MAINT_COLLECTION 65533
+ #define XFLM_DATA_COLLECTION 65534
+ #define XFLM_DICT_COLLECTION 65535
+
+ FINLINE FLMBOOL isDictCollection(
+ FLMUINT uiCollectionNum)
+ {
+ return( (uiCollectionNum == XFLM_DICT_COLLECTION) ? TRUE : FALSE);
+ }
+
+ // Special purpose indexes
+ // NOTE: Do not change the order of these definitions. The
+ // getNextIndex routine assumes they are in this order.
+
+ // We have reserved from 65501 to 65535 for internal indexes
+ // These should be allocated starting from 65535 and going down.
+
+ #define XFLM_MAX_INDEX_NUM 65500
+ #define XFLM_DICT_NUMBER_INDEX 65534
+ #define XFLM_DICT_NAME_INDEX 65535
+
+ // This is the reserved dictionary document that maintains
+ // information about dictionary IDs
+
+ #define XFLM_DICTINFO_DOC_ID ((FLMUINT64)1)
+
+ // Prefixes
+
+ #define XFLM_MAX_PREFIX_NUM 65500
+
+ // Encryption Defs
+
+ #define XFLM_MAX_ENCDEF_NUM 65500
+
+ /****************************************************************************
+ Dictionary Identifiers
+ ****************************************************************************/
+ #define XFLM_FIRST_RESERVED_ELEMENT_TAG 0xFFFFFE00
+ // Special definitions - cannot actually be used for an element name ID, but
+ // in indexing specifies the root tag
+ #define ELM_ROOT_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG - 1)
+
+ #define ELM_ELEMENT_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 0)
+ #define ELM_ELEMENT_TAG_NAME "element"
+ #define ELM_ATTRIBUTE_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 1)
+ #define ELM_ATTRIBUTE_TAG_NAME "attribute"
+ #define ELM_INDEX_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 2)
+ #define ELM_INDEX_TAG_NAME "Index"
+ #define ELM_ELEMENT_COMPONENT_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 4)
+ #define ELM_ELEMENT_COMPONENT_TAG_NAME "ElementComponent"
+ #define ELM_ATTRIBUTE_COMPONENT_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 5)
+ #define ELM_ATTRIBUTE_COMPONENT_TAG_NAME "AttributeComponent"
+ #define ELM_COLLECTION_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 6)
+ #define ELM_COLLECTION_TAG_NAME "Collection"
+ #define ELM_PREFIX_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 7)
+ #define ELM_PREFIX_TAG_NAME "Prefix"
+ #define ELM_NEXT_DICT_NUMS_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 8)
+ #define ELM_NEXT_DICT_NUMS_TAG_NAME "NextDictNums"
+ #define ELM_DOCUMENT_TITLE_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 9)
+ #define ELM_DOCUMENT_TITLE_TAG_NAME "DocumentTitle"
+ #define ELM_INVALID_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 10)
+ #define ELM_INVALID_TAG_NAME "Invalid"
+ #define ELM_QUARANTINED_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 11)
+ #define ELM_QUARANTINED_TAG_NAME "Quarantined"
+ #define ELM_ALL_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 12)
+ #define ELM_ALL_TAG_NAME "All"
+ #define ELM_ANNOTATION_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 13)
+ #define ELM_ANNOTATION_TAG_NAME "Annotation"
+ #define ELM_ANY_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 14)
+ #define ELM_ANY_TAG_NAME "Any"
+ #define ELM_ATTRIBUTE_GROUP_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 15)
+ #define ELM_ATTRIBUTE_GROUP_TAG_NAME "AttributeGroup"
+ #define ELM_CHOICE_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 16)
+ #define ELM_CHOICE_TAG_NAME "Choice"
+ #define ELM_COMPLEX_CONTENT_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 17)
+ #define ELM_COMPLEX_CONTENT_TAG_NAME "ComplexContent"
+ #define ELM_COMPLEX_TYPE_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 18)
+ #define ELM_COMPLEX_TYPE_TAG_NAME "ComplexType"
+ #define ELM_DOCUMENTATION_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 19)
+ #define ELM_DOCUMENTATION_TAG_NAME "Documentation"
+ #define ELM_ENUMERATION_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 20)
+ #define ELM_ENUMERATION_TAG_NAME "enumeration"
+ #define ELM_EXTENSION_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 21)
+ #define ELM_EXTENSION_TAG_NAME "extension"
+ #define ELM_DELETE_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 22)
+ #define ELM_DELETE_TAG_NAME "Delete"
+ #define ELM_BLOCK_CHAIN_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 23)
+ #define ELM_BLOCK_CHAIN_TAG_NAME "BlockChain"
+ #define ELM_ENCDEF_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 24)
+ #define ELM_ENCDEF_TAG_NAME "EncDef"
+ #define ELM_SWEEP_TAG (XFLM_FIRST_RESERVED_ELEMENT_TAG + 25)
+ #define ELM_SWEEP_TAG_NAME "Sweep"
+
+ // IMPORTANT NOTE: Change this value whenever adding new reserved element tags!
+ #define XFLM_LAST_RESERVED_ELEMENT_TAG ELM_SWEEP_TAG
+
+
+ #define XFLM_FIRST_RESERVED_ATTRIBUTE_TAG 0xFFFFFE00
+
+ #define ATTR_DICT_NUMBER_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 0)
+ #define ATTR_DICT_NUMBER_TAG_NAME "DictNumber"
+ #define ATTR_COLLECTION_NUMBER_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 1)
+ #define ATTR_COLLECTION_NUMBER_TAG_NAME "CollectionNumber"
+ #define ATTR_COLLECTION_NAME_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 2)
+ #define ATTR_COLLECTION_NAME_TAG_NAME "CollectionName"
+ #define ATTR_NAME_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 3)
+ #define ATTR_NAME_TAG_NAME "name"
+ #define ATTR_TARGET_NAMESPACE_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 4)
+ #define ATTR_TARGET_NAMESPACE_TAG_NAME "targetNameSpace"
+ #define ATTR_TYPE_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 5)
+ #define ATTR_TYPE_TAG_NAME "type"
+ #define ATTR_STATE_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 6)
+ #define ATTR_STATE_TAG_NAME "State"
+ #define ATTR_LANGUAGE_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 7)
+ #define ATTR_LANGUAGE_TAG_NAME "Language"
+ #define ATTR_INDEX_OPTIONS_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 8)
+ #define ATTR_INDEX_OPTIONS_TAG_NAME "IndexOptions"
+ #define ATTR_INDEX_ON_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 9)
+ #define ATTR_INDEX_ON_TAG_NAME "IndexOn"
+ #define ATTR_REQUIRED_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 10)
+ #define ATTR_REQUIRED_TAG_NAME "Required"
+ #define ATTR_LIMIT_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 11)
+ #define ATTR_LIMIT_TAG_NAME "Limit"
+ #define ATTR_COMPARE_RULES_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 12)
+ #define ATTR_COMPARE_RULES_TAG_NAME "CompareRules"
+ #define ATTR_KEY_COMPONENT_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 13)
+ #define ATTR_KEY_COMPONENT_TAG_NAME "KeyComponent"
+ #define ATTR_DATA_COMPONENT_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 14)
+ #define ATTR_DATA_COMPONENT_TAG_NAME "DataComponent"
+ #define ATTR_LAST_DOC_INDEXED_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 15)
+ #define ATTR_LAST_DOC_INDEXED_TAG_NAME "LastDocumentIndexed"
+ #define ATTR_NEXT_ELEMENT_NUM_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 16)
+ #define ATTR_NEXT_ELEMENT_NUM_TAG_NAME "NextElementNum"
+ #define ATTR_NEXT_ATTRIBUTE_NUM_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 17)
+ #define ATTR_NEXT_ATTRIBUTE_NUM_TAG_NAME "NextAttributeNum"
+ #define ATTR_NEXT_INDEX_NUM_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 18)
+ #define ATTR_NEXT_INDEX_NUM_TAG_NAME "NextIndexNum"
+ #define ATTR_NEXT_COLLECTION_NUM_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 19)
+ #define ATTR_NEXT_COLLECTION_NUM_TAG_NAME "NextCollectionNum"
+ #define ATTR_NEXT_PREFIX_NUM_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 20)
+ #define ATTR_NEXT_PREFIX_NUM_TAG_NAME "NextPrefixNum"
+ #define ATTR_SOURCE_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 21)
+ #define ATTR_SOURCE_TAG_NAME "Source"
+ #define ATTR_STATE_CHANGE_COUNT_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 22)
+ #define ATTR_STATE_CHANGE_COUNT_TAG_NAME "StateChangeCount"
+ #define ATTR_XMLNS_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 23)
+ #define ATTR_XMLNS_TAG_NAME "xmlns"
+ #define ATTR_ABSTRACT_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 24)
+ #define ATTR_ABSTRACT_TAG_NAME "abstract"
+ #define ATTR_BASE_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 25)
+ #define ATTR_BASE_TAG_NAME "base"
+ #define ATTR_BLOCK_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 26)
+ #define ATTR_BLOCK_TAG_NAME "block"
+ #define ATTR_DEFAULT_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 27)
+ #define ATTR_DEFAULT_TAG_NAME "default"
+ #define ATTR_FINAL_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 28)
+ #define ATTR_FINAL_TAG_NAME "final"
+ #define ATTR_FIXED_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 29)
+ #define ATTR_FIXED_TAG_NAME "fixed"
+ #define ATTR_ITEM_TYPE_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 30)
+ #define ATTR_ITEM_TYPE_TAG_NAME "itemtype"
+ #define ATTR_MEMBER_TYPES_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 31)
+ #define ATTR_MEMBER_TYPES_TAG_NAME "membertypes"
+ #define ATTR_MIXED_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 32)
+ #define ATTR_MIXED_TAG_NAME "mixed"
+ #define ATTR_NILLABLE_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 33)
+ #define ATTR_NILLABLE_TAG_NAME "nillable"
+ #define ATTR_REF_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 34)
+ #define ATTR_REF_TAG_NAME "ref"
+ #define ATTR_USE_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 35)
+ #define ATTR_USE_TAG_NAME "use"
+ #define ATTR_VALUE_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 36)
+ #define ATTR_VALUE_TAG_NAME "value"
+ #define ATTR_ADDRESS_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 37)
+ #define ATTR_ADDRESS_TAG_NAME "address"
+ #define ATTR_XMLNS_XFLAIM_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 38)
+ #define ATTR_XMLNS_XFLAIM_TAG_NAME "xmlns:xflaim"
+ #define ATTR_ENCRYPTION_KEY_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 39)
+ #define ATTR_ENCRYPTION_KEY_TAG_NAME "Key"
+ #define ATTR_TRANSACTION_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 40)
+ #define ATTR_TRANSACTION_TAG_NAME "Transaction"
+ #define ATTR_NEXT_ENCDEF_NUM_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 41)
+ #define ATTR_NEXT_ENCDEF_NUM_TAG_NAME "NextEncDefNum"
+ #define ATTR_ENCRYPTION_ID_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 42)
+ #define ATTR_ENCRYPTION_ID_TAG_NAME "encId"
+ #define ATTR_ENCRYPTION_KEY_SIZE_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 43)
+ #define ATTR_ENCRYPTION_KEY_SIZE_TAG_NAME "keySize"
+ #define ATTR_UNIQUE_SUB_ELEMENTS_TAG (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG + 44)
+ #define ATTR_UNIQUE_SUB_ELEMENTS_TAG_NAME "UniqueSubElements"
+
+ // IMPORTANT NOTE: Change this value whenever adding new reserved attribute tags!
+
+ #define XFLM_LAST_RESERVED_ATTRIBUTE_TAG ATTR_UNIQUE_SUB_ELEMENTS_TAG
+
+ // max element number is first reserved -2 instead of -1 because we don't want
+ // anyone using ELM_ROOT_TAG either.
+
+ #define XFLM_MAX_ELEMENT_NUM (XFLM_FIRST_RESERVED_ELEMENT_TAG - 2)
+ #define XFLM_MAX_ATTRIBUTE_NUM (XFLM_FIRST_RESERVED_ATTRIBUTE_TAG - 1)
+
+ // Types of metadata available on DOM nodes - can index on these.
+ // Also, can search on these via the META_AXIS
+
+ #define XFLM_META_NODE_ID 1
+ #define XFLM_META_DOCUMENT_ID 2
+ #define XFLM_META_PARENT_ID 3
+ #define XFLM_META_FIRST_CHILD_ID 4
+ #define XFLM_META_LAST_CHILD_ID 5
+ #define XFLM_META_NEXT_SIBLING_ID 6
+ #define XFLM_META_PREV_SIBLING_ID 7
+ #define XFLM_META_VALUE 8
+
+ #define XFLM_INI_CACHE "cache"
+ #define XFLM_INI_CACHE_ADJUST_INTERVAL "cacheadjustinterval"
+ #define XFLM_INI_CACHE_CLEANUP_INTERVAL "cachecleanupinterval"
+ #define XFLM_INI_MAX_DIRTY_CACHE "maxdirtycache"
+ #define XFLM_INI_LOW_DIRTY_CACHE "lowdirtycache"
+
+ /****************************************************************************
+ Desc: Reference Counting class
+ ****************************************************************************/
+ class XF_RefCount
+ {
+ public:
+
+ XF_RefCount()
+ {
+ m_ui32RefCnt = 1;
+ }
+
+ virtual ~XF_RefCount()
+ {
+ }
+
+ virtual FINLINE FLMUINT getRefCount( void)
+ {
+ return( m_ui32RefCnt);
+ }
+
+ virtual FINLINE FLMUINT32 XFLMAPI AddRef( void)
+ {
+ m_ui32RefCnt++;
+ return m_ui32RefCnt;
+ }
+
+ virtual FINLINE FLMUINT32 XFLMAPI Release( void)
+ {
+ FLMUINT32 ui32RefCnt = --m_ui32RefCnt;
+
+ if( !ui32RefCnt)
+ {
+ delete this;
+ }
+
+ return( ui32RefCnt);
+ }
+
+ protected:
+
+ FLMUINT32 m_ui32RefCnt;
+ };
+
+ // Class ID for the F_DbSystemFactory class (which is defined in fcompub.h).
+ // We don't need a separate interface definition because it implements the
+ // well-known PCIClassFactory interface.
+
+ // {EBF905EE-43F1-45e1-A477-6C459AF26F76}
+ XFLM_DEFINE_GUID( Internal_CLSID_F_DbSystemFactory, 0xebf905ee, 0x43f1,
+ 0x45e1, 0xa4, 0x77, 0x6c, 0x45, 0x9a, 0xf2, 0x6f, 0x76);
+
+ #define CLSID_F_DbSystemFactory (s_guid &)(Internal_CLSID_F_DbSystemFactory)
+
+ // {B3A01545-F5F9-4618-AC6E-5FD606BF8F92}
+ XFLM_DEFINE_GUID(Internal_IID_IF_DbSystem, 0xb3a01545, 0xf5f9, 0x4618,
+ 0xac, 0x6e, 0x5f, 0xd6, 0x6, 0xbf, 0x8f, 0x92);
+
+ #define IID_IF_DbSystem (s_guid &)(Internal_IID_IF_DbSystem)
+
+ // Defaults for certain other settable items in the IF_DbSystem
+
+ #define XFLM_DEFAULT_MAX_CP_INTERVAL 180
+ #define XFLM_DEFAULT_CACHE_ADJUST_PERCENT 70
+ #define XFLM_DEFAULT_CACHE_ADJUST_MIN (16 * 1024 * 1024)
+ #define XFLM_DEFAULT_CACHE_ADJUST_MAX 0xE0000000
+ #define XFLM_DEFAULT_CACHE_ADJUST_MIN_TO_LEAVE 0
+ #define XFLM_DEFAULT_CACHE_ADJUST_INTERVAL 15
+ #define XFLM_DEFAULT_CACHE_CLEANUP_INTERVAL 15
+ #define XFLM_DEFAULT_UNUSED_CLEANUP_INTERVAL 2
+ #define XFLM_DEFAULT_MAX_UNUSED_TIME 120
+ #define XFLM_DEFAULT_FILE_EXTEND_SIZE (8192 * 1024)
+ #define XFLM_MIN_BLOCK_SIZE 4096
+ #define XFLM_MAX_BLOCK_SIZE 8192
+ #define XFLM_DEFAULT_OPEN_THRESHOLD 100 // 100 file handles to cache
+ #define XFLM_DEFAULT_MAX_AVAIL_TIME 900 // 15 minutes
+ #define XFLM_DEFAULT_REHASH_BACKOFF_INTERVAL 60 // 1 minute
+
+ /**
+ * @brief The IF_DbSystem is actually an interface definition that provides public access
+ * to the XFlaim database environment.
+ *
+ * This class represents the XFlaim database system. It extends XFLMIUnknown.
+ * The IF_DbSystem interface is used to represent the actual database system object.
+ * The database system object incorporates functionality to startup, shutdown, create,
+ * open and copy an XFlaim database. Note that the database system when XFlaim is
+ * running is more than the files that store the data. The database system also
+ * includes all of the in-memory structures and objects that are used, either
+ * intermittently or throughout the life of the database system. The class id for
+ * this interface is CLSID_F_DbSystemFactory and the interface id is IID_IF_DbSystem.
+ */
+ xflminterface IF_DbSystem : public XFLMIUnknown
+ {
+ /**
+ * @brief Initializes the database system object.
+ *
+ * The init method is used to startup the database system engine. This routine may
+ * be called multiple times within the same process space. For each time the init
+ * method is called, there must be a corresponding call to exit. The database engine
+ * will only shut down on the last call to exit.
+ */
+ virtual RCODE XFLMAPI init( void) = 0;
+
+ virtual RCODE XFLMAPI updateIniFile(
+ const char * pszParamName,
+ const char * pszValue) = 0;
+
+ /**
+ * @brief Shuts down the database system and closes any open databases.
+ *
+ * The exit method is used to shutdown the database system engine. This routine allows
+ * itself to be called multiple times, even before init is called or if the call to init fails.
+ */
+ virtual void XFLMAPI exit() = 0;
+
+ /**
+ * @brief Return an IF_FileSystem object for performing file system operations.
+ *
+ * The getFileSystem method returns an IF_FileSystem object that can be used to
+ * perform various operations on files.
+ *
+ * @param ppFileSystem A pointer to a file system object that can
+ * be used to perform various operations on files.
+ */
+ virtual void XFLMAPI getFileSystem(
+ IF_FileSystem ** ppFileSystem) = 0;
+
+ /**
+ * @brief Creates a new database.
+ *
+ * A pointer to a database object (IF_Db) is returned in the ppDb parameter. The database system
+ * engine must first be started using the init method. After creating a new XFlaim database,
+ * the database is open and ready to use.
+ *
+ * @param pszDbFileName Name of the control file for the database. See the XFlaim Concepts/Database
+ * Files for a discussion on the different database files, including the control file.
+ * @param pszDataDir The directory where the data files are to be created. If a NULL is passed in,
+ * data files will be created in the same directory as the control file (as specified by the
+ * pszDbFileName parameter). See the XFlaim Concepts/Database Files for a discussion on the different
+ * database files.
+ * @param pszRflDir The directory where the RFL (roll forward log) files are to be located. If a
+ * NULL is passed, roll forward log files will reside in the same directory as the control file
+ * (as specified by the pszDbFileName parameter). See the XFlaim Concepts/Database Files for a
+ * discussion on the different database files, including the rfl (Roll-forward log) file.
+ * @param pszDictFileName Name of file containing dictionary definitions to be imported into the
+ * dictionary collection during database creation. Note that this parameter is ignored if pzDictBuf
+ * is non-NULL. See the XFlaim Concepts section for more information about the XFlaim Dictionary.
+ * @param pszDictBuf Null-terminated string buffer containing dictionary definitions in external
+ * XML format. If the value of this parameter is NULL, pszDictFileName will be used. If both
+ * pszDictFileName and pszDictBuf are NULL, the database will be created with an empty dictionary.
+ * See the XFlaim Concepts section for more information about the XFlaim Dictionary.
+ * @param pCreateOpts Create options for the database. All members of the structure should be
+ * initialized to specify options desired when the database is created. If NULL is passed as
+ * the value of this parameter, default options will be used. See the glossary for a description
+ * of the XFLM_CREATE_OPTS structure and the default value for each field.
+ * @param ppDb A pointer to a database object that references the newly created database.
+ * @return RCODE
+ */
+ virtual RCODE XFLMAPI dbCreate(
+ const char * pszDbFileName,
+ const char * pszDataDir,
+ const char * pszRflDir,
+ const char * pDictFileName,
+ const char * pszDictBuf,
+ XFLM_CREATE_OPTS * pCreateOpts,
+ IF_Db ** ppDb) = 0;
+
+ /**
+ * @brief Opens an existing database.
+ *
+ * The dbOpen method opens an existing database. A pointer to a database object (IF_Db) is returned
+ * in the ppDb parameter. The database system engine must first be started using the init method.
+ * After opening an XFlaim database, the database is ready to use.
+ *
+ * @param pszDbFileName Name of the control file for the database that is to be opened. See the
+ * XFlaim Concepts/Database Files for a discussion on the different database files, including the control file.
+ * @param pszDataDir The directory where the data files are located. If a NULL is passed in,
+ * it is assumed that the data files are located in the same directory as the control file
+ * (as specified by the pszDbFileName parameter). See the XFlaim Concepts/Database Files for a
+ * discussion on the different database files.
+ * @param pszRflDir The directory where the RFL (roll forward log) files are located. If a NULL
+ * is passed, roll forward log files are assumed to reside in the same directory as the control file
+ * (as specified by the pszDbFileName parameter). See the XFlaim Concepts/Database Files for a
+ * discussion on the different database files, including the rfl (Roll-forward log) file.
+ * @param ppDb A pointer to a database object that references the newly created database.
+ * @return RCODE
+ */
+ virtual RCODE XFLMAPI dbOpen(
+ const char * pszDbFileName,
+ const char * pszDataDir,
+ const char * pszRflDir,
+ const char * pszPassword,
+ FLMBOOL bAllowLimited,
+ IF_Db ** ppDb) = 0;
+
+ /**
+ * @brief Rebuilds a database.
+ *
+ * The dbRebuild method will attempt to reconstruct a database, recovering everything that it can
+ * from the blocks of the database.
+ *
+ * @param pszSourceDbFileName Name of the source control file for the database that is to be rebuilt.
+ * See the XFlaim Concepts/Database Files for a discussion on the different database files,
+ * including the control file.
+ * @param pszSourceDataDir The directory where the data files are located. If a NULL is passed in,
+ * it is assumed that the data files are located in the same directory as the control file
+ * (as specified by the pszSourceDbFileName parameter). See the XFlaim Concepts/Database Files
+ * for a discussion on the different database files.
+ * @param pszDestDbFileName Name of the destination control file for the recovered database.
+ * See the XFlaim Concepts/Database Files for a discussion on the different database files,
+ * including the control file.
+ * @param pszDestDataDir The directory where the data files are to be located. If a NULL is
+ * passed in, it is assumed that the data files are to be located in the same directory as
+ * the control file (as specified by the pszDestDbFileName parameter). See the XFlaim
+ * Concepts/Database Files for a discussion on the different database files.
+ * @param pszDestRflDir The directory where the RFL (roll forward log) files of the
+ * destination database are to be created. If a NULL is passed, roll forward log files are
+ * assumed to reside in the same directory as the control file (as specified by the
+ * pszDestDbFileName parameter). See the XFlaim Concepts/Database Files for a discussion
+ * on the different database files, including the rfl (Roll-forward log) file.
+ * @param pszDictFileName The name of a file containing the dictionary definitions that
+ * will be used when rebuilding the database. A NULL may be passed in this parameter.
+ * In addition to using the definitions specified in this file, dbRebuild will attempt
+ * to recover any additional dictionary entries from the dictionary collection.
+ * See XFlaim Concepts / Dictionary for a discussion on the dictionary in XFlaim.
+ * @param pCreateOpts Create options for the database. All members of the structure should
+ * be initialized to specify options desired when the database is created. If NULL is passed
+ * as the value of this parameter, default options will be used. See the glossary for a description
+ * of the XFLM_CREATE_OPTS structure and the default value for each field.
+ * @param pDbRebuild A pointer to an application defined status reporting object. Methods
+ * on this object are used by dbRebuild to report progress during the rebuild. A NULL may be
+ * passed in this parameter. This object is NOT implemented by XFlaim, but is implemented by
+ * the application. The application must create a class that inherits from the IF_DbRebuildStatus
+ * interface and implements the pure virtual methods of that interface.
+ * @param pui64TotalNodes The total number of DOM nodes.
+ * @param pui64NodesRecovered The total number of DOM nodes recovered.
+ * @param pui64NodesDiscardedDocs The total number of documents that couldn't be recovered.
+ * @return RCODE
+ */
+ virtual RCODE XFLMAPI dbRebuild(
+ const char * pszSourceDbPath,
+ const char * pszSourceDataDir,
+ const char * pszDestDbPath,
+ const char * pszDestDataDir,
+ const char * pszDestRflDir,
+ const char * pszDictPath,
+ const char * pszPassword,
+ XFLM_CREATE_OPTS * pCreateOpts,
+ FLMUINT64 * pui64TotNodes,
+ FLMUINT64 * pui64NodesRecov,
+ FLMUINT64 * pui64DiscardedDocs,
+ IF_DbRebuildStatus * pDbRebuild) = 0;
+
+ /**
+ * @brief Checks a database for corruptions.
+ *
+ * The dbCheck method will check the database for corruptions ans in certain cases it can repair them.
+ *
+ * @param pszDbFileName Name of the control file for the database that is to be checked.
+ * See the XFlaim Concepts/Database Files for a discussion on the different database files,
+ * including the control file.
+ * @param pszDataDir The directory where the data files are located. If a NULL is passed in,
+ * it is assumed that the data files are located in the same directory as the control file
+ * (as specified by the pszDbFileName parameter). See the XFlaim Concepts/Database Files for a
+ * discussion on the different database files.
+ * @param pszRflDir The directory where the RFL (roll forward log) files are located. If a NULL is
+ * passed, roll forward log files are assumed to reside in the same directory as the control file
+ * (as specified by the pszDbFileName parameters). See the XFlaim Concepts/Database Files for a
+ * discussion on the different database files, including the rfl (Roll-forward log) file.
+ * @param pDbCheckStatus A pointer to an application defined status reporting object. Methods
+ * on this object are used by dbCheck to report progress and corruptions to the calling application.
+ * A NULL may be passed in this parameter. This object is NOT implemented by XFlaim, but is
+ * implemented by the application. The application must create a class that inherits from the
+ * IF_DbCheckStatus interface and implements the pure virtual methods of that interface.
+ * @param ppDbInfo If a non-NULL ppDbInfo pointer is passed, an IF_DbInfo object will be returned
+ * that contains detailed statistical information about the various B-trees in the database.
+ * The information includes things like percent utilization of various blocks at each level in
+ * a B-tree, number of keys, etc. Methods of the IF_DbInfo object provide for retrieval of this information.
+ * @return RCODE
+ */
+ virtual RCODE XFLMAPI dbCheck(
+ const char * pszDbFileName,
+ const char * pszDataDir,
+ const char * pszRflDir,
+ const char * pszPassword,
+ FLMUINT uiFlags,
+ IF_DbInfo ** ppDbInfo,
+ IF_DbCheckStatus * pDbCheckStatus) = 0;
+
+ /**
+ * @brief Copies a database.
+ *
+ * Copies a database to a new database. The destination database will be created if it
+ * does not exist and overwritten if it does exist.
+ *
+ * @param pszSrcDbName Name of the control file for the database that is to be copied.
+ * See the XFlaim Concepts/Database Files for a discussion on the different database files,
+ * including the control file.
+ * @param pszSrcDataDir The directory where the source database's data files are located.
+ * If a NULL is passed in, it is assumed that the source database's data files are located in
+ * the same directory as the source database's control file (as specified by the pszSrcDbName
+ * parameter). See the XFlaim Concepts/Database Files for a discussion on the different database files.
+ * @param pszSrcRflDir The directory where the RFL (roll forward log) files of the source database
+ * are located. If a NULL is passed, the roll forward log files of the source database are assumed
+ * to reside in the same directory as the source database's control file (as specified by the pszSrcDbName
+ * parameter). See the XFlaim Concepts/Database Files for a discussion on the different database files,
+ * including the rfl (Roll-forward log) file.
+ * @param pszDestDbName Name of the control file for the destination database. If the destination
+ * database already exists, it will be overwritten. See the XFlaim Concepts/Database Files for a
+ * discussion on the different database files, including the control file.
+ * @param pszDestDataDir The directory where the destination database's data files are to be stored.
+ * If a NULL is passed in, the destination database's data files will be put in the same directory
+ * as the destination database's control file (as specified by the pszDestDbName parameter).
+ * See the XFlaim Concepts/Database Files for a discussion on the different database files.
+ * @param pszDestRflDir The directory where the RFL (roll forward log) files of the destination database
+ * are to be put. If a NULL is passed, the roll forward log files of the destination database will be
+ * put in the same directory as the destination database's control file (as specified by the
+ * pszDestDbName parameter). See the XFlaim Concepts/Database Files for a discussion on the different
+ * database files, including the rfl (Roll-forward log) file.
+ * @param ifpStatus A pointer to an application defined status reporting object. Methods on this object
+ * are used by dbCopy to report progress during the copy. A NULL may be passed in this parameter.
+ * This object is NOT implemented by XFlaim, but is implemented by the application. The application
+ * must create a class that inherits from the IF_DbCopyStatus interface and implements the pure virtual
+ * methods of that interface. Those methods may be called by dbCopy to report copy progress.
+ * @return RCODE
+ */
+ virtual RCODE XFLMAPI dbCopy(
+ const char * pszSrcDbName,
+ const char * pszSrcDataDir,
+ const char * pszSrcRflDir,
+ const char * pszDestDbName,
+ const char * pszDestDataDir,
+ const char * pszDestRflDir,
+ IF_DbCopyStatus * ifpStatus) = 0;
+
+ /**
+ * @brief Renames a database.
+ *
+ * This method will rename an existing database to a specified new name.
+ *
+ * @param pszDbName Name of the control file for the database that is to be renamed.
+ * See the XFlaim Concepts/Database Files for a discussion on the different database files,
+ * including the control file.
+ * @param pszDataDir The directory where the database's data files are located. If a NULL
+ * is passed in, it is assumed that the data files are located in the same directory as the
+ * control file (as specified by the pszDbName parameter). See the XFlaim Concepts/Database
+ * Files for a discussion on the different database files.
+ * @param pszRflDir The directory where the RFL (roll forward log) files of the database
+ * are located. If a NULL is passed, the roll forward log files of the database are assumed
+ * to reside in the same directory as the control file (as specified by the pszDbName parameter).
+ * See the XFlaim Concepts/Database Files for a discussion on the different database files,
+ * including the RFL (Roll-forward log) file.
+ * @param pszNewDbName Name the control file is to be renamed to. This name also determines
+ * what data files and RFL files will be renamed to. See the XFlaim Concepts/Database Files
+ * for a discussion on the different database files, including the control file. Note that the
+ * directory of the new database name must be the same as the directory specified in pszDbName.
+ * @param bOverwriteDestOk If pszNewDbName specifies the name of a file that already exists,
+ * this flag indicates whether that file should be deleted so that the rename can proceed.
+ * If FALSE, the rename will fail.
+ * @param ifpStatus A pointer to an application defined status reporting object. Methods on
+ * this object are used by dbRename to report progress during the rename. A NULL may be passed
+ * in this parameter. This object is NOT implemented by XFlaim, but is implemented by the
+ * application. The application must create a class that inherits from the IF_DbRenameStatus
+ * interface and implements the pure virtual methods of that interface.
+ * @return RCODE
+ */
+ virtual RCODE XFLMAPI dbRename(
+ const char * pszDbName,
+ const char * pszDataDir,
+ const char * pszRflDir,
+ const char * pszNewDbName,
+ FLMBOOL bOverwriteDestOk,
+ IF_DbRenameStatus * ifpStatus) = 0;
+
+ /**
+ * @brief Removes a database.
+ *
+ * This method will remove (delete) an existing database.
+ *
+ * @param pszDbName Name of the control file for the database that is to be removed.
+ * See the XFlaim Concepts/Database Files for a discussion on the different database
+ * files, including the control file.
+ * @param pszDataDir The directory where the database's data files are located. If a
+ * NULL is passed in, it is assumed that the data files are located in the same directory
+ * as the control file (as specified by the pszDbName parameter). See the XFlaim
+ * Concepts/Database Files for a discussion on the different database files.
+ * @param pszRflDir The directory where the RFL (roll forward log) files of the database are
+ * located. If a NULL is passed, the roll forward log files of the database are assumed to
+ * reside in the same directory as the control file (as specified by the pszDbName parameter).
+ * See the XFlaim Concepts/Database Files for a discussion on the different database files,
+ * including the RFL (Roll-forward log) file.
+ * @param bRemoveRflFiles A flag that indicate whether or not the RFL file(s) should be removed as well.
+ * @return RCODE
+ */
+ virtual RCODE XFLMAPI dbRemove(
+ const char * pszDbName,
+ const char * pszDataDir,
+ const char * pszRflDir,
+ FLMBOOL bRemoveRflFiles) = 0;
+
+ /**
+ * @brief Restores a database from a backup set.
+ *
+ * This method will restore a database from a backup set. The client is responsible for
+ * providing an implementation of the IF_RestoreClient and IF_RestoreStatus interfaces.
+ *
+ * @param pszDbPath Name of the control file (including path) for the database that is to
+ * be restored. See the XFlaim Concepts/Database Files for a discussion on the different
+ * database files, including the control file.
+ * @param pszDataDir The directory where the database's data files are located. If a
+ * NULL is passed in, it is assumed that the data files are located in the same directory
+ * as the control file (as specified by the pszDbName parameter). See the XFlaim
+ * Concepts/Database Files for a discussion on the different database files.
+ * @param pszBackupPath The path to the backup file set.
+ * @param pszRflDir The directory where the RFL (roll forward log) files of the database
+ * are located. If a NULL is passed, the roll forward log files of the database are
+ * assumed to reside in the same directory as the control file (as specified by the
+ * pszDbName parameter). See the XFlaim Concepts/Database Files for a discussion on
+ * the different database files, including the RFL (Roll-forward log) file.
+ * @param pRestoreObj A pointer to an application defined restore client object. Methods
+ * on this object are used by dbRestore to read the backed-up data from the location it is
+ * stored in. The application is responsible for implementing this object. In this way,
+ * an application can have a database restored from virtually any media.
+ * If a NULL is passed in this parameter, pszBackupPath is used to restore from.
+ * Visit: Need to say something about the default backup file set.
+ * @param pRestoreStatus A pointer to an application defined restore status object.
+ * Methods on this object are used by dbRestore to report progress during the restore.
+ * The application is responsible for implementing this object.
+ * @return RCODE
+ */
+ virtual RCODE XFLMAPI dbRestore(
+ const char * pszDbPath,
+ const char * pszDataDir,
+ const char * pszRflDir,
+ const char * pszBackupPath,
+ const char * pszPassword,
+ IF_RestoreClient * pRestoreObj,
+ IF_RestoreStatus * pRestoreStatus) = 0;
+
+ /**
+ * @brief Duplicates the IF_Db interface object.
+ *
+ * @par
+ * This method will duplicate the IF_Db interface object. It is similar to the dbOpen method,
+ * except that it doesn't take a database file name as input, but takes an already open IF_Db
+ * object as input. The returned IF_Db object is the same as if it had been created by the dbOpen
+ * method. However, calling dbDup is slightly more efficient than calling dbOpen.
+ * @par
+ * Since IF_Db objects cannot be shared between threads (they are not thread-safe), an application
+ * would normally have each of its threads call dbOpen to obtain an IF_Db object. The dbDup
+ * method provides an alternative way to create IF_Db objects for multiple threads.
+ * For example, one thread could call dbOpen to obtain the first IF_Db object. Thereafter,
+ * it could call dbDup and pass the created IF_Db objects to different threads.
+ * @par
+ * Although the most common use of dbDup is to create IF_Db objects and pass them to different
+ * threads, it is conceivable that one thread might want multiple IF_Db objects on the same
+ * database. The uses for this are probably somewhat exotic. For example, a single thread
+ * using multiple IF_Db objects could have multiple different transactions open simultaneously.
+ *
+ * @param pDb The database object to be duplicated.
+ * @param ppDb A new database object.
+ * @return RCODE
+ */
+ virtual RCODE XFLMAPI dbDup(
+ IF_Db * pDb,
+ IF_Db ** ppDb) = 0;
+
+ /**
+ * @brief Converts an RCODE error number to a string equivalent.
+ *
+ * This method converts an RCODE error number to a string equivalent that can then be printed in
+ * a diagnostic log or some other human readable output.
+ *
+ * @param rc The RCODE to be translated.
+ * @return const char *
+ */
+ virtual const char * XFLMAPI errorString(
+ RCODE rc) = 0;
+
+ /**
+ * @brief Converts a corruption code to a string equivalent.
+ *
+ * This method converts a corruption code to a string equivalent that can then be printed in
+ * a diagnostic log or some other human readable output.
+ *
+ * @param iErrCode The error code to be translated.
+ * @return const char *
+ */
+ virtual const char * XFLMAPI checkErrorToStr(
+ FLMINT iCheckErrorCode) = 0;
+
+ /**
+ * @brief Opens a buffered input stream.
+ *
+ * This method opens a buffered input stream. The pucBuffer buffer holds that data that is to be
+ * streamed through the IF_PosIStream object. NOTE: The returned IF_PosIStream object's Release()
+ * method should be called when the application is done using the object.
+ *
+ * @param pucBuffer The buffer that will be associated with the input stream.
+ * @param uiLength The size of the buffer (bytes).
+ * @param ppIStream The input stream object used to read the data in.
+ * @return RCODE
+ */
+ virtual RCODE XFLMAPI openBufferIStream(
+ const char * pucBuffer,
+ FLMUINT uiLength,
+ IF_PosIStream ** ppIStream) = 0;
+
+ /**
+ * @brief Opens a file input stream.
+ *
+ * This method opens a file input stream. The pszPath parameter points to a file that holds the data
+ * that is to be streamed through the IF_PosIStream object. NOTE: The returned IF_PosIStream object's
+ * Release() method should be called when the application is done using the object.
+ *
+ * @param pszPath The name of file whose data is to be read via the IF_PosIStream object.
+ * @param ppIStream The input stream object used to read the data in.
+ * @return RCODE
+ */
+ virtual RCODE XFLMAPI openFileIStream(
+ const char * pszPath,
+ IF_PosIStream ** ppIStream) = 0;
+
+ /**
+ * @brief Open a multi-file input stream.
+ *
+ * (*ppIStream)->read() will read data from the files in the directory (pszDirectory)
+ * that match the base name given (pszBaseName). EOF is returned when there are no
+ * more files to read from. File names start with pszBaseName, then
+ * pszBaseName.00000001, pszBaseName.00000002, etc. The extension is a hex number.
+ */
+ virtual RCODE XFLMAPI openMultiFileIStream(
+ const char * pszDirectory,
+ const char * pszBaseName,
+ IF_IStream ** ppIStream) = 0;
+
+ /**
+ * @brief Convert an input stream (pIStream) into a buffered input stream (*ppIStream)
+ *
+ * When (*ppIStream)->read() is called, it will fill an internal buffer of
+ * uiBufferSize by reading from pIStream. Data is returned from the buffer until
+ * the buffer is emptied, at which time another read will be done from pIStream,
+ * until pIStream has no more data to return. This method allows any input stream
+ * to be turned into a buffered stream.
+ */
+ virtual RCODE XFLMAPI openBufferedIStream(
+ IF_IStream * pIStream,
+ FLMUINT uiBufferSize,
+ IF_IStream ** ppIStream) = 0;
+
+ /**
+ * @brief Read uncompressed data from a compressed stream (pIStream)
+ *
+ * When (*ppIStream)->read() is called, it will read and uncompress data from
+ * pIStream.
+ */
+ virtual RCODE XFLMAPI openUncompressingIStream(
+ IF_IStream * pIStream,
+ IF_IStream ** ppIStream) = 0;
+
+ // METHODS FOR GETTING OUTPUT STREAM OBJECTS
+
+ /**
+ * @brief Create a file output stream.
+ *
+ * Data is written out to the specified file. The file may be created, overwritten, or
+ * appended to, depending on iAccessFlags.
+ */
+ virtual RCODE XFLMAPI openFileOStream(
+ const char * pszFileName,
+ FLMBOOL bTruncateIfExists,
+ IF_OStream ** ppOStream) = 0;
+
+ /**
+ * @brief Create a multi-file output stream.
+ *
+ * Data is written to the specified directory, creating files using the given
+ * base file name. When a file reaches the specified size, another file will
+ * be created by appending a suffix with an incrementing HEX number. The
+ * bOverwrite flag indicates whether to overwrite files that already exist.
+ */
+ virtual RCODE XFLMAPI openMultiFileOStream(
+ const char * pszDirectory,
+ const char * pszBaseName,
+ FLMUINT uiMaxFileSize,
+ FLMBOOL bOkToOverwrite,
+ IF_OStream ** ppStream) = 0;
+
+ /**
+ * @brief Remove a multi-file stream
+ */
+ virtual RCODE XFLMAPI removeMultiFileStream(
+ const char * pszDirectory,
+ const char * pszBaseName) = 0;
+
+ /**
+ * @brief Convert an output stream (pOStream) into a buffered output stream (*ppOStream)
+ *
+ * As data is written to *ppOStream, it is buffered before ultimately being
+ * written to pOStream.
+ */
+ virtual RCODE XFLMAPI openBufferedOStream(
+ IF_OStream * pOStream,
+ FLMUINT uiBufferSize,
+ IF_OStream ** ppOStream) = 0;
+
+ /**
+ * @brief Convert an output stream (pOStream) into a compressed output stream (*ppOStream)
+ *
+ * As data is written to *ppOStream, it is compressed before ultimately being
+ * written to pOStream.
+ */
+ virtual RCODE XFLMAPI openCompressingOStream(
+ IF_OStream * pOStream,
+ IF_OStream ** ppOStream) = 0;
+
+ /**
+ * @brief All data is read from the input stream (pIStream) and written
+ * to the output stream (pOStream). This goes until pIStream returns EOF.
+ */
+ virtual RCODE XFLMAPI writeToOStream(
+ IF_IStream * pIStream,
+ IF_OStream * pOStream) = 0;
+
+ /**
+ * @brief Opens a base64 encoder stream
+ *
+ * This method opens a stream for encoding a user-supplied input stream to
+ * base64 (ASCII).
+ *
+ * @param pInputStream The stream to be encoded
+ * @param bInsertLineBreaks A line break will be inserted every 72
+ * characters
+ * @param ppEncodedStream The stream object used to read the encoded data.
+ * @return RCODE
+ */
+ virtual RCODE XFLMAPI openBase64Encoder(
+ IF_IStream * pInputStream,
+ FLMBOOL bInsertLineBreaks,
+ IF_IStream ** ppEncodedStream) = 0;
+
+ /**
+ * @brief Opens a base64 decoder stream
+ *
+ * This method opens a stream for decoding a user-supplied input stream from
+ * base64 (ASCII) to binary.
+ *
+ * @param pInputStream The stream to be decoded
+ * @param ppDecodedStream The stream object used to read the decoded data.
+ * @return RCODE
+ */
+ virtual RCODE XFLMAPI openBase64Decoder(
+ IF_IStream * pInputStream,
+ IF_IStream ** ppDecodedStream) = 0;
+
+ /**
+ * @brief Creates an IF_DataVector interface object.
+ *
+ * This method creates an IF_DataVector interface object. The IF_DataVector
+ * is used in index key searches.
+ *
+ * @param ifppDV The IF_DataVector object.
+ * @return RCODE
+ */
+ virtual RCODE XFLMAPI createIFDataVector(
+ IF_DataVector ** ifppDV) = 0;
+
+ /**
+ * @brief Creates an IF_ResultSet interface object.
+ *
+ * This method creates an IF_ResultSet interface object.
+ *
+ * @param ifppResultSet The IF_ResultSet object.
+ * @return RCODE
+ */
+ virtual RCODE XFLMAPI createIFResultSet(
+ IF_ResultSet ** ifppResultSet) = 0;
+
+ /**
+ * @brief Creates an IF_Query interface object.
+ *
+ * This method creates an IF_Query interface object.
+ *
+ * @param ifppQuery The IF_Query object.
+ * @return RCODE
+ */
+ virtual RCODE XFLMAPI createIFQuery(
+ IF_Query ** ifppQuery) = 0;
+
+ /**
+ * @brief Frees memory for allocations that are returned from various XFlaim methods.
+ *
+ * This method frees memory that has been allocated by various methods in XFlaim. If
+ * a method allocates memory that needs to be freed by this method, it will be documented
+ * in that method.
+ *
+ * @param ppMem Pointer to the pointer of the memory to be freed. When the memory is
+ * successfully freed, the pointer will be set to NULL
+ */
+ virtual void XFLMAPI freeMem(
+ void ** ppMem) = 0;
+
+ // Various configuration routines
+
+ /**
+ * @brief Set a dynamic memory limit in the XFlaim database system.
+ *
+ * This method sets the dynamic memory parameters in the XFlaim database system. When this
+ * method is called, XFlaim is put into a mode where it periodically (every 15 seconds unless
+ * otherwise specified - see setCacheAdjustInterval) adjusts its cache limit. The parameters
+ * passed into this method are used to calculate the new limit. The new limit remains in
+ * effect until the next adjustment is made.
+ *
+ * @param uiCacheAdjustPercent Percentage of available physical memory to set or adjust to.
+ * @param uiCacheAdjustMin Minimum bytes to adjust down to.
+ * @param uiCacheAdjustMax Maximum bytes to adjust up to. NOTE: If this parameter is non-zero,
+ * the uiCacheAdjustMinToLeave parameter is ignored.
+ * @param uiCacheAdjustMinToLeave Minimum bytes to leave available after making adjustment.
+ * This is an alternative way to specify a maximum to adjust to. Using this value, XFlaim will
+ * calculate the maximum by subtracting this number from the total bytes it thinks is available.
+ * That calculated number becomes the effective maximum to adjust to.
+ * @return RCODE
+ */
+ virtual RCODE XFLMAPI setDynamicMemoryLimit(
+ FLMUINT uiCacheAdjustPercent,
+ FLMUINT uiCacheAdjustMin,
+ FLMUINT uiCacheAdjustMax,
+ FLMUINT uiCacheAdjustMinToLeave) = 0;
+
+ /**
+ * @brief Set a hard limit on the amount of memory that the database system can access.
+ *
+ * This method sets a hard limit on the amount of memory that the database system can access.
+ * The important difference between this routine and the setDynamicMemoryLimit routine is that
+ * the limit remains in force until a subsequent call to setHardMemoryLimit is made, or until
+ * a call to setDynamicMemoryLimit is made. The setDynamicMemoryLimit routine, on the other
+ * hand, puts XFlaim into a mode where a new limit is automatically calculated on a preset
+ * interval (see setCacheAdjustInterval). Thus, the purpose of the setHardMemoryLimit routine
+ * is to let the application control the limit instead of having it automatically adjusted periodically.
+ *
+ * @param uiPercent If this parameter is zero, the uiMax parameter determines the hard cache limit.
+ * Otherwise, this parameter (which must contain a number between 1 and 100) is used to determine
+ * a hard cache limit. The hard limit will be calculated as a percentage of available physical
+ * memory on the system.
+ * @param bPercentOfAvail A flag to indicate that the percentage (uiPercent) is to be interpreted
+ * as a percentage of available memory as opposed to a percentage of all of physical memory.
+ * This parameter is only used if uiPercent is non-zero.
+ * @param uiMin Minimum bytes to set the hard cache limit to. Note that this parameter is only used
+ * if uiPercent is non-zero and we are calculating a hard limit to set.
+ * @param uiMax Maximum bytes to set the hard limit to. Note that if uiPercent is zero,
+ * this number contains the hard limit.
+ * @param uiMinToLeave This parameter is only used if uiPercent is non-zero and we are calculating
+ * a hard limit to set. Instead of uiMax determining the maximum cache limit we could set, this
+ * value will determine the maximum. This number will be subtracted from the total memory on the
+ * system or the total memory currently available (if bPercentOfAvail is TRUE) to establish a maximum.
+ * @param bPreallocate Boolean flag. Used to indicate that the cache should be preallocated when XFlaim
+ * starts up, rather than allow it to grow as needed. The default value to FALSE.
+ * @return RCODE
+ */
+ virtual RCODE XFLMAPI setHardMemoryLimit(
+ FLMUINT uiPercent,
+ FLMBOOL bPercentOfAvail,
+ FLMUINT uiMin,
+ FLMUINT uiMax,
+ FLMUINT uiMinToLeave,
+ FLMBOOL bPreallocate = FALSE) = 0;
+
+ /**
+ * @brief Get a flag which indicates whether or not dynamic cache adjusting
+ * is allowed.
+ *
+ * This method returns a boolean TRUE or FALSE.
+ *
+ * @return FLMBOOL TRUE=supported or FALSE=not supported.
+ */
+ virtual FLMBOOL XFLMAPI getDynamicCacheSupported( void) = 0;
+
+ /**
+ * @brief Query the database system for information regarding the current cache usage.
+ *
+ * This method is used to query the database system for information regarding the current cache usage.
+ *
+ * @param pCacheInfo The cache info structure.
+ */
+ virtual void XFLMAPI getCacheInfo(
+ XFLM_CACHE_INFO * pCacheInfo) = 0;
+
+ /**
+ * @brief A method to either enable or disable cache debug mode.
+ *
+ * This is a method to either enable or disable cache debug mode. If bDebug is TRUE (1),
+ * then cache debug will be enabled. If bDebug is FALSE (0), cache debug will be disabled.
+ *
+ * @param bDebug A boolean to indicate whether to enable or disable cache debug mode.
+ */
+ virtual void XFLMAPI enableCacheDebug(
+ FLMBOOL bDebug) = 0;
+
+ /**
+ * @brief A method to find out if cache debug mode is either enabled or disabled.
+ *
+ * This is a method to find out if cache debug mode is either enabled or disabled.
+ *
+ * @return FLMBOOL True or False
+ */
+ virtual FLMBOOL XFLMAPI cacheDebugEnabled( void) = 0;
+
+ /**
+ * @brief Close all file handles (descriptors) that have not been used for a specified
+ * amount of time.
+ *
+ * This is a method to close all file handles (descriptors) that have not been used or
+ * accessed for a specified number of seconds.
+ *
+ * @param uiSeconds The number of seconds. File handles (descriptors) that have been
+ * unused for a period of time greater than or equal to this number of seconds will be
+ * closed. A value of zero will have the effect of closing all unused file handles
+ * (descriptors), regardless of how long they have been unused.
+ * @return RCODE
+ */
+ virtual RCODE XFLMAPI closeUnusedFiles(
+ FLMUINT uiSeconds) = 0;
+
+ /**
+ * @brief Set the threshold for the number of file handles (descriptors) that can be
+ * opened by the database system.
+ *
+ * This is a method to set the maximum number of file handles (descriptors) that can
+ * be kept open by the database system.
+ *
+ * @param uiThreshold The number of file handles (descriptors) that can be open at any
+ * one time. The default threshold is 65535. IMPORTANT NOTE: It is possible for the
+ * database system to temporarily have more file handles (descriptors) open than the
+ * specified threshold. It does this when all available file handles (descriptors)
+ * are in use and it needs to open a file to perform database work. However, as soon as
+ * it can, the database system will close file handles (descriptors) until it comes back
+ * down below the specified threshold.
+ */
+ virtual void XFLMAPI setOpenThreshold(
+ FLMUINT uiThreshold) = 0;
+
+ /**
+ * @brief Get the threshold for the number of file handles that can be opened by the
+ * database system.
+ *
+ * This method returns the threshold for the number of file handles (descriptors) that
+ * can be held open by the database system.
+ *
+ * @return FLMUINT The open threshold.
+ */
+ virtual FLMUINT XFLMAPI getOpenThreshold( void) = 0;
+
+ /**
+ * @brief Get the number of files that are currently open in the database system.
+ *
+ * This method returns the number of file handles (descriptors) that are currently
+ * open in the database system.
+ *
+ * @return FLMUINT The open file count
+ */
+ virtual FLMUINT XFLMAPI getOpenFileCount( void) = 0;
+
+ /**
+ * @brief Start the collection of statistics on the database system.
+ *
+ * This method starts the collection of statistics on the database system.
+ */
+ virtual void XFLMAPI startStats( void) = 0;
+
+ /**
+ * @brief Stop the collection of statistics on the database system.
+ *
+ * This method stops the collection of statistics on the database system.
+ */
+ virtual void XFLMAPI stopStats( void) = 0;
+
+ /**
+ * @brief Reset the statistics counters on the database system.
+ *
+ * This method resets the statistics counters on the database system.
+ */
+ virtual void XFLMAPI resetStats( void) = 0;
+
+ /**
+ * @brief Retrieve the statistics from the database system.
+ *
+ * This method returns the current set of statistics from the database system.
+ *
+ * @param pFlmStats The structure where statistics are returned.
+ * @return RCODE
+ */
+ virtual RCODE XFLMAPI getStats(
+ XFLM_STATS * pFlmStats) = 0;
+
+ /**
+ * @brief Free the statistic object in the database system.
+ *
+ * This method frees any memory allocations that are associated with the FLM_STATS
+ * structure. The FLM_STATS structure will have been populated by a call to the
+ * getStats method.
+ *
+ * @param pFlmStats The statistics structure whose memory allocations are to be freed.
+ */
+ virtual void XFLMAPI freeStats(
+ XFLM_STATS * pFlmStats) = 0;
+
+ /**
+ * @brief Set the directory where temporary files are created.
+ *
+ * This method sets the directory where temporary files are to be created.
+ *
+ * @param pszPath The temporary directory path.
+ * @return RCODE
+ */
+ virtual RCODE XFLMAPI setTempDir(
+ const char * pszPath) = 0;
+
+ /**
+ * @brief Get the directory where temporary files are created.
+ *
+ * This method returns the directory name where temporary files are created.
+ * If no temporary directory is set, this function returns NE_XFLM_IO_PATH_NOT_FOUND.
+ *
+ * @param pszPath The temporary directory path is returned here.
+ * @return RCODE
+ */
+ virtual RCODE XFLMAPI getTempDir(
+ char * pszPath) = 0;
+
+ /**
+ * @brief Set the time between checkpoints in the database.
+ *
+ *
+ * This method sets the maximum time between completed checkpoints in the database.
+ * This is NOT the same thing as how often a checkpoint will be performed. Checkpoints
+ * are actually performed and completed much more frequently, depending on how much
+ * update transaction activity there is. A background thread (often referred to as the
+ * checkpoint thread) is responsible for performing database checkpoints. The checkpoint
+ * thread wakes up about once a second to see if there are dirty blocks in the cache
+ * that need to be written to disk. If there are, and there is no currently active
+ * update transaction, it will begin performing a checkpoint. If no update
+ * transactions occur while it is performing the checkpoint, it will be able to complete
+ * the checkpoint. If the application attempts to start an update transaction while
+ * the checkpoint is being done, the checkpoint thread has the option of yielding
+ * to the update transaction and not completing the checkpoint. The checkpoint
+ * thread may also choose to not yield and complete the checkpoint. One of the
+ * conditions under which it will not yield is if the elapsed time since the last
+ * completed checkpoint is greater than the time specified by this method. In that
+ * case, the update transaction is held off until the checkpoint completes.
+ * Note that it is possible for the time between completed checkpoints to be longer than
+ * the interval specified in this routine. The checkpoint thread cannot interrupt an
+ * active transaction when it wakes up. If it wakes up and finds that a transaction
+ * is active, it must wait for the transaction to complete before it can start a checkpoint.
+ * Thus, if that transaction runs a long time, the time between completed checkpoints
+ * could exceed the time specified in this method.
+ *
+ * @param uiSeconds The maximum number of seconds allowed to elapse between completed
+ * checkpoints. Default is 180 seconds. NOTE: It is possible that the time
+ * between completed checkpoints can be greater than this value. This is because the
+ * checkpoint thread cannot run if there is an update transaction that is currently
+ * active. If an update transaction is active and runs for a long time, the time
+ * between completed checkpoints could exceed the time specified in this method.
+ */
+ virtual void XFLMAPI setCheckpointInterval(
+ FLMUINT uiSeconds) = 0;
+
+ /**
+ * @brief Get the current checkpoint interval.
+ *
+ * This method returns the current checkpoint interval.
+ * @return FLMUINT The current checkpoint interval (seconds).
+ */
+ virtual FLMUINT XFLMAPI getCheckpointInterval( void) = 0;
+
+ /**
+ * @brief Set the time interval for dynamically adjusting the cache limit.
+ *
+ * This method sets the time interval for dynamically adjusting the cache limit.
+ *
+ * @param uiSeconds The time interval for dynamically adjusting the cache limit.
+ */
+ virtual void XFLMAPI setCacheAdjustInterval(
+ FLMUINT uiSeconds) = 0;
+
+ /**
+ * @brief Get the time interval for dynamically adjusting the cache limit.
+ *
+ * This method returns the time interval (in seconds) for dynamically adjusting the cache limit.
+ *
+ * @return FLMUINT The curernt cache adjust interval (seconds).
+ */
+ virtual FLMUINT XFLMAPI getCacheAdjustInterval( void) = 0;
+
+ /**
+ * @brief Set the time interval for dynamically cleaning out old cache blocks from block cache.
+ *
+ * This method sets the time interval for cleaning out old cache blocks from block cache.
+ *
+ * @param uiSeconds The time interval for dynamically cleaning out old cache blocks.
+ */
+ virtual void XFLMAPI setCacheCleanupInterval(
+ FLMUINT uiSeconds) = 0;
+
+ /**
+ * @brief Get the time interval for dynamically cleaning out old cache blocks from block cache.
+ *
+ * This method returns the time interval (in seconds) for cleaning out old cache blocks from block cache.
+ *
+ * @return FLMUINT The current cache cleanup inerval (seconds).
+ */
+ virtual FLMUINT XFLMAPI getCacheCleanupInterval( void) = 0;
+
+ /**
+ * @brief Set time interval for cleaning up unused resources (such as file handles).
+ *
+ * This method sets the time interval for cleaning up unused resources (such as file handles).
+ *
+ * @param uiSeconds The time interval for cleaning up unused resources (such as file handles).
+ */
+ virtual void XFLMAPI setUnusedCleanupInterval(
+ FLMUINT uiSeconds) = 0;
+
+ /**
+ * @brief Get time interval for cleaning up unused resources (such as file handles).
+ *
+ * This method returns the time interval (in seconds) for cleaning up unused resources (such as file handles).
+ *
+ * @return FLMUINT The current unused cleanup interval (seconds).
+ */
+ virtual FLMUINT XFLMAPI getUnusedCleanupInterval( void) = 0;
+
+ /**
+ * @brief Set maximum time for a resource (such as a file handle) to be unused before it is cleaned up.
+ *
+ * This method sets the maximum time for a resource (such as a file handle) to be unused before it
+ * is cleaned up.
+ *
+ * @param uiSeconds The maximum time for a resource (such as a file handle) to be unused before it is
+ * cleaned up.
+ */
+ virtual void XFLMAPI setMaxUnusedTime(
+ FLMUINT uiSeconds) = 0;
+
+ /**
+ * @brief Get maximum time for a resource (such as a file handle) to be unused before it is cleaned up.
+ *
+ * This method returns the maximum time for a resource (such as a file handle) to be unused
+ * before it is cleaned up.
+ *
+ * @return FLMUINT The current maximum unused time (seconds).
+ */
+ virtual FLMUINT XFLMAPI getMaxUnusedTime( void) = 0;
+
+ /**
+ * @brief Set the logger client.
+ *
+ * @param pLogger Pointer to the logger client object.
+ */
+ virtual void XFLMAPI setLogger(
+ IF_LoggerClient * pLogger) = 0;
+
+ /**
+ * @brief Enable or disable extended server memory (ESM).
+ *
+ * @param bEnable A boolean flag. When TRUE, Extended Server Memory is enabled.
+ * When FALSE, Extended Server Memory is disabled.
+ */
+ virtual void XFLMAPI enableExtendedServerMemory(
+ FLMBOOL bEnable) = 0;
+
+ /**
+ * @brief Determine if extended server memory (ESM) is enabled or disabled.
+ *
+ * @return FLMBOOL True if enabled, otherwise False.
+ */
+ virtual FLMBOOL XFLMAPI extendedServerMemoryEnabled( void) = 0;
+
+ /**
+ * @brief Deactivate open database objects, forcing the database(s) to eventually be closed.
+ *
+ * This method deactivates all open database objects (IF_Db objects) for a particular
+ * database, forcing the database to eventually be closed. Passing NULL in the pszDbFileName
+ * parameter will deactivate all active database objects for all open databases.
+ *
+ * @param pszDatabasePath Name of the control file ( including path ) for the database that
+ * is to be deactivated. See the XFlaim Concepts/Database Files for a discussion on the
+ * different database files, including the control file. NOTE: Passing a NULL in this
+ * parameter will cause all open databases to be deactivated.
+ * @param pszDataFilePath The directory where the data files are located. If a NULL is passed
+ * in, it is assumed that the data files are located in the same directory as the control file
+ * (as specified by the pszDbFileName parameter). See the XFlaim Concepts/Database Files for
+ * a discussion on the different database files.
+ */
+ virtual void XFLMAPI deactivateOpenDb(
+ const char * pszDatabasePath,
+ const char * pszDataFilePath) = 0;
+
+ /**
+ * @brief Set the maximum number of queries to save when statistics gathering is enabled.
+ *
+ * This method sets the maximum number of queries to save when statistics gathering is enabled.
+ *
+ * @param uiMaxToSave The maximum number of queries to save.
+ */
+ virtual void XFLMAPI setQuerySaveMax(
+ FLMUINT uiMaxToSave) = 0;
+
+ /**
+ * @brief Get the maximum number of queries to save when statistics gathering is enabled.
+ *
+ * This method returns the maximum number of queries to save when statistics gathering is enabled.
+ *
+ * @return FLMUINT The maximum number of queries to save.
+ */
+ virtual FLMUINT XFLMAPI getQuerySaveMax( void) = 0;
+
+ /**
+ * @brief Set the minimum and maximum dirty cache limits.
+ *
+ * This method sets dirty cache limits - a "maximum" and a "low." The maximum specifies the maximum
+ * dirty cache to be allowed. When a database exceeds this amount, the checkpoint thread will kick
+ * in and write out dirty blocks until the dirty cache comes back down below the amount specified by
+ * the "low" value. In this way, the application can control how much dirty cache builds up between
+ * forced checkpoints (see setCheckpointInterval). The more dirty cache there is when the checkpoint
+ * forces a checkpoint, the longer it will take to complete the checkpoint. It should be noted that
+ * the overall time that will be needed to write out dirty blocks is still the same. It's just that
+ * the writing gets spread out more over time. Instead of doing it all in one big chunk, it gets done
+ * in lots of little chunks. This has both pros and cons, so this method should be used with extreme caution!
+ * In a bulk load situation, where there is one thread doing the bulk loading, lowering the maximum
+ * dirty cache could actually lengthen out the overall time it takes to complete the bulk load. This
+ * is because the bulk load will be interrupted more often by the checkpoint thread to do smaller units
+ * of writing than it otherwise would. There will also be less piggy-backing of writes. Piggy-backing
+ * occurs when multiple transactions write to the same data block before the block is flushed out of
+ * cache. If the database system is flushing dirty blocks out of cache more often, it could end up
+ * writing the same block multiple times, whereas it might not not have had to if it had waited longer between flushes.
+ * The advantage to spreading out the flushing of dirty cache blocks occurs when there are multiple threads
+ * trying to do update transactions. When the checkpoint thread forces a checkpoint, it holds back all
+ * pending update transactions. If it has to do more writing when it forces a checkpoint, it may cause
+ * many threads to wait for a longer period of time than it would if there were less writing to do.
+ * This is less efficient to the overall throughput of the system, because it is likely that each of the
+ * threads could be doing other useful work instead of waiting.
+ *
+ * @param uiMaxDirty The maximum amount (in bytes) of dirty cache allowed.
+ * @param uiLowDirty The low threshold (in bytes) for dirty cache.
+ */
+ virtual void XFLMAPI setDirtyCacheLimits(
+ FLMUINT uiMaxDirty,
+ FLMUINT uiLowDirty) = 0;
+
+ /**
+ * @brief Get the minimum and maximum dirty cache limits.
+ *
+ * This method returns the minimum and maximum dirty cache limits.
+ *
+ * @param puiMaxDirty The maximum number of dirty blocks allowed in the cache.
+ * @param puiLowDirty The low threshold for the number of dirty blocks in cache.
+ */
+ virtual void XFLMAPI getDirtyCacheLimits(
+ FLMUINT * puiMaxDirty,
+ FLMUINT * puiLowDirty) = 0;
+
+ /**
+ * @brief Get an information object that can be used to get information about threads owned by the database system.
+ *
+ * This method returns a thread information object which has methods for retrieving various pieces of information
+ * about threads owned by the database system. NOTE: When the application is done using the returned IF_ThreadInfo
+ * object, it should call its Release method.
+ *
+ * @param ifppThreadInfo A pointer to the allocated thread info object is returned here.
+ *
+ * @return RCODE
+ */
+ virtual RCODE XFLMAPI getThreadInfo(
+ IF_ThreadInfo ** ifppThreadInfo) = 0;
+
+ /**
+ * @brief Register a catcher object to catch database events in a particular category.
+ *
+ * This method registers an object to catch events in a particular category of database events.
+ *
+ * @param eCategory The category of events the application is registering for.
+ * @param ifpEventClient The client object whose methods are to be invoked when the event occurs.
+ *
+ * @return RCODE
+ */
+ virtual RCODE XFLMAPI registerForEvent(
+ eEventCategory eCategory,
+ IF_EventClient * ifpEventClient) = 0;
+
+ /**
+ * @brief Deregister a catcher object from catching database events in a particular category.
+ *
+ * This method deregisters an object from catching events in a particular
+ * category of database events.
+ *
+ * @param eCategory The type of event.
+ * @param ifpEventClient The client object that was passed into the registerForEvent
+ * method. This is necessary so that if there are multiple objects that have
+ * registered for an event, XFlaim can know exactly which object to
+ * deregister.
+ */
+ virtual void XFLMAPI deregisterForEvent(
+ eEventCategory eCategory,
+ IF_EventClient * ifpEventClient) = 0;
+
+ /**
+ * @brief Returns the metaphone codes for the next word in an input stream.
+ *
+ * This parses the next word from the input stream (ifpIStream) and returns the metaphone codes for it. This
+ * method returns NE_XFLM_EOF_HIT when it hits the end of the input stream. Visit: This should probably be a
+ * method on the IF_IStream interface, not the IF_DbSystem interface.
+ *
+ * @param ifpIStream Input stream object.
+ * @param puiMetaphone Primary metaphone returned for the next word in the input stream.
+ * @param puiAltMetaphone Alternate metaphone returned for the next word in the input stream.
+ *
+ * @return RCODE
+ */
+ virtual RCODE XFLMAPI getNextMetaphone(
+ IF_IStream * ifpIStream,
+ FLMUINT * puiMetaphone,
+ FLMUINT * puiAltMetaphone = NULL) = 0;
+
+ /**
+ * @brief Return an IF_Pool object for memory allocations
+ */
+ virtual RCODE XFLMAPI createMemoryPool(
+ IF_Pool ** ppPool) = 0;
+
+ /**
+ * @brief Compares two UTF-8 strings
+ */
+ virtual RCODE XFLMAPI compareUTF8Strings(
+ const FLMBYTE * pucLString,
+ FLMUINT uiLStrBytes,
+ FLMBOOL bLeftWild,
+ const FLMBYTE * pucRString,
+ FLMUINT uiRStrBytes,
+ FLMBOOL bRightWild,
+ FLMUINT uiCompareRules,
+ FLMUINT uiLanguage,
+ FLMINT * piResult) = 0;
+
+ /**
+ * @brief Compares two Unicode strings
+ */
+ virtual RCODE XFLMAPI compareUnicodeStrings(
+ const FLMUNICODE * puzLString,
+ FLMUINT uiLStrBytes,
+ FLMBOOL bLeftWild,
+ const FLMUNICODE * puzRString,
+ FLMUINT uiRStrBytes,
+ FLMBOOL bRightWild,
+ FLMUINT uiCompareRules,
+ FLMUINT uiLanguage,
+ FLMINT * piResult) = 0;
+
+ virtual RCODE XFLMAPI utf8IsSubStr(
+ const FLMBYTE * pszString,
+ const FLMBYTE * pszSubString,
+ FLMUINT uiCompareRules,
+ FLMUINT uiLanguage,
+ FLMBOOL * pbExists) = 0;
+
+ virtual FLMBOOL XFLMAPI uniIsUpper(
+ FLMUNICODE uzChar) = 0;
+
+ virtual FLMBOOL XFLMAPI uniIsLower(
+ FLMUNICODE uzChar) = 0;
+
+ virtual FLMBOOL XFLMAPI uniIsAlpha(
+ FLMUNICODE uzChar) = 0;
+
+ virtual FLMBOOL XFLMAPI uniIsDecimalDigit(
+ FLMUNICODE uzChar) = 0;
+
+ virtual FLMUNICODE XFLMAPI uniToLower(
+ FLMUNICODE uzChar) = 0;
+
+ // When the nextUCS2Char method is called, the UCS-2 version of the character
+ // pointed to by *ppszUTF8 is stored in *puzChar and *ppszUTF8 is updated to
+ // point to the next the next character. If *ppszUTF8 >= pszEndOfUTF8String
+ // or if **ppszUTF8 == 0, *puzChar returns 0, but no error is returned.
+ // Note: Remember to keep a copy of the pointer to the start of the
+ // string, because whatever is passed in as ppszUTF8 will be modified.
+
+ virtual RCODE XFLMAPI nextUCS2Char(
+ const FLMBYTE ** ppszUTF8,
+ const FLMBYTE * pszEndOfUTF8String,
+ FLMUNICODE * puzChar) = 0;
+
+ virtual RCODE XFLMAPI numUCS2Chars(
+ const FLMBYTE * pszUTF8,
+ FLMUINT * puiNumChars) = 0;
+
+ /**
+ * @brief Waits for a specific database to close
+ *
+ * @param pszDbName Name of the control file for the database that we
+ * want to have closed.
+ *
+ * @return RCODE
+ */
+ virtual RCODE XFLMAPI waitToClose(
+ const char * pszDbFileName) = 0;
+
+ /**
+ * @brief Creates an IF_NodeInfo interface object.
+ *
+ * This method creates an IF_NodeInfo interface object.
+ *
+ * @param ifppNodeInfo The IF_NodeInfo object.
+ * @return RCODE
+ */
+ virtual RCODE XFLMAPI createIFNodeInfo(
+ IF_NodeInfo ** ifppNodeInfo) = 0;
+
+ /**
+ * @brief Creates an IF_BTreeInfo interface object.
+ *
+ * This method creates an IF_BTreeInfo interface object.
+ *
+ * @param ifppBTreeInfo The IF_BTreeInfo object.
+ * @return RCODE
+ */
+ virtual RCODE XFLMAPI createIFBTreeInfo(
+ IF_BTreeInfo ** ifppBTreeInfo) = 0;
+
+ /**
+ * @brief A method to attempt to remove everything from cache
+ *
+ * This method will attempt to remove all blocks and nodes from
+ * cache. The pDb parameter is optional. If provided (and an update
+ * transaction is active), any dirty cache items associated with the
+ * database will be flushed.
+ *
+ * @return RCODE
+ */
+ virtual RCODE XFLMAPI clearCache(
+ IF_Db * pDb) = 0;
+ };
+
+ typedef enum
+ {
+ XFLM_EXPORT_NO_FORMAT = 0x00, // No Formatting
+ XFLM_EXPORT_NEW_LINE = 0x01, // New Line For Each Element
+ XFLM_EXPORT_INDENT = 0x02, // Indent Elements
+ XFLM_EXPORT_INDENT_DATA = 0x03 // Indent Data - this changes the data
+ } eExportFormatType;
+
+ /* --------------------------------------------------------------------
+ * An alternative way to get a DbSystem object when not
+ * using COM.
+ * -------------------------------------------------------------------- */
+
+ XFLMEXTC RCODE FlmAllocDbSystem(
+ IF_DbSystem ** ppDbSystem);
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_Db : public XF_RefCount
+ {
+ virtual RCODE XFLMAPI transBegin(
+ eDbTransType eTransType,
+ FLMUINT uiMaxLockWait = XFLM_NO_TIMEOUT,
+ FLMUINT uiFlags = 0,
+ XFLM_DB_HDR * pDbHeader = NULL) = 0;
+
+ virtual RCODE XFLMAPI transBegin(
+ IF_Db * pDb) = 0;
+
+ virtual RCODE XFLMAPI transCommit(
+ FLMBOOL * pbEmpty = NULL) = 0;
+
+ virtual RCODE XFLMAPI transAbort( void) = 0;
+
+ virtual eDbTransType XFLMAPI getTransType( void) = 0;
+
+ virtual RCODE XFLMAPI doCheckpoint(
+ FLMUINT uiTimeout) = 0;
+
+ virtual RCODE XFLMAPI dbLock(
+ eDbLockType eLockType,
+ FLMINT iPriority,
+ FLMUINT uiTimeout) = 0;
+
+ virtual RCODE XFLMAPI dbUnlock( void) = 0;
+
+ virtual RCODE XFLMAPI getLockType(
+ eDbLockType * peLockType,
+ FLMBOOL * pbImplicit) = 0;
+
+ virtual RCODE XFLMAPI getLockInfo(
+ FLMINT iPriority,
+ eDbLockType * peCurrLockType,
+ FLMUINT * puiThreadId,
+ FLMUINT * puiNumExclQueued,
+ FLMUINT * puiNumSharedQueued,
+ FLMUINT * puiPriorityCount) = 0;
+
+ virtual RCODE XFLMAPI indexStatus(
+ FLMUINT uiIndexNum,
+ XFLM_INDEX_STATUS * pIndexStatus) = 0;
+
+ virtual RCODE XFLMAPI indexGetNext(
+ FLMUINT * puiIndexNum) = 0;
+
+ virtual RCODE XFLMAPI indexSuspend(
+ FLMUINT uiIndexNum) = 0;
+
+ virtual RCODE XFLMAPI indexResume(
+ FLMUINT uiIndexNum) = 0;
+
+ virtual RCODE XFLMAPI keyRetrieve(
+ FLMUINT uiIndex,
+ IF_DataVector * pSearchKey,
+ FLMUINT uiFlags,
+ IF_DataVector * pFoundKey) = 0;
+
+ virtual RCODE XFLMAPI enableEncryption( void) = 0;
+
+ virtual RCODE XFLMAPI wrapKey(
+ const char * pszPassword = NULL) = 0;
+
+ virtual RCODE XFLMAPI rollOverDbKey( void) = 0;
+
+ virtual RCODE XFLMAPI changeItemState(
+ FLMUINT uiDictType,
+ FLMUINT uiDictNum,
+ const char * pszState) = 0;
+
+ virtual RCODE XFLMAPI reduceSize(
+ FLMUINT uiCount,
+ FLMUINT * puiCount) = 0;
+
+ virtual RCODE XFLMAPI upgrade(
+ IF_UpgradeClient * pUpgradeClient) = 0;
+
+ virtual RCODE XFLMAPI createRootElement(
+ FLMUINT uiCollection,
+ FLMUINT uiNameId,
+ IF_DOMNode ** ppElementNode,
+ FLMUINT64 * pui64NodeId = NULL) = 0;
+
+ virtual RCODE XFLMAPI createDocument(
+ FLMUINT uiCollection,
+ IF_DOMNode ** ppDocumentNode,
+ FLMUINT64 * pui64NodeId = NULL) = 0;
+
+ virtual RCODE XFLMAPI getFirstDocument(
+ FLMUINT uiCollection,
+ IF_DOMNode ** ppDocumentNode) = 0;
+
+ virtual RCODE XFLMAPI getLastDocument(
+ FLMUINT uiCollection,
+ IF_DOMNode ** ppDocumentNode) = 0;
+
+ virtual RCODE XFLMAPI getDocument(
+ FLMUINT uiCollection,
+ FLMUINT uiFlags,
+ FLMUINT64 ui64DocumentId,
+ IF_DOMNode ** ppDocumentNode) = 0;
+
+ virtual RCODE XFLMAPI documentDone(
+ FLMUINT uiCollection,
+ FLMUINT64 ui64RootId) = 0;
+
+ virtual RCODE XFLMAPI documentDone(
+ IF_DOMNode * pDocNode) = 0;
+
+ virtual RCODE XFLMAPI createElementDef(
+ const char * pszNamespaceURI,
+ const char * pszElementName,
+ FLMUINT uiDataType,
+ FLMUINT * puiElementNameId = NULL,
+ IF_DOMNode ** ppDocumentNode = NULL) = 0;
+
+ virtual RCODE XFLMAPI createElementDef(
+ const FLMUNICODE * puzNamespaceURI,
+ const FLMUNICODE * puzElementName,
+ FLMUINT uiDataType,
+ FLMUINT * puiElementNameId = NULL,
+ IF_DOMNode ** ppDocumentNode = NULL) = 0;
+
+ virtual RCODE XFLMAPI createUniqueElmDef(
+ const char * pszNamespaceURI,
+ const char * pszElementName,
+ FLMUINT * puiElementNameId = NULL,
+ IF_DOMNode ** ppDocumentNode = NULL) = 0;
+
+ virtual RCODE XFLMAPI createUniqueElmDef(
+ const FLMUNICODE * puzNamespaceURI,
+ const FLMUNICODE * puzElementName,
+ FLMUINT * puiElementNameId = NULL,
+ IF_DOMNode ** ppDocumentNode = NULL) = 0;
+
+ virtual RCODE XFLMAPI getElementNameId(
+ const char * pszNamespaceURI,
+ const char * pszElementName,
+ FLMUINT * puiElementNameId) = 0;
+
+ virtual RCODE XFLMAPI getElementNameId(
+ const FLMUNICODE * puzNamespaceURI,
+ const FLMUNICODE * puzElementName,
+ FLMUINT * puiElementNameId) = 0;
+
+ virtual RCODE XFLMAPI createAttributeDef(
+ const char * pszNamespaceURI,
+ const char * pszAttributeName,
+ FLMUINT uiDataType,
+ FLMUINT * puiAttributeNameId,
+ IF_DOMNode ** ppDocumentNode = NULL) = 0;
+
+ virtual RCODE XFLMAPI createAttributeDef(
+ const FLMUNICODE * puzNamespaceURI,
+ const FLMUNICODE * puzAttributeName,
+ FLMUINT uiDataType,
+ FLMUINT * puiAttributeNameId,
+ IF_DOMNode ** ppDocumentNode = NULL) = 0;
+
+ virtual RCODE XFLMAPI getAttributeNameId(
+ const char * pszNamespaceURI,
+ const char * pszAttributeName,
+ FLMUINT * puiAttributeNameId) = 0;
+
+ virtual RCODE XFLMAPI getAttributeNameId(
+ const FLMUNICODE * puzNamespaceURI,
+ const FLMUNICODE * puzAttributeName,
+ FLMUINT * puiAttributeNameId) = 0;
+
+ virtual RCODE XFLMAPI createPrefixDef(
+ const char * pszPrefixName,
+ FLMUINT * puiPrefixNumber) = 0;
+
+ virtual RCODE XFLMAPI createPrefixDef(
+ const FLMUNICODE * puzPrefixName,
+ FLMUINT * puiPrefixNumber) = 0;
+
+ virtual RCODE XFLMAPI getPrefixId(
+ const char * pszPrefixName,
+ FLMUINT * puiPrefixNumber) = 0;
+
+ virtual RCODE XFLMAPI getPrefixId(
+ const FLMUNICODE * puzPrefixName,
+ FLMUINT * puiPrefixNumber) = 0;
+
+ virtual RCODE XFLMAPI createEncDef(
+ const char * pszEncType,
+ const char * pszEncName,
+ FLMUINT uiKeySize,
+ FLMUINT * puiEncDefNumber) = 0;
+
+ virtual RCODE XFLMAPI createEncDef(
+ const FLMUNICODE * puzEncType,
+ const FLMUNICODE * puzEncName,
+ FLMUINT uiKeySize,
+ FLMUINT * puiEncDefNumber) = 0;
+
+ virtual RCODE XFLMAPI getEncDefId(
+ const char * pszEncDefName,
+ FLMUINT * puiPrefixNumber) = 0;
+
+ virtual RCODE XFLMAPI getEncDefId(
+ const FLMUNICODE * puzEncDefName,
+ FLMUINT * puiEncDefNumber) = 0;
+
+ virtual RCODE XFLMAPI createCollectionDef(
+ const char * pszCollectionName,
+ FLMUINT * puiCollectionNumber,
+ FLMUINT uiEncNumber = 0) = 0;
+
+ virtual RCODE XFLMAPI createCollectionDef(
+ const FLMUNICODE * puzCollectionName,
+ FLMUINT * puiCollectionNumber,
+ FLMUINT uiEncNumber = 0) = 0;
+
+ virtual RCODE XFLMAPI getCollectionNumber(
+ const char * pszCollectionName,
+ FLMUINT * puiCollectionNumber) = 0;
+
+ virtual RCODE XFLMAPI getCollectionNumber(
+ const FLMUNICODE * puzCollectionName,
+ FLMUINT * puiCollectionNumber) = 0;
+
+ virtual RCODE XFLMAPI getIndexNumber(
+ const char * pszIndexName,
+ FLMUINT * puiIndexNumber) = 0;
+
+ virtual RCODE XFLMAPI getIndexNumber(
+ const FLMUNICODE * puzIndexName,
+ FLMUINT * puiIndexNumber) = 0;
+
+ virtual RCODE XFLMAPI getDictionaryDef(
+ FLMUINT uiDictType,
+ FLMUINT uiDictNumber,
+ IF_DOMNode ** ppDocumentNode) = 0;
+
+ virtual RCODE XFLMAPI getDictionaryName(
+ FLMUINT uiDictType,
+ FLMUINT uiDictNumber,
+ char * pszName,
+ FLMUINT * puiNameBufSize,
+ char * pszNamespace = NULL,
+ FLMUINT * puiNamespaceBufSize = NULL) = 0;
+
+ virtual RCODE XFLMAPI getDictionaryName(
+ FLMUINT uiDictType,
+ FLMUINT uiDictNumber,
+ FLMUNICODE * puzName,
+ FLMUINT * puiNameBufSize,
+ FLMUNICODE * puzNamespace = NULL,
+ FLMUINT * puiNamespaceBufSize = NULL) = 0;
+
+ virtual RCODE XFLMAPI getNode(
+ FLMUINT uiCollection,
+ FLMUINT64 ui64NodeId,
+ IF_DOMNode ** ppNode) = 0;
+
+ virtual RCODE XFLMAPI getAttribute(
+ FLMUINT uiCollection,
+ FLMUINT64 ui64ElementNodeId,
+ FLMUINT uiAttrNameId,
+ IF_DOMNode ** ppNode) = 0;
+
+ virtual RCODE XFLMAPI getDataType(
+ FLMUINT uiDictType,
+ FLMUINT uiNameId,
+ FLMUINT * puiDataType) = 0;
+
+ virtual RCODE XFLMAPI backupBegin(
+ eDbBackupType eBackupType,
+ eDbTransType eTransType,
+ FLMUINT uiMaxLockWait,
+ IF_Backup ** ppBackup) = 0;
+
+ virtual void XFLMAPI getRflFileName(
+ FLMUINT uiFileNum,
+ FLMBOOL bBaseOnly,
+ char * pszFileName,
+ FLMUINT * puiFileNameBufSize,
+ FLMBOOL * pbNameTruncated = NULL) = 0;
+
+ virtual RCODE XFLMAPI import(
+ IF_IStream * pIStream,
+ FLMUINT uiCollection,
+ IF_DOMNode * pNodeToLinkTo = NULL,
+ eNodeInsertLoc eInsertLoc = XFLM_LAST_CHILD,
+ XFLM_IMPORT_STATS * pImportStats = NULL) = 0;
+
+ virtual RCODE XFLMAPI importDocument(
+ IF_IStream * ifpStream,
+ FLMUINT uiCollection,
+ IF_DOMNode ** ppDocumentNode = NULL,
+ XFLM_IMPORT_STATS * pImportStats = NULL) = 0;
+
+ virtual RCODE XFLMAPI exportXML(
+ IF_DOMNode * pStartNode,
+ IF_OStream * pOStream,
+ eExportFormatType eFormat = XFLM_EXPORT_INDENT) = 0;
+
+ virtual RCODE XFLMAPI setNextNodeId(
+ FLMUINT uiCollection,
+ FLMUINT64 ui64NextNodeId) = 0;
+
+ virtual RCODE XFLMAPI setNextDictNum(
+ FLMUINT uiDictType,
+ FLMUINT uiDictNumber) = 0;
+
+ // Configuration "set" and "get" methods
+
+ virtual RCODE XFLMAPI setRflKeepFilesFlag(
+ FLMBOOL bKeep) = 0;
+
+ virtual RCODE XFLMAPI getRflKeepFlag(
+ FLMBOOL * pbKeep) = 0;
+
+ virtual RCODE XFLMAPI setRflDir(
+ const char * pszNewRflDir) = 0;
+
+ virtual void XFLMAPI getRflDir(
+ char * pszRflDir) = 0;
+
+ virtual RCODE XFLMAPI getRflFileNum(
+ FLMUINT * puiRflFileNum) = 0;
+
+ virtual RCODE XFLMAPI getHighestNotUsedRflFileNum(
+ FLMUINT * puiHighestNotUsedRflFileNum) = 0;
+
+ virtual RCODE XFLMAPI setRflFileSizeLimits(
+ FLMUINT uiMinRflSize,
+ FLMUINT uiMaxRflSize) = 0;
+
+ virtual RCODE XFLMAPI getRflFileSizeLimits(
+ FLMUINT * puiRflMinFileSize,
+ FLMUINT * puiRflMaxFileSize) = 0;
+
+ virtual RCODE XFLMAPI rflRollToNextFile( void) = 0;
+
+ virtual RCODE XFLMAPI setKeepAbortedTransInRflFlag(
+ FLMBOOL bKeep) = 0;
+
+ virtual RCODE XFLMAPI getKeepAbortedTransInRflFlag(
+ FLMBOOL * pbKeep) = 0;
+
+ virtual RCODE XFLMAPI setAutoTurnOffKeepRflFlag(
+ FLMBOOL bAutoTurnOff) = 0;
+
+ virtual RCODE XFLMAPI getAutoTurnOffKeepRflFlag(
+ FLMBOOL * pbAutoTurnOff) = 0;
+
+ virtual void XFLMAPI setFileExtendSize(
+ FLMUINT uiFileExtendSize) = 0;
+
+ virtual FLMUINT XFLMAPI getFileExtendSize( void) = 0;
+
+ virtual void XFLMAPI setAppData(
+ void * pvAppData) = 0;
+
+ virtual void * XFLMAPI getAppData( void) = 0;
+
+ virtual void XFLMAPI setDeleteStatusObject(
+ IF_DeleteStatus * pDeleteStatus) = 0;
+
+ virtual void XFLMAPI setCommitClientObject(
+ IF_CommitClient * pCommitClient) = 0;
+
+ virtual void XFLMAPI setIndexingClientObject(
+ IF_IxClient * pIxClient) = 0;
+
+ virtual void XFLMAPI setIndexingStatusObject(
+ IF_IxStatus * pIxStatus) = 0;
+
+ // Configuration information getting methods
+
+ virtual FLMUINT XFLMAPI getDbVersion( void) = 0;
+
+ virtual FLMUINT XFLMAPI getBlockSize( void) = 0;
+
+ virtual FLMUINT XFLMAPI getDefaultLanguage( void) = 0;
+
+ virtual FLMUINT64 XFLMAPI getTransID( void) = 0;
+
+ virtual void XFLMAPI getCheckpointInfo(
+ XFLM_CHECKPOINT_INFO * pCheckpointInfo) = 0;
+
+ virtual RCODE XFLMAPI getDbControlFileName(
+ char * pszControlFileName,
+ FLMUINT uiControlFileBufSize) = 0;
+
+ virtual RCODE XFLMAPI getLockWaiters(
+ IF_LockInfoClient * pLockInfo) = 0;
+
+ virtual RCODE XFLMAPI getLastBackupTransID(
+ FLMUINT64 * pui64LastBackupTransID) = 0;
+
+ virtual RCODE XFLMAPI getBlocksChangedSinceBackup(
+ FLMUINT * puiBlocksChangedSinceBackup) = 0;
+
+ virtual RCODE XFLMAPI getNextIncBackupSequenceNum(
+ FLMUINT * puiNextIncBackupSequenceNum) = 0;
+
+ virtual void XFLMAPI getSerialNumber(
+ char * pucSerialNumber) = 0;
+
+ virtual RCODE XFLMAPI getDiskSpaceUsage(
+ FLMUINT64 * pui64DataSize,
+ FLMUINT64 * pui64RollbackSize,
+ FLMUINT64 * pui64RflSize) = 0;
+
+ virtual RCODE XFLMAPI getMustCloseRC( void) = 0;
+
+ virtual RCODE XFLMAPI getAbortRC( void) = 0;
+
+ virtual void XFLMAPI setMustAbortTrans(
+ RCODE rc) = 0;
+ };
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_DOMNode : public XF_RefCount
+ {
+ virtual RCODE XFLMAPI createNode(
+ IF_Db * pDb,
+ eDomNodeType eNodeType,
+ FLMUINT uiNameId,
+ eNodeInsertLoc eLocation,
+ IF_DOMNode ** ppNewNode,
+ FLMUINT64 * pui64NodeId = NULL) = 0;
+
+ virtual RCODE XFLMAPI createChildElement(
+ IF_Db * pDb,
+ FLMUINT uiChildElementNameId,
+ eNodeInsertLoc eLocation,
+ IF_DOMNode ** ppNewChildElementNode,
+ FLMUINT64 * pui64NodeId = NULL) = 0;
+
+ virtual RCODE XFLMAPI deleteNode(
+ IF_Db * pDb) = 0;
+
+ virtual RCODE XFLMAPI deleteChildren(
+ IF_Db * pDb,
+ FLMUINT uiNameId = 0) = 0;
+
+ virtual RCODE XFLMAPI createAttribute(
+ IF_Db * pDb,
+ FLMUINT uiAttrNameId,
+ IF_DOMNode ** ppAttrNode) = 0;
+
+ virtual RCODE XFLMAPI getFirstAttribute(
+ IF_Db * pDb,
+ IF_DOMNode ** ppAttrNode) = 0;
+
+ virtual RCODE XFLMAPI getLastAttribute(
+ IF_Db * pDb,
+ IF_DOMNode ** ppAttrNode) = 0;
+
+ virtual RCODE XFLMAPI getAttribute(
+ IF_Db * pDb,
+ FLMUINT uiAttrNameId,
+ IF_DOMNode ** ppAttrNode) = 0;
+
+ virtual RCODE XFLMAPI deleteAttribute(
+ IF_Db * pDb,
+ FLMUINT uiAttrNameId) = 0;
+
+ virtual RCODE XFLMAPI hasAttribute(
+ IF_Db * pDb,
+ FLMUINT uiAttrNameId,
+ IF_DOMNode ** ppAttrNode = NULL) = 0;
+
+ virtual RCODE XFLMAPI hasAttributes(
+ IF_Db * pDb,
+ FLMBOOL * pbHasAttrs) = 0;
+
+ virtual RCODE XFLMAPI hasNextSibling(
+ IF_Db * pDb,
+ FLMBOOL * pbHasNextSibling) = 0;
+
+ virtual RCODE XFLMAPI hasPreviousSibling(
+ IF_Db * pDb,
+ FLMBOOL * pbHasPreviousSibling) = 0;
+
+ virtual RCODE XFLMAPI hasChildren(
+ IF_Db * pDb,
+ FLMBOOL * pbHasChildren) = 0;
+
+ virtual RCODE XFLMAPI isNamespaceDecl(
+ IF_Db * pDb,
+ FLMBOOL * pbIsNamespaceDecl) = 0;
+
+ virtual eDomNodeType XFLMAPI getNodeType( void) = 0;
+
+ virtual RCODE XFLMAPI getNodeId(
+ IF_Db * pDb,
+ FLMUINT64 * pui64NodeId) = 0;
+
+ virtual RCODE XFLMAPI getParentId(
+ IF_Db * pDb,
+ FLMUINT64 * pui64ParentId) = 0;
+
+ virtual RCODE XFLMAPI getDocumentId(
+ IF_Db * pDb,
+ FLMUINT64 * pui64DocumentId) = 0;
+
+ virtual RCODE XFLMAPI getPrevSibId(
+ IF_Db * pDb,
+ FLMUINT64 * pui64PrevSibId) = 0;
+
+ virtual RCODE XFLMAPI getNextSibId(
+ IF_Db * pDb,
+ FLMUINT64 * pui64NextSibId) = 0;
+
+ virtual RCODE XFLMAPI getFirstChildId(
+ IF_Db * pDb,
+ FLMUINT64 * pui64FirstChildId) = 0;
+
+ virtual RCODE XFLMAPI getLastChildId(
+ IF_Db * pDb,
+ FLMUINT64 * pui64LastChildId) = 0;
+
+ virtual RCODE XFLMAPI getNameId(
+ IF_Db * pDb,
+ FLMUINT * puiNameId) = 0;
+
+ virtual RCODE XFLMAPI getEncDefId(
+ IF_Db * pDb,
+ FLMUINT * puiEncDefId) = 0;
+
+ virtual RCODE XFLMAPI getDataType(
+ IF_Db * pDb,
+ FLMUINT * puiDataType) = 0;
+
+ virtual RCODE XFLMAPI getDataLength(
+ IF_Db * pDb,
+ FLMUINT * puiLength) = 0;
+
+ virtual RCODE XFLMAPI getUINT32(
+ IF_Db * pDb,
+ FLMUINT32 * pui32Value) = 0;
+
+ virtual RCODE XFLMAPI getUINT(
+ IF_Db * pDb,
+ FLMUINT * puiValue) = 0;
+
+ virtual RCODE XFLMAPI getUINT64(
+ IF_Db * pDb,
+ FLMUINT64 * pui64Value) = 0;
+
+ virtual RCODE XFLMAPI getINT32(
+ IF_Db * pDb,
+ FLMINT32 * pi32Value) = 0;
+
+ virtual RCODE XFLMAPI getINT(
+ IF_Db * pDb,
+ FLMINT * piValue) = 0;
+
+ virtual RCODE XFLMAPI getINT64(
+ IF_Db * pDb,
+ FLMINT64 * pi64Value) = 0;
+
+ virtual RCODE XFLMAPI getMetaValue(
+ IF_Db * pDb,
+ FLMUINT64 * pui64Value) = 0;
+
+ virtual RCODE XFLMAPI getUnicodeChars(
+ IF_Db * pDb,
+ FLMUINT * puiNumChars) = 0;
+
+ virtual RCODE XFLMAPI getUnicode(
+ IF_Db * pDb,
+ FLMUNICODE * puzValueBuffer,
+ FLMUINT uiBufferSize,
+ FLMUINT uiCharOffset,
+ FLMUINT uiMaxCharsRequested,
+ FLMUINT * puiCharsReturned = NULL,
+ FLMUINT * puiBufferBytesUsed = NULL) = 0;
+
+ virtual RCODE XFLMAPI getUnicode(
+ IF_Db * pDb,
+ FLMUNICODE ** ppuzUnicodeValue) = 0;
+
+ virtual RCODE XFLMAPI getUnicode(
+ IF_Db * pDb,
+ IF_DynaBuf * pDynaBuf) = 0;
+
+ virtual RCODE XFLMAPI getUTF8(
+ IF_Db * pDb,
+ FLMBYTE * pucValueBuffer,
+ FLMUINT uiBufferSize,
+ FLMUINT uiCharOffset,
+ FLMUINT uiMaxCharsRequested,
+ FLMUINT * puiCharsReturned = NULL,
+ FLMUINT * puiBufferBytesUsed = NULL) = 0;
+
+ virtual RCODE XFLMAPI getUTF8(
+ IF_Db * pDb,
+ FLMBYTE ** ppszUTF8Value) = 0;
+
+ virtual RCODE XFLMAPI getUTF8(
+ IF_Db * pDb,
+ IF_DynaBuf * pDynaBuf) = 0;
+
+ virtual RCODE XFLMAPI getBinary(
+ IF_Db * pDb,
+ void * pvValue,
+ FLMUINT uiByteOffset,
+ FLMUINT uiBytesRequested,
+ FLMUINT * puiBytesReturned) = 0;
+
+ virtual RCODE XFLMAPI getBinary(
+ IF_Db * pDb,
+ IF_DynaBuf * pBuffer) = 0;
+
+ virtual RCODE XFLMAPI getAttributeValueUINT32(
+ IF_Db * pDb,
+ FLMUINT uiAttrNameId,
+ FLMUINT32 * pui32Num) = 0;
+
+ virtual RCODE XFLMAPI getAttributeValueUINT32(
+ IF_Db * pDb,
+ FLMUINT uiAttrNameId,
+ FLMUINT32 * pui32Num,
+ FLMUINT32 ui32NotFoundDefault) = 0;
+
+ virtual RCODE XFLMAPI getAttributeValueUINT(
+ IF_Db * pDb,
+ FLMUINT uiAttrNameId,
+ FLMUINT * puiNum) = 0;
+
+ virtual RCODE XFLMAPI getAttributeValueUINT(
+ IF_Db * pDb,
+ FLMUINT uiAttrNameId,
+ FLMUINT * puiNum,
+ FLMUINT uiNotFoundDefault) = 0;
+
+ virtual RCODE XFLMAPI getAttributeValueUINT64(
+ IF_Db * pDb,
+ FLMUINT uiAttrNameId,
+ FLMUINT64 * pui64Num) = 0;
+
+ virtual RCODE XFLMAPI getAttributeValueUINT64(
+ IF_Db * pDb,
+ FLMUINT uiAttrNameId,
+ FLMUINT64 * pui64Num,
+ FLMUINT64 ui64NotFoundDefault) = 0;
+
+ virtual RCODE XFLMAPI getAttributeValueINT(
+ IF_Db * pDb,
+ FLMUINT uiAttrNameId,
+ FLMINT * piNum) = 0;
+
+ virtual RCODE XFLMAPI getAttributeValueINT(
+ IF_Db * pDb,
+ FLMUINT uiAttrNameId,
+ FLMINT * piNum,
+ FLMINT iNotFoundDefault) = 0;
+
+ virtual RCODE XFLMAPI getAttributeValueINT64(
+ IF_Db * pDb,
+ FLMUINT uiAttrNameId,
+ FLMINT64 * pi64Num) = 0;
+
+ virtual RCODE XFLMAPI getAttributeValueINT64(
+ IF_Db * pDb,
+ FLMUINT uiAttrNameId,
+ FLMINT64 * pi64Num,
+ FLMINT64 i64NotFoundDefault) = 0;
+
+ virtual RCODE XFLMAPI getAttributeValueUnicode(
+ IF_Db * pDb,
+ FLMUINT uiAttrNameId,
+ FLMUNICODE * puzValueBuffer,
+ FLMUINT uiBufferSize,
+ FLMUINT * puiCharsReturned = NULL,
+ FLMUINT * puiBufferBytesUsed = NULL) = 0;
+
+ virtual RCODE XFLMAPI getAttributeValueUnicode(
+ IF_Db * pDb,
+ FLMUINT uiAttrNameId,
+ FLMUNICODE ** ppuzValueBuffer) = 0;
+
+ virtual RCODE XFLMAPI getAttributeValueUnicode(
+ IF_Db * pDb,
+ FLMUINT uiAttrNameId,
+ IF_DynaBuf * pDynaBuf) = 0;
+
+ virtual RCODE XFLMAPI getAttributeValueUTF8(
+ IF_Db * pDb,
+ FLMUINT uiAttrNameId,
+ FLMBYTE * pucValueBuffer,
+ FLMUINT uiBufferSize,
+ FLMUINT * puiCharsReturned = NULL,
+ FLMUINT * puiBufferBytesUsed = NULL) = 0;
+
+ virtual RCODE XFLMAPI getAttributeValueUTF8(
+ IF_Db * pDb,
+ FLMUINT uiAttrNameId,
+ FLMBYTE ** ppszValueBuffer) = 0;
+
+ virtual RCODE XFLMAPI getAttributeValueUTF8(
+ IF_Db * pDb,
+ FLMUINT uiAttrNameId,
+ IF_DynaBuf * pDynaBuf) = 0;
+
+ virtual RCODE XFLMAPI getAttributeValueBinary(
+ IF_Db * pDb,
+ FLMUINT uiAttrNameId,
+ void * pvValueBuffer,
+ FLMUINT uiBufferSize,
+ FLMUINT * puiValueLength) = 0;
+
+ virtual RCODE XFLMAPI getAttributeValueBinary(
+ IF_Db * pDb,
+ FLMUINT uiAttrNameId,
+ IF_DynaBuf * pDynaBuf) = 0;
+
+ virtual RCODE XFLMAPI setUINT(
+ IF_Db * pDb,
+ FLMUINT uiValue,
+ FLMUINT uiEncDefId = 0) = 0;
+
+ virtual RCODE XFLMAPI setUINT64(
+ IF_Db * pDb,
+ FLMUINT64 ui64Value,
+ FLMUINT uiEncDefId = 0) = 0;
+
+ virtual RCODE XFLMAPI setINT(
+ IF_Db * pDb,
+ FLMINT iValue,
+ FLMUINT uiEncDefId = 0) = 0;
+
+ virtual RCODE XFLMAPI setINT64(
+ IF_Db * pDb,
+ FLMINT64 i64Value,
+ FLMUINT uiEncDefId = 0) = 0;
+
+ virtual RCODE XFLMAPI setMetaValue(
+ IF_Db * pDb,
+ FLMUINT64 ui64Value) = 0;
+
+ virtual RCODE XFLMAPI setUnicode(
+ IF_Db * pDb,
+ const FLMUNICODE * puzValue,
+ FLMUINT uiValueLength = 0,
+ FLMBOOL bLast = TRUE,
+ FLMUINT uiEncDefId = 0) = 0;
+
+ virtual RCODE XFLMAPI setUTF8(
+ IF_Db * pDb,
+ const FLMBYTE * pszValue,
+ FLMUINT uiValueLength = 0,
+ FLMBOOL bLast = TRUE,
+ FLMUINT uiEncDefId = 0) = 0;
+
+ virtual RCODE XFLMAPI setBinary(
+ IF_Db * pDb,
+ const void * pvValue,
+ FLMUINT uiValueLength,
+ FLMBOOL bLast = TRUE,
+ FLMUINT uiEncDefId = 0) = 0;
+
+ virtual RCODE XFLMAPI setAttributeValueUINT(
+ IF_Db * pDb,
+ FLMUINT uiAttrNameId,
+ FLMUINT uiValue,
+ FLMUINT uiEncDefId = 0) = 0;
+
+ virtual RCODE XFLMAPI setAttributeValueUINT64(
+ IF_Db * pDb,
+ FLMUINT uiAttrNameId,
+ FLMUINT64 ui64Value,
+ FLMUINT uiEncDefId = 0) = 0;
+
+ virtual RCODE XFLMAPI setAttributeValueINT(
+ IF_Db * pDb,
+ FLMUINT uiAttrNameId,
+ FLMINT iValue,
+ FLMUINT uiEncDefId = 0) = 0;
+
+ virtual RCODE XFLMAPI setAttributeValueINT64(
+ IF_Db * pDb,
+ FLMUINT uiAttrNameId,
+ FLMINT64 i64Value,
+ FLMUINT uiEncDefId = 0) = 0;
+
+ virtual RCODE XFLMAPI setAttributeValueUnicode(
+ IF_Db * pDb,
+ FLMUINT uiAttrNameId,
+ const FLMUNICODE * puzValue,
+ FLMUINT uiEncDefId = 0) = 0;
+
+ virtual RCODE XFLMAPI setAttributeValueUTF8(
+ IF_Db * pDb,
+ FLMUINT uiAttrNameId,
+ const FLMBYTE * pucValue,
+ FLMUINT uiLength = 0,
+ FLMUINT uiEncDefId = 0) = 0;
+
+ virtual RCODE XFLMAPI setAttributeValueBinary(
+ IF_Db * pDb,
+ FLMUINT uiAttrNameId,
+ const void * pvValue,
+ FLMUINT uiLength,
+ FLMUINT uiEncDefId = 0) = 0;
+
+ virtual RCODE XFLMAPI getDocumentNode(
+ IF_Db * pDb,
+ IF_DOMNode ** ppDocument) = 0;
+
+ virtual RCODE XFLMAPI getNextDocument(
+ IF_Db * pDb,
+ IF_DOMNode ** ppNextDocument) = 0;
+
+ virtual RCODE XFLMAPI getPreviousDocument(
+ IF_Db * pDb,
+ IF_DOMNode ** ppPrevDocument) = 0;
+
+ virtual RCODE XFLMAPI getParentNode(
+ IF_Db * pDb,
+ IF_DOMNode ** ppParent) = 0;
+
+ virtual RCODE XFLMAPI getFirstChild(
+ IF_Db * pDb,
+ IF_DOMNode ** ppFirstChild) = 0;
+
+ virtual RCODE XFLMAPI getLastChild(
+ IF_Db * pDb,
+ IF_DOMNode ** ppLastChild) = 0;
+
+ virtual RCODE XFLMAPI getNextSibling(
+ IF_Db * pDb,
+ IF_DOMNode ** ppNextSibling) = 0;
+
+ virtual RCODE XFLMAPI getPreviousSibling(
+ IF_Db * pDb,
+ IF_DOMNode ** ppPrevSibling) = 0;
+
+ virtual RCODE XFLMAPI getChild(
+ IF_Db * pDb,
+ eDomNodeType eNodeType,
+ IF_DOMNode ** ppChild) = 0;
+
+ virtual RCODE XFLMAPI getChildElement(
+ IF_Db * pDb,
+ FLMUINT uiElementNameId,
+ IF_DOMNode ** ppChild,
+ FLMUINT uiFlags = 0) = 0;
+
+ virtual RCODE XFLMAPI getSiblingElement(
+ IF_Db * pDb,
+ FLMUINT uiElementNameId,
+ FLMBOOL bNext,
+ IF_DOMNode ** ppSibling) = 0;
+
+ virtual RCODE XFLMAPI getAncestorElement(
+ IF_Db * pDb,
+ FLMUINT uiElementNameId,
+ IF_DOMNode ** ppAncestor) = 0;
+
+ virtual RCODE XFLMAPI getDescendantElement(
+ IF_Db * pDb,
+ FLMUINT uiElementNameId,
+ IF_DOMNode ** ppDescendant) = 0;
+
+ virtual RCODE XFLMAPI insertBefore(
+ IF_Db * pDb,
+ IF_DOMNode * pNewChild,
+ IF_DOMNode * pRefChild) = 0;
+
+ virtual RCODE XFLMAPI getPrefix(
+ IF_Db * pDb,
+ FLMUNICODE * puzPrefixBuffer,
+ FLMUINT uiBufferSize,
+ FLMUINT * puiCharsReturned = NULL) = 0;
+
+ virtual RCODE XFLMAPI getPrefix(
+ IF_Db * pDb,
+ char * pszPrefixBuffer,
+ FLMUINT uiBufferSize,
+ FLMUINT * puiCharsReturned = NULL) = 0;
+
+ virtual RCODE XFLMAPI getPrefixId(
+ IF_Db * pDb,
+ FLMUINT * puiPrefixId) = 0;
+
+ virtual RCODE XFLMAPI setPrefix(
+ IF_Db * pDb,
+ const FLMUNICODE * puzPrefix) = 0;
+
+ virtual RCODE XFLMAPI setPrefix(
+ IF_Db * pDb,
+ const char * pszPrefix) = 0;
+
+ virtual RCODE XFLMAPI setPrefixId(
+ IF_Db * pDb,
+ FLMUINT uiPrefixId) = 0;
+
+ virtual RCODE XFLMAPI getNamespaceURI(
+ IF_Db * pDb,
+ FLMUNICODE * puzNamespaceURIBuffer,
+ FLMUINT uiBufferSize,
+ FLMUINT * puiCharsReturned = NULL) = 0;
+
+ virtual RCODE XFLMAPI getNamespaceURI(
+ IF_Db * pDb,
+ char * pszNamespaceURIBuffer,
+ FLMUINT uiBufferSize,
+ FLMUINT * puiCharsReturned = NULL) = 0;
+
+ virtual RCODE XFLMAPI getLocalName(
+ IF_Db * pDb,
+ FLMUNICODE * puzLocalNameBuffer,
+ FLMUINT uiBufferSize,
+ FLMUINT * puiCharsReturned = NULL) = 0;
+
+ virtual RCODE XFLMAPI getLocalName(
+ IF_Db * pDb,
+ char * pszLocalNameBuffer,
+ FLMUINT uiBufferSize,
+ FLMUINT * puiCharsReturned = NULL) = 0;
+
+ virtual RCODE XFLMAPI getQualifiedName(
+ IF_Db * pDb,
+ FLMUNICODE * puzQualifiedNameBuffer,
+ FLMUINT uiBufferSize,
+ FLMUINT * puiCharsReturned = NULL) = 0;
+
+ virtual RCODE XFLMAPI getQualifiedName(
+ IF_Db * pDb,
+ char * pszQualifiedNameBuffer,
+ FLMUINT uiBufferSize,
+ FLMUINT * puiCharsReturned = NULL) = 0;
+
+ virtual RCODE XFLMAPI getCollection(
+ IF_Db * pDb,
+ FLMUINT * puiCollection) = 0;
+
+ virtual RCODE XFLMAPI createAnnotation(
+ IF_Db * pDb,
+ IF_DOMNode ** ppAnnotation,
+ FLMUINT64 * pui64NodeId = NULL) = 0;
+
+ virtual RCODE XFLMAPI getAnnotation(
+ IF_Db * pDb,
+ IF_DOMNode ** ppAnnotation) = 0;
+
+ virtual RCODE XFLMAPI getAnnotationId(
+ IF_Db * pDb,
+ FLMUINT64 * pui64AnnotationId) = 0;
+
+ virtual RCODE XFLMAPI hasAnnotation(
+ IF_Db * pDb,
+ FLMBOOL * pbHasAnnotation) = 0;
+
+ virtual RCODE XFLMAPI getIStream(
+ IF_Db * pDb,
+ IF_PosIStream ** ppIStream,
+ FLMUINT * puiDataType = NULL,
+ FLMUINT * puiDataLength = NULL) = 0;
+
+ virtual RCODE XFLMAPI getTextIStream(
+ IF_Db * pDb,
+ IF_PosIStream ** ppIStream,
+ FLMUINT * puiNumChars = NULL) = 0;
+
+ virtual FLMUINT XFLMAPI compareNode(
+ IF_DOMNode * pNode,
+ IF_Db * pDb1,
+ IF_Db * pDb2,
+ char * pszErrBuff,
+ FLMUINT uiErrBuffLen) = 0;
+
+ virtual RCODE XFLMAPI isDataLocalToNode(
+ IF_Db * pDb,
+ FLMBOOL * pbDataIsLocal) = 0;
+ };
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_DataVector : public XF_RefCount
+ {
+ virtual void XFLMAPI setDocumentID(
+ FLMUINT64 ui64DocumentID) = 0;
+
+ virtual RCODE XFLMAPI setID(
+ FLMUINT uiElementNumber,
+ FLMUINT64 ui64ID) = 0;
+
+ virtual RCODE XFLMAPI setNameId(
+ FLMUINT uiElementNumber,
+ FLMUINT uiNameId,
+ FLMBOOL bIsAttr,
+ FLMBOOL bIsData) = 0;
+
+ virtual RCODE XFLMAPI setINT(
+ FLMUINT uiElementNumber,
+ FLMINT iNum) = 0;
+
+ virtual RCODE XFLMAPI setINT64(
+ FLMUINT uiElementNumber,
+ FLMINT64 i64Num) = 0;
+
+ virtual RCODE XFLMAPI setUINT(
+ FLMUINT uiElementNumber,
+ FLMUINT uiNum) = 0;
+
+ virtual RCODE XFLMAPI setUINT64(
+ FLMUINT uiElementNumber,
+ FLMUINT64 ui64Num) = 0;
+
+ virtual RCODE XFLMAPI setUnicode(
+ FLMUINT uiElementNumber,
+ const FLMUNICODE * puzUnicode) = 0;
+
+ virtual RCODE XFLMAPI setUTF8(
+ FLMUINT uiElementNumber,
+ const FLMBYTE * pszUtf8,
+ FLMUINT uiBytesInBuffer = 0) = 0;
+
+ virtual RCODE XFLMAPI setBinary(
+ FLMUINT uiElementNumber,
+ const void * pvBinary,
+ FLMUINT uiBinaryLen) = 0;
+
+ virtual void XFLMAPI setRightTruncated(
+ FLMUINT uiElementNumber) = 0;
+
+ virtual void XFLMAPI setLeftTruncated(
+ FLMUINT uiElementNumber) = 0;
+
+ virtual void XFLMAPI clearRightTruncated(
+ FLMUINT uiElementNumber) = 0;
+
+ virtual void XFLMAPI clearLeftTruncated(
+ FLMUINT uiElementNumber) = 0;
+
+ virtual FLMBOOL XFLMAPI isRightTruncated(
+ FLMUINT uiElementNumber) = 0;
+
+ virtual FLMBOOL XFLMAPI isLeftTruncated(
+ FLMUINT uiElementNumber) = 0;
+
+ virtual FLMUINT64 XFLMAPI getDocumentID( void) = 0;
+
+ virtual FLMUINT64 XFLMAPI getID(
+ FLMUINT uiElementNumber) = 0;
+
+ virtual FLMUINT XFLMAPI getNameId(
+ FLMUINT uiElementNumber) = 0;
+
+ virtual FLMBOOL XFLMAPI isAttr(
+ FLMUINT uiElementNumber) = 0;
+
+ virtual FLMBOOL XFLMAPI isDataComponent(
+ FLMUINT uiElementNumber) = 0;
+
+ virtual FLMBOOL XFLMAPI isKeyComponent(
+ FLMUINT uiElementNumber) = 0;
+
+ virtual FLMUINT XFLMAPI getDataLength(
+ FLMUINT uiElementNumber) = 0;
+
+ virtual FLMUINT XFLMAPI getDataType(
+ FLMUINT uiElementNumber) = 0;
+
+ virtual RCODE XFLMAPI getUTF8Ptr(
+ FLMUINT uiElementNumber,
+ const FLMBYTE ** ppszUTF8,
+ FLMUINT * puiBufLen) = 0;
+
+ virtual RCODE XFLMAPI getINT(
+ FLMUINT uiElementNumber,
+ FLMINT * piNum) = 0;
+
+ virtual RCODE XFLMAPI getINT64(
+ FLMUINT uiElementNumber,
+ FLMINT64 * pi64Num) = 0;
+
+ virtual RCODE XFLMAPI getUINT(
+ FLMUINT uiElementNumber,
+ FLMUINT * puiNum) = 0;
+
+ virtual RCODE XFLMAPI getUINT64(
+ FLMUINT uiElementNumber,
+ FLMUINT64 * pui64Num) = 0;
+
+ virtual RCODE XFLMAPI getUnicode(
+ FLMUINT uiElementNumber,
+ FLMUNICODE ** ppuzUnicode) = 0;
+
+ virtual RCODE XFLMAPI getUnicode(
+ FLMUINT uiElementNumber,
+ FLMUNICODE * puzUnicode,
+ FLMUINT * puiBufLen) = 0;
+
+ virtual RCODE XFLMAPI getUnicode(
+ FLMUINT uiElementNumber,
+ IF_DynaBuf * pBuffer) = 0;
+
+ virtual RCODE XFLMAPI getUTF8(
+ FLMUINT uiElementNumber,
+ FLMBYTE * pszUTF8,
+ FLMUINT * puiBufLen) = 0;
+
+ virtual RCODE XFLMAPI getBinary(
+ FLMUINT uiElementNumber,
+ void * pvBuffer,
+ FLMUINT * puiBufferLen) = 0;
+
+ virtual RCODE XFLMAPI outputKey(
+ IF_Db * pDb,
+ FLMUINT uiIndexNum,
+ FLMUINT uiMatchFlags,
+ FLMBYTE * pucKeyBuf,
+ FLMUINT uiKeyBufSize,
+ FLMUINT * puiKeyLen) = 0;
+
+ virtual RCODE XFLMAPI outputData(
+ IF_Db * pDb,
+ FLMUINT uiIndexNum,
+ FLMBYTE * pucDataBuf,
+ FLMUINT uiDataBufSize,
+ FLMUINT * puiDataLen) = 0;
+
+ virtual RCODE XFLMAPI inputKey(
+ IF_Db * pDb,
+ FLMUINT uiIndexNum,
+ const FLMBYTE * pucKey,
+ FLMUINT uiKeyLen) = 0;
+
+ virtual RCODE XFLMAPI inputData(
+ IF_Db * pDb,
+ FLMUINT uiIndexNum,
+ const FLMBYTE * pucData,
+ FLMUINT uiDataLen) = 0;
+
+ // Miscellaneous methods
+
+ virtual void XFLMAPI reset( void) = 0;
+
+ virtual const void * XFLMAPI getDataPtr(
+ FLMUINT uiElementNumber) = 0;
+ };
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_Backup : public XF_RefCount
+ {
+ virtual FLMUINT64 XFLMAPI getBackupTransId( void) = 0;
+
+ virtual FLMUINT64 XFLMAPI getLastBackupTransId( void) = 0;
+
+ virtual RCODE XFLMAPI backup(
+ const char * pszBackupPath,
+ const char * pszPassword,
+ IF_BackupClient * ifpClient,
+ IF_BackupStatus * ifpStatus,
+ FLMUINT * puiIncSeqNum) = 0;
+
+ virtual RCODE XFLMAPI endBackup( void) = 0;
+ };
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_ThreadInfo : public XF_RefCount
+ {
+ virtual FLMUINT XFLMAPI getNumThreads( void) = 0;
+
+ virtual void XFLMAPI getThreadInfo(
+ FLMUINT uiThreadNum,
+ FLMUINT * puiThreadId,
+ FLMUINT * puiThreadGroup,
+ FLMUINT * puiAppId,
+ FLMUINT * puiStartTime,
+ const char ** ppszThreadName,
+ const char ** ppszThreadStatus) = 0;
+ };
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_IStream : public XF_RefCount
+ {
+ /**
+ * @brief Reads data from the input stream.
+ *
+ */
+ virtual RCODE XFLMAPI read(
+ void * pvBuffer,
+ FLMUINT uiBytesToRead,
+ FLMUINT * puiBytesRead = NULL) = 0;
+
+ /**
+ * @brief Close the input stream.
+ *
+ */
+ virtual void XFLMAPI close( void) = 0;
+ };
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_PosIStream : public IF_IStream
+ {
+ virtual FLMUINT64 XFLMAPI totalSize( void) = 0;
+
+ virtual FLMUINT64 XFLMAPI remainingSize( void) = 0;
+
+ virtual RCODE XFLMAPI positionTo(
+ FLMUINT64 ui64Position) = 0;
+
+ virtual FLMUINT64 XFLMAPI getCurrPosition( void) = 0;
+ };
+
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_OStream : public XF_RefCount
+ {
+ /**
+ * @brief Writes data to the output stream.
+ *
+ */
+ virtual RCODE XFLMAPI write(
+ const void * pvBuffer,
+ FLMUINT uiBytesToWrite,
+ FLMUINT * puiBytesWritten = NULL) = 0;
+
+ /**
+ * @brief Close the output stream.
+ *
+ */
+ virtual RCODE XFLMAPI close( void) = 0;
+ };
+
+
+ // Note: Any interfaces ending in Client or Status are interfaces
+ // that XFlaim does not provide implementations of. They exist to
+ // allow XFlaim to pass data back to the client. Interfaces ending in
+ // Status are, generally, informational only, while interfaces ending
+ // in Client exist to allow the client to modify the data or take
+ // other action.
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_BackupClient : public XF_RefCount
+ {
+ virtual RCODE XFLMAPI WriteData(
+ const void * pvBuffer,
+ FLMUINT uiBytesToWrite) = 0;
+ };
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_BackupStatus : public XF_RefCount
+ {
+ virtual RCODE XFLMAPI backupStatus(
+ FLMUINT64 ui64BytesToDo,
+ FLMUINT64 ui64BytesDone) = 0;
+ };
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_CommitClient : public XF_RefCount
+ {
+ virtual void XFLMAPI commit(
+ IF_Db * pDb) = 0;
+ };
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_EventClient : public XF_RefCount
+ {
+ virtual void XFLMAPI catchEvent(
+ eEventType eEvent,
+ IF_Db * pDb,
+ FLMUINT uiThreadId,
+ FLMUINT64 ui64TransID,
+ FLMUINT uiIndexOrCollection,
+ FLMUINT64 ui64NodeId,
+ RCODE rc) = 0;
+ };
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_IxClient : public XF_RefCount
+ {
+ virtual RCODE XFLMAPI doIndexing(
+ IF_Db * pDb,
+ FLMUINT uiIndexNum,
+ FLMUINT uiCollectionNum,
+ IF_DOMNode * pDocNode) = 0;
+ };
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_LockInfoClient : public XF_RefCount
+ {
+ virtual FLMBOOL XFLMAPI setLockCount( // Return TRUE to continue, FALSE to stop
+ FLMUINT uiTotalLocks) = 0;
+
+ virtual FLMBOOL XFLMAPI addLockInfo( // Return TRUE to continue, FALSE to stop
+ FLMUINT uiLockNum, // Position in queue (0 = lock holder,
+ // 1 ... n = lock waiter)
+ FLMUINT uiThreadID, // Thread ID of the lock holder/waiter
+ FLMUINT uiTime) = 0; // For the lock holder, this is the
+ // time when the lock was obtained.
+ // For a lock waiter, this is the time
+ // that the waiter was placed in the queue.
+ // Both times are presented in milliseconds.
+ };
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_LoggerClient : public XF_RefCount
+ {
+ virtual IF_LogMessageClient * XFLMAPI beginMessage(
+ eLogMessageType eMsgType) = 0;
+ };
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_LogMessageClient : public XF_RefCount
+ {
+ virtual void XFLMAPI changeColor(
+ eColorType eForeColor,
+ eColorType eBackColor) = 0;
+
+ virtual void XFLMAPI appendString(
+ const char * pszStr) = 0;
+
+ virtual void XFLMAPI newline( void) = 0;
+
+ virtual void XFLMAPI endMessage( void) = 0;
+
+ virtual void XFLMAPI pushForegroundColor( void) = 0;
+
+ virtual void XFLMAPI popForegroundColor( void) = 0;
+
+ virtual void XFLMAPI pushBackgroundColor( void) = 0;
+
+ virtual void XFLMAPI popBackgroundColor( void) = 0;
+ };
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_RestoreStatus : public XF_RefCount
+ {
+ virtual RCODE XFLMAPI reportProgress(
+ eRestoreAction * peAction,
+ FLMUINT64 ui64BytesToDo,
+ FLMUINT64 ui64BytesDone) = 0;
+
+ virtual RCODE XFLMAPI reportError(
+ eRestoreAction * peAction,
+ RCODE rcErr) = 0;
+
+ virtual RCODE XFLMAPI reportOpenRflFile(
+ eRestoreAction * peAction,
+ FLMUINT uiFileNum) = 0;
+
+ virtual RCODE XFLMAPI reportRflRead(
+ eRestoreAction * peAction,
+ FLMUINT uiFileNum,
+ FLMUINT uiBytesRead) = 0;
+
+ virtual RCODE XFLMAPI reportBeginTrans(
+ eRestoreAction * peAction,
+ FLMUINT64 ui64TransId) = 0;
+
+ virtual RCODE XFLMAPI reportCommitTrans(
+ eRestoreAction * peAction,
+ FLMUINT64 ui64TransId) = 0;
+
+ virtual RCODE XFLMAPI reportAbortTrans(
+ eRestoreAction * peAction,
+ FLMUINT64 ui64TransId) = 0;
+
+ virtual RCODE XFLMAPI reportBlockChainFree(
+ eRestoreAction * peAction,
+ FLMUINT64 ui64TransId,
+ FLMUINT64 ui64MaintDocNum,
+ FLMUINT uiStartBlkAddr,
+ FLMUINT uiEndBlkAddr,
+ FLMUINT uiCount) = 0;
+
+ virtual RCODE XFLMAPI reportIndexSuspend(
+ eRestoreAction * peAction,
+ FLMUINT64 ui64TransId,
+ FLMUINT uiIndexNum) = 0;
+
+ virtual RCODE XFLMAPI reportIndexResume(
+ eRestoreAction * peAction,
+ FLMUINT64 ui64TransId,
+ FLMUINT uiIndexNum) = 0;
+
+ virtual RCODE XFLMAPI reportReduce(
+ eRestoreAction * peAction,
+ FLMUINT64 ui64TransId,
+ FLMUINT uiCount) = 0;
+
+ virtual RCODE XFLMAPI reportUpgrade(
+ eRestoreAction * peAction,
+ FLMUINT64 ui64TransId,
+ FLMUINT uiOldDbVersion,
+ FLMUINT uiNewDbVersion) = 0;
+
+ virtual RCODE XFLMAPI reportEnableEncryption(
+ eRestoreAction * peAction,
+ FLMUINT64 ui64TransId) = 0;
+
+ virtual RCODE XFLMAPI reportWrapKey(
+ eRestoreAction * peAction,
+ FLMUINT64 ui64TransId) = 0;
+
+ virtual RCODE XFLMAPI reportRollOverDbKey(
+ eRestoreAction * peAction,
+ FLMUINT64 ui64TransId) = 0;
+
+ virtual RCODE XFLMAPI reportDocumentDone(
+ eRestoreAction * peAction,
+ FLMUINT64 ui64TransId,
+ FLMUINT uiCollection,
+ FLMUINT64 ui64DocumentId) = 0;
+
+ virtual RCODE XFLMAPI reportNodeDelete(
+ eRestoreAction * peAction,
+ FLMUINT64 ui64TransId,
+ FLMUINT uiCollection,
+ FLMUINT64 ui64NodeId) = 0;
+
+ virtual RCODE XFLMAPI reportAttributeDelete(
+ eRestoreAction * peAction,
+ FLMUINT64 ui64TransId,
+ FLMUINT uiCollection,
+ FLMUINT64 ui64ElementId,
+ FLMUINT uiAttrNameId) = 0;
+
+ virtual RCODE XFLMAPI reportNodeChildrenDelete(
+ eRestoreAction * peAction,
+ FLMUINT64 ui64TransId,
+ FLMUINT uiCollection,
+ FLMUINT64 ui64ParentNodeId,
+ FLMUINT uiNameId) = 0;
+
+ virtual RCODE XFLMAPI reportNodeCreate(
+ eRestoreAction * peAction,
+ FLMUINT64 ui64TransId,
+ FLMUINT uiCollection,
+ FLMUINT64 ui64RefNodeId,
+ eDomNodeType eNodeType,
+ FLMUINT uiNameId,
+ eNodeInsertLoc eLocation) = 0;
+
+ virtual RCODE XFLMAPI reportInsertBefore(
+ eRestoreAction * peAction,
+ FLMUINT64 ui64TransId,
+ FLMUINT uiCollection,
+ FLMUINT64 ui64ParentNodeId,
+ FLMUINT64 ui64NewChildNodeId,
+ FLMUINT64 ui64RefChildNodeId) = 0;
+
+ virtual RCODE XFLMAPI reportNodeUpdate(
+ eRestoreAction * peAction,
+ FLMUINT64 ui64TransId,
+ FLMUINT uiCollection,
+ FLMUINT64 ui64NodeId) = 0;
+
+ virtual RCODE XFLMAPI reportNodeSetValue(
+ eRestoreAction * peAction,
+ FLMUINT64 ui64TransId,
+ FLMUINT uiCollection,
+ FLMUINT64 ui64NodeId) = 0;
+
+ virtual RCODE XFLMAPI reportAttributeSetValue(
+ eRestoreAction * peAction,
+ FLMUINT64 ui64TransId,
+ FLMUINT uiCollection,
+ FLMUINT64 ui64ElementNodeId,
+ FLMUINT uiAttrNameId) = 0;
+
+ virtual RCODE XFLMAPI reportNodeFlagsUpdate(
+ eRestoreAction * peAction,
+ FLMUINT64 ui64TransId,
+ FLMUINT uiCollection,
+ FLMUINT64 ui64NodeId,
+ FLMUINT uiFlags,
+ FLMBOOL bAdd) = 0;
+
+ virtual RCODE XFLMAPI reportNodeSetPrefixId(
+ eRestoreAction * peAction,
+ FLMUINT64 ui64TransId,
+ FLMUINT uiCollection,
+ FLMUINT64 ui64NodeId,
+ FLMUINT uiAttrNameId,
+ FLMUINT uiPrefixId) = 0;
+
+ virtual RCODE XFLMAPI reportNodeSetMetaValue(
+ eRestoreAction * peAction,
+ FLMUINT64 ui64TransId,
+ FLMUINT uiCollection,
+ FLMUINT64 ui64NodeId,
+ FLMUINT64 ui64MetaValue) = 0;
+
+ virtual RCODE XFLMAPI reportSetNextNodeId(
+ eRestoreAction * peAction,
+ FLMUINT64 ui64TransId,
+ FLMUINT uiCollection,
+ FLMUINT64 ui64NextNodeId) = 0;
+ };
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_RestoreClient : public XF_RefCount
+ {
+ virtual RCODE XFLMAPI openBackupSet( void) = 0;
+
+ virtual RCODE XFLMAPI openRflFile( // Open an RFL file
+ FLMUINT uiFileNum) = 0;
+
+ virtual RCODE XFLMAPI openIncFile( // Open an incremental backup file
+ FLMUINT uiFileNum) = 0;
+
+ virtual RCODE XFLMAPI read(
+ FLMUINT uiLength, // Number of bytes to read
+ void * pvBuffer, // Buffer to place read bytes into
+ FLMUINT * puiBytesRead) = 0; // [out] Number of bytes read
+
+ virtual RCODE XFLMAPI close( void) = 0; // Close the current file
+
+ virtual RCODE XFLMAPI abortFile( void) = 0; // Abort processing the file
+ // and close file handles, etc.
+ };
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_UpgradeClient : public XF_RefCount
+ {
+ };
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_DeleteStatus : public XF_RefCount
+ {
+ virtual RCODE XFLMAPI reportDelete(
+ FLMUINT uiIndexOrCollectionNum,
+ FLMBOOL bIsIndex,
+ FLMUINT uiBlocksDeleted,
+ FLMUINT uiBlockSize) = 0;
+ };
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_DbCopyStatus : public XF_RefCount
+ {
+ virtual RCODE XFLMAPI dbCopyStatus(
+ FLMUINT64 ui64BytesToCopy,
+ FLMUINT64 ui64BytesCopied,
+ FLMBOOL bNewSrcFile,
+ const char * pszSrcFileName,
+ const char * pszDestFileName) = 0;
+ };
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_DbRebuildStatus : public XF_RefCount
+ {
+ virtual RCODE XFLMAPI reportRebuild(
+ XFLM_REBUILD_INFO * pRebuild) = 0;
+
+ virtual RCODE XFLMAPI reportRebuildErr(
+ XFLM_CORRUPT_INFO * pCorruptInfo) = 0;
+ };
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_DbCheckStatus : public XF_RefCount
+ {
+ virtual RCODE XFLMAPI reportProgress(
+ XFLM_PROGRESS_CHECK_INFO * pProgCheck) = 0;
+
+ virtual RCODE XFLMAPI reportCheckErr(
+ XFLM_CORRUPT_INFO * pCorruptInfo,
+ FLMBOOL * pbFix) = 0;
+ // [OUT] - If the client sets this to true, then XFlaim will
+ // attempt to fix the problem. NOTE: It is allowable for
+ // XFlaim to pass in NULL here!! (This means that the client
+ // doesn't have a choice regarding XFlaim's actions.) The
+ // client must check for NULL before attempting to assing a
+ // value to this parameter!!
+ };
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_DbRenameStatus : public XF_RefCount
+ {
+ virtual RCODE XFLMAPI dbRenameStatus(
+ const char * pszSrcFileName,
+ const char * pszDstFileName) = 0;
+ };
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_IxStatus : public XF_RefCount
+ {
+ virtual RCODE XFLMAPI reportIndex(
+ FLMUINT64 ui64LastDocumentId) = 0;
+ };
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_FileSystem : public XF_RefCount
+ {
+ virtual RCODE XFLMAPI Create(
+ const char * pszFileName,
+ FLMUINT uiIoFlags,
+ IF_FileHdl ** ppFileHdl) = 0;
+
+ virtual RCODE XFLMAPI CreateBlockFile(
+ const char * pszFileName,
+ FLMUINT uiIoFlags,
+ FLMUINT uiBlockSize,
+ IF_FileHdl ** ppFileHdl) = 0;
+
+ virtual RCODE XFLMAPI CreateUnique(
+ const char * pszDirName,
+ const char * pszFileExtension,
+ FLMUINT uiIoFlags,
+ IF_FileHdl ** ppFileHdl) = 0;
+
+ virtual RCODE XFLMAPI Open(
+ const char * pszFileName,
+ FLMUINT uiIoFlags,
+ IF_FileHdl ** ppFileHdl) = 0;
+
+ virtual RCODE XFLMAPI OpenBlockFile(
+ const char * pszFileName,
+ FLMUINT uiIoFlags,
+ FLMUINT uiBlockSize,
+ IF_FileHdl ** ppFileHdl) = 0;
+
+ virtual RCODE XFLMAPI OpenDir(
+ const char * pszDirName,
+ const char * pszPattern,
+ IF_DirHdl ** ppDirHdl) = 0;
+
+ virtual RCODE XFLMAPI CreateDir(
+ const char * pszDirName) = 0;
+
+ virtual RCODE XFLMAPI RemoveDir(
+ const char * pszDirName,
+ FLMBOOL bClear = FALSE) = 0;
+
+ virtual RCODE XFLMAPI Exists(
+ const char * pszFileName) = 0;
+
+ virtual FLMBOOL XFLMAPI IsDir(
+ const char * pszFileName) = 0;
+
+ virtual RCODE XFLMAPI GetTimeStamp(
+ const char * pszFileName,
+ FLMUINT * puiTimeStamp) = 0;
+
+ virtual RCODE XFLMAPI Delete(
+ const char * pszFileName) = 0;
+
+ virtual RCODE XFLMAPI Copy(
+ const char * pszSrcFileName,
+ const char * pszDestFileName,
+ FLMBOOL bOverwrite,
+ FLMUINT64 * pui64BytesCopied) = 0;
+
+ virtual RCODE XFLMAPI Rename(
+ const char * pszFileName,
+ const char * pszNewFileName) = 0;
+
+ virtual RCODE XFLMAPI GetSectorSize(
+ const char * pszFileName,
+ FLMUINT * puiSectorSize) = 0;
+
+ virtual void XFLMAPI pathParse(
+ const char * pszPath,
+ char * pszServer,
+ char * pszVolume,
+ char * pszDirPath,
+ char * pszFileName) = 0;
+
+ virtual RCODE XFLMAPI pathReduce(
+ const char * pszSourcePath,
+ char * pszDestPath,
+ char * pszString) = 0;
+
+ virtual RCODE XFLMAPI pathAppend(
+ char * pszPath,
+ const char * pszPathComponent) = 0;
+
+ virtual RCODE XFLMAPI pathToStorageString(
+ const char * pPath,
+ char * pszString) = 0;
+
+ virtual void XFLMAPI pathCreateUniqueName(
+ FLMUINT * puiTime,
+ char * pFileName,
+ const char * pFileExt,
+ FLMBYTE * pHighChars,
+ FLMBOOL bModext) = 0;
+
+ virtual FLMBOOL XFLMAPI doesFileMatch(
+ const char * pszFileName,
+ const char * pszTemplate) = 0;
+ };
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_FileHdl : public XF_RefCount
+ {
+ virtual RCODE XFLMAPI Close( void) = 0;
+
+ virtual RCODE XFLMAPI Create(
+ const char * pszFileName,
+ FLMUINT uiIoFlags) = 0;
+
+ virtual RCODE XFLMAPI CreateUnique(
+ const char * pszDirName,
+ const char * pszFileExtension,
+ FLMUINT uiIoFlags) = 0;
+
+ virtual RCODE XFLMAPI Open(
+ const char * pszFileName,
+ FLMUINT uiIoFlags) = 0;
+
+ virtual RCODE XFLMAPI Flush( void) = 0;
+
+ virtual RCODE XFLMAPI Read(
+ FLMUINT64 ui64Offset,
+ FLMUINT uiLength,
+ void * pvBuffer,
+ FLMUINT * puiBytesRead) = 0;
+
+ virtual RCODE XFLMAPI Seek(
+ FLMUINT64 ui64Offset,
+ FLMINT iWhence,
+ FLMUINT64 * pui64NewOffset) = 0;
+
+ virtual RCODE XFLMAPI Size(
+ FLMUINT64 * pui64Size) = 0;
+
+ virtual RCODE XFLMAPI Tell(
+ FLMUINT64 * pui64Offset) = 0;
+
+ virtual RCODE XFLMAPI Truncate(
+ FLMUINT64 ui64Size) = 0;
+
+ virtual RCODE XFLMAPI Write(
+ FLMUINT64 ui64Offset,
+ FLMUINT uiLength,
+ const void * pvBuffer,
+ FLMUINT * puiBytesWritten) = 0;
+
+ // Some I/O subsystems (such as direct IO) can only read and write sectors
+ // (512 byte chunks). If uiOffset is not on a sector boundary or
+ // uiLength is not an exact multiple of a sector size, the I/O system
+ // would have to try to read or write a partial sector - something that
+ // requires extra overhead, particularly for write operations - because
+ // in order to write a partial sector, the I/O subsystem first has to
+ // read the sector in to memory before writing it out in order to
+ // preserve the part of the sector that was not being written to.
+
+ // The SectorRead and SectorWrite routines are provided to allow
+ // the caller to tell the I/O subsystem that it is OK to do full
+ // sector reads or writes if it needs to, because pvBuffer is
+ // guaranteed to be a multiple of 512 bytes big. If the I/O
+ // subsystem can only do sector reads and writes, it can use the
+ // extra buffer space in pvBuffer. When a program calls SectorWrite
+ // it is also telling the I/O subsystem that it does not need to
+ // read a partially written sector from disk before writing it out.
+ // It will be OK to write whatever data is in the pvBuffer to fill out
+ // the sector.
+
+ virtual RCODE XFLMAPI SectorRead(
+ FLMUINT64 ui64ReadOffset,
+ FLMUINT uiBytesToRead,
+ void * pvBuffer,
+ FLMUINT * puiBytesReadRV) = 0;
+
+ virtual RCODE XFLMAPI SectorWrite(
+ FLMUINT64 ui64WriteOffset,
+ FLMUINT uiBytesToWrite,
+ const void * pvBuffer,
+ FLMUINT uiBufferSize,
+ void * pvBufferObj,
+ FLMUINT * puiBytesWrittenRV,
+ FLMBOOL bZeroFill = TRUE) = 0;
+
+ virtual FLMBOOL XFLMAPI CanDoAsync( void) = 0;
+
+ virtual void XFLMAPI setExtendSize(
+ FLMUINT uiExtendSize) = 0;
+
+ virtual void XFLMAPI setMaxAutoExtendSize(
+ FLMUINT uiMaxAutoExtendSize) = 0;
+ };
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_DirHdl : public XF_RefCount
+ {
+ virtual RCODE XFLMAPI Next( void) = 0;
+
+ virtual const char * XFLMAPI CurrentItemName( void) = 0;
+
+ virtual void XFLMAPI CurrentItemPath(
+ char * pszPath) = 0;
+
+ virtual FLMUINT64 XFLMAPI CurrentItemSize( void) = 0;
+
+ virtual FLMBOOL XFLMAPI CurrentItemIsDir( void) = 0;
+
+ virtual RCODE XFLMAPI OpenDir(
+ const char * pszDirName,
+ const char * pszPattern) = 0;
+
+ virtual RCODE XFLMAPI CreateDir(
+ const char * pDirName) = 0;
+
+ virtual RCODE XFLMAPI RemoveDir(
+ const char * pDirPath) = 0;
+ };
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_DbInfo : public XF_RefCount
+ {
+ virtual FLMUINT XFLMAPI getNumCollections( void) = 0;
+
+ virtual FLMUINT XFLMAPI getNumIndexes( void) = 0;
+
+ virtual FLMUINT XFLMAPI getNumLogicalFiles( void) = 0;
+
+ virtual FLMUINT64 XFLMAPI getFileSize( void) = 0;
+
+ virtual const XFLM_DB_HDR * XFLMAPI getDbHdr( void) = 0;
+
+ virtual void XFLMAPI getAvailBlockStats(
+ FLMUINT64 * pui64BytesUsed,
+ FLMUINT * puiBlockCount,
+ FLMINT * piLastError,
+ FLMUINT * puiNumErrors) = 0;
+
+ virtual void XFLMAPI getLFHBlockStats(
+ FLMUINT64 * pui64BytesUsed,
+ FLMUINT * puiBlockCount,
+ FLMINT * piLastError,
+ FLMUINT * puiNumErrors) = 0;
+
+ virtual void XFLMAPI getBTreeInfo(
+ FLMUINT uiNthLogicalFile,
+ FLMUINT * puiLfNum,
+ eLFileType * peLfType,
+ FLMUINT * puiRootBlkAddress,
+ FLMUINT * puiNumLevels) = 0;
+
+ virtual void XFLMAPI getBTreeBlockStats(
+ FLMUINT uiNthLogicalFile,
+ FLMUINT uiLevel,
+ FLMUINT64 * pui64KeyCount,
+ FLMUINT64 * pui64BytesUsed,
+ FLMUINT64 * pui64ElementCount,
+ FLMUINT64 * pui64ContElementCount,
+ FLMUINT64 * pui64ContElmBytes,
+ FLMUINT * puiBlockCount,
+ FLMINT * piLastError,
+ FLMUINT * puiNumErrors) = 0;
+ };
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_ResultSetCompare : public XF_RefCount
+ {
+ virtual RCODE XFLMAPI compare(
+ const void * pvData1,
+ FLMUINT uiLength1,
+ const void * pvData2,
+ FLMUINT uiLength2,
+ FLMINT * piCompare) = 0;
+ };
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_ResultSetSortStatus : public XF_RefCount
+ {
+ virtual RCODE XFLMAPI reportSortStatus(
+ FLMUINT64 ui64EstTotalUnits,
+ FLMUINT64 ui64UnitsDone) = 0;
+ };
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_ResultSet : public XF_RefCount
+ {
+ virtual RCODE XFLMAPI setupResultSet(
+ const char * pszPath,
+ IF_ResultSetCompare * pCompare,
+ FLMUINT uiEntrySize,
+ FLMBOOL bDropDuplicates = TRUE,
+ FLMBOOL bEntriesInOrder = FALSE,
+ const char * pszFileName = NULL) = 0;
+
+ virtual void XFLMAPI setSortStatus(
+ IF_ResultSetSortStatus * pSortStatus) = 0;
+
+ virtual FLMUINT64 XFLMAPI getTotalEntries( void) = 0;
+
+ // Methods for building a result set.
+
+ virtual RCODE XFLMAPI addEntry(
+ const void * pvEntry,
+ FLMUINT uiEntryLength = 0) = 0;
+
+ virtual RCODE XFLMAPI finalizeResultSet(
+ FLMUINT64 * pui64TotalEntries = NULL) = 0;
+
+ // Methods for reading entries from a result set
+
+ virtual RCODE XFLMAPI getFirst(
+ void * pvEntryBuffer,
+ FLMUINT uiBufferLength = 0,
+ FLMUINT * puiEntryLength = NULL) = 0;
+
+ virtual RCODE XFLMAPI getNext(
+ void * pvEntryBuffer,
+ FLMUINT uiBufferLength = 0,
+ FLMUINT * puiEntryLength = NULL) = 0;
+
+ virtual RCODE XFLMAPI getLast(
+ void * pvEntryBuffer,
+ FLMUINT uiBufferLength = 0,
+ FLMUINT * puiEntryLength = NULL) = 0;
+
+ virtual RCODE XFLMAPI getPrev(
+ void * pvEntryBuffer,
+ FLMUINT uiBufferLength = 0,
+ FLMUINT * puiEntryLength = NULL) = 0;
+
+ virtual RCODE XFLMAPI getCurrent(
+ void * pvEntryBuffer,
+ FLMUINT uiBufferLength = 0,
+ FLMUINT * puiEntryLength = NULL) = 0;
+
+ virtual RCODE XFLMAPI findMatch(
+ const void * pvMatchEntry,
+ void * pvFoundEntry) = 0;
+
+ virtual RCODE XFLMAPI findMatch(
+ const void * pvMatchEntry,
+ FLMUINT uiMatchEntryLength,
+ void * pvFoundEntry,
+ FLMUINT * puiFoundEntryLength) = 0;
+
+ virtual RCODE XFLMAPI modifyCurrent(
+ const void * pvEntry,
+ FLMUINT uiEntryLength = 0) = 0;
+
+ virtual FLMUINT64 XFLMAPI getPosition( void) = 0;
+
+ virtual RCODE XFLMAPI setPosition(
+ FLMUINT64 ui64Position) = 0;
+
+ virtual RCODE XFLMAPI resetResultSet(
+ FLMBOOL bDelete = TRUE) = 0;
+
+ virtual RCODE XFLMAPI flushToFile( void) = 0;
+
+ };
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_QueryStatus : public XF_RefCount
+ {
+ virtual RCODE XFLMAPI queryStatus(
+ XFLM_OPT_INFO * pOptInfo) = 0;
+
+ virtual RCODE XFLMAPI newSource(
+ XFLM_OPT_INFO * pOptInfo) = 0;
+
+ virtual RCODE XFLMAPI resultSetStatus(
+ FLMUINT64 ui64TotalDocsRead,
+ FLMUINT64 ui64TotalDocsPassed,
+ FLMBOOL bCanRetrieveDocs) = 0;
+
+ virtual RCODE XFLMAPI resultSetComplete(
+ FLMUINT64 ui64TotalDocsRead,
+ FLMUINT64 ui64TotalDocsPassed) = 0;
+ };
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_QueryValidator : public XF_RefCount
+ {
+ virtual RCODE XFLMAPI validateNode(
+ IF_Db * pDb,
+ IF_DOMNode * pNode,
+ FLMBOOL * pbPassed) = 0;
+ };
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_QueryValFunc : public XF_RefCount
+ {
+ // NOTE: pDynaBuf should only be used when returning XFLM_UTF8_VAL or
+ // XFLM_BINARY_VAL. pvVal should be used for all other types.
+ // If there are no more values, return NE_XFLM_EOF_HIT or
+ // NE_XFLM_BOF_HIT, depending on eValueToGet.
+
+ virtual RCODE XFLMAPI getValue(
+ IF_Db * pDb,
+ IF_DOMNode * pContextNode,
+ ValIterator eValueToGet,
+ eValTypes * peValType,
+ FLMBOOL * pbLastValue,
+ void * pvVal,
+ IF_DynaBuf * pDynaBuf = NULL) = 0;
+
+ virtual RCODE XFLMAPI cloneSelf(
+ IF_QueryValFunc ** ppNewObj) = 0;
+ };
+
+ /*============================================================================
+ Desc: Abstract base class which provides the interface that
+ XFLAIM uses to allow an application to embed a node source
+ inside an XPATH component.
+ ============================================================================*/
+ xflminterface IF_QueryNodeSource : public XF_RefCount
+ {
+ public:
+
+ // Method that returns the search cost of this object in providing
+ // nodes for a query.
+
+ virtual RCODE XFLMAPI searchCost(
+ IF_Db * pDb,
+ FLMBOOL bNotted,
+ FLMUINT * puiCost,
+ FLMBOOL * pbMustScan) = 0;
+
+ // Position to and return the first node that satisfies the predicate.
+
+ virtual RCODE XFLMAPI getFirst(
+ IF_Db * pDb,
+ IF_DOMNode * pContextNode,
+ IF_DOMNode ** ppNode,
+ FLMUINT uiTimeLimit, // milliseconds
+ IF_QueryStatus * pQueryStatus) = 0;
+
+ // Position to and return the last node that satisfies the predicate.
+
+ virtual RCODE XFLMAPI getLast(
+ IF_Db * pDb,
+ IF_DOMNode * pContextNode,
+ IF_DOMNode ** ppNode,
+ FLMUINT uiTimeLimit, // milliseconds
+ IF_QueryStatus * pQueryStatus) = 0;
+
+ // Position to and return the next node that satisfies the predicate.
+ // If no prior positioning has been done,
+ // position to and return the first node.
+
+ virtual RCODE XFLMAPI getNext(
+ IF_Db * pDb,
+ IF_DOMNode * pContextNode,
+ IF_DOMNode ** ppNode,
+ FLMUINT uiTimeLimit, // milliseconds
+ IF_QueryStatus * pQueryStatus) = 0;
+
+ // Position to and return the previous node that satisfies the predicate.
+ // If no prior positioning has been done,
+ // position to and return the last node.
+
+ virtual RCODE XFLMAPI getPrev(
+ IF_Db * pDb,
+ IF_DOMNode * pContextNode,
+ IF_DOMNode ** ppNode,
+ FLMUINT uiTimeLimit, // milliseconds
+ IF_QueryStatus * pQueryStatus) = 0;
+
+ // Return index being used, 0 if none.
+
+ virtual RCODE XFLMAPI getIndex(
+ IF_Db * pDb,
+ FLMUINT * puiIndex,
+ FLMBOOL * pbHaveMultiple) = 0;
+
+ virtual RCODE XFLMAPI getOptInfoCount(
+ IF_Db * pDb,
+ FLMUINT * puiOptInfoCount) = 0;
+
+ virtual RCODE XFLMAPI getOptInfo(
+ IF_Db * pDb,
+ XFLM_OPT_INFO * pOptInfoArray,
+ FLMUINT uiNumOptInfoStructsToGet) = 0;
+
+ // Return a copy of the object. Result set should be
+ // emptied, score should be unset - only the predicate
+ // should be preserved.
+ // Returns NULL if the copy fails.
+
+ virtual RCODE copy(
+ IF_QueryNodeSource ** ppNodeSourceCopy) = 0;
+
+ virtual void releaseResources( void) = 0;
+ };
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_OperandComparer : public XF_RefCount
+ {
+ virtual RCODE XFLMAPI compare(
+ IF_PosIStream * pLeftOperandStream,
+ IF_PosIStream * pRightOperandStream,
+ FLMINT * piCompare) = 0;
+ };
+
+ #define XFLM_MAX_SORT_KEYS 32
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_Query : public XF_RefCount
+ {
+ virtual RCODE XFLMAPI setLanguage(
+ FLMUINT uiLanguage) = 0;
+
+ virtual RCODE XFLMAPI setCollection(
+ FLMUINT uiCollection) = 0;
+
+ virtual RCODE XFLMAPI setupQueryExpr(
+ IF_Db * pDb,
+ const FLMUNICODE * puzQuery) = 0;
+
+ virtual RCODE XFLMAPI setupQueryExpr(
+ IF_Db * pDb,
+ const char * pszQueryExpr) = 0;
+
+ virtual RCODE XFLMAPI copyCriteria(
+ IF_Query * pSrcQuery) = 0;
+
+ virtual RCODE XFLMAPI addXPathComponent(
+ eXPathAxisTypes eXPathAxis,
+ eDomNodeType eNodeType,
+ FLMUINT uiNameId,
+ IF_QueryNodeSource * pNodeSource = NULL) = 0;
+
+ virtual RCODE XFLMAPI addOperator(
+ eQueryOperators eOperator,
+ FLMUINT uiCompareRules = 0,
+ IF_OperandComparer * pOpComparer = NULL) = 0;
+
+ virtual RCODE XFLMAPI addUnicodeValue(
+ const FLMUNICODE * puzVal) = 0;
+
+ virtual RCODE XFLMAPI addUTF8Value(
+ const char * pszVal,
+ FLMUINT uiUTF8Len = 0) = 0;
+
+ virtual RCODE XFLMAPI addBinaryValue(
+ const void * pvVal,
+ FLMUINT uiValLen) = 0;
+
+ virtual RCODE XFLMAPI addUINTValue(
+ FLMUINT uiVal) = 0;
+
+ virtual RCODE XFLMAPI addINTValue(
+ FLMINT iVal) = 0;
+
+ virtual RCODE XFLMAPI addUINT64Value(
+ FLMUINT64 ui64Val) = 0;
+
+ virtual RCODE XFLMAPI addINT64Value(
+ FLMINT64 i64Val) = 0;
+
+ virtual RCODE XFLMAPI addBoolean(
+ FLMBOOL bVal,
+ FLMBOOL bUnknown = FALSE) = 0;
+
+ virtual RCODE XFLMAPI addFunction(
+ eQueryFunctions eFunction) = 0;
+
+ virtual RCODE XFLMAPI addFunction(
+ IF_QueryValFunc * pFuncObj,
+ FLMBOOL bHasXPathExpr) = 0;
+
+ virtual RCODE XFLMAPI getFirst(
+ IF_Db * pDb,
+ IF_DOMNode ** ppNode,
+ FLMUINT uiTimeLimit = 0) = 0; // milliseconds
+
+ virtual RCODE XFLMAPI getLast(
+ IF_Db * pDb,
+ IF_DOMNode ** ppNode,
+ FLMUINT uiTimeLimit = 0) = 0; // milliseconds
+
+ virtual RCODE XFLMAPI getNext(
+ IF_Db * pDb,
+ IF_DOMNode ** ppNode,
+ FLMUINT uiTimeLimit = 0, // milliseconds
+ FLMUINT uiNumToSkip = 0,
+ FLMUINT * puiNumSkipped = NULL) = 0;
+
+ virtual RCODE XFLMAPI getPrev(
+ IF_Db * pDb,
+ IF_DOMNode ** ppNode,
+ FLMUINT uiTimeLimit = 0, // milliseconds
+ FLMUINT uiNumToSkip = 0,
+ FLMUINT * puiNumSkipped = NULL) = 0;
+
+ virtual RCODE XFLMAPI getCurrent(
+ IF_Db * pDb,
+ IF_DOMNode ** ppNode) = 0;
+
+ virtual void XFLMAPI resetQuery( void) = 0;
+
+ virtual RCODE XFLMAPI getStatsAndOptInfo(
+ FLMUINT * puiNumOptInfos,
+ XFLM_OPT_INFO ** ppOptInfo) = 0;
+
+ virtual void XFLMAPI freeStatsAndOptInfo(
+ XFLM_OPT_INFO ** ppOptInfo) = 0;
+
+ virtual void XFLMAPI setDupHandling(
+ FLMBOOL bRemoveDups) = 0;
+
+ virtual RCODE XFLMAPI setIndex(
+ FLMUINT uiIndex) = 0;
+
+ virtual RCODE XFLMAPI getIndex(
+ IF_Db * pDb,
+ FLMUINT * puiIndex,
+ FLMBOOL * pbHaveMultiple) = 0;
+
+ virtual RCODE XFLMAPI addSortKey(
+ void * pvSortKeyContext,
+ FLMBOOL bChildToContext,
+ FLMBOOL bElement,
+ FLMUINT uiNameId,
+ FLMUINT uiCompareRules,
+ FLMUINT uiLimit,
+ FLMUINT uiKeyComponent,
+ FLMBOOL bSortDescending,
+ FLMBOOL bSortMissingHigh,
+ void ** ppvContext) = 0;
+
+ virtual RCODE XFLMAPI enablePositioning( void) = 0;
+
+ virtual RCODE XFLMAPI positionTo(
+ IF_Db * pDb,
+ IF_DOMNode ** ppNode,
+ FLMUINT uiTimeLimit,
+ FLMUINT uiPosition) = 0;
+
+ virtual RCODE XFLMAPI positionTo(
+ IF_Db * pDb,
+ IF_DOMNode ** ppNode,
+ FLMUINT uiTimeLimit,
+ IF_DataVector * pSearchKey,
+ FLMUINT uiFlags) = 0;
+
+ virtual RCODE XFLMAPI getPosition(
+ IF_Db * pDb,
+ FLMUINT * puiPosition) = 0;
+
+ virtual RCODE XFLMAPI buildResultSet(
+ IF_Db * pDb,
+ FLMUINT uiTimeLimit) = 0;
+
+ virtual void XFLMAPI stopBuildingResultSet( void) = 0;
+
+ virtual RCODE XFLMAPI getCounts(
+ IF_Db * pDb,
+ FLMUINT uiTimeLimit,
+ FLMBOOL bPartialCountOk,
+ FLMUINT * puiReadCount,
+ FLMUINT * puiPassedCount,
+ FLMUINT * puiPositionableToCount,
+ FLMBOOL * pbDoneBuildingResultSet = NULL) = 0;
+
+ virtual void XFLMAPI enableResultSetEncryption( void) = 0;
+
+ virtual void XFLMAPI setQueryStatusObject(
+ IF_QueryStatus * pQueryStatus) = 0;
+
+ virtual void XFLMAPI setQueryValidatorObject(
+ IF_QueryValidator * pQueryValidator) = 0;
+ };
+
+ /****************************************************************************
+ Desc: Pool memory allocator
+ ****************************************************************************/
+ xflminterface IF_Pool : public XF_RefCount
+ {
+ virtual void poolInit(
+ FLMUINT uiBlockSize) = 0;
+
+ virtual RCODE poolAlloc(
+ FLMUINT uiSize,
+ void ** ppvPtr) = 0;
+
+ virtual RCODE poolCalloc(
+ FLMUINT uiSize,
+ void ** ppvPtr) = 0;
+
+ virtual void poolFree( void) = 0;
+
+ virtual void poolReset(
+ void * pvMark,
+ FLMBOOL bReduceFirstBlock = FALSE) = 0;
+
+ virtual void * poolMark( void) = 0;
+
+ virtual FLMUINT getBlockSize( void) = 0;
+
+ virtual FLMUINT getBytesAllocated( void) = 0;
+ };
+
+ /****************************************************************************
+ Desc: Dynamic buffer
+ ****************************************************************************/
+ xflminterface IF_DynaBuf : public XF_RefCount
+ {
+ virtual void truncateData(
+ FLMUINT uiSize) = 0;
+
+ virtual RCODE appendData(
+ const void * pvData,
+ FLMUINT uiSize) = 0;
+
+ virtual RCODE allocSpace(
+ FLMUINT uiSize,
+ void ** ppvAlloc) = 0;
+ };
+
+
+ typedef struct XFLM_NODE_INFO_ITEM
+ {
+ FLMUINT64 ui64Count;
+ FLMUINT64 ui64Bytes;
+ } XFLM_NODE_INFO_ITEM;
+
+ typedef struct XFLM_NODE_INFO
+ {
+ XFLM_NODE_INFO_ITEM headerSize;
+ XFLM_NODE_INFO_ITEM nodeAndDataType;
+ XFLM_NODE_INFO_ITEM flags;
+ XFLM_NODE_INFO_ITEM nameId;
+ XFLM_NODE_INFO_ITEM prefixId;
+ XFLM_NODE_INFO_ITEM baseId;
+ XFLM_NODE_INFO_ITEM documentId;
+ XFLM_NODE_INFO_ITEM parentId;
+ XFLM_NODE_INFO_ITEM prevSibId;
+ XFLM_NODE_INFO_ITEM nextSibId;
+ XFLM_NODE_INFO_ITEM firstChildId;
+ XFLM_NODE_INFO_ITEM lastChildId;
+ XFLM_NODE_INFO_ITEM childElmCount;
+ XFLM_NODE_INFO_ITEM dataChildCount;
+ XFLM_NODE_INFO_ITEM attrCount;
+ XFLM_NODE_INFO_ITEM attrBaseId;
+ XFLM_NODE_INFO_ITEM attrFlags;
+ XFLM_NODE_INFO_ITEM attrPayloadLen;
+ XFLM_NODE_INFO_ITEM annotationId;
+ XFLM_NODE_INFO_ITEM metaValue;
+ XFLM_NODE_INFO_ITEM encDefId;
+ XFLM_NODE_INFO_ITEM unencDataLen;
+ XFLM_NODE_INFO_ITEM childElmNameId;
+ XFLM_NODE_INFO_ITEM childElmNodeId;
+ XFLM_NODE_INFO_ITEM encIV;
+ XFLM_NODE_INFO_ITEM encPadding;
+
+ // Total overhead - sum of all of the above types of overhead.
+
+ XFLM_NODE_INFO_ITEM totalOverhead;
+
+ // Data totals
+
+ XFLM_NODE_INFO_ITEM dataNodata;
+ XFLM_NODE_INFO_ITEM dataString;
+ XFLM_NODE_INFO_ITEM dataNumeric;
+ XFLM_NODE_INFO_ITEM dataBinary;
+
+ // Summary - contains both overhead and data for each type of node
+
+ XFLM_NODE_INFO_ITEM attributeNode;
+ XFLM_NODE_INFO_ITEM elementNode;
+ XFLM_NODE_INFO_ITEM dataNode;
+ XFLM_NODE_INFO_ITEM commentNode;
+ XFLM_NODE_INFO_ITEM otherNode;
+ } XFLM_NODE_INFO;
+
+ /****************************************************************************
+ Desc: Node Info. Gatherer
+ ****************************************************************************/
+ xflminterface IF_NodeInfo : public XF_RefCount
+ {
+ virtual void XFLMAPI clearNodeInfo( void) = 0;
+
+ virtual RCODE XFLMAPI addNodeInfo(
+ IF_Db * pDb,
+ IF_DOMNode * pNode,
+ FLMBOOL bDoSubTree,
+ FLMBOOL bDoSelf = TRUE) = 0;
+
+ virtual FLMUINT64 XFLMAPI getTotalNodeCount( void) = 0;
+
+ virtual void XFLMAPI getNodeInfo(
+ XFLM_NODE_INFO * pNodeInfo) = 0;
+ };
+
+ /****************************************************************************
+ Desc: Types of information that can be gathered about a B-Tree.
+ ****************************************************************************/
+ typedef struct XFLM_BTREE_LEVEL_INFO
+ {
+ FLMUINT64 ui64BlockCount;
+ FLMUINT64 ui64BlockLength;
+ FLMUINT64 ui64BlockFreeSpace;
+ FLMUINT64 ui64ElmOffsetOverhead;
+ FLMUINT64 ui64ElmCount;
+ FLMUINT64 ui64ContElmCount;
+ FLMUINT64 ui64ElmFlagOvhd;
+ FLMUINT64 ui64ElmKeyLengthOvhd;
+ FLMUINT64 ui64ElmCountsOvhd;
+ FLMUINT64 ui64ElmChildAddrsOvhd;
+ FLMUINT64 ui64ElmDataLenOvhd;
+ FLMUINT64 ui64ElmOADataLenOvhd;
+ FLMUINT64 ui64ElmKeyLength;
+ FLMUINT64 ui64ElmDataLength;
+
+ // The following three are how ui64ElmKeyLength is subdivided.
+ // They are only applicable to index keys.
+
+ FLMUINT64 ui64KeyDataSize;
+ FLMUINT64 ui64KeyIdSize;
+ FLMUINT64 ui64KeyComponentLengthsSize;
+
+ // Data only blocks
+
+ FLMUINT64 ui64DataOnlyBlockCount;
+ FLMUINT64 ui64DataOnlyBlockLength;
+ FLMUINT64 ui64DataOnlyBlockFreeSpace;
+ } XFLM_BTREE_LEVEL_INFO;
+
+ /****************************************************************************
+ Desc:
+ ****************************************************************************/
+ xflminterface IF_BTreeInfoStatus : public XF_RefCount
+ {
+ virtual RCODE XFLMAPI infoStatus(
+ FLMUINT uiCurrLfNum,
+ FLMBOOL bIsCollection,
+ char * pszCurrLfName,
+ FLMUINT uiCurrLevel,
+ FLMUINT64 ui64CurrLfBlockCount,
+ FLMUINT64 ui64CurrLevelBlockCount,
+ FLMUINT64 ui64TotalBlockCount) = 0;
+ };
+
+ /****************************************************************************
+ Desc: BTree Info. Gatherer
+ ****************************************************************************/
+ xflminterface IF_BTreeInfo : public XF_RefCount
+ {
+ virtual void XFLMAPI clearBTreeInfo( void) = 0;
+
+ virtual RCODE XFLMAPI collectIndexInfo(
+ IF_Db * pDb,
+ FLMUINT uiIndexNum,
+ IF_BTreeInfoStatus * pInfoStatus) = 0;
+
+ virtual RCODE XFLMAPI collectCollectionInfo(
+ IF_Db * pDb,
+ FLMUINT uiCollectionNum,
+ IF_BTreeInfoStatus * pInfoStatus) = 0;
+
+ virtual FLMUINT XFLMAPI getNumIndexes( void) = 0;
+
+ virtual FLMUINT XFLMAPI getNumCollections( void) = 0;
+
+ virtual FLMBOOL XFLMAPI getIndexInfo(
+ FLMUINT uiNthIndex,
+ FLMUINT * puiIndexNum,
+ char ** ppszIndexName,
+ FLMUINT * puiNumLevels) = 0;
+
+ virtual FLMBOOL XFLMAPI getCollectionInfo(
+ FLMUINT uiNthCollection,
+ FLMUINT * puiCollectionNum,
+ char ** ppszCollectionName,
+ FLMUINT * puiNumLevels) = 0;
+
+ virtual FLMBOOL XFLMAPI getIndexLevelInfo(
+ FLMUINT uiNthIndex,
+ FLMUINT uiBTreeLevel,
+ XFLM_BTREE_LEVEL_INFO * pLevelInfo) = 0;
+
+ virtual FLMBOOL XFLMAPI getCollectionLevelInfo(
+ FLMUINT uiNthCollection,
+ FLMUINT uiBTreeLevel,
+ XFLM_BTREE_LEVEL_INFO * pLevelInfo) = 0;
+ };
+
+ /****************************************************************************
+ Desc: Status and return codes
+ ****************************************************************************/
+ #ifndef RC_OK
+ #define RC_OK( rc) ((rc) == 0)
+ #endif
+
+ #ifndef RC_BAD
+ #define RC_BAD( rc) ((rc) != 0)
+ #endif
+
+ #define XFLM_ERROR_BASE(e) ((RCODE)((int)(0x81050000+(e))))
+
+ /****************************************************************************
+ Desc: General FLAIM errors
+ ****************************************************************************/
+ #define NE_XFLM_OK 0
+
+ #define NE_XFLM_FIRST_COMMON_ERROR XFLM_ERROR_BASE( 0x0000) // NOTE: This is not an error code - do not document it
+ #define NE_XFLM_NOT_IMPLEMENTED XFLM_ERROR_BASE( 0x0001) // NE_NOT_IMPLEMENTED - Attempt was made to use a feature that is not implemented.
+ #define NE_XFLM_MEM XFLM_ERROR_BASE( 0x0002) // NE_INSUFFICIENT_MEMORY - Attempt to allocate memory failed.
+ #define NE_XFLM_INVALID_PARM XFLM_ERROR_BASE( 0x0005) // NE_INVALID_PARAMETER - Invalid parameter passed into a function.
+ #define NE_XFLM_TIMEOUT XFLM_ERROR_BASE( 0x0009) // NE_WAIT_TIMEOUT - Database operation timed out (usually a query operation).
+ #define NE_XFLM_NOT_FOUND XFLM_ERROR_BASE( 0x000A) // NE_OBJECT_NOT_FOUND - An object was not found.
+ #define NE_XFLM_EXISTS XFLM_ERROR_BASE( 0x000C) // NE_OBJECT_ALREADY_EXISTS - Object already exists.
+ #define NE_XFLM_USER_ABORT XFLM_ERROR_BASE( 0x0010) // NE_CALLBACK_CANCELLED - User or application aborted (canceled) the operation
+ #define NE_XFLM_FAILURE XFLM_ERROR_BASE( 0x0011) // NE_RECOVERABLE_FAILURE - Internal failure.
+ #define NE_XFLM_LAST_COMMON_ERROR XFLM_ERROR_BASE( 0x0012) // NOTE: This is not an error code - do not document.
+
+ #define NE_XFLM_FIRST_GENERAL_ERROR XFLM_ERROR_BASE( 0x0100) // NOTE: This is not an error code - do not document
+ #define NE_XFLM_BOF_HIT XFLM_ERROR_BASE( 0x0101) // Beginning of results encountered. This error is may be returned when reading query results in reverse order (from last to first).
+ #define NE_XFLM_EOF_HIT XFLM_ERROR_BASE( 0x0102) // End of results encountered. This error may be returned when reading query results in forward order (first to last).
+ #define NE_XFLM_END XFLM_ERROR_BASE( 0x0103) // End of roll-forward log packets encountered. NOTE: This error code should never be returned to an application.
+ #define NE_XFLM_BAD_PREFIX XFLM_ERROR_BASE( 0x0104) // Invalid XLM namespace prefix specified. Either a prefix name or number that was specified was not defined.
+ #define NE_XFLM_ATTRIBUTE_PURGED XFLM_ERROR_BASE( 0x0105) // XML attribute cannot be used - it is being deleted from the database.
+ #define NE_XFLM_BAD_COLLECTION XFLM_ERROR_BASE( 0x0106) // Invalid collection number specified. Collection is not defined.
+ #define NE_XFLM_DATABASE_LOCK_REQ_TIMEOUT XFLM_ERROR_BASE( 0x0107) // Request to lock the database timed out.
+ #define NE_XFLM_ILLEGAL_DATA_COMPONENT XFLM_ERROR_BASE( 0x0108) // Cannot use ELM_ROOT_TAG as a data component in an index.
+ #define NE_XFLM_BAD_DATA_TYPE XFLM_ERROR_BASE( 0x0109) // Attempt to set/get data on an XML element or attribute using a data type that is incompatible with the data type specified in the dictionary.
+ #define NE_XFLM_MUST_INDEX_ON_PRESENCE XFLM_ERROR_BASE( 0x010A) // When using ELM_ROOT_TAG in an index component, must specify PRESENCE indexing only.
+ #define NE_XFLM_BAD_IX XFLM_ERROR_BASE( 0x010B) // Invalid index number specified. Index is not defined.
+ #define NE_XFLM_BACKUP_ACTIVE XFLM_ERROR_BASE( 0x010C) // Operation could not be performed because a backup is currently in progress.
+ #define NE_XFLM_SERIAL_NUM_MISMATCH XFLM_ERROR_BASE( 0x010D) // Serial number on backup file does not match the serial number that is expected.
+ #define NE_XFLM_BAD_RFL_DB_SERIAL_NUM XFLM_ERROR_BASE( 0x010E) // Bad database serial number in roll-forward log file header.
+ #define NE_XFLM_BTREE_ERROR XFLM_ERROR_BASE( 0x010F) // A B-Tree in the database is bad.
+ #define NE_XFLM_BTREE_FULL XFLM_ERROR_BASE( 0x0110) // A B-tree in the database is full, or a b-tree being used for a temporary result set is full.
+ #define NE_XFLM_BAD_RFL_FILE_NUMBER XFLM_ERROR_BASE( 0x0111) // Bad roll-forward log file number in roll-forward log file header.
+ #define NE_XFLM_CANNOT_DEL_ELEMENT XFLM_ERROR_BASE( 0x0112) // Cannot delete an XML element definition in the dictionary because it is in use.
+ #define NE_XFLM_CANNOT_MOD_DATA_TYPE XFLM_ERROR_BASE( 0x0113) // Cannot modify the data type for an XML element or attribute definition in the dictionary.
+ #define NE_XFLM_CANNOT_INDEX_DATA_TYPE XFLM_ERROR_BASE( 0x0114) // Data type of XML element or attribute is not one that can be indexed.
+ #define NE_XFLM_CONV_BAD_DIGIT XFLM_ERROR_BASE( 0x0115) // Non-numeric digit found in text to numeric conversion.
+ #define NE_XFLM_CONV_DEST_OVERFLOW XFLM_ERROR_BASE( 0x0116) // Destination buffer not large enough to hold data.
+ #define NE_XFLM_CONV_ILLEGAL XFLM_ERROR_BASE( 0x0117) // Attempt to convert between data types is an unsupported conversion.
+ #define NE_XFLM_CONV_NULL_SRC XFLM_ERROR_BASE( 0x0118) // Data source cannot be NULL when doing data conversion.
+ #define NE_XFLM_CONV_NUM_OVERFLOW XFLM_ERROR_BASE( 0x0119) // Numeric overflow (> upper bound) converting to numeric type.
+ #define NE_XFLM_CONV_NUM_UNDERFLOW XFLM_ERROR_BASE( 0x011A) // Numeric underflow (< lower bound) converting to numeric type.
+ #define NE_XFLM_BAD_ELEMENT_NUM XFLM_ERROR_BASE( 0x011B) // Bad element number specified - element not defined in dictionary.
+ #define NE_XFLM_BAD_ATTRIBUTE_NUM XFLM_ERROR_BASE( 0x011C) // Bad attribute number specified - attribute not defined in dictionary.
+ #define NE_XFLM_BAD_ENCDEF_NUM XFLM_ERROR_BASE( 0x011D) // Bad encryption number specified - encryption definition not defined in dictionary.
+ #define NE_XFLM_DATA_ERROR XFLM_ERROR_BASE( 0x011E) // Encountered data in the database that was corrupted.
+ #define NE_XFLM_INVALID_FILE_SEQUENCE XFLM_ERROR_BASE( 0x011F) // Incremental backup file number provided during a restore is invalid.
+ #define NE_XFLM_ILLEGAL_OP XFLM_ERROR_BASE( 0x0120) // Attempt to perform an illegal operation.
+ #define NE_XFLM_DUPLICATE_ELEMENT_NUM XFLM_ERROR_BASE( 0x0121) // Element number specified in element definition is already in use.
+ #define NE_XFLM_ILLEGAL_TRANS_TYPE XFLM_ERROR_BASE( 0x0122) // Illegal transaction type specified for transaction begin operation.
+ #define NE_XFLM_UNSUPPORTED_VERSION XFLM_ERROR_BASE( 0x0123) // Version of database found in database header is not supported.
+ #define NE_XFLM_ILLEGAL_TRANS_OP XFLM_ERROR_BASE( 0x0124) // Illegal operation for transaction type.
+ #define NE_XFLM_INCOMPLETE_LOG XFLM_ERROR_BASE( 0x0125) // Incomplete rollback log.
+ #define NE_XFLM_ILLEGAL_INDEX_DEF XFLM_ERROR_BASE( 0x0126) // Index definition document is illegal - does not conform to the expected form of an index definition document.
+ #define NE_XFLM_ILLEGAL_INDEX_ON XFLM_ERROR_BASE( 0x0127) // The "IndexOn" attribute of an index definition has an illegal value.
+ #define NE_XFLM_ILLEGAL_STATE_CHANGE XFLM_ERROR_BASE( 0x0128) // Attempted an illegal state change on an element or attribute definition.
+ #define NE_XFLM_BAD_RFL_SERIAL_NUM XFLM_ERROR_BASE( 0x0129) // Serial number in roll-forward log file header does not match expected serial number.
+ #define NE_XFLM_NEWER_FLAIM XFLM_ERROR_BASE( 0x012A) // Running old code on a newer version of database. Newer code must be used.
+ #define NE_XFLM_CANNOT_MOD_ELEMENT_STATE XFLM_ERROR_BASE( 0x012B) // Attempted to change state of a predefined element definition.
+ #define NE_XFLM_CANNOT_MOD_ATTRIBUTE_STATE XFLM_ERROR_BASE( 0x012C) // Attempted to change state of a predefined attribute definition.
+ #define NE_XFLM_NO_MORE_ELEMENT_NUMS XFLM_ERROR_BASE( 0x012D) // The highest element number has already been used, cannot create more element definitions.
+ #define NE_XFLM_NO_TRANS_ACTIVE XFLM_ERROR_BASE( 0x012E) // Operation must be performed inside a database transaction.
+ #define NE_XFLM_NOT_UNIQUE XFLM_ERROR_BASE( 0x012F) // Attempt was made to insert a key into a b-tree that was already in the b-tree.
+ #define NE_XFLM_NOT_FLAIM XFLM_ERROR_BASE( 0x0130) // The file specified is not a FLAIM database.
+ #define NE_XFLM_OLD_VIEW XFLM_ERROR_BASE( 0x0131) // Unable to maintain read transaction's view of the database.
+ #define NE_XFLM_SHARED_LOCK XFLM_ERROR_BASE( 0x0132) // Attempted to perform an operation on the database that requires exclusive access, but cannot because there is a shared lock.
+ #define NE_XFLM_SYNTAX XFLM_ERROR_BASE( 0x0133) // Syntax error while parsing XML or query.
+ #define NE_XFLM_TRANS_ACTIVE XFLM_ERROR_BASE( 0x0134) // Operation cannot be performed while a transaction is active.
+ #define NE_XFLM_RFL_TRANS_GAP XFLM_ERROR_BASE( 0x0135) // A gap was found in the transaction sequence in the roll-forward log.
+ #define NE_XFLM_BAD_COLLATED_KEY XFLM_ERROR_BASE( 0x0136) // Something in collated key is bad.
+ #define NE_XFLM_UNSUPPORTED_FEATURE XFLM_ERROR_BASE( 0x0137) // Attempting to use a feature for which full support has been disabled.
+ #define NE_XFLM_MUST_DELETE_INDEXES XFLM_ERROR_BASE( 0x0138) // Attempting to delete a collection that has indexes defined for it. Associated indexes must be deleted before the collection can be deleted.
+ #define NE_XFLM_RFL_INCOMPLETE XFLM_ERROR_BASE( 0x0139) // Roll-forward log file is incomplete.
+ #define NE_XFLM_CANNOT_RESTORE_RFL_FILES XFLM_ERROR_BASE( 0x013A) // Cannot restore roll-forward log files - not using multiple roll-forward log files.
+ #define NE_XFLM_INCONSISTENT_BACKUP XFLM_ERROR_BASE( 0x013B) // A problem (corruption, etc.) was detected in a backup set.
+ #define NE_XFLM_BLOCK_CRC XFLM_ERROR_BASE( 0x013C) // CRC for database block was invalid. May indicate problems in reading from or writing to disk.
+ #define NE_XFLM_ABORT_TRANS XFLM_ERROR_BASE( 0x013D) // Attempted operation after a critical error - transaction should be aborted.
+ #define NE_XFLM_NOT_RFL XFLM_ERROR_BASE( 0x013E) // File was not a roll-forward log file as expected.
+ #define NE_XFLM_BAD_RFL_PACKET XFLM_ERROR_BASE( 0x013F) // Roll-forward log file packet was bad.
+ #define NE_XFLM_DATA_PATH_MISMATCH XFLM_ERROR_BASE( 0x0140) // Bad data path specified to open database. Does not match data path specified for prior opens of the database.
+ #define NE_XFLM_STREAM_EXISTS XFLM_ERROR_BASE( 0x0141) // Attempt to create stream, but the file(s) already exists.
+ #define NE_XFLM_FILE_EXISTS XFLM_ERROR_BASE( 0x0142) // Attempt to create a database, but the file already exists.
+ #define NE_XFLM_COULD_NOT_CREATE_SEMAPHORE XFLM_ERROR_BASE( 0x0143) // Could not create a semaphore.
+ #define NE_XFLM_MUST_CLOSE_DATABASE XFLM_ERROR_BASE( 0x0144) // Database must be closed due to a critical error.
+ #define NE_XFLM_INVALID_ENCKEY_CRC XFLM_ERROR_BASE( 0x0145) // Encryption key CRC could not be verified.
+ #define NE_XFLM_BAD_UTF8 XFLM_ERROR_BASE( 0x0146) // An invalid byte sequence was found in a UTF-8 string
+ #define NE_XFLM_COULD_NOT_CREATE_MUTEX XFLM_ERROR_BASE( 0x0147) // Could not create a mutex.
+ #define NE_XFLM_ERROR_WAITING_ON_SEMPAHORE XFLM_ERROR_BASE( 0x0148) // Error occurred while waiting on a sempahore.
+ #define NE_XFLM_BAD_PLATFORM_FORMAT XFLM_ERROR_BASE( 0x0149) // Cannot support platform format. NOTE: No need to document this one, it is strictly internal.
+ #define NE_XFLM_HDR_CRC XFLM_ERROR_BASE( 0x014A) // Database header has a bad CRC.
+ #define NE_XFLM_NO_NAME_TABLE XFLM_ERROR_BASE( 0x014B) // No name table was set up for the database.
+ #define NE_XFLM_MULTIPLE_MATCHES XFLM_ERROR_BASE( 0x014C) // Multiple entries match the name in the name table. Need to pass a namespace to disambiguate.
+ #define NE_XFLM_UNALLOWED_UPGRADE XFLM_ERROR_BASE( 0x014D) // Cannot upgrade database from one version to another.
+ #define NE_XFLM_BTREE_BAD_STATE XFLM_ERROR_BASE( 0x014E) // Btree function called before proper setup steps taken.
+ #define NE_XFLM_DUPLICATE_ATTRIBUTE_NUM XFLM_ERROR_BASE( 0x014F) // Attribute number specified in attribute definition is already in use.
+ #define NE_XFLM_DUPLICATE_INDEX_NUM XFLM_ERROR_BASE( 0x0150) // Index number specified in index definition is already in use.
+ #define NE_XFLM_DUPLICATE_COLLECTION_NUM XFLM_ERROR_BASE( 0x0151) // Collection number specified in collection definition is already in use.
+ #define NE_XFLM_DUPLICATE_ELEMENT_NAME XFLM_ERROR_BASE( 0x0152) // Element name+namespace specified in element definition is already in use.
+ #define NE_XFLM_DUPLICATE_ATTRIBUTE_NAME XFLM_ERROR_BASE( 0x0153) // Attribute name+namespace specified in attribute definition is already in use.
+ #define NE_XFLM_DUPLICATE_INDEX_NAME XFLM_ERROR_BASE( 0x0154) // Index name specified in index definition is already in use.
+ #define NE_XFLM_DUPLICATE_COLLECTION_NAME XFLM_ERROR_BASE( 0x0155) // Collection name specified in collection definition is already in use.
+ #define NE_XFLM_ELEMENT_PURGED XFLM_ERROR_BASE( 0x0156) // XML element cannot be used - it is deleted from the database.
+ #define NE_XFLM_TOO_MANY_OPEN_DATABASES XFLM_ERROR_BASE( 0x0157) // Too many open databases, cannot open another one.
+ #define NE_XFLM_DATABASE_OPEN XFLM_ERROR_BASE( 0x0158) // Operation cannot be performed because the database is currently open.
+ #define NE_XFLM_CACHE_ERROR XFLM_ERROR_BASE( 0x0159) // Cached database block has been compromised while in cache.
+ #define NE_XFLM_BTREE_KEY_SIZE XFLM_ERROR_BASE( 0x015A) // Key too large to insert/lookup in a b-tree.
+ #define NE_XFLM_DB_FULL XFLM_ERROR_BASE( 0x015B) // Database is full, cannot create more blocks.
+ #define NE_XFLM_QUERY_SYNTAX XFLM_ERROR_BASE( 0x015C) // Query expression had improper syntax.
+ #define NE_XFLM_COULD_NOT_START_THREAD XFLM_ERROR_BASE( 0x015D) // Error occurred while attempting to start a thread.
+ #define NE_XFLM_INDEX_OFFLINE XFLM_ERROR_BASE( 0x015E) // Index is offline, cannot be used in a query.
+ #define NE_XFLM_RFL_DISK_FULL XFLM_ERROR_BASE( 0x015F) // Disk which contains roll-forward log is full.
+ #define NE_XFLM_MUST_WAIT_CHECKPOINT XFLM_ERROR_BASE( 0x0160) // Must wait for a checkpoint before starting transaction - due to disk problems - usually in disk containing roll-forward log files.
+ #define NE_XFLM_MISSING_ENC_ALGORITHM XFLM_ERROR_BASE( 0x0161) // Encryption definition is missing an encryption algorithm.
+ #define NE_XFLM_INVALID_ENC_ALGORITHM XFLM_ERROR_BASE( 0x0162) // Invalid encryption algorithm specified in encryption definition.
+ #define NE_XFLM_INVALID_ENC_KEY_SIZE XFLM_ERROR_BASE( 0x0163) // Invalid key size specified in encryption definition.
+ #define NE_XFLM_ILLEGAL_DATA_TYPE XFLM_ERROR_BASE( 0x0164) // Data type specified for XML element or attribute definition is illegal.
+ #define NE_XFLM_ILLEGAL_STATE XFLM_ERROR_BASE( 0x0165) // State specified for index definition or XML element or attribute definition is illegal.
+ #define NE_XFLM_ILLEGAL_ELEMENT_NAME XFLM_ERROR_BASE( 0x0166) // XML element name specified in element definition is illegal.
+ #define NE_XFLM_ILLEGAL_ATTRIBUTE_NAME XFLM_ERROR_BASE( 0x0167) // XML attribute name specified in attribute definition is illegal.
+ #define NE_XFLM_ILLEGAL_COLLECTION_NAME XFLM_ERROR_BASE( 0x0168) // Collection name specified in collection definition is illegal.
+ #define NE_XFLM_ILLEGAL_INDEX_NAME XFLM_ERROR_BASE( 0x0169) // Index name specified is illegal
+ #define NE_XFLM_ILLEGAL_ELEMENT_NUMBER XFLM_ERROR_BASE( 0x016A) // Element number specified in element definition or index definition is illegal.
+ #define NE_XFLM_ILLEGAL_ATTRIBUTE_NUMBER XFLM_ERROR_BASE( 0x016B) // Attribute number specified in attribute definition or index definition is illegal.
+ #define NE_XFLM_ILLEGAL_COLLECTION_NUMBER XFLM_ERROR_BASE( 0x016C) // Collection number specified in collection definition or index definition is illegal.
+ #define NE_XFLM_ILLEGAL_INDEX_NUMBER XFLM_ERROR_BASE( 0x016D) // Index number specified in index definition is illegal.
+ #define NE_XFLM_ILLEGAL_ENCDEF_NUMBER XFLM_ERROR_BASE( 0x016E) // Encryption definition number specified in encryption definition is illegal.
+ #define NE_XFLM_COLLECTION_NAME_MISMATCH XFLM_ERROR_BASE( 0x016F) // Collection name and number specified in index definition do not correspond to each other.
+ #define NE_XFLM_ELEMENT_NAME_MISMATCH XFLM_ERROR_BASE( 0x0170) // Element name+namespace and number specified in index definition do not correspond to each other.
+ #define NE_XFLM_ATTRIBUTE_NAME_MISMATCH XFLM_ERROR_BASE( 0x0171) // Attribute name+namespace and number specified in index definition do not correspond to each other.
+ #define NE_XFLM_INVALID_COMPARE_RULE XFLM_ERROR_BASE( 0x0172) // Invalid comparison rule specified in index definition.
+ #define NE_XFLM_DUPLICATE_KEY_COMPONENT XFLM_ERROR_BASE( 0x0173) // Duplicate key component number specified in index definition.
+ #define NE_XFLM_DUPLICATE_DATA_COMPONENT XFLM_ERROR_BASE( 0x0174) // Duplicate data component number specified in index definition.
+ #define NE_XFLM_MISSING_KEY_COMPONENT XFLM_ERROR_BASE( 0x0175) // Index definition is missing a key component.
+ #define NE_XFLM_MISSING_DATA_COMPONENT XFLM_ERROR_BASE( 0x0176) // Index definition is missing a data component.
+ #define NE_XFLM_INVALID_INDEX_OPTION XFLM_ERROR_BASE( 0x0177) // Invalid index option specified on index definition.
+ #define NE_XFLM_NO_MORE_ATTRIBUTE_NUMS XFLM_ERROR_BASE( 0x0178) // The highest attribute number has already been used, cannot create more.
+ #define NE_XFLM_MISSING_ELEMENT_NAME XFLM_ERROR_BASE( 0x0179) // Missing element name in XML element definition.
+ #define NE_XFLM_MISSING_ATTRIBUTE_NAME XFLM_ERROR_BASE( 0x017A) // Missing attribute name in XML attribute definition.
+ #define NE_XFLM_MISSING_ELEMENT_NUMBER XFLM_ERROR_BASE( 0x017B) // Missing element number in XML element definition.
+ #define NE_XFLM_MISSING_ATTRIBUTE_NUMBER XFLM_ERROR_BASE( 0x017C) // Missing attribute number from XML attribute definition.
+ #define NE_XFLM_MISSING_INDEX_NAME XFLM_ERROR_BASE( 0x017D) // Missing index name in index definition.
+ #define NE_XFLM_MISSING_INDEX_NUMBER XFLM_ERROR_BASE( 0x017E) // Missing index number in index definition.
+ #define NE_XFLM_MISSING_COLLECTION_NAME XFLM_ERROR_BASE( 0x017F) // Missing collection name in collection definition.
+ #define NE_XFLM_MISSING_COLLECTION_NUMBER XFLM_ERROR_BASE( 0x0180) // Missing collection number in collection definition.
+ #define NE_XFLM_BAD_SEN XFLM_ERROR_BASE( 0x0181) // Invalid simple encoded number.
+ #define NE_XFLM_MISSING_ENCDEF_NAME XFLM_ERROR_BASE( 0x0182) // Missing encryption definition name in encryption definition.
+ #define NE_XFLM_MISSING_ENCDEF_NUMBER XFLM_ERROR_BASE( 0x0183) // Missing encryption definition number in encryption definition.
+ #define NE_XFLM_NO_MORE_INDEX_NUMS XFLM_ERROR_BASE( 0x0184) // The highest index number has already been used, cannot create more.
+ #define NE_XFLM_NO_MORE_COLLECTION_NUMS XFLM_ERROR_BASE( 0x0185) // The highest collection number has already been used, cannot create more.
+ #define NE_XFLM_CANNOT_DEL_ATTRIBUTE XFLM_ERROR_BASE( 0x0186) // Cannot delete an XML attribute definition because it is in use.
+ #define NE_XFLM_TOO_MANY_PENDING_NODES XFLM_ERROR_BASE( 0x0187) // Too many documents in the pending document list.
+ #define NE_XFLM_UNSUPPORTED_INTERFACE XFLM_ERROR_BASE( 0x0188) // Requested COM interface is not supported.
+ #define NE_XFLM_BAD_USE_OF_ELM_ROOT_TAG XFLM_ERROR_BASE( 0x0189) // ELM_ROOT_TAG, if used, must be the sole root component of an index definition.
+ #define NE_XFLM_DUP_SIBLING_IX_COMPONENTS XFLM_ERROR_BASE( 0x018A) // Sibling components in an index definition cannot have the same XML element or attribute number.
+ #define NE_XFLM_RFL_FILE_NOT_FOUND XFLM_ERROR_BASE( 0x018B) // Could not open a roll-forward log file - was not found in the roll-forward log directory.
+ #define NE_XFLM_BAD_RCODE_TABLE XFLM_ERROR_BASE( 0x018C) // The error code tables are incorrect. NOTE: This is an internal error that does not need to be documented.
+ #define NE_XFLM_ILLEGAL_KEY_COMPONENT_NUM XFLM_ERROR_BASE( 0x018D) // Key component of zero in index definition is not allowed.
+ #define NE_XFLM_ILLEGAL_DATA_COMPONENT_NUM XFLM_ERROR_BASE( 0x018E) // Data component of zero in index definition is not allowed.
+ #define NE_XFLM_CLASS_NOT_AVAILABLE XFLM_ERROR_BASE( 0x018F) // Requested COM class is not available.
+ #define NE_XFLM_BUFFER_OVERFLOW XFLM_ERROR_BASE( 0x0190) // Buffer overflow.
+ #define NE_XFLM_ILLEGAL_PREFIX_NUMBER XFLM_ERROR_BASE( 0x0191) // Prefix number specified in prefix definition is illegal.
+ #define NE_XFLM_MISSING_PREFIX_NAME XFLM_ERROR_BASE( 0x0192) // Missing prefix name in prefix definition.
+ #define NE_XFLM_MISSING_PREFIX_NUMBER XFLM_ERROR_BASE( 0x0193) // Missing prefix number in prefix definition.
+ #define NE_XFLM_UNDEFINED_ELEMENT_NAME XFLM_ERROR_BASE( 0x0194) // XML element name+namespace that was specified in index definition or XML document is not defined in dictionary.
+ #define NE_XFLM_UNDEFINED_ATTRIBUTE_NAME XFLM_ERROR_BASE( 0x0195) // XML attribute name+namespace that was specified in index definition or XML document is not defined in dictionary.
+ #define NE_XFLM_DUPLICATE_PREFIX_NAME XFLM_ERROR_BASE( 0x0196) // Prefix name specified in prefix definition is already in use.
+ #define NE_XFLM_KEY_OVERFLOW XFLM_ERROR_BASE( 0x0197) // Generated index key too large.
+ #define NE_XFLM_UNESCAPED_METACHAR XFLM_ERROR_BASE( 0x0198) // Unescaped metacharacter in regular expression.
+ #define NE_XFLM_ILLEGAL_QUANTIFIER XFLM_ERROR_BASE( 0x0199) // Illegal quantifier in regular expression.
+ #define NE_XFLM_UNEXPECTED_END_OF_EXPR XFLM_ERROR_BASE( 0x019A) // Unexpected end of regular expression.
+ #define NE_XFLM_ILLEGAL_MIN_COUNT XFLM_ERROR_BASE( 0x019B) // Illegal minimum count in regular expression quantifier.
+ #define NE_XFLM_ILLEGAL_MAX_COUNT XFLM_ERROR_BASE( 0x019C) // Illegal maximum count in regular expression quantifier.
+ #define NE_XFLM_EMPTY_BRANCH_IN_EXPR XFLM_ERROR_BASE( 0x019D) // Illegal empty branch in a regular expression.
+ #define NE_XFLM_ILLEGAL_RPAREN_IN_EXPR XFLM_ERROR_BASE( 0x019E) // Illegal right paren in a regular expression.
+ #define NE_XFLM_ILLEGAL_CLASS_SUBTRACTION XFLM_ERROR_BASE( 0x019F) // Illegal class subtraction in regular expression.
+ #define NE_XFLM_ILLEGAL_CHAR_RANGE_IN_EXPR XFLM_ERROR_BASE( 0x01A0) // Illegal character range in regular expression.
+ #define NE_XFLM_BAD_BASE64_ENCODING XFLM_ERROR_BASE( 0x01A1) // Illegal character(s) found in a base64 stream.
+ #define NE_XFLM_NAMESPACE_NOT_ALLOWED XFLM_ERROR_BASE( 0x01A2) // Cannot define a namespace for XML attributes whose name begins with "xmlns:" or that is equal to "xmlns"
+ #define NE_XFLM_INVALID_NAMESPACE_DECL XFLM_ERROR_BASE( 0x01A3) // Name for namespace declaration attribute must be "xmlns" or begin with "xmlns:"
+ #define NE_XFLM_ILLEGAL_NAMESPACE_DECL_DATATYPE XFLM_ERROR_BASE( 0x01A4) // Data type for XML attributes that are namespace declarations must be text.
+ #define NE_XFLM_UNEXPECTED_END_OF_INPUT XFLM_ERROR_BASE( 0x01A5) // Encountered unexpected end of input when parsing XPATH expression.
+ #define NE_XFLM_NO_MORE_PREFIX_NUMS XFLM_ERROR_BASE( 0x01A6) // The highest prefix number has already been used, cannot create more.
+ #define NE_XFLM_NO_MORE_ENCDEF_NUMS XFLM_ERROR_BASE( 0x01A7) // The highest encryption definition number has already been used, cannot create more.
+ #define NE_XFLM_COLLECTION_OFFLINE XFLM_ERROR_BASE( 0x01A8) // Collection is encrypted, cannot be accessed while in operating in limited mode.
+ #define NE_XFLM_INVALID_XML XFLM_ERROR_BASE( 0x01A9) // Invalid XML encountered while parsing document.
+ #define NE_XFLM_READ_ONLY XFLM_ERROR_BASE( 0x01AA) // Item is read-only and cannot be updated.
+ #define NE_XFLM_DELETE_NOT_ALLOWED XFLM_ERROR_BASE( 0x01AB) // Item cannot be deleted.
+ #define NE_XFLM_RESET_NEEDED XFLM_ERROR_BASE( 0x01AC) // Used during check operations to indicate we need to reset the view. NOTE: This is an internal error code and should not be documented.
+ #define NE_XFLM_ILLEGAL_REQUIRED_VALUE XFLM_ERROR_BASE( 0x01AD) // An illegal value was specified for the "Required" attribute in an index definition.
+ #define NE_XFLM_ILLEGAL_INDEX_COMPONENT XFLM_ERROR_BASE( 0x01AE) // A leaf index component in an index definition was not marked as a data component or key component.
+ #define NE_XFLM_ILLEGAL_UNIQUE_SUB_ELEMENT_VALUE XFLM_ERROR_BASE( 0x01AF) // Illegal value for the "UniqueSubElements" attribute in an element definition.
+ #define NE_XFLM_DATA_TYPE_MUST_BE_NO_DATA XFLM_ERROR_BASE( 0x01B0) // Data type for an element definition with UniqueSubElements="yes" must be nodata.
+ #define NE_XFLM_ILLEGAL_FLAG XFLM_ERROR_BASE( 0x01B1) // Illegal flag passed to getChildElement method. Must be zero for elements that can have non-unique child elements.
+ #define NE_XFLM_CANNOT_SET_REQUIRED XFLM_ERROR_BASE( 0x01B2) // Cannot set the "Required" attribute on a non-key index component in index definition.
+ #define NE_XFLM_CANNOT_SET_LIMIT XFLM_ERROR_BASE( 0x01B3) // Cannot set the "Limit" attribute on a non-key index component in index definition.
+ #define NE_XFLM_CANNOT_SET_INDEX_ON XFLM_ERROR_BASE( 0x01B4) // Cannot set the "IndexOn" attribute on a non-key index component in index definition.
+ #define NE_XFLM_CANNOT_SET_COMPARE_RULES XFLM_ERROR_BASE( 0x01B5) // Cannot set the "CompareRules" on a non-key index component in index definition.
+ #define NE_XFLM_INPUT_PENDING XFLM_ERROR_BASE( 0x01B6) // Attempt to set a value while an input stream is still open.
+ #define NE_XFLM_INVALID_NODE_TYPE XFLM_ERROR_BASE( 0x01B7) // Bad node type
+ #define NE_XFLM_INVALID_CHILD_ELM_NODE_ID XFLM_ERROR_BASE( 0x01B8) // Attempt to insert a unique child element that has a lower node ID than the parent element
+ #define NE_XFLM_LAST_GENERAL_ERROR XFLM_ERROR_BASE( 0x01B9) // NOTE: This is not an error code - do not document
+
+ /****************************************************************************
+ Desc: DOM Errors
+ ****************************************************************************/
+
+ #define NE_XFLM_FIRST_DOM_ERROR XFLM_ERROR_BASE( 0x1100) // NOTE: This is not an error code - do not document
+ #define NE_XFLM_DOM_HIERARCHY_REQUEST_ERR XFLM_ERROR_BASE( 0x1101) // Attempt to insert a DOM node somewhere it doesn't belong.
+ #define NE_XFLM_DOM_WRONG_DOCUMENT_ERR XFLM_ERROR_BASE( 0x1102) // A DOM node is being used in a different document than the one that created it.
+ #define NE_XFLM_DOM_DATA_ERROR XFLM_ERROR_BASE( 0x1103) // Links between DOM nodes in a document are corrupt.
+ #define NE_XFLM_DOM_NODE_NOT_FOUND XFLM_ERROR_BASE( 0x1104) // The requested DOM node does not exist.
+ #define NE_XFLM_DOM_INVALID_CHILD_TYPE XFLM_ERROR_BASE( 0x1105) // Attempting to insert a child DOM node whose type cannot be inserted as a child node.
+ #define NE_XFLM_DOM_NODE_DELETED XFLM_ERROR_BASE( 0x1106) // DOM node being accessed has been deleted.
+ #define NE_XFLM_DOM_DUPLICATE_ELEMENT XFLM_ERROR_BASE( 0x1107) // Node already has a child element with the given name id - this node's child nodes must all be unique.
+ #define NE_XFLM_LAST_DOM_ERROR XFLM_ERROR_BASE( 0x1108) // NOTE: This is not an error code - do not document
+
+ /****************************************************************************
+ Desc: I/O Errors
+ ****************************************************************************/
+
+ #define NE_XFLM_FIRST_IO_ERROR XFLM_ERROR_BASE( 0x2100) // NOTE: This is not an error code - do not document
+ #define NE_XFLM_IO_ACCESS_DENIED XFLM_ERROR_BASE( 0x2101) // Access to file is denied. Caller is not allowed access to a file.
+ #define NE_XFLM_IO_BAD_FILE_HANDLE XFLM_ERROR_BASE( 0x2102) // Bad file handle or file descriptor.
+ #define NE_XFLM_IO_COPY_ERR XFLM_ERROR_BASE( 0x2103) // Error occurred while copying a file.
+ #define NE_XFLM_IO_DISK_FULL XFLM_ERROR_BASE( 0x2104) // Disk full.
+ #define NE_XFLM_IO_END_OF_FILE XFLM_ERROR_BASE( 0x2105) // End of file reached while reading from the file.
+ #define NE_XFLM_IO_OPEN_ERR XFLM_ERROR_BASE( 0x2106) // Error while opening the file.
+ #define NE_XFLM_IO_SEEK_ERR XFLM_ERROR_BASE( 0x2107) // Error occurred while positioning (seeking) within a file.
+ #define NE_XFLM_IO_DIRECTORY_ERR XFLM_ERROR_BASE( 0x2108) // Error occurred while accessing or deleting a directory.
+ #define NE_XFLM_IO_PATH_NOT_FOUND XFLM_ERROR_BASE( 0x2109) // File not found.
+ #define NE_XFLM_IO_TOO_MANY_OPEN_FILES XFLM_ERROR_BASE( 0x210A) // Too many files open.
+ #define NE_XFLM_IO_PATH_TOO_LONG XFLM_ERROR_BASE( 0x210B) // File name too long.
+ #define NE_XFLM_IO_NO_MORE_FILES XFLM_ERROR_BASE( 0x210C) // No more files in directory.
+ #define NE_XFLM_IO_DELETING_FILE XFLM_ERROR_BASE( 0x210D) // Error occurred while deleting a file.
+ #define NE_XFLM_IO_FILE_LOCK_ERR XFLM_ERROR_BASE( 0x210E) // Error attempting to acquire a byte-range lock on a file.
+ #define NE_XFLM_IO_FILE_UNLOCK_ERR XFLM_ERROR_BASE( 0x210F) // Error attempting to release a byte-range lock on a file.
+ #define NE_XFLM_IO_PATH_CREATE_FAILURE XFLM_ERROR_BASE( 0x2110) // Error occurred while attempting to create a directory or sub-directory.
+ #define NE_XFLM_IO_RENAME_FAILURE XFLM_ERROR_BASE( 0x2111) // Error occurred while renaming a file.
+ #define NE_XFLM_IO_INVALID_PASSWORD XFLM_ERROR_BASE( 0x2112) // Invalid file password.
+ #define NE_XFLM_SETTING_UP_FOR_READ XFLM_ERROR_BASE( 0x2113) // Error occurred while setting up to perform a file read operation.
+ #define NE_XFLM_SETTING_UP_FOR_WRITE XFLM_ERROR_BASE( 0x2114) // Error occurred while setting up to perform a file write operation.
+ #define NE_XFLM_IO_CANNOT_REDUCE_PATH XFLM_ERROR_BASE( 0x2115) // Cannot reduce file name into more components.
+ #define NE_XFLM_INITIALIZING_IO_SYSTEM XFLM_ERROR_BASE( 0x2116) // Error occurred while setting up to access the file system.
+ #define NE_XFLM_FLUSHING_FILE XFLM_ERROR_BASE( 0x2117) // Error occurred while flushing file data buffers to disk.
+ #define NE_XFLM_IO_INVALID_FILENAME XFLM_ERROR_BASE( 0x2118) // Invalid file name.
+ #define NE_XFLM_IO_CONNECT_ERROR XFLM_ERROR_BASE( 0x2119) // Error connecting to a remote network resource.
+ #define NE_XFLM_OPENING_FILE XFLM_ERROR_BASE( 0x211A) // Unexpected error occurred while opening a file.
+ #define NE_XFLM_DIRECT_OPENING_FILE XFLM_ERROR_BASE( 0x211B) // Unexpected error occurred while opening a file in direct access mode.
+ #define NE_XFLM_CREATING_FILE XFLM_ERROR_BASE( 0x211C) // Unexpected error occurred while creating a file.
+ #define NE_XFLM_DIRECT_CREATING_FILE XFLM_ERROR_BASE( 0x211D) // Unexpected error occurred while creating a file in direct access mode.
+ #define NE_XFLM_READING_FILE XFLM_ERROR_BASE( 0x211E) // Unexpected error occurred while reading a file.
+ #define NE_XFLM_DIRECT_READING_FILE XFLM_ERROR_BASE( 0x211F) // Unexpected error occurred while reading a file in direct access mode.
+ #define NE_XFLM_WRITING_FILE XFLM_ERROR_BASE( 0x2120) // Unexpected error occurred while writing to a file.
+ #define NE_XFLM_DIRECT_WRITING_FILE XFLM_ERROR_BASE( 0x2121) // Unexpected error occurred while writing a file in direct access mode.
+ #define NE_XFLM_POSITIONING_IN_FILE XFLM_ERROR_BASE( 0x2122) // Unexpected error occurred while positioning within a file.
+ #define NE_XFLM_GETTING_FILE_SIZE XFLM_ERROR_BASE( 0x2123) // Unexpected error occurred while getting a file's size.
+ #define NE_XFLM_TRUNCATING_FILE XFLM_ERROR_BASE( 0x2124) // Unexpected error occurred while truncating a file.
+ #define NE_XFLM_PARSING_FILE_NAME XFLM_ERROR_BASE( 0x2125) // Unexpected error occurred while parsing a file's name.
+ #define NE_XFLM_CLOSING_FILE XFLM_ERROR_BASE( 0x2126) // Unexpected error occurred while closing a file.
+ #define NE_XFLM_GETTING_FILE_INFO XFLM_ERROR_BASE( 0x2127) // Unexpected error occurred while getting information about a file.
+ #define NE_XFLM_EXPANDING_FILE XFLM_ERROR_BASE( 0x2128) // Unexpected error occurred while expanding a file.
+ #define NE_XFLM_CHECKING_FILE_EXISTENCE XFLM_ERROR_BASE( 0x2129) // Unexpected error occurred while checking to see if a file exists.
+ #define NE_XFLM_RENAMING_FILE XFLM_ERROR_BASE( 0x212A) // Unexpected error occurred while renaming a file.
+ #define NE_XFLM_SETTING_FILE_INFO XFLM_ERROR_BASE( 0x212B) // Unexpected error occurred while setting a file's information.
+ #define NE_XFLM_LAST_IO_ERROR XFLM_ERROR_BASE( 0x212C) // NOTE: This is not an error code - do not document
+
+ /****************************************************************************
+ Desc: Network Errors
+ ****************************************************************************/
+
+ #define NE_XFLM_FIRST_NET_ERROR XFLM_ERROR_BASE( 0x3100) // NOTE: This is not an error code - do not document
+ #define NE_XFLM_SVR_NOIP_ADDR XFLM_ERROR_BASE( 0x3101) // IP address not found
+ #define NE_XFLM_SVR_SOCK_FAIL XFLM_ERROR_BASE( 0x3102) // IP socket failure
+ #define NE_XFLM_SVR_CONNECT_FAIL XFLM_ERROR_BASE( 0x3103) // TCP/IP connection failure
+ #define NE_XFLM_SVR_BIND_FAIL XFLM_ERROR_BASE( 0x3104) // The TCP/IP services on your system may not be configured or installed. If this POA is not to run Client/Server, use the /notcpip startup switch or disable TCP/IP through the NWADMIN snapin
+ #define NE_XFLM_SVR_LISTEN_FAIL XFLM_ERROR_BASE( 0x3105) // TCP/IP listen failed
+ #define NE_XFLM_SVR_ACCEPT_FAIL XFLM_ERROR_BASE( 0x3106) // TCP/IP accept failed
+ #define NE_XFLM_SVR_SELECT_ERR XFLM_ERROR_BASE( 0x3107) // TCP/IP select failed
+ #define NE_XFLM_SVR_SOCKOPT_FAIL XFLM_ERROR_BASE( 0x3108) // TCP/IP socket operation failed
+ #define NE_XFLM_SVR_DISCONNECT XFLM_ERROR_BASE( 0x3109) // TCP/IP disconnected
+ #define NE_XFLM_SVR_READ_FAIL XFLM_ERROR_BASE( 0x310A) // TCP/IP read failed
+ #define NE_XFLM_SVR_WRT_FAIL XFLM_ERROR_BASE( 0x310B) // TCP/IP write failed
+ #define NE_XFLM_SVR_READ_TIMEOUT XFLM_ERROR_BASE( 0x310C) // TCP/IP read timeout
+ #define NE_XFLM_SVR_WRT_TIMEOUT XFLM_ERROR_BASE( 0x310D) // TCP/IP write timeout
+ #define NE_XFLM_SVR_ALREADY_CLOSED XFLM_ERROR_BASE( 0x310E) // Connection already closed
+ #define NE_XFLM_LAST_NET_ERROR XFLM_ERROR_BASE( 0x310F) // NOTE: This is not an error code - do not document
+
+ /****************************************************************************
+ Desc: Query Errors
+ ****************************************************************************/
+
+ #define NE_XFLM_FIRST_QUERY_ERROR XFLM_ERROR_BASE( 0x4100) // NOTE: This is not an error code - do not document
+ #define NE_XFLM_Q_UNMATCHED_RPAREN XFLM_ERROR_BASE( 0x4101) // Query setup error: Unmatched right paren.
+ #define NE_XFLM_Q_UNEXPECTED_LPAREN XFLM_ERROR_BASE( 0x4102) // Query setup error: Unexpected left paren.
+ #define NE_XFLM_Q_UNEXPECTED_RPAREN XFLM_ERROR_BASE( 0x4103) // Query setup error: Unexpected right paren.
+ #define NE_XFLM_Q_EXPECTING_OPERAND XFLM_ERROR_BASE( 0x4104) // Query setup error: Expecting an operand.
+ #define NE_XFLM_Q_EXPECTING_OPERATOR XFLM_ERROR_BASE( 0x4105) // Query setup error: Expecting an operator.
+ #define NE_XFLM_Q_UNEXPECTED_COMMA XFLM_ERROR_BASE( 0x4106) // Query setup error: Unexpected comma.
+ #define NE_XFLM_Q_EXPECTING_LPAREN XFLM_ERROR_BASE( 0x4107) // Query setup error: Expecting a left paren.
+ #define NE_XFLM_Q_UNEXPECTED_VALUE XFLM_ERROR_BASE( 0x4108) // Query setup error: Unexpected value.
+ #define NE_XFLM_Q_INVALID_NUM_FUNC_ARGS XFLM_ERROR_BASE( 0x4109) // Query setup error: Invalid number of arguments for a function.
+ #define NE_XFLM_Q_UNEXPECTED_XPATH_COMPONENT XFLM_ERROR_BASE( 0x410A) // Query setup error: Unexpected XPATH componenent.
+ #define NE_XFLM_Q_ILLEGAL_LBRACKET XFLM_ERROR_BASE( 0x410B) // Query setup error: Illegal left bracket ([).
+ #define NE_XFLM_Q_ILLEGAL_RBRACKET XFLM_ERROR_BASE( 0x410C) // Query setup error: Illegal right bracket (]).
+ #define NE_XFLM_Q_ILLEGAL_OPERAND XFLM_ERROR_BASE( 0x410D) // Query setup error: Operand for some operator is not valid for that operator type.
+ #define NE_XFLM_Q_ALREADY_OPTIMIZED XFLM_ERROR_BASE( 0x410E) // Operation is illegal, cannot change certain things after query has been optimized.
+ #define NE_XFLM_Q_MISMATCHED_DB XFLM_ERROR_BASE( 0x410F) // Database handle passed in does not match database associated with query.
+ #define NE_XFLM_Q_ILLEGAL_OPERATOR XFLM_ERROR_BASE( 0x4110) // Illegal operator - cannot pass this operator into the addOperator method.
+ #define NE_XFLM_Q_ILLEGAL_COMPARE_RULES XFLM_ERROR_BASE( 0x4111) // Illegal combination of comparison rules passed to addOperator method.
+ #define NE_XFLM_Q_INCOMPLETE_QUERY_EXPR XFLM_ERROR_BASE( 0x4112) // Query setup error: Query expression is incomplete.
+ #define NE_XFLM_Q_NOT_POSITIONED XFLM_ERROR_BASE( 0x4113) // Query not positioned due to previous error, cannot call getNext, getPrev, or getCurrent
+ #define NE_XFLM_Q_INVALID_NODE_ID_VALUE XFLM_ERROR_BASE( 0x4114) // Query setup error: Invalid type of value constant used for node id value comparison.
+ #define NE_XFLM_Q_INVALID_META_DATA_TYPE XFLM_ERROR_BASE( 0x4115) // Query setup error: Invalid meta data type specified.
+ #define NE_XFLM_Q_NEW_EXPR_NOT_ALLOWED XFLM_ERROR_BASE( 0x4116) // Query setup error: Cannot add an expression to an XPATH component after having added an expression that tests context position.
+ #define NE_XFLM_Q_INVALID_CONTEXT_POS XFLM_ERROR_BASE( 0x4117) // Invalid context position value encountered - must be a positive number.
+ #define NE_XFLM_Q_INVALID_FUNC_ARG XFLM_ERROR_BASE( 0x4118) // Query setup error: Parameter to user-defined functions must be a single XPATH only.
+ #define NE_XFLM_Q_EXPECTING_RPAREN XFLM_ERROR_BASE( 0x4119) // Query setup error: Expecting right paren.
+ #define NE_XFLM_Q_TOO_LATE_TO_ADD_SORT_KEYS XFLM_ERROR_BASE( 0x411A) // Query setup error: Cannot add sort keys after having called getFirst, getLast, getNext, or getPrev.
+ #define NE_XFLM_Q_INVALID_SORT_KEY_COMPONENT XFLM_ERROR_BASE( 0x411B) // Query setup error: Invalid sort key component number specified in query.
+ #define NE_XFLM_Q_DUPLICATE_SORT_KEY_COMPONENT XFLM_ERROR_BASE( 0x411C) // Query setup error: Duplicate sort key component number specified in query.
+ #define NE_XFLM_Q_MISSING_SORT_KEY_COMPONENT XFLM_ERROR_BASE( 0x411D) // Query setup error: Missing sort key component number in sort keys that were specified for query.
+ #define NE_XFLM_Q_NO_SORT_KEY_COMPONENTS_SPECIFIED XFLM_ERROR_BASE( 0x411E) // Query setup error: addSortKeys was called, but no sort key components were specified.
+ #define NE_XFLM_Q_SORT_KEY_CONTEXT_MUST_BE_ELEMENT XFLM_ERROR_BASE( 0x411F) // Query setup error: A sort key context cannot be an XML attribute.
+ #define NE_XFLM_Q_INVALID_ELEMENT_NUM_IN_SORT_KEYS XFLM_ERROR_BASE( 0x4120) // Query setup error: The XML element number specified for a sort key in a query is invalid - no element definition in the dictionary.
+ #define NE_XFLM_Q_INVALID_ATTR_NUM_IN_SORT_KEYS XFLM_ERROR_BASE( 0x4121) // Query setup error: The XML attribute number specified for a sort key in a query is invalid - no attribute definition in the dictionary.
+ #define NE_XFLM_Q_NON_POSITIONABLE_QUERY XFLM_ERROR_BASE( 0x4122) // Attempt is being made to position in a query that is not positionable.
+ #define NE_XFLM_Q_INVALID_POSITION XFLM_ERROR_BASE( 0x4123) // Attempt is being made to position to an invalid position in the result set.
+ #define NE_XFLM_LAST_QUERY_ERROR XFLM_ERROR_BASE( 0x4124) // NOTE: This is not an error code - do not document
+
+ /****************************************************************************
+ Desc: Stream Errors
+ ****************************************************************************/
+
+ #define NE_XFLM_FIRST_STREAM_ERROR XFLM_ERROR_BASE( 0x6100) // NOTE: This is not an error code - do not document
+ #define NE_XFLM_STREAM_DECOMPRESS_ERROR XFLM_ERROR_BASE( 0x6101) // Error decompressing data stream.
+ #define NE_XFLM_STREAM_NOT_COMPRESSED XFLM_ERROR_BASE( 0x6102) // Attempting to decompress a data stream that is not compressed.
+ #define NE_XFLM_STREAM_TOO_MANY_FILES XFLM_ERROR_BASE( 0x6103) // Too many files in input stream.
+ #define NE_XFLM_LAST_STREAM_ERROR XFLM_ERROR_BASE( 0x6104) // NOTE: This is not an error code - do not document
+
+ /****************************************************************************
+ Desc: NICI / Encryption Errors
+ ****************************************************************************/
+
+ #define NE_XFLM_FIRST_NICI_ERROR XFLM_ERROR_BASE( 0x7100) // NOTE: This is not an error code - do not document
+ #define NE_XFLM_NICI_CONTEXT XFLM_ERROR_BASE( 0x7101) // Error occurred while creating NICI context for encryption/decryption.
+ #define NE_XFLM_NICI_ATTRIBUTE_VALUE XFLM_ERROR_BASE( 0x7102) // Error occurred while accessing an attribute on a NICI encryption key.
+ #define NE_XFLM_NICI_BAD_ATTRIBUTE XFLM_ERROR_BASE( 0x7103) // Value retrieved from an attribute on a NICI encryption key was bad.
+ #define NE_XFLM_NICI_WRAPKEY_FAILED XFLM_ERROR_BASE( 0x7104) // Error occurred while wrapping a NICI encryption key in another NICI encryption key.
+ #define NE_XFLM_NICI_UNWRAPKEY_FAILED XFLM_ERROR_BASE( 0x7105) // Error occurred while unwrapping a NICI encryption key that is wrapped in another NICI encryption key.
+ #define NE_XFLM_NICI_INVALID_ALGORITHM XFLM_ERROR_BASE( 0x7106) // Attempt to use invalid NICI encryption algorithm.
+ #define NE_XFLM_NICI_GENKEY_FAILED XFLM_ERROR_BASE( 0x7107) // Error occurred while attempting to generate a NICI encryption key.
+ #define NE_XFLM_NICI_BAD_RANDOM XFLM_ERROR_BASE( 0x7108) // Error occurred while generating random data using NICI.
+ #define NE_XFLM_PBE_ENCRYPT_FAILED XFLM_ERROR_BASE( 0x7109) // Error occurred while attempting to wrap a NICI encryption key in a password.
+ #define NE_XFLM_PBE_DECRYPT_FAILED XFLM_ERROR_BASE( 0x710A) // Error occurred while attempting to unwrap a NICI encryption key that was previously wrapped in a password.
+ #define NE_XFLM_DIGEST_INIT_FAILED XFLM_ERROR_BASE( 0x710B) // Error occurred while attempting to initialize the NICI digest functionality.
+ #define NE_XFLM_DIGEST_FAILED XFLM_ERROR_BASE( 0x710C) // Error occurred while attempting to create a NICI digest.
+ #define NE_XFLM_INJECT_KEY_FAILED XFLM_ERROR_BASE( 0x710D) // Error occurred while attempting to inject an encryption key into NICI.
+ #define NE_XFLM_NICI_FIND_INIT XFLM_ERROR_BASE( 0x710E) // Error occurred while attempting to initialize NICI to find information on a NICI encryption key.
+ #define NE_XFLM_NICI_FIND_OBJECT XFLM_ERROR_BASE( 0x710F) // Error occurred while attempting to find information on a NICI encryption key.
+ #define NE_XFLM_NICI_KEY_NOT_FOUND XFLM_ERROR_BASE( 0x7110) // Could not find the NICI encryption key or information on the NICI encryption key.
+ #define NE_XFLM_NICI_ENC_INIT_FAILED XFLM_ERROR_BASE( 0x7111) // Error occurred while initializing NICI to encrypt data.
+ #define NE_XFLM_NICI_ENCRYPT_FAILED XFLM_ERROR_BASE( 0x7112) // Error occurred while encrypting data.
+ #define NE_XFLM_NICI_DECRYPT_INIT_FAILED XFLM_ERROR_BASE( 0x7113) // Error occurred while initializing NICI to decrypt data.
+ #define NE_XFLM_NICI_DECRYPT_FAILED XFLM_ERROR_BASE( 0x7114) // Error occurred while decrypting data.
+ #define NE_XFLM_NICI_WRAPKEY_NOT_FOUND XFLM_ERROR_BASE( 0x7115) // Could not find the NICI encryption key used to wrap another NICI encryption key.
+ #define NE_XFLM_NOT_EXPECTING_PASSWORD XFLM_ERROR_BASE( 0x7116) // Password supplied when none was expected.
+ #define NE_XFLM_EXPECTING_PASSWORD XFLM_ERROR_BASE( 0x7117) // No password supplied when one was required.
+ #define NE_XFLM_EXTRACT_KEY_FAILED XFLM_ERROR_BASE( 0x7118) // Error occurred while attempting to extract a NICI encryption key.
+ #define NE_XFLM_NICI_INIT_FAILED XFLM_ERROR_BASE( 0x7119) // Error occurred while initializing NICI.
+ #define NE_XFLM_BAD_ENCKEY_SIZE XFLM_ERROR_BASE( 0x711A) // Bad encryption key size found in roll-forward log packet.
+ #define NE_XFLM_ENCRYPTION_UNAVAILABLE XFLM_ERROR_BASE( 0x711B) // Attempt was made to encrypt data when NICI is unavailable.
+ #define NE_XFLM_LAST_NICI_ERROR XFLM_ERROR_BASE( 0x711C) // NOTE: This is not an error code - do not document
+
+ /****************************************************************************
+ Dictionary Document Definitions - below are comments that document valid
+ dictionary objects and their structure.
+ ****************************************************************************/
+
+ /*
+ Element Definition
+ Desc: The XML syntax given below is used to define an element in the
+ dictionary collection.
+
+
+
+ Notes:
+
+ 1) If the xflaim:type attribute is missing, any type of data may be stored on the attribute.
+ 2) If the xflaim:State attribute is missing, the attribute's state is, by default, active.
+
+ */
+
+ /*
+ Attribute Definition
+ Desc: The XML syntax given below is used to define an attribute in the
+ dictionary collection.
+
+
+
+ Notes:
+
+ 1) If the xflaim:type attribute is missing, any type of data may be stored on the attribute.
+ 2) If the xflaim:State attribute is missing, the attribute's state is, by default, active.
+
+ */
+
+ /*
+ Collection Definition
+ Desc: The XML syntax given below is used to define a collection in the
+ dictionary collection.
+
+
+ */
+
+ /*
+ Prefix Definition
+ Desc: The XML syntax given below is used to define a namespace prefix in the
+ dictionary collection.
+
+
+ */
+
+ /*
+ Index Definition
+ Desc: The XML syntax given below is used to define an index in the
+ dictionary collection.
+
+
+
+ ...
+
+ NOTE: The IndexOn, Required, Limit, and CompareRules attributes can only be set for
+ key components - i.e., when the KeyComponent attribute is also specified.
+
+ xflaim:ElementComponent elements may have one or more xflaim:ElementComponent
+ or xflaim:AttributeComponent sub-elements.
+
+ ...
+
+ NOTE: The IndexOn, Required, Limit, and CompareRules attributes can only be set for
+ key components - i.e., when the KeyComponent attribute is also specified.
+
+ xflaim:AttributeComponent elements must be subordinate to a xflaim:ElementComponent
+ element. They may not have any elements subordinate to them.
+
+
+
+ Notes:
+
+ 1) It is not valid to specify both an xflaim:CollectionName and an xflaim:CollectionNumber
+ unless they refer to the same collection. Only one of the two is needed. If both
+ are omitted, the collection that will be indexed is the default data collection.
+ 2) Valid values for the IndexOptions attribute are any combination of the following:
+ a) abspos - enables storing of absolute positioning information
+ 3) For the xflaim:ElementComponent and xflaim:AttributeComponent, it is not
+ valid to have both an xflaim:DictNumber and an xflaim:name attribute, unless they both specify the
+ same element or attribute. One or the other must be specified.
+ 4) If the xflaim:type attribute is specified on the xflaim:ElementComponent or xflaim:AttributeComponent
+ element, it indicates what type the component is to be coerced to for indexing purposes.
+ This is only relevant if the xflaim:IndexOn attribute is set to "value". For example, if a
+ type of integer is specified, then the value will be coerced to an integer before putting it
+ into the index. If the value were a string of "123" it would be coerced to an integer value of
+ 123 for indexing purposes. If the xflaim:type attribute is omitted, then the element or attribute
+ specified by the component must have a type specified in the element or attribute definition,
+ and that is the type that will be used.
+ 5) If the xflaim:Required attribute is missing from the xflaim:ElementComponent or xflaim:AttributeComponent
+ element, or does not have a value of "yes", "on", "1", or "true", the index component is assumed to
+ be optional.
+ 6) The xflaim:CompareRules attribute specifies special comparison rules for the index component if the
+ element or attribute is of type xflaim:string. Rules may be any combination of the following key words:
+
+ a) caseinsensitive - don't compare case
+ b) whitespaceasspace - treat whitespace as space (must be applied before minspaces,
+ ignoreleadingspaces, ignoretrailingspaces, or nospaces)
+ c) minspaces - compress out extra spaces
+ d) ignoreleadingspaces - remove leading spaces
+ e) ignoretrailingspaces - remove trailing spaces
+ f) nospaces - remove all whitespace
+ g) nounderscore - change all underscores to spaces (must be applied before minspaces,
+ ignoreleadingspaces, ignoretrailingspaces, or nospaces)
+ h) nodashes - remove all dashes.
+ i) sortdescending - sort in descending order.
+ j) sortmissinghigh - sort missing values high.
+
+ Note that if the xflaim:CompareRules attribute is omitted, the default comparison rule for xflaim:string
+ values is case sensitive. Note also that the xflaim:CompareRules attribute is ignored if the
+ xflaim:IndexOn attribute is set to "presence". In that case, comparison rules are irrelevant.
+ */
+
+
+ /*
+ EncDef Definition
+ Desc: The XML syntax given below is used to define an encryption definition in the
+ dictionary collection.
+
+
+
+ Notes:
+
+ 1) Only AES and DES3 (Triple DES) encryption algorithms are supported
+
+ 2) AES supports three key lengths: 256, 192 and 128 bits in length.
+
+ 3) DES3 keys are 168 bits in length.
+
+ 4. The xflaim:keySize attribute is optional. If it is not specified, the maximum
+ key size allowed for the chosen algorithm will be selected. For AES, the key size
+ chosen will depend on what is supported by the NICI installation.
+
+ */
+
+
+#endif // XFLAIM_H