90 |
|
FIREBIRD_EMBEDDED = 'fbembed.dll'; |
91 |
|
{$ENDIF} |
92 |
|
|
93 |
+ |
const |
94 |
+ |
IBLocalBufferLength = 512; |
95 |
+ |
IBBigLocalBufferLength = IBLocalBufferLength * 2; |
96 |
+ |
IBHugeLocalBufferLength = IBBigLocalBufferLength * 20; |
97 |
+ |
|
98 |
|
type |
99 |
|
TStatusVector = array[0..19] of NativeInt; |
100 |
|
PStatusVector = ^TStatusVector; |
165 |
|
{Taken from legacy API} |
166 |
|
isc_sqlcode: Tisc_sqlcode; |
167 |
|
isc_sql_interprete: Tisc_sql_interprete; |
163 |
– |
isc_interprete: Tisc_interprete; |
168 |
|
isc_event_counts: Tisc_event_counts; |
169 |
|
isc_event_block: Tisc_event_block; |
170 |
|
isc_free: Tisc_free; |
187 |
|
function SQLDecodeTime(bufptr: PByte): TDateTime; virtual; abstract; |
188 |
|
procedure SQLEncodeDateTime(aDateTime: TDateTime; bufptr: PByte); virtual; abstract; |
189 |
|
function SQLDecodeDateTime(bufptr: PByte): TDateTime; virtual; abstract; |
190 |
< |
|
190 |
> |
function FormatStatus(Status: TFBStatus): AnsiString; virtual; abstract; |
191 |
|
|
192 |
|
{IFirebirdAPI} |
193 |
|
function GetStatus: IStatus; virtual; abstract; |
194 |
|
function IsLibraryLoaded: boolean; |
195 |
|
function IsEmbeddedServer: boolean; virtual; abstract; |
196 |
|
function GetFBLibrary: IFirebirdLibrary; |
197 |
+ |
function GetImplementationVersion: AnsiString; |
198 |
+ |
function GetClientMajor: integer; virtual; abstract; |
199 |
+ |
function GetClientMinor: integer; virtual; abstract; |
200 |
|
end; |
201 |
|
|
202 |
|
implementation |
212 |
|
{$ENDIF} |
213 |
|
SysUtils; |
214 |
|
|
208 |
– |
const |
209 |
– |
IBLocalBufferLength = 512; |
210 |
– |
IBBigLocalBufferLength = IBLocalBufferLength * 2; |
211 |
– |
IBHugeLocalBufferLength = IBBigLocalBufferLength * 20; |
212 |
– |
|
215 |
|
{$IFDEF UNIX} |
216 |
|
{$I 'include/uloadlibrary.inc'} |
217 |
|
{$ELSE} |
368 |
|
Result := FFBLibrary; |
369 |
|
end; |
370 |
|
|
371 |
+ |
function TFBClientAPI.GetImplementationVersion: AnsiString; |
372 |
+ |
begin |
373 |
+ |
Result := Format('%d.%d',[GetClientMajor,GetClientMinor]); |
374 |
+ |
end; |
375 |
+ |
|
376 |
|
function TFBClientAPI.GetProcAddr(ProcName: PAnsiChar): Pointer; |
377 |
|
begin |
378 |
|
Result := GetProcAddress(FFBLibrary.IBLibrary, ProcName); |
384 |
|
begin |
385 |
|
isc_sqlcode := GetProcAddr('isc_sqlcode'); {do not localize} |
386 |
|
isc_sql_interprete := GetProcAddr('isc_sql_interprete'); {do not localize} |
380 |
– |
isc_interprete := GetProcAddr('isc_interprete'); {do not localize} |
387 |
|
isc_event_counts := GetProcAddr('isc_event_counts'); {do not localize} |
388 |
|
isc_event_block := GetProcAddr('isc_event_block'); {do not localize} |
389 |
|
isc_free := GetProcAddr('isc_free'); {do not localize} |
414 |
|
var local_buffer: array[0..IBHugeLocalBufferLength - 1] of AnsiChar; |
415 |
|
IBDataBaseErrorMessages: TIBDataBaseErrorMessages; |
416 |
|
sqlcode: Long; |
411 |
– |
psb: PStatusVector; |
417 |
|
begin |
418 |
|
Result := ''; |
419 |
|
IBDataBaseErrorMessages := FIBDataBaseErrorMessages; |
425 |
|
if (ShowSQLMessage in IBDataBaseErrorMessages) then |
426 |
|
begin |
427 |
|
with FOwner do |
428 |
< |
isc_sql_interprete(sqlcode, local_buffer, IBLocalBufferLength); |
428 |
> |
isc_sql_interprete(sqlcode, local_buffer, sizeof(local_buffer)); |
429 |
|
if (ShowSQLCode in FIBDataBaseErrorMessages) then |
430 |
|
Result := Result + CRLF; |
431 |
|
Result := Result + strpas(local_buffer); |
435 |
|
begin |
436 |
|
if (ShowSQLCode in IBDataBaseErrorMessages) or |
437 |
|
(ShowSQLMessage in IBDataBaseErrorMessages) then |
438 |
< |
Result := Result + CRLF; |
439 |
< |
psb := StatusVector; |
435 |
< |
with FOwner do |
436 |
< |
while (isc_interprete(@local_buffer, @psb) > 0) do |
437 |
< |
begin |
438 |
< |
if (Result <> '') and (Result[Length(Result)] <> LF) then |
439 |
< |
Result := Result + CRLF; |
440 |
< |
Result := Result + strpas(local_buffer); |
441 |
< |
end; |
438 |
> |
Result := Result + LineEnding; |
439 |
> |
Result := Result + LineEnding + FOwner.FormatStatus(self); |
440 |
|
end; |
441 |
|
if (Result <> '') and (Result[Length(Result)] = '.') then |
442 |
|
Delete(Result, Length(Result), 1); |