#pragma once
//-------------------------------------------------------------------------------------------------
//
// Copyright (c) 2004, Outercurve Foundation.
// This software is released under Microsoft Reciprocal License (MS-RL).
// The license and further copyright text can be found in the file
// LICENSE.TXT at the root directory of the distribution.
//
//
//
// Header for Extensible Storage Engine (Jetblue) helper functions.
//
//-------------------------------------------------------------------------------------------------
#ifdef __cplusplus
extern "C" {
#endif
#define ReleaseEseQuery(pqh) if (pqh) { EseFinishQuery(pqh); }
#define ReleaseNullEseQuery(pqh) if (pqh) { EseFinishQuery(pqh); pqh = NULL; }
struct ESE_COLUMN_SCHEMA
{
JET_COLUMNID jcColumn;
LPCWSTR pszName;
JET_COLTYP jcColumnType;
BOOL fKey; // If this column is part of the key of the table
BOOL fFixed;
BOOL fNullable;
BOOL fAutoIncrement;
};
struct ESE_TABLE_SCHEMA
{
JET_TABLEID jtTable;
LPCWSTR pszName;
DWORD dwColumns;
ESE_COLUMN_SCHEMA *pcsColumns;
};
struct ESE_DATABASE_SCHEMA
{
DWORD dwTables;
ESE_TABLE_SCHEMA *ptsTables;
};
typedef enum ESE_QUERY_TYPE
{
ESE_QUERY_EXACT,
ESE_QUERY_FROM_TOP,
ESE_QUERY_FROM_BOTTOM
} ESE_QUERY_TYPE;
typedef void* ESE_QUERY_HANDLE;
HRESULT DAPI EseBeginSession(
__out JET_INSTANCE *pjiInstance,
__out JET_SESID *pjsSession,
__in_z LPCWSTR pszInstance,
__in_z LPCWSTR pszPath
);
HRESULT DAPI EseEndSession(
__in JET_INSTANCE jiInstance,
__in JET_SESID jsSession
);
HRESULT DAPI EseEnsureDatabase(
__in JET_SESID jsSession,
__in_z LPCWSTR pszFile,
__in ESE_DATABASE_SCHEMA *pdsSchema,
__out JET_DBID* pjdbDb,
__in BOOL fExclusive,
__in BOOL fReadonly
);
HRESULT DAPI EseCloseDatabase(
__in JET_SESID jsSession,
__in JET_DBID jdbDb
);
HRESULT DAPI EseCreateTable(
__in JET_SESID jsSession,
__in JET_DBID jdbDb,
__in_z LPCWSTR pszTable,
__out JET_TABLEID *pjtTable
);
HRESULT DAPI EseOpenTable(
__in JET_SESID jsSession,
__in JET_DBID jdbDb,
__in_z LPCWSTR pszTable,
__out JET_TABLEID *pjtTable
);
HRESULT DAPI EseCloseTable(
__in JET_SESID jsSession,
__in JET_TABLEID jtTable
);
HRESULT DAPI EseEnsureColumn(
__in JET_SESID jsSession,
__in JET_TABLEID jtTable,
__in_z LPCWSTR pszColumnName,
__in JET_COLTYP jcColumnType,
__in ULONG ulColumnSize,
__in BOOL fFixed,
__in BOOL fNullable,
__out_opt JET_COLUMNID *pjcColumn
);
HRESULT DAPI EseGetColumn(
__in JET_SESID jsSession,
__in JET_TABLEID jtTable,
__in_z LPCWSTR pszColumnName,
__out JET_COLUMNID *pjcColumn
);
HRESULT DAPI EseMoveCursor(
__in JET_SESID jsSession,
__in JET_TABLEID jtTable,
__in LONG lRow
);
HRESULT DAPI EseDeleteRow(
__in JET_SESID jsSession,
__in JET_TABLEID jtTable
);
HRESULT DAPI EseBeginTransaction(
__in JET_SESID jsSession
);
HRESULT DAPI EseRollbackTransaction(
__in JET_SESID jsSession,
__in BOOL fAll
);
HRESULT DAPI EseCommitTransaction(
__in JET_SESID jsSession
);
HRESULT DAPI EsePrepareUpdate(
__in JET_SESID jsSession,
__in JET_TABLEID jtTable,
__in ULONG ulPrep
);
HRESULT DAPI EseFinishUpdate(
__in JET_SESID jsSession,
__in JET_TABLEID jtTable,
__in BOOL fSeekToInsertedRecord
);
HRESULT DAPI EseSetColumnBinary(
__in JET_SESID jsSession,
__in ESE_TABLE_SCHEMA tsTable,
__in DWORD dwColumn,
__in_bcount(cbBuffer) const BYTE* pbBuffer,
__in SIZE_T cbBuffer
);
HRESULT DAPI EseSetColumnDword(
__in JET_SESID jsSession,
__in ESE_TABLE_SCHEMA tsTable,
__in DWORD dwColumn,
__in DWORD dwValue
);
HRESULT DAPI EseSetColumnBool(
__in JET_SESID jsSession,
__in ESE_TABLE_SCHEMA tsTable,
__in DWORD dwColumn,
__in BOOL fValue
);
HRESULT DAPI EseSetColumnString(
__in JET_SESID jsSession,
__in ESE_TABLE_SCHEMA tsTable,
__in DWORD dwColumn,
__in_z LPCWSTR pszValue
);
HRESULT DAPI EseSetColumnEmpty(
__in JET_SESID jsSession,
__in ESE_TABLE_SCHEMA tsTable,
__in DWORD dwColumn
);
HRESULT DAPI EseGetColumnBinary(
__in JET_SESID jsSession,
__in ESE_TABLE_SCHEMA tsTable,
__in DWORD dwColumn,
__deref_out_bcount(*piBuffer) BYTE** ppbBuffer,
__inout SIZE_T* piBuffer
);
HRESULT DAPI EseGetColumnDword(
__in JET_SESID jsSession,
__in ESE_TABLE_SCHEMA tsTable,
__in DWORD dwColumn,
__out DWORD *pdwValue
);
HRESULT DAPI EseGetColumnBool(
__in JET_SESID jsSession,
__in ESE_TABLE_SCHEMA tsTable,
__in DWORD dwColumn,
__out BOOL *pfValue
);
HRESULT DAPI EseGetColumnString(
__in JET_SESID jsSession,
__in ESE_TABLE_SCHEMA tsTable,
__in DWORD dwColumn,
__out LPWSTR *ppszValue
);
// Call this once for each key column in the table
HRESULT DAPI EseBeginQuery(
__in JET_SESID jsSession,
__in JET_TABLEID jtTable,
__in ESE_QUERY_TYPE qtQueryType,
__out ESE_QUERY_HANDLE *peqhHandle
);
HRESULT DAPI EseSetQueryColumnBinary(
__in ESE_QUERY_HANDLE eqhHandle,
__in_bcount(cbBuffer) const BYTE* pbBuffer,
__in SIZE_T cbBuffer,
__in BOOL fFinal // If this is true, all other key columns in the query will be set to "*"
);
HRESULT DAPI EseSetQueryColumnDword(
__in ESE_QUERY_HANDLE eqhHandle,
__in DWORD dwData,
__in BOOL fFinal // If this is true, all other key columns in the query will be set to "*"
);
HRESULT DAPI EseSetQueryColumnBool(
__in ESE_QUERY_HANDLE eqhHandle,
__in BOOL fValue,
__in BOOL fFinal // If this is true, all other key columns in the query will be set to "*"
);
HRESULT DAPI EseSetQueryColumnString(
__in ESE_QUERY_HANDLE eqhHandle,
__in_z LPCWSTR pszString,
__in BOOL fFinal // If this is true, all other key columns in the query will be set to "*"
);
HRESULT DAPI EseFinishQuery(
__in ESE_QUERY_HANDLE eqhHandle
);
// Once all columns have been set up, call this and read the result
HRESULT DAPI EseRunQuery(
__in ESE_QUERY_HANDLE eqhHandle
);
#ifdef __cplusplus
}
#endif