This repository has been archived on 2024-12-16. You can view files and clone it, but cannot push or open issues or pull requests.
CodeBlocksPortable/Borland/BCC55/Include/dtsffile.h

202 lines
7.8 KiB
C

//
// DTSFFile.h
// Header file for the OLEDB DTSFlatFile Service Provider.
// Copyright 1997 Microsoft Corporation
//
#ifndef DTSFlatFile_H_
#pragma option push -b -a8 -pc -A- /*P_O_Push*/
#define DTSFlatFile_H_
#ifndef UNICODE_BOM
#define UNICODE_BOM 0xFEFF
#endif
#ifndef DTSFlatFileVersion_Major
#define DTSFlatFileVersion_Major 1
#define DTSFlatFileVersion_Minor 0
#endif // DTSFlatFileVersion_Major
///////////////////////////////////////////////////////////////////////////////////////
// CPP Enumerations, constants, and data structures.
///////////////////////////////////////////////////////////////////////////////////////
#define FF_ENUM_BEGIN(tdef, hstring) DWORD tdef, *LP##tdef; enum tag##tdef
// item = value, ...
#define FF_ENUM_END(tdef)
typedef FF_ENUM_BEGIN(DTSFlatFileError, "Error ranges for DTSFlatFile execution") {
DTSFlatFile_E_InvalidColumnFlags = 0x3000,
DTSFlatFile_E_DuplicateColumnName = 0x3001,
DTSFlatFile_E_LinkFileColumnNoSelfRef = 0x3002,
DTSFlatFile_E_LinkFileColumnNotFound = 0x3003,
DTSFlatFile_E_OnlyOneSession = 0x3004,
DTSFlatFile_E_OnlyOneRowset = 0x3005,
DTSFlatFile_E_ColumnOutOfRange = 0x3006,
DTSFlatFile_E_NoBindPart = 0x3007,
DTSFlatFile_E_CantConvert = 0x3008,
DTSFlatFile_E_ByrefNotOnFixedDatatypes = 0x3009,
DTSFlatFile_E_RowDelimiterNotFound = 0x300a,
DTSFlatFile_E_NoUpdatability = 0x300b,
DTSFlatFile_E_RowRefCountNotZero = 0x300c,
DTSFlatFile_E_FileInfoIncomplete = 0x300d,
DTSFlatFile_E_NumberOfColumnConflict = 0x300e,
DTSFlatFile_E_ZeroColumnLength = 0x300f,
DTSFlatFile_E_GetConvSizeFail = 0x3010,
DTSFlatFile_E_ColumnDelimiterNotFound = 0x3011,
DTSFlatFile_E_TextQualifierNotFound = 0x3012,
DTSFlatFile_E_TooManyColumnFound = 0x3013,
DTSFlatFile_E_NoColDelimTextQualAllowed = 0x3014,
DTSFlatFile_E_InvalidDelimitedData = 0x3015,
DTSFlatFile_E_InvalidBracketing = 0x3016,
DTSFlatFile_E_EmptyDataFile = 0x3017,
} FF_ENUM_END(DTSFlatFileError);
typedef FF_ENUM_BEGIN(DTSFlatFileColumnFlags, "Flags for DTSFlatFile column metadata") {
DTSFlatFileColumn_None = 0x0000,
// Column data flags.
DTSFlatFileColumn_Nullable = 0x0001,
DTSFlatFileColumn_IsLong = 0x0002,
// Column behaviour flags.
DTSFlatFileColumn_SkipOnRead = 0x1001,
DTSFlatFileColumn_AppendToFile = 0x1002,
} FF_ENUM_END(DTSFlatFileColumnFlags);
#define DBPROP_DTS_ROWDELIMITER 0x10000001
#define DBPROP_DTS_FILEFORMAT 0x10000002
#define DBPROP_DTS_FIXEDFIELD_LENGTHS 0x10000003
#define DBPROP_DTS_COLUMNDELIMITER 0x10000004
#define DBPROP_DTS_COLUMNMETADATA 0x10000005
#define DBPROP_DTS_FILETYPE 0x10000006
#define DBPROP_DTS_NUMBEROFCOLUMNS 0x10000007
#define DBPROP_DTS_TEXTQUALIFIER 0x10000008
#define DBPROP_DTS_SKIPROWS 0x10000009
#define DBPROP_DTS_FIRSTROWCOLUMNNAME 0x1000000a
#define DBPROP_DTS_COLUMNNAMES 0x1000000b
#define DBPROP_DTS_TEXTQUALIFIER_COLMASK 0x1000000c
#define DBPROP_DTS_XML_ROOT_ELEMENT 0x1000000d
#define DBPROP_DTS_XML_ROW_ELEMENT 0x1000000e
#define DBPROP_DTS_MAX_DELIM_COLWIDTH 0x1000000f
#define DBPROP_DTS_BLOB_COLMASK 0x10000010
#define DBPROPVAL_DTS_FILEFORMAT_NONE 0x0000
#define DBPROPVAL_DTS_FILEFORMAT_DELIMITED 0x0001
#define DBPROPVAL_DTS_FILEFORMAT_FIXEDLENGTH 0x0002
#define DBPROPVAL_DTS_FILEFORMAT_PREFIXLENGTH 0x0003
#define DBPROPVAL_DTS_FILEFORMAT_XML 0x0004
#define DBPROPVAL_DTS_FILETYPE_ASCII 0x0001
#define DBPROPVAL_DTS_FILETYPE_UNICODE 0x0002
#define DBPROPVAL_DTS_FILETYPE_AUTODETECT 0x0003
#define DBPROPVAL_DTS_FILETYPE_OEM 0x0004
#define FILE_ATTRIBUTE_READ 0x0000
#define FILE_ATTRIBUTE_WRITE 0x0001
#define FILE_ATTRIBUTE_APPEND 0x0002
#define FILE_ATTRIBUTE_WRITEABLE 0x0003
#ifdef NONAMELESSUNION
#define FF_UNION_NAME(u) u
#else
#define FF_UNION_NAME(u)
#endif
// Metadata structure. Metafile representation is keyed on field name and text value.
typedef struct {
LPCOLESTR wzName; // Name of the field (column).
DBTYPE dbType; // Field datatype
union {
ULONG ulLength; // Field data length (byte length, or char length
// for [W]STR). Ignored for fixed-length types.
struct {
BYTE bPrecision; // Numeric precision
BYTE bScale; // Numeric scale
} FF_UNION_NAME(p);
} FF_UNION_NAME(u);
LPOLESTR wzDelimiter; // Delimiter for [W]STR column.
LPOLESTR wzTextQualifier; // Text Qualifer
DBTYPE dbLengthPrefixType; // DBTYPE_I[124] dynamic length prefix for [W]STR|BYTES column;
// ignored otherwise or if DBTYPE_EMPTY
LPCOLESTR wzLinkFileColumnName; // Name of column (field) containing file name to read from or
// write to for [W]STR|BYTES column; ignored otherwise or if NULL.
DTSFlatFileColumnFlags dtsFlags; // Column flags from enum
LPCOLESTR wzNullValue; // Char representation of NULL value (e.g. NULL, "-0-",
// 0xFFFFFF7F, etc.). Converted to column datatype.
} DTSFlatFileColumnMetadata, *LPDTSFlatFileColumnMetadata;
typedef DTSFlatFileColumnMetadata const * LPCDTSFlatFileColumnMetadata;
// DTSFlatFileMetadata.wzDatafileName allows applications to SetMetafile and then GetMetadata
// to retrieve the datafile name. This is useful if the metafile is specific to a single
// datafile; otherwise, it can function as metadata for multiple datafiles. In any case,
// an application must set the DBPROP_INIT_DATASOURCE property to the datafile name, which must
// match wzDatafileName if wzDatafileName is non-NULL.
typedef struct {
BOOL bUnicode; // Unicode or OEM File
BOOL bFirstRowColumnName; // First Row contains column name
LPOLESTR wzRowDelimiter; // Row Delimiter.
LPOLESTR wzDefaultColDelimiter; // Default Column Delimiter.
LPOLESTR wzDefaultTextQualifier; // Default Text Qualifer.
LPOLESTR wzDataFileName; // UNC or fully-qualified filename.
LPOLESTR wzRootElementName; // XML root element name.
LPOLESTR wzRowElementName; // XML element collection object name.
ULONG cColumns;
ULONG cSkipRows;
LPDTSFlatFileColumnMetadata pColumnMetadata;
} DTSFlatFileMetadata, *LPDTSFlatFileMetadata;
typedef DTSFlatFileMetadata const * LPCDTSFlatFileMetadata;
///////////////////////////////////////////////////////////////////////////////////////
// Class and IID definitions
///////////////////////////////////////////////////////////////////////////////////////
// Include <initguid.h> to define ownership of these GUIDs.
// {xxxxxxxx-0224-11d1-B7B8-00C04FB6EFD5}
#define DEFINE_DTSFlatFileGUID(name, lval) \
DEFINE_GUID(name, 0x##lval, 0x224, 0x11d1, 0xb7, 0xb8, 0x0, 0xc0, 0x4f, 0xb6, 0xef, 0xd5);
// DTSFlatFile DataSourceObject CLSID.
#define Progid_DTSFlatFile OLESTR("DTSFlatFile")
DEFINE_DTSFlatFileGUID(CLSID_DTSFlatFile, 10010100)
// DTSFlatFile metadata interface IID.
DEFINE_DTSFlatFileGUID(IID_IDTSFlatFileMetadata, 10010200)
///////////////////////////////////////////////////////////////////////////////////////
// Interface definitions
///////////////////////////////////////////////////////////////////////////////////////
// Repeat the IUnknown members because C doesn't provide inheritance.
#ifndef DTSFlatFile_Unknown_Base
#define DTSFlatFile_Unknown_Base() \
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE; \
STDMETHOD_(ULONG,AddRef) (THIS) PURE; \
STDMETHOD_(ULONG,Release) (THIS) PURE;
#endif
#undef INTERFACE
#define INTERFACE IDTSFlatFileMetadata
DECLARE_INTERFACE_(INTERFACE, IUnknown)
{
DTSFlatFile_Unknown_Base()
STDMETHOD(GetMetadata)(THIS_
/* [size_is][size_is][out] */ DTSFlatFileMetadata __RPC_FAR * __RPC_FAR *ppMetadata
) PURE;
STDMETHOD(UninitializeMetadata)(THIS_
) PURE;
STDMETHOD(SetMetadata)(THIS_
/* [size_is][in] */ const DTSFlatFileMetadata __RPC_FAR *pMetadata
) PURE;
STDMETHOD(SetMetafile)(THIS_
/* [string][in] */ const OLECHAR __RPC_FAR *wzFileName
) PURE;
};
#pragma option pop /*P_O_Pop*/
#endif // DTSFlatFile_H_