ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/branches/udr/client/IB.pas
(Generate patch)

Comparing:
ibx/branches/journaling/fbintf/IB.pas (file contents), Revision 362 by tony, Tue Dec 7 13:27:39 2021 UTC vs.
ibx/branches/udr/client/IB.pas (file contents), Revision 379 by tony, Mon Jan 10 10:08:03 2022 UTC

# Line 134 | Line 134 | uses
134   const
135    {Interface version information}
136    FBIntf_Major = 1;
137 <  FBIntf_Minor = 3;
138 <  FBIntf_Release = 3;
139 <  FBIntf_Version = '1.3.3';
137 >  FBIntf_Minor = 4;
138 >  FBIntf_Release = 0;
139 >  FBIntf_Version = '1.4.0';
140  
141   const
142    {DPB, TPB and SPB Parameter Block Name Prefixes}
# Line 248 | Line 248 | type
248    ITransaction = interface;
249    IStatement = interface;
250  
251 +  {The IFBNumeric interface provides a managed type for Fixed Point integers
252 +   used to hold Firebird Numeric(m,n) types}
253 +
254 +  IFBNumeric = interface
255 +    ['{8bdccfe9-d552-446b-bd82-844ca264455d}']
256 +    function getRawValue: Int64;
257 +    function getScale: integer;
258 +    function clone(aNewScale: integer): IFBNumeric;
259 +    function getAsString: AnsiString;
260 +    function getAsDouble: double;
261 +    function getAsBCD: TBCD;
262 +    function getAsInt64: Int64; {scaled}
263 +    function getAsInteger: integer; {scaled - may be truncated}
264 +    function getAsSmallInt: SmallInt; {scaled - may be truncated}
265 +    function getAsCurrency: Currency;
266 +  end;
267 +
268    {The IParameterBlock interface provides the template for all parameter
269     block interfaces}
270  
# Line 500 | Line 517 | type
517      function GetDateTimeStrLength(DateTimeFormat: TIBDateTimeFormats): integer;
518      function GetStatement: IStatement;
519      function GetTransaction: ITransaction;
520 +    function GetAttachment: IAttachment;
521      property Name: AnsiString read GetName;
522      property Size: cardinal read GetSize;
523      property SQLType: cardinal read GetSQLType;
# Line 566 | Line 584 | type
584      function GetAsBlob(BPB: IBPB): IBlob; overload;
585      function GetAsArray: IArray;
586      function GetAsBCD: tBCD;
587 +    function GetAsNumeric: IFBNumeric;
588      property AsDate: TDateTime read GetAsDateTime;
589      property AsBoolean:boolean read GetAsBoolean;
590      property AsTime: TDateTime read GetAsDateTime;
# Line 584 | Line 603 | type
603      property AsBlob: IBlob read GetAsBlob;
604      property AsArray: IArray read GetAsArray;
605      property AsBCD: tBCD read GetAsBCD;
606 +    property AsNumeric: IFBNumeric read GetAsNumeric;
607      property IsNull: Boolean read GetIsNull;
608      property Value: Variant read GetAsVariant;
609    end;
# Line 599 | Line 619 | type
619     function getCount: integer;
620     function GetStatement: IStatement;
621     function GetTransaction: ITransaction;
622 +   function GetAttachment: IAttachment;
623     function ByName(Idx: AnsiString): ISQLData;
624     function getSQLData(index: integer): ISQLData;
625     procedure GetData(index: integer; var IsNull:boolean; var len: short; var data: PByte);
# Line 660 | Line 681 | type
681    ISQLParam = interface(IParamMetaData)
682      ['{b22b4578-6d41-4807-a9a9-d2ec8d1d5a14}']
683      function getColMetadata: IParamMetaData;
684 +    function GetStatement: IStatement;
685 +    function GetTransaction: ITransaction;
686 +    function GetAttachment: IAttachment;
687      function GetIndex: integer;
688      function getName: AnsiString;
689      function GetAsBoolean: boolean;
# Line 685 | Line 709 | type
709      function GetAsBlob: IBlob;
710      function GetAsArray: IArray;
711      function GetAsBCD: tBCD;
712 <    function GetStatement: IStatement;
689 <    function GetTransaction: ITransaction;
712 >    function GetAsNumeric: IFBNumeric;
713      procedure Clear;
714      function GetModified: boolean;
715      procedure SetAsBoolean(AValue: boolean);
# Line 715 | Line 738 | type
738      procedure SetAsQuad(aValue: TISC_QUAD);
739      procedure SetCharSetID(aValue: cardinal);
740      procedure SetAsBcd(aValue: tBCD);
741 +    procedure SetAsNumeric(Value: IFBNumeric);
742      property AsDate: TDateTime read GetAsDateTime write SetAsDate;
743      property AsBoolean:boolean read GetAsBoolean write SetAsBoolean;
744      property AsTime: TDateTime read GetAsDateTime write SetAsTime;
# Line 732 | Line 756 | type
756      property AsBlob: IBlob read GetAsBlob write SetAsBlob;
757      property AsArray: IArray read GetAsArray write SetAsArray;
758      property AsBCD: tBCD read GetAsBCD write SetAsBCD;
759 +    property AsNumeric: IFBNumeric read GetAsNumeric write SetAsNumeric;
760      property AsQuad: TISC_QUAD read GetAsQuad write SetAsQuad;
761      property Value: Variant read GetAsVariant write SetAsVariant;
762      property IsNull: Boolean read GetIsNull write SetIsNull;
# Line 752 | Line 777 | type
777      function ByName(Idx: AnsiString): ISQLParam ;
778      function GetModified: Boolean;
779      function GetHasCaseSensitiveParams: Boolean;
780 +    function GetStatement: IStatement;
781 +    function GetTransaction: ITransaction;
782 +    function GetAttachment: IAttachment;
783 +    procedure Clear;
784      property Modified: Boolean read GetModified;
785      property Params[index: integer]: ISQLParam read getSQLParam; default;
786      property Count: integer read getCount;
# Line 859 | Line 888 | type
888  
889    ITPBItem = interface(IParameterBlockItemWithTypeName)
890      ['{544c1f2b-7c12-4a87-a4a5-face7ea72671}']
862    function getParamTypeName: AnsiString;
891    end;
892  
893    ITPB = interface(IParameterBlockWithTypeNames<ITPBItem>)
894      ['{7369b0ff-defe-437b-81fe-19b211d42d25}']
895 +    function AsText: AnsiString;
896    end;
897  
898    {The ITransactionAction interface provides access to a Transaction once it
# Line 884 | Line 913 | type
913      function GetInTransaction: boolean;
914      function GetIsReadOnly: boolean;
915      function GetTransactionID: integer;
916 +    function GetJournalingActive(attachment: IAttachment): boolean;
917 +    function GetDefaultCompletion: TTransactionCompletion;
918      procedure PrepareForCommit; {Two phase commit - stage 1}
919      procedure Commit(Force: boolean=false);
920      procedure CommitRetaining;
# Line 894 | Line 925 | type
925      function GetAttachment(index: integer): IAttachment;
926      function GetTrInformation(Requests: array of byte): ITrInformation; overload;
927      function GetTrInformation(Request: byte): ITrInformation; overload;
928 +    function GetTransactionName: AnsiString;
929 +    procedure SetTransactionName(aValue: AnsiString);
930      property InTransaction: boolean read GetInTransaction;
931 +    property TransactionName: AnsiString read GetTransactionName write SetTransactionName;
932    end;
933  
934    { The IEvents Interface is used to handle events from a single database. The
# Line 1057 | Line 1091 | type
1091       ['{e676067b-1cf4-4eba-9256-9724f57e0d16}']
1092     end;
1093  
1094 +   {Journaling options. Default is [joReadWriteTransactions,joModifyQueries] }
1095 +
1096 +   TJournalOption = (joReadOnlyTransactions, joReadWriteTransactions,
1097 +                     joModifyQueries, joReadOnlyQueries,joNoServerTable);
1098 +
1099 +   TJournalOptions = set of TJournalOption;
1100 +
1101    {The IAttachment interface provides access to a Database Connection. It may be
1102     used to:
1103  
# Line 1094 | Line 1135 | type
1135      procedure Disconnect(Force: boolean=false);
1136      function IsConnected: boolean;
1137      procedure DropDatabase;
1138 <    function StartTransaction(TPB: array of byte; DefaultCompletion: TTransactionCompletion=taCommit): ITransaction; overload;
1139 <    function StartTransaction(TPB: ITPB; DefaultCompletion: TTransactionCompletion=taCommit): ITransaction; overload;
1138 >    function StartTransaction(TPB: array of byte;
1139 >                              DefaultCompletion: TTransactionCompletion=taCommit;
1140 >                              aName: AnsiString=''): ITransaction; overload;
1141 >    function StartTransaction(TPB: ITPB;
1142 >                              DefaultCompletion: TTransactionCompletion=taCommit;
1143 >                              aName: AnsiString=''): ITransaction; overload;
1144      procedure ExecImmediate(transaction: ITransaction; sql: AnsiString; SQLDialect: integer); overload;
1145      procedure ExecImmediate(TPB: array of byte; sql: AnsiString; SQLDialect: integer); overload;
1146      procedure ExecImmediate(transaction: ITransaction; sql: AnsiString); overload;
# Line 1166 | Line 1211 | type
1211  
1212      {Database Information}
1213      function GetSQLDialect: integer;
1214 +    function GetAttachmentID: integer;
1215      function GetBlobMetaData(Transaction: ITransaction; tableName, columnName: AnsiString): IBlobMetaData;
1216      function GetArrayMetaData(Transaction: ITransaction; tableName, columnName: AnsiString): IArrayMetaData;
1217      function GetDBInformation(Requests: array of byte): IDBInformation; overload;
# Line 1182 | Line 1228 | type
1228      function HasDecFloatSupport: boolean;
1229      function HasBatchMode: boolean;
1230      function HasScollableCursors: boolean;
1231 +    function HasTable(aTableName: AnsiString): boolean;  {case sensitive}
1232 +    function HasFunction(aFunctionName: AnsiString): boolean; {case sensitive}
1233 +    function HasProcedure(aProcName: AnsiString): boolean; {case sensitive}
1234  
1235      {Character Sets}
1236 +    function GetCharSetID: integer; {connection character set}
1237      function HasDefaultCharSet: boolean;
1238      function GetDefaultCharSetID: integer;
1239      function GetCharsetName(CharSetID: integer): AnsiString;
# Line 1197 | Line 1247 | type
1247      {Time Zone Database}
1248      function GetTimeZoneServices: ITimeZoneServices;
1249      function HasTimeZoneSupport: boolean;
1250 +
1251 +    {Client side Journaling}
1252 +    function JournalingActive: boolean;
1253 +    function GetJournalOptions: TJournalOptions;
1254 +    function StartJournaling(aJournalLogFile: AnsiString): integer; overload;
1255 +    function StartJournaling(aJournalLogFile: AnsiString; Options: TJournalOptions): integer; overload;
1256 +    function StartJournaling(S: TStream; Options: TJournalOptions): integer; overload;
1257 +    procedure StopJournaling(RetainJournal: boolean);
1258   end;
1259  
1260    TProtocolAll = (TCP, SPX, NamedPipe, Local, inet, inet4, inet6, wnet, xnet, unknownProtocol);
# Line 1365 | Line 1423 | type
1423      {Start Transaction against multiple databases}
1424      function AllocateTPB: ITPB;
1425      function StartTransaction(Attachments: array of IAttachment;
1426 <             TPB: array of byte; DefaultCompletion: TTransactionCompletion=taCommit): ITransaction; overload;
1426 >             TPB: array of byte; DefaultCompletion: TTransactionCompletion=taCommit;
1427 >             aName: AnsiString=''): ITransaction; overload;
1428      function StartTransaction(Attachments: array of IAttachment;
1429 <             TPB: ITPB; DefaultCompletion: TTransactionCompletion=taCommit): ITransaction; overload;
1429 >             TPB: ITPB; DefaultCompletion: TTransactionCompletion=taCommit;
1430 >             aName: AnsiString=''): ITransaction; overload;
1431  
1432      {Service Manager}
1433      function HasServiceAPI: boolean;
# Line 1416 | Line 1476 | type
1476     EIBInterBaseError = class(EIBError)
1477     private
1478       FIBErrorCode: Long;
1479 +     FStatus: IStatus;
1480     public
1481 <     constructor Create(Status: IStatus); overload;
1481 >     constructor Create(aStatus: IStatus); overload;
1482       constructor Create(ASQLCode: Long; AIBErrorCode: Long; Msg: AnsiString); overload;
1483       property IBErrorCode: Long read FIBErrorCode;
1484 +     property Status: IStatus read FStatus;
1485     end;
1486  
1487     {IB Client Exceptions}
# Line 1448 | Line 1510 | procedure CheckIBLoaded;
1510  
1511   function LoadFBLibrary(aLibPathName: string): IFirebirdLibrary;
1512  
1513 + {$if not declared(Null)} {Needed for Delphi}
1514 + function Null: Variant;       // Null standard constant
1515 + {$define NEEDNULLFUNCTION}
1516 + {$ifend}
1517  
1518   implementation
1519  
1520 < uses FBClientAPI
1520 > uses FBClientAPI {$if not declared(NULL)}, Variants {$ifend}
1521    {$IFDEF USELEGACYFIREBIRDAPI}, FB25ClientAPI {$ENDIF}
1522    {$IFDEF USEFIREBIRD3API}, FB30ClientAPI {$ENDIF};
1523  
# Line 1543 | Line 1609 | end;
1609  
1610   { EIBInterBaseError }
1611  
1612 < constructor EIBInterBaseError.Create(Status: IStatus);
1612 > constructor EIBInterBaseError.Create(aStatus: IStatus);
1613   begin
1614 <  inherited Create(Status.Getsqlcode,Status.GetMessage);
1615 <  FIBErrorCode := Status.GetIBErrorCode;
1614 >  inherited Create(aStatus.Getsqlcode,aStatus.GetMessage);
1615 >  FIBErrorCode := aStatus.GetIBErrorCode;
1616 >  FStatus := aStatus;
1617   end;
1618  
1619   constructor EIBInterBaseError.Create(ASQLCode: Long; AIBErrorCode: Long;
# Line 1556 | Line 1623 | begin
1623    FIBErrorCode := AIBErrorCode;
1624   end;
1625  
1626 + {$ifdef NEEDNULLFUNCTION}
1627 + function Null: Variant;       // Null standard constant
1628 +   begin
1629 +     VarClearProc(TVarData(Result));
1630 +     TVarData(Result).VType := varnull;
1631 +   end;
1632 + {$endif}
1633  
1634   initialization
1635    FDefaultFBLibrary := nil;

Comparing:
ibx/branches/journaling/fbintf/IB.pas (property svn:eol-style), Revision 362 by tony, Tue Dec 7 13:27:39 2021 UTC vs.
ibx/branches/udr/client/IB.pas (property svn:eol-style), Revision 379 by tony, Mon Jan 10 10:08:03 2022 UTC

# Line 0 | Line 1
1 + native

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines