* Replaced TIBConnections LoadBlobIntoStream for LoadblobIntobuffer

* Dont check the quotation-style if no database is selected yet

git-svn-id: trunk@6106 -
This commit is contained in:
joost 2007-01-21 21:34:43 +00:00
parent feea4deb6d
commit d9efc52dba
4 changed files with 34 additions and 24 deletions

View File

@ -151,7 +151,7 @@ type
function Fetch : boolean; virtual; abstract;
function LoadField(FieldDef : TFieldDef;buffer : pointer; out CreateBlob : boolean) : boolean; virtual; abstract;
procedure LoadBlobIntoStream(Field: TField;AStream: TStream); virtual; abstract;
procedure LoadBlobIntoBuffer(FieldDef: TFieldDef;ABlobBuf: PBlobBuffer); virtual; abstract;
procedure LoadBlobIntoBuffer(FieldDef: TFieldDef;ABlobBuf: PBufBlobField); virtual; abstract;
public
constructor Create(AOwner: TComponent); override;
@ -513,7 +513,7 @@ begin
begin
BufBlob := PBufBlobField(Buffer);
BufBlob^.BlobBuffer := GetNewBlobBuffer;
LoadBlobIntoBuffer(FieldDefs[x],BufBlob^.BlobBuffer);
LoadBlobIntoBuffer(FieldDefs[x],BufBlob);
end;
inc(buffer,GetFieldSize(FieldDefs[x]));
end;
@ -1096,7 +1096,8 @@ begin
if not assigned(bufblob.BlobBuffer) then with FDataSet do
begin
FBlobBuffer := GetNewBlobBuffer;
LoadBlobIntoStream(field,self);
bufblob.BlobBuffer := FBlobBuffer;
LoadBlobIntoBuffer(FieldDefs[field.FieldNo-1],@bufblob);
end
else
FBlobBuffer := bufblob.BlobBuffer;

View File

@ -7,7 +7,7 @@ unit IBConnection;
interface
uses
Classes, SysUtils, sqldb, db, math, dbconst,
Classes, SysUtils, sqldb, db, math, dbconst, bufdataset,
{$IfDef LinkDynamically}
ibase60dyn;
{$Else}
@ -87,7 +87,7 @@ type
procedure RollBackRetaining(trans : TSQLHandle); override;
procedure UpdateIndexDefs(var IndexDefs : TIndexDefs;TableName : string); override;
function GetSchemaInfoSQL(SchemaType : TSchemaType; SchemaObjectName, SchemaPattern : string) : string; override;
procedure LoadBlobIntoStream(Field: TField;AStream: TStream;cursor: TSQLCursor;ATransaction : TSQLTransaction); override;
procedure LoadBlobIntoBuffer(FieldDef: TFieldDef;ABlobBuf: PBufBlobField; cursor: TSQLCursor; ATransaction : TSQLTransaction); override;
public
constructor Create(AOwner : TComponent); override;
procedure CreateDB; override;
@ -104,7 +104,7 @@ type
implementation
uses strutils, bufdataset;
uses strutils;
type
TTm = packed record
@ -1070,7 +1070,7 @@ begin
CheckError('isc_blob_info', FStatus);
end;
procedure TIBConnection.LoadBlobIntoStream(Field: TField;AStream: TStream;cursor: TSQLCursor;ATransaction : TSQLTransaction);
procedure TIBConnection.LoadBlobIntoBuffer(FieldDef: TFieldDef;ABlobBuf: PBufBlobField; cursor: TSQLCursor; ATransaction : TSQLTransaction);
const
isc_segstr_eof = 335544367; // It's not defined in ibase60 but in ibase40. Would it be better to define in ibase60?
@ -1080,12 +1080,10 @@ var
blobSegLen : word;
maxBlobSize : longInt;
TransactionHandle : pointer;
BlobBuf : TBufBlobField;
blobId : PISC_QUAD;
ptr : Pointer;
begin
if not field.getData(@BlobBuf) then
exit;
blobId := PISC_QUAD(@BlobBuf.ConnBlobBuffer);
blobId := PISC_QUAD(@(ABlobBuf^.ConnBlobBuffer));
TransactionHandle := Atransaction.Handle;
blobHandle := nil;
@ -1097,11 +1095,18 @@ begin
blobSegment := AllocMem(maxBlobSize);
while (isc_get_segment(@FStatus[0], @blobHandle, @blobSegLen, maxBlobSize, blobSegment) = 0) do begin
AStream.writeBuffer(blobSegment^, blobSegLen);
end;
with ABlobBuf^.BlobBuffer^ do
begin
Size := 0;
while (isc_get_segment(@FStatus[0], @blobHandle, @blobSegLen, maxBlobSize, blobSegment) = 0) do
begin
ReAllocMem(Buffer,Size+blobSegLen);
ptr := Buffer+Size;
move(blobSegment^,ptr^,blobSegLen);
inc(Size,blobSegLen);
end;
end;
freemem(blobSegment);
AStream.seek(0,soFromBeginning);
if FStatus[1] = isc_segstr_eof then
begin

