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/trunk/fbintf/IB.pas (file contents), Revision 315 by tony, Thu Feb 25 11:56:36 2021 UTC vs.
ibx/branches/udr/client/IB.pas (file contents), Revision 391 by tony, Thu Jan 27 16:34:24 2022 UTC

# Line 134 | Line 134 | uses
134   const
135    {Interface version information}
136    FBIntf_Major = 1;
137 <  FBIntf_Minor = 2;
137 >  FBIntf_Minor = 4;
138    FBIntf_Release = 0;
139 <  FBIntf_Version = '1.2.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 AdjustScaleTo(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 263 | Line 280 | type
280  
281    IParameterBlockWithTypeNames<_IItem> = interface(IParameterBlock<_IItem>)
282      function AddByTypeName(ParamTypeName: AnsiString): _IItem;
283 <    function GetDPBParamTypeName(ParamType: byte): Ansistring;
283 >    function GetDPBParamTypeName(ParamType: byte): Ansistring; deprecated 'Use Get ParamTypeName';
284 >    function GetParamTypeName(ParamType: byte): Ansistring;
285    end;
286  
287    {IParameterBlockItem is not used on its own but instead provides a base type for
# Line 300 | Line 318 | type
318  
319     TIBDataBaseErrorMessages   = set of TIBDataBaseErrorMessage;
320  
321 +   TStatusCode = long;
322 +
323    IStatus = interface
324      ['{34167722-af38-4831-b08a-93162d58ede3}']
325 <    function GetIBErrorCode: Long;
326 <    function Getsqlcode: Long;
325 >    function InErrorState: boolean;
326 >    function GetIBErrorCode: TStatusCode;
327 >    function Getsqlcode: TStatusCode;
328      function GetMessage: AnsiString;
329      function CheckStatusVector(ErrorCodes: array of TFBStatusCode): Boolean;
330      function GetIBDataBaseErrorMessages: TIBDataBaseErrorMessages;
331 +    function Clone: IStatus;
332      procedure SetIBDataBaseErrorMessages(Value: TIBDataBaseErrorMessages);
333    end;
334  
# Line 497 | Line 519 | type
519      function GetDateTimeStrLength(DateTimeFormat: TIBDateTimeFormats): integer;
520      function GetStatement: IStatement;
521      function GetTransaction: ITransaction;
522 +    function GetAttachment: IAttachment;
523      property Name: AnsiString read GetName;
524      property Size: cardinal read GetSize;
525      property SQLType: cardinal read GetSQLType;
# Line 563 | Line 586 | type
586      function GetAsBlob(BPB: IBPB): IBlob; overload;
587      function GetAsArray: IArray;
588      function GetAsBCD: tBCD;
589 +    function GetAsNumeric: IFBNumeric;
590      property AsDate: TDateTime read GetAsDateTime;
591      property AsBoolean:boolean read GetAsBoolean;
592      property AsTime: TDateTime read GetAsDateTime;
# Line 581 | Line 605 | type
605      property AsBlob: IBlob read GetAsBlob;
606      property AsArray: IArray read GetAsArray;
607      property AsBCD: tBCD read GetAsBCD;
608 +    property AsNumeric: IFBNumeric read GetAsNumeric;
609      property IsNull: Boolean read GetIsNull;
610      property Value: Variant read GetAsVariant;
611    end;
# Line 596 | Line 621 | type
621     function getCount: integer;
622     function GetStatement: IStatement;
623     function GetTransaction: ITransaction;
624 +   function GetAttachment: IAttachment;
625 +   function FieldExists(Idx: AnsiString): boolean;
626     function ByName(Idx: AnsiString): ISQLData;
627     function getSQLData(index: integer): ISQLData;
628     procedure GetData(index: integer; var IsNull:boolean; var len: short; var data: PByte);
# Line 611 | Line 638 | type
638    }
639    IResultSet = interface(IResults)
640      ['{0ae4979b-7857-4e8c-8918-ec6f155b51a0}']
641 <    function FetchNext: boolean;
641 >    function FetchNext: boolean; {fetch next record}
642 >    function FetchPrior: boolean; {fetch previous record}
643 >    function FetchFirst:boolean; {fetch first record}
644 >    function FetchLast: boolean; {fetch last record}
645 >    function FetchAbsolute(position: Integer): boolean; {fetch record by its absolute position in result set}
646 >    function FetchRelative(offset: Integer): boolean; {fetch record by position relative to current}
647      function GetCursorName: AnsiString;
648 +    function IsBof: boolean;
649      function IsEof: boolean;
650      procedure Close;
651    end;
652  
653    {The ISQLParam interface is used to provide access to each parameter in a
654 <   parametised SQL Statement. It subclasses IColumnMetaData and this part of
622 <   the interface may be used to access information on the expected SQL Type, etc.
623 <
624 <   It also subclasses ISQLData and this part of the interface may be used to access
625 <   current values for each parameter.
626 <
627 <   Otherwise, the interface comprises the Setter Methods and properties used to
654 >   parametised SQL Statement. The interface comprises the Setter Methods and properties used to
655     set the value of each parameter.
656  
657     Automatic conversion is provided to and from strings. That is GetAsString and
658     SetAsString are safe to use for sql types other than boolean - provided automatic
659     conversion is possible.
660 +
661 +   ISQLParam is subclassed from the IParamMetaData interface. This interface provides
662 +   access to the parameter metadata. This metadata is mutable and can change after
663 +   a parameter is set to a given value. This is acceptable as long as the parameter
664 +   metadata is type compatible with the underlying column metadata and hence the
665 +   parameter value can be converted by Firebird into a value acceptable by the
666 +   underlying column. The column metadata, which is unmutable, can be obtained
667 +   by the ISQLParam.getColMetadata interface. When a statement is prepared, the
668 +   parameter metadata is always initialised to the column metadata.
669    }
670  
671 <  ISQLParam = interface
672 <    ['{b22b4578-6d41-4807-a9a9-d2ec8d1d5a14}']
637 <    function GetIndex: integer;
671 >  IParamMetaData = interface
672 >  ['{4e148c4e-2d48-4991-a263-f66eca05c6aa}']
673      function GetSQLType: cardinal;
674      function GetSQLTypeName: AnsiString;
675      function getSubtype: integer;
641    function getName: AnsiString;
676      function getScale: integer;
677      function getCharSetID: cardinal;
678      function getCodePage: TSystemCodePage;
679      function getIsNullable: boolean;
680      function GetSize: cardinal;
681 +    property SQLType: cardinal read GetSQLType;
682 +  end;
683 +
684 +  ISQLParam = interface(IParamMetaData)
685 +    ['{b22b4578-6d41-4807-a9a9-d2ec8d1d5a14}']
686 +    function getColMetadata: IParamMetaData;
687 +    function GetStatement: IStatement;
688 +    function GetTransaction: ITransaction;
689 +    function GetAttachment: IAttachment;
690 +    function GetIndex: integer;
691 +    function getName: AnsiString;
692      function GetAsBoolean: boolean;
693      function GetAsCurrency: Currency;
694      function GetAsInt64: Int64;
# Line 667 | Line 712 | type
712      function GetAsBlob: IBlob;
713      function GetAsArray: IArray;
714      function GetAsBCD: tBCD;
715 <    function GetStatement: IStatement;
671 <    function GetTransaction: ITransaction;
715 >    function GetAsNumeric: IFBNumeric;
716      procedure Clear;
717      function GetModified: boolean;
718      procedure SetAsBoolean(AValue: boolean);
# Line 697 | Line 741 | type
741      procedure SetAsQuad(aValue: TISC_QUAD);
742      procedure SetCharSetID(aValue: cardinal);
743      procedure SetAsBcd(aValue: tBCD);
744 +    procedure SetAsNumeric(Value: IFBNumeric);
745      property AsDate: TDateTime read GetAsDateTime write SetAsDate;
746      property AsBoolean:boolean read GetAsBoolean write SetAsBoolean;
747      property AsTime: TDateTime read GetAsDateTime write SetAsTime;
# Line 714 | Line 759 | type
759      property AsBlob: IBlob read GetAsBlob write SetAsBlob;
760      property AsArray: IArray read GetAsArray write SetAsArray;
761      property AsBCD: tBCD read GetAsBCD write SetAsBCD;
762 +    property AsNumeric: IFBNumeric read GetAsNumeric write SetAsNumeric;
763      property AsQuad: TISC_QUAD read GetAsQuad write SetAsQuad;
764      property Value: Variant read GetAsVariant write SetAsVariant;
765      property IsNull: Boolean read GetIsNull write SetIsNull;
766      property IsNullable: Boolean read GetIsNullable;
767      property Modified: Boolean read getModified;
768      property Name: AnsiString read GetName;
723    property SQLType: cardinal read GetSQLType;
769    end;
770  
771     {
# Line 728 | Line 773 | type
773     for the input to an SQL Statement
774    }
775  
776 +  { ISQLParams }
777 +
778    ISQLParams = interface
779      ['{c6d95ac7-b2b7-461b-b890-afef0acbb077}']
780      function getCount: integer;
781      function getSQLParam(index: integer): ISQLParam;
782 +    function ParamExists(Idx: AnsiString): boolean;
783      function ByName(Idx: AnsiString): ISQLParam ;
784      function GetModified: Boolean;
785      function GetHasCaseSensitiveParams: Boolean;
786 +    function GetStatement: IStatement;
787 +    function GetTransaction: ITransaction;
788 +    function GetAttachment: IAttachment;
789 +    procedure Clear;
790      property Modified: Boolean read GetModified;
791      property Params[index: integer]: ISQLParam read getSQLParam; default;
792      property Count: integer read getCount;
# Line 747 | Line 799 | type
799  
800    TPerfCounters = array[TPerfStats] of Int64;
801  
802 +  {Batch Query Execution Support}
803 +
804 +  TBatchCompletionState = (bcExecuteFailed, bcSuccessNoInfo, bcNoMoreErrors);
805 +
806 +  IBatchCompletion = interface
807 +  ['{9bc3d49d-16d9-4606-94e5-ee987103ad92}']
808 +    function getTotalProcessed: cardinal;
809 +    function getState(updateNo: cardinal): TBatchCompletionState;
810 +    function getStatusMessage(updateNo: cardinal): AnsiString;
811 +    function getUpdated: integer;
812 +    function getErrorStatus(var RowNo: integer; var status: IStatus): boolean;
813 +    end;
814 +
815    {The IStatement interface provides access to an SQL Statement once it has been
816     initially prepared. The interface is returned from the IAttachment interface.
817     }
818  
819 +  TStatementFlag = (stHasCursor,stRepeatExecute,stScrollable);
820 +  TStatementFlags = set of TStatementFlag;
821 +
822    IStatement = interface
823      ['{a260576d-a07d-4a66-b02d-1b72543fd7cf}']
824      function GetMetaData: IMetaData;  {Output Metadata}
# Line 758 | Line 826 | type
826      function GetPlan: AnsiString;
827      function GetRowsAffected(var SelectCount, InsertCount, UpdateCount, DeleteCount: integer): boolean;
828      function GetSQLStatementType: TIBSQLStatementTypes;
829 +    function GetSQLStatementTypeName: AnsiString;
830      function GetSQLText: AnsiString;
831      function GetProcessedSQLText: AnsiString;
832      function GetSQLDialect: integer;
833 +    function GetFlags: TStatementFlags;
834      function IsPrepared: boolean;
835 <    procedure Prepare(aTransaction: ITransaction=nil);
835 >    function HasBatchMode: boolean;
836 >    function IsInBatchMode: boolean;
837 >    procedure Prepare(aTransaction: ITransaction=nil); overload;
838 >    procedure Prepare(CursorName: AnsiString; aTransaction: ITransaction=nil); overload;
839      function Execute(aTransaction: ITransaction=nil): IResults;
840 <    function OpenCursor(aTransaction: ITransaction=nil): IResultSet;
840 >    function OpenCursor(aTransaction: ITransaction=nil): IResultSet; overload;
841 >    function OpenCursor(Scrollable: boolean; aTransaction: ITransaction=nil): IResultSet; overload;
842      function GetAttachment: IAttachment;
843      function GetTransaction: ITransaction;
844      procedure SetRetainInterfaces(aValue: boolean);
845      procedure EnableStatistics(aValue: boolean);
846      function GetPerfStatistics(var stats: TPerfCounters): boolean;
847 +    {IBatch interface support}
848 +    procedure AddToBatch;
849 +    function ExecuteBatch(aTransaction: ITransaction=nil): IBatchCompletion;
850 +    procedure CancelBatch;
851 +    function GetBatchCompletion: IBatchCompletion;
852 +    function GetBatchRowLimit: integer;
853 +    procedure SetBatchRowLimit(aLimit: integer);
854 +    {Stale Reference Check}
855 +    procedure SetStaleReferenceChecks(Enable:boolean); {default true}
856 +    function GetStaleReferenceChecks: boolean;
857 +
858      property MetaData: IMetaData read GetMetaData;
859      property SQLParams: ISQLParams read GetSQLParams;
860      property SQLStatementType: TIBSQLStatementTypes read GetSQLStatementType;
861    end;
862  
863 +  ITrInfoItem = interface
864 +    ['{41455e1a-f84e-4e26-aff0-1a78e8b69cfe}']
865 +    function getItemType: byte;
866 +    function getSize: integer;
867 +    function getAsString: AnsiString;
868 +    function getAsInteger: int64;
869 +    procedure DecodeTraIsolation(var IsolationType, RecVersion: byte);
870 +  end;
871 +
872 +  { ITrInformation }
873 +
874 +  ITrInformation = interface
875 +    ['{e6ea4a52-c1a1-44ba-9609-c8bcc7cba7b2}']
876 +    function GetCount: integer;
877 +    function GetItem(index: integer): ITrInfoItem;
878 +    function Find(ItemType: byte): ITrInfoItem;
879 +    procedure PrintBuf; {can be used to print buffer in hex for debugging}
880 +    property Count: integer read GetCount;
881 +    property Items[index: integer]: ITrInfoItem read getItem; default;
882 +  end;
883 +
884    {Transaction Parameter Block: (TPB)
885  
886     The TPB provides the parameters used when starting a transaction. It is allocated
# Line 788 | Line 894 | type
894  
895    ITPBItem = interface(IParameterBlockItemWithTypeName)
896      ['{544c1f2b-7c12-4a87-a4a5-face7ea72671}']
791    function getParamTypeName: AnsiString;
897    end;
898  
899    ITPB = interface(IParameterBlockWithTypeNames<ITPBItem>)
900      ['{7369b0ff-defe-437b-81fe-19b211d42d25}']
901 +    function AsText: AnsiString;
902    end;
903  
904    {The ITransactionAction interface provides access to a Transaction once it
# Line 805 | Line 911 | type
911  
912    TTransactionAction  = (TARollback, TACommit, TACommitRetaining, TARollbackRetaining);
913    TTransactionCompletion = TARollback.. TACommit;
914 +  TTrCompletionState = (trCommitted, trRolledback, trCommitFailed, trRollbackFailed);
915 +
916  
917    ITransaction = interface
918      ['{30928d0e-a9d7-4c61-b7cf-14f4f38abe2a}']
919      function getTPB: ITPB;
920      procedure Start(DefaultCompletion: TTransactionCompletion=taCommit);
921      function GetInTransaction: boolean;
922 +    function GetIsReadOnly: boolean;
923 +    function GetTransactionID: integer;
924 +    function GetJournalingActive(attachment: IAttachment): boolean;
925 +    function GetDefaultCompletion: TTransactionCompletion;
926      procedure PrepareForCommit; {Two phase commit - stage 1}
927 <    procedure Commit(Force: boolean=false);
927 >    function Commit(Force: boolean=false): TTrCompletionState;
928      procedure CommitRetaining;
929      function HasActivity: boolean;
930 <    procedure Rollback(Force: boolean=false);
930 >    function Rollback(Force: boolean=false): TTrCompletionState;
931      procedure RollbackRetaining;
932      function GetAttachmentCount: integer;
933      function GetAttachment(index: integer): IAttachment;
934 +    function GetTrInformation(Requests: array of byte): ITrInformation; overload;
935 +    function GetTrInformation(Request: byte): ITrInformation; overload;
936 +    function GetTransactionName: AnsiString;
937 +    procedure SetTransactionName(aValue: AnsiString);
938      property InTransaction: boolean read GetInTransaction;
939 +    property TransactionName: AnsiString read GetTransactionName write SetTransactionName;
940    end;
941  
942    { The IEvents Interface is used to handle events from a single database. The
# Line 849 | Line 966 | type
966      ['{6a0be233-ed08-4524-889c-2e45d0c20e5f}']
967      procedure GetEvents(EventNames: TStrings);
968      procedure SetEvents(EventNames: TStrings); overload;
969 <    procedure SetEvents(EventName: AnsiString); overload;
969 >    procedure SetEvents(EventName: string); overload;
970      procedure Cancel;
971      function ExtractEventCounts: TEventCounts;
972      procedure WaitForEvent;
# Line 919 | Line 1036 | type
1036      function getSize: integer;
1037      procedure getRawBytes(var Buffer);
1038      function getAsString: AnsiString;
1039 <    function getAsInteger: integer;
1039 >    function getAsInteger: int64;
1040      procedure DecodeIDCluster(var ConnectionType: integer; var DBFileName, DBSiteName: AnsiString);
1041      function getAsBytes: TByteArray;
1042      function getAsDateTime: TDateTime;
# Line 931 | Line 1048 | type
1048      function GetCount: integer;
1049      function GetItem(index: integer): IDBInfoItem;
1050      function Find(ItemType: byte): IDBInfoItem;
1051 <    property AsInteger: integer read getAsInteger;
1051 >    property AsInteger: int64 read getAsInteger;
1052      property AsString: AnsiString read GetAsString;
1053      property Count: integer read GetCount;
1054      property Items[index: integer]: IDBInfoItem read getItem; default;
# Line 982 | Line 1099 | type
1099       ['{e676067b-1cf4-4eba-9256-9724f57e0d16}']
1100     end;
1101  
1102 +   {Journaling options. Default is [joReadWriteTransactions,joModifyQueries] }
1103 +
1104 +   TJournalOption = (joReadOnlyTransactions, joReadWriteTransactions,
1105 +                     joModifyQueries, joReadOnlyQueries,joNoServerTable);
1106 +
1107 +   TJournalOptions = set of TJournalOption;
1108 +
1109    {The IAttachment interface provides access to a Database Connection. It may be
1110     used to:
1111  
# Line 1019 | Line 1143 | type
1143      procedure Disconnect(Force: boolean=false);
1144      function IsConnected: boolean;
1145      procedure DropDatabase;
1146 <    function StartTransaction(TPB: array of byte; DefaultCompletion: TTransactionCompletion=taCommit): ITransaction; overload;
1147 <    function StartTransaction(TPB: ITPB; DefaultCompletion: TTransactionCompletion=taCommit): ITransaction; overload;
1146 >    function StartTransaction(TPB: array of byte;
1147 >                              DefaultCompletion: TTransactionCompletion=taCommit;
1148 >                              aName: AnsiString=''): ITransaction; overload;
1149 >    function StartTransaction(TPB: ITPB;
1150 >                              DefaultCompletion: TTransactionCompletion=taCommit;
1151 >                              aName: AnsiString=''): ITransaction; overload;
1152      procedure ExecImmediate(transaction: ITransaction; sql: AnsiString; SQLDialect: integer); overload;
1153      procedure ExecImmediate(TPB: array of byte; sql: AnsiString; SQLDialect: integer); overload;
1154      procedure ExecImmediate(transaction: ITransaction; sql: AnsiString); overload;
# Line 1029 | Line 1157 | type
1157      function ExecuteSQL(transaction: ITransaction; sql: AnsiString; SQLDialect: integer; params: array of const): IResults; overload;
1158      function ExecuteSQL(TPB: array of byte; sql: AnsiString; params: array of const): IResults; overload;
1159      function ExecuteSQL(transaction: ITransaction; sql: AnsiString; params: array of const): IResults; overload;
1032    function OpenCursor(transaction: ITransaction; sql: AnsiString; aSQLDialect: integer): IResultSet; overload;
1160      function OpenCursor(transaction: ITransaction; sql: AnsiString; aSQLDialect: integer;
1161 +                             Scrollable: boolean=false): IResultSet; overload;
1162 +    function OpenCursor(transaction: ITransaction; sql: AnsiString; aSQLDialect: integer;
1163 +                             params: array of const): IResultSet; overload;
1164 +    function OpenCursor(transaction: ITransaction; sql: AnsiString; Scrollable: boolean=false): IResultSet; overload;
1165 +    function OpenCursor(transaction: ITransaction; sql: AnsiString; Scrollable: boolean;
1166                               params: array of const): IResultSet; overload;
1035    function OpenCursor(transaction: ITransaction; sql: AnsiString): IResultSet; overload;
1167      function OpenCursor(transaction: ITransaction; sql: AnsiString;
1168                               params: array of const): IResultSet; overload;
1169 <    function OpenCursorAtStart(transaction: ITransaction; sql: AnsiString; aSQLDialect: integer): IResultSet; overload;
1169 >    function OpenCursor(transaction: ITransaction; sql: AnsiString; aSQLDialect: integer; Scrollable: boolean;
1170 >                             params: array of const): IResultSet; overload;
1171 >    function OpenCursorAtStart(transaction: ITransaction; sql: AnsiString; aSQLDialect: integer;
1172 >                             Scrollable: boolean=false): IResultSet; overload;
1173      function OpenCursorAtStart(transaction: ITransaction; sql: AnsiString; aSQLDialect: integer;
1174                               params: array of const): IResultSet; overload;
1175 <    function OpenCursorAtStart(transaction: ITransaction; sql: AnsiString): IResultSet; overload;
1175 >    function OpenCursorAtStart(transaction: ITransaction; sql: AnsiString; aSQLDialect: integer; Scrollable: boolean;
1176 >                             params: array of const): IResultSet; overload;
1177 >    function OpenCursorAtStart(transaction: ITransaction; sql: AnsiString; Scrollable: boolean=false): IResultSet; overload;
1178      function OpenCursorAtStart(transaction: ITransaction; sql: AnsiString;
1179                               params: array of const): IResultSet; overload;
1180 <    function OpenCursorAtStart(sql: AnsiString): IResultSet; overload;
1180 >    function OpenCursorAtStart(transaction: ITransaction; sql: AnsiString; Scrollable: boolean;
1181 >                             params: array of const): IResultSet; overload;
1182 >    function OpenCursorAtStart(sql: AnsiString; Scrollable: boolean=false): IResultSet; overload;
1183 >    function OpenCursorAtStart(sql: AnsiString; Scrollable: boolean;
1184 >                             params: array of const): IResultSet; overload;
1185      function OpenCursorAtStart(sql: AnsiString;
1186                               params: array of const): IResultSet; overload;
1187 <    function Prepare(transaction: ITransaction; sql: AnsiString; aSQLDialect: integer): IStatement; overload;
1188 <    function Prepare(transaction: ITransaction; sql: AnsiString): IStatement; overload;
1187 >    function Prepare(transaction: ITransaction; sql: AnsiString; aSQLDialect: integer; CursorName: AnsiString=''): IStatement; overload;
1188 >    function Prepare(transaction: ITransaction; sql: AnsiString; CursorName: AnsiString=''): IStatement; overload;
1189      function PrepareWithNamedParameters(transaction: ITransaction; sql: AnsiString;
1190                         aSQLDialect: integer; GenerateParamNames: boolean=false;
1191 <                       CaseSensitiveParams: boolean = false): IStatement; overload;
1191 >                       CaseSensitiveParams: boolean = false; CursorName: AnsiString=''): IStatement; overload;
1192      function PrepareWithNamedParameters(transaction: ITransaction; sql: AnsiString;
1193                         GenerateParamNames: boolean=false;
1194 <                       CaseSensitiveParams: boolean = false): IStatement; overload;
1194 >                       CaseSensitiveParams: boolean = false; CursorName: AnsiString=''): IStatement; overload;
1195  
1196      {Events}
1197      function GetEventHandler(Events: TStrings): IEvents; overload;
# Line 1064 | Line 1204 | type
1204      function CreateBlob(transaction: ITransaction; SubType: integer; CharSetID: cardinal=0; BPB: IBPB=nil): IBlob; overload;
1205      function OpenBlob(transaction: ITransaction; RelationName, ColumnName: AnsiString; BlobID: TISC_QUAD; BPB: IBPB=nil): IBlob; overload;
1206      function OpenBlob(transaction: ITransaction; BlobMetaData: IBlobMetaData; BlobID: TISC_QUAD; BPB: IBPB=nil): IBlob;  overload;
1207 +    function GetInlineBlobLimit: integer;
1208 +    procedure SetInlineBlobLimit(limit: integer);
1209  
1210      {Array - may use to open existing arrays. However, ISQLData.AsArray is preferred}
1211  
# Line 1077 | Line 1219 | type
1219  
1220      {Database Information}
1221      function GetSQLDialect: integer;
1222 +    function GetAttachmentID: integer;
1223      function GetBlobMetaData(Transaction: ITransaction; tableName, columnName: AnsiString): IBlobMetaData;
1224      function GetArrayMetaData(Transaction: ITransaction; tableName, columnName: AnsiString): IArrayMetaData;
1225      function GetDBInformation(Requests: array of byte): IDBInformation; overload;
# Line 1091 | Line 1234 | type
1234      procedure getFBVersion(version: TStrings);
1235      function HasActivity: boolean;
1236      function HasDecFloatSupport: boolean;
1237 +    function HasBatchMode: boolean;
1238 +    function HasScollableCursors: boolean;
1239 +    function HasTable(aTableName: AnsiString): boolean;  {case sensitive}
1240 +    function HasFunction(aFunctionName: AnsiString): boolean; {case sensitive}
1241 +    function HasProcedure(aProcName: AnsiString): boolean; {case sensitive}
1242  
1243      {Character Sets}
1244 +    function GetCharSetID: integer; {connection character set}
1245      function HasDefaultCharSet: boolean;
1246      function GetDefaultCharSetID: integer;
1247      function GetCharsetName(CharSetID: integer): AnsiString;
# Line 1106 | Line 1255 | type
1255      {Time Zone Database}
1256      function GetTimeZoneServices: ITimeZoneServices;
1257      function HasTimeZoneSupport: boolean;
1258 +
1259 +    {Client side Journaling}
1260 +    function JournalingActive: boolean;
1261 +    function GetJournalOptions: TJournalOptions;
1262 +    function StartJournaling(aJournalLogFile: AnsiString): integer; overload;
1263 +    function StartJournaling(aJournalLogFile: AnsiString; Options: TJournalOptions): integer; overload;
1264 +    function StartJournaling(S: TStream; Options: TJournalOptions): integer; overload;
1265 +    procedure StopJournaling(RetainJournal: boolean);
1266   end;
1267  
1268    TProtocolAll = (TCP, SPX, NamedPipe, Local, inet, inet4, inet6, wnet, xnet, unknownProtocol);
# Line 1187 | Line 1344 | type
1344      function getSize: integer;
1345      procedure getRawBytes(var Buffer);
1346      function getAsString: AnsiString;
1347 <    function getAsInteger: integer;
1347 >    function getAsInteger: int64;
1348      function getAsByte: byte;
1349      function CopyTo(stream: TStream; count: integer): integer;
1350      property AsString: AnsiString read getAsString;
1351 <    property AsInteger: integer read getAsInteger;
1351 >    property AsInteger: int64 read getAsInteger;
1352      property AsByte: byte read getAsByte;
1353    end;
1354  
# Line 1274 | Line 1431 | type
1431      {Start Transaction against multiple databases}
1432      function AllocateTPB: ITPB;
1433      function StartTransaction(Attachments: array of IAttachment;
1434 <             TPB: array of byte; DefaultCompletion: TTransactionCompletion=taCommit): ITransaction; overload;
1434 >             TPB: array of byte; DefaultCompletion: TTransactionCompletion=taCommit;
1435 >             aName: AnsiString=''): ITransaction; overload;
1436      function StartTransaction(Attachments: array of IAttachment;
1437 <             TPB: ITPB; DefaultCompletion: TTransactionCompletion=taCommit): ITransaction; overload;
1437 >             TPB: ITPB; DefaultCompletion: TTransactionCompletion=taCommit;
1438 >             aName: AnsiString=''): ITransaction; overload;
1439  
1440      {Service Manager}
1441      function HasServiceAPI: boolean;
# Line 1325 | Line 1484 | type
1484     EIBInterBaseError = class(EIBError)
1485     private
1486       FIBErrorCode: Long;
1487 +     FStatus: IStatus;
1488     public
1489 <     constructor Create(Status: IStatus); overload;
1489 >     constructor Create(aStatus: IStatus); overload;
1490       constructor Create(ASQLCode: Long; AIBErrorCode: Long; Msg: AnsiString); overload;
1491       property IBErrorCode: Long read FIBErrorCode;
1492 +     property Status: IStatus read FStatus;
1493     end;
1494  
1495     {IB Client Exceptions}
1496     EIBClientError = class(EIBError);
1497  
1498 +   {Used to explicitly report a Batch Buffer overflow}
1499 +   EIBBatchBufferOverflow = class(EIBError);
1500 +
1501   {The Firebird API function is used to access the IFirebirdAPI interface.
1502  
1503   It will load the Firebird Client Library if this is not already loaded and
# Line 1354 | Line 1518 | procedure CheckIBLoaded;
1518  
1519   function LoadFBLibrary(aLibPathName: string): IFirebirdLibrary;
1520  
1521 + {$if not declared(Null)} {Needed for Delphi}
1522 + function Null: Variant;       // Null standard constant
1523 + {$define NEEDNULLFUNCTION}
1524 + {$ifend}
1525  
1526   implementation
1527  
1528 < uses FBClientAPI
1528 > uses FBClientAPI {$if not declared(NULL)}, Variants {$ifend}
1529    {$IFDEF USELEGACYFIREBIRDAPI}, FB25ClientAPI {$ENDIF}
1530    {$IFDEF USEFIREBIRD3API}, FB30ClientAPI {$ENDIF};
1531  
# Line 1449 | Line 1617 | end;
1617  
1618   { EIBInterBaseError }
1619  
1620 < constructor EIBInterBaseError.Create(Status: IStatus);
1620 > constructor EIBInterBaseError.Create(aStatus: IStatus);
1621   begin
1622 <  inherited Create(Status.Getsqlcode,Status.GetMessage);
1623 <  FIBErrorCode := Status.GetIBErrorCode;
1622 >  inherited Create(aStatus.Getsqlcode,aStatus.GetMessage);
1623 >  FIBErrorCode := aStatus.GetIBErrorCode;
1624 >  FStatus := aStatus.Clone;
1625   end;
1626  
1627   constructor EIBInterBaseError.Create(ASQLCode: Long; AIBErrorCode: Long;
# Line 1462 | Line 1631 | begin
1631    FIBErrorCode := AIBErrorCode;
1632   end;
1633  
1634 + {$ifdef NEEDNULLFUNCTION}
1635 + function Null: Variant;       // Null standard constant
1636 +   begin
1637 +     VarClearProc(TVarData(Result));
1638 +     TVarData(Result).VType := varnull;
1639 +   end;
1640 + {$endif}
1641  
1642   initialization
1643    FDefaultFBLibrary := nil;

Comparing:
ibx/trunk/fbintf/IB.pas (property svn:eol-style), Revision 315 by tony, Thu Feb 25 11:56:36 2021 UTC vs.
ibx/branches/udr/client/IB.pas (property svn:eol-style), Revision 391 by tony, Thu Jan 27 16:34:24 2022 UTC

# Line 0 | Line 1
1 + native

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines