/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #ifndef CONNECTIVITY_HSQLDB_ACCESSLOG_HXX #define CONNECTIVITY_HSQLDB_ACCESSLOG_HXX #ifdef HSQLDB_DBG #include #include #include #include namespace connectivity { namespace hsqldb { class LogFile { private: ::rtl::OUString m_sFileName; public: LogFile( JNIEnv* env, jstring streamName, const sal_Char* _pAsciiSuffix ); public: void writeString( const sal_Char* _pString, bool _bEndLine = true ); void create() { getLogFile(); } virtual void close(); protected: FILE*& getLogFile(); }; class OperationLogFile : public LogFile { public: OperationLogFile( JNIEnv* env, jstring streamName, const sal_Char* _pAsciiSuffix ) :LogFile( env, streamName, ( ::rtl::OString( _pAsciiSuffix ) += ".op" ).getStr() ) { } void logOperation( const sal_Char* _pOp ) { writeString( _pOp, true ); } void logOperation( const sal_Char* _pOp, jlong _nLongArg ) { ::rtl::OString sLine( _pOp ); sLine += "( "; sLine += ::rtl::OString::valueOf( _nLongArg ); sLine += " )"; writeString( sLine.getStr(), true ); } void logReturn( jlong _nRetVal ) { ::rtl::OString sLine( " -> " ); sLine += ::rtl::OString::valueOf( _nRetVal ); writeString( sLine.getStr(), true ); } void logReturn( jint _nRetVal ) { ::rtl::OString sLine( " -> " ); sLine += ::rtl::OString::valueOf( _nRetVal ); writeString( sLine.getStr(), true ); } virtual void close() { writeString( "-------------------------------", true ); writeString( "", true ); LogFile::close(); } }; class DataLogFile : public LogFile { public: DataLogFile( JNIEnv* env, jstring streamName, const sal_Char* _pAsciiSuffix ) :LogFile( env, streamName, _pAsciiSuffix ) { } void write( jint value ) { fputc( value, getLogFile() ); fflush( getLogFile() ); } void write( const sal_Int8* buffer, sal_Int32 bytesRead ) { fwrite( buffer, sizeof(sal_Int8), bytesRead, getLogFile() ); fflush( getLogFile() ); } sal_Int64 seek( sal_Int64 pos ) { FILE* pFile = getLogFile(); fseek( pFile, 0, SEEK_END ); if ( ftell( pFile ) < pos ) { sal_Int8 filler( 0 ); while ( ftell( pFile ) < pos ) fwrite( &filler, sizeof( sal_Int8 ), 1, pFile ); fflush( pFile ); } fseek( pFile, pos, SEEK_SET ); return ftell( pFile ); } sal_Int64 tell() { return ftell( getLogFile() ); } }; } } #endif #endif // CONNECTIVITY_HSQLDB_ACCESSLOG_HXX