blob: dcace799922259509237d2341ed408b50cb53d61 [file] [log] [blame]
#pragma once
//-------------------------------------------------------------------------------------------------
// <copyright file="sceutil.h" company="Outercurve Foundation">
// 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.
// </copyright>
//
// <summary>
// Header for SQL Compact Edition helper functions.
// </summary>
//-------------------------------------------------------------------------------------------------
#ifdef __cplusplus
extern "C" {
#endif
#include <sqlce_oledb.h>
#include <sqlce_sync.h>
#include <sqlce_err.h>
typedef void* SCE_DATABASE_HANDLE;
typedef void* SCE_ROW_HANDLE;
typedef void* SCE_QUERY_HANDLE;
typedef void* SCE_QUERY_RESULTS_HANDLE;
extern const int SCE_ROW_HANDLE_BYTES;
extern const int SCE_QUERY_HANDLE_BYTES;
extern const int SCE_QUERY_RESULTS_HANDLE_BYTES;
#define ReleaseSceRow(prrh) if (prrh) { SceFreeRow(prrh); }
#define ReleaseNullSceRow(prrh) if (prrh) { SceFreeRow(prrh); prrh = NULL; }
#define ReleaseSceQuery(pqh) if (pqh) { SceFreeQuery(pqh); }
#define ReleaseNullSceQuery(pqh) if (pqh) { SceFreeQuery(pqh); pqh = NULL; }
#define ReleaseSceQueryResults(pqh) if (pqh) { SceFreeQueryResults(pqh); }
#define ReleaseNullSceQueryResults(pqh) if (pqh) { SceFreeQueryResults(pqh); pqh = NULL; }
struct SCE_COLUMN_SCHEMA
{
LPCWSTR wzName;
DBTYPE dbtColumnType;
DWORD dwLength;
BOOL fPrimaryKey; // If this column is the primary key
BOOL fNullable;
BOOL fAutoIncrement;
LPWSTR wzRelationName;
DWORD dwForeignKeyTable;
DWORD dwForeignKeyColumn;
};
struct SCE_INDEX_SCHEMA
{
LPWSTR wzName;
DWORD *rgColumns;
DWORD cColumns;
};
struct SCE_TABLE_SCHEMA
{
LPCWSTR wzName;
DWORD cColumns;
SCE_COLUMN_SCHEMA *rgColumns;
DWORD cIndexes;
SCE_INDEX_SCHEMA *rgIndexes;
// Internal to SCEUtil - consumers shouldn't access or modify
// TODO: enforce / hide in a handle of some sort?
IRowset *pIRowset;
IRowsetChange *pIRowsetChange;
};
struct SCE_DATABASE_SCHEMA
{
DWORD cTables;
SCE_TABLE_SCHEMA *rgTables;
};
struct SCE_DATABASE
{
SCE_DATABASE_HANDLE sdbHandle;
SCE_DATABASE_SCHEMA *pdsSchema;
};
HRESULT DAPI SceCreateDatabase(
__in_z LPCWSTR sczFile,
__deref_out SCE_DATABASE **ppDatabase
);
HRESULT DAPI SceOpenDatabase(
__in_z LPCWSTR sczFile,
__in LPCWSTR wzSchemaType,
__in DWORD dwExpectedVersion,
__deref_out SCE_DATABASE **ppDatabase,
__in BOOL fReadOnly
);
HRESULT DAPI SceEnsureDatabase(
__in_z LPCWSTR sczFile,
__in LPCWSTR wzSchemaType,
__in DWORD dwExpectedVersion,
__in SCE_DATABASE_SCHEMA *pdsSchema,
__deref_out SCE_DATABASE **ppDatabase
);
HRESULT DAPI SceIsTableEmpty(
__in SCE_DATABASE *pDatabase,
__in DWORD dwTableIndex,
__out BOOL *pfEmpty
);
HRESULT DAPI SceGetFirstRow(
__in SCE_DATABASE *pDatabase,
__in DWORD dwTableIndex,
__deref_out_bcount(SCE_ROW_HANDLE_BYTES) SCE_ROW_HANDLE *pRowHandle
);
HRESULT DAPI SceGetNextRow(
__in SCE_DATABASE *pDatabase,
__in DWORD dwTableIndex,
__deref_out_bcount(SCE_ROW_HANDLE_BYTES) SCE_ROW_HANDLE *pRowHandle
);
HRESULT DAPI SceBeginTransaction(
__in SCE_DATABASE *pDatabase
);
HRESULT DAPI SceCommitTransaction(
__in SCE_DATABASE *pDatabase
);
HRESULT DAPI SceRollbackTransaction(
__in SCE_DATABASE *pDatabase
);
HRESULT DAPI SceDeleteRow(
__in_bcount(SCE_ROW_HANDLE_BYTES) SCE_ROW_HANDLE *pRowHandle
);
HRESULT DAPI ScePrepareInsert(
__in SCE_DATABASE *pDatabase,
__in DWORD dwTableIndex,
__deref_out_bcount(SCE_ROW_HANDLE_BYTES) SCE_ROW_HANDLE *pRowHandle
);
HRESULT DAPI SceFinishUpdate(
__in_bcount(SCE_ROW_HANDLE_BYTES) SCE_ROW_HANDLE rowHandle
);
HRESULT DAPI SceSetColumnBinary(
__in_bcount(SCE_ROW_HANDLE_BYTES) SCE_ROW_HANDLE rowHandle,
__in DWORD dwColumnIndex,
__in_bcount(cbBuffer) const BYTE* pbBuffer,
__in SIZE_T cbBuffer
);
HRESULT DAPI SceSetColumnDword(
__in_bcount(SCE_ROW_HANDLE_BYTES) SCE_ROW_HANDLE rowHandle,
__in DWORD dwColumnIndex,
__in const DWORD dwValue
);
HRESULT DAPI SceSetColumnQword(
__in_bcount(SCE_ROW_HANDLE_BYTES) SCE_ROW_HANDLE rowHandle,
__in DWORD dwColumnIndex,
__in const DWORD64 qwValue
);
HRESULT DAPI SceSetColumnBool(
__in_bcount(SCE_ROW_HANDLE_BYTES) SCE_ROW_HANDLE rowHandle,
__in DWORD dwColumnIndex,
__in const BOOL fValue
);
HRESULT DAPI SceSetColumnString(
__in_bcount(SCE_ROW_HANDLE_BYTES) SCE_ROW_HANDLE rowHandle,
__in DWORD dwColumnIndex,
__in_z_opt LPCWSTR wzValue
);
HRESULT DAPI SceSetColumnSystemTime(
__in_bcount(SCE_ROW_HANDLE_BYTES) SCE_ROW_HANDLE rowHandle,
__in DWORD dwColumnIndex,
__in const SYSTEMTIME *pst
);
HRESULT DAPI SceSetColumnEmpty(
__in_bcount(SCE_ROW_HANDLE_BYTES) SCE_ROW_HANDLE rowHandle,
__in DWORD dwColumnIndex
);
HRESULT DAPI SceGetColumnBinary(
__in_bcount(SCE_ROW_HANDLE_BYTES) SCE_ROW_HANDLE rowReadHandle,
__in DWORD dwColumnIndex,
__out_opt BYTE **ppbBuffer,
__inout SIZE_T *pcbBuffer
);
HRESULT DAPI SceGetColumnDword(
__in_bcount(SCE_ROW_HANDLE_BYTES) SCE_ROW_HANDLE rowReadHandle,
__in DWORD dwColumnIndex,
__out DWORD *pdwValue
);
HRESULT DAPI SceGetColumnQword(
__in_bcount(SCE_ROW_HANDLE_BYTES) SCE_ROW_HANDLE rowReadHandle,
__in DWORD dwColumnIndex,
__out DWORD64 *pqwValue
);
HRESULT DAPI SceGetColumnBool(
__in_bcount(SCE_ROW_HANDLE_BYTES) SCE_ROW_HANDLE rowReadHandle,
__in DWORD dwColumnIndex,
__out BOOL *pfValue
);
HRESULT DAPI SceGetColumnString(
__in_bcount(SCE_ROW_HANDLE_BYTES) SCE_ROW_HANDLE rowReadHandle,
__in DWORD dwColumnIndex,
__out_z LPWSTR *psczValue
);
HRESULT DAPI SceGetColumnSystemTime(
__in_bcount(SCE_ROW_HANDLE_BYTES) SCE_ROW_HANDLE rowReadHandle,
__in DWORD dwColumnIndex,
__out SYSTEMTIME *pst
);
HRESULT DAPI SceBeginQuery(
__in SCE_DATABASE *pDatabase,
__in DWORD dwTableIndex,
__in DWORD dwIndex,
__deref_out_bcount(SCE_QUERY_HANDLE_BYTES) SCE_QUERY_HANDLE *psqhHandle
);
HRESULT DAPI SceSetQueryColumnBinary(
__in_bcount(SCE_QUERY_BYTES) SCE_QUERY_HANDLE sqhHandle,
__in_bcount(cbBuffer) const BYTE* pbBuffer,
__in SIZE_T cbBuffer
);
HRESULT DAPI SceSetQueryColumnDword(
__in_bcount(SCE_QUERY_BYTES) SCE_QUERY_HANDLE sqhHandle,
__in const DWORD dwValue
);
HRESULT DAPI SceSetQueryColumnQword(
__in_bcount(SCE_QUERY_BYTES) SCE_QUERY_HANDLE sqhHandle,
__in const DWORD64 qwValue
);
HRESULT DAPI SceSetQueryColumnBool(
__in_bcount(SCE_QUERY_BYTES) SCE_QUERY_HANDLE sqhHandle,
__in const BOOL fValue
);
HRESULT DAPI SceSetQueryColumnString(
__in_bcount(SCE_QUERY_BYTES) SCE_QUERY_HANDLE sqhHandle,
__in_z_opt LPCWSTR wzString
);
HRESULT DAPI SceSetQueryColumnSystemTime(
__in_bcount(SCE_ROW_HANDLE_BYTES) SCE_ROW_HANDLE rowHandle,
__in const SYSTEMTIME *pst
);
HRESULT DAPI SceSetQueryColumnEmpty(
__in_bcount(SCE_QUERY_BYTES) SCE_QUERY_HANDLE sqhHandle
);
HRESULT DAPI SceRunQueryExact(
__in_bcount(SCE_QUERY_BYTES) SCE_QUERY_HANDLE *psqhHandle,
__deref_out_bcount(SCE_ROW_HANDLE_BYTES) SCE_ROW_HANDLE *pRowHandle
);
HRESULT DAPI SceRunQueryRange(
__in_bcount(SCE_QUERY_BYTES) SCE_QUERY_HANDLE *psqhHandle,
__deref_out_bcount(SCE_QUERY_RESULTS_BYTES) SCE_QUERY_RESULTS_HANDLE *psqrhHandle
);
HRESULT DAPI SceGetNextResultRow(
__in_bcount(SCE_QUERY_RESULTS_BYTES) SCE_QUERY_RESULTS_HANDLE sqrhHandle,
__deref_out_bcount(SCE_ROW_HANDLE_BYTES) SCE_ROW_HANDLE *pRowHandle
);
void DAPI SceCloseTable(
__in SCE_TABLE_SCHEMA *pTable
);
HRESULT DAPI SceCloseDatabase(
__in SCE_DATABASE *pDatabase
);
void DAPI SceFreeRow(
__in_bcount(SCE_ROW_HANDLE_BYTES) SCE_ROW_HANDLE rowReadHandle
);
void DAPI SceFreeQuery(
__in_bcount(SCE_QUERY_BYTES) SCE_QUERY_HANDLE sqhHandle
);
void DAPI SceFreeQueryResults(
__in_bcount(SCE_QUERY_RESULTS_BYTES) SCE_QUERY_RESULTS_HANDLE sqrhHandle
);
#ifdef __cplusplus
}
#endif