home *** CD-ROM | disk | FTP | other *** search
/ PC Format (South-Africa) 2001 May / PCFMay2001.iso / Xenon / C++ / FreeCommandLineTools.exe / Include / dtsffile.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-01-31  |  8.0 KB  |  202 lines

  1. //
  2. // DTSFFile.h
  3. //    Header file for the OLEDB DTSFlatFile Service Provider.
  4. //    Copyright 1997 Microsoft Corporation
  5. //
  6. #ifndef DTSFlatFile_H_
  7. #pragma option push -b -a8 -pc -A- /*P_O_Push*/
  8. #define DTSFlatFile_H_
  9.  
  10. #ifndef UNICODE_BOM
  11.     #define UNICODE_BOM  0xFEFF
  12. #endif
  13.  
  14. #ifndef DTSFlatFileVersion_Major
  15.     #define DTSFlatFileVersion_Major 1
  16.     #define DTSFlatFileVersion_Minor 0
  17. #endif // DTSFlatFileVersion_Major
  18.  
  19. ///////////////////////////////////////////////////////////////////////////////////////
  20. // CPP Enumerations, constants, and data structures.
  21. ///////////////////////////////////////////////////////////////////////////////////////
  22.  
  23. #define FF_ENUM_BEGIN(tdef, hstring)    DWORD tdef, *LP##tdef; enum tag##tdef
  24.     // item = value, ...
  25. #define FF_ENUM_END(tdef)                
  26.  
  27. typedef FF_ENUM_BEGIN(DTSFlatFileError, "Error ranges for DTSFlatFile execution") {
  28.     DTSFlatFile_E_InvalidColumnFlags            = 0x3000,
  29.     DTSFlatFile_E_DuplicateColumnName            = 0x3001,
  30.     DTSFlatFile_E_LinkFileColumnNoSelfRef        = 0x3002,
  31.     DTSFlatFile_E_LinkFileColumnNotFound        = 0x3003,
  32.     DTSFlatFile_E_OnlyOneSession                = 0x3004,
  33.     DTSFlatFile_E_OnlyOneRowset                    = 0x3005,
  34.     DTSFlatFile_E_ColumnOutOfRange                = 0x3006,
  35.     DTSFlatFile_E_NoBindPart                    = 0x3007,
  36.     DTSFlatFile_E_CantConvert                    = 0x3008,
  37.     DTSFlatFile_E_ByrefNotOnFixedDatatypes        = 0x3009,
  38.     DTSFlatFile_E_RowDelimiterNotFound            = 0x300a,
  39.     DTSFlatFile_E_NoUpdatability                = 0x300b,
  40.     DTSFlatFile_E_RowRefCountNotZero            = 0x300c,
  41.     DTSFlatFile_E_FileInfoIncomplete            = 0x300d,
  42.     DTSFlatFile_E_NumberOfColumnConflict        = 0x300e,
  43.     DTSFlatFile_E_ZeroColumnLength                = 0x300f,
  44.     DTSFlatFile_E_GetConvSizeFail                = 0x3010,
  45.     DTSFlatFile_E_ColumnDelimiterNotFound        = 0x3011,
  46.     DTSFlatFile_E_TextQualifierNotFound            = 0x3012,
  47.     DTSFlatFile_E_TooManyColumnFound            = 0x3013,
  48.     DTSFlatFile_E_NoColDelimTextQualAllowed        = 0x3014,
  49.     DTSFlatFile_E_InvalidDelimitedData            = 0x3015,
  50.     DTSFlatFile_E_InvalidBracketing                = 0x3016,
  51.     DTSFlatFile_E_EmptyDataFile                    = 0x3017,
  52.  
  53. } FF_ENUM_END(DTSFlatFileError);
  54.  
  55. typedef FF_ENUM_BEGIN(DTSFlatFileColumnFlags, "Flags for DTSFlatFile column metadata") {
  56.     DTSFlatFileColumn_None                        = 0x0000,
  57.  
  58.     // Column data flags.
  59.     DTSFlatFileColumn_Nullable                    = 0x0001,
  60.     DTSFlatFileColumn_IsLong                    = 0x0002,
  61.  
  62.     // Column behaviour flags.
  63.     DTSFlatFileColumn_SkipOnRead                = 0x1001,
  64.     DTSFlatFileColumn_AppendToFile                = 0x1002,
  65.  
  66. } FF_ENUM_END(DTSFlatFileColumnFlags);
  67.  
  68. #define DBPROP_DTS_ROWDELIMITER                    0x10000001
  69. #define DBPROP_DTS_FILEFORMAT                    0x10000002
  70. #define DBPROP_DTS_FIXEDFIELD_LENGTHS            0x10000003    
  71. #define DBPROP_DTS_COLUMNDELIMITER                0x10000004
  72. #define DBPROP_DTS_COLUMNMETADATA                0x10000005
  73. #define DBPROP_DTS_FILETYPE                        0x10000006
  74. #define DBPROP_DTS_NUMBEROFCOLUMNS                0x10000007
  75. #define DBPROP_DTS_TEXTQUALIFIER                0x10000008
  76. #define DBPROP_DTS_SKIPROWS                        0x10000009
  77. #define DBPROP_DTS_FIRSTROWCOLUMNNAME            0x1000000a
  78. #define DBPROP_DTS_COLUMNNAMES                    0x1000000b
  79. #define DBPROP_DTS_TEXTQUALIFIER_COLMASK        0x1000000c
  80. #define DBPROP_DTS_XML_ROOT_ELEMENT                0x1000000d
  81. #define DBPROP_DTS_XML_ROW_ELEMENT                0x1000000e
  82. #define DBPROP_DTS_MAX_DELIM_COLWIDTH            0x1000000f
  83. #define DBPROP_DTS_BLOB_COLMASK                    0x10000010
  84.  
  85. #define DBPROPVAL_DTS_FILEFORMAT_NONE            0x0000
  86. #define DBPROPVAL_DTS_FILEFORMAT_DELIMITED        0x0001
  87. #define DBPROPVAL_DTS_FILEFORMAT_FIXEDLENGTH    0x0002
  88. #define DBPROPVAL_DTS_FILEFORMAT_PREFIXLENGTH    0x0003
  89. #define DBPROPVAL_DTS_FILEFORMAT_XML            0x0004
  90.  
  91. #define DBPROPVAL_DTS_FILETYPE_ASCII            0x0001
  92. #define DBPROPVAL_DTS_FILETYPE_UNICODE            0x0002
  93. #define DBPROPVAL_DTS_FILETYPE_AUTODETECT        0x0003
  94. #define DBPROPVAL_DTS_FILETYPE_OEM                0x0004
  95.  
  96. #define FILE_ATTRIBUTE_READ                        0x0000
  97. #define FILE_ATTRIBUTE_WRITE                    0x0001
  98. #define FILE_ATTRIBUTE_APPEND                    0x0002
  99. #define FILE_ATTRIBUTE_WRITEABLE                0x0003
  100.  
  101. #ifdef NONAMELESSUNION
  102. #define FF_UNION_NAME(u)    u
  103. #else
  104. #define FF_UNION_NAME(u)
  105. #endif
  106.  
  107. // Metadata structure.  Metafile representation is keyed on field name and text value.
  108. typedef struct {
  109.     LPCOLESTR wzName;                    // Name of the field (column).
  110.     DBTYPE dbType;                        // Field datatype
  111.     union {
  112.         ULONG ulLength;                    // Field data length (byte length, or char length
  113.                                         // for [W]STR).  Ignored for fixed-length types.
  114.         struct {
  115.             BYTE bPrecision;            // Numeric precision
  116.             BYTE bScale;                // Numeric scale
  117.         } FF_UNION_NAME(p);
  118.     } FF_UNION_NAME(u);
  119.     LPOLESTR wzDelimiter;                // Delimiter for [W]STR column.
  120.     LPOLESTR wzTextQualifier;            // Text Qualifer
  121.     DBTYPE dbLengthPrefixType;            // DBTYPE_I[124] dynamic length prefix for [W]STR|BYTES column;
  122.                                         // ignored otherwise or if DBTYPE_EMPTY
  123.     LPCOLESTR wzLinkFileColumnName;        // Name of column (field) containing file name to read from or
  124.                                         // write to for [W]STR|BYTES column; ignored otherwise or if NULL.
  125.     DTSFlatFileColumnFlags dtsFlags;    // Column flags from enum
  126.     LPCOLESTR wzNullValue;                // Char representation of NULL value (e.g. NULL, "-0-",
  127.                                         // 0xFFFFFF7F, etc.).  Converted to column datatype.
  128. } DTSFlatFileColumnMetadata, *LPDTSFlatFileColumnMetadata;
  129. typedef DTSFlatFileColumnMetadata const * LPCDTSFlatFileColumnMetadata;
  130.                                         
  131. // DTSFlatFileMetadata.wzDatafileName allows applications to SetMetafile and then GetMetadata 
  132. // to retrieve the datafile name.  This is useful if the metafile is specific to a single 
  133. // datafile; otherwise, it can function as metadata for multiple datafiles.  In any case, 
  134. // an application must set the DBPROP_INIT_DATASOURCE property to the datafile name, which must 
  135. // match wzDatafileName if wzDatafileName is non-NULL.
  136.  
  137. typedef struct {
  138.     BOOL     bUnicode;                    // Unicode or OEM File 
  139.     BOOL     bFirstRowColumnName;        // First Row contains column name
  140.     LPOLESTR wzRowDelimiter;            // Row Delimiter.
  141.     LPOLESTR wzDefaultColDelimiter;        // Default Column Delimiter.
  142.     LPOLESTR wzDefaultTextQualifier;    // Default Text Qualifer.
  143.     LPOLESTR wzDataFileName;            // UNC or fully-qualified filename.
  144.     LPOLESTR wzRootElementName;            // XML root element name.
  145.     LPOLESTR wzRowElementName;            // XML element collection object name.
  146.     ULONG cColumns;
  147.     ULONG cSkipRows;
  148.     LPDTSFlatFileColumnMetadata pColumnMetadata;
  149. } DTSFlatFileMetadata, *LPDTSFlatFileMetadata;
  150. typedef DTSFlatFileMetadata const * LPCDTSFlatFileMetadata;
  151.  
  152.  
  153. ///////////////////////////////////////////////////////////////////////////////////////
  154. // Class and IID definitions
  155. ///////////////////////////////////////////////////////////////////////////////////////
  156.  
  157. // Include <initguid.h> to define ownership of these GUIDs.
  158. // {xxxxxxxx-0224-11d1-B7B8-00C04FB6EFD5}
  159. #define DEFINE_DTSFlatFileGUID(name, lval) \
  160.     DEFINE_GUID(name, 0x##lval, 0x224, 0x11d1, 0xb7, 0xb8, 0x0, 0xc0, 0x4f, 0xb6, 0xef, 0xd5);
  161.  
  162. // DTSFlatFile DataSourceObject CLSID.
  163. #define Progid_DTSFlatFile            OLESTR("DTSFlatFile")
  164. DEFINE_DTSFlatFileGUID(CLSID_DTSFlatFile, 10010100)
  165.  
  166. // DTSFlatFile metadata interface IID.
  167. DEFINE_DTSFlatFileGUID(IID_IDTSFlatFileMetadata, 10010200)
  168.  
  169. ///////////////////////////////////////////////////////////////////////////////////////
  170. // Interface definitions
  171. ///////////////////////////////////////////////////////////////////////////////////////
  172.  
  173. // Repeat the IUnknown members because C doesn't provide inheritance.
  174. #ifndef DTSFlatFile_Unknown_Base
  175. #define DTSFlatFile_Unknown_Base()                                                            \
  176.         STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;                \
  177.         STDMETHOD_(ULONG,AddRef) (THIS) PURE;                                                \
  178.         STDMETHOD_(ULONG,Release) (THIS) PURE;
  179. #endif
  180.  
  181. #undef INTERFACE
  182. #define INTERFACE IDTSFlatFileMetadata
  183. DECLARE_INTERFACE_(INTERFACE, IUnknown)
  184. {
  185.     DTSFlatFile_Unknown_Base()
  186.  
  187.     STDMETHOD(GetMetadata)(THIS_
  188.             /* [size_is][size_is][out] */ DTSFlatFileMetadata __RPC_FAR * __RPC_FAR *ppMetadata
  189.         ) PURE;
  190.     STDMETHOD(UninitializeMetadata)(THIS_ 
  191.         ) PURE;
  192.     STDMETHOD(SetMetadata)(THIS_
  193.             /* [size_is][in] */ const DTSFlatFileMetadata __RPC_FAR *pMetadata
  194.         ) PURE;
  195.     STDMETHOD(SetMetafile)(THIS_
  196.             /* [string][in] */ const OLECHAR __RPC_FAR *wzFileName
  197.         ) PURE;
  198. };
  199.  
  200. #pragma option pop /*P_O_Pop*/
  201. #endif // DTSFlatFile_H_
  202.