* fixed the recognition of xml-files using the TBufDataset.filename property

git-svn-id: trunk@21267 -
This commit is contained in:
joost 2012-05-09 14:49:53 +00:00
parent 4fc7515591
commit cbb8b23c71
2 changed files with 44 additions and 12 deletions

View File

@ -437,6 +437,7 @@ type
function GetIndexFieldNames: String;
function GetIndexName: String;
function GetBufUniDirectional: boolean;
function GetPacketReader(const Format: TDataPacketFormat; const AStream: TStream): TDataPacketReader;
function LoadBuffer(Buffer : TRecordBuffer): TGetResult;
function GetFieldSize(FieldDef : TFieldDef) : longint;
function GetRecordUpdateBuffer(const ABookmark : TBufBookmark; IncludePrior : boolean = false; AFindNext : boolean = false) : boolean;
@ -1121,7 +1122,7 @@ begin
if not Assigned(FDatasetReader) and (FileName<>'') then
begin
FFileStream := TFileStream.Create(FileName,fmOpenRead);
FDatasetReader := TFpcBinaryDatapacketReader.Create(FFileStream);
FDatasetReader := GetPacketReader(dfAny, FFileStream);
FReadFromFile := True;
end;
if assigned(FDatasetReader) then IntLoadFielddefsFromFile;
@ -2292,6 +2293,24 @@ begin
result := IsUniDirectional;
end;
function TCustomBufDataset.GetPacketReader(const Format: TDataPacketFormat; const AStream: TStream): TDataPacketReader;
var APacketReader: TDataPacketReader;
APacketReaderReg: TDatapacketReaderRegistration;
begin
if GetRegisterDatapacketReader(AStream, format, APacketReaderReg) then
APacketReader := APacketReaderReg.ReaderClass.create(AStream)
else if TFpcBinaryDatapacketReader.RecognizeStream(AStream) then
begin
AStream.Seek(0, soFromBeginning);
APacketReader := TFpcBinaryDatapacketReader.create(AStream)
end
else
DatabaseError(SStreamNotRecognised);
Result:=APacketReader;
end;
function TCustomBufDataset.GetRecordSize : Word;
begin
@ -2646,19 +2665,10 @@ begin
end;
procedure TCustomBufDataset.LoadFromStream(AStream: TStream; Format: TDataPacketFormat);
var APacketReaderReg : TDatapacketReaderRegistration;
APacketReader : TDataPacketReader;
var APacketReader : TDataPacketReader;
begin
CheckBiDirectional;
if GetRegisterDatapacketReader(AStream,format,APacketReaderReg) then
APacketReader := APacketReaderReg.ReaderClass.create(AStream)
else if TFpcBinaryDatapacketReader.RecognizeStream(AStream) then
begin
AStream.Seek(0,soFromBeginning);
APacketReader := TFpcBinaryDatapacketReader.create(AStream)
end
else
DatabaseError(SStreamNotRecognised);
APacketReader:=GetPacketReader(Format, AStream);
try
SetDatasetPacket(APacketReader);
finally

View File

@ -72,6 +72,7 @@ type
procedure TestAppendDeleteBIN;
procedure TestFileNameProperty;
procedure TestXmlFileRecognition;
procedure TestCloseDatasetNoConnection; // bug 17623
end;
@ -469,6 +470,27 @@ begin
LoadDs.close;
end;
procedure TTestBufDatasetStreams.TestXmlFileRecognition;
var ds : TDataset;
LoadDs: TDataset;
begin
ds := DBConnector.GetNDataset(true,5);
ds.open;
TCustomBufDataset(ds).SaveToFile('test.xml',dfXML);
ds.close;
LoadDs := DBConnector.GetNDataset(True,2);
TCustomBufDataset(LoadDs).FileName:='test.xml';
LoadDs.Open;
ds := DBConnector.GetNDataset(true,4);
ds.Open;
CompareDatasets(ds,LoadDs);
ds.close;
LoadDs.close;
end;
procedure TTestBufDatasetStreams.TestCloseDatasetNoConnection;
var SaveDs: TCustomBufDataset;
LoadDs: TCustomBufDataset;