{ TChainSQL }
TChainSQL = record
SQL: string;
function SELECT(aSELECT: string): TChainSQL;
function FROM(aFROM: string): TChainSQL;
function WHERE(aWHERE: string): TChainSQL;
function GROUP_BY(aGROUP: string): TChainSQL;
function ORDER_BY(aORDER: string): TChainSQL;
function HAVING(aHAVING: string): TChainSQL;
function UNION(aUNION: string): TChainSQL;
procedure Init;
function Term: string;
end;
出落ちに近いが、このレコードの実装部はこうなる。
{ TChainSQL }function TChainSQL.FROM(aFROM: string): TChainSQL;
begin
Result.SQL := Self.SQL + Format(' FROM %s', [aFROM])
end;
function TChainSQL.GROUP_BY(aGROUP: string): TChainSQL;
begin
Result.SQL := Self.SQL + Format(' GROUP BY %s', [aGROUP])
end;
function TChainSQL.HAVING(aHAVING: string): TChainSQL;
begin
Result.SQL := Self.SQL + Format(' HAVING %s', [aHAVING])
end;
procedure TChainSQL.Init;
begin
Self.SQL := '';
end;
function TChainSQL.ORDER_BY(aORDER: string): TChainSQL;
begin
Result.SQL := Self.SQL + Format(' ORDER BY %s', [aORDER])
end;
function TChainSQL.SELECT(aSELECT: string): TChainSQL;
begin
Result.SQL := Format('SELECT %s', [aSELECT])
end;
function TChainSQL.Term: string;
begin
Result := Self.SQL + ';';
end;
function TChainSQL.UNION(aUNION: string): TChainSQL;
begin
Result.SQL := Self.SQL + Format(' UNION %s', [aUNION])
end;
function TChainSQL.WHERE(aWHERE: string): TChainSQL;
begin
Result.SQL := Self.SQL + Format(' WHERE %s', [aWHERE])
end;
すると、こんなコードが書けるようになる。
procedure TForm1.Button1Click(Sender: TObject);
var
Dmy: string;
SQL: TChainSQL;
begin
Dmy := SQL.SELECT('*').FROM('TABLE_TEST').WHERE('CODE = 1').ORDER_BY('CODE').Term;
ShowMessage(Dmy); // SELECT * FROM TABLE_TEST WHERE CODE = 1 ORDER BY CODE;end;