jwantquery.pas 23 KB

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