mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-11-03 01:29:38 +01:00
* Additional options implemented
git-svn-id: trunk@11534 -
This commit is contained in:
parent
fd2b09c12c
commit
7d845aa47e
@ -25,7 +25,8 @@ uses
|
|||||||
TYpe
|
TYpe
|
||||||
TClassOption = (caCreateClass,caConstructor,caDestructor,caCreateList,caListAddMethod,caListItemsProperty);
|
TClassOption = (caCreateClass,caConstructor,caDestructor,caCreateList,caListAddMethod,caListItemsProperty);
|
||||||
TClassOptions = Set of TClassOption;
|
TClassOptions = Set of TClassOption;
|
||||||
TVisitorOption = (voRead,voReadList,voCreate,voDelete,voUpdate);
|
TVisitorOption = (voRead,voReadList,voCreate,voDelete,voUpdate,
|
||||||
|
voCommonSetupParams,voSingleSaveVisitor);
|
||||||
TVisitorOptions = set of TVisitorOption;
|
TVisitorOptions = set of TVisitorOption;
|
||||||
|
|
||||||
{ TTiOPFCodeOptions }
|
{ TTiOPFCodeOptions }
|
||||||
@ -33,19 +34,23 @@ TYpe
|
|||||||
TTiOPFCodeOptions = Class (TClassCodeGeneratorOptions)
|
TTiOPFCodeOptions = Class (TClassCodeGeneratorOptions)
|
||||||
Private
|
Private
|
||||||
FClassOptions: TClassOptions;
|
FClassOptions: TClassOptions;
|
||||||
|
FFinalVisitors: TVisitorOptions;
|
||||||
FListAncestorName: String;
|
FListAncestorName: String;
|
||||||
FListClassName : String;
|
FListClassName : String;
|
||||||
FVisitorOptions: TVisitorOptions;
|
FVisitorOptions: TVisitorOptions;
|
||||||
FTableName : String;
|
FTableName : String;
|
||||||
function GetListClassName: String;
|
function GetListClassName: String;
|
||||||
|
procedure SetClassOptions(const AValue: TClassOptions);
|
||||||
procedure SetListAncestorName(const AValue: String);
|
procedure SetListAncestorName(const AValue: String);
|
||||||
procedure SetListClassName(const AValue: String);
|
procedure SetListClassName(const AValue: String);
|
||||||
|
procedure SetVisitorOptions(const AValue: TVisitorOptions);
|
||||||
Public
|
Public
|
||||||
Constructor Create; override;
|
Constructor Create; override;
|
||||||
Procedure Assign(ASource : TPersistent); override;
|
Procedure Assign(ASource : TPersistent); override;
|
||||||
Published
|
Published
|
||||||
Property ClassOptions : TClassOptions Read FClassOptions Write FClassOptions;
|
Property ClassOptions : TClassOptions Read FClassOptions Write SetClassOptions;
|
||||||
Property VisitorOptions : TVisitorOptions Read FVisitorOptions Write FVisitorOptions;
|
Property VisitorOptions : TVisitorOptions Read FVisitorOptions Write SetVisitorOptions;
|
||||||
|
Property FinalVisitors : TVisitorOptions Read FFinalVisitors Write FFinalVisitors;
|
||||||
Property ListAncestorName : String Read FListAncestorName Write SetListAncestorName;
|
Property ListAncestorName : String Read FListAncestorName Write SetListAncestorName;
|
||||||
Property ListClassName : String Read GetListClassName Write SetListClassName;
|
Property ListClassName : String Read GetListClassName Write SetListClassName;
|
||||||
Property AncestorClass;
|
Property AncestorClass;
|
||||||
@ -65,15 +70,24 @@ TYpe
|
|||||||
private
|
private
|
||||||
Function CreateSQLStatement(V: TVisitorOption) : String;
|
Function CreateSQLStatement(V: TVisitorOption) : String;
|
||||||
function GetOpt: TTiOPFCodeOptions;
|
function GetOpt: TTiOPFCodeOptions;
|
||||||
procedure WriteCreateVisitor(Strings: TStrings; const ObjectClassName: String);
|
Function UseCommonSetupParams : Boolean;
|
||||||
procedure WriteDeleteVisitor(Strings: TStrings; const ObjectClassName: String);
|
Function SingleSaveVisitor : Boolean;
|
||||||
|
Function VisitorClassName(V : TVisitorOption; Const ObjectClassName : String) : String;
|
||||||
|
// Auxiliary routines
|
||||||
procedure WriteFieldAssign(Strings: TStrings; F: TFieldPropDef);
|
procedure WriteFieldAssign(Strings: TStrings; F: TFieldPropDef);
|
||||||
procedure WriteAssignToParam(Strings: TStrings; F: TFieldPropDef);
|
procedure WriteAssignToParam(Strings: TStrings; F: TFieldPropDef);
|
||||||
procedure WriteReadListVisitor(Strings: TStrings; const ObjectClassName: String);
|
|
||||||
procedure WriteReadVisitor(Strings: TStrings; const ObjectClassName: String );
|
|
||||||
procedure WriteSetSQL(Strings: TStrings; const ASQL: String);
|
procedure WriteSetSQL(Strings: TStrings; const ASQL: String);
|
||||||
procedure WriteSQLConstants(Strings: TStrings);
|
procedure WriteSQLConstants(Strings: TStrings);
|
||||||
|
Procedure WriteTerminateVisitor(Strings : TStrings; V : TVisitorOption; const ObjectClassName: String);
|
||||||
|
procedure WriteSetupParams(Strings: TStrings; const AClassName, ObjectClassName: String);
|
||||||
|
// Visitors
|
||||||
|
procedure WriteCommonSetupVisitor(Strings: TStrings; const ObjectClassName: String);
|
||||||
|
procedure WriteSaveVisitor(Strings: TStrings; const ObjectClassName: String);
|
||||||
|
procedure WriteCreateVisitor(Strings: TStrings; const ObjectClassName: String);
|
||||||
|
procedure WriteDeleteVisitor(Strings: TStrings; const ObjectClassName: String);
|
||||||
procedure WriteUpdateVisitor(Strings: TStrings; const ObjectClassName: String);
|
procedure WriteUpdateVisitor(Strings: TStrings; const ObjectClassName: String);
|
||||||
|
procedure WriteReadListVisitor(Strings: TStrings; const ObjectClassName: String);
|
||||||
|
procedure WriteReadVisitor(Strings: TStrings; const ObjectClassName: String );
|
||||||
procedure WriteVisitorDeclaration(Strings: TStrings; V: TVisitorOption; const ObjectClassName: String);
|
procedure WriteVisitorDeclaration(Strings: TStrings; V: TVisitorOption; const ObjectClassName: String);
|
||||||
procedure WriteVisitorImplementation(Strings: TStrings; V: TVisitorOption; const ObjectClassName: String);
|
procedure WriteVisitorImplementation(Strings: TStrings; V: TVisitorOption; const ObjectClassName: String);
|
||||||
Protected
|
Protected
|
||||||
@ -104,6 +118,14 @@ Const
|
|||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
|
Function StripType(S : String) : string;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Result:=S;
|
||||||
|
If (Result<>'') and (Result[1]='T') then
|
||||||
|
Delete(Result,1,1);
|
||||||
|
end;
|
||||||
|
|
||||||
{ TTiOPFCodeOptions }
|
{ TTiOPFCodeOptions }
|
||||||
|
|
||||||
function TTiOPFCodeOptions.GetListClassName: String;
|
function TTiOPFCodeOptions.GetListClassName: String;
|
||||||
@ -113,6 +135,20 @@ begin
|
|||||||
Result:=ObjectClassName+'List';
|
Result:=ObjectClassName+'List';
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TTiOPFCodeOptions.SetClassOptions(const AValue: TClassOptions);
|
||||||
|
|
||||||
|
Var
|
||||||
|
B : Boolean;
|
||||||
|
|
||||||
|
begin
|
||||||
|
If AValue=FClassOptions then
|
||||||
|
Exit;
|
||||||
|
B:=Not(caCreateList in FClassOptions) and (caCreateList in AValue);
|
||||||
|
FClassOptions:=AValue;
|
||||||
|
If B then
|
||||||
|
Include(FVisitorOptions,voReadList);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TTiOPFCodeOptions.SetListAncestorName(const AValue: String);
|
procedure TTiOPFCodeOptions.SetListAncestorName(const AValue: String);
|
||||||
begin
|
begin
|
||||||
CheckIdentifier(AValue,False);
|
CheckIdentifier(AValue,False);
|
||||||
@ -125,6 +161,31 @@ begin
|
|||||||
FListClassName:=AValue;
|
FListClassName:=AValue;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TTiOPFCodeOptions.SetVisitorOptions(const AValue: TVisitorOptions);
|
||||||
|
|
||||||
|
Var
|
||||||
|
V : TVisitorOption;
|
||||||
|
|
||||||
|
begin
|
||||||
|
FVisitorOptions:=AValue;
|
||||||
|
// Consistency check
|
||||||
|
If voSingleSaveVisitor in FVisitorOptions then
|
||||||
|
begin
|
||||||
|
Exclude(FVisitorOptions,voCommonSetupParams);
|
||||||
|
Exclude(FVisitorOptions,voCreate);
|
||||||
|
Exclude(FVisitorOptions,voUpdate);
|
||||||
|
Exclude(FVisitorOptions,voDelete);
|
||||||
|
end
|
||||||
|
else If voCommonSetupParams in FVisitorOptions then
|
||||||
|
begin
|
||||||
|
Include(FVisitorOptions,voCreate);
|
||||||
|
Include(FVisitorOptions,voUpdate);
|
||||||
|
end;
|
||||||
|
For V:=Low(TVisitorOption) to High(TVisitorOption) do
|
||||||
|
If Not (V in FVisitorOptions) then
|
||||||
|
Exclude(FFinalVisitors,V);
|
||||||
|
end;
|
||||||
|
|
||||||
constructor TTiOPFCodeOptions.Create;
|
constructor TTiOPFCodeOptions.Create;
|
||||||
begin
|
begin
|
||||||
inherited Create;
|
inherited Create;
|
||||||
@ -133,7 +194,7 @@ begin
|
|||||||
ObjectClassName:='MyObject';
|
ObjectClassName:='MyObject';
|
||||||
TableName:=SDefTableName;
|
TableName:=SDefTableName;
|
||||||
FVisitorOptions:=[voRead,voCreate,voDelete,voUpdate];
|
FVisitorOptions:=[voRead,voCreate,voDelete,voUpdate];
|
||||||
FClassOptions:=[caCreateList,caListAddMethod,caListItemsProperty];
|
FClassOptions:=[caCreateClass,caCreateList,caListAddMethod,caListItemsProperty];
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TTiOPFCodeOptions.Assign(ASource: TPersistent);
|
procedure TTiOPFCodeOptions.Assign(ASource: TPersistent);
|
||||||
@ -150,6 +211,7 @@ begin
|
|||||||
FVisitorOptions:=OC.FVisitorOptions;
|
FVisitorOptions:=OC.FVisitorOptions;
|
||||||
FClassOptions:=OC.FClassOptions;
|
FClassOptions:=OC.FClassOptions;
|
||||||
FTableName:=OC.TableName;
|
FTableName:=OC.TableName;
|
||||||
|
FFinalVisitors:=OC.FinalVisitors;
|
||||||
end;
|
end;
|
||||||
inherited Assign(ASource);
|
inherited Assign(ASource);
|
||||||
end;
|
end;
|
||||||
@ -186,6 +248,122 @@ begin
|
|||||||
Result:=CodeOptions as TTiOPFCodeOptions;
|
Result:=CodeOptions as TTiOPFCodeOptions;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TTiOPFCodeGenerator.UseCommonSetupParams: Boolean;
|
||||||
|
begin
|
||||||
|
Result:=VoCommonSetupParams in tiOPFOptions.VisitorOptions;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TTiOPFCodeGenerator.SingleSaveVisitor: Boolean;
|
||||||
|
begin
|
||||||
|
Result:=voSingleSaveVisitor in tiOPFOptions.VisitorOptions;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TTiOPFCodeGenerator.VisitorClassName(V: TVisitorOption;
|
||||||
|
const ObjectClassName: String): String;
|
||||||
|
|
||||||
|
Var
|
||||||
|
S : String;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Case V of
|
||||||
|
voRead : S:='Read';
|
||||||
|
voReadList : S:='ReadList';
|
||||||
|
voCreate : S:='Create';
|
||||||
|
voDelete : S:='Delete';
|
||||||
|
voUpdate : S:='Update';
|
||||||
|
voCommonSetupParams : S:='UpdateCreate';
|
||||||
|
voSingleSaveVisitor : S:='Save';
|
||||||
|
else
|
||||||
|
Result:='Unknown';
|
||||||
|
end;
|
||||||
|
// Real class name
|
||||||
|
Result:=Format('T%s%sVisitor',[S,StripType(ObjectClassName)]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTiOPFCodeGenerator.WriteCommonSetupVisitor(Strings: TStrings;
|
||||||
|
const ObjectClassName: String);
|
||||||
|
|
||||||
|
|
||||||
|
Var
|
||||||
|
CS,C,S : String;
|
||||||
|
I : Integer;
|
||||||
|
|
||||||
|
begin
|
||||||
|
C:=VisitorClassName(voCommonSetupParams,ObjectClassName);
|
||||||
|
Addln(Strings,'{ %s }',[C]);
|
||||||
|
Addln(Strings);
|
||||||
|
WriteSetupParams(Strings,C,ObjectClassName);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTiOPFCodeGenerator.WriteSaveVisitor(Strings: TStrings; const ObjectClassName: String);
|
||||||
|
|
||||||
|
Procedure WriteSQLCase(Const ACaselabel,ASQL : String);
|
||||||
|
|
||||||
|
begin
|
||||||
|
addln(Strings,ACaseLabel+':');
|
||||||
|
incIndent;
|
||||||
|
WriteSetSQL(Strings,ASQL);
|
||||||
|
DecIndent;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Var
|
||||||
|
OCN,CS,C,S : String;
|
||||||
|
I : Integer;
|
||||||
|
F : TFieldPropDef;
|
||||||
|
|
||||||
|
begin
|
||||||
|
OCN:=StripType(ObjectClassName);
|
||||||
|
C:=VisitorClassName(voSingleSaveVisitor,OCN);
|
||||||
|
Addln(Strings,'{ %s }',[C]);
|
||||||
|
Addln(Strings);
|
||||||
|
// Init
|
||||||
|
S:=BeginInit(Strings,C);
|
||||||
|
AddLn(Strings,'Case Visited.ObjectState of');
|
||||||
|
IncIndent;
|
||||||
|
try
|
||||||
|
WriteSQLCase('posCreate',Format('SQLCreate%s',[OCN]));
|
||||||
|
WriteSQLCase('posUpdate',Format('SQLUpdate%s',[OCN]));
|
||||||
|
WriteSQLCase('posDelete',Format('SQLDelete%s',[OCN]));
|
||||||
|
finally
|
||||||
|
DecIndent;
|
||||||
|
end;
|
||||||
|
Addln(Strings,'end;');
|
||||||
|
DecIndent;
|
||||||
|
EndMethod(Strings,S);
|
||||||
|
// AcceptVisitor
|
||||||
|
S:=BeginAcceptVisitor(Strings,C,ObjectClassName);
|
||||||
|
AddLn(Strings,'Result:=Result and (Visited.ObjectState in [posCreate,posdelete,posUpdate]);');
|
||||||
|
DecIndent;
|
||||||
|
EndMethod(Strings,S);
|
||||||
|
S:=BeginSetupParams(Strings,C,ObjectClassName,True);
|
||||||
|
Addln(Strings,'With Query do',[ObjectClassName]);
|
||||||
|
IncINdent;
|
||||||
|
try
|
||||||
|
Addln(Strings,'begin');
|
||||||
|
F:=Fields.FindPropName('OID');
|
||||||
|
If (F<>Nil) then
|
||||||
|
WriteAssignToParam(Strings,F)
|
||||||
|
else
|
||||||
|
AddLn(Strings,'// No OID property found. Add delete key parameter setup code here.');
|
||||||
|
AddLn(Strings,'If (Visited.ObjectState<>posDelete) then');
|
||||||
|
IncIndent;
|
||||||
|
try
|
||||||
|
AddLn(Strings,'begin');
|
||||||
|
For I:=0 to Fields.Count-1 do
|
||||||
|
If Fields[i].Enabled and (CompareText(Fields[i].PropertyName,'OID')<>0) then
|
||||||
|
WriteAssignToParam(Strings,Fields[i]);
|
||||||
|
AddLn(Strings,'end;');
|
||||||
|
Finally
|
||||||
|
DecIndent;
|
||||||
|
end;
|
||||||
|
Addln(Strings,'end;');
|
||||||
|
finally
|
||||||
|
DecIndent;
|
||||||
|
end;
|
||||||
|
DecIndent;
|
||||||
|
EndMethod(Strings,S);
|
||||||
|
end;
|
||||||
|
|
||||||
function TTiOPFCodeGenerator.GetInterfaceUsesClause: string;
|
function TTiOPFCodeGenerator.GetInterfaceUsesClause: string;
|
||||||
begin
|
begin
|
||||||
Result:=inherited GetInterfaceUsesClause;
|
Result:=inherited GetInterfaceUsesClause;
|
||||||
@ -213,8 +391,10 @@ begin
|
|||||||
try
|
try
|
||||||
If caCreateList in ClassOptions then
|
If caCreateList in ClassOptions then
|
||||||
CreateListDeclaration(Strings,ObjectClassName,ListClassName,ListAncestorName);
|
CreateListDeclaration(Strings,ObjectClassName,ListClassName,ListAncestorName);
|
||||||
|
If voCommonSetupParams in VisitorOptions then
|
||||||
|
WriteVisitorDeclaration(Strings,voCommonSetupParams,ObjectClassName);
|
||||||
For V:=Low(TVisitorOption) to High(TVisitorOption) do
|
For V:=Low(TVisitorOption) to High(TVisitorOption) do
|
||||||
If V in VisitorOptions then
|
If (V in VisitorOptions) and (V<>voCommonSetupParams) then
|
||||||
WriteVisitorDeclaration(Strings,V,ObjectClassName);
|
WriteVisitorDeclaration(Strings,V,ObjectClassName);
|
||||||
Finally
|
Finally
|
||||||
DecIndent;
|
DecIndent;
|
||||||
@ -222,13 +402,6 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Function StripType(S : String) : string;
|
|
||||||
|
|
||||||
begin
|
|
||||||
Result:=S;
|
|
||||||
If (Result<>'') and (Result[1]='T') then
|
|
||||||
Delete(Result,1,1);
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TTiOPFCodeGenerator.WriteVisitorDeclaration(Strings : TStrings; V : TVisitorOption; Const ObjectClassName : String);
|
procedure TTiOPFCodeGenerator.WriteVisitorDeclaration(Strings : TStrings; V : TVisitorOption; Const ObjectClassName : String);
|
||||||
|
|
||||||
@ -236,28 +409,34 @@ Var
|
|||||||
S,T,A : string;
|
S,T,A : string;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
Case V of
|
// Ancestor name
|
||||||
voRead : S:='Read';
|
// Common setup case
|
||||||
voReadList : S:='ReadList';
|
If (V in [voCreate,voUpdate]) and (UseCommonSetupParams) then
|
||||||
voCreate : S:='Create';
|
A:=Format('TUpdateCreate%sVisitor',[StripType(ObjectClassName)])
|
||||||
voDelete : S:='Delete';
|
else If (V in [voCreate,voDelete,voUpdate,voCommonSetupParams]) then
|
||||||
voUpdate : S:='Update';
|
A:='TtiVisitorUpdate'
|
||||||
end;
|
|
||||||
If V in [voCreate,voDelete,voUpdate] then
|
|
||||||
A:='Update'
|
|
||||||
else
|
else
|
||||||
A:='Select';
|
A:='TtiVisitorSelect';
|
||||||
S:=Format('T%s%sVisitor',[S,StripType(ObjectClassName)]);
|
// Real class
|
||||||
|
S:=VisitorClassName(V,ObjectClassName);
|
||||||
AddLn(Strings,'{ %s }',[S]);
|
AddLn(Strings,'{ %s }',[S]);
|
||||||
AddlN(Strings,'%s = Class(TtiVisitor%s)',[S,A]);
|
AddlN(Strings,'%s = Class(%s)',[S,A]);
|
||||||
AddlN(Strings,'Protected');
|
AddlN(Strings,'Protected');
|
||||||
IncIndent;
|
IncIndent;
|
||||||
Try
|
Try
|
||||||
AddLn(Strings,'Procedure Init; override;');
|
If (V<>VoCommonSetupParams) then
|
||||||
AddLn(Strings,'Function AcceptVisitor : Boolean; override;');
|
begin
|
||||||
AddLn(Strings,'Procedure SetupParams; override;');
|
AddLn(Strings,'Procedure Init; override;');
|
||||||
If Not (V in [voCreate,voDelete,voUpdate]) then
|
AddLn(Strings,'Function AcceptVisitor : Boolean; override;');
|
||||||
|
If Not ((V in [voCreate,voUpdate]) and UseCommonSetupParams) then
|
||||||
|
AddLn(Strings,'Procedure SetupParams; override;');
|
||||||
|
end
|
||||||
|
else
|
||||||
|
AddLn(Strings,'Procedure SetupParams; override;');
|
||||||
|
If (V in [voRead,voReadList]) then
|
||||||
AddLn(Strings,'Procedure MapRowToObject; override;');
|
AddLn(Strings,'Procedure MapRowToObject; override;');
|
||||||
|
if (V in TiOPFOptions.FinalVisitors) then
|
||||||
|
Addln(Strings,'Procedure Execute(Const AData : TtiVisited); override;');
|
||||||
Finally
|
Finally
|
||||||
DecIndent;
|
DecIndent;
|
||||||
end;
|
end;
|
||||||
@ -347,7 +526,7 @@ procedure TTiOPFCodeGenerator.WriteSQLConstants(Strings : TStrings);
|
|||||||
|
|
||||||
Const
|
Const
|
||||||
VisSQL : Array [TVisitorOption] of string
|
VisSQL : Array [TVisitorOption] of string
|
||||||
= ('Read','ReadList','Create','Delete','Update');
|
= ('Read','ReadList','Create','Delete','Update','','');
|
||||||
|
|
||||||
Var
|
Var
|
||||||
OCN,S : String;
|
OCN,S : String;
|
||||||
@ -359,7 +538,8 @@ begin
|
|||||||
try
|
try
|
||||||
OCN:=StripType(TiOPFOptions.ObjectClassName);
|
OCN:=StripType(TiOPFOptions.ObjectClassName);
|
||||||
For V:=Low(TVisitorOption) to High(TVisitorOption) do
|
For V:=Low(TVisitorOption) to High(TVisitorOption) do
|
||||||
If V in TiOPFOptions.VisitorOptions then
|
If ((V in TiOPFOptions.VisitorOptions) or
|
||||||
|
(SingleSaveVisitor and (V in [voCreate,voUpdate,voDelete]))) and (VisSQL[V]<>'') then
|
||||||
begin
|
begin
|
||||||
S:=CreateSQLStatement(V);
|
S:=CreateSQLStatement(V);
|
||||||
S:=Format('SQL%s%s = ''%s'';',[VisSQL[V],OCN,S]);
|
S:=Format('SQL%s%s = ''%s'';',[VisSQL[V],OCN,S]);
|
||||||
@ -371,6 +551,33 @@ begin
|
|||||||
AddLn(Strings,'');
|
AddLn(Strings,'');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TTiOPFCodeGenerator.WriteTerminateVisitor(Strings : TStrings;V : TVisitorOption;
|
||||||
|
const ObjectClassName: String);
|
||||||
|
|
||||||
|
Var
|
||||||
|
S : String;
|
||||||
|
begin
|
||||||
|
S:=VisitorclassName(V,ObjectClassName);
|
||||||
|
S:=Format('Procedure %s.Execute(Const AData : TtiVisited);',[S]);
|
||||||
|
BeginMethod(Strings,S);
|
||||||
|
AddLn(Strings,'begin');
|
||||||
|
IncIndent;
|
||||||
|
try
|
||||||
|
AddLn(Strings,'Inherited Execute(AData);');
|
||||||
|
Addln(Strings,'If not AcceptVisitor then');
|
||||||
|
IncIndent;
|
||||||
|
Try
|
||||||
|
Addln(Strings,'Exit; // ==>');
|
||||||
|
Finally
|
||||||
|
DecIndent;
|
||||||
|
end;
|
||||||
|
AddLn(Strings,'ContinueVisiting:=False;');
|
||||||
|
Finally
|
||||||
|
DecIndent;
|
||||||
|
end;
|
||||||
|
EndMethod(Strings,S);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TTiOPFCodeGenerator.DoGenerateImplementation(Strings: TStrings);
|
procedure TTiOPFCodeGenerator.DoGenerateImplementation(Strings: TStrings);
|
||||||
|
|
||||||
@ -400,12 +607,16 @@ procedure TTiOPFCodeGenerator.WriteVisitorImplementation(Strings : TStrings; V :
|
|||||||
|
|
||||||
begin
|
begin
|
||||||
Case V of
|
Case V of
|
||||||
voRead : WriteReadVisitor(Strings,ObjectClassName);
|
voRead : WriteReadVisitor(Strings,ObjectClassName);
|
||||||
voReadList : WriteReadListVisitor(Strings,ObjectClassName);
|
voReadList : WriteReadListVisitor(Strings,ObjectClassName);
|
||||||
voCreate : WriteCreateVisitor(Strings,ObjectClassName);
|
voCreate : WriteCreateVisitor(Strings,ObjectClassName);
|
||||||
voDelete : WriteDeleteVisitor(Strings,ObjectClassName);
|
voDelete : WriteDeleteVisitor(Strings,ObjectClassName);
|
||||||
voUpdate : WriteUpdateVisitor(Strings,ObjectClassName);
|
voUpdate : WriteUpdateVisitor(Strings,ObjectClassName);
|
||||||
|
voCommonSetupParams : WriteCommonSetupVisitor(Strings,ObjectClassName);
|
||||||
|
voSingleSaveVisitor : WriteSaveVisitor(Strings,ObjectClassName);
|
||||||
end;
|
end;
|
||||||
|
If v in TiOPFOptions.FinalVisitors then
|
||||||
|
WriteTerminateVisitor(Strings,V,ObjectClassName);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Function TTiOPFCodeGenerator.BeginInit(Strings : TStrings; const AClass : String) : String;
|
Function TTiOPFCodeGenerator.BeginInit(Strings : TStrings; const AClass : String) : String;
|
||||||
@ -477,7 +688,7 @@ Var
|
|||||||
begin
|
begin
|
||||||
OCN:=StripType(ObjectClassName);
|
OCN:=StripType(ObjectClassName);
|
||||||
CS:=Format('SQLRead%s',[OCN]);
|
CS:=Format('SQLRead%s',[OCN]);
|
||||||
C:=Format('TRead%sVisitor',[OCN]);
|
C:=VisitorClassName(voRead,OCN);
|
||||||
Addln(Strings,'{ %s }',[C]);
|
Addln(Strings,'{ %s }',[C]);
|
||||||
Addln(Strings);
|
Addln(Strings);
|
||||||
// Init
|
// Init
|
||||||
@ -533,13 +744,9 @@ begin
|
|||||||
S:='AsBoolean';
|
S:='AsBoolean';
|
||||||
ptShortint, ptByte,
|
ptShortint, ptByte,
|
||||||
ptSmallInt, ptWord,
|
ptSmallInt, ptWord,
|
||||||
ptLongint, ptCardinal :
|
ptLongint, ptCardinal,
|
||||||
|
ptInt64:
|
||||||
S:='AsInteger';
|
S:='AsInteger';
|
||||||
ptInt64, ptQWord:
|
|
||||||
If F.FieldType=ftLargeInt then
|
|
||||||
R:=Format('O.%s:=(FieldByName(%s) as TLargeIntField).AsLargeInt;',[PN,SFN])
|
|
||||||
else
|
|
||||||
S:='AsInteger';
|
|
||||||
ptShortString, ptAnsiString, ptWideString :
|
ptShortString, ptAnsiString, ptWideString :
|
||||||
S:='AsString';
|
S:='AsString';
|
||||||
ptSingle, ptDouble, ptExtended, ptComp :
|
ptSingle, ptDouble, ptExtended, ptComp :
|
||||||
@ -581,13 +788,9 @@ begin
|
|||||||
S:='AsBoolean';
|
S:='AsBoolean';
|
||||||
ptShortint, ptByte,
|
ptShortint, ptByte,
|
||||||
ptSmallInt, ptWord,
|
ptSmallInt, ptWord,
|
||||||
ptLongint, ptCardinal :
|
ptLongint, ptCardinal,
|
||||||
|
ptInt64, ptQWord :
|
||||||
S:='AsInteger';
|
S:='AsInteger';
|
||||||
ptInt64, ptQWord:
|
|
||||||
If F.FieldType=ftLargeInt then
|
|
||||||
R:=Format('O.%s:=(Name(%s) as TLargeIntField).AsLargeInt;',[PN,SFN])
|
|
||||||
else
|
|
||||||
S:='AsInteger';
|
|
||||||
ptShortString, ptAnsiString, ptWideString :
|
ptShortString, ptAnsiString, ptWideString :
|
||||||
S:='AsString';
|
S:='AsString';
|
||||||
ptSingle, ptDouble, ptExtended, ptComp :
|
ptSingle, ptDouble, ptExtended, ptComp :
|
||||||
@ -626,7 +829,7 @@ begin
|
|||||||
LN:=tiOPFOptions.ListClassName;
|
LN:=tiOPFOptions.ListClassName;
|
||||||
OCN:=StripType(ObjectClassName);
|
OCN:=StripType(ObjectClassName);
|
||||||
CS:=Format('SQLReadList%s',[OCN]);
|
CS:=Format('SQLReadList%s',[OCN]);
|
||||||
C:=Format('TReadList%sVisitor',[StripType(OCN)]);
|
C:=VisitorClassName(voReadList,OCN);
|
||||||
Addln(Strings,'{ %s }',[C]);
|
Addln(Strings,'{ %s }',[C]);
|
||||||
Addln(Strings);
|
Addln(Strings);
|
||||||
// Init
|
// Init
|
||||||
@ -676,7 +879,7 @@ Var
|
|||||||
begin
|
begin
|
||||||
OCN:=StripType(ObjectClassName);
|
OCN:=StripType(ObjectClassName);
|
||||||
CS:=Format('SQLCreate%s',[OCN]);
|
CS:=Format('SQLCreate%s',[OCN]);
|
||||||
C:=Format('TCreate%sVisitor',[OCN]);
|
C:=VisitorClassName(voCreate,OCN);
|
||||||
Addln(Strings,'{ %s }',[C]);
|
Addln(Strings,'{ %s }',[C]);
|
||||||
Addln(Strings);
|
Addln(Strings);
|
||||||
// Init
|
// Init
|
||||||
@ -689,8 +892,19 @@ begin
|
|||||||
AddLn(Strings,'Result:=Result and (Visited.ObjectState=posCreate);');
|
AddLn(Strings,'Result:=Result and (Visited.ObjectState=posCreate);');
|
||||||
DecIndent;
|
DecIndent;
|
||||||
EndMethod(Strings,S);
|
EndMethod(Strings,S);
|
||||||
|
If Not (UseCommonSetupParams) then
|
||||||
|
WriteSetupParams(Strings,C,ObjectClassName);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTiOPFCodeGenerator.WriteSetupParams(Strings : TStrings; Const AClassName,ObjectClassName : String);
|
||||||
|
|
||||||
|
Var
|
||||||
|
S : String;
|
||||||
|
I : Integer;
|
||||||
|
|
||||||
|
begin
|
||||||
// SetupParams
|
// SetupParams
|
||||||
S:=BeginSetupParams(Strings,C,ObjectClassName,True);
|
S:=BeginSetupParams(Strings,AClassName,ObjectClassName,True);
|
||||||
Addln(Strings,'With Query do',[ObjectClassName]);
|
Addln(Strings,'With Query do',[ObjectClassName]);
|
||||||
IncINdent;
|
IncINdent;
|
||||||
try
|
try
|
||||||
@ -721,7 +935,7 @@ Var
|
|||||||
begin
|
begin
|
||||||
OCN:=StripType(ObjectClassName);
|
OCN:=StripType(ObjectClassName);
|
||||||
CS:=Format('SQLDelete%s',[OCN]);
|
CS:=Format('SQLDelete%s',[OCN]);
|
||||||
C:=Format('TDelete%sVisitor',[StripType(ObjectClassName)]);
|
C:=VisitorClassName(voDelete,OCN);
|
||||||
Addln(Strings,'{ %s }',[C]);
|
Addln(Strings,'{ %s }',[C]);
|
||||||
// Init
|
// Init
|
||||||
S:=BeginInit(Strings,C);
|
S:=BeginInit(Strings,C);
|
||||||
@ -753,7 +967,7 @@ Var
|
|||||||
begin
|
begin
|
||||||
OCN:=StripType(ObjectClassName);
|
OCN:=StripType(ObjectClassName);
|
||||||
CS:=Format('SQLUpdate%s',[OCN]);
|
CS:=Format('SQLUpdate%s',[OCN]);
|
||||||
C:=Format('TUpdate%sVisitor',[OCN]);
|
C:=VisitorClassName(voUpdate,OCN);
|
||||||
Addln(Strings,'{ %s }',[C]);
|
Addln(Strings,'{ %s }',[C]);
|
||||||
Addln(Strings);
|
Addln(Strings);
|
||||||
// Init
|
// Init
|
||||||
@ -766,26 +980,11 @@ begin
|
|||||||
AddLn(Strings,'Result:=Result and (Visited.ObjectState=posUpdate);');
|
AddLn(Strings,'Result:=Result and (Visited.ObjectState=posUpdate);');
|
||||||
DecIndent;
|
DecIndent;
|
||||||
EndMethod(Strings,S);
|
EndMethod(Strings,S);
|
||||||
// SetupParams
|
If Not (UseCommonSetupParams) then
|
||||||
S:=BeginSetupParams(Strings,C,ObjectClassName,True);
|
WriteSetupParams(Strings,C,ObjectClassName);
|
||||||
Addln(Strings,'With Query do',[ObjectClassName]);
|
|
||||||
IncINdent;
|
|
||||||
try
|
|
||||||
Addln(Strings,'begin');
|
|
||||||
For I:=0 to Fields.Count-1 do
|
|
||||||
If Fields[i].Enabled then
|
|
||||||
WriteAssignToParam(Strings,Fields[i]);
|
|
||||||
Addln(Strings,'end;');
|
|
||||||
finally
|
|
||||||
DecIndent;
|
|
||||||
end;
|
|
||||||
DecIndent;
|
|
||||||
EndMethod(Strings,S);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{ ---------------------------------------------------------------------
|
{ ---------------------------------------------------------------------
|
||||||
List object commands
|
List object commands
|
||||||
---------------------------------------------------------------------}
|
---------------------------------------------------------------------}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user