summaryrefslogtreecommitdiffstats
path: root/connectivity/source/drivers/adabas/BDriver.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'connectivity/source/drivers/adabas/BDriver.cxx')
-rw-r--r--connectivity/source/drivers/adabas/BDriver.cxx1870
1 files changed, 0 insertions, 1870 deletions
diff --git a/connectivity/source/drivers/adabas/BDriver.cxx b/connectivity/source/drivers/adabas/BDriver.cxx
deleted file mode 100644
index 664ba0d749d2..000000000000
--- a/connectivity/source/drivers/adabas/BDriver.cxx
+++ /dev/null
@@ -1,1870 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_connectivity.hxx"
-
-#ifdef SYSTEM_ODBC_HEADERS
-#include <sqltypes.h>
-#else
-#include <odbc/sqltypes.h>
-#endif
-
-#include <unotools/tempfile.hxx>
-#include <sal/macros.h>
-#include "adabas/BDriver.hxx"
-#include "adabas/BConnection.hxx"
-#include "odbc/OFunctions.hxx"
-#include <com/sun/star/lang/DisposedException.hpp>
-#include "odbc/OTools.hxx"
-#include "connectivity/dbexception.hxx"
-#include "TConnection.hxx"
-#include "diagnose_ex.h"
-
-#include <osl/process.h>
-#include <unotools/ucbhelper.hxx>
-#include <unotools/ucbstreamhelper.hxx>
-#include <unotools/localfilehelper.hxx>
-#include "resource/adabas_res.hrc"
-#include "resource/sharedresources.hxx"
-
-
-#include <memory>
-#include <sys/stat.h>
-
-#if defined(UNX)
-const char sNewLine = '\012';
-#else
-const char sNewLine[] = "\015\012"; // \015\012 and not \n
-#endif
-#define ADABAS_DB_11 "11.02.00"
-#define ADABAS_KERNEL_11 "11.02"
-#define ADABAS_DB_12 "12.01.00"
-#define ADABAS_KERNEL_12 "12.01"
-#define CURRENT_DB_VERSION "13.01.00"
-#define CURRENT_KERNEL_VERSION "13.01"
-
-#define OPROCESS_ADABAS (osl_Process_HIDDEN | osl_Process_WAIT | osl_Process_SEARCHPATH)
-#define OPROCESS_ADABAS_DBG (osl_Process_WAIT | osl_Process_SEARCHPATH)
-
-
-using namespace connectivity;
-namespace connectivity
-{
- namespace adabas
- {
- // extern declaration of the function pointer
- extern T3SQLAllocHandle pODBC3SQLAllocHandle;
- extern T3SQLConnect pODBC3SQLConnect;
- extern T3SQLDriverConnect pODBC3SQLDriverConnect;
- extern T3SQLBrowseConnect pODBC3SQLBrowseConnect;
- extern T3SQLDataSources pODBC3SQLDataSources;
- extern T3SQLDrivers pODBC3SQLDrivers;
- extern T3SQLGetInfo pODBC3SQLGetInfo;
- extern T3SQLGetFunctions pODBC3SQLGetFunctions;
- extern T3SQLGetTypeInfo pODBC3SQLGetTypeInfo;
- extern T3SQLSetConnectAttr pODBC3SQLSetConnectAttr;
- extern T3SQLGetConnectAttr pODBC3SQLGetConnectAttr;
- extern T3SQLSetEnvAttr pODBC3SQLSetEnvAttr;
- extern T3SQLGetEnvAttr pODBC3SQLGetEnvAttr;
- extern T3SQLSetStmtAttr pODBC3SQLSetStmtAttr;
- extern T3SQLGetStmtAttr pODBC3SQLGetStmtAttr;
- extern T3SQLPrepare pODBC3SQLPrepare;
- extern T3SQLBindParameter pODBC3SQLBindParameter;
- extern T3SQLSetCursorName pODBC3SQLSetCursorName;
- extern T3SQLExecute pODBC3SQLExecute;
- extern T3SQLExecDirect pODBC3SQLExecDirect;
- extern T3SQLDescribeParam pODBC3SQLDescribeParam;
- extern T3SQLNumParams pODBC3SQLNumParams;
- extern T3SQLParamData pODBC3SQLParamData;
- extern T3SQLPutData pODBC3SQLPutData;
- extern T3SQLRowCount pODBC3SQLRowCount;
- extern T3SQLNumResultCols pODBC3SQLNumResultCols;
- extern T3SQLDescribeCol pODBC3SQLDescribeCol;
- extern T3SQLColAttribute pODBC3SQLColAttribute;
- extern T3SQLBindCol pODBC3SQLBindCol;
- extern T3SQLFetch pODBC3SQLFetch;
- extern T3SQLFetchScroll pODBC3SQLFetchScroll;
- extern T3SQLGetData pODBC3SQLGetData;
- extern T3SQLSetPos pODBC3SQLSetPos;
- extern T3SQLBulkOperations pODBC3SQLBulkOperations;
- extern T3SQLMoreResults pODBC3SQLMoreResults;
- extern T3SQLGetDiagRec pODBC3SQLGetDiagRec;
- extern T3SQLColumnPrivileges pODBC3SQLColumnPrivileges;
- extern T3SQLColumns pODBC3SQLColumns;
- extern T3SQLForeignKeys pODBC3SQLForeignKeys;
- extern T3SQLPrimaryKeys pODBC3SQLPrimaryKeys;
- extern T3SQLProcedureColumns pODBC3SQLProcedureColumns;
- extern T3SQLProcedures pODBC3SQLProcedures;
- extern T3SQLSpecialColumns pODBC3SQLSpecialColumns;
- extern T3SQLStatistics pODBC3SQLStatistics;
- extern T3SQLTablePrivileges pODBC3SQLTablePrivileges;
- extern T3SQLTables pODBC3SQLTables;
- extern T3SQLFreeStmt pODBC3SQLFreeStmt;
- extern T3SQLCloseCursor pODBC3SQLCloseCursor;
- extern T3SQLCancel pODBC3SQLCancel;
- extern T3SQLEndTran pODBC3SQLEndTran;
- extern T3SQLDisconnect pODBC3SQLDisconnect;
- extern T3SQLFreeHandle pODBC3SQLFreeHandle;
- extern T3SQLGetCursorName pODBC3SQLGetCursorName;
- extern T3SQLNativeSql pODBC3SQLNativeSql;
-
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::beans;
-using namespace ::com::sun::star::sdbcx;
-using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::container;
-using namespace ::com::sun::star::lang;
-using namespace utl;
-using namespace osl;
-using namespace ::dbtools;
-
- sal_Bool LoadFunctions(oslModule pODBCso);
- sal_Bool LoadLibrary_ADABAS(::rtl::OUString &_rPath);
- // --------------------------------------------------------------------------------
-void ODriver::fillInfo(const Sequence< PropertyValue >& info, TDatabaseStruct& _rDBInfo)
-{
- const PropertyValue* pIter = info.getConstArray();
- const PropertyValue* pEnd = pIter + info.getLength();
- for(;pIter != pEnd;++pIter)
- {
- if(pIter->Name.equalsIgnoreAsciiCase(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DatabaseName"))))
- {
- pIter->Value >>= _rDBInfo.sDBName;
- }
- else if(pIter->Name.equalsIgnoreAsciiCase(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ControlUser"))))
- {
- pIter->Value >>= _rDBInfo.sControlUser;
- }
- else if(pIter->Name.equalsIgnoreAsciiCase(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ControlPassword"))))
- {
- pIter->Value >>= _rDBInfo.sControlPassword;
- }
- else if(pIter->Name.equalsIgnoreAsciiCase(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DataCacheSizeIncrement"))))
- pIter->Value >>= _rDBInfo.nDataIncrement;
- else if(pIter->Name.equalsIgnoreAsciiCase(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ShutdownDatabase"))))
- pIter->Value >>= _rDBInfo.bShutDown;
- else if(pIter->Name.equalsIgnoreAsciiCase(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("User"))))
- {
- pIter->Value >>= _rDBInfo.sSysUser;
- }
- else if(pIter->Name.equalsIgnoreAsciiCase(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Password"))))
- {
- pIter->Value >>= _rDBInfo.sSysPassword;
- }
- else if(pIter->Name.equalsIgnoreAsciiCase(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DomainPassword"))))
- {
- pIter->Value >>= _rDBInfo.sDomainPassword;
- }
- else if(pIter->Name.equalsIgnoreAsciiCase(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CacheSize"))))
- {
- pIter->Value >>= _rDBInfo.sCacheSize;
- }
- else if(pIter->Name.equalsIgnoreAsciiCase(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("RestoreDatabase"))))
- {
- pIter->Value >>= _rDBInfo.bRestoreDatabase;
- }
- else if(pIter->Name.equalsIgnoreAsciiCase(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Backup"))))
- {
- pIter->Value >>= _rDBInfo.sBackupFile;
- }
- else if(pIter->Name.equalsIgnoreAsciiCase(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DataDevSpace"))))
- {
- pIter->Value >>= _rDBInfo.sDataDevName;
- }
- else if(pIter->Name.equalsIgnoreAsciiCase(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SYSDEVSPACE"))))
- {
- pIter->Value >>= _rDBInfo.sSysDevSpace;
- }
- else if(pIter->Name.equalsIgnoreAsciiCase(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TRANSACTION_LOG"))))
- {
- pIter->Value >>= _rDBInfo.sTransLogName;
- }
- else if(pIter->Name.equalsIgnoreAsciiCase(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DataDevSize"))))
- {
- pIter->Value >>= _rDBInfo.nDataSize;
- }
- else if(pIter->Name.equalsIgnoreAsciiCase(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("LogDevSize"))))
- {
- pIter->Value >>= _rDBInfo.nLogSize;
- }
- }
-}
-
-
-// --------------------------------------------------------------------------------
-ODriver::ODriver(const Reference< XMultiServiceFactory >& _rxFactory) : ODBCDriver(_rxFactory)
-{
- osl_incrementInterlockedCount(&m_refCount);
- fillEnvironmentVariables();
- Reference< XComponent > xComponent(m_xORB, UNO_QUERY);
- if (xComponent.is())
- {
- Reference< ::com::sun::star::lang::XEventListener> xEvtL((::cppu::OWeakObject*)this,UNO_QUERY);
- xComponent->addEventListener(xEvtL);
- }
- osl_decrementInterlockedCount(&m_refCount);
-}
-//------------------------------------------------------------------------------
-void ODriver::disposing()
-{
- ::osl::MutexGuard aGuard(m_aMutex);
- ODriver_BASE::disposing();
- Reference< XComponent > xComponent(m_xORB, UNO_QUERY);
- if (xComponent.is())
- {
- Reference< XEventListener> xEvtL((::cppu::OWeakObject*)this,UNO_QUERY);
- xComponent->removeEventListener(xEvtL);
- }
- m_xORB.clear();
-}
-
-// static ServiceInfo
-//------------------------------------------------------------------------------
-rtl::OUString ODriver::getImplementationName_Static( ) throw(RuntimeException)
-{
- return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.sdbcx.adabas.ODriver"));
-}
-//------------------------------------------------------------------------------
-Sequence< ::rtl::OUString > ODriver::getSupportedServiceNames_Static( ) throw (RuntimeException)
-{
- Sequence< ::rtl::OUString > aSNS( 2 );
- aSNS[0] = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sdbc.Driver"));
- aSNS[1] = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sdbcx.Driver"));
- return aSNS;
-}
-//------------------------------------------------------------------
-::rtl::OUString SAL_CALL ODriver::getImplementationName( ) throw(RuntimeException)
-{
- return getImplementationName_Static();
-}
-
-//------------------------------------------------------------------
-sal_Bool SAL_CALL ODriver::supportsService( const ::rtl::OUString& _rServiceName ) throw(RuntimeException)
-{
- const Sequence< ::rtl::OUString > aSupported(getSupportedServiceNames());
- const ::rtl::OUString* pSupported = aSupported.getConstArray();
- const ::rtl::OUString* pEnd = pSupported + aSupported.getLength();
- for (;pSupported != pEnd && !pSupported->equals(_rServiceName); ++pSupported)
- ;
-
- return pSupported != pEnd;
-}
-//------------------------------------------------------------------
-Sequence< ::rtl::OUString > SAL_CALL ODriver::getSupportedServiceNames( ) throw(RuntimeException)
-{
- return getSupportedServiceNames_Static();
-}
-//------------------------------------------------------------------
-Any SAL_CALL ODriver::queryInterface( const Type & rType ) throw(RuntimeException)
-{
- Any aRet = ::cppu::queryInterface(rType, static_cast<XDataDefinitionSupplier*>(this));
- if ( !aRet.hasValue() )
- aRet = ODriver_BASE::queryInterface(rType);
- return aRet.hasValue() ? aRet : ODriver_BASE2::queryInterface(rType);
-}
-//------------------------------------------------------------------
-Reference< XInterface > SAL_CALL ODriver_CreateInstance(const Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFac) throw( Exception )
-{
- return *(new ODriver(_rxFac));
-}
-// -----------------------------------------------------------------------------
-void SAL_CALL ODriver::disposing( const EventObject& Source ) throw(RuntimeException)
-{
- ::osl::MutexGuard aGuard( m_aMutex );
-
- if(m_xORB.is() && Reference< XMultiServiceFactory >(Source.Source,UNO_QUERY) == m_xORB)
- {
- TDatabaseMap::iterator aIter = m_aDatabaseMap.begin();
- for(;aIter != m_aDatabaseMap.end();++aIter)
- {
- if(aIter->second.bShutDown)
- {
- ::rtl::OUString sName;
- if(getDBName(aIter->first,sName))
- {
- XUTIL(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SHUTDOWN QUICK")),sName,aIter->second.sControlUser,aIter->second.sControlPassword);
- X_STOP(sName);
- }
- }
- }
- m_xORB.clear();
- }
-}
-// --------------------------------------------------------------------------------
-Reference< XConnection > SAL_CALL ODriver::connect( const ::rtl::OUString& url, const Sequence< PropertyValue >& info ) throw(SQLException, RuntimeException)
-{
- if ( ! acceptsURL(url) )
- return NULL;
-
- ::osl::MutexGuard aGuard( m_aMutex );
- if (ODriver_BASE::rBHelper.bDisposed)
- throw DisposedException();
-
- TDatabaseStruct aDBInfo;
- aDBInfo.bShutDown = sal_False;
- fillInfo(info,aDBInfo);
- aDBInfo.sControlUser = aDBInfo.sControlUser.toAsciiUpperCase();
- aDBInfo.sControlPassword = aDBInfo.sControlPassword.toAsciiUpperCase();
- aDBInfo.sSysUser = aDBInfo.sSysUser.toAsciiUpperCase();
- aDBInfo.sSysPassword = aDBInfo.sSysPassword.toAsciiUpperCase();
-
-
- TDatabaseMap::iterator aFind = m_aDatabaseMap.find(url);
- if(aFind == m_aDatabaseMap.end()) // only when not found yet
- m_aDatabaseMap[url] = aDBInfo;
- else
- {
- if(aFind->second.bShutDown != aDBInfo.bShutDown)
- aFind->second.bShutDown &= aDBInfo.bShutDown;
- }
-
- ::rtl::OUString sName;
- if(aDBInfo.sControlPassword.getLength() && aDBInfo.sControlUser.getLength() && getDBName(url,sName))
- {
- // check if we have to add a new data dev space
- checkAndInsertNewDevSpace(sName,aDBInfo);
-
- convertOldVersion(sName,aDBInfo);
- // check if we must restart the database
- checkAndRestart(sName,aDBInfo);
- }
-
-
- if(!m_pDriverHandle)
- {
- ::rtl::OUString aPath;
- if(!EnvironmentHandle(aPath))
- throw SQLException(aPath,*this,::rtl::OUString(),1000,Any());
- }
- OAdabasConnection* pCon = new OAdabasConnection(m_pDriverHandle,this);
- Reference< XConnection > xCon = pCon;
- SQLRETURN nSQLRETURN = pCon->Construct(url,info);
-
- if (nSQLRETURN == SQL_ERROR || nSQLRETURN == SQL_NO_DATA)
- {
- odbc::OTools::ThrowException(pCon,nSQLRETURN,pCon->getConnection(),SQL_HANDLE_DBC,*this);
- }
-
- m_xConnections.push_back(WeakReferenceHelper(*pCon));
-
- return xCon;
-}
-// -----------------------------------------------------------------------------
-sal_Bool ODriver::getDBName(const ::rtl::OUString& _rName,::rtl::OUString& sDBName) const
-{
- sDBName = ::rtl::OUString();
- ::rtl::OUString sName = _rName.copy(12);
- sal_Int32 nPos = sName.indexOf(':');
- if(nPos != -1 && nPos < 1)
- sDBName = sName.copy(1);
- return (nPos != -1 && nPos < 1);
-}
-// --------------------------------------------------------------------------------
-sal_Bool SAL_CALL ODriver::acceptsURL( const ::rtl::OUString& url )
- throw(SQLException, RuntimeException)
-{
- return (!url.compareTo(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("sdbc:adabas:")),12));
-}
-// --------------------------------------------------------------------------------
-Sequence< DriverPropertyInfo > SAL_CALL ODriver::getPropertyInfo( const ::rtl::OUString& url, const Sequence< PropertyValue >& /*info*/) throw(SQLException, RuntimeException)
-{
- if ( acceptsURL(url) )
- {
- ::std::vector< DriverPropertyInfo > aDriverInfo;
-
- aDriverInfo.push_back(DriverPropertyInfo(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ShutdownDatabase"))
- ,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Shut down service when closing."))
- ,sal_False
- ,::rtl::OUString()
- ,Sequence< ::rtl::OUString >())
- );
- aDriverInfo.push_back(DriverPropertyInfo(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ControlUser"))
- ,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Control user name."))
- ,sal_False
- ,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("0"))
- ,Sequence< ::rtl::OUString >())
- );
- aDriverInfo.push_back(DriverPropertyInfo(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ControlPassword"))
- ,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Control password."))
- ,sal_False
- ,::rtl::OUString()
- ,Sequence< ::rtl::OUString >())
- );
- aDriverInfo.push_back(DriverPropertyInfo(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DataCacheSizeIncrement"))
- ,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Data increment (MB)."))
- ,sal_False
- ,::rtl::OUString()
- ,Sequence< ::rtl::OUString >())
- );
- aDriverInfo.push_back(DriverPropertyInfo(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharSet"))
- ,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharSet of the database."))
- ,sal_False
- ,::rtl::OUString()
- ,Sequence< ::rtl::OUString >())
- );
- return Sequence< DriverPropertyInfo >(&aDriverInfo[0],aDriverInfo.size());
- }
-
- SharedResources aResources;
- const ::rtl::OUString sMessage = aResources.getResourceString(STR_URI_SYNTAX_ERROR);
- ::dbtools::throwGenericSQLException(sMessage ,*this);
- return Sequence< DriverPropertyInfo >();
-}
-// --------------------------------------------------------------------------------
-sal_Int32 SAL_CALL ODriver::getMajorVersion( ) throw(RuntimeException)
-{
- return 1;
-}
-// --------------------------------------------------------------------------------
-sal_Int32 SAL_CALL ODriver::getMinorVersion( ) throw(RuntimeException)
-{
- return 0;
-}
-// -----------------------------------------------------------------------------
-// XCreateCatalog
-void SAL_CALL ODriver::createCatalog( const Sequence< PropertyValue >& info ) throw(SQLException, ElementExistException, RuntimeException)
-{
- ::osl::MutexGuard aGuard( m_aMutex );
- if (ODriver_BASE::rBHelper.bDisposed)
- throw DisposedException();
-
- try
- {
- TDatabaseStruct aDBInfo;
- fillInfo(info,aDBInfo);
-
- ::rtl::OUString envVar(RTL_CONSTASCII_USTRINGPARAM("DBSERVICE"));
- ::rtl::OUString envData(RTL_CONSTASCII_USTRINGPARAM("0"));
- osl_setEnvironment(envVar.pData, envData.pData);
-
- m_sDbRunDir = m_sDbWorkURL + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/wrk/")) + aDBInfo.sDBName;
- String sTemp;
- LocalFileHelper::ConvertURLToPhysicalName(m_sDbRunDir,sTemp);
- m_sDbRunDir = sTemp;
-
- createNeededDirs(aDBInfo.sDBName);
- if(CreateFiles(aDBInfo))
- {
- ::connectivity::SharedResources aResources;
- const ::rtl::OUString sError( aResources.getResourceStringWithSubstitution(
- STR_NO_DISK_SPACE,
- "$filename$",aDBInfo.sDBName
- ) );
- ::dbtools::throwGenericSQLException(sError,*this);
- } // if(CreateFiles(aDBInfo))
-
- createDb(aDBInfo);
- }
- catch( SQLException&)
- {
- throw;
- }
- catch(Exception&)
- {
- throw SQLException();
- }
-
-}
-// -----------------------------------------------------------------------------
-// XDropCatalog
-void SAL_CALL ODriver::dropCatalog( const ::rtl::OUString& /*catalogName*/, const Sequence< PropertyValue >& /*info*/ ) throw(SQLException, NoSuchElementException, RuntimeException)
-{
- ::osl::MutexGuard aGuard( m_aMutex );
- if (ODriver_BASE::rBHelper.bDisposed)
- throw DisposedException();
-
- ::dbtools::throwFeatureNotImplementedException( "!XDropCatalog::dropCatalog", *this );
-}
-//-----------------------------------------------------------------------------
-// ODBC Environment (common for all Connections):
-SQLHANDLE ODriver::EnvironmentHandle(::rtl::OUString &_rPath)
-{
- // Has an Environment already been created (for this Instance)?
- if (!m_pDriverHandle)
- {
- SQLHANDLE h = SQL_NULL_HANDLE;
- // allocate Environment
-
- // load ODBC-DLL now:
- if (! LoadLibrary_ADABAS(_rPath))
- return SQL_NULL_HANDLE;
-
- if (N3SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&h) != SQL_SUCCESS)
- return SQL_NULL_HANDLE;
-
- // Save in global Structure...
- m_pDriverHandle = h;
- SQLRETURN nError = N3SQLSetEnvAttr(h, SQL_ATTR_ODBC_VERSION,(SQLPOINTER) SQL_OV_ODBC3, SQL_IS_INTEGER);
- OSL_UNUSED( nError );
- //N3SQLSetEnvAttr(h, SQL_ATTR_CONNECTION_POOLING,(SQLPOINTER) SQL_CP_ONE_PER_HENV, SQL_IS_INTEGER);
- }
-
- return m_pDriverHandle;
-}
-// --------------------------------------------------------------------------------
-// XDataDefinitionSupplier
-Reference< XTablesSupplier > SAL_CALL ODriver::getDataDefinitionByConnection( const Reference< ::com::sun::star::sdbc::XConnection >& connection ) throw(::com::sun::star::sdbc::SQLException, RuntimeException)
-{
- ::osl::MutexGuard aGuard( m_aMutex );
- if (ODriver_BASE::rBHelper.bDisposed)
- throw DisposedException();
-
- Reference< XTablesSupplier > xTab;
- Reference< ::com::sun::star::lang::XUnoTunnel> xTunnel(connection,UNO_QUERY);
- if ( xTunnel.is() )
- {
-
- OAdabasConnection* pConnection = NULL;
- OAdabasConnection* pSearchConnection = reinterpret_cast< OAdabasConnection* >( xTunnel->getSomething(OAdabasConnection::getUnoTunnelImplementationId()) );
- for (OWeakRefArray::iterator i = m_xConnections.begin(); m_xConnections.end() != i; ++i)
- {
- if ( (OAdabasConnection*) Reference< XConnection >::query(i->get().get()).get() == pSearchConnection )
- {
- pConnection = pSearchConnection;
- break;
- }
- }
-
-
- if ( pConnection )
- xTab = pConnection->createCatalog();
- }
- return xTab;
-}
-
-// --------------------------------------------------------------------------------
-Reference< XTablesSupplier > SAL_CALL ODriver::getDataDefinitionByURL( const ::rtl::OUString& url, const Sequence< PropertyValue >& info ) throw(::com::sun::star::sdbc::SQLException, RuntimeException)
-{
- if ( ! acceptsURL(url) )
- {
- SharedResources aResources;
- const ::rtl::OUString sMessage = aResources.getResourceString(STR_URI_SYNTAX_ERROR);
- ::dbtools::throwGenericSQLException(sMessage ,*this);
- } // if ( ! acceptsURL(url) )
-
- return getDataDefinitionByConnection(connect(url,info));
-}
-// -----------------------------------------------------------------------------
-void SAL_CALL ODriver::acquire() throw()
-{
- ODriver_BASE::acquire();
-}
-// -----------------------------------------------------------------------------
-void SAL_CALL ODriver::release() throw()
-{
- ODriver_BASE::release();
-}
-ODriver::~ODriver()
-{
-}
-// -----------------------------------------------------------------------------
-oslGenericFunction ODriver::getOdbcFunction(sal_Int32 _nIndex) const
-{
- oslGenericFunction pFunction = NULL;
- switch(_nIndex)
- {
- case ODBC3SQLAllocHandle:
- pFunction = (oslGenericFunction)pODBC3SQLAllocHandle;;
- break;
- case ODBC3SQLConnect:
- pFunction = (oslGenericFunction)pODBC3SQLConnect;
- break;
- case ODBC3SQLDriverConnect:
- pFunction = (oslGenericFunction)pODBC3SQLDriverConnect;
- break;
- case ODBC3SQLBrowseConnect:
- pFunction = (oslGenericFunction)pODBC3SQLBrowseConnect;
- break;
- case ODBC3SQLDataSources:
- pFunction = (oslGenericFunction)pODBC3SQLDataSources;
- break;
- case ODBC3SQLDrivers:
- pFunction = (oslGenericFunction)pODBC3SQLDrivers;
- break;
- case ODBC3SQLGetInfo:
-
- pFunction = (oslGenericFunction)pODBC3SQLGetInfo;
- break;
- case ODBC3SQLGetFunctions:
-
- pFunction = (oslGenericFunction)pODBC3SQLGetFunctions;
- break;
- case ODBC3SQLGetTypeInfo:
-
- pFunction = (oslGenericFunction)pODBC3SQLGetTypeInfo;
- break;
- case ODBC3SQLSetConnectAttr:
-
- pFunction = (oslGenericFunction)pODBC3SQLSetConnectAttr;
- break;
- case ODBC3SQLGetConnectAttr:
-
- pFunction = (oslGenericFunction)pODBC3SQLGetConnectAttr;
- break;
- case ODBC3SQLSetEnvAttr:
-
- pFunction = (oslGenericFunction)pODBC3SQLSetEnvAttr;
- break;
- case ODBC3SQLGetEnvAttr:
-
- pFunction = (oslGenericFunction)pODBC3SQLGetEnvAttr;
- break;
- case ODBC3SQLSetStmtAttr:
-
- pFunction = (oslGenericFunction)pODBC3SQLSetStmtAttr;
- break;
- case ODBC3SQLGetStmtAttr:
-
- pFunction = (oslGenericFunction)pODBC3SQLGetStmtAttr;
- break;
- case ODBC3SQLPrepare:
-
- pFunction = (oslGenericFunction)pODBC3SQLPrepare;
- break;
- case ODBC3SQLBindParameter:
-
- pFunction = (oslGenericFunction)pODBC3SQLBindParameter;
- break;
- case ODBC3SQLSetCursorName:
-
- pFunction = (oslGenericFunction)pODBC3SQLSetCursorName;
- break;
- case ODBC3SQLExecute:
-
- pFunction = (oslGenericFunction)pODBC3SQLExecute;
- break;
- case ODBC3SQLExecDirect:
-
- pFunction = (oslGenericFunction)pODBC3SQLExecDirect;
- break;
- case ODBC3SQLDescribeParam:
-
- pFunction = (oslGenericFunction)pODBC3SQLDescribeParam;
- break;
- case ODBC3SQLNumParams:
-
- pFunction = (oslGenericFunction)pODBC3SQLNumParams;
- break;
- case ODBC3SQLParamData:
-
- pFunction = (oslGenericFunction)pODBC3SQLParamData;
- break;
- case ODBC3SQLPutData:
-
- pFunction = (oslGenericFunction)pODBC3SQLPutData;
- break;
- case ODBC3SQLRowCount:
-
- pFunction = (oslGenericFunction)pODBC3SQLRowCount;
- break;
- case ODBC3SQLNumResultCols:
-
- pFunction = (oslGenericFunction)pODBC3SQLNumResultCols;
- break;
- case ODBC3SQLDescribeCol:
-
- pFunction = (oslGenericFunction)pODBC3SQLDescribeCol;
- break;
- case ODBC3SQLColAttribute:
-
- pFunction = (oslGenericFunction)pODBC3SQLColAttribute;
- break;
- case ODBC3SQLBindCol:
-
- pFunction = (oslGenericFunction)pODBC3SQLBindCol;
- break;
- case ODBC3SQLFetch:
-
- pFunction = (oslGenericFunction)pODBC3SQLFetch;
- break;
- case ODBC3SQLFetchScroll:
-
- pFunction = (oslGenericFunction)pODBC3SQLFetchScroll;
- break;
- case ODBC3SQLGetData:
-
- pFunction = (oslGenericFunction)pODBC3SQLGetData;
- break;
- case ODBC3SQLSetPos:
-
- pFunction = (oslGenericFunction)pODBC3SQLSetPos;
- break;
- case ODBC3SQLBulkOperations:
-
- pFunction = (oslGenericFunction)pODBC3SQLBulkOperations;
- break;
- case ODBC3SQLMoreResults:
-
- pFunction = (oslGenericFunction)pODBC3SQLMoreResults;
- break;
- case ODBC3SQLGetDiagRec:
-
- pFunction = (oslGenericFunction)pODBC3SQLGetDiagRec;
- break;
- case ODBC3SQLColumnPrivileges:
-
- pFunction = (oslGenericFunction)pODBC3SQLColumnPrivileges;
- break;
- case ODBC3SQLColumns:
-
- pFunction = (oslGenericFunction)pODBC3SQLColumns;
- break;
- case ODBC3SQLForeignKeys:
-
- pFunction = (oslGenericFunction)pODBC3SQLForeignKeys;
- break;
- case ODBC3SQLPrimaryKeys:
-
- pFunction = (oslGenericFunction)pODBC3SQLPrimaryKeys;
- break;
- case ODBC3SQLProcedureColumns:
-
- pFunction = (oslGenericFunction)pODBC3SQLProcedureColumns;
- break;
- case ODBC3SQLProcedures:
-
- pFunction = (oslGenericFunction)pODBC3SQLProcedures;
- break;
- case ODBC3SQLSpecialColumns:
-
- pFunction = (oslGenericFunction)pODBC3SQLSpecialColumns;
- break;
- case ODBC3SQLStatistics:
-
- pFunction = (oslGenericFunction)pODBC3SQLStatistics;
- break;
- case ODBC3SQLTablePrivileges:
-
- pFunction = (oslGenericFunction)pODBC3SQLTablePrivileges;
- break;
- case ODBC3SQLTables:
-
- pFunction = (oslGenericFunction)pODBC3SQLTables;
- break;
- case ODBC3SQLFreeStmt:
-
- pFunction = (oslGenericFunction)pODBC3SQLFreeStmt;
- break;
- case ODBC3SQLCloseCursor:
-
- pFunction = (oslGenericFunction)pODBC3SQLCloseCursor;
- break;
- case ODBC3SQLCancel:
-
- pFunction = (oslGenericFunction)pODBC3SQLCancel;
- break;
- case ODBC3SQLEndTran:
-
- pFunction = (oslGenericFunction)pODBC3SQLEndTran;
- break;
- case ODBC3SQLDisconnect:
-
- pFunction = (oslGenericFunction)pODBC3SQLDisconnect;
- break;
- case ODBC3SQLFreeHandle:
-
- pFunction = (oslGenericFunction)pODBC3SQLFreeHandle;
- break;
- case ODBC3SQLGetCursorName:
-
- pFunction = (oslGenericFunction)pODBC3SQLGetCursorName;
- break;
- case ODBC3SQLNativeSql:
-
- pFunction = (oslGenericFunction)pODBC3SQLNativeSql;
- break;
- default:
- OSL_FAIL("Function unknown!");
- }
- return pFunction;
-}
-// -----------------------------------------------------------------------------
-void ODriver::createNeededDirs(const ::rtl::OUString& sDBName)
-{
- ::rtl::OUString sDbWork,sDBConfig,sTemp;
-
- if(m_sDbWork.getLength())
- {
- sDbWork = m_sDbWorkURL;
- if(!UCBContentHelper::IsFolder(m_sDbWorkURL))
- UCBContentHelper::MakeFolder(m_sDbWorkURL);
-
- sDbWork += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/"));
- sDbWork += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("wrk"));
- if(!UCBContentHelper::IsFolder(sDbWork))
- UCBContentHelper::MakeFolder(sDbWork);
-
- sDbWork += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/"));
-
- sTemp = sDbWork;
- sTemp += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("config"));
- if(!UCBContentHelper::IsFolder(sTemp))
- UCBContentHelper::MakeFolder(sTemp);
-
- sTemp = sDbWork;
- sTemp += sDBName;
- if(!UCBContentHelper::IsFolder(sTemp))
- UCBContentHelper::MakeFolder(sTemp);
- }
-
- if(m_sDbConfig.getLength())
- {
- sDBConfig = m_sDbConfigURL;
- if(!UCBContentHelper::IsFolder(sDBConfig))
- UCBContentHelper::MakeFolder(sDBConfig);
-
- sDBConfig += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/"));
- sTemp = sDBConfig;
- sTemp += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("config"));
- if(!UCBContentHelper::IsFolder(sTemp))
- UCBContentHelper::MakeFolder(sTemp);
-
- sTemp += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/"));
- sTemp += sDBName;
- if(UCBContentHelper::Exists(sTemp))
- UCBContentHelper::Kill(sTemp);
-
-#if !(defined(WNT))
- sTemp = sDBConfig;
- sTemp += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("diag"));
- if(!UCBContentHelper::IsFolder(sTemp))
- UCBContentHelper::MakeFolder(sTemp);
-
- sTemp = sDBConfig;
- sTemp += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ipc"));
- if(!UCBContentHelper::IsFolder(sTemp))
- UCBContentHelper::MakeFolder(sTemp);
-
- sTemp = sDBConfig;
- sTemp += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("spool"));
- if(!UCBContentHelper::IsFolder(sTemp))
- UCBContentHelper::MakeFolder(sTemp);
-#endif
- }
-}
-// -----------------------------------------------------------------------------
-void ODriver::clearDatabase(const ::rtl::OUString& sDBName)
-{ // stop the database
- ::rtl::OUString sCommand;
-#if defined(WNT)
- ::rtl::OUString sStop = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("stop"));
- const sal_uInt32 nArgsCount = 2;
- rtl_uString *pArgs[nArgsCount] = { sDBName.pData, sStop.pData };
-#else
- sCommand = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("x_clear"));
- const sal_uInt32 nArgsCount = 1;
- rtl_uString* pArgs[nArgsCount] = { sDBName.pData };
-#endif
-
- oslProcess aApp;
-
-#if OSL_DEBUG_LEVEL > 0
- oslProcessError eError =
-#endif
- osl_executeProcess(sCommand.pData, pArgs, nArgsCount,
- OPROCESS_ADABAS, NULL, m_sDbWorkURL.pData,
- NULL, 0, &aApp);
- OSL_ENSURE( eError == osl_Process_E_None, "ODriver::clearDatabase: calling the executable failed!" );
-}
-// -----------------------------------------------------------------------------
-void ODriver::createDb( const TDatabaseStruct& _aInfo)
-{
-
- clearDatabase(_aInfo.sDBName);
-
- X_PARAM(_aInfo.sDBName,_aInfo.sControlUser,_aInfo.sControlPassword,String::CreateFromAscii("BINIT"));
-
- String sTemp;
- LocalFileHelper::ConvertURLToPhysicalName(_aInfo.sSysDevSpace,sTemp);
-
- PutParam(_aInfo.sDBName,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SYSDEVSPACE")),sTemp);
-
- sTemp.Erase();
- LocalFileHelper::ConvertURLToPhysicalName(_aInfo.sTransLogName,sTemp);
- PutParam(_aInfo.sDBName,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TRANSACTION_LOG")),sTemp);
- PutParam(_aInfo.sDBName,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MAXUSERTASKS")),::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("3")));
- PutParam(_aInfo.sDBName,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MAXDEVSPACES")),::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("7")));
- PutParam(_aInfo.sDBName,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MAXDATADEVSPACES")),::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("5")));
- PutParam(_aInfo.sDBName,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MAXDATAPAGES")),::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("25599")));
- PutParam(_aInfo.sDBName,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MAXBACKUPDEVS")),::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("1")));
- PutParam(_aInfo.sDBName,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MAXSERVERDB")),::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("1")));
- PutParam(_aInfo.sDBName,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DATA_CACHE_PAGES")),_aInfo.sCacheSize);
- PutParam(_aInfo.sDBName,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CONV_CACHE_PAGES")),::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("23")));
- PutParam(_aInfo.sDBName,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PROC_DATA_PAGES")),::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("40")));
- PutParam(_aInfo.sDBName,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("RUNDIRECTORY")),m_sDbRunDir);
- PutParam(_aInfo.sDBName,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("KERNELTRACESIZE")),::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("100")));
- PutParam(_aInfo.sDBName,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("LOG_QUEUE_PAGES")),::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("10")));
-
-#if !defined(WNT)
- PutParam(_aInfo.sDBName,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("OPMSG1")),::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/dev/null")));
-#endif
-
- X_PARAM(_aInfo.sDBName,_aInfo.sControlUser,_aInfo.sControlPassword,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("BCHECK")));
-
- X_START(_aInfo.sDBName);
-
- // SHOW_STATE()
- // %m_sDbRoot%\bin\xutil -d %_aInfo.sDBName% -u %CONUSR%,%CONPWD% -b %INITCMD%
- ::rtl::OUString aBatch2 = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("-b "));
-
- // generate the init file for the database
- String sInitFile = getDatabaseInitFile(_aInfo);
-
- LocalFileHelper::ConvertURLToPhysicalName(sInitFile,sTemp);
- aBatch2 += sTemp;
- XUTIL(aBatch2,_aInfo.sDBName,_aInfo.sControlUser,_aInfo.sControlPassword);
-#if OSL_DEBUG_LEVEL < 2
- if(UCBContentHelper::Exists(sInitFile))
- UCBContentHelper::Kill(sInitFile);
-#endif
-
- // install system tables
- installSystemTables(_aInfo);
- // now we have to make our SYSDBA user "NOT EXCLUSIVE"
- {
- String sExt;
- sExt.AssignAscii(".sql");
-
- String sWorkUrl(m_sDbWorkURL);
- ::utl::TempFile aInitFile(String::CreateFromAscii("Init"),&sExt,&sWorkUrl);
- aInitFile.EnableKillingFile();
- {
- ::std::auto_ptr<SvStream> pFileStream( UcbStreamHelper::CreateStream(aInitFile.GetURL(),STREAM_WRITE) );
- (*pFileStream) << "ALTER USER \""
- << ::rtl::OString(_aInfo.sSysUser,_aInfo.sSysUser.getLength(),gsl_getSystemTextEncoding())
- << "\" NOT EXCLUSIVE "
- << sNewLine;
- pFileStream->Flush();
- }
- { // just to get sure that the tempfile still lives
- sTemp.Erase();
- LocalFileHelper::ConvertURLToPhysicalName(aInitFile.GetURL(),sTemp);
- LoadBatch(_aInfo.sDBName,_aInfo.sSysUser,_aInfo.sSysPassword,sTemp);
- }
- }
-}
-
-
-//-------------------------------------------------------------------------------------------------
-int ODriver::X_PARAM(const ::rtl::OUString& _DBNAME,
- const ::rtl::OUString& _USR,
- const ::rtl::OUString& _PWD,
- const ::rtl::OUString& _CMD)
-{
- // %XPARAM% -u %CONUSR%,%CONPWD% BINIT
- ::rtl::OUString sCommandFile = generateInitFile();
- {
- ::std::auto_ptr<SvStream> pFileStream( UcbStreamHelper::CreateStream(sCommandFile,STREAM_STD_READWRITE));
- pFileStream->Seek(STREAM_SEEK_TO_END);
- (*pFileStream) << "x_param"
-#if defined(WNT)
- << ".exe"
-#endif
- << " -d "
- << ::rtl::OString(_DBNAME,_DBNAME.getLength(),gsl_getSystemTextEncoding())
- << " -u "
- << ::rtl::OString(_USR,_USR.getLength(),gsl_getSystemTextEncoding())
- << ","
- << ::rtl::OString(_PWD,_PWD.getLength(),gsl_getSystemTextEncoding())
- << " "
- << ::rtl::OString(_CMD,_CMD.getLength(),gsl_getSystemTextEncoding())
-#if defined(WNT)
-#if (OSL_DEBUG_LEVEL > 1) || defined(DBG_UTIL)
- << " >> %DBWORK%\\create.log 2>&1"
-#endif
-#else
-#if (OSL_DEBUG_LEVEL > 1) || defined(DBG_UTIL)
- << " >> /tmp/kstart.log"
-#else
- << " > /dev/null"
-#endif
-#endif
- << " "
- << sNewLine
- << sNewLine;
-
- pFileStream->Flush();
- }
-
- oslProcess aApp;
-
-#if OSL_DEBUG_LEVEL > 0
- oslProcessError eError =
-#endif
- osl_executeProcess(sCommandFile.pData, NULL, 0,
- osl_Process_HIDDEN | osl_Process_WAIT,
- NULL, m_sDbWorkURL.pData, NULL, 0, &aApp);
- OSL_ENSURE( eError == osl_Process_E_None, "ODriver::X_PARAM: calling the executable failed!" );
-
-#if OSL_DEBUG_LEVEL < 2
- if(UCBContentHelper::Exists(sCommandFile))
- UCBContentHelper::Kill(sCommandFile);
-#endif
-
- return 0;
-}
-// -----------------------------------------------------------------------------
-sal_Int32 ODriver::CreateFiles(const TDatabaseStruct& _aInfo)
-{
- int nRet = CreateFile(_aInfo.sSysDevSpace,_aInfo.nDataSize/50) ? 0 : -9;
- if(!nRet)
- nRet = CreateFile(_aInfo.sTransLogName,_aInfo.nLogSize) ? 0 : -10;
- if(!nRet)
- nRet = CreateFile(_aInfo.sDataDevName,_aInfo.nDataSize) ? 0 : -11;
-
- return nRet;
-
-}
-// -----------------------------------------------------------------------------
-void ODriver::PutParam(const ::rtl::OUString& sDBName,
- const ::rtl::OUString& rWhat,
- const ::rtl::OUString& rHow)
-{
- const sal_uInt32 nArgsCount = 3;
- rtl_uString* pArgs[nArgsCount] = { sDBName.pData, rWhat.pData, rHow.pData };
-
- ::rtl::OUString sCommand = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("putparam"));
-#if defined(WNT)
- sCommand += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".exe"));
-#endif
-
- oslProcess aApp;
-
-
-#if OSL_DEBUG_LEVEL > 0
- oslProcessError eError =
-#endif
- osl_executeProcess(sCommand.pData, pArgs, nArgsCount,
- OPROCESS_ADABAS,
- NULL, m_sDbWorkURL.pData, NULL, 0, &aApp);
-
- OSL_ENSURE( eError == osl_Process_E_None, "ODriver::PutParam: calling the executable failed!" );
-}
-// -----------------------------------------------------------------------------
-sal_Bool ODriver::CreateFile(const ::rtl::OUString &_FileName,
- sal_Int32 _nSize)
-{
-OSL_TRACE("CreateFile %d",_nSize);
- sal_Bool bOK = sal_True;
- try
- {
- ::std::auto_ptr<SvStream> pFileStream( UcbStreamHelper::CreateStream(_FileName,STREAM_WRITE));
- if( !pFileStream.get())
- {
- ::connectivity::SharedResources aResources;
- const ::rtl::OUString sError( aResources.getResourceStringWithSubstitution(
- STR_NO_DISK_SPACE,
- "$filename$",_FileName
- ) );
- ::dbtools::throwGenericSQLException(sError,*this);
- }
- sal_Int32 nNewSize = 0;
- sal_Int32 nCount = _nSize /2;
- for(sal_Int32 i=0; bOK && i < nCount; ++i)
- {
- nNewSize += 8192;//4096;
- bOK = (*pFileStream).SetStreamSize(nNewSize);
- pFileStream->Flush();
- }
-
- bOK = bOK && static_cast<sal_Int32>(pFileStream->Seek(STREAM_SEEK_TO_END)) == nNewSize;
- }
- catch(Exception&)
- {
- OSL_TRACE("Exception");
- }
- if(!bOK)
- {
- ::connectivity::SharedResources aResources;
- const ::rtl::OUString sError( aResources.getResourceStringWithSubstitution(
- STR_NO_DISK_SPACE,
- "$filename$",_FileName
- ) );
- ::dbtools::throwGenericSQLException(sError,*this);
- }
-
- return bOK;
- // dd if=/dev/zero bs=4k of=$DEV_NAME count=$2
-}
-// -----------------------------------------------------------------------------
-int ODriver::X_START(const ::rtl::OUString& sDBName)
-{
- ::rtl::OUString sCommand;
-#if defined(WNT)
-
- ::rtl::OUString sArg1 = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("-d"));
- ::rtl::OUString sArg3 = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("-NoDBService"));
- ::rtl::OUString sArg4 = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("-NoDBWindow"));
-
- const sal_uInt32 nArgsCount = 4;
- rtl_uString* pArgs[nArgsCount] = { sArg1.pData, sDBName.pData, sArg3.pData, sArg4.pData };
- sCommand = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("strt.exe"));
-#else
- const sal_uInt32 nArgsCount = 1;
- rtl_uString* pArgs[nArgsCount] = { sDBName.pData };
- sCommand = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("x_start"));
-#endif
-
- oslProcess aApp;
-
- oslProcessError eError = osl_executeProcess(sCommand.pData, pArgs, nArgsCount,
- OPROCESS_ADABAS, NULL, m_sDbWorkURL.pData,
- NULL, 0, &aApp);
-
- if(eError == osl_Process_E_NotFound)
- {
- ::connectivity::SharedResources aResources;
- const ::rtl::OUString sError( aResources.getResourceStringWithSubstitution(
- STR_COMMAND_NOT_FOUND,
- "$databasename$",sDBName,
- "$progname$",sCommand
- ) );
- ::dbtools::throwGenericSQLException(sError,*this);
- }
- OSL_ASSERT(eError == osl_Process_E_None);
-
- oslProcessInfo aInfo;
- aInfo.Size = sizeof(oslProcessInfo);
-
- if(osl_getProcessInfo(aApp, osl_Process_EXITCODE, &aInfo) == osl_Process_E_None && aInfo.Code)
- return aInfo.Code;
-
- return 0;
-}
-// -----------------------------------------------------------------------------
-int ODriver::X_STOP(const ::rtl::OUString& sDBName)
-{
- ::rtl::OUString sCommand;
-#if defined(WNT)
-
- ::rtl::OUString sArg1 = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("-d"));
- ::rtl::OUString sArg2 = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("-NoDBService"));
-
- const sal_uInt32 nArgsCount = 3;
- rtl_uString* pArgs[nArgsCount] = { sArg1.pData, sDBName.pData, sArg2.pData };
- sCommand = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("stp.exe"));
-#else
- const sal_uInt32 nArgsCount = 1;
- rtl_uString* pArgs[nArgsCount] = { sDBName.pData };
- sCommand = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("x_stop"));
-#endif
-
- oslProcess aApp;
-
- oslProcessError eError = osl_executeProcess(sCommand.pData, pArgs, nArgsCount,
- OPROCESS_ADABAS, NULL, m_sDbWorkURL.pData,
- NULL, 0, &aApp);
-
- OSL_ASSERT(eError == osl_Process_E_None);
- if(eError != osl_Process_E_None)
- return 1;
-
- oslProcessInfo aInfo;
- aInfo.Size = sizeof(oslProcessInfo);
-
- if(osl_getProcessInfo(aApp, osl_Process_EXITCODE, &aInfo) == osl_Process_E_None && aInfo.Code)
- return aInfo.Code;
-
- return 0;
-}
-// -----------------------------------------------------------------------------
-void ODriver::XUTIL(const ::rtl::OUString& _rParam,
- const ::rtl::OUString& _DBNAME,
- const ::rtl::OUString& _USRNAME,
- const ::rtl::OUString& _USRPWD)
-{
- String sWorkUrl(m_sDbWorkURL);
- String sExt = String::CreateFromAscii(".log");
- ::utl::TempFile aCmdFile(String::CreateFromAscii("xutil"),&sExt,&sWorkUrl);
- aCmdFile.EnableKillingFile();
-
- String sPhysicalPath;
- LocalFileHelper::ConvertURLToPhysicalName(aCmdFile.GetURL(),sPhysicalPath);
-
- ::rtl::OUString sCommandFile = generateInitFile();
-
- {
- ::std::auto_ptr<SvStream> pFileStream( UcbStreamHelper::CreateStream(sCommandFile,STREAM_STD_READWRITE));
- pFileStream->Seek(STREAM_SEEK_TO_END);
- (*pFileStream) <<
-#if defined(WNT)
- "xutil.exe"
-#else
- "utility"
-#endif
- << " -u "
- << ::rtl::OString(_USRNAME,_USRNAME.getLength(),gsl_getSystemTextEncoding())
- << ","
- << ::rtl::OString(_USRPWD,_USRPWD.getLength(),gsl_getSystemTextEncoding())
- << " -d "
- << ::rtl::OString(_DBNAME,_DBNAME.getLength(),gsl_getSystemTextEncoding())
- << " "
- << ::rtl::OString(_rParam,_rParam.getLength(),gsl_getSystemTextEncoding())
- << " > "
- << ::rtl::OString(sPhysicalPath.GetBuffer(),sPhysicalPath.Len(),gsl_getSystemTextEncoding())
- << " 2>&1"
- << sNewLine;
- pFileStream->Flush();
- }
-
- oslProcess aApp;
-
-
-#if OSL_DEBUG_LEVEL > 0
- oslProcessError eError =
-#endif
- osl_executeProcess(sCommandFile.pData, NULL, 0,
- osl_Process_HIDDEN | osl_Process_WAIT,
- NULL, m_sDbWorkURL.pData, NULL, 0, &aApp);
- OSL_ENSURE( eError == osl_Process_E_None, "ODriver::XUTIL: calling the executable failed!" );
-
-#if OSL_DEBUG_LEVEL < 2
- if(UCBContentHelper::Exists(sCommandFile))
- UCBContentHelper::Kill(sCommandFile);
-#endif
-}
-// -----------------------------------------------------------------------------
-void ODriver::LoadBatch(const ::rtl::OUString& sDBName,
- const ::rtl::OUString& _rUSR,
- const ::rtl::OUString& _rPWD,
- const ::rtl::OUString& _rBatch)
-{
- OSL_ENSURE(_rBatch.getLength(),"No batch file given!");
- String sWorkUrl(m_sDbWorkURL);
- String sExt = String::CreateFromAscii(".log");
- ::utl::TempFile aCmdFile(String::CreateFromAscii("LoadBatch"),&sExt,&sWorkUrl);
-#if OSL_DEBUG_LEVEL < 2
- aCmdFile.EnableKillingFile();
-#endif
-
- String sPhysicalPath;
- LocalFileHelper::ConvertURLToPhysicalName(aCmdFile.GetURL(),sPhysicalPath);
-
- ::rtl::OUString sCommandFile = generateInitFile();
- {
- ::std::auto_ptr<SvStream> pFileStream( UcbStreamHelper::CreateStream(sCommandFile,STREAM_STD_READWRITE));
- pFileStream->Seek(STREAM_SEEK_TO_END);
- (*pFileStream) << "xload"
-#if defined(WNT)
- << ".exe"
-#endif
- << " -d "
- << ::rtl::OString(sDBName,sDBName.getLength(),gsl_getSystemTextEncoding())
- << " -u "
- << ::rtl::OString(_rUSR,_rUSR.getLength(),gsl_getSystemTextEncoding())
- << ","
- << ::rtl::OString(_rPWD,_rPWD.getLength(),gsl_getSystemTextEncoding());
-
- if ( !isKernelVersion(CURRENT_DB_VERSION) )
- (*pFileStream) << " -S adabas -b ";
- else
- (*pFileStream) << " -S NATIVE -b ";
-
- (*pFileStream) << ::rtl::OString(_rBatch,_rBatch.getLength(),gsl_getSystemTextEncoding())
- << " > "
- << ::rtl::OString(sPhysicalPath.GetBuffer(),sPhysicalPath.Len(),gsl_getSystemTextEncoding())
- << " 2>&1"
- << sNewLine;
-
- pFileStream->Flush();
- }
-
- oslProcess aApp;
-
-
-#if OSL_DEBUG_LEVEL > 0
- oslProcessError eError =
-#endif
- osl_executeProcess(sCommandFile.pData, NULL, 0,
- osl_Process_HIDDEN | osl_Process_WAIT,
- NULL, m_sDbWorkURL.pData, NULL, 0, &aApp);
- OSL_ENSURE( eError == osl_Process_E_None, "ODriver::LoadBatch: calling the executable failed!" );
-
-#if OSL_DEBUG_LEVEL < 2
- if(UCBContentHelper::Exists(sCommandFile))
- UCBContentHelper::Kill(sCommandFile);
-#endif
-}
-// -----------------------------------------------------------------------------
-void ODriver::fillEnvironmentVariables()
-{
- // read the environment vars
- struct env_data
- {
- const sal_Char* pAsciiEnvName;
- ::rtl::OUString* pValue;
- ::rtl::OUString* pValueURL;
- } EnvData[] = {
- { "DBWORK", &m_sDbWork, &m_sDbWorkURL },
- { "DBCONFIG", &m_sDbConfig, &m_sDbConfigURL },
- { "DBROOT", &m_sDbRoot, &m_sDbRootURL }
- };
-
- for ( size_t i = 0; i < SAL_N_ELEMENTS( EnvData ); ++i )
- {
- ::rtl::OUString sVarName = ::rtl::OUString::createFromAscii( EnvData[i].pAsciiEnvName );
- ::rtl::OUString sEnvValue;
- if(osl_getEnvironment( sVarName.pData, &sEnvValue.pData ) == osl_Process_E_None )
- {
- *EnvData[i].pValue = sEnvValue;
- String sURL;
- LocalFileHelper::ConvertPhysicalNameToURL( *EnvData[i].pValue, sURL );
- *EnvData[i].pValueURL = sURL;
- }
- }
-
- m_sDelimit = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/"));
-}
-// -----------------------------------------------------------------------------
-::rtl::OUString ODriver::generateInitFile() const
-{
- String sExt;
-#if !defined(WNT)
- sExt = String::CreateFromAscii(".sh");
-#else
- sExt = String::CreateFromAscii(".bat");
-#endif
-
- String sWorkUrl(m_sDbWorkURL);
- ::utl::TempFile aCmdFile(String::CreateFromAscii("Init"),&sExt,&sWorkUrl);
-#if !defined(WNT)
- String sPhysicalPath;
- LocalFileHelper::ConvertURLToPhysicalName(aCmdFile.GetURL(),sPhysicalPath);
- chmod(ByteString(sPhysicalPath,gsl_getSystemTextEncoding()).GetBuffer(),S_IRUSR|S_IWUSR|S_IXUSR);
-#endif
-
-#if !defined(WNT)
- SvStream* pFileStream = aCmdFile.GetStream(STREAM_WRITE);
- (*pFileStream) << "#!/bin/sh"
- << sNewLine
- << "cd \"$DBWORK\""
- << sNewLine
- << sNewLine;
- pFileStream->Flush();
-#endif
-
- return aCmdFile.GetURL();
-}
-// -----------------------------------------------------------------------------
-::rtl::OUString ODriver::getDatabaseInitFile( const TDatabaseStruct& _aDBInfo)
-{
- String sExt;
- sExt.AssignAscii(".ins");
-
-
- String sWorkUrl(m_sDbWorkURL);
- ::utl::TempFile aInitFile(String::CreateFromAscii("Init"),&sExt,&sWorkUrl);
- {
- SvStream* pFileStream = aInitFile.GetStream(STREAM_WRITE);
- (*pFileStream) << "* @(#)init.cmd 6.1.1 1994-11-10\n";
- (*pFileStream) << "init config\n";
- (*pFileStream) << "* default code:\n";
- (*pFileStream) << "ascii\n";
- (*pFileStream) << "* date time format\n";
- (*pFileStream) << "internal\n";
- (*pFileStream) << "* command timeout:\n";
- (*pFileStream) << "900\n";
- (*pFileStream) << "* lock timeout:\n";
- (*pFileStream) << "360\n";
- (*pFileStream) << "* request timeout:\n";
- (*pFileStream) << "180\n";
- (*pFileStream) << "* log mode:\n";
- (*pFileStream) << "demo\n";
- (*pFileStream) << "* log segment size:\n";
- (*pFileStream) << "0\n";
- (*pFileStream) << "* no of archive logs:\n";
- (*pFileStream) << "0\n";
- (*pFileStream) << "* no of data devspaces:\n";
- (*pFileStream) << "1\n";
- (*pFileStream) << "* mirror devspaces:\n";
- (*pFileStream) << "n\n";
- (*pFileStream) << "if $rc <> 0 then stop\n";
- (*pFileStream) << "*--- device description ---\n";
- (*pFileStream) << "* sys devspace name:\n";
- {
- String sTemp;
- LocalFileHelper::ConvertURLToPhysicalName(_aDBInfo.sSysDevSpace,sTemp);
- (*pFileStream) << ::rtl::OString(sTemp.GetBuffer(),sTemp.Len(),gsl_getSystemTextEncoding());
- }
- (*pFileStream) << "\n* log devspace size:\n";
- (*pFileStream) << ::rtl::OString::valueOf(_aDBInfo.nLogSize);
- (*pFileStream) << "\n* log devspace name:\n";
- {
- String sTemp;
- LocalFileHelper::ConvertURLToPhysicalName(_aDBInfo.sTransLogName,sTemp);
- (*pFileStream) << ::rtl::OString(sTemp.GetBuffer(),sTemp.Len(),gsl_getSystemTextEncoding());
- }
- (*pFileStream) << "\n* data devspace size:\n";
- (*pFileStream) << ::rtl::OString::valueOf(_aDBInfo.nDataSize);
- (*pFileStream) << "\n* data devspace name:\n";
- {
- String sTemp;
- LocalFileHelper::ConvertURLToPhysicalName(_aDBInfo.sDataDevName,sTemp);
- (*pFileStream) << ::rtl::OString(sTemp.GetBuffer(),sTemp.Len(),gsl_getSystemTextEncoding());
- }
-
- (*pFileStream) << "\n* END INIT CONFIG\n";
- (*pFileStream) << "if $rc <> 0 then stop\n";
- if(_aDBInfo.bRestoreDatabase)
- {
- (*pFileStream) << "RESTORE DATA QUICK FROM '";
- {
- String sTemp;
- LocalFileHelper::ConvertURLToPhysicalName(_aDBInfo.sBackupFile,sTemp);
- (*pFileStream) << ::rtl::OString(sTemp.GetBuffer(),sTemp.Len(),gsl_getSystemTextEncoding());
- }
- (*pFileStream) << "' BLOCKSIZE 8\n";
- (*pFileStream) << "if $rc <> 0 then stop\n";
- (*pFileStream) << "RESTART\n";
-
- }
- else
- {
- (*pFileStream) << "ACTIVATE SERVERDB SYSDBA \"";
- (*pFileStream) << ::rtl::OString(_aDBInfo.sSysUser,_aDBInfo.sSysUser.getLength(),gsl_getSystemTextEncoding());
- (*pFileStream) << "\" PASSWORD \"";
- (*pFileStream) << ::rtl::OString(_aDBInfo.sSysPassword,_aDBInfo.sSysPassword.getLength(),gsl_getSystemTextEncoding());
- (*pFileStream) << "\"\n";
- }
- (*pFileStream) << "if $rc <> 0 then stop\n";
- (*pFileStream) << "exit\n";
- }
- return aInitFile.GetURL();
-}
-// -----------------------------------------------------------------------------
-void ODriver::X_CONS(const ::rtl::OUString& sDBName,const ::rtl::OString& _ACTION,const ::rtl::OUString& _FILENAME)
-{
- String sPhysicalPath;
- LocalFileHelper::ConvertURLToPhysicalName(_FILENAME,sPhysicalPath);
-
- ::rtl::OUString sCommandFile = generateInitFile();
- {
- ::std::auto_ptr<SvStream> pFileStream( UcbStreamHelper::CreateStream(sCommandFile,STREAM_STD_READWRITE));
- pFileStream->Seek(STREAM_SEEK_TO_END);
-
- (*pFileStream) << "x_cons"
-#if defined(WNT)
- << ".exe"
-#endif
- << " "
- << ::rtl::OString(sDBName,sDBName.getLength(),gsl_getSystemTextEncoding())
- << " SHOW "
- << _ACTION
- << " > "
- << ::rtl::OString(sPhysicalPath.GetBuffer(),sPhysicalPath.Len(),gsl_getSystemTextEncoding())
- << sNewLine;
- pFileStream->Flush();
- }
-
- oslProcess aApp;
-
- osl_executeProcess(sCommandFile.pData, NULL, 0,
- osl_Process_HIDDEN | osl_Process_WAIT,
- NULL, m_sDbWorkURL.pData, NULL, 0, &aApp);
-
-#if OSL_DEBUG_LEVEL < 2
- if(UCBContentHelper::Exists(sCommandFile))
- UCBContentHelper::Kill(sCommandFile);
-#endif
-}
-// -----------------------------------------------------------------------------
-void ODriver::checkAndRestart(const ::rtl::OUString& sDBName,const TDatabaseStruct& _rDbInfo)
-{
- String sWorkUrl(m_sDbWorkURL);
- String sExt = String::CreateFromAscii(".st");
- ::utl::TempFile aCmdFile(String::CreateFromAscii("State"),&sExt,&sWorkUrl);
- aCmdFile.EnableKillingFile();
-
- X_CONS(sDBName,"STATE",aCmdFile.GetURL());
- SvStream* pFileStream = aCmdFile.GetStream(STREAM_SHARE_DENYALL);
- if ( pFileStream )
- {
- ByteString sStateLine;
- sal_Bool bRead = sal_True;
- sal_Int32 nStart = 2;
- while(bRead && !pFileStream->IsEof())
- {
- String aLine;
- bRead = pFileStream->ReadLine(sStateLine);
- if(bRead)
- {
- if(sStateLine.Search("WARM") != STRING_NOTFOUND)
- { // nothing to do
- nStart = 0;
- break;
- }
- else if(sStateLine.Search("COLD") != STRING_NOTFOUND)
- {
- nStart = 1;
- break;
- }
- }
- }
- switch(nStart)
- {
- case 2:
- clearDatabase(sDBName);
- X_START(sDBName);
- // don't break here
- case 1:
- XUTIL(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("RESTART")),sDBName,_rDbInfo.sControlUser,_rDbInfo.sControlPassword);
- case 0:
- break;
- }
- }
-}
-// -----------------------------------------------------------------------------
-sal_Bool ODriver::isVersion(const ::rtl::OUString& sDBName, const char* _pVersion)
-{
- String sWorkUrl(m_sDbWorkURL);
- String sExt = String::CreateFromAscii(".st");
- ::utl::TempFile aCmdFile(String::CreateFromAscii("DevSpaces"),&sExt,&sWorkUrl);
- aCmdFile.EnableKillingFile();
-
- String sPhysicalPath;
- LocalFileHelper::ConvertURLToPhysicalName(aCmdFile.GetURL(),sPhysicalPath);
-
- ::rtl::OUString sCommandFile = generateInitFile();
- {
- ::std::auto_ptr<SvStream> pFileStream( UcbStreamHelper::CreateStream(sCommandFile,STREAM_STD_READWRITE));
- pFileStream->Seek(STREAM_SEEK_TO_END);
-
- (*pFileStream) << "getparam"
-#if defined(WNT)
- << ".exe"
-#endif
- << " "
- << ::rtl::OString(sDBName,sDBName.getLength(),gsl_getSystemTextEncoding())
- << " KERNELVERSION > "
- << ::rtl::OString(sPhysicalPath.GetBuffer(),sPhysicalPath.Len(),gsl_getSystemTextEncoding())
- << sNewLine;
- }
-
- oslProcess aApp;
-
- osl_executeProcess(sCommandFile.pData, NULL, 0,
- OPROCESS_ADABAS,
- NULL, m_sDbWorkURL.pData, NULL, 0, &aApp);
-
-#if OSL_DEBUG_LEVEL < 2
- if(UCBContentHelper::Exists(sCommandFile))
- UCBContentHelper::Kill(sCommandFile);
-#endif
- SvStream* pFileStream = aCmdFile.GetStream(STREAM_STD_READWRITE);
- ByteString sStateLine;
- sal_Bool bRead = sal_True;
- sal_Bool bIsVersion = sal_False;
- while ( pFileStream && bRead && !pFileStream->IsEof() )
- {
- bRead = pFileStream->ReadLine(sStateLine);
- if ( bRead )
- {
- bIsVersion = sStateLine.GetToken(1,' ').Equals(_pVersion) != 0;
- break;
- }
- }
- return bIsVersion;
-}
-// -----------------------------------------------------------------------------
-void ODriver::checkAndInsertNewDevSpace(const ::rtl::OUString& sDBName,
- const TDatabaseStruct& _rDBInfo)
-{
- // %DBROOT%\pgm\getparam %2 DATA_CACHE_PAGES > %3
- String sWorkUrl(m_sDbWorkURL);
- String sExt = String::CreateFromAscii(".st");
- ::utl::TempFile aCmdFile(String::CreateFromAscii("DevSpaces"),&sExt,&sWorkUrl);
- aCmdFile.EnableKillingFile();
-
- String sPhysicalPath;
- LocalFileHelper::ConvertURLToPhysicalName(aCmdFile.GetURL(),sPhysicalPath);
-
- ::rtl::OUString sCommandFile = generateInitFile();
- {
- ::std::auto_ptr<SvStream> pFileStream( UcbStreamHelper::CreateStream(sCommandFile,STREAM_STD_READWRITE));
- pFileStream->Seek(STREAM_SEEK_TO_END);
-
- (*pFileStream) << "getparam"
-#if defined(WNT)
- << ".exe"
-#endif
- << " "
- << ::rtl::OString(sDBName,sDBName.getLength(),gsl_getSystemTextEncoding())
- << " DATA_CACHE_PAGES > "
- << ::rtl::OString(sPhysicalPath.GetBuffer(),sPhysicalPath.Len(),gsl_getSystemTextEncoding())
- << sNewLine;
- }
-
- oslProcess aApp;
- osl_executeProcess(sCommandFile.pData, NULL, 0,
- OPROCESS_ADABAS,
- NULL, m_sDbWorkURL.pData, NULL, 0, &aApp);
-
-#if OSL_DEBUG_LEVEL < 2
- if(UCBContentHelper::Exists(sCommandFile))
- UCBContentHelper::Kill(sCommandFile);
-#endif
- SvStream* pFileStream = aCmdFile.GetStream(STREAM_STD_READWRITE);
- rtl::OString sStateLine;
- sal_Bool bRead = sal_True;
- sal_Int32 nDataPages = 0;
- while(pFileStream && bRead && !pFileStream->IsEof())
- {
- bRead = pFileStream->ReadLine(sStateLine);
- if(bRead)
- {
- nDataPages = sStateLine.toInt32();
- if(nDataPages && nDataPages < 100)
- {
- // the space isn't big enough anymore so we increment it
- PutParam(sDBName,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DATA_CACHE_PAGES")),::rtl::OUString::valueOf(nDataPages));
- X_PARAM(sDBName,_rDBInfo.sControlUser,_rDBInfo.sControlPassword,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("BCHECK")));
- }
- }
- }
-}
-// -----------------------------------------------------------------------------
-sal_Bool ODriver::isKernelVersion(const char* _pVersion)
-{
- ::utl::TempFile aCmdFile(String::CreateFromAscii("KernelVersion"));
- aCmdFile.EnableKillingFile();
-
- String sPhysicalPath;
- LocalFileHelper::ConvertURLToPhysicalName(aCmdFile.GetURL(),sPhysicalPath);
-
- ::rtl::OUString sCommandFile = generateInitFile();
- {
- ::std::auto_ptr<SvStream> pFileStream( UcbStreamHelper::CreateStream(sCommandFile,STREAM_STD_READWRITE));
- pFileStream->Seek(STREAM_SEEK_TO_END);
-
- (*pFileStream) << "dbversion"
- << " > "
- << ::rtl::OString(sPhysicalPath.GetBuffer(),sPhysicalPath.Len(),gsl_getSystemTextEncoding())
- << sNewLine;
- }
-
- oslProcess aApp;
- osl_executeProcess(sCommandFile.pData, NULL, 0,
- OPROCESS_ADABAS,
- NULL, m_sDbWorkURL.pData, NULL, 0, &aApp);
-
-#if OSL_DEBUG_LEVEL < 2
- if(UCBContentHelper::Exists(sCommandFile))
- UCBContentHelper::Kill(sCommandFile);
-#endif
- SvStream* pFileStream = aCmdFile.GetStream(STREAM_STD_READWRITE);
- ByteString sStateLine;
- sal_Bool bRead = sal_True;
- sal_Bool bIsVersion = sal_True;
- while ( pFileStream && bRead && !pFileStream->IsEof() )
- {
- bRead = pFileStream->ReadLine(sStateLine);
- if ( bRead )
- {
- // convert a 11.02.00 to a 12.01.30 version
- bIsVersion = sStateLine.GetToken(0).Equals(_pVersion) != 0;
- break;
- }
- }
- return bIsVersion;
-}
-// -----------------------------------------------------------------------------
-void ODriver::installSystemTables( const TDatabaseStruct& _aInfo)
-{
-#if defined(WNT)
- // xutil -d %_DBNAME% -u %_CONTROL_USER%,%_CONTROL_PWD% -b %m_sDbRoot%\env\TERMCHAR.ind
- ::rtl::OUString aBatch = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("-b "));
- ::rtl::OUString sTemp2 = m_sDbRootURL + m_sDelimit
- + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("env"))
- + m_sDelimit
- + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TERMCHAR.ind"));
- String sTemp;
- sal_Bool bOk = LocalFileHelper::ConvertURLToPhysicalName(sTemp2,sTemp);
- aBatch += sTemp;
-
- XUTIL(aBatch,_aInfo.sDBName,_aInfo.sControlUser,_aInfo.sControlPassword);
-
- // xutil -d %_DBNAME% -u %_CONTROL_USER%,%_CONTROL_PWD% DIAGNOSE TRIGGER OFF
- XUTIL(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DIAGNOSE TRIGGER OFF")),_aInfo.sDBName,_aInfo.sControlUser,_aInfo.sControlPassword);
- // xload -d %_DBNAME% -u %_SYSDBA_USER%,%_SYSDBA_PWD% -S NATIVE -b %m_sDbRoot%\env\DBS.ins %_DOMAINPWD%
- {
- sTemp2 = m_sDbRootURL
- + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("env"))
- + m_sDelimit
- + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DBS.ins"));
- sTemp.Erase();
- bOk = LocalFileHelper::ConvertURLToPhysicalName(sTemp2,sTemp);
- OSL_ENSURE(bOk,"File could be converted into file system path!");
- sTemp.AppendAscii(" ");
- sTemp += String(_aInfo.sDomainPassword);
-
- LoadBatch(_aInfo.sDBName,_aInfo.sSysUser,_aInfo.sSysPassword,sTemp);
- }
- // xload -d %_DBNAME% -u DOMAIN,%_DOMAINPWD% -S NATIVE -b %m_sDbRoot%\env\XDD.ins
- {
- sTemp2 = m_sDbRootURL
- + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("env"))
- + m_sDelimit
- + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("XDD.ins"));
- sTemp.Erase();
- bOk = LocalFileHelper::ConvertURLToPhysicalName(sTemp2,sTemp);
- OSL_ENSURE(bOk,"File could be converted into file system path!");
-
- LoadBatch(_aInfo.sDBName,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DOMAIN")),_aInfo.sDomainPassword,sTemp);
- }
- // xload -d %_DBNAME% -u %_SYSDBA_USER%,%_SYSDBA_PWD% -S NATIVE -b %m_sDbRoot%\env\QP.ins
- {
- sTemp2 = m_sDbRootURL
- + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("env"))
- + m_sDelimit
- + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("QP.ins"));
- sTemp.Erase();
- bOk = LocalFileHelper::ConvertURLToPhysicalName(sTemp2,sTemp);
- OSL_ENSURE(bOk,"File could be converted into file system path!");
- LoadBatch(_aInfo.sDBName,_aInfo.sSysUser,_aInfo.sSysPassword,sTemp);
- }
- // xload -d %_DBNAME% -u DOMAIN,%_DOMAINPWD% -S NATIVE -b %m_sDbRoot%\env\SPROC.ins
- {
- sTemp2 = m_sDbRootURL
- + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("env"))
- + m_sDelimit
- + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SPROC.ins"));
- sTemp.Erase();
- bOk = LocalFileHelper::ConvertURLToPhysicalName(sTemp2,sTemp);
- OSL_ENSURE(bOk,"File could be converted into file system path!");
-
- LoadBatch(_aInfo.sDBName,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DOMAIN")),_aInfo.sDomainPassword,sTemp);
- }
-
- // xutil -d %_DBNAME% -u %_CONTROL_USER%,%_CONTROL_PWD% DIAGNOSE TRIGGER ON
- XUTIL(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DIAGNOSE TRIGGER ON")),_aInfo.sDBName,_aInfo.sControlUser,_aInfo.sControlPassword);
- // xutil -d %_DBNAME% -u %_CONTROL_USER%,%_CONTROL_PWD% SET NOLOG OFF
- XUTIL(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SET NOLOG OFF")),_aInfo.sDBName,_aInfo.sControlUser,_aInfo.sControlPassword);
- // xutil -d %_DBNAME% -u %_CONTROL_USER%,%_CONTROL_PWD% SHUTDOWN QUICK
- XUTIL(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SHUTDOWN QUICK")),_aInfo.sDBName,_aInfo.sControlUser,_aInfo.sControlPassword);
- // xutil -d %_DBNAME% -u %_CONTROL_USER%,%_CONTROL_PWD% RESTART
- XUTIL(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("RESTART")),_aInfo.sDBName,_aInfo.sControlUser,_aInfo.sControlPassword);
-
-#else // UNX
- ::rtl::OUString sCommandFile = generateInitFile();
- {
- ::std::auto_ptr<SvStream> pFileStream( UcbStreamHelper::CreateStream(sCommandFile,STREAM_STD_READWRITE));
- pFileStream->Seek(STREAM_SEEK_TO_END);
- (*pFileStream) << "x_dbinst"
- << " -d "
- << ::rtl::OString(_aInfo.sDBName,_aInfo.sDBName.getLength(),gsl_getSystemTextEncoding())
- << " -u "
- << ::rtl::OString(_aInfo.sSysUser,_aInfo.sSysUser.getLength(),gsl_getSystemTextEncoding())
- << ","
- << ::rtl::OString(_aInfo.sSysPassword,_aInfo.sSysPassword.getLength(),gsl_getSystemTextEncoding())
- << " -w "
- << ::rtl::OString(_aInfo.sDomainPassword,_aInfo.sDomainPassword.getLength(),gsl_getSystemTextEncoding())
- << " -b ";
-
- if ( isKernelVersion(ADABAS_KERNEL_11) )
- (*pFileStream) << "-i all";
- (*pFileStream)
-#if (OSL_DEBUG_LEVEL > 1) || defined(DBG_UTIL)
- << " >> /tmp/kstart.log"
-#else
- << " > /dev/null"
-#endif
- << sNewLine
- << sNewLine;
- pFileStream->Flush();
- }
- // now execute the command
-
- oslProcess aApp;
- osl_executeProcess(sCommandFile.pData, NULL, 0,
- osl_Process_WAIT | osl_Process_HIDDEN,
- NULL, m_sDbWorkURL.pData, NULL, 0, &aApp);
-#if OSL_DEBUG_LEVEL < 2
- if(UCBContentHelper::Exists(sCommandFile))
- UCBContentHelper::Kill(sCommandFile);
-#endif
-
-#endif //WNT,UNX
-}
-// -----------------------------------------------------------------------------
-void ODriver::convertOldVersion(const ::rtl::OUString& sDBName,const TDatabaseStruct& _rDbInfo)
-{
- // first we have to check if this databse is a old version and we have to update the system tables
- if ( !isVersion(sDBName,CURRENT_DB_VERSION) && isKernelVersion(CURRENT_DB_VERSION) )
- {
- if ( !_rDbInfo.sControlUser.getLength()
- || !_rDbInfo.sControlPassword.getLength())
- {
- ::connectivity::SharedResources aResources;
- const ::rtl::OUString sError( aResources.getResourceString(STR_DATABASE_NEEDS_CONVERTING) );
- ::dbtools::throwGenericSQLException(sError,*this);
- }
- String sCommandFile = m_sDbWorkURL;
- sCommandFile += String::CreateFromAscii("/xparam.prt");
- if ( UCBContentHelper::Exists(sCommandFile) )
- UCBContentHelper::Kill(sCommandFile);
- X_PARAM(sDBName,_rDbInfo.sControlUser,_rDbInfo.sControlPassword,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("BCHECK")));
-
- if ( UCBContentHelper::Exists(sCommandFile) )
- {
- {
- ::std::auto_ptr<SvStream> pFileStream( UcbStreamHelper::CreateStream(sCommandFile,STREAM_STD_READ) );
- ByteString sStateLine;
- sal_Bool bRead = sal_True;
- static ByteString s_ErrorId("-21100");
- while ( pFileStream.get() && bRead && !pFileStream->IsEof() )
- {
- bRead = pFileStream->ReadLine(sStateLine);
- if ( bRead && s_ErrorId == sStateLine.GetToken(0,' ') )
- {
- UCBContentHelper::Kill(sCommandFile);
- ::rtl::OUString sError(::rtl::OUString::createFromAscii(sStateLine.GetBuffer()));
- throw SQLException(sError,*this,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("S1000")),1000,Any());
- }
- }
- }
-
- UCBContentHelper::Kill(sCommandFile);
- }
- }
-}
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
- } // namespace adabas
-}// namespace connectivity
-// -----------------------------------------------------------------------------
-
-
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */