mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-04 19:10:18 +02:00
* fixed the recognition of xml-files using the TBufDataset.filename property
git-svn-id: trunk@21267 -
This commit is contained in:
parent
4fc7515591
commit
cbb8b23c71
@ -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
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user