1/* 2 * Copyright (C) 2006 Mike McCormack 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2.1 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with this library; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 17 */ 18 19typedef DWORD DBKIND; 20 21enum DBKINDENUM { 22 DBKIND_GUID_NAME, 23 DBKIND_GUID_PROPID, 24 DBKIND_NAME, 25 DBKIND_PGUID_NAME, 26 DBKIND_PGUID_PROPID, 27 DBKIND_PROPID, 28 DBKIND_GUID, 29}; 30 31typedef struct tagDBID { 32 [switch_type(DBKIND), switch_is(eKind)] union 33 { 34 [case(DBKIND_GUID_NAME, DBKIND_GUID_PROPID, DBKIND_GUID, DBKIND_NAME, DBKIND_PROPID)] 35 GUID guid; 36 [case(DBKIND_PGUID_NAME, DBKIND_PGUID_PROPID)] 37 GUID *pguid; 38 [default] 39 ; 40 } uGuid; 41 DBKIND eKind; 42 [switch_type(DBKIND), switch_is(eKind)] union 43 { 44 [case(DBKIND_GUID_NAME, DBKIND_NAME, DBKIND_PGUID_NAME)] 45 LPOLESTR pwszName; 46 [case(DBKIND_GUID_PROPID, DBKIND_GUID, DBKIND_PGUID_PROPID, DBKIND_PROPID)] 47 ULONG ulPropid; 48 [default] 49 ; 50 } uName; 51} DBID; 52 53typedef DWORD DBPROPID; 54 55typedef struct tagDBPROPIDSET { 56 [size_is(cPropertyIDs)] DBPROPID *rgPropertyIDs; 57 ULONG cPropertyIDs; 58 GUID guidPropertySet; 59} DBPROPIDSET; 60 61typedef DWORD DBPROPOPTIONS; 62 63enum DBPROPOPTIONENUM { 64 DBPROPOPTIONS_REQUIRED = 0, 65 DBPROPOPTIONS_SETIFCHEAP = 1, 66 DBPROPOPTIONS_OPTIONAL = 1, 67}; 68 69typedef DWORD DBPROPSTATUS; 70 71typedef struct tagDBPROP { 72 DBPROPID dwPropertyID; 73 DBPROPOPTIONS dwOptions; 74 DBPROPSTATUS dwStatus; 75 DBID colid; 76 VARIANT vValue; 77} DBPROP; 78 79typedef struct tagDBPROPSET { 80 [size_is(cProperties)] DBPROP *rgProperties; 81 ULONG cProperties; 82 GUID guidPropertySet; 83} DBPROPSET; 84 85typedef DWORD DBPROPFLAGS; 86 87typedef struct tagDBPROPINFO { 88 LPOLESTR pwszDescription; 89 DBPROPID dwPropertyID; 90 DBPROPFLAGS dwFlags; 91 VARTYPE vtType; 92 VARIANT vValues; 93} DBPROPINFO; 94 95typedef DBPROPINFO *PDBPROPINFO; 96 97typedef struct tagDBPROPINFOSET { 98 [size_is(cPropertyInfos)] PDBPROPINFO rgPropertyInfos; 99 ULONG cPropertyInfos; 100 GUID guidPropertySet; 101} DBPROPINFOSET; 102 103typedef DWORD DBBINDURLFLAG; 104typedef DWORD DBBINDURLSTATUS; 105 106typedef struct tagDBIMPLICITSESSION 107{ 108 IUnknown *pUnkOuter; 109 IID *piid; 110 IUnknown *pSession; 111} DBIMPLICITSESSION; 112 113typedef WORD DBTYPE; 114 115enum DBTYPEENUM 116{ 117 DBTYPE_EMPTY = 0, 118 DBTYPE_NULL = 1, 119 DBTYPE_I2 = 2, 120 DBTYPE_I4 = 3, 121 DBTYPE_R4 = 4, 122 DBTYPE_R8 = 5, 123 DBTYPE_CY = 6, 124 DBTYPE_DATE = 7, 125 DBTYPE_BSTR = 8, 126 DBTYPE_IDISPATCH = 9, 127 DBTYPE_ERROR = 10, 128 DBTYPE_BOOL = 11, 129 DBTYPE_VARIANT = 12, 130 DBTYPE_IUNKNOWN = 13, 131 DBTYPE_DECIMAL = 14, 132 DBTYPE_I1 = 16, 133 DBTYPE_UI1 = 17, 134 DBTYPE_UI2 = 18, 135 DBTYPE_UI4 = 19, 136 DBTYPE_I8 = 20, 137 DBTYPE_UI8 = 21, 138 DBTYPE_GUID = 72, 139 DBTYPE_BYTES = 128, 140 DBTYPE_STR = 129, 141 DBTYPE_WSTR = 130, 142 DBTYPE_NUMERIC = 131, 143 DBTYPE_UDT = 132, 144 DBTYPE_DBDATE = 133, 145 DBTYPE_DBTIME = 134, 146 DBTYPE_DBTIMESTAMP = 135, 147 148 DBTYPE_VECTOR = 0x1000, 149 DBTYPE_ARRAY = 0x2000, 150 DBTYPE_BYREF = 0x4000, 151 DBTYPE_RESERVED = 0x8000 152}; 153 154enum DBTYPEENUM15 155{ 156 DBTYPE_HCHAPTER = 136 157}; 158 159enum DBTYPEENUM20 160{ 161 DBTYPE_FILETIME = 64, 162 DBTYPE_PROPVARIANT = 138, 163 DBTYPE_VARNUMERIC = 139 164}; 165 166typedef DWORD DBSTATUS; 167 168enum DBSTATUSENUM 169{ 170 DBSTATUS_S_OK = 0, 171 DBSTATUS_E_BADACCESSOR = 1, 172 DBSTATUS_E_CANTCONVERTVALUE = 2, 173 DBSTATUS_S_ISNULL = 3, 174 DBSTATUS_S_TRUNCATED = 4, 175 DBSTATUS_E_SIGNMISMATCH = 5, 176 DBSTATUS_E_DATAOVERFLOW = 6, 177 DBSTATUS_E_CANTCREATE = 7, 178 DBSTATUS_E_UNAVAILABLE = 8, 179 DBSTATUS_E_PERMISSIONDENIED = 9, 180 DBSTATUS_E_INTEGRITYVIOLATION = 10, 181 DBSTATUS_E_SCHEMAVIOLATION = 11, 182 DBSTATUS_E_BADSTATUS = 12, 183 DBSTATUS_S_DEFAULT = 13 184}; 185 186cpp_quote("#ifdef DBINITCONSTANTS") 187cpp_quote("#ifdef __cplusplus") 188cpp_quote("#define DEFINE_DBGUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \\") 189cpp_quote(" EXTERN_C const GUID name DECLSPEC_HIDDEN; \\") 190cpp_quote(" EXTERN_C const GUID name = \\") 191cpp_quote(" { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }") 192cpp_quote("#else") 193cpp_quote("#define DEFINE_DBGUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \\") 194cpp_quote(" const GUID name DECLSPEC_HIDDEN; \\") 195cpp_quote(" const GUID name = \\") 196cpp_quote(" { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }") 197cpp_quote("#endif") 198cpp_quote("#else") 199cpp_quote("#define DEFINE_DBGUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \\") 200cpp_quote(" EXTERN_C const GUID name DECLSPEC_HIDDEN") 201cpp_quote("#endif") 202 203cpp_quote("DEFINE_DBGUID(DBGUID_SESSION, 0xc8b522f5, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);") 204cpp_quote("DEFINE_DBGUID(DBGUID_ROWSET, 0xc8b522f6, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);") 205cpp_quote("DEFINE_DBGUID(DBGUID_ROW, 0xc8b522f7, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);") 206cpp_quote("DEFINE_DBGUID(DBGUID_STREAM, 0xc8b522f9, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);") 207 208typedef struct tagDBCOLUMNACCESS 209{ 210 void *pData; 211 DBID columnid; 212 DBLENGTH cbDataLen; 213 DBSTATUS dwStatus; 214 DBLENGTH cbMaxLen; 215 DB_DWRESERVE dwReserved; 216 DBTYPE wType; 217 BYTE bPrecision; 218 BYTE bScale; 219} DBCOLUMNACCESS; 220 221typedef DWORD DBROWSTATUS; 222 223enum DBROWSTATUSENUM 224{ 225 DBROWSTATUS_S_OK = 0, 226 /* FIXME */ 227 DBROWSTATUS_E_FAIL = 19, 228 229}; 230 231typedef DWORD DBPART; 232 233enum DBPARTENUM 234{ 235 DBPART_INVALID = 0, 236 DBPART_VALUE = 1, 237 DBPART_LENGTH = 2, 238 DBPART_STATUS = 4, 239}; 240 241typedef DWORD DBPARAMIO; 242 243enum DBPARAMIOENUM 244{ 245 DBPARAMIO_NOTPARAM = 0, 246 DBPARAMIO_INPUT = 1, 247 DBPARAMIO_OUTPUT = 2, 248}; 249 250typedef DWORD DBMEMOWNER; 251 252enum DBMEMOWNERENUM 253{ 254 DBMEMOWNER_CLIENTOWNED = 0, 255 DBMEMOWNER_PROVIDEROWNED = 1, 256}; 257 258typedef struct tagDBOBJECT 259{ 260 DWORD dwFlags; 261 IID iid; 262} DBOBJECT; 263 264typedef struct tagDBBINDEXT 265{ 266 [size_is((ULONG)ulExtension)] BYTE *pExtension; 267 DBCOUNTITEM ulExtension; 268} DBBINDEXT; 269 270typedef struct tagDBBINDING 271{ 272 DBORDINAL iOrdinal; 273 DBBYTEOFFSET obValue; 274 DBBYTEOFFSET obLength; 275 DBBYTEOFFSET obStatus; 276 ITypeInfo *pTypeInfo; 277 DBOBJECT *pObject; 278 DBBINDEXT *pBindExt; 279 DBPART dwPart; 280 DBMEMOWNER dwMemOwner; 281 DBPARAMIO eParamIO; 282 DBLENGTH cbMaxLen; 283 DWORD dwFlags; 284 DBTYPE wType; 285 BYTE bPrecision; 286 BYTE bScale; 287} DBBINDING; 288 289typedef ULONG_PTR HACCESSOR; 290 291cpp_quote("#define DB_INVALID_HACCESSOR 0x00") 292 293typedef ULONG_PTR HROW; 294 295cpp_quote("#define DB_NULL_HROW 0x00") 296 297typedef ULONG_PTR HWATCHREGION; 298 299cpp_quote("#define DBWATCHREGION_NULL NULL") 300 301typedef ULONG_PTR HCHAPTER; 302 303cpp_quote("#define DB_NULL_HCHAPTER 0x00") 304 305typedef struct tagDBPARAMS 306{ 307 void *pData; 308 DB_UPARAMS cParamSets; 309 HACCESSOR hAccessor; 310} DBPARAMS; 311 312typedef DWORD DBASYNCHOP; 313 314enum DBASYNCHOPENUM 315{ 316 DBSYNCHOP_OPEN, 317}; 318 319typedef DWORD DBASYNCHPHASE; 320 321enum DBASYNCHPHASEENUM 322{ 323 DBASYNCHPHASE_INITIALIZATION, 324 DBASYNCHPHASE_POPULATION, 325 DBASYNCHPHASE_COMPLETE, 326 DBASYNCHPHASE_CANCELED, 327}; 328 329typedef struct tagRMTPACK 330{ 331 ISequentialStream *pISeqStream; 332 ULONG cbData; 333 ULONG cBSTR; 334 [size_is(cBSTR)] BSTR *rgBSTR; 335 ULONG cVARIANT; 336 [size_is(cVARIANT)] VARIANT *rgVARIANT; 337 ULONG cIDISPATCH; 338 [size_is(cIDISPATCH)] IDispatch **rgIDISPATCH; 339 ULONG cIUNKNOWN; 340 [size_is(cIUNKNOWN)] IUnknown **rgIUNKNOWN; 341 ULONG cPROPVARIANT; 342 [size_is(cPROPVARIANT)] PROPVARIANT *rgPROPVARIANT; 343 ULONG cArray; 344 [size_is(cArray)] VARIANT *rgArray; 345} RMTPACK; 346