289 lines
11 KiB
C
289 lines
11 KiB
C
//***************************************************************************
|
|
//
|
|
// (c) 1999-2001 by Microsoft Corp. All Rights Reserved.
|
|
//
|
|
// ESEUTILS.h
|
|
//
|
|
// cvadai 6-May-1999 created.
|
|
//
|
|
//***************************************************************************
|
|
|
|
#ifndef _ESEUTILS_H_
|
|
#define _ESEUTILS_H_
|
|
|
|
#include <ese.h>
|
|
|
|
#define ESE_FLAG_NULL 0x10000000
|
|
|
|
void FreeBstr(BSTR * ppStr);
|
|
|
|
typedef struct tagOBJECTKEY
|
|
{
|
|
BSTR sObjectKey;
|
|
tagOBJECTKEY() {sObjectKey = NULL;};
|
|
// ~tagOBJECTKEY() {Clear();};
|
|
void Clear() {FreeBstr(&sObjectKey);};
|
|
} OBJECTKEY;
|
|
|
|
typedef struct tagWMIOBJECTID
|
|
{
|
|
__int64 dObjectId;
|
|
} WMIOBJECTID;
|
|
|
|
typedef struct tagWMIPROPERTYID
|
|
{
|
|
DWORD dwPropertyId;
|
|
} WMIPROPERTYID;
|
|
|
|
typedef struct tagOBJECTMAP
|
|
{
|
|
__int64 dObjectId;
|
|
__int64 dClassId;
|
|
BSTR sObjectPath;
|
|
DWORD iObjectState;
|
|
DWORD iRefCount;
|
|
DWORD iObjectFlags;
|
|
__int64 dObjectScopeId;
|
|
BSTR sObjectKey;
|
|
tagOBJECTMAP() {sObjectKey = NULL; sObjectPath = NULL;};
|
|
// ~tagOBJECTMAP() { Clear();};
|
|
void Clear() {FreeBstr(&sObjectKey); FreeBstr(&sObjectPath);};
|
|
} OBJECTMAP;
|
|
|
|
typedef struct tagSCOPEMAP
|
|
{
|
|
SQL_ID dObjectId;
|
|
BSTR sScopePath;
|
|
SQL_ID dParentId;
|
|
tagSCOPEMAP() {sScopePath = NULL; dParentId = 0;};
|
|
void Clear() { FreeBstr(&sScopePath); dParentId = 0;};
|
|
} SCOPEMAP;
|
|
|
|
|
|
typedef struct tagCLASSMAP
|
|
{
|
|
__int64 dClassId;
|
|
BSTR sClassName;
|
|
__int64 dSuperClassId;
|
|
__int64 dDynastyId;
|
|
BYTE *pClassBuffer;
|
|
DWORD dwBufferLen;
|
|
tagCLASSMAP() {sClassName = NULL, pClassBuffer = NULL, dwBufferLen = 0;};
|
|
// ~tagCLASSMAP() {Clear();};
|
|
void Clear() { FreeBstr(&sClassName); dwBufferLen = 0; delete pClassBuffer; pClassBuffer = NULL;};
|
|
} CLASSMAP;
|
|
|
|
typedef struct tagPROPERTYMAP
|
|
{
|
|
DWORD iPropertyId;
|
|
__int64 dClassId;
|
|
DWORD iStorageTypeId;
|
|
DWORD iCIMTypeId;
|
|
BSTR sPropertyName;
|
|
DWORD iFlags;
|
|
tagPROPERTYMAP() {sPropertyName = NULL;};
|
|
// ~tagPROPERTYMAP() {Clear();};
|
|
void Clear() {FreeBstr(&sPropertyName);};
|
|
|
|
} PROPERTYMAP;
|
|
|
|
typedef struct tagCLASSKEYS
|
|
{
|
|
__int64 dClassId;
|
|
DWORD iPropertyId;
|
|
|
|
} CLASSKEYS;
|
|
|
|
typedef struct tagREFERENCEPROPERTIES
|
|
{
|
|
__int64 dClassId;
|
|
DWORD iPropertyId;
|
|
__int64 dRefClassId;
|
|
|
|
} REFERENCEPROPERTIES;
|
|
|
|
typedef struct tagCLASSIMAGES
|
|
{
|
|
__int64 dObjectId;
|
|
int iPropertyId;
|
|
DWORD iArrayPos;
|
|
BYTE *pBuffer;
|
|
long dwBufferLen;
|
|
|
|
tagCLASSIMAGES() {pBuffer = NULL; dwBufferLen = 0;};
|
|
// ~tagCLASSIMAGES() { Clear();};
|
|
void Clear() { delete pBuffer; pBuffer = NULL; dwBufferLen = 0;};
|
|
} CLASSIMAGES;
|
|
|
|
|
|
typedef struct tagCLASSDATA
|
|
{
|
|
__int64 dObjectId;
|
|
DWORD iPropertyId;
|
|
DWORD iArrayPos;
|
|
DWORD iQfrPos;
|
|
__int64 dClassId;
|
|
BSTR sPropertyStringValue;
|
|
__int64 dPropertyNumericValue;
|
|
double rPropertyRealValue;
|
|
DWORD iFlags;
|
|
__int64 dRefId;
|
|
__int64 dRefClassId;
|
|
BYTE * pBuffer;
|
|
DWORD dwBufferLen;
|
|
tagCLASSDATA() { sPropertyStringValue = NULL; pBuffer = NULL; dwBufferLen = 0;};
|
|
// ~tagCLASSDATA() {Clear();};
|
|
void Clear() {FreeBstr(&sPropertyStringValue); delete pBuffer; pBuffer = NULL; dwBufferLen = 0;};
|
|
void operator= (tagCLASSDATA&cd)
|
|
{
|
|
Clear();
|
|
dObjectId = cd.dObjectId;
|
|
iPropertyId = cd.iPropertyId;
|
|
iArrayPos = cd.iArrayPos;
|
|
iQfrPos = cd.iQfrPos;
|
|
dClassId = cd.dClassId;
|
|
if (cd.sPropertyStringValue)
|
|
sPropertyStringValue = SysAllocString(cd.sPropertyStringValue);
|
|
dPropertyNumericValue = cd.dPropertyNumericValue;
|
|
rPropertyRealValue = cd.rPropertyRealValue;
|
|
iFlags = cd.iFlags;
|
|
dRefId = cd.dRefId;
|
|
dRefClassId = cd.dRefClassId;
|
|
if (cd.dwBufferLen)
|
|
{
|
|
pBuffer = new BYTE[cd.dwBufferLen+2];
|
|
if (pBuffer)
|
|
{
|
|
memcpy(pBuffer, cd.pBuffer, cd.dwBufferLen);
|
|
pBuffer[cd.dwBufferLen] = L'\0';
|
|
pBuffer[cd.dwBufferLen+1] = L'\0';
|
|
dwBufferLen = cd.dwBufferLen;
|
|
}
|
|
}
|
|
}
|
|
void Copy (tagCLASSIMAGES &cd)
|
|
{
|
|
Clear();
|
|
dObjectId = cd.dObjectId;
|
|
iPropertyId = cd.iPropertyId;
|
|
iArrayPos = cd.iArrayPos;
|
|
iFlags = 0;
|
|
if (cd.dwBufferLen)
|
|
{
|
|
pBuffer = new BYTE[cd.dwBufferLen+2];
|
|
if (pBuffer)
|
|
{
|
|
memcpy(pBuffer, cd.pBuffer, cd.dwBufferLen);
|
|
pBuffer[cd.dwBufferLen] = L'\0';
|
|
pBuffer[cd.dwBufferLen+1] = L'\0';
|
|
dwBufferLen = cd.dwBufferLen;
|
|
}
|
|
}
|
|
|
|
}
|
|
} CLASSDATA;
|
|
|
|
typedef struct tagINDEXDATA
|
|
{
|
|
BSTR sValue;
|
|
__int64 dValue;
|
|
double rValue;
|
|
__int64 dObjectId;
|
|
DWORD iPropertyId;
|
|
DWORD iArrayPos;
|
|
tagINDEXDATA() {sValue = NULL;}
|
|
// ~tagINDEXDATA() { Clear();};
|
|
void Clear() { FreeBstr(&sValue);};
|
|
} INDEXDATA;
|
|
|
|
typedef struct tagCONTAINEROBJ
|
|
{
|
|
SQL_ID dContainerId;
|
|
SQL_ID dContaineeId;
|
|
void Clear() {};
|
|
|
|
} CONTAINEROBJ;
|
|
|
|
typedef struct tagAUTODELETE
|
|
{
|
|
SQL_ID dObjectId;
|
|
|
|
} AUTODELETE;
|
|
|
|
|
|
HRESULT UpdateDBVersion (CSQLConnection *_pConn, DWORD iVersion);
|
|
|
|
HRESULT SetupObjectMapAccessor (CSQLConnection *pConn);
|
|
HRESULT SetupClassMapAccessor (CSQLConnection *pConn);
|
|
HRESULT SetupPropertyMapAccessor (CSQLConnection *pConn);
|
|
HRESULT SetupClassKeysAccessor (CSQLConnection *_pConn);
|
|
HRESULT SetupClassDataAccessor (CSQLConnection *pConn);
|
|
HRESULT SetupIndexDataAccessor (CSQLConnection *pConn, DWORD dwStorage, DWORD &dwPos, LPWSTR * lpTableName = NULL);
|
|
HRESULT InsertObjectMap(CSQLConnection *pConn, SQL_ID dObjectId, LPCWSTR lpKey,
|
|
DWORD iState, LPCWSTR lpObjectPath, SQL_ID dScopeID, DWORD iClassFlags,
|
|
DWORD iRefCount, SQL_ID dClassId, BOOL bInsert = TRUE);
|
|
HRESULT InsertClassMap(CSQLConnection *pConn, SQL_ID dClassId, LPCWSTR lpClassName, SQL_ID dSuperClassId, SQL_ID dDynasty,
|
|
BYTE *pBuff, DWORD dwBufferLen, BOOL bInsert = TRUE);
|
|
HRESULT InsertPropertyMap (CSQLConnection *pConn, DWORD &iPropID, SQL_ID dClassId, DWORD iStorageTypeId,
|
|
DWORD iCIMTypeId, LPCWSTR lpPropName, DWORD iFlags, BOOL bInsert = TRUE);
|
|
HRESULT InsertClassKeys (CSQLConnection *_pConn, SQL_ID dClassId, DWORD dwPropertyId,
|
|
BOOL bInsert = TRUE);
|
|
HRESULT InsertClassData_Internal (CSQLConnection *pConn, SQL_ID dObjectId, DWORD iPropID, DWORD iArrayPos, DWORD iQfrPos,
|
|
SQL_ID dClassId, LPCWSTR lpStringValue, SQL_ID dNumericValue, double fRealValue,
|
|
DWORD iFlags, SQL_ID dRefId, SQL_ID dRefClassId, BOOL bIsNull=FALSE);
|
|
HRESULT InsertIndexData (CSQLConnection *pConn, SQL_ID dObjectId, DWORD iPropID, DWORD iArrayPos,
|
|
LPWSTR lpValue, SQL_ID dValue, double rValue, DWORD dwStorage);
|
|
HRESULT GetObjectMapData (CSQLConnection *pConn,JET_SESID session, JET_TABLEID tableid,
|
|
OBJECTMAP &oj);
|
|
HRESULT GetFirst_ObjectMap (CSQLConnection *_pConn, SQL_ID dObjectId, OBJECTMAP &oj);
|
|
HRESULT GetFirst_ObjectMapByClass (CSQLConnection *_pConn, SQL_ID dClassId, OBJECTMAP &oj);
|
|
HRESULT GetNext_ObjectMap (CSQLConnection *pConn, OBJECTMAP &oj);
|
|
HRESULT InsertScopeMap_Internal(CSQLConnection *_pConn, SQL_ID dObjectId, LPCWSTR lpPath, SQL_ID dParentId);
|
|
HRESULT GetFirst_ClassMap (CSQLConnection *_pConn, SQL_ID dClassId, CLASSMAP &cd);
|
|
HRESULT GetFirst_ClassMapByName (CSQLConnection *_pConn, LPCWSTR lpName, CLASSMAP &cd);
|
|
HRESULT GetNext_ClassMap (CSQLConnection *_pConn, CLASSMAP &cd);
|
|
HRESULT GetClassMapData (CSQLConnection *_pConn, JET_SESID session, JET_TABLEID tableid,
|
|
CLASSMAP &oj);
|
|
HRESULT GetPropertyMapData (CSQLConnection *_pConn, JET_SESID session, JET_TABLEID tableid,
|
|
PROPERTYMAP &oj);
|
|
HRESULT GetFirst_PropertyMapByClass (CSQLConnection *_pConn, SQL_ID dClassId, PROPERTYMAP &pm);
|
|
HRESULT GetNext_PropertyMap (CSQLConnection *_pConn, PROPERTYMAP &pm);
|
|
HRESULT GetFirst_ReferencePropertiesByClass (CSQLConnection *_pConn, SQL_ID dClassId,
|
|
REFERENCEPROPERTIES &cd);
|
|
HRESULT GetNext_ReferenceProperties (CSQLConnection *_pConn, REFERENCEPROPERTIES &cd);
|
|
HRESULT GetReferencePropertiesData (CSQLConnection *_pConn, JET_SESID session, JET_TABLEID tableid,
|
|
REFERENCEPROPERTIES &oj);
|
|
HRESULT GetFirst_ClassKeys (CSQLConnection *_pConn, SQL_ID dClassId, CLASSKEYS &cd);
|
|
HRESULT GetNext_ClassKeys (CSQLConnection *_pConn, CLASSKEYS &cd);
|
|
HRESULT GetFirst_ClassData (CSQLConnection *pConn, SQL_ID dId, CLASSDATA &cd,
|
|
DWORD iPropertyId = -1, BOOL bMinimum = FALSE, CSchemaCache *pCache = NULL);
|
|
HRESULT GetNext_ClassData (CSQLConnection *pConn, CLASSDATA &cd, DWORD iPropertyId = -1, BOOL bMinimum=FALSE,
|
|
CSchemaCache *pCache = NULL);
|
|
|
|
HRESULT GetIndexData (CSQLConnection *pConn, JET_SESID session, JET_TABLEID tableid,
|
|
DWORD dwPos, INDEXDATA &is);
|
|
HRESULT GetFirst_IndexDataNumeric (CSQLConnection *pConn, SQL_ID dNumericValue, INDEXDATA &cd,
|
|
JET_TABLEID &tableid);
|
|
HRESULT GetFirst_IndexDataString (CSQLConnection *pConn, LPWSTR lpStringValue, INDEXDATA &cd,
|
|
JET_TABLEID &tableid);
|
|
HRESULT GetFirst_IndexDataReal (CSQLConnection *pConn, double dValue, INDEXDATA &cd,
|
|
JET_TABLEID &tableid);
|
|
HRESULT GetFirst_IndexDataRef (CSQLConnection *pConn, SQL_ID dValue, INDEXDATA &cd,
|
|
JET_TABLEID &tableid);
|
|
HRESULT GetNext_IndexData (CSQLConnection *pConn, JET_TABLEID tableid, DWORD dwPos, INDEXDATA &cd);
|
|
HRESULT GetContainerObjsData (CSQLConnection *pConn, JET_SESID session, JET_TABLEID tableid,
|
|
CONTAINEROBJ &oj);
|
|
HRESULT GetNext_ContainerObjs (CSQLConnection *pConn, CONTAINEROBJ &cd);
|
|
HRESULT DeleteObjectMap (CSQLConnection *_pConn, SQL_ID dObjectId,
|
|
BOOL bDecRef = FALSE, SQL_ID dScope = 0);
|
|
HRESULT DeleteContainerObjs (CSQLConnection *_pConn, SQL_ID dContainerId, SQL_ID dContaineeId = 0);
|
|
|
|
HRESULT SetupAutoDeleteAccessor(CSQLConnection *pConn);
|
|
HRESULT OpenEnum_AutoDelete (CSQLConnection *pConn, AUTODELETE &ad);
|
|
HRESULT GetNext_AutoDelete(CSQLConnection *pConn, AUTODELETE &ad);
|
|
HRESULT InsertAutoDelete(CSQLConnection *pConn, SQL_ID dObjectId);
|
|
HRESULT DeleteAutoDelete(CSQLConnection *pConn, SQL_ID dObjectId);
|
|
HRESULT CleanAutoDeletes(CSQLConnection *pConn);
|
|
|
|
#endif // _ESEUTILS_H_
|