jwantquery.pas 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774
  1. {******************************************************************************}
  2. { }
  3. { Indezing Service Query API interface Unit for Object Pascal }
  4. { }
  5. { Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
  6. { Corporation. All Rights Reserved. }
  7. { }
  8. { The original file is: nyquery.h, released August 2001. The original Pascal }
  9. { code is: NtQuery.pas, released December 2000. The initial developer of the }
  10. { Pascal code is Marcel van Brakel (brakelm att chello dott nl). }
  11. { }
  12. { Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
  13. { Marcel van Brakel. All Rights Reserved. }
  14. { }
  15. { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
  16. { }
  17. { You may retrieve the latest version of this file at the Project JEDI }
  18. { APILIB home page, located at http://jedi-apilib.sourceforge.net }
  19. { }
  20. { The contents of this file are used with permission, subject to the Mozilla }
  21. { Public License Version 1.1 (the "License"); you may not use this file except }
  22. { in compliance with the License. You may obtain a copy of the License at }
  23. { http://www.mozilla.org/MPL/MPL-1.1.html }
  24. { }
  25. { Software distributed under the License is distributed on an "AS IS" basis, }
  26. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  27. { the specific language governing rights and limitations under the License. }
  28. { }
  29. { Alternatively, the contents of this file may be used under the terms of the }
  30. { GNU Lesser General Public License (the "LGPL License"), in which case the }
  31. { provisions of the LGPL License are applicable instead of those above. }
  32. { If you wish to allow use of your version of this file only under the terms }
  33. { of the LGPL License and not to allow others to use your version of this file }
  34. { under the MPL, indicate your decision by deleting the provisions above and }
  35. { replace them with the notice and other provisions required by the LGPL }
  36. { License. If you do not delete the provisions above, a recipient may use }
  37. { your version of this file under either the MPL or the LGPL License. }
  38. { }
  39. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  40. { }
  41. {******************************************************************************}
  42. unit JwaNtQuery;
  43. {$WEAKPACKAGEUNIT}
  44. {$HPPEMIT ''}
  45. {$HPPEMIT '#include "ntquery.h"'}
  46. {$HPPEMIT ''}
  47. {$I jediapilib.inc}
  48. interface
  49. uses
  50. ActiveX, ComObj, {TODO}
  51. JwaWinType;
  52. {$IFDEF FPC}
  53. Type
  54. PROPID = CARDINAL;
  55. PROPVARIANT=VARIANT;
  56. {$ENDIF}
  57. type
  58. // TODO STUBS see CmdTree.h (cmdtree.idl)
  59. IFilter = Pointer;
  60. IUnkown = Pointer;
  61. ICommand = Pointer;
  62. PPWCHAR = ^PWCHAR;
  63. REFIID = TGUID; // also in ActiveDS
  64. DBID = Pointer;
  65. DBCOMMANDTREE = Pointer;
  66. PDBCOMMANDTREE = Pointer;
  67. DBCOMMANDOP = Pointer;
  68. //
  69. // Use this path for the null catalog, one that doesn't have an index.
  70. // Use it to search for properties of files that are not indexed.
  71. //
  72. const
  73. CINULLCATALOG = '::_noindex_::';
  74. {$EXTERNALSYM CINULLCATALOG}
  75. //
  76. // Use this path to connect to the server for administration work
  77. // (i.e. DocStoreAdmin.) No catalog is associated with the connection
  78. //
  79. CIADMIN = '::_nodocstore_::';
  80. {$EXTERNALSYM CIADMIN}
  81. //
  82. // Minimal support for persistent handlers.
  83. //
  84. function LoadIFilter(pwcsPath: PWCHAR; pUnkOuter: IUnknown; out ppIUnk: IFilter): HRESULT; stdcall;
  85. {$EXTERNALSYM LoadIFilter}
  86. const
  87. LIFF_LOAD_DEFINED_FILTER = 1;
  88. {$EXTERNALSYM LIFF_LOAD_DEFINED_FILTER}
  89. LIFF_IMPLEMENT_TEXT_FILTER_FALLBACK_POLICY = 2;
  90. {$EXTERNALSYM LIFF_IMPLEMENT_TEXT_FILTER_FALLBACK_POLICY}
  91. LIFF_FORCE_TEXT_FILTER_FALLBACK = 3;
  92. {$EXTERNALSYM LIFF_FORCE_TEXT_FILTER_FALLBACK}
  93. function LoadIFilterEx(pwcsPath: PWCHAR; dwFlags: DWORD; const riid: REFIID; out ppIUnk: IUnknown): HRESULT; stdcall;
  94. {$EXTERNALSYM LoadIFilterEx}
  95. function BindIFilterFromStorage(pStg: IStorage; pUnkOuter: IUnknown; out ppIUnk: IFilter): HRESULT; stdcall;
  96. {$EXTERNALSYM BindIFilterFromStorage}
  97. function BindIFilterFromStream(pStm: IStream; pUnkOuter: IUnkown; out ppIUnk: IFilter): HRESULT; stdcall;
  98. {$EXTERNALSYM BindIFilterFromStream}
  99. function LocateCatalogsW(pwszScope: PWCHAR; iBmk: ULONG; pwszMachine: PWCHAR;
  100. var pccMachine: ULONG; pwszCat: PWCHAR; var pccCat: ULONG): HRESULT; stdcall;
  101. {$EXTERNALSYM LocateCatalogsW}
  102. //
  103. // For calling from VB
  104. //
  105. function LocateCatalogsA(pwszScope: PCHAR; iBmk: ULONG; pwszMachine: PCHAR;
  106. var pccMachine: ULONG; pwszCat: PCHAR; var pccCat: ULONG): HRESULT; stdcall;
  107. {$EXTERNALSYM LocateCatalogsA}
  108. function LocateCatalogs(pwszScope: PTCHAR; iBmk: ULONG; pwszMachine: PTCHAR;
  109. var pccMachine: ULONG; pwszCat: PTCHAR; var pccCat: ULONG): HRESULT; stdcall;
  110. {$EXTERNALSYM LocateCatalogs}
  111. // The Index Server Data Source Object CLSID
  112. const
  113. CLSID_INDEX_SERVER_DSO: TGUID = (
  114. D1:$F9AE8980; D2:$7E52; D3:$11d0; D4:($89,$64,$00,$C0,$4F,$D6,$11,$D7));
  115. {$EXTERNALSYM CLSID_INDEX_SERVER_DSO}
  116. // The storage property set
  117. PSGUID_STORAGE: TGUID = (
  118. D1:$b725f130; D2:$47ef; D3:$101a; D4:($a5,$f1,$02,$60,$8c,$9e,$eb,$ac));
  119. {$EXTERNALSYM PSGUID_STORAGE}
  120. //#define PID_STG_DICTIONARY ((PROPID) 0x00000000) //reserved
  121. //#define PID_STG_CODEPAGE ((PROPID) 0x00000001) //reserved
  122. PID_STG_DIRECTORY = PROPID($00000002);
  123. {$EXTERNALSYM PID_STG_DIRECTORY}
  124. PID_STG_CLASSID = PROPID($00000003);
  125. {$EXTERNALSYM PID_STG_CLASSID}
  126. PID_STG_STORAGETYPE = PROPID($00000004);
  127. {$EXTERNALSYM PID_STG_STORAGETYPE}
  128. PID_STG_VOLUME_ID = PROPID($00000005);
  129. {$EXTERNALSYM PID_STG_VOLUME_ID}
  130. PID_STG_PARENT_WORKID = PROPID($00000006);
  131. {$EXTERNALSYM PID_STG_PARENT_WORKID}
  132. PID_STG_SECONDARYSTORE = PROPID($00000007);
  133. {$EXTERNALSYM PID_STG_SECONDARYSTORE}
  134. PID_STG_FILEINDEX = PROPID($00000008);
  135. {$EXTERNALSYM PID_STG_FILEINDEX}
  136. PID_STG_LASTCHANGEUSN = PROPID($00000009);
  137. {$EXTERNALSYM PID_STG_LASTCHANGEUSN}
  138. PID_STG_NAME = PROPID($0000000a);
  139. {$EXTERNALSYM PID_STG_NAME}
  140. PID_STG_PATH = PROPID($0000000b);
  141. {$EXTERNALSYM PID_STG_PATH}
  142. PID_STG_SIZE = PROPID($0000000c);
  143. {$EXTERNALSYM PID_STG_SIZE}
  144. PID_STG_ATTRIBUTES = PROPID($0000000d);
  145. {$EXTERNALSYM PID_STG_ATTRIBUTES}
  146. PID_STG_WRITETIME = PROPID($0000000e);
  147. {$EXTERNALSYM PID_STG_WRITETIME}
  148. PID_STG_CREATETIME = PROPID($0000000f);
  149. {$EXTERNALSYM PID_STG_CREATETIME}
  150. PID_STG_ACCESSTIME = PROPID($00000010);
  151. {$EXTERNALSYM PID_STG_ACCESSTIME}
  152. PID_STG_CHANGETIME = PROPID($00000011);
  153. {$EXTERNALSYM PID_STG_CHANGETIME}
  154. PID_STG_CONTENTS = PROPID($00000013);
  155. {$EXTERNALSYM PID_STG_CONTENTS}
  156. PID_STG_SHORTNAME = PROPID($00000014);
  157. {$EXTERNALSYM PID_STG_SHORTNAME}
  158. PID_STG_MAX = PID_STG_SHORTNAME;
  159. {$EXTERNALSYM PID_STG_MAX}
  160. CSTORAGEPROPERTY = $15;
  161. {$EXTERNALSYM CSTORAGEPROPERTY}
  162. // File System Content Index Framework property set
  163. DBPROPSET_FSCIFRMWRK_EXT: TGUID = (
  164. D1:$A9BD1526; D2:$6A80; D3:$11D0; D4:($8C,$9D,$00,$20,$AF,$1D,$74,$0E));
  165. {$EXTERNALSYM DBPROPSET_FSCIFRMWRK_EXT}
  166. DBPROP_CI_CATALOG_NAME = 2;
  167. {$EXTERNALSYM DBPROP_CI_CATALOG_NAME}
  168. DBPROP_CI_INCLUDE_SCOPES = 3;
  169. {$EXTERNALSYM DBPROP_CI_INCLUDE_SCOPES}
  170. DBPROP_CI_DEPTHS = 4; // obsolete
  171. {$EXTERNALSYM DBPROP_CI_DEPTHS}
  172. DBPROP_CI_SCOPE_FLAGS = 4;
  173. {$EXTERNALSYM DBPROP_CI_SCOPE_FLAGS}
  174. DBPROP_CI_EXCLUDE_SCOPES = 5;
  175. {$EXTERNALSYM DBPROP_CI_EXCLUDE_SCOPES}
  176. DBPROP_CI_SECURITY_ID = 6;
  177. {$EXTERNALSYM DBPROP_CI_SECURITY_ID}
  178. DBPROP_CI_QUERY_TYPE = 7;
  179. {$EXTERNALSYM DBPROP_CI_QUERY_TYPE}
  180. // Query Extension property set
  181. DBPROPSET_QUERYEXT: TGUID = (
  182. D1:$A7AC77ED; D2:$F8D7; D3:$11CE; D4:($A7,$98,$00,$20,$F8,$00,$80,$25));
  183. {$EXTERNALSYM DBPROPSET_QUERYEXT}
  184. DBPROP_USECONTENTINDEX = 2;
  185. {$EXTERNALSYM DBPROP_USECONTENTINDEX}
  186. DBPROP_DEFERNONINDEXEDTRIMMING = 3;
  187. {$EXTERNALSYM DBPROP_DEFERNONINDEXEDTRIMMING}
  188. DBPROP_USEEXTENDEDDBTYPES = 4;
  189. {$EXTERNALSYM DBPROP_USEEXTENDEDDBTYPES}
  190. DBPROP_FIRSTROWS = 7;
  191. {$EXTERNALSYM DBPROP_FIRSTROWS}
  192. // Content Index Framework Core property set
  193. DBPROPSET_CIFRMWRKCORE_EXT: TGUID = (
  194. D1:$afafaca5; D2:$b5d1; D3:$11d0; D4:($8c,$62,$00,$c0,$4f,$c2,$db,$8d));
  195. {$EXTERNALSYM DBPROPSET_CIFRMWRKCORE_EXT}
  196. DBPROP_MACHINE = 2;
  197. {$EXTERNALSYM DBPROP_MACHINE}
  198. DBPROP_CLIENT_CLSID = 3;
  199. {$EXTERNALSYM DBPROP_CLIENT_CLSID}
  200. // MSIDXS Rowset property set
  201. DBPROPSET_MSIDXS_ROWSETEXT: TGUID = (
  202. D1:$aa6ee6b0; D2:$e828; D3:$11d0; D4:($b2,$3e,$00,$aa,$00,$47,$fc,$01));
  203. {$EXTERNALSYM DBPROPSET_MSIDXS_ROWSETEXT}
  204. MSIDXSPROP_ROWSETQUERYSTATUS = 2;
  205. {$EXTERNALSYM MSIDXSPROP_ROWSETQUERYSTATUS}
  206. MSIDXSPROP_COMMAND_LOCALE_STRING = 3;
  207. {$EXTERNALSYM MSIDXSPROP_COMMAND_LOCALE_STRING}
  208. MSIDXSPROP_QUERY_RESTRICTION = 4;
  209. {$EXTERNALSYM MSIDXSPROP_QUERY_RESTRICTION}
  210. //
  211. // Query status values returned by MSIDXSPROP_ROWSETQUERYSTATUS
  212. //
  213. // Bits Effect
  214. // ----- -----------------------------------------------------
  215. // 00-02 Fill Status: How data is being updated, if at all.
  216. // 03-15 Bitfield query reliability: How accurate the result is
  217. STAT_BUSY = 0;
  218. {$EXTERNALSYM STAT_BUSY}
  219. STAT_ERROR = $1;
  220. {$EXTERNALSYM STAT_ERROR}
  221. STAT_DONE = $2;
  222. {$EXTERNALSYM STAT_DONE}
  223. STAT_REFRESH = $3;
  224. {$EXTERNALSYM STAT_REFRESH}
  225. function QUERY_FILL_STATUS(x: DWORD): DWORD;
  226. {$EXTERNALSYM QUERY_FILL_STATUS}
  227. const
  228. STAT_PARTIAL_SCOPE = $8;
  229. {$EXTERNALSYM STAT_PARTIAL_SCOPE}
  230. STAT_NOISE_WORDS = $10;
  231. {$EXTERNALSYM STAT_NOISE_WORDS}
  232. STAT_CONTENT_OUT_OF_DATE = $20;
  233. {$EXTERNALSYM STAT_CONTENT_OUT_OF_DATE}
  234. STAT_REFRESH_INCOMPLETE = $40;
  235. {$EXTERNALSYM STAT_REFRESH_INCOMPLETE}
  236. STAT_CONTENT_QUERY_INCOMPLETE = $80;
  237. {$EXTERNALSYM STAT_CONTENT_QUERY_INCOMPLETE}
  238. STAT_TIME_LIMIT_EXCEEDED = $100;
  239. {$EXTERNALSYM STAT_TIME_LIMIT_EXCEEDED}
  240. STAT_SHARING_VIOLATION = $200;
  241. {$EXTERNALSYM STAT_SHARING_VIOLATION}
  242. function QUERY_RELIABILITY_STATUS(x: DWORD): DWORD;
  243. {$EXTERNALSYM QUERY_RELIABILITY_STATUS}
  244. // Scope flags
  245. const
  246. QUERY_SHALLOW = 0;
  247. {$EXTERNALSYM QUERY_SHALLOW}
  248. QUERY_DEEP = 1;
  249. {$EXTERNALSYM QUERY_DEEP}
  250. QUERY_PHYSICAL_PATH = 0;
  251. {$EXTERNALSYM QUERY_PHYSICAL_PATH}
  252. QUERY_VIRTUAL_PATH = 2;
  253. {$EXTERNALSYM QUERY_VIRTUAL_PATH}
  254. // query property set (PSGUID_QUERY) properties not defined in oledb.h
  255. PROPID_QUERY_WORKID = 5;
  256. {$EXTERNALSYM PROPID_QUERY_WORKID}
  257. PROPID_QUERY_UNFILTERED = 7;
  258. {$EXTERNALSYM PROPID_QUERY_UNFILTERED}
  259. PROPID_QUERY_VIRTUALPATH = 9;
  260. {$EXTERNALSYM PROPID_QUERY_VIRTUALPATH}
  261. PROPID_QUERY_LASTSEENTIME = 10;
  262. {$EXTERNALSYM PROPID_QUERY_LASTSEENTIME}
  263. //
  264. // Change or get the current state of a catalog specified.
  265. //
  266. CICAT_STOPPED = $1;
  267. {$EXTERNALSYM CICAT_STOPPED}
  268. CICAT_READONLY = $2;
  269. {$EXTERNALSYM CICAT_READONLY}
  270. CICAT_WRITABLE = $4;
  271. {$EXTERNALSYM CICAT_WRITABLE}
  272. CICAT_NO_QUERY = $8;
  273. {$EXTERNALSYM CICAT_NO_QUERY}
  274. CICAT_GET_STATE = $10;
  275. {$EXTERNALSYM CICAT_GET_STATE}
  276. CICAT_ALL_OPENED = $20;
  277. {$EXTERNALSYM CICAT_ALL_OPENED}
  278. function SetCatalogState(pwcsCat, pwcsMachine: PWCHAR; dwNewState: DWORD;
  279. var pdwOldState: DWORD): HRESULT; stdcall;
  280. {$EXTERNALSYM SetCatalogState}
  281. //
  282. // Query catalog state
  283. //
  284. const
  285. CI_STATE_SHADOW_MERGE = $0001; // Index is performing a shadow merge
  286. {$EXTERNALSYM CI_STATE_SHADOW_MERGE}
  287. CI_STATE_MASTER_MERGE = $0002; // Index is performing a master merge
  288. {$EXTERNALSYM CI_STATE_MASTER_MERGE}
  289. CI_STATE_CONTENT_SCAN_REQUIRED = $0004; // Index is likely corrupt, and a rescan is required
  290. {$EXTERNALSYM CI_STATE_CONTENT_SCAN_REQUIRED}
  291. CI_STATE_ANNEALING_MERGE = $0008; // Index is performing an annealing (optimizing) merge
  292. {$EXTERNALSYM CI_STATE_ANNEALING_MERGE}
  293. CI_STATE_SCANNING = $0010; // Scans are in-progress
  294. {$EXTERNALSYM CI_STATE_SCANNING}
  295. CI_STATE_RECOVERING = $0020; // Index metadata is being recovered
  296. {$EXTERNALSYM CI_STATE_RECOVERING}
  297. CI_STATE_INDEX_MIGRATION_MERGE = $0040; // Reserved for future use
  298. {$EXTERNALSYM CI_STATE_INDEX_MIGRATION_MERGE}
  299. CI_STATE_LOW_MEMORY = $0080; // Indexing is paused due to low memory availability
  300. {$EXTERNALSYM CI_STATE_LOW_MEMORY}
  301. CI_STATE_HIGH_IO = $0100; // Indexing is paused due to a high rate of I/O
  302. {$EXTERNALSYM CI_STATE_HIGH_IO}
  303. CI_STATE_MASTER_MERGE_PAUSED = $0200; // Master merge is paused
  304. {$EXTERNALSYM CI_STATE_MASTER_MERGE_PAUSED}
  305. CI_STATE_READ_ONLY = $0400; // Indexing has been manually paused (read-only)
  306. {$EXTERNALSYM CI_STATE_READ_ONLY}
  307. CI_STATE_BATTERY_POWER = $0800; // Indexing is paused to conserve battery life
  308. {$EXTERNALSYM CI_STATE_BATTERY_POWER}
  309. CI_STATE_USER_ACTIVE = $1000; // Indexing is paused due to high user activity (keyboard/mouse)
  310. {$EXTERNALSYM CI_STATE_USER_ACTIVE}
  311. CI_STATE_STARTING = $2000; // Index is still starting up
  312. {$EXTERNALSYM CI_STATE_STARTING}
  313. CI_STATE_READING_USNS = $4000; // USNs on NTFS volumes are being processed
  314. {$EXTERNALSYM CI_STATE_READING_USNS}
  315. //#include <pshpack4.h>
  316. type
  317. _CI_STATE = record
  318. cbStruct: DWORD;
  319. cWordList: DWORD;
  320. cPersistentIndex: DWORD;
  321. cQueries: DWORD;
  322. cDocuments: DWORD;
  323. cFreshTest: DWORD;
  324. dwMergeProgress: DWORD;
  325. eState: DWORD;
  326. cFilteredDocuments: DWORD;
  327. cTotalDocuments: DWORD;
  328. cPendingScans: DWORD;
  329. dwIndexSize: DWORD;
  330. cUniqueKeys: DWORD;
  331. cSecQDocuments: DWORD;
  332. dwPropCacheSize: DWORD;
  333. end;
  334. {$EXTERNALSYM _CI_STATE}
  335. CI_STATE = _CI_STATE;
  336. {$EXTERNALSYM CI_STATE}
  337. TCiState = CI_STATE;
  338. PCiState = ^CI_STATE;
  339. //#include <poppack.h>
  340. function CIState(pwcsCat, pwcsMachine: PWCHAR; var pCiState: CI_STATE): HRESULT; stdcall;
  341. {$EXTERNALSYM CIState}
  342. //
  343. // Create an ICommand, specifying scopes, catalogs, and machines
  344. //
  345. function CIMakeICommand(out ppCommand: ICommand; cScope: ULONG; aDepths: LPDWORD;
  346. awcsScope, awcsCatalogs, awcsMachine: PPWCHAR): HRESULT; stdcall;
  347. {$EXTERNALSYM CIMakeICommand}
  348. //
  349. // Create an ICommand, specifying a catalog and machine
  350. //
  351. function CICreateCommand(out ppCommand: IUnknown; pUnkOuter: IUnknown;
  352. const riid: REFIID; pwcsCatalog, pwcsMachine: PWCHAR): HRESULT; stdcall;
  353. {$EXTERNALSYM CICreateCommand}
  354. type
  355. tagCIPROPERTYDEF = record
  356. wcsFriendlyName: LPWSTR;
  357. dbType: DWORD;
  358. dbCol: DBID;
  359. end;
  360. {$EXTERNALSYM tagCIPROPERTYDEF}
  361. CIPROPERTYDEF = tagCIPROPERTYDEF;
  362. {$EXTERNALSYM CIPROPERTYDEF}
  363. TCiPropertyDef = CIPROPERTYDEF;
  364. PCiPropertyDef = ^CIPROPERTYDEF;
  365. //
  366. // Values for ulDialect in CITextToSelectTreeEx and CITextToFullTreeEx
  367. //
  368. const
  369. ISQLANG_V1 = 1; // Same as the non-Ex versions
  370. {$EXTERNALSYM ISQLANG_V1}
  371. ISQLANG_V2 = 2;
  372. {$EXTERNALSYM ISQLANG_V2}
  373. //
  374. // Convert pwszRestriction in Triplish to a command tree.
  375. //
  376. function CITextToSelectTree(pwszRestriction: PWCHAR; var ppTree: PDBCOMMANDTREE;
  377. cProperties: ULONG; pProperties: PCIPROPERTYDEF; LocaleID: LCID): HRESULT; stdcall;
  378. {$EXTERNALSYM CITextToSelectTree}
  379. function CITextToSelectTreeEx(pwszRestriction: PWCHAR; ulDialect: ULONG;
  380. var ppTree: PDBCOMMANDTREE; cProperties: ULONG; pProperties: PCIPROPERTYDEF;
  381. LocaleID: LCID): HRESULT; stdcall;
  382. {$EXTERNALSYM CITextToSelectTreeEx}
  383. //
  384. // Convert pwszRestriction in Triplish, project columns, sort columns
  385. // and grouping columns to a command tree.
  386. //
  387. function CITextToFullTree(pwszRestriction, pwszColumns, pwszSortColumns,
  388. pwszGroupings: PWCHAR; var ppTree: PDBCOMMANDTREE; cProperties: ULONG;
  389. pProperties: PCIPROPERTYDEF; LocaleID: LCID): HRESULT; stdcall;
  390. {$EXTERNALSYM CITextToFullTree}
  391. function CITextToFullTreeEx(pwszRestriction: PWCHAR; ulDialect: ULONG;
  392. pwszColumns, pwszSortColumns, pwszGroupings: PWCHAR; var ppTree: PDBCOMMANDTREE;
  393. cProperties: ULONG; pProperties: PCIPROPERTYDEF; LocaleID: LCID): HRESULT; stdcall;
  394. {$EXTERNALSYM CITextToFullTreeEx}
  395. //
  396. // Build a simple restriction node.
  397. //
  398. function CIBuildQueryNode(wcsProperty: PWCHAR; dbOperator: DBCOMMANDOP;
  399. const pvarPropertyValue: PROPVARIANT; var ppTree: PDBCOMMANDTREE;
  400. cProperties: ULONG; pProperty: PCIPROPERTYDEF; LocaleID: LCID): HRESULT; stdcall;
  401. {$EXTERNALSYM CIBuildQueryNode}
  402. //
  403. // Build a restriction tree from an existing tree (could be empty) and a newly added node/tree.
  404. //
  405. function CIBuildQueryTree(pExistingTree: PDBCOMMANDTREE; dbBoolOp: DBCOMMANDOP;
  406. cSiblings: ULONG; ppSibsToCombine: PDBCOMMANDTREE; var ppTree: DBCOMMANDTREE): HRESULT; stdcall;
  407. {$EXTERNALSYM CIBuildQueryTree}
  408. //
  409. // Convert restriction tree, project columns, sort columns
  410. // and grouping columns to a command tree.
  411. //
  412. function CIRestrictionToFullTree(const pTree: DBCOMMANDTREE; pwszColumns,
  413. pwszSortColumns, pwszGroupings: PWCHAR; var ppTree: PDBCOMMANDTREE;
  414. cProperties: ULONG; pReserved: PCIPROPERTYDEF; LocaleID: LCID): HRESULT; stdcall;
  415. {$EXTERNALSYM CIRestrictionToFullTree}
  416. implementation
  417. const
  418. querylib = 'query.dll';
  419. {$IFDEF UNICODE}
  420. AWSuffix = 'W';
  421. {$ELSE}
  422. AWSuffix = 'A';
  423. {$ENDIF UNICODE}
  424. function QUERY_FILL_STATUS(x: DWORD): DWORD;
  425. begin
  426. Result := x and $7;
  427. end;
  428. function QUERY_RELIABILITY_STATUS(x: DWORD): DWORD;
  429. begin
  430. Result := x and $FFF8;
  431. end;
  432. {$IFDEF DYNAMIC_LINK}
  433. var
  434. _LoadIFilterEx: Pointer;
  435. function LoadIFilterEx;
  436. begin
  437. GetProcedureAddress(_LoadIFilterEx, querylib, 'LoadIFilterEx');
  438. asm
  439. MOV ESP, EBP
  440. POP EBP
  441. JMP [_LoadIFilterEx]
  442. end;
  443. end;
  444. var
  445. _LoadIFilter: Pointer;
  446. function LoadIFilter;
  447. begin
  448. GetProcedureAddress(_LoadIFilter, querylib, 'LoadIFilter');
  449. asm
  450. MOV ESP, EBP
  451. POP EBP
  452. JMP [_LoadIFilter]
  453. end;
  454. end;
  455. var
  456. _BindIFilterFromStorage: Pointer;
  457. function BindIFilterFromStorage;
  458. begin
  459. GetProcedureAddress(_BindIFilterFromStorage, querylib, 'BindIFilterFromStorage');
  460. asm
  461. MOV ESP, EBP
  462. POP EBP
  463. JMP [_BindIFilterFromStorage]
  464. end;
  465. end;
  466. var
  467. _BindIFilterFromStream: Pointer;
  468. function BindIFilterFromStream;
  469. begin
  470. GetProcedureAddress(_BindIFilterFromStream, querylib, 'BindIFilterFromStream');
  471. asm
  472. MOV ESP, EBP
  473. POP EBP
  474. JMP [_BindIFilterFromStream]
  475. end;
  476. end;
  477. var
  478. _LocateCatalogsW: Pointer;
  479. function LocateCatalogsW;
  480. begin
  481. GetProcedureAddress(_LocateCatalogsW, querylib, 'LocateCatalogsW');
  482. asm
  483. MOV ESP, EBP
  484. POP EBP
  485. JMP [_LocateCatalogsW]
  486. end;
  487. end;
  488. var
  489. _LocateCatalogsA: Pointer;
  490. function LocateCatalogsA;
  491. begin
  492. GetProcedureAddress(_LocateCatalogsA, querylib, 'LocateCatalogsA');
  493. asm
  494. MOV ESP, EBP
  495. POP EBP
  496. JMP [_LocateCatalogsA]
  497. end;
  498. end;
  499. var
  500. _LocateCatalogs: Pointer;
  501. function LocateCatalogs;
  502. begin
  503. GetProcedureAddress(_LocateCatalogs, querylib, 'LocateCatalogs' + AWSuffix);
  504. asm
  505. MOV ESP, EBP
  506. POP EBP
  507. JMP [_LocateCatalogs]
  508. end;
  509. end;
  510. var
  511. _SetCatalogState: Pointer;
  512. function SetCatalogState;
  513. begin
  514. GetProcedureAddress(_SetCatalogState, querylib, 'SetCatalogState');
  515. asm
  516. MOV ESP, EBP
  517. POP EBP
  518. JMP [_SetCatalogState]
  519. end;
  520. end;
  521. var
  522. _CIState: Pointer;
  523. function CIState;
  524. begin
  525. GetProcedureAddress(_CIState, querylib, 'CIState');
  526. asm
  527. MOV ESP, EBP
  528. POP EBP
  529. JMP [_CIState]
  530. end;
  531. end;
  532. var
  533. _CIMakeICommand: Pointer;
  534. function CIMakeICommand;
  535. begin
  536. GetProcedureAddress(_CIMakeICommand, querylib, 'CIMakeICommand');
  537. asm
  538. MOV ESP, EBP
  539. POP EBP
  540. JMP [_CIMakeICommand]
  541. end;
  542. end;
  543. var
  544. _CICreateCommand: Pointer;
  545. function CICreateCommand;
  546. begin
  547. GetProcedureAddress(_CICreateCommand, querylib, 'CICreateCommand');
  548. asm
  549. MOV ESP, EBP
  550. POP EBP
  551. JMP [_CICreateCommand]
  552. end;
  553. end;
  554. var
  555. _CITextToSelectTree: Pointer;
  556. function CITextToSelectTree;
  557. begin
  558. GetProcedureAddress(_CITextToSelectTree, querylib, 'CITextToSelectTree');
  559. asm
  560. MOV ESP, EBP
  561. POP EBP
  562. JMP [_CITextToSelectTree]
  563. end;
  564. end;
  565. var
  566. _CITextToSelectTreeEx: Pointer;
  567. function CITextToSelectTreeEx;
  568. begin
  569. GetProcedureAddress(_CITextToSelectTreeEx, querylib, 'CITextToSelectTreeEx');
  570. asm
  571. MOV ESP, EBP
  572. POP EBP
  573. JMP [_CITextToSelectTreeEx]
  574. end;
  575. end;
  576. var
  577. _CITextToFullTree: Pointer;
  578. function CITextToFullTree;
  579. begin
  580. GetProcedureAddress(_CITextToFullTree, querylib, 'CITextToSelectTreeEx');
  581. asm
  582. MOV ESP, EBP
  583. POP EBP
  584. JMP [_CITextToFullTree]
  585. end;
  586. end;
  587. var
  588. _CITextToFullTreeEx: Pointer;
  589. function CITextToFullTreeEx;
  590. begin
  591. GetProcedureAddress(_CITextToFullTreeEx, querylib, 'CITextToFullTreeEx');
  592. asm
  593. MOV ESP, EBP
  594. POP EBP
  595. JMP [_CITextToFullTreeEx]
  596. end;
  597. end;
  598. var
  599. _CIBuildQueryNode: Pointer;
  600. function CIBuildQueryNode;
  601. begin
  602. GetProcedureAddress(_CIBuildQueryNode, querylib, 'CIBuildQueryNode');
  603. asm
  604. MOV ESP, EBP
  605. POP EBP
  606. JMP [_CIBuildQueryNode]
  607. end;
  608. end;
  609. var
  610. _CIBuildQueryTree: Pointer;
  611. function CIBuildQueryTree;
  612. begin
  613. GetProcedureAddress(_CIBuildQueryTree, querylib, 'CIBuildQueryTree');
  614. asm
  615. MOV ESP, EBP
  616. POP EBP
  617. JMP [_CIBuildQueryTree]
  618. end;
  619. end;
  620. var
  621. _CIRestrictionToFullTree: Pointer;
  622. function CIRestrictionToFullTree;
  623. begin
  624. GetProcedureAddress(_CIRestrictionToFullTree, querylib, 'CIRestrictionToFullTree');
  625. asm
  626. MOV ESP, EBP
  627. POP EBP
  628. JMP [_CIRestrictionToFullTree]
  629. end;
  630. end;
  631. {$ELSE}
  632. function LoadIFilterEx; external querylib name 'LoadIFilterEx';
  633. function LoadIFilter; external querylib name 'LoadIFilter';
  634. function BindIFilterFromStorage; external querylib name 'BindIFilterFromStorage';
  635. function BindIFilterFromStream; external querylib name 'BindIFilterFromStream';
  636. function LocateCatalogsW; external querylib name 'LocateCatalogsW';
  637. function LocateCatalogsA; external querylib name 'LocateCatalogsA';
  638. function LocateCatalogs; external querylib name 'LocateCatalogs' + AWSuffix;
  639. function SetCatalogState; external querylib name 'SetCatalogState';
  640. function CIState; external querylib name 'CIState';
  641. function CIMakeICommand; external querylib name 'CIMakeICommand';
  642. function CICreateCommand; external querylib name 'CICreateCommand';
  643. function CITextToSelectTree; external querylib name 'CITextToSelectTree';
  644. function CITextToSelectTreeEx; external querylib name 'CITextToSelectTreeEx';
  645. function CITextToFullTree; external querylib name 'CITextToSelectTreeEx';
  646. function CITextToFullTreeEx; external querylib name 'CITextToFullTreeEx';
  647. function CIBuildQueryNode; external querylib name 'CIBuildQueryNode';
  648. function CIBuildQueryTree; external querylib name 'CIBuildQueryTree';
  649. function CIRestrictionToFullTree; external querylib name 'CIRestrictionToFullTree';
  650. {$ENDIF DYNAMIC_LINK}
  651. end.