View File

@ -64,7 +64,7 @@ type
procedure RollBackRetaining(trans : TSQLHandle); override;
procedure UpdateIndexDefs(var IndexDefs : TIndexDefs;TableName : string); override;
function GetSchemaInfoSQL(SchemaType : TSchemaType; SchemaObjectName, SchemaPattern : string) : string; override;
procedure LoadBlobIntoBuffer(FieldDef: TFieldDef;ABlobBuf: PBlobBuffer; cursor: TSQLCursor;ATransaction : TSQLTransaction); override;
procedure LoadBlobIntoBuffer(FieldDef: TFieldDef;ABlobBuf: PBufBlobField; cursor: TSQLCursor;ATransaction : TSQLTransaction); override;
public
constructor Create(AOwner : TComponent); override;
procedure CreateDB; override;
@ -829,7 +829,7 @@ begin
end;
procedure TPQConnection.LoadBlobIntoBuffer(FieldDef: TFieldDef;
ABlobBuf: PBlobBuffer; cursor: TSQLCursor; ATransaction: TSQLTransaction);
ABlobBuf: PBufBlobField; cursor: TSQLCursor; ATransaction: TSQLTransaction);
var
x : integer;
li : Longint;
@ -838,9 +838,9 @@ begin
begin
x := FieldBinding[FieldDef.FieldNo-1];
li := pqgetlength(res,curtuple,x);
ReAllocMem(ABlobBuf^.Buffer,li);
Move(pqgetvalue(res,CurTuple,x)^, ABlobBuf^.Buffer^, li);
ABlobBuf^.Size := li;
ReAllocMem(ABlobBuf^.BlobBuffer^.Buffer,li);
Move(pqgetvalue(res,CurTuple,x)^, ABlobBuf^.BlobBuffer^.Buffer^, li);
ABlobBuf^.BlobBuffer^.Size := li;
end;
end;

View File

@ -109,7 +109,7 @@ type
procedure UpdateIndexDefs(var IndexDefs : TIndexDefs;TableName : string); virtual;
function GetSchemaInfoSQL(SchemaType : TSchemaType; SchemaObjectName, SchemaPattern : string) : string; virtual;
procedure LoadBlobIntoStream(Field: TField;AStream: TStream;cursor: TSQLCursor;ATransaction : TSQLTransaction); virtual;
procedure LoadBlobIntoBuffer(FieldDef: TFieldDef;ABlobBuf: PBlobBuffer; cursor: TSQLCursor; ATransaction : TSQLTransaction); virtual; abstract;
procedure LoadBlobIntoBuffer(FieldDef: TFieldDef;ABlobBuf: PBufBlobField; cursor: TSQLCursor; ATransaction : TSQLTransaction); virtual; abstract;
public
property Handle: Pointer read GetHandle;
destructor Destroy; override;
@ -237,7 +237,7 @@ type
Function GetDataSource : TDatasource; override;
Procedure SetDataSource(AValue : TDatasource);
procedure LoadBlobIntoStream(Field: TField;AStream: TStream); override;
procedure LoadBlobIntoBuffer(FieldDef: TFieldDef;ABlobBuf: PBlobBuffer); override;
procedure LoadBlobIntoBuffer(FieldDef: TFieldDef;ABlobBuf: PBufBlobField); override;
public
procedure Prepare; virtual;
procedure UnPrepare; virtual;
@ -640,7 +640,10 @@ begin
UnPrepare;
if (FSQL <> nil) then
begin
ConnOptions := (DataBase as TSQLConnection).ConnOptions;
if assigned(DataBase) then
ConnOptions := (DataBase as TSQLConnection).ConnOptions
else
ConnOptions := [sqEscapeRepeat,sqEscapeSlash];
Fparams.ParseSQL(FSQL.Text,True, sqEscapeSlash in ConnOptions, sqEscapeRepeat in ConnOptions,psInterbase);
If Assigned(FMasterLink) then
FMasterLink.RefreshParamNames;
@ -673,6 +676,7 @@ begin
inherited setdatabase(value);
if assigned(value) and (Transaction = nil) and (Assigned(db.Transaction)) then
transaction := Db.Transaction;
OnChangeSQL(Self);
end;
end;
@ -1326,7 +1330,7 @@ begin
end;
procedure TSQLQuery.LoadBlobIntoBuffer(FieldDef: TFieldDef;
ABlobBuf: PBlobBuffer);
ABlobBuf: PBufBlobField);
begin
(DataBase as tsqlconnection).LoadBlobIntoBuffer(FieldDef, ABlobBuf, FCursor,(Transaction as tsqltransaction));
end;