{$IfDef FPC}{$CodePage cp1251}{$EndIf FPC}
unit m3TextQueryExecutor;
// --------------------------------------------------------------------------
// Родители: "Queries" <> MUID: (66FB115B029F) :: "m3" <> MUID: (66FB10950007) :: "Shared Delphi For Archi" <> MUID: (4ABA2360025A)
// --------------------------------------------------------------------------
// Модуль: "w:\common\components\rtl\Garant\m3\m3TextQueryExecutor.pas" GeneratorVersion: 1.0.0.883901
// Стереотип: "<>"
// Элемент модели: "Tm3TextQueryExecutor" MUID: (670F87D90387)
// --------------------------------------------------------------------------
//#UC START# *670F87D90387BeforeDefines*
//#UC END# *670F87D90387BeforeDefines*
{$Include daDefine.inc}
interface
uses
l3IntfUses
, daTextQueryParams
, m4SearchResult
, l3Ranges
, m3AttrIndexInterfaces
, daQueryInterfaces
, m3QueryInterfaces
, daEnumerableInterfaces
, l3Interfaces
, daQueryParams
, l3LongintList
, daTypes
, evdDATypes
, daAbstractQueryExecutor
;
type
{$If not Defined(_ParamsType_Defined_) }
{Tm3TextQueryExecutor.}_ParamsType_ = TdaTextQueryParams;
{$Define _ParamsType_Defined_ }
{$Define _ParamsType_IsClass_ }
{$Define _ParamsType_IsAcceptableForScripts_ }
{$IfEnd} // not Defined(_ParamsType_Defined_)
{$Include Mm3QueryExecutor_imp.pas}
Tm3TextQueryExecutor = class(_Mm3QueryExecutor_)
private
f_Addresses: Tm4SearchResult;
protected
function FindByParams(const aParams: TdaTextQueryParams;
const aSearcher: Im3AttrIndexSearcher): Il3RangeEnumerable; override;
procedure Cleanup; override;
{* Функция очистки полей объекта. }
function DoGetAddressList: Tm4SearchResult; override;
public
{$If NOT Defined(l3NoSRT)}
function SetRefTo(var thePlace: Tm3TextQueryExecutor): Boolean; overload; {$If Defined(l3HasInl)}inline;{$IfEnd}
{$IfEnd} // NOT Defined(l3NoSRT)
end;//Tm3TextQueryExecutor
implementation
uses
l3ImplUses
, m4SearchExEx
, m3QueryResultSetFromLongintList
, daQueryExecutorFactory
, m3AttrIndexSearcher
, SysUtils
, l3Enumerators
, l3InterfacedIntegerList
, k2Tags
//#UC START# *670F87D90387impl_uses*
, l3CoreInterfaces
, l3String
, m3SearcherInterfaces
, m3DBHelper
, m4SearchEx
//#UC END# *670F87D90387impl_uses*
;
{$Include Mm3QueryExecutor_imp.pas}
{$If NOT Defined(l3NoSRT)}
function Tm3TextQueryExecutor.SetRefTo(var thePlace: Tm3TextQueryExecutor): Boolean;
begin
if (thePlace = Self) then
Result := false
else
begin
Result := true;
thePlace.Free;
thePlace := Self.Use;
end;//thePlace = Self
end;//Tm3TextQueryExecutor.SetRefTo
{$IfEnd} // NOT Defined(l3NoSRT)
function Tm3TextQueryExecutor.FindByParams(const aParams: TdaTextQueryParams;
const aSearcher: Im3AttrIndexSearcher): Il3RangeEnumerable;
//#UC START# *670660CF0357_670F87D90387_var*
var
l_Name : TFileName;
l_Formula : AnsiString;
l_IT : TdaIndexType;
l_DBHelper : Im3DBHelper;
l_IDList : Tl3LongintList;
l_Res : Pm4SearchResult;
{$IfDef l3Use_Tl3RangeEnumerableIntersect}
l_All : Il3RangeEnumerable;
{$EndIf l3Use_Tl3RangeEnumerableIntersect}
//#UC END# *670660CF0357_670F87D90387_var*
begin
//#UC START# *670660CF0357_670F87D90387_impl*
Result := nil;
FreeAndNil(f_Addresses);
l_IT := Params.IndexType;
l_Name := Self.f_BaseName;
l_Res := @f_Addresses;
Case l_IT of
da_itHeading:
begin
l_Name := l_Name + '#Name_(s)#.idx';
//l_Res := nil;
// - детализацию адресов нам не надо
end;//da_itHeading
da_itText:
begin
l_DBHelper := Tm3DBHelper.Make(l_Name);
//l_DBHelper := Tm3DBHelper.Make(GlobalHtServer.FamilyTbl.FamilyPath(aFamily)+'bserv'+IntToHex(aFamily,3));
try
l_Name := Il3CString_ToFileName(l_DBHelper.IndexName);
finally
l_DBHelper := nil;
end;//try..finally
end;//da_itText
da_itDictEntry:
Assert(false);
end;//Case l_IT
l_Formula := Params.TextFormula;
l_IDList := m4SearchByFormula(l_Name, l3PCharLen(l_Formula), l_Res);
try
Result := Il3RangeEnumerable_FromIntegerEnumerable(l_IDList.AsEnumerable);
{$IfDef l3Use_Tl3RangeEnumerableIntersect}
l_All := aSearcher.AllDocuments;
Result := Il3RangeEnumerable_Intersect(Result, l_All);
// - пересекаем со списком "всех документов", чтобы отсечь "несуществующие"
{$EndIf l3Use_Tl3RangeEnumerableIntersect}
Result := Il3RangeEnumerable_Diff(Result, aSearcher.AllRelated);
(* f_Sab := MakeValueSet(Get_MainTblPhoto.Table, fID_Fld, l_IDList);
f_Sab.RecordsByKey;*)
finally
FreeAndNil(l_IDList);
end;//try..finally
//#UC END# *670660CF0357_670F87D90387_impl*
end;//Tm3TextQueryExecutor.FindByParams
procedure Tm3TextQueryExecutor.Cleanup;
{* Функция очистки полей объекта. }
//#UC START# *479731C50290_670F87D90387_var*
//#UC END# *479731C50290_670F87D90387_var*
begin
//#UC START# *479731C50290_670F87D90387_impl*
FreeAndNil(f_Addresses);
inherited;
//#UC END# *479731C50290_670F87D90387_impl*
end;//Tm3TextQueryExecutor.Cleanup
function Tm3TextQueryExecutor.DoGetAddressList: Tm4SearchResult;
//#UC START# *670F8AF6026D_670F87D90387_var*
//#UC END# *670F8AF6026D_670F87D90387_var*
begin
//#UC START# *670F8AF6026D_670F87D90387_impl*
Self.GetList;
Result := f_Addresses;
//#UC END# *670F8AF6026D_670F87D90387_impl*
end;//Tm3TextQueryExecutor.DoGetAddressList
//#UC START# *670F87D90387forDiagramm*
(*
*)
//#UC END# *670F87D90387forDiagramm*
end.
Заметки о тестировании, программировании и прочий "поток сознания", который жалко писать "в стол"
воскресенье, 12 апреля 2026 г.
m3TextQueryExecutor
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий