--- ibx/branches/journaling/testsuite/testApp/TestApplication.pas 2021/12/07 13:27:39 362 +++ ibx/branches/journaling/testsuite/testApp/TestApplication.pas 2021/12/07 13:30:05 363 @@ -81,6 +81,7 @@ type FCursorSeq: integer; function GetFirebirdAPI: IFirebirdAPI; procedure SetOwner(AOwner: TTestApplication); + procedure HandleOnJnlEntry(JnlEntry: TJnlEntry); protected FHexStrings: boolean; FShowBinaryBlob: boolean; @@ -96,12 +97,16 @@ type procedure PrintSPB(SPB: ISPB); procedure PrintMetaData(meta: IMetaData); procedure ParamInfo(SQLParams: ISQLParams); + procedure PrintJournalFile(aFileName: AnsiString); + procedure PrintJournalTable(Attachment: IAttachment); function ReportResults(Statement: IStatement; ShowCursorName: boolean=false): IResultSet; procedure ReportResult(aValue: IResults); function StringToHex(octetString: string; MaxLineLength: integer=0): string; + procedure WriteAttachmentInfo(Attachment: IAttachment); procedure WriteArray(ar: IArray); procedure WriteAffectedRows(Statement: IStatement); procedure WriteDBInfo(DBInfo: IDBInformation); + procedure WriteTRInfo(TrInfo: ITrInformation); procedure WriteBytes(Bytes: TByteArray); procedure WriteOperationCounts(Category: AnsiString; ops: TDBOperationCounts); procedure WritePerfStats(stats: TPerfCounters); @@ -381,6 +386,43 @@ begin FOwner := AOwner; end; +procedure TTestBase.HandleOnJnlEntry(JnlEntry: TJnlEntry); +begin + with JnlEntry do + begin + {$IFNDEF FPC} + writeln(OutFile,'Journal Entry = ',ord(JnlEntryType),'(', TJournalProcessor.JnlEntryText(JnlEntryType),')'); + {$ELSE} + writeln(OutFile,'Journal Entry = ',JnlEntryType,'(', TJournalProcessor.JnlEntryText(JnlEntryType),')'); + {$ENDIF} + writeln(OutFIle,'Timestamp = ',FBFormatDateTime('yyyy/mm/dd hh:nn:ss.zzzz',Timestamp)); + writeln(OutFile,'Session ID = ',SessionID); + writeln(OutFile,'Transaction ID = ',TransactionID); + case JnlEntry.JnlEntryType of + jeTransStart: + begin + writeln(OutFile,'Transaction Name = "',TransactionName,'"'); + PrintTPB(TPB); + {$IFNDEF FPC} + writeln(OutFile,'Default Completion = ',ord(DefaultCompletion)); + {$ELSE} + writeln(OutFile,'Default Completion = ',DefaultCompletion); + {$ENDIF} + end; + + jeQuery: + begin + writeln(OutFile,'Query = ',QueryText); + end; + + jeTransCommitRet, + jeTransRollbackRet: + writeln(Outfile,'Old TransactionID = ',OldTransactionID); + end; + end; + writeln(OutFile); +end; + procedure TTestBase.DumpBCD(bcd: tBCD); var i,l: integer; begin @@ -560,6 +602,29 @@ begin end; end; +procedure TTestBase.PrintJournalFile(aFileName: AnsiString); +begin + writeln(OutFile,'Journal Entries'); + with TJournalProcessor.Create do + try + Execute(aFileName,FirebirdAPI,HandleOnJnlEntry); + finally + Free + end; +end; + +procedure TTestBase.PrintJournalTable(Attachment: IAttachment); +var Results: IResultSet; +begin + writeln(OutFile,'Journal Table'); + Results := Attachment.OpenCursorAtStart('Select * From IBX$JOURNALS'); + while not Results.IsEof do + begin + ReportResult(Results); + Results.Fetchnext; + end; +end; + function TTestBase.ReportResults(Statement: IStatement; ShowCursorName: boolean): IResultSet; begin Result := Statement.OpenCursor; @@ -617,6 +682,19 @@ begin end; end; +procedure TTestBase.WriteAttachmentInfo(Attachment: IAttachment); +begin + writeln(outfile,'DB Connect String = ',Attachment.GetConnectString); + writeln(outfile,'DB Charset ID = ',Attachment.GetDefaultCharSetID); + writeln(outfile,'DB SQL Dialect = ',Attachment.GetSQLDialect); + writeln(outfile,'DB Remote Protocol = ', Attachment.GetRemoteProtocol); + writeln(outfile,'DB ODS Major Version = ',Attachment.GetODSMajorVersion); + writeln(outfile,'DB ODS Minor Version = ',Attachment.GetODSMinorVersion); + writeln(outfile,'User Authentication Method = ',Attachment.GetAuthenticationMethod); + writeln(outfile,'Firebird Library Path = ',Attachment.getFirebirdAPI.GetFBLibrary.GetLibraryFilePath); + writeln(outfile,'DB Client Implementation Version = ',Attachment.getFirebirdAPI.GetImplementationVersion); +end; + procedure TTestBase.WriteArray(ar: IArray); var Bounds: TArrayBounds; i,j: integer; @@ -770,6 +848,67 @@ begin end; end; +procedure TTestBase.WriteTRInfo(TrInfo: ITrInformation); +var IsolationType, RecVersion: byte; + i: integer; + access: integer; +begin + for i := 0 to TrInfo.GetCount - 1 do + with TrInfo[i] do + case getItemType of + isc_info_tra_id: + writeln(OutFile,'Transaction ID = ',getAsInteger); + isc_info_tra_oldest_interesting: + writeln(OutFile,'Oldest Interesting = ',getAsInteger); + isc_info_tra_oldest_active: + writeln(OutFile,'Oldest Action = ',getAsInteger); + isc_info_tra_oldest_snapshot: + writeln(OutFile,'Oldest Snapshot = ',getAsInteger); + fb_info_tra_snapshot_number: + writeln(OutFile,'Oldest Snapshot Number = ',getAsInteger); + isc_info_tra_lock_timeout: + writeln(OutFile,'Lock Timeout = ',getAsInteger); + isc_info_tra_isolation: + begin + DecodeTraIsolation(IsolationType, RecVersion); + write(OutFile,'Isolation Type = '); + case IsolationType of + isc_info_tra_consistency: + write(OutFile,'isc_info_tra_consistency'); + isc_info_tra_concurrency: + write(OutFile,'isc_info_tra_concurrency'); + isc_info_tra_read_committed: + begin + write(OutFile,'isc_info_tra_read_committed, Options ='); + case RecVersion of + isc_info_tra_no_rec_version: + write(OutFile,'isc_info_tra_no_rec_version'); + isc_info_tra_rec_version: + write(OutFile,'isc_info_tra_rec_version'); + isc_info_tra_read_consistency: + write(OutFile,'isc_info_tra_read_consistency'); + end; + end; + end; + writeln(OutFile); + end; + isc_info_tra_access: + begin + write(OutFile,'Transaction Access = '); + access := getAsInteger; + case access of + isc_info_tra_readonly: + writeln(OutFile,'isc_info_tra_readonly'); + isc_info_tra_readwrite: + writeln(OutFile,'isc_info_tra_readwrite'); + end; + end; + fb_info_tra_dbpath: + writeln(OutFile,'Transaction Database Path = ',getAsString); + end; + +end; + procedure TTestBase.WriteBytes(Bytes: TByteArray); var i: integer; begin