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