{$IfDef FPC}{$CodePage cp1251}{$EndIf FPC}
unit m3DirectQueryExecutorFactory;
// --------------------------------------------------------------------------
// Родители: "Queries" <> MUID: (66FB115B029F) :: "m3" <> MUID: (66FB10950007) :: "Shared Delphi For Archi" <> MUID: (4ABA2360025A)
// --------------------------------------------------------------------------
// Модуль: "w:\common\components\rtl\Garant\m3\m3DirectQueryExecutorFactory.pas" GeneratorVersion: 1.0.0.883901
// Стереотип: "<>"
// Элемент модели: "Tm3DirectQueryExecutorFactory" MUID: (66FB12220352)
// --------------------------------------------------------------------------
//#UC START# *66FB12220352beforeDefines*
//#UC END# *66FB12220352beforeDefines*
{$Include daDefine.inc}
interface
uses
l3IntfUses
, l3ProtoObject
, daQueryExecutorFactory
, daQueryInterfaces
, daQueryParams
;
type
Tm3DirectQueryExecutorFactory = class(Tl3ProtoObject, IdaQueryExecutorFactory)
private
f_BaseName: AnsiString;
protected
procedure InitFields; override;
{$If NOT Defined(DesignTimeLibrary)}
class function IsCacheable: Boolean; override;
{* функция класса, определяющая могут ли объекты данного класса попадать в кэш повторного использования. }
{$IfEnd} // NOT Defined(DesignTimeLibrary)
procedure InitAfterAlloc; override;
public
procedure SetBaseName(const aBaseName: AnsiString);
{$If NOT Defined(l3NoSRT)}
function SetRefTo(var thePlace: Tm3DirectQueryExecutorFactory): Boolean; overload; {$If Defined(l3HasInl)}inline;{$IfEnd}
{$IfEnd} // NOT Defined(l3NoSRT)
function MakeExecutor(aParams: TdaQueryParams): IdaQueryExecutor;
constructor Create(aDummy: Integer); reintroduce;
{* Специальный хак чтобы напрямую не вызывали конструктор Tm3DirectQueryExecutorFactory }
constructor CreateInstance; reintroduce;
{* Конструктор экземпляра синглетона Tm3DirectQueryExecutorFactory }
class function Instance: Tm3DirectQueryExecutorFactory;
{* Метод получения экземпляра синглетона Tm3DirectQueryExecutorFactory }
class function Exists: Boolean;
{* Проверяет создан экземпляр синглетона или нет }
class function IsSingleton: Boolean; override;
end;//Tm3DirectQueryExecutorFactory
implementation
uses
l3ImplUses
, m3AttrIndexSearcher
, daAndQueryParams
, m3AndQueryExecutor
, daAllDocsQueryParams
, m3AllDocsQueryExecutor
, daDocListQueryParams
, m3DocListQueryExecutor
, daDictQueryParams
, m3DictQueryExecutor
, m3TextQueryExecutor
, daTextQueryParams
, daDateNumQueryParams
, m3DateNumQueryExecutor
, daLogByActionQueryParams
, m3LogByActionQueryExecutor
, m3IDListQueryExecutor
, daIDListQueryParams
, m3OrQueryExecutor
, daOrQueryParams
, m3NOTQueryExecutor
, daNOTQueryParams
, m3ComplexStageQueryParamsExecutor
, daComplexStageQueryParams
, m3SimpleLogQueryExecutor
, daSimpleLogQueryParams
, SysUtils
, l3MemUtils
, l3Base
, l3Interlocked
//#UC START# *66FB12220352impl_uses*
//#UC END# *66FB12220352impl_uses*
;
var g_Tm3DirectQueryExecutorFactory: Tm3DirectQueryExecutorFactory = nil;
{* Экземпляр синглетона Tm3DirectQueryExecutorFactory }
var g_Tm3DirectQueryExecutorFactoryLock: Integer = 0;
{* Счётчик для защиты экземпляра синглетона Tm3DirectQueryExecutorFactory }
procedure Tm3DirectQueryExecutorFactoryFree;
{* Метод освобождения экземпляра синглетона Tm3DirectQueryExecutorFactory }
var l_O: Tm3DirectQueryExecutorFactory;
begin
l_O := g_Tm3DirectQueryExecutorFactory;
g_Tm3DirectQueryExecutorFactory := nil;
l_O.Free;
end;//Tm3DirectQueryExecutorFactoryFree
procedure Tm3DirectQueryExecutorFactory.SetBaseName(const aBaseName: AnsiString);
//#UC START# *66FB16ED0236_66FB12220352_var*
//#UC END# *66FB16ED0236_66FB12220352_var*
begin
//#UC START# *66FB16ED0236_66FB12220352_impl*
f_BaseName := aBaseName;
//#UC END# *66FB16ED0236_66FB12220352_impl*
end;//Tm3DirectQueryExecutorFactory.SetBaseName
{$If NOT Defined(l3NoSRT)}
function Tm3DirectQueryExecutorFactory.SetRefTo(var thePlace: Tm3DirectQueryExecutorFactory): Boolean;
begin
if (thePlace = Self) then
Result := false
else
begin
Result := true;
thePlace.Free;
thePlace := Self.Use;
end;//thePlace = Self
end;//Tm3DirectQueryExecutorFactory.SetRefTo
{$IfEnd} // NOT Defined(l3NoSRT)
function Tm3DirectQueryExecutorFactory.MakeExecutor(aParams: TdaQueryParams): IdaQueryExecutor;
//#UC START# *5F193DA802B1_66FB12220352_var*
var
l_Class : TClass;
l_Name : String;
//#UC END# *5F193DA802B1_66FB12220352_var*
begin
//#UC START# *5F193DA802B1_66FB12220352_impl*
Result := nil;
l_Class := aParams.ClassType;
//l_Name := l_Class.ClassName;
l_Name := aParams.ClassName;
if (l_Class = TdaAndQueryParams) then
Result := Tm3AndQueryExecutor.Make(aParams As TdaAndQueryParams, Self.f_BaseName)
else
if (l_Class = TdaOrQueryParams) then
Result := Tm3OrQueryExecutor.Make(aParams As TdaOrQueryParams, Self.f_BaseName)
else
if (l_Class = TdaAllDocsQueryParams) then
Result := Tm3AllDocsQueryExecutor.Make(aParams As TdaAllDocsQueryParams, Self.f_BaseName)
else
if (l_Class = TdaDocListQueryParams) then
Result := Tm3DocListQueryExecutor.Make(aParams As TdaDocListQueryParams, Self.f_BaseName)
else
if (l_Class = TdaDictQueryParams) then
Result := Tm3DictQueryExecutor.Make(aParams As TdaDictQueryParams, Self.f_BaseName)
else
if (l_Class = TdaTextQueryParams) then
Result := Tm3TextQueryExecutor.Make(aParams As TdaTextQueryParams, Self.f_BaseName)
else
if (l_Class = TdaDateNumQueryParams) then
Result := Tm3DateNumQueryExecutor.Make(aParams As TdaDateNumQueryParams, Self.f_BaseName)
else
if (l_Class = TdaIDListQueryParams) then
Result := Tm3IDListQueryExecutor.Make(aParams As TdaIDListQueryParams, Self.f_BaseName)
else
if (l_Class = TdaLogByActionQueryParams) then
Result := Tm3LogByActionQueryExecutor.Make(aParams As TdaLogByActionQueryParams, Self.f_BaseName)
else
if (l_Class = TdaSimpleLogQueryParams) then
Result := Tm3SimpleLogQueryExecutor.Make(aParams As TdaSimpleLogQueryParams, Self.f_BaseName)
else
if (l_Class = TdaNOTQueryParams) then
Result := Tm3NOTQueryExecutor.Make(aParams As TdaNOTQueryParams, Self.f_BaseName)
else
if (l_Class = TdaComplexStageQueryParams) then
Result := Tm3ComplexStageQueryParamsExecutor.Make(aParams As TdaComplexStageQueryParams, Self.f_BaseName)
else
begin
Assert(false, 'Executor for ' + l_Name + ' not defined');
end;//l_Class =
//#UC END# *5F193DA802B1_66FB12220352_impl*
end;//Tm3DirectQueryExecutorFactory.MakeExecutor
constructor Tm3DirectQueryExecutorFactory.Create(aDummy: Integer);
{* Специальный хак чтобы напрямую не вызывали конструктор Tm3DirectQueryExecutorFactory }
begin
Assert(false, 'Нельзя напрямую вызывать конструктор синглетона Tm3DirectQueryExecutorFactory. Пользуйтесь методом Instance');
end;//Tm3DirectQueryExecutorFactory.Create
constructor Tm3DirectQueryExecutorFactory.CreateInstance;
{* Конструктор экземпляра синглетона Tm3DirectQueryExecutorFactory }
begin
inherited Create;
end;//Tm3DirectQueryExecutorFactory.CreateInstance
class function Tm3DirectQueryExecutorFactory.Instance: Tm3DirectQueryExecutorFactory;
{* Метод получения экземпляра синглетона Tm3DirectQueryExecutorFactory }
var l_Lock: Integer;
begin
if (g_Tm3DirectQueryExecutorFactory = nil) then
begin
l_Lock := l3InterlockedIncrement(g_Tm3DirectQueryExecutorFactoryLock);
try
if (g_Tm3DirectQueryExecutorFactory = nil) then
begin
if (l_Lock = 1) then
begin
Tl3MemUtils.AddExitProc(Tm3DirectQueryExecutorFactoryFree);
CreateInstance;
end//l_Lock = 1
else
begin
while (g_Tm3DirectQueryExecutorFactory = nil) do
Sleep(0);
end;//l_Lock = 1
end;
finally
l3InterlockedDecrement(g_Tm3DirectQueryExecutorFactoryLock);
end;
end;
Result := g_Tm3DirectQueryExecutorFactory;
Assert(Result <> nil);
end;//Tm3DirectQueryExecutorFactory.Instance
class function Tm3DirectQueryExecutorFactory.Exists: Boolean;
{* Проверяет создан экземпляр синглетона или нет }
begin
Result := g_Tm3DirectQueryExecutorFactory <> nil;
end;//Tm3DirectQueryExecutorFactory.Exists
procedure Tm3DirectQueryExecutorFactory.InitFields;
//#UC START# *47A042E100E2_66FB12220352_var*
//#UC END# *47A042E100E2_66FB12220352_var*
begin
//#UC START# *47A042E100E2_66FB12220352_impl*
inherited;
//TdaQueryExecutorFactory.Instance.DirectHelper := Self;
//#UC END# *47A042E100E2_66FB12220352_impl*
end;//Tm3DirectQueryExecutorFactory.InitFields
{$If NOT Defined(DesignTimeLibrary)}
class function Tm3DirectQueryExecutorFactory.IsCacheable: Boolean;
{* функция класса, определяющая могут ли объекты данного класса попадать в кэш повторного использования. }
begin
Result := false;
end;//Tm3DirectQueryExecutorFactory.IsCacheable
{$IfEnd} // NOT Defined(DesignTimeLibrary)
procedure Tm3DirectQueryExecutorFactory.InitAfterAlloc;
begin
inherited;
Assert(g_Tm3DirectQueryExecutorFactory = nil);
g_Tm3DirectQueryExecutorFactory := Self;
end;//Tm3DirectQueryExecutorFactory.InitAfterAlloc
class function Tm3DirectQueryExecutorFactory.IsSingleton: Boolean;
begin
Result := true;
end;//Tm3DirectQueryExecutorFactory.IsSingleton
//#UC START# *66FB12220352forDiagramm*
(*
*)
//#UC END# *66FB12220352forDiagramm*
end.
Заметки о тестировании, программировании и прочий "поток сознания", который жалко писать "в стол"
воскресенье, 12 апреля 2026 г.
m3DirectQueryExecutorFactory
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий