mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-10 02:28:22 +02:00
fcl-db:fcl-db: base: fix streaming (restoring) of ftWideMemo fields in XMLDatapacketReader
+ extend test of streaming of "FieldDataset" to test all fields (not only Blob and Memo) git-svn-id: trunk@25538 -
This commit is contained in:
parent
22e9cb48dd
commit
9013ff6724
@ -341,6 +341,7 @@ var FieldNr : integer;
|
||||
ABufBlobField: TBufBlobField;
|
||||
AField: TField;
|
||||
s: string;
|
||||
ws: widestring;
|
||||
begin
|
||||
with ADataset do for FieldNr:=0 to FieldDefs.Count-1 do
|
||||
begin
|
||||
@ -348,19 +349,20 @@ begin
|
||||
AFieldNode := FRecordNode.Attributes.GetNamedItem(FieldDefs[FieldNr].Name);
|
||||
if assigned(AFieldNode) then
|
||||
begin
|
||||
s := AFieldNode.NodeValue;
|
||||
if (FieldDefs[FieldNr].DataType in [ftBlob, ftBytes, ftVarBytes]) and (s <> '') then
|
||||
s := DecodeStringBase64(s);
|
||||
if FieldDefs[FieldNr].DataType in [ftBlob, ftMemo, ftWideMemo] then
|
||||
begin
|
||||
ABufBlobField.BlobBuffer:=ADataset.GetNewBlobBuffer;
|
||||
ABufBlobField.BlobBuffer^.Size:=length(s);
|
||||
ReAllocMem(ABufBlobField.BlobBuffer^.Buffer,ABufBlobField.BlobBuffer^.Size);
|
||||
move(s[1],ABufBlobField.BlobBuffer^.Buffer^,ABufBlobField.BlobBuffer^.Size);
|
||||
AField.SetData(@ABufBlobField);
|
||||
end
|
||||
else
|
||||
AField.AsString := s; // set it to the filterbuffer
|
||||
s := AFieldNode.NodeValue;
|
||||
if (FieldDefs[FieldNr].DataType in [ftBlob, ftBytes, ftVarBytes]) and (s <> '') then
|
||||
s := DecodeStringBase64(s);
|
||||
case FieldDefs[FieldNr].DataType of
|
||||
ftBlob, ftMemo:
|
||||
RestoreBlobField(ADataset, AField, @s[1], length(s));
|
||||
ftWideMemo:
|
||||
begin
|
||||
ws := s;
|
||||
RestoreBlobField(ADataset, AField, @ws[1], length(ws)*sizeof(WideChar));
|
||||
end
|
||||
else;
|
||||
AField.AsString := s; // set it to the filterbuffer
|
||||
end;
|
||||
end
|
||||
else
|
||||
AField.SetData(nil);
|
||||
|
@ -37,7 +37,7 @@ type
|
||||
procedure NullEditChange(ADataset: TCustomBufDataset);
|
||||
procedure AppendDeleteChange(ADataset: TCustomBufDataset);
|
||||
|
||||
procedure TestStreamingBlobFields(AFormat: TDataPacketFormat);
|
||||
procedure TestStreamingDataFields(AFormat: TDataPacketFormat);
|
||||
procedure TestStreamingNullFields(AFormat: TDataPacketFormat);
|
||||
protected
|
||||
procedure SetUp; override;
|
||||
@ -72,8 +72,8 @@ type
|
||||
procedure TestSeveralEditsXML;
|
||||
procedure TestDeleteAllXML;
|
||||
procedure TestDeleteAllInsertXML;
|
||||
procedure TestStreamingBlobFieldsBIN;
|
||||
procedure TestStreamingBlobFieldsXML;
|
||||
procedure TestStreamingDataFieldsBIN;
|
||||
procedure TestStreamingDataFieldsXML;
|
||||
procedure TestStreamingBigBlobFieldsXML;
|
||||
procedure TestStreamingNullFieldsBIN;
|
||||
procedure TestStreamingNullFieldsXML;
|
||||
@ -462,9 +462,10 @@ begin
|
||||
TestChangesXML(@DeleteAllInsertChange);
|
||||
end;
|
||||
|
||||
procedure TTestBufDatasetStreams.TestStreamingBlobFields(AFormat: TDataPacketFormat);
|
||||
procedure TTestBufDatasetStreams.TestStreamingDataFields(AFormat: TDataPacketFormat);
|
||||
var SaveDs: TCustomBufDataset;
|
||||
LoadDs: TCustomBufDataset;
|
||||
i: integer;
|
||||
begin
|
||||
SaveDs := DBConnector.GetFieldDataset as TCustomBufDataset;
|
||||
SaveDs.Open;
|
||||
@ -472,13 +473,15 @@ begin
|
||||
|
||||
LoadDs := TCustomBufDataset.Create(nil);
|
||||
LoadDs.LoadFromFile(TestFileNames[AFormat]);
|
||||
AssertEquals(SaveDs.FieldCount, LoadDs.FieldCount);
|
||||
|
||||
LoadDS.First;
|
||||
SaveDS.First;
|
||||
while not LoadDS.EOF do
|
||||
begin
|
||||
AssertEquals(SaveDS.FieldByName('FBLOB').AsString, LoadDS.FieldByName('FBLOB').AsString);
|
||||
AssertEquals(SaveDS.FieldByName('FMEMO').AsString, LoadDS.FieldByName('FMEMO').AsString);
|
||||
for i:=0 to LoadDS.FieldCount-1 do
|
||||
// all FieldTypes supports GetAsString
|
||||
AssertEquals(LoadDS.Fields[i].FieldName, SaveDS.Fields[i].AsString, LoadDS.Fields[i].AsString);
|
||||
LoadDS.Next;
|
||||
SaveDS.Next;
|
||||
end;
|
||||
@ -486,14 +489,14 @@ begin
|
||||
LoadDs.Free;
|
||||
end;
|
||||
|
||||
procedure TTestBufDatasetStreams.TestStreamingBlobFieldsBIN;
|
||||
procedure TTestBufDatasetStreams.TestStreamingDataFieldsBIN;
|
||||
begin
|
||||
TestStreamingBlobFields(dfBinary);
|
||||
TestStreamingDataFields(dfBinary);
|
||||
end;
|
||||
|
||||
procedure TTestBufDatasetStreams.TestStreamingBlobFieldsXML;
|
||||
procedure TTestBufDatasetStreams.TestStreamingDataFieldsXML;
|
||||
begin
|
||||
TestStreamingBlobFields(dfXML);
|
||||
TestStreamingDataFields(dfXML);
|
||||
end;
|
||||
|
||||
procedure TTestBufDatasetStreams.TestStreamingBigBlobFieldsXML;
|
||||
@ -588,6 +591,7 @@ begin
|
||||
LoadDs := TCustomBufDataset.Create(nil);
|
||||
try
|
||||
LoadDs.LoadFromFile(TestFileNames[AFormat]);
|
||||
AssertEquals(SaveDs.FieldCount, LoadDs.FieldCount);
|
||||
SaveDs.First;
|
||||
while not SaveDs.EOF do
|
||||
begin
|
||||
|
Loading…
Reference in New Issue
Block a user