"Поток сознания" о тестировании и программировании
Заметки о тестировании, программировании и прочий "поток сознания", который жалко писать "в стол"
воскресенье, 12 апреля 2026 г.
Я наверное единственный человек,которого Embarcadero выкинула из списка MVP
Я наверное единственный человек,которого Embarcadero выкинула из списка MVP ;)
m3IDListQueryExecutor
{$IfDef FPC}{$CodePage cp1251}{$EndIf FPC}
unit m3IDListQueryExecutor;
// --------------------------------------------------------------------------
// Родители: "Queries" <> MUID: (66FB115B029F) :: "m3" <> MUID: (66FB10950007) :: "Shared Delphi For Archi" <> MUID: (4ABA2360025A)
// --------------------------------------------------------------------------
// Модуль: "w:\common\components\rtl\Garant\m3\m3IDListQueryExecutor.pas" GeneratorVersion: 1.0.0.883901
// Стереотип: "<>"
// Элемент модели: "Tm3IDListQueryExecutor" MUID: (6759537E0284)
// --------------------------------------------------------------------------
//#UC START# *6759537E0284BeforeDefines*
//#UC END# *6759537E0284BeforeDefines*
{$Include daDefine.inc}
interface
uses
l3IntfUses
, daIDListQueryParams
, l3Ranges
, m3AttrIndexInterfaces
, daQueryInterfaces
, m3QueryInterfaces
, daEnumerableInterfaces
, l3Interfaces
, m4SearchResult
, daQueryParams
, l3LongintList
, daTypes
, evdDATypes
, daAbstractQueryExecutor
;
type
{$If not Defined(_ParamsType_Defined_) }
{Tm3IDListQueryExecutor.}_ParamsType_ = TdaIDListQueryParams;
{$Define _ParamsType_Defined_ }
{$Define _ParamsType_IsClass_ }
{$Define _ParamsType_IsAcceptableForScripts_ }
{$IfEnd} // not Defined(_ParamsType_Defined_)
{$Include Mm3QueryExecutor_imp.pas}
Tm3IDListQueryExecutor = class(_Mm3QueryExecutor_)
protected
function FindByParams(const aParams: TdaIDListQueryParams;
const aSearcher: Im3AttrIndexSearcher): Il3RangeEnumerable; override;
procedure DoDropResult; override;
function DoGetIsEmpty: Boolean; override;
public
{$If NOT Defined(l3NoSRT)}
function SetRefTo(var thePlace: Tm3IDListQueryExecutor): Boolean; overload; {$If Defined(l3HasInl)}inline;{$IfEnd}
{$IfEnd} // NOT Defined(l3NoSRT)
end;//Tm3IDListQueryExecutor
implementation
uses
l3ImplUses
, m3QueryResultSetFromLongintList
, daQueryExecutorFactory
, m3AttrIndexSearcher
, SysUtils
, l3Enumerators
, l3InterfacedIntegerList
, k2Tags
//#UC START# *6759537E0284impl_uses*
//#UC END# *6759537E0284impl_uses*
;
{$Include Mm3QueryExecutor_imp.pas}
{$If NOT Defined(l3NoSRT)}
function Tm3IDListQueryExecutor.SetRefTo(var thePlace: Tm3IDListQueryExecutor): Boolean;
begin
if (thePlace = Self) then
Result := false
else
begin
Result := true;
thePlace.Free;
thePlace := Self.Use;
end;//thePlace = Self
end;//Tm3IDListQueryExecutor.SetRefTo
{$IfEnd} // NOT Defined(l3NoSRT)
function Tm3IDListQueryExecutor.FindByParams(const aParams: TdaIDListQueryParams;
const aSearcher: Im3AttrIndexSearcher): Il3RangeEnumerable;
//#UC START# *670660CF0357_6759537E0284_var*
{$IfDef l3Use_Tl3RangeEnumerableIntersect}
var
l_All : Il3RangeEnumerable;
{$EndIf l3Use_Tl3RangeEnumerableIntersect}
//#UC END# *670660CF0357_6759537E0284_var*
begin
//#UC START# *670660CF0357_6759537E0284_impl*
Result := Il3RangeEnumerable_FromIntegerEnumerable(aParams.IDList.AsEnumerable);
{$IfDef l3Use_Tl3RangeEnumerableIntersect}
l_All := aSearcher.AllDocuments;
Result := Il3RangeEnumerable_Intersect(Result, l_All);
// - minus not existent
{$EndIf l3Use_Tl3RangeEnumerableIntersect}
//#UC END# *670660CF0357_6759537E0284_impl*
end;//Tm3IDListQueryExecutor.FindByParams
procedure Tm3IDListQueryExecutor.DoDropResult;
//#UC START# *5F148B0D0239_6759537E0284_var*
//#UC END# *5F148B0D0239_6759537E0284_var*
begin
//#UC START# *5F148B0D0239_6759537E0284_impl*
f_Found := nil;
f_ResultSet := nil;
f_FilteredFoundIDList := nil;
f_List := nil;
inherited;
//#UC END# *5F148B0D0239_6759537E0284_impl*
end;//Tm3IDListQueryExecutor.DoDropResult
function Tm3IDListQueryExecutor.DoGetIsEmpty: Boolean;
//#UC START# *675953F10122_6759537E0284_var*
//#UC END# *675953F10122_6759537E0284_var*
begin
//#UC START# *675953F10122_6759537E0284_impl*
Result := Self.Params.IDList.Empty;
//#UC END# *675953F10122_6759537E0284_impl*
end;//Tm3IDListQueryExecutor.DoGetIsEmpty
//#UC START# *6759537E0284forDiagramm*
(*
*)
//#UC END# *6759537E0284forDiagramm*
end.
m3DateNumQueryExecutor
{$IfDef FPC}{$CodePage cp1251}{$EndIf FPC}
unit m3DateNumQueryExecutor;
// --------------------------------------------------------------------------
// Родители: "Queries" <> MUID: (66FB115B029F) :: "m3" <> MUID: (66FB10950007) :: "Shared Delphi For Archi" <> MUID: (4ABA2360025A)
// --------------------------------------------------------------------------
// Модуль: "w:\common\components\rtl\Garant\m3\m3DateNumQueryExecutor.pas" GeneratorVersion: 1.0.0.883901
// Стереотип: "<>"
// Элемент модели: "Tm3DateNumQueryExecutor" MUID: (672C8F6000BE)
// --------------------------------------------------------------------------
//#UC START# *672C8F6000BEBeforeDefines*
//#UC END# *672C8F6000BEBeforeDefines*
{$Include daDefine.inc}
interface
uses
l3IntfUses
, daDateNumQueryParams
, l3Ranges
, m3AttrIndexInterfaces
, daQueryInterfaces
, m3QueryInterfaces
, daEnumerableInterfaces
, l3Interfaces
, m4SearchResult
, daQueryParams
, l3LongintList
, daTypes
, evdDATypes
, daAbstractQueryExecutor
;
type
{$If not Defined(_ParamsType_Defined_) }
{Tm3DateNumQueryExecutor.}_ParamsType_ = TdaDateNumQueryParams;
{$Define _ParamsType_Defined_ }
{$Define _ParamsType_IsClass_ }
{$Define _ParamsType_IsAcceptableForScripts_ }
{$IfEnd} // not Defined(_ParamsType_Defined_)
{$Include Mm3QueryExecutor_imp.pas}
Tm3DateNumQueryExecutor = class(_Mm3QueryExecutor_)
protected
function FindByParams(const aParams: TdaDateNumQueryParams;
const aSearcher: Im3AttrIndexSearcher): Il3RangeEnumerable; override;
public
{$If NOT Defined(l3NoSRT)}
function SetRefTo(var thePlace: Tm3DateNumQueryExecutor): Boolean; overload; {$If Defined(l3HasInl)}inline;{$IfEnd}
{$IfEnd} // NOT Defined(l3NoSRT)
end;//Tm3DateNumQueryExecutor
implementation
uses
l3ImplUses
, l3Date
, m3QueryResultSetFromLongintList
, daQueryExecutorFactory
, m3AttrIndexSearcher
, SysUtils
, l3Enumerators
, l3InterfacedIntegerList
, k2Tags
//#UC START# *672C8F6000BEimpl_uses*
//, l3Date
//, k2Tags
//#UC END# *672C8F6000BEimpl_uses*
;
{$Include Mm3QueryExecutor_imp.pas}
{$If NOT Defined(l3NoSRT)}
function Tm3DateNumQueryExecutor.SetRefTo(var thePlace: Tm3DateNumQueryExecutor): Boolean;
begin
if (thePlace = Self) then
Result := false
else
begin
Result := true;
thePlace.Free;
thePlace := Self.Use;
end;//thePlace = Self
end;//Tm3DateNumQueryExecutor.SetRefTo
{$IfEnd} // NOT Defined(l3NoSRT)
function Tm3DateNumQueryExecutor.FindByParams(const aParams: TdaDateNumQueryParams;
const aSearcher: Im3AttrIndexSearcher): Il3RangeEnumerable;
//#UC START# *670660CF0357_672C8F6000BE_var*
var
l_DateResult : Il3RangeEnumerable;
l_MaskResult : Il3RangeEnumerable;
l_NumberTypeResult : Il3RangeEnumerable;
l_dnAddNumResult : Il3RangeEnumerable;
l_HasDate : Boolean;
l_HasNumber : Boolean;
l_HasNumberType : Boolean;
l_FromDate: TStDate;
l_ToDate: TStDate;
//#UC END# *670660CF0357_672C8F6000BE_var*
begin
//#UC START# *670660CF0357_672C8F6000BE_impl*
Result := nil;
l_DateResult := nil;
l_MaskResult := nil;
l_NumberTypeResult := nil;
l_HasDate := false;
l_HasNumber := false;
l_HasNumberType := false;
l_FromDate := aParams.FromDate;
l_ToDate := aParams.ToDate;
if (l_FromDate <> 0) or (l_ToDate <> 0) then
begin
l_HasDate := true;
//lSabDate := MakeSab(GlobalDataProvider.DictServer(CurrentFamily).Dict[da_dlDateNums].HackGroupTbl as TParamGroupTbl);
if (l_ToDate <> 0) then
begin
if aParams.FromDate = 0 then // не ищем записи с пустой датой
begin
aParams.FromDate := 1;
l_FromDate := 1;
end;//aParams.FromDate = 0
l_DateResult := aSearcher.SearchByDates(l_FromDate, l_ToDate);
//lSabDate.Select(dnDateFld, l_FromDate, l_ToDate);
end//l_ToDate <> 0
else
l_DateResult := aSearcher.SearchByDates(l_FromDate, High(TStDate));
//if (fFromDate <> 0) then // это следует из предыдущих if
//lSabDate.Select(dnDateFld, l_FromDate, GREAT_EQUAL)
;
end;//(l_FromDate <> 0) or (l_ToDate <> 0)
if (aParams.NumberMask <> '') then
begin
l_HasNumber := true;
l_MaskResult := aSearcher.SearchByNumber(aParams.NumberMask);
Result := l_MaskResult;
// - пока так
end;//aParams.NumberMask <> ''
if (aParams.DNType <> dnDoc) then
begin
l_HasNumberType := true;
l_NumberTypeResult := aSearcher.SearchByNumberType(aParams.DNType);
if (aParams.DNType = dnPublish) then
begin
l_dnAddNumResult := aSearcher.SearchByNumberType(dnAddNum);
// - при поиске по dnPublish, dnAddNum тоже годится
l_NumberTypeResult := Il3RangeEnumerable_JoinWithOther(l_NumberTypeResult, l_dnAddNumResult);
end//aParams.DNType = dnPublish
else
begin
// - пока оставим эту ветку
end;//aParams.DNType = dnPublish
end;//aParams.DNType <> dnDoc
if l_HasDate
AND l_HasNumber
AND l_HasNumberType then
begin
Result := Il3RangeEnumerable_Intersect(l_DateResult, l_MaskResult);
Result := Il3RangeEnumerable_Intersect(Result, l_NumberTypeResult);
end//l_HasDate
else
if l_HasDate
AND l_HasNumber then
Result := Il3RangeEnumerable_Intersect(l_DateResult, l_MaskResult)
else
if l_HasDate
AND l_HasNumberType then
Result := Il3RangeEnumerable_Intersect(l_DateResult, l_NumberTypeResult)
else
if l_HasNumber
AND l_HasNumberType then
Result := Il3RangeEnumerable_Intersect(l_MaskResult, l_NumberTypeResult)
else
if l_HasNumber then
Result := l_MaskResult
else
if l_HasNumberType then
Result := l_NumberTypeResult
else
if l_HasDate then
Result := l_DateResult
else
Assert(false);
if (Result <> nil) then
Result := Il3RangeEnumerable_Diff(Result, aSearcher.AllRelated);
// - тут вычитаем справки
//#UC END# *670660CF0357_672C8F6000BE_impl*
end;//Tm3DateNumQueryExecutor.FindByParams
//#UC START# *672C8F6000BEforDiagramm*
(*
*)
//#UC END# *672C8F6000BEforDiagramm*
end.
m3LogByActionQueryExecutor
{$IfDef FPC}{$CodePage cp1251}{$EndIf FPC}
unit m3LogByActionQueryExecutor;
// --------------------------------------------------------------------------
// Родители: "Queries" <> MUID: (66FB115B029F) :: "m3" <> MUID: (66FB10950007) :: "Shared Delphi For Archi" <> MUID: (4ABA2360025A)
// --------------------------------------------------------------------------
// Модуль: "w:\common\components\rtl\Garant\m3\m3LogByActionQueryExecutor.pas" GeneratorVersion: 1.0.0.883901
// Стереотип: "<>"
// Элемент модели: "Tm3LogByActionQueryExecutor" MUID: (6745BF7A0131)
// --------------------------------------------------------------------------
//#UC START# *6745BF7A0131BeforeDefines*
//#UC END# *6745BF7A0131BeforeDefines*
{$Include daDefine.inc}
interface
uses
l3IntfUses
, daLogByActionQueryParams
, l3Ranges
, m3AttrIndexInterfaces
, daQueryInterfaces
, m3QueryInterfaces
, daEnumerableInterfaces
, l3Interfaces
, m4SearchResult
, daQueryParams
, l3LongintList
, daTypes
, evdDATypes
, daAbstractQueryExecutor
;
type
{$If not Defined(_ParamsType_Defined_) }
{Tm3LogByActionQueryExecutor.}_ParamsType_ = TdaLogByActionQueryParams;
{$Define _ParamsType_Defined_ }
{$Define _ParamsType_IsClass_ }
{$Define _ParamsType_IsAcceptableForScripts_ }
{$IfEnd} // not Defined(_ParamsType_Defined_)
{$Include Mm3QueryExecutor_imp.pas}
Tm3LogByActionQueryExecutor = class(_Mm3QueryExecutor_)
protected
function FindByParams(const aParams: TdaLogByActionQueryParams;
const aSearcher: Im3AttrIndexSearcher): Il3RangeEnumerable; override;
public
{$If NOT Defined(l3NoSRT)}
function SetRefTo(var thePlace: Tm3LogByActionQueryExecutor): Boolean; overload; {$If Defined(l3HasInl)}inline;{$IfEnd}
{$IfEnd} // NOT Defined(l3NoSRT)
end;//Tm3LogByActionQueryExecutor
implementation
uses
l3ImplUses
, l3Date
, m3QueryResultSetFromLongintList
, daQueryExecutorFactory
, m3AttrIndexSearcher
, SysUtils
, l3Enumerators
, l3InterfacedIntegerList
, k2Tags
//#UC START# *6745BF7A0131impl_uses*
, DT_CONST
, daDataProvider
//#UC END# *6745BF7A0131impl_uses*
;
{$Include Mm3QueryExecutor_imp.pas}
{$If NOT Defined(l3NoSRT)}
function Tm3LogByActionQueryExecutor.SetRefTo(var thePlace: Tm3LogByActionQueryExecutor): Boolean;
begin
if (thePlace = Self) then
Result := false
else
begin
Result := true;
thePlace.Free;
thePlace := Self.Use;
end;//thePlace = Self
end;//Tm3LogByActionQueryExecutor.SetRefTo
{$IfEnd} // NOT Defined(l3NoSRT)
function Tm3LogByActionQueryExecutor.FindByParams(const aParams: TdaLogByActionQueryParams;
const aSearcher: Im3AttrIndexSearcher): Il3RangeEnumerable;
//#UC START# *670660CF0357_6745BF7A0131_var*
var
l_FromDate : TStDate;
l_ToDate : TStDate;
l_HasDate : Boolean;
l_HasUser : Boolean;
l_DateResult : Il3RangeEnumerable;
l_UserResult : Il3RangeEnumerable;
l_OneUserResult : Il3RangeEnumerable;
l_ActionResult : Il3RangeEnumerable;
//l_UserSab : ISab;
l_UserID: TdaUserID;
//l_LogRecType: TdaLogActionFlags;
l_JournalType : Integer;
l_UsersList: Tl3LongintList;
l_IDX: Integer;
var
l_Action: TdaLogActionType;
//#UC END# *670660CF0357_6745BF7A0131_var*
begin
//#UC START# *670660CF0357_6745BF7A0131_impl*
Result := nil;
//f_Sab := MakeSab(LinkServer(CurrentFamily)[atOrdLogRecords]);
l_FromDate := aParams.FromDate;
l_ToDate := aParams.ToDate;
l_HasUser := false;
l_HasDate := false;
l_DateResult := nil;
l_UserResult := nil;
l_Action := aParams.Action;
if (l_Action in cOrdLogActions) then
l_JournalType := k2_tiSysLogRecords
else
l_JournalType := k2_tiLogRecords;
if (l_FromDate <> 0) or (l_ToDate <> 0) then
begin
l_HasDate := true;
if (l_FromDate = l_ToDate) then
l_DateResult := aSearcher.SearchBetweenKeys([l_JournalType, k2_tiStart], l_FromDate, l_ToDate, false)
///f_Sab.Select(lgDate_Key, l_FromDate)
else
begin
if l_FromDate = 0 then
l_FromDate := 1;
if l_ToDate = 0 then
l_ToDate := MaxDate;
l_DateResult := aSearcher.SearchBetweenKeys([l_JournalType, k2_tiStart], l_FromDate, l_ToDate, false);
//f_Sab.Select(lgDate_Key, l_FromDate, l_ToDate);
end;//l_FromDate = l_ToDate
end//(l_FromDate <> 0) or (l_ToDate <> 0)
else
//f_Sab.SelectAll
;
if (aParams.UserID <> 0) then
begin
if aParams.IsUserGroup then
begin
l_UsersList := Tl3LongintList.Create;
try
l_UserResult := nil;
GlobalDataProvider.UserManager.GetUserListOnGroup(aParams.UserID, l_UsersList);
for l_IDX := 0 to l_UsersList.Count - 1 do
begin
l_UserID := l_UsersList[l_IDX];
l_HasUser := true;
l_OneUserResult := aSearcher.SearchByKeyEx([l_JournalType, k2_tiUser], l_UserID, false);
if l_UserResult = nil then
l_UserResult := l_OneUserResult
else
l_UserResult := Il3RangeEnumerable_JoinWithOther(l_UserResult, l_OneUserResult);
end;
finally
FreeAndNil(l_UsersList);
end;
(* l_UserSab := xxxUserManager.xxxGetGroupMembers(aParams.UserID);
try
l_UserSab.TransferToPhoto(lgAuthor_Key, f_Sab);
l_UserSab.RecordsByKey;
f_Sab.AndSab(l_UserSab);
finally
l_UserSab := nil;
end;*)
end//aParams.IsUserGroup
else
begin
l_UserID := aParams.UserID;
l_HasUser := true;
l_UserResult := aSearcher.SearchByKeyEx([l_JournalType, k2_tiUser], l_UserID, false);
(* f_Sab.SubSelect(lgAuthor_Key, l_UserID);*)
end;//aParams.IsUserGroup
end;//aParams.UserID <> 0
(* if (aParams.LogRecType <> acfNone) then
begin
l_LogRecType := aParams.LogRecType;
f_Sab.SubSelect(lgActionFlag_Key, l_LogRecType);
end;//aParams.LogRecType <> acfNone*)
// - это как мы выяснили - нам нахер не нужно
//l_Action := aParams.Action;
(* f_Sab.SubSelect(lgAction_key,l_Action);
f_Sab.ValuesOfKey(lgDocID_Key);
f_Sab.TransferToPhoto(fID_Fld, Get_MainTblPhoto);
f_Sab.RecordsByKey;*)
l_ActionResult := aSearcher.SearchByKeyEx([l_JournalType, k2_tiType], Ord(l_Action), false);
if l_HasUser
AND l_HasDate then
begin
Result := Il3RangeEnumerable_Intersect(l_ActionResult, l_UserResult);
Result := Il3RangeEnumerable_Intersect(Result, l_DateResult);
end//l_HasUser .. l_HasDate
else
if l_HasUser then
Result := Il3RangeEnumerable_Intersect(l_ActionResult, l_UserResult)
else
if l_HasDate then
Result := Il3RangeEnumerable_Intersect(l_ActionResult, l_DateResult)
else
Result := l_ActionResult;
if (Result <> nil) then
Result := Il3RangeEnumerable_Diff(Result, aSearcher.AllRelated);
// - тут вычитаем справки
//#UC END# *670660CF0357_6745BF7A0131_impl*
end;//Tm3LogByActionQueryExecutor.FindByParams
//#UC START# *6745BF7A0131forDiagramm*
(*
*)
//#UC END# *6745BF7A0131forDiagramm*
end.
m3AndQueryExecutor
{$IfDef FPC}{$CodePage cp1251}{$EndIf FPC}
unit m3AndQueryExecutor;
// --------------------------------------------------------------------------
// Родители: "Queries" <> MUID: (66FB115B029F) :: "m3" <> MUID: (66FB10950007) :: "Shared Delphi For Archi" <> MUID: (4ABA2360025A)
// --------------------------------------------------------------------------
// Модуль: "w:\common\components\rtl\Garant\m3\m3AndQueryExecutor.pas" GeneratorVersion: 1.0.0.883901
// Стереотип: "<>"
// Элемент модели: "Tm3AndQueryExecutor" MUID: (670641300230)
// --------------------------------------------------------------------------
//#UC START# *670641300230BeforeDefines*
//#UC END# *670641300230BeforeDefines*
{$Include daDefine.inc}
interface
uses
l3IntfUses
, daAndQueryParams
, m3QueryInterfaces
, daQueryParams
, l3Ranges
, m4SearchResult
, m3AttrIndexInterfaces
, daQueryInterfaces
, daEnumerableInterfaces
, l3Interfaces
, l3LongintList
, daTypes
, evdDATypes
, daAbstractQueryExecutor
;
type
{$If not Defined(_ParamsType_Defined_) }
{Tm3AndQueryExecutor.}_ParamsType_ = TdaAndQueryParams;
{$Define _ParamsType_Defined_ }
{$Define _ParamsType_IsClass_ }
{$Define _ParamsType_IsAcceptableForScripts_ }
{$IfEnd} // not Defined(_ParamsType_Defined_)
{$Include Mm3QueryExecutor_imp.pas}
Tm3AndQueryExecutor = class(_Mm3QueryExecutor_)
private
f_TextExecutor: Im3QueryExecutor;
protected
function FindByParams(const aParams: TdaAndQueryParams;
const aSearcher: Im3AttrIndexSearcher): Il3RangeEnumerable; override;
procedure DoDropResult; override;
function DoGetAddressList: Tm4SearchResult; override;
procedure ClearFields; override;
public
{$If NOT Defined(l3NoSRT)}
function SetRefTo(var thePlace: Tm3AndQueryExecutor): Boolean; overload; {$If Defined(l3HasInl)}inline;{$IfEnd}
{$IfEnd} // NOT Defined(l3NoSRT)
class function ParamClass: TdaQueryParamsClass; override;
end;//Tm3AndQueryExecutor
implementation
uses
l3ImplUses
, daTextQueryParams
, m3QueryResultSetFromLongintList
, daQueryExecutorFactory
, m3AttrIndexSearcher
, SysUtils
, l3Enumerators
, l3InterfacedIntegerList
, k2Tags
//#UC START# *670641300230impl_uses*
//#UC END# *670641300230impl_uses*
;
{$Include Mm3QueryExecutor_imp.pas}
{$If NOT Defined(l3NoSRT)}
function Tm3AndQueryExecutor.SetRefTo(var thePlace: Tm3AndQueryExecutor): Boolean;
begin
if (thePlace = Self) then
Result := false
else
begin
Result := true;
thePlace.Free;
thePlace := Self.Use;
end;//thePlace = Self
end;//Tm3AndQueryExecutor.SetRefTo
{$IfEnd} // NOT Defined(l3NoSRT)
function Tm3AndQueryExecutor.FindByParams(const aParams: TdaAndQueryParams;
const aSearcher: Im3AttrIndexSearcher): Il3RangeEnumerable;
//#UC START# *670660CF0357_670641300230_var*
(*var
I : Integer;
l_Executor: IdtQueryExecutor;*)
var
l_Executor : Im3QueryExecutor;
l_Found : Il3RangeEnumerable;
l_Index : Integer;
//#UC END# *670660CF0357_670641300230_var*
begin
//#UC START# *670660CF0357_670641300230_impl*
Result := nil;
f_TextExecutor := nil;
if (aParams.QueryList.Count = 0) then
Result := aSearcher.AllDocuments
//f_Sab := MakeEmptySab(Get_MainTblPhoto)
else
begin
l_Executor := Self.MakeIntExecutor(aParams.QueryList.Items[0].Query);
if aParams.QueryList.Items[0].Query is TdaTextQueryParams then
f_TextExecutor := l_Executor;
Result := l_Executor.Find;
if (aParams.QueryList.Count = 1) then
begin
Exit;
end;//aParams.QueryList.Count = 1
for l_Index := 1 to Pred(aParams.QueryList.Count) do
begin
l_Executor := Self.MakeIntExecutor(aParams.QueryList.Items[l_Index].Query);
if (f_TextExecutor = nil) and (aParams.QueryList.Items[l_Index].Query is TdaTextQueryParams) then
f_TextExecutor := l_Executor;
l_Found := l_Executor.Find;
if (l_Found = nil)
OR l_Found.Empty then
begin
//Assert(false);
// - пересечение с пустым множеством это что?
Result := nil;
break;
// пересечение это общие элементы обоих множеств = пусто
end//l_Found = nil
else
begin
Result := Il3RangeEnumerable_Intersect(Result, l_Found);
if (Result = nil)
OR Result.Empty then
break;
// - нет смысла дальше искать
end;//l_Found = nil
end;//for l_Index
(* l_Executor := TdtQueryExecutorFactory.Instance.MakeIntExecutor(aParams.QueryList.Items[0].Query);
if aParams.QueryList.Items[0].Query is TdaTextQueryParams then
f_TextExecutor := l_Executor;
l_Executor.MainTblPhoto := Get_MainTblPhoto;
f_Sab := MakeSabCopy(l_Executor.FoundListSab);
l_Executor.DropResult;
for I := 1 to Pred(aParams.QueryList.Count) do
begin
if not f_Sab.IsEmpty then // если у нас пустой результат,
begin
l_Executor := TdtQueryExecutorFactory.Instance.MakeIntExecutor(aParams.QueryList.Items[I].Query);
if (f_TextExecutor = nil) and (aParams.QueryList.Items[I].Query is TdaTextQueryParams) then
f_TextExecutor := l_Executor;
l_Executor.MainTblPhoto := Get_MainTblPhoto;
f_Sab.AndSab(l_Executor.FoundListSab);
l_Executor.DropResult;
end
else
if (f_TextExecutor = nil) and (aParams.QueryList.Items[I].Query is TdaTextQueryParams) then
f_TextExecutor := TdtQueryExecutorFactory.Instance.MakeIntExecutor(aParams.QueryList.Items[I].Query);
end;*)
//Assert(false);
end;//aParams.QueryList.Count = 0
//#UC END# *670660CF0357_670641300230_impl*
end;//Tm3AndQueryExecutor.FindByParams
class function Tm3AndQueryExecutor.ParamClass: TdaQueryParamsClass;
//#UC START# *5EEB473B012C_670641300230_var*
//#UC END# *5EEB473B012C_670641300230_var*
begin
//#UC START# *5EEB473B012C_670641300230_impl*
Result := inherited ParamClass;
//#UC END# *5EEB473B012C_670641300230_impl*
end;//Tm3AndQueryExecutor.ParamClass
procedure Tm3AndQueryExecutor.DoDropResult;
//#UC START# *5F148B0D0239_670641300230_var*
//#UC END# *5F148B0D0239_670641300230_var*
begin
//#UC START# *5F148B0D0239_670641300230_impl*
inherited;
f_TextExecutor := nil;
//#UC END# *5F148B0D0239_670641300230_impl*
end;//Tm3AndQueryExecutor.DoDropResult
function Tm3AndQueryExecutor.DoGetAddressList: Tm4SearchResult;
//#UC START# *670F8AF6026D_670641300230_var*
//#UC END# *670F8AF6026D_670641300230_var*
begin
//#UC START# *670F8AF6026D_670641300230_impl*
if (f_TextExecutor = nil) then
Result := nil
else
Result := f_TextExecutor.AddressList;
//#UC END# *670F8AF6026D_670641300230_impl*
end;//Tm3AndQueryExecutor.DoGetAddressList
procedure Tm3AndQueryExecutor.ClearFields;
begin
f_TextExecutor := nil;
inherited;
end;//Tm3AndQueryExecutor.ClearFields
//#UC START# *670641300230forDiagramm*
(*
*)
//#UC END# *670641300230forDiagramm*
end.
m3OrQueryExecutor
{$IfDef FPC}{$CodePage cp1251}{$EndIf FPC}
unit m3OrQueryExecutor;
// --------------------------------------------------------------------------
// Родители: "Queries" <> MUID: (66FB115B029F) :: "m3" <> MUID: (66FB10950007) :: "Shared Delphi For Archi" <> MUID: (4ABA2360025A)
// --------------------------------------------------------------------------
// Модуль: "w:\common\components\rtl\Garant\m3\m3OrQueryExecutor.pas" GeneratorVersion: 1.0.0.883901
// Стереотип: "<>"
// Элемент модели: "Tm3OrQueryExecutor" MUID: (67A4A81D029F)
// --------------------------------------------------------------------------
//#UC START# *67A4A81D029FBeforeDefines*
//#UC END# *67A4A81D029FBeforeDefines*
{$Include daDefine.inc}
interface
uses
l3IntfUses
, daOrQueryParams
, l3Ranges
, m3AttrIndexInterfaces
, daQueryInterfaces
, m3QueryInterfaces
, daEnumerableInterfaces
, l3Interfaces
, m4SearchResult
, daQueryParams
, l3LongintList
, daTypes
, evdDATypes
, daAbstractQueryExecutor
;
type
{$If not Defined(_ParamsType_Defined_) }
{Tm3OrQueryExecutor.}_ParamsType_ = TdaOrQueryParams;
{$Define _ParamsType_Defined_ }
{$Define _ParamsType_IsClass_ }
{$Define _ParamsType_IsAcceptableForScripts_ }
{$IfEnd} // not Defined(_ParamsType_Defined_)
{$Include Mm3QueryExecutor_imp.pas}
Tm3OrQueryExecutor = class(_Mm3QueryExecutor_)
protected
function FindByParams(const aParams: TdaOrQueryParams;
const aSearcher: Im3AttrIndexSearcher): Il3RangeEnumerable; override;
public
{$If NOT Defined(l3NoSRT)}
function SetRefTo(var thePlace: Tm3OrQueryExecutor): Boolean; overload; {$If Defined(l3HasInl)}inline;{$IfEnd}
{$IfEnd} // NOT Defined(l3NoSRT)
end;//Tm3OrQueryExecutor
implementation
uses
l3ImplUses
, m3QueryResultSetFromLongintList
, daQueryExecutorFactory
, m3AttrIndexSearcher
, SysUtils
, l3Enumerators
, l3InterfacedIntegerList
, k2Tags
//#UC START# *67A4A81D029Fimpl_uses*
//#UC END# *67A4A81D029Fimpl_uses*
;
{$Include Mm3QueryExecutor_imp.pas}
{$If NOT Defined(l3NoSRT)}
function Tm3OrQueryExecutor.SetRefTo(var thePlace: Tm3OrQueryExecutor): Boolean;
begin
if (thePlace = Self) then
Result := false
else
begin
Result := true;
thePlace.Free;
thePlace := Self.Use;
end;//thePlace = Self
end;//Tm3OrQueryExecutor.SetRefTo
{$IfEnd} // NOT Defined(l3NoSRT)
function Tm3OrQueryExecutor.FindByParams(const aParams: TdaOrQueryParams;
const aSearcher: Im3AttrIndexSearcher): Il3RangeEnumerable;
//#UC START# *670660CF0357_67A4A81D029F_var*
var
l_Executor : Im3QueryExecutor;
l_Found : Il3RangeEnumerable;
l_Index : Integer;
//#UC END# *670660CF0357_67A4A81D029F_var*
begin
//#UC START# *670660CF0357_67A4A81D029F_impl*
Result := nil;
for l_Index := 0 to Pred(aParams.QueryList.Count) do
begin
l_Executor := Self.MakeIntExecutor(aParams.QueryList.Items[l_Index].Query);
// if (f_TextExecutor = nil) and (aParams.QueryList.Items[l_Index].Query is TdaTextQueryParams) then
// f_TextExecutor := l_Executor;
l_Found := l_Executor.Find;
Result := Il3RangeEnumerable_JoinWithOther(Result, l_Found);
end;//for l_Index
//#UC END# *670660CF0357_67A4A81D029F_impl*
end;//Tm3OrQueryExecutor.FindByParams
//#UC START# *67A4A81D029FforDiagramm*
(*
*)
//#UC END# *67A4A81D029FforDiagramm*
end.
Подписаться на:
Комментарии (Atom)