|
@@ -23,7 +23,7 @@ uses
|
|
|
Classes, SysUtils, db, fpddcodegen;
|
|
|
|
|
|
TYpe
|
|
|
- TClassOption = (caConstructor,caDestructor,caCreateList,caListAddMethod,caListItemsProperty);
|
|
|
+ TClassOption = (caCreateClass,caConstructor,caDestructor,caCreateList,caListAddMethod,caListItemsProperty);
|
|
|
TClassOptions = Set of TClassOption;
|
|
|
TVisitorOption = (voRead,voReadList,voCreate,voDelete,voUpdate);
|
|
|
TVisitorOptions = set of TVisitorOption;
|
|
@@ -61,6 +61,7 @@ TYpe
|
|
|
procedure DeclareObjectvariable(Strings: TStrings;
|
|
|
const ObjectClassName: String);
|
|
|
private
|
|
|
+ Function CreateSQLStatement(V: TVisitorOption) : String;
|
|
|
function GetOpt: TTiOPFCodeOptions;
|
|
|
procedure WriteCreateVisitor(Strings: TStrings; const ObjectClassName: String);
|
|
|
procedure WriteDeleteVisitor(Strings: TStrings; const ObjectClassName: String);
|
|
@@ -68,6 +69,8 @@ TYpe
|
|
|
procedure WriteParamAssign(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 WriteSQLConstants(Strings: TStrings);
|
|
|
procedure WriteUpdateVisitor(Strings: TStrings; const ObjectClassName: String);
|
|
|
procedure WriteVisitorDeclaration(Strings: TStrings; V: TVisitorOption; const ObjectClassName: String);
|
|
|
procedure WriteVisitorImplementation(Strings: TStrings; V: TVisitorOption; const ObjectClassName: String);
|
|
@@ -75,6 +78,7 @@ TYpe
|
|
|
// Not to be overridden.
|
|
|
procedure WriteListAddObject(Strings: TStrings; const ListClassName, ObjectClassName: String);
|
|
|
// Overrides of parent objects
|
|
|
+ function AllowPropertyDeclaration(F: TFieldPropDef; AVisibility: TVisibilities): Boolean; override;
|
|
|
Function GetInterfaceUsesClause : string; override;
|
|
|
Procedure DoGenerateInterface(Strings: TStrings); override;
|
|
|
Procedure DoGenerateImplementation(Strings: TStrings); override;
|
|
@@ -92,6 +96,9 @@ TYpe
|
|
|
Property TiOPFOptions : TTiOPFCodeOptions Read GetOpt;
|
|
|
end;
|
|
|
|
|
|
+Const
|
|
|
+ SOID = 'OID'; // OID property.
|
|
|
+
|
|
|
implementation
|
|
|
|
|
|
{ TTiOPFCodeOptions }
|
|
@@ -118,7 +125,7 @@ end;
|
|
|
constructor TTiOPFCodeOptions.Create;
|
|
|
begin
|
|
|
inherited Create;
|
|
|
- FListAncestorName:='TObjectList';
|
|
|
+ FListAncestorName:='TTiObjectList';
|
|
|
AncestorClass:='TTiObject';
|
|
|
ObjectClassName:='MyObject';
|
|
|
FVisitorOptions:=[voRead,voCreate,voDelete,voUpdate];
|
|
@@ -179,7 +186,7 @@ begin
|
|
|
Result:=inherited GetInterfaceUsesClause;
|
|
|
If (Result<>'') then
|
|
|
Result:=Result+',';
|
|
|
- Result:=Result+'tiVisitor, tiObject';
|
|
|
+ Result:=Result+'tiVisitor, tiVisitorDB, tiObject';
|
|
|
end;
|
|
|
|
|
|
procedure TTiOPFCodeGenerator.DoGenerateInterface(Strings: TStrings);
|
|
@@ -188,7 +195,8 @@ Var
|
|
|
V : TVisitorOption;
|
|
|
|
|
|
begin
|
|
|
- inherited DoGenerateInterface(Strings);
|
|
|
+ If (caCreateClass in TiOPFOptions.ClassOptions) then
|
|
|
+ inherited DoGenerateInterface(Strings);
|
|
|
With TiOPFOptions do
|
|
|
begin
|
|
|
IncIndent;
|
|
@@ -247,6 +255,109 @@ begin
|
|
|
AddlN(Strings);
|
|
|
end;
|
|
|
|
|
|
+Function TTiOPFCodeGenerator.CreateSQLStatement(V : TVisitorOption) : String;
|
|
|
+
|
|
|
+ Function AddToS(Const S,Add : String) : string;
|
|
|
+
|
|
|
+ begin
|
|
|
+ Result:=S;
|
|
|
+ If (Result<>'') then
|
|
|
+ Result:=Result+', ';
|
|
|
+ Result:=Result+Add;
|
|
|
+ end;
|
|
|
+
|
|
|
+Var
|
|
|
+ I : integer;
|
|
|
+ W,S,VS,TN : String;
|
|
|
+ F : TFieldPropDef;
|
|
|
+
|
|
|
+begin
|
|
|
+ TN:='MyTable';
|
|
|
+ S:='';
|
|
|
+ VS:='';
|
|
|
+ W:='Your condition here';
|
|
|
+ Result:='';
|
|
|
+ Case V of
|
|
|
+ voRead,
|
|
|
+ voReadList : begin
|
|
|
+ Result:='SELECT ';
|
|
|
+ For I:=0 to Fields.Count-1 do
|
|
|
+ begin
|
|
|
+ F:=Fields[i];
|
|
|
+ If F.Enabled then
|
|
|
+ begin
|
|
|
+ S:=AddToS(S,F.FieldName);
|
|
|
+ If (F.PropertyName=SOID) then
|
|
|
+ W:=Format('%s = :%s',[F.FieldName,F.FieldName]);
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+ Result:=Result+S+Format(' FROM %s WHERE (%s);',[TN,W]);
|
|
|
+ end;
|
|
|
+ voCreate : begin
|
|
|
+ Result:=Format('INSERT INTO %s (',[TN]);
|
|
|
+ For I:=0 to Fields.Count-1 do
|
|
|
+ begin
|
|
|
+ F:=Fields[i];
|
|
|
+ If F.Enabled then
|
|
|
+ begin
|
|
|
+ S:=AddToS(S,F.FieldName);
|
|
|
+ VS:=AddToS(VS,':'+F.FieldName);
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+ Result:=Result+S+') VALUES ('+VS+');';
|
|
|
+ end;
|
|
|
+ voDelete : begin
|
|
|
+ For I:=0 to Fields.Count-1 do
|
|
|
+ begin
|
|
|
+ F:=Fields[i];
|
|
|
+ If (F.PropertyName=SOID) then
|
|
|
+ W:=Format('%s = :%s',[F.FieldName,F.FieldName]);
|
|
|
+ end;
|
|
|
+ Result:=Format('DELETE FROM %s WHERE (%s);',[TN,W]);
|
|
|
+ end;
|
|
|
+ voUpdate : begin
|
|
|
+ Result:=Format('UPDATE %s SET ',[TN]);
|
|
|
+ For I:=0 to Fields.Count-1 do
|
|
|
+ begin
|
|
|
+ F:=Fields[i];
|
|
|
+ If F.Enabled then
|
|
|
+ If (F.PropertyName=SOID) then
|
|
|
+ W:=Format('%s = :%s',[F.FieldName,F.FieldName])
|
|
|
+ else
|
|
|
+ S:=AddToS(S,F.FieldName+' = :'+F.FieldName);
|
|
|
+ end;
|
|
|
+ Result:=Result+S+Format(' WHERE (%s);',[W]);
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TTiOPFCodeGenerator.WriteSQLConstants(Strings : TStrings);
|
|
|
+
|
|
|
+Const
|
|
|
+ VisSQL : Array [TVisitorOption] of string
|
|
|
+ = ('Read','ReadList','Create','Delete','Update');
|
|
|
+
|
|
|
+Var
|
|
|
+ OCN,S : String;
|
|
|
+ V : TVisitorOption;
|
|
|
+
|
|
|
+begin
|
|
|
+ AddLn(Strings,'Const');
|
|
|
+ IncIndent;
|
|
|
+ try
|
|
|
+ OCN:=StripType(TiOPFOptions.ObjectClassName);
|
|
|
+ For V:=Low(TVisitorOption) to High(TVisitorOption) do
|
|
|
+ If V in TiOPFOptions.VisitorOptions then
|
|
|
+ begin
|
|
|
+ S:=CreateSQLStatement(V);
|
|
|
+ S:=Format('SQL%s%s = ''%s'';',[VisSQL[V],OCN,S]);
|
|
|
+ AddLn(Strings,S);
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ DecIndent;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
|
|
|
procedure TTiOPFCodeGenerator.DoGenerateImplementation(Strings: TStrings);
|
|
|
|
|
@@ -254,9 +365,12 @@ Var
|
|
|
V : TVisitorOption;
|
|
|
|
|
|
begin
|
|
|
- inherited DoGenerateImplementation(Strings);
|
|
|
+ If (caCreateClass in TiOPFOptions.ClassOptions) then
|
|
|
+ inherited DoGenerateImplementation(Strings);
|
|
|
With TiOPFOptions do
|
|
|
begin
|
|
|
+ If (VisitorOptions<>[]) then
|
|
|
+ WriteSQLConstants(Strings);
|
|
|
If caCreateList in ClassOptions then
|
|
|
CreateListImplementation(Strings,ObjectClassName,ListClassName);
|
|
|
For V:=Low(TVisitorOption) to High(TVisitorOption) do
|
|
@@ -308,9 +422,9 @@ begin
|
|
|
If DeclareObject Then
|
|
|
DeclareObjectVariable(Strings,ObjectClassName);
|
|
|
AddLn(Strings,'begin');
|
|
|
+ IncIndent;
|
|
|
If DeclareObject Then
|
|
|
Addln(Strings,'O:=%s(Visited);',[ObjectClassName]);
|
|
|
- IncIndent;
|
|
|
end;
|
|
|
|
|
|
Procedure TTiOPFCodeGenerator.DeclareObjectvariable(Strings : TStrings; Const ObjectClassName : String);
|
|
@@ -343,16 +457,19 @@ end;
|
|
|
procedure TTiOPFCodeGenerator.WriteReadVisitor(Strings : TStrings; Const ObjectClassName : String);
|
|
|
|
|
|
Var
|
|
|
- C,S : String;
|
|
|
+ OCN,CS,C,S : String;
|
|
|
I : Integer;
|
|
|
+ F : TFieldPropDef;
|
|
|
|
|
|
begin
|
|
|
- C:=Format('TRead%sVisitor',[StripType(ObjectClassName)]);
|
|
|
+ OCN:=StripType(ObjectClassName);
|
|
|
+ CS:=Format('SQLRead%s',[OCN]);
|
|
|
+ C:=Format('TRead%sVisitor',[OCN]);
|
|
|
Addln(Strings,'{ %s }',[C]);
|
|
|
Addln(Strings);
|
|
|
// Init
|
|
|
S:=BeginInit(Strings,C);
|
|
|
- Addln(Strings,'Query.SQL.Text:=SQLReadList;');
|
|
|
+ WriteSetSQL(Strings,CS);
|
|
|
DecIndent;
|
|
|
EndMethod(Strings,S);
|
|
|
// AcceptVisitor
|
|
@@ -360,8 +477,12 @@ begin
|
|
|
DecIndent;
|
|
|
EndMethod(Strings,S);
|
|
|
// AcceptSetupParams
|
|
|
- S:=BeginSetupParams(Strings,C,'',False);
|
|
|
- AddLn(Strings,'// Set up as needed');
|
|
|
+ F:=Fields.FindPropName('OID');
|
|
|
+ S:=BeginSetupParams(Strings,C,ObjectClassName,F<>Nil);
|
|
|
+ If (F<>Nil) then
|
|
|
+ WriteParamAssign(Strings,F)
|
|
|
+ else
|
|
|
+ AddLn(Strings,'// Set up as needed');
|
|
|
DecIndent;
|
|
|
EndMethod(Strings,S);
|
|
|
// MapRowToObject
|
|
@@ -390,37 +511,40 @@ begin
|
|
|
PN:=F.PropertyName;
|
|
|
FN:=F.FieldName;
|
|
|
SFN:=CreateString(FN);
|
|
|
- Case F.PropertyType of
|
|
|
- ptBoolean :
|
|
|
- S:='AsBoolean';
|
|
|
- ptShortint, ptByte,
|
|
|
- ptSmallInt, ptWord,
|
|
|
- ptLongint, ptCardinal :
|
|
|
- S:='AsInteger';
|
|
|
- ptInt64, ptQWord:
|
|
|
- If F.FieldType=ftLargeInt then
|
|
|
- R:=Format('O.%s:=(FieldByName(%s) as TLargeIntField).AsLargeInt;',[PN,SFN])
|
|
|
- else
|
|
|
+ If (PN=SOID) then
|
|
|
+ R:=Format('O.OID.AssignFromTIQuery(''%s'',Query);',[FN])
|
|
|
+ else
|
|
|
+ Case F.PropertyType of
|
|
|
+ ptBoolean :
|
|
|
+ S:='AsBoolean';
|
|
|
+ ptShortint, ptByte,
|
|
|
+ ptSmallInt, ptWord,
|
|
|
+ ptLongint, ptCardinal :
|
|
|
S:='AsInteger';
|
|
|
- ptShortString, ptAnsiString, ptWideString :
|
|
|
- S:='AsString';
|
|
|
- ptSingle, ptDouble, ptExtended, ptComp :
|
|
|
- S:='AsFloat';
|
|
|
- ptCurrency :
|
|
|
- S:='AsCurrency';
|
|
|
- ptDateTime :
|
|
|
- S:='AsDateTime';
|
|
|
- ptEnumerated :
|
|
|
- R:=Format('Integer(O.%s):=FieldAsInteger[%s];',[PN,SFN]);
|
|
|
- ptSet :
|
|
|
- S:=Format('// Add custom set loading code here for %s from %s',[PN,FN]);
|
|
|
- ptStream :
|
|
|
- R:=Format('FieldByName(%s).SaveToStream(O.%s);',[SFN,PN]);
|
|
|
- ptTStrings :
|
|
|
- R:=Format('O.%s.Text:=FieldAsString[%s];',[PN,SFN]);
|
|
|
- ptCustom :
|
|
|
- R:=Format('// Add custom loading code here for %s from %s',[PN,FN]);
|
|
|
- end;
|
|
|
+ ptInt64, ptQWord:
|
|
|
+ If F.FieldType=ftLargeInt then
|
|
|
+ R:=Format('O.%s:=(FieldByName(%s) as TLargeIntField).AsLargeInt;',[PN,SFN])
|
|
|
+ else
|
|
|
+ S:='AsInteger';
|
|
|
+ ptShortString, ptAnsiString, ptWideString :
|
|
|
+ S:='AsString';
|
|
|
+ ptSingle, ptDouble, ptExtended, ptComp :
|
|
|
+ S:='AsFloat';
|
|
|
+ ptCurrency :
|
|
|
+ S:='AsCurrency';
|
|
|
+ ptDateTime :
|
|
|
+ S:='AsDateTime';
|
|
|
+ ptEnumerated :
|
|
|
+ R:=Format('Integer(O.%s):=FieldAsInteger[%s];',[PN,SFN]);
|
|
|
+ ptSet :
|
|
|
+ S:=Format('// Add custom set loading code here for %s from %s',[PN,FN]);
|
|
|
+ ptStream :
|
|
|
+ R:=Format('FieldByName(%s).SaveToStream(O.%s);',[SFN,PN]);
|
|
|
+ ptTStrings :
|
|
|
+ R:=Format('O.%s.Text:=FieldAsString[%s];',[PN,SFN]);
|
|
|
+ ptCustom :
|
|
|
+ R:=Format('// Add custom loading code here for %s from %s',[PN,FN]);
|
|
|
+ end;
|
|
|
If (S<>'') then
|
|
|
R:=Format('O.%s:=Field%s[%s];',[PN,S,SFN]);
|
|
|
AddLn(Strings,R);
|
|
@@ -435,37 +559,40 @@ begin
|
|
|
PN:=F.PropertyName;
|
|
|
FN:=F.FieldName;
|
|
|
SFN:=CreateString(FN);
|
|
|
- Case F.PropertyType of
|
|
|
- ptBoolean :
|
|
|
- S:='AsBoolean';
|
|
|
- ptShortint, ptByte,
|
|
|
- ptSmallInt, ptWord,
|
|
|
- ptLongint, ptCardinal :
|
|
|
- S:='AsInteger';
|
|
|
- ptInt64, ptQWord:
|
|
|
- If F.FieldType=ftLargeInt then
|
|
|
- R:=Format('O.%s:=(Name(%s) as TLargeIntField).AsLargeInt;',[PN,SFN])
|
|
|
- else
|
|
|
+ If (PN=SOID) then
|
|
|
+ R:=Format('O.OID.AssignToTIQuery(''%s'',Query);',[FN])
|
|
|
+ else
|
|
|
+ Case F.PropertyType of
|
|
|
+ ptBoolean :
|
|
|
+ S:='AsBoolean';
|
|
|
+ ptShortint, ptByte,
|
|
|
+ ptSmallInt, ptWord,
|
|
|
+ ptLongint, ptCardinal :
|
|
|
S:='AsInteger';
|
|
|
- ptShortString, ptAnsiString, ptWideString :
|
|
|
- S:='AsString';
|
|
|
- ptSingle, ptDouble, ptExtended, ptComp :
|
|
|
- S:='AsFloat';
|
|
|
- ptCurrency :
|
|
|
- S:='AsCurrency';
|
|
|
- ptDateTime :
|
|
|
- S:='AsDateTime';
|
|
|
- ptEnumerated :
|
|
|
- R:=Format('ParamAsInteger[%s]:=Integer(O.%s);',[SFN,PN]);
|
|
|
- ptSet :
|
|
|
- S:=Format('// Add custom set loading code here for %s from %s',[PN,FN]);
|
|
|
- ptStream :
|
|
|
- R:=Format('AssignParamFromStream(%s,%s);',[SFN,PN]);
|
|
|
- ptTStrings :
|
|
|
- R:=Format('ParamAsString[%s]:=O.%s.Text;',[SFN,PN]);
|
|
|
- ptCustom :
|
|
|
- R:=Format('// Add custom loading code here for %s from %s',[PN,FN]);
|
|
|
- end;
|
|
|
+ ptInt64, ptQWord:
|
|
|
+ If F.FieldType=ftLargeInt then
|
|
|
+ R:=Format('O.%s:=(Name(%s) as TLargeIntField).AsLargeInt;',[PN,SFN])
|
|
|
+ else
|
|
|
+ S:='AsInteger';
|
|
|
+ ptShortString, ptAnsiString, ptWideString :
|
|
|
+ S:='AsString';
|
|
|
+ ptSingle, ptDouble, ptExtended, ptComp :
|
|
|
+ S:='AsFloat';
|
|
|
+ ptCurrency :
|
|
|
+ S:='AsCurrency';
|
|
|
+ ptDateTime :
|
|
|
+ S:='AsDateTime';
|
|
|
+ ptEnumerated :
|
|
|
+ R:=Format('ParamAsInteger[%s]:=Integer(O.%s);',[SFN,PN]);
|
|
|
+ ptSet :
|
|
|
+ S:=Format('// Add custom set loading code here for %s from %s',[PN,FN]);
|
|
|
+ ptStream :
|
|
|
+ R:=Format('AssignParamFromStream(%s,%s);',[SFN,PN]);
|
|
|
+ ptTStrings :
|
|
|
+ R:=Format('ParamAsString[%s]:=O.%s.Text;',[SFN,PN]);
|
|
|
+ ptCustom :
|
|
|
+ R:=Format('// Add custom loading code here for %s from %s',[PN,FN]);
|
|
|
+ end;
|
|
|
If (S<>'') then
|
|
|
R:=Format('O.%s:=Param%s[%s];',[PN,S,SFN]);
|
|
|
AddLn(Strings,R);
|
|
@@ -478,17 +605,19 @@ end;
|
|
|
procedure TTiOPFCodeGenerator.WriteReadListVisitor(Strings : TStrings; Const ObjectClassName : String);
|
|
|
|
|
|
Var
|
|
|
- C,S,LN : String;
|
|
|
+ OCN,CS,C,S,LN : String;
|
|
|
I : Integer;
|
|
|
|
|
|
begin
|
|
|
LN:=tiOPFOptions.ListClassName;
|
|
|
+ OCN:=StripType(ObjectClassName);
|
|
|
+ CS:=Format('SQLReadList%s',[OCN]);
|
|
|
C:=Format('TRead%sVisitor',[StripType(LN)]);
|
|
|
Addln(Strings,'{ %s }',[C]);
|
|
|
Addln(Strings);
|
|
|
// Init
|
|
|
S:=BeginInit(Strings,C);
|
|
|
- Addln(Strings,'Query.SQL.Text:=SQLReadList;');
|
|
|
+ WriteSetSQL(Strings,CS);
|
|
|
DecIndent;
|
|
|
EndMethod(Strings,C);
|
|
|
// AcceptVisitor
|
|
@@ -519,16 +648,18 @@ procedure TTiOPFCodeGenerator.WriteCreateVisitor(Strings : TStrings; Const Objec
|
|
|
|
|
|
|
|
|
Var
|
|
|
- C,S : String;
|
|
|
+ OCN,CS,C,S : String;
|
|
|
I : Integer;
|
|
|
|
|
|
begin
|
|
|
- C:=Format('TCreate%sVisitor',[StripType(ObjectClassName)]);
|
|
|
+ OCN:=StripType(ObjectClassName);
|
|
|
+ CS:=Format('SQLCreate%s',[OCN]);
|
|
|
+ C:=Format('TCreate%sVisitor',[OCN]);
|
|
|
Addln(Strings,'{ %s }',[C]);
|
|
|
Addln(Strings);
|
|
|
// Init
|
|
|
S:=BeginInit(Strings,C);
|
|
|
- Addln(Strings,'Query.SQL.Text:=SQLCreateObject;');
|
|
|
+ WriteSetSQL(Strings,CS);
|
|
|
DecIndent;
|
|
|
EndMethod(Strings,S);
|
|
|
// AcceptVisitor
|
|
@@ -553,17 +684,26 @@ begin
|
|
|
EndMethod(Strings,S);
|
|
|
end;
|
|
|
|
|
|
+procedure TTiOPFCodeGenerator.WriteSetSQL(Strings : TStrings; Const ASQL : String);
|
|
|
+
|
|
|
+begin
|
|
|
+ Addln(Strings,Format('Query.SQL.Text:=%s;',[ASQL]));
|
|
|
+end;
|
|
|
+
|
|
|
procedure TTiOPFCodeGenerator.WriteDeleteVisitor(Strings : TStrings; Const ObjectClassName : String);
|
|
|
|
|
|
Var
|
|
|
- C,S : String;
|
|
|
-
|
|
|
+ OCN,CS, C,S : String;
|
|
|
+ F : TFieldPropDef;
|
|
|
+
|
|
|
begin
|
|
|
+ OCN:=StripType(ObjectClassName);
|
|
|
+ CS:=Format('SQLDelete%s',[OCN]);
|
|
|
C:=Format('TDelete%sVisitor',[StripType(ObjectClassName)]);
|
|
|
Addln(Strings,'{ %s }',[C]);
|
|
|
// Init
|
|
|
S:=BeginInit(Strings,C);
|
|
|
- Addln(Strings,'Query.SQL.Text:=SQLDeleteObject;');
|
|
|
+ WriteSetSQL(Strings,CS);
|
|
|
DecIndent;
|
|
|
EndMethod(Strings,S);
|
|
|
// AcceptVisitor
|
|
@@ -573,7 +713,11 @@ begin
|
|
|
EndMethod(Strings,S);
|
|
|
// SetupParams
|
|
|
S:=BeginSetupParams(Strings,C,ObjectClassName,True);
|
|
|
- AddLn(Strings,'// Add parameter setup code here ');
|
|
|
+ F:=Fields.FindPropName('OID');
|
|
|
+ If (F<>Nil) then
|
|
|
+ WriteParamAssign(Strings,F)
|
|
|
+ else
|
|
|
+ AddLn(Strings,'// Add parameter setup code here ');
|
|
|
DecIndent;
|
|
|
EndMethod(Strings,S);
|
|
|
end;
|
|
@@ -581,16 +725,18 @@ end;
|
|
|
procedure TTiOPFCodeGenerator.WriteUpdateVisitor(Strings : TStrings; Const ObjectClassName : String);
|
|
|
|
|
|
Var
|
|
|
- C,S : String;
|
|
|
+ OCN,CS,C,S : String;
|
|
|
I : Integer;
|
|
|
|
|
|
begin
|
|
|
- C:=Format('TUpdate%sVisitor',[StripType(ObjectClassName)]);
|
|
|
+ OCN:=StripType(ObjectClassName);
|
|
|
+ CS:=Format('SQLUpdate%s',[OCN]);
|
|
|
+ C:=Format('TUpdate%sVisitor',[OCN]);
|
|
|
Addln(Strings,'{ %s }',[C]);
|
|
|
Addln(Strings);
|
|
|
// Init
|
|
|
S:=BeginInit(Strings,C);
|
|
|
- Addln(Strings,'Query.SQL.Text:=SQLUpdateObject;');
|
|
|
+ WriteSetSQl(Strings,CS);
|
|
|
DecIndent;
|
|
|
EndMethod(Strings,S);
|
|
|
// AcceptVisitor
|
|
@@ -630,8 +776,8 @@ begin
|
|
|
AddLn(Strings,'Private');
|
|
|
IncIndent;
|
|
|
Try
|
|
|
- AddLn(Strings,'Function GetObj(Index : Integer) : %s;',[ObjectClassname]);
|
|
|
- AddLn(Strings,'Procedure SetObj(Index : Integer; AValue : %s);',[ObjectClassname]);
|
|
|
+ AddLn(Strings,'Function GetObj(AIndex : Integer) : %s;',[ObjectClassname]);
|
|
|
+ AddLn(Strings,'Procedure SetObj(AIndex : Integer; AValue : %s);',[ObjectClassname]);
|
|
|
Finally
|
|
|
DecIndent;
|
|
|
end;
|
|
@@ -641,7 +787,7 @@ begin
|
|
|
AddLn(Strings,'Public');
|
|
|
IncIndent;
|
|
|
Try
|
|
|
- Addln(Strings,'Procedure Add(AnItem : %s); reintroduce;',[ObjectClassName]);
|
|
|
+ Addln(Strings,'Function Add(AnItem : %s) : Integer; reintroduce;',[ObjectClassName]);
|
|
|
Finally
|
|
|
DecIndent;
|
|
|
end;
|
|
@@ -668,6 +814,7 @@ begin
|
|
|
Addln(Strings,'%s = Class(%s)',[ListClassName,ListAncestorName]);
|
|
|
DoCreateListDeclaration(Strings,ObjectClassName,ListClassName,ListAncestorName);
|
|
|
AddLn(Strings,'end;');
|
|
|
+ Addln(Strings);
|
|
|
end;
|
|
|
|
|
|
procedure TTiOPFCodeGenerator.WriteListAddObject(Strings: TStrings;
|
|
@@ -677,16 +824,26 @@ Var
|
|
|
S : String;
|
|
|
|
|
|
begin
|
|
|
- S:=Format('Procedure %s.Add(AnItem : %s);',[ListClassName,ObjectClassName]);
|
|
|
+ S:=Format('Function %s.Add(AnItem : %s) : Integer;',[ListClassName,ObjectClassName]);
|
|
|
BeginMethod(Strings,S);
|
|
|
Addln(Strings,'begin');
|
|
|
IncIndent;
|
|
|
try
|
|
|
- Addln(Strings,'inherited Add(AnItem);');
|
|
|
+ Addln(Strings,'Result:=inherited Add(AnItem);');
|
|
|
finally
|
|
|
DecIndent;
|
|
|
end;
|
|
|
EndMethod(Strings,S);
|
|
|
+ Addln(Strings);
|
|
|
+end;
|
|
|
+
|
|
|
+function TTiOPFCodeGenerator.AllowPropertyDeclaration(F: TFieldPropDef;
|
|
|
+ AVisibility: TVisibilities): Boolean;
|
|
|
+begin
|
|
|
+ If F.PropertyName=SOID then
|
|
|
+ Result:=False
|
|
|
+ else
|
|
|
+ Result:=inherited AllowPropertyDeclaration(F, AVisibility);
|
|
|
end;
|
|
|
|
|
|
|
|
@@ -700,27 +857,31 @@ begin
|
|
|
begin
|
|
|
AddLn(Strings,'{ %s }',[ListClassName]);
|
|
|
AddLn(Strings);
|
|
|
- S:=Format('Function %s.GetObj(Index : Integer) : %s;',[ListClassName,ObjectClassname]);
|
|
|
+ S:=Format('Function %s.GetObj(AIndex : Integer) : %s;',[ListClassName,ObjectClassname]);
|
|
|
BeginMethod(Strings,S);
|
|
|
AddLn(Strings,'begin');
|
|
|
IncIndent;
|
|
|
try
|
|
|
- AddLn(Strings,'Result:=%s(Inherited Items[Index]);',[ObjectClassname]);
|
|
|
+ AddLn(Strings,'Result:=%s(Inherited Items[AIndex]);',[ObjectClassname]);
|
|
|
finally
|
|
|
DecIndent;
|
|
|
end;
|
|
|
EndMethod(Strings,S);
|
|
|
- S:=Format('Procedure %s.SetObj(Index : Integer; AValue : %s);',[ListClassName,ObjectClassname]);
|
|
|
+ Addln(Strings);
|
|
|
+ S:=Format('Procedure %s.SetObj(AIndex : Integer; AValue : %s);',[ListClassName,ObjectClassname]);
|
|
|
BeginMethod(Strings,S);
|
|
|
AddLn(Strings,'begin');
|
|
|
IncIndent;
|
|
|
try
|
|
|
- AddLn(Strings,'Inherited Items[Index]:=AValue;');
|
|
|
+ AddLn(Strings,'Inherited Items[AIndex]:=AValue;');
|
|
|
finally
|
|
|
DecIndent;
|
|
|
end;
|
|
|
EndMethod(Strings,S);
|
|
|
+ Addln(Strings);
|
|
|
end;
|
|
|
+ If (caListAddMethod in tiOPFOptions.ClassOptions) then
|
|
|
+ WriteListAddObject(Strings,ListClassName,ObjectClassName);
|
|
|
end;
|
|
|
|
|
|
Initialization
|