TestIndexer.pp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. program TestIndexer;
  2. { $define usefirebird}
  3. { $define usemem}
  4. {$mode objfpc}{$H+}
  5. {$IFDEF UNIX}
  6. {$linklib pthread}
  7. {$ENDIF}
  8. uses
  9. SysUtils,
  10. {$IFDEF UNIX} {$IFDEF UseCThreads}
  11. cthreads,
  12. {$ENDIF} {$ENDIF}
  13. {$ifdef usefirebird}
  14. ibase60dyn,SQLDBIndexDB, fbIndexdb,
  15. {$else}
  16. {$ifdef usemem}
  17. memindexdb,
  18. {$else}
  19. SQLIteIndexDB,
  20. {$endif}
  21. {$endif}
  22. fpIndexer,
  23. //indexer readers
  24. IReaderTXT, IReaderPAS, IReaderHTML;
  25. Type
  26. { TProgressLog }
  27. TProgressLog = Class(TObject)
  28. procedure DoLog(Sender : TObject; Const ACurrent,ACount : Integer; Const AURL : UTF8String);
  29. end;
  30. {$ifdef usefirebird}
  31. function SetupDB : TCustomIndexDB;
  32. var
  33. IB: TFBIndexDB;
  34. begin
  35. IB := TFBIndexDB.Create(nil);
  36. try
  37. IB.DatabasePath := '/home/firebird/index.fb';
  38. IB.UserName := 'SYSDBA';
  39. IB.Password := 'masterkey';
  40. if not FileExists(IB.DatabasePath) then
  41. IB.CreateDB
  42. else
  43. begin
  44. IB.Connect;
  45. IB.CreateIndexerTables;
  46. end;
  47. except
  48. FreeAndNil(IB);
  49. Raise;
  50. end;
  51. Result:=IB;
  52. end;
  53. {$else}
  54. {$ifdef usemem}
  55. Function SetupDB : TCustomIndexDB;
  56. Var
  57. FI : TFileIndexDB;
  58. begin
  59. FI:=TFileIndexDB.Create(Nil);
  60. FI.FileName:='index.dat';
  61. FI.Connect;
  62. FI.WriteOnCommit:=True;;
  63. Result:=FI;
  64. end;
  65. {$else}
  66. Function SetupDB : TCustomIndexDB;
  67. Var
  68. SB: TSQLIteIndexDB;
  69. begin
  70. SB := TSQLIteIndexDB.Create(nil);
  71. SB.FileName := 'index.db';
  72. if not FileExists(SB.FileName) then
  73. SB.CreateDB
  74. else
  75. begin
  76. SB.Connect;
  77. SB.CreateIndexerTables;
  78. end;
  79. Result:=SB;
  80. end;
  81. {$endif}
  82. {$endif}
  83. Procedure Testindex(ADir : String);
  84. var
  85. Indexer: TFPIndexer; //indexes files
  86. start: TDateTime;
  87. n: int64;
  88. endtime: TDateTime;
  89. Logger : TProgressLog;
  90. begin
  91. //SetHeapTraceOutput('heap.trc');
  92. start := Now;
  93. Indexer := TFPIndexer.Create(Nil);
  94. try
  95. Indexer.Database:=SetupDB;
  96. //setup parameters for indexing
  97. if (ADir<>'') then
  98. Indexer.SearchPath:=ADir
  99. else
  100. {$ifdef unix}
  101. Indexer.SearchPath := '/home/michael/fpc/docs/fcl';
  102. {$else}
  103. Indexer.SearchPath := 'C:\fcl';
  104. {$endif}
  105. Indexer.FileMask := '*.pas;*.html;readme.txt'; //semicolon separated list
  106. Indexer.SearchRecursive := True;
  107. Indexer.DetectLanguage := False;
  108. IgnoreListManager.LoadIgnoreWordsFromFile('english','english.txt');
  109. indexer.Language:='english';
  110. Indexer.UseIgnoreList:=true;
  111. Logger := TProgressLog.Create;
  112. try
  113. Indexer.OnProgress:[email protected];
  114. n := Indexer.Execute(True);
  115. finally
  116. Logger.Free;
  117. end;
  118. //execute the search
  119. endtime := Now;
  120. if N <> 0 then
  121. writeln('indexing succesfull')
  122. else
  123. writeln('error indexing.');
  124. writeln(Format('done in %.1f sec.', [(endtime - start) * 24 * 3600]));
  125. finally
  126. Indexer.Database.free;
  127. FreeAndNil(Indexer);
  128. end;
  129. end;
  130. { TProgressLog }
  131. procedure TProgressLog.DoLog(Sender: TObject; const ACurrent, ACount: Integer;
  132. const AURL: UTF8String);
  133. begin
  134. Writeln((ACurrent/ACount*100):5:2,'% : ',ACurrent,'/',ACount,' : ',AURL);
  135. end;
  136. begin
  137. TestIndex(ParamStr(1));
  138. end.