* Support for TBufDataset XML format

git-svn-id: trunk@41661 -
This commit is contained in:
michael 2019-03-09 18:42:51 +00:00
parent 9fc701c75e
commit 2c7f278615

View File

@ -34,6 +34,7 @@ Type
Public Public
Destructor Destroy; override; Destructor Destroy; override;
Class Function GetContentType: String; override; Class Function GetContentType: String; override;
Class Function ForBufDataset: Boolean; virtual;
Function SelectObject(aIndex : Integer) : Boolean; override; Function SelectObject(aIndex : Integer) : Boolean; override;
function GetContentField(aName: UTF8string): TJSONData; override; function GetContentField(aName: UTF8string): TJSONData; override;
procedure InitStreaming; override; procedure InitStreaming; override;
@ -53,6 +54,7 @@ Type
FRow : TDOMElement; FRow : TDOMElement;
FRowData: TDOMElement; FRowData: TDOMElement;
Protected Protected
Class Function ForBufDataset: Boolean; virtual;
Procedure SetOutputOptions(AValue: TRestOutputOptions); override; Procedure SetOutputOptions(AValue: TRestOutputOptions); override;
Public Public
procedure EndData; override; procedure EndData; override;
@ -74,6 +76,20 @@ Type
procedure InitStreaming; override; procedure InitStreaming; override;
end; end;
{ TBufDatasetOutputStreamer }
TBufDatasetOutputStreamer = Class(TCDSOutputStreamer)
Protected
Class Function ForBufDataset: Boolean; override;
end;
{ TBufDatasetInputStreamer }
TBufDatasetInputStreamer = Class(TCDSInputStreamer)
Protected
Class Function ForBufDataset: Boolean; override;
end;
implementation implementation
uses sqldbrestconst; uses sqldbrestconst;
@ -98,6 +114,20 @@ Const
'bin.hex:Binary' {rftBlob} 'bin.hex:Binary' {rftBlob}
); );
{ TBufDatasetInputStreamer }
class function TBufDatasetInputStreamer.ForBufDataset: Boolean;
begin
Result:=True;
end;
{ TBufDatasetOutputStreamer }
class function TBufDatasetOutputStreamer.ForBufDataset: Boolean;
begin
Result:=True;
end;
{ TCDSInputStreamer } { TCDSInputStreamer }
destructor TCDSInputStreamer.Destroy; destructor TCDSInputStreamer.Destroy;
@ -111,6 +141,11 @@ begin
Result:='text/xml'; Result:='text/xml';
end; end;
class function TCDSInputStreamer.ForBufDataset: Boolean;
begin
Result:=False;
end;
function TCDSInputStreamer.SelectObject(aIndex: Integer): Boolean; function TCDSInputStreamer.SelectObject(aIndex: Integer): Boolean;
Var Var
@ -182,6 +217,11 @@ end;
{ TCDSOutputStreamer } { TCDSOutputStreamer }
class function TCDSOutputStreamer.ForBufDataset: Boolean;
begin
Result:=False;
end;
procedure TCDSOutputStreamer.SetOutputOptions(AValue: TRestOutputOptions); procedure TCDSOutputStreamer.SetOutputOptions(AValue: TRestOutputOptions);
begin begin
Include(AValue,ooMetadata); // We always need metadata Include(AValue,ooMetadata); // We always need metadata
@ -242,6 +282,7 @@ begin
FRow[UTF8Decode(N)]:=UTF8Decode(S); FRow[UTF8Decode(N)]:=UTF8Decode(S);
end; end;
procedure TCDSOutputStreamer.WriteMetadata(aFieldList: TRestFieldPairArray); procedure TCDSOutputStreamer.WriteMetadata(aFieldList: TRestFieldPairArray);
Var Var
@ -269,7 +310,11 @@ begin
ML:=P.RestField.MaxLen; ML:=P.RestField.MaxLen;
if ML=0 then if ML=0 then
ML:=255; ML:=255;
F['WIDTH']:=Utf8Decode(IntToStr(P.RestField.MaxLen)); if ForBufDataset then
F['width']:=Utf8Decode(IntToStr(P.RestField.MaxLen))
else
F['WIDTH']:=Utf8Decode(IntToStr(P.RestField.MaxLen));
end; end;
if (ST<>'') then if (ST<>'') then
F['subtype']:=ST; F['subtype']:=ST;
@ -315,6 +360,8 @@ end;
Initialization Initialization
TCDSInputStreamer.RegisterStreamer('cds'); TCDSInputStreamer.RegisterStreamer('cds');
TBufDatasetInputStreamer.RegisterStreamer('buf');
TCDSOutputStreamer.RegisterStreamer('cds'); TCDSOutputStreamer.RegisterStreamer('cds');
TBufDatasetOutputStreamer.RegisterStreamer('buf');
end. end.