1*9b5730f6SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*9b5730f6SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*9b5730f6SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*9b5730f6SAndrew Rist * distributed with this work for additional information 6*9b5730f6SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*9b5730f6SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*9b5730f6SAndrew Rist * "License"); you may not use this file except in compliance 9*9b5730f6SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*9b5730f6SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*9b5730f6SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*9b5730f6SAndrew Rist * software distributed under the License is distributed on an 15*9b5730f6SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*9b5730f6SAndrew Rist * KIND, either express or implied. See the License for the 17*9b5730f6SAndrew Rist * specific language governing permissions and limitations 18*9b5730f6SAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*9b5730f6SAndrew Rist *************************************************************/ 21*9b5730f6SAndrew Rist 22*9b5730f6SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_connectivity.hxx" 26cdf0e10cSrcweir #include "TConnection.hxx" 27cdf0e10cSrcweir 28cdf0e10cSrcweir #ifndef _CONNECTIVITY_ADO_ADATABASEMETADATARESULTSET_HXX_ 29cdf0e10cSrcweir #include "odbc/ODatabaseMetaDataResultSet.hxx" 30cdf0e10cSrcweir #endif 31cdf0e10cSrcweir #include <com/sun/star/sdbc/DataType.hpp> 32cdf0e10cSrcweir #include <com/sun/star/sdbc/KeyRule.hpp> 33cdf0e10cSrcweir #include <com/sun/star/sdbc/ProcedureResult.hpp> 34cdf0e10cSrcweir #include <com/sun/star/sdbc/IndexType.hpp> 35cdf0e10cSrcweir #include <comphelper/property.hxx> 36cdf0e10cSrcweir #include <com/sun/star/lang/DisposedException.hpp> 37cdf0e10cSrcweir #include <com/sun/star/sdbc/ResultSetConcurrency.hpp> 38cdf0e10cSrcweir #include <com/sun/star/sdbc/ResultSetType.hpp> 39cdf0e10cSrcweir #include <com/sun/star/sdbc/FetchDirection.hpp> 40cdf0e10cSrcweir #include <cppuhelper/typeprovider.hxx> 41cdf0e10cSrcweir #include <comphelper/sequence.hxx> 42cdf0e10cSrcweir #include "odbc/OResultSetMetaData.hxx" 43cdf0e10cSrcweir #include "odbc/OTools.hxx" 44cdf0e10cSrcweir #include <comphelper/types.hxx> 45cdf0e10cSrcweir #include "FDatabaseMetaDataResultSetMetaData.hxx" 46cdf0e10cSrcweir #include <connectivity/dbexception.hxx> 47cdf0e10cSrcweir 48cdf0e10cSrcweir using namespace ::comphelper; 49cdf0e10cSrcweir 50cdf0e10cSrcweir 51cdf0e10cSrcweir using namespace connectivity::odbc; 52cdf0e10cSrcweir using namespace cppu; 53cdf0e10cSrcweir //------------------------------------------------------------------------------ 54cdf0e10cSrcweir using namespace ::com::sun::star::lang; 55cdf0e10cSrcweir using namespace com::sun::star::uno; 56cdf0e10cSrcweir using namespace com::sun::star::beans; 57cdf0e10cSrcweir using namespace com::sun::star::sdbc; 58cdf0e10cSrcweir using namespace com::sun::star::util; 59cdf0e10cSrcweir 60cdf0e10cSrcweir // ------------------------------------------------------------------------- 61cdf0e10cSrcweir ODatabaseMetaDataResultSet::ODatabaseMetaDataResultSet(OConnection* _pConnection) 62cdf0e10cSrcweir :ODatabaseMetaDataResultSet_BASE(m_aMutex) 63cdf0e10cSrcweir ,OPropertySetHelper(ODatabaseMetaDataResultSet_BASE::rBHelper) 64cdf0e10cSrcweir 65cdf0e10cSrcweir ,m_aStatementHandle(_pConnection->createStatementHandle()) 66cdf0e10cSrcweir ,m_aStatement(NULL) 67cdf0e10cSrcweir ,m_xMetaData(NULL) 68cdf0e10cSrcweir ,m_pRowStatusArray(NULL) 69cdf0e10cSrcweir ,m_pConnection(_pConnection) 70cdf0e10cSrcweir ,m_nTextEncoding(_pConnection->getTextEncoding()) 71cdf0e10cSrcweir ,m_nRowPos(-1) 72cdf0e10cSrcweir ,m_nLastColumnPos(0) 73cdf0e10cSrcweir ,m_nDriverColumnCount(0) 74cdf0e10cSrcweir ,m_nCurrentFetchState(0) 75cdf0e10cSrcweir ,m_bWasNull(sal_True) 76cdf0e10cSrcweir ,m_bEOF(sal_False) 77cdf0e10cSrcweir ,m_bFreeHandle(sal_False) 78cdf0e10cSrcweir { 79cdf0e10cSrcweir OSL_ENSURE(m_pConnection,"ODatabaseMetaDataResultSet::ODatabaseMetaDataResultSet: No parent set!"); 80cdf0e10cSrcweir osl_incrementInterlockedCount( &m_refCount ); 81cdf0e10cSrcweir m_pConnection->acquire(); 82cdf0e10cSrcweir m_pRowStatusArray = new SQLUSMALLINT[1]; // the default value 83cdf0e10cSrcweir osl_decrementInterlockedCount( &m_refCount ); 84cdf0e10cSrcweir // allocBuffer(); 85cdf0e10cSrcweir } 86cdf0e10cSrcweir 87cdf0e10cSrcweir // ------------------------------------------------------------------------- 88cdf0e10cSrcweir ODatabaseMetaDataResultSet::~ODatabaseMetaDataResultSet() 89cdf0e10cSrcweir { 90cdf0e10cSrcweir OSL_ENSURE(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed,"Object wasn't disposed!"); 91cdf0e10cSrcweir if(!ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed) 92cdf0e10cSrcweir { 93cdf0e10cSrcweir osl_incrementInterlockedCount( &m_refCount ); 94cdf0e10cSrcweir dispose(); 95cdf0e10cSrcweir } 96cdf0e10cSrcweir delete [] m_pRowStatusArray; 97cdf0e10cSrcweir } 98cdf0e10cSrcweir // ------------------------------------------------------------------------- 99cdf0e10cSrcweir void ODatabaseMetaDataResultSet::disposing(void) 100cdf0e10cSrcweir { 101cdf0e10cSrcweir OPropertySetHelper::disposing(); 102cdf0e10cSrcweir 103cdf0e10cSrcweir ::osl::MutexGuard aGuard(m_aMutex); 104cdf0e10cSrcweir if(m_bFreeHandle) 105cdf0e10cSrcweir m_pConnection->freeStatementHandle(m_aStatementHandle); 106cdf0e10cSrcweir 107cdf0e10cSrcweir m_aStatement = NULL; 108cdf0e10cSrcweir m_xMetaData.clear(); 109cdf0e10cSrcweir m_pConnection->release(); 110cdf0e10cSrcweir } 111cdf0e10cSrcweir // ------------------------------------------------------------------------- 112cdf0e10cSrcweir Any SAL_CALL ODatabaseMetaDataResultSet::queryInterface( const Type & rType ) throw(RuntimeException) 113cdf0e10cSrcweir { 114cdf0e10cSrcweir Any aRet = OPropertySetHelper::queryInterface(rType); 115cdf0e10cSrcweir return aRet.hasValue() ? aRet : ODatabaseMetaDataResultSet_BASE::queryInterface(rType); 116cdf0e10cSrcweir } 117cdf0e10cSrcweir // ----------------------------------------------------------------------------- 118cdf0e10cSrcweir Reference< XPropertySetInfo > SAL_CALL ODatabaseMetaDataResultSet::getPropertySetInfo( ) throw(RuntimeException) 119cdf0e10cSrcweir { 120cdf0e10cSrcweir return ::cppu::OPropertySetHelper::createPropertySetInfo(getInfoHelper()); 121cdf0e10cSrcweir } 122cdf0e10cSrcweir // ----------------------------------------------------------------------------- 123cdf0e10cSrcweir void SAL_CALL ODatabaseMetaDataResultSet::acquire() throw() 124cdf0e10cSrcweir { 125cdf0e10cSrcweir ODatabaseMetaDataResultSet_BASE::acquire(); 126cdf0e10cSrcweir } 127cdf0e10cSrcweir // ----------------------------------------------------------------------------- 128cdf0e10cSrcweir void SAL_CALL ODatabaseMetaDataResultSet::release() throw() 129cdf0e10cSrcweir { 130cdf0e10cSrcweir ODatabaseMetaDataResultSet_BASE::release(); 131cdf0e10cSrcweir } 132cdf0e10cSrcweir // ------------------------------------------------------------------------- 133cdf0e10cSrcweir Sequence< Type > SAL_CALL ODatabaseMetaDataResultSet::getTypes( ) throw(RuntimeException) 134cdf0e10cSrcweir { 135cdf0e10cSrcweir ::cppu::OTypeCollection aTypes( ::getCppuType( (const Reference< XMultiPropertySet > *)0 ), 136cdf0e10cSrcweir ::getCppuType( (const Reference< XFastPropertySet > *)0 ), 137cdf0e10cSrcweir ::getCppuType( (const Reference< XPropertySet > *)0 )); 138cdf0e10cSrcweir 139cdf0e10cSrcweir return ::comphelper::concatSequences(aTypes.getTypes(),ODatabaseMetaDataResultSet_BASE::getTypes()); 140cdf0e10cSrcweir } 141cdf0e10cSrcweir // ----------------------------------------------------------------------------- 142cdf0e10cSrcweir sal_Int32 ODatabaseMetaDataResultSet::mapColumn (sal_Int32 column) 143cdf0e10cSrcweir { 144cdf0e10cSrcweir sal_Int32 map = column; 145cdf0e10cSrcweir 146cdf0e10cSrcweir if (!m_aColMapping.empty()) 147cdf0e10cSrcweir { 148cdf0e10cSrcweir // Validate column number 149cdf0e10cSrcweir map = m_aColMapping[column]; 150cdf0e10cSrcweir } 151cdf0e10cSrcweir 152cdf0e10cSrcweir return map; 153cdf0e10cSrcweir } 154cdf0e10cSrcweir // ------------------------------------------------------------------------- 155cdf0e10cSrcweir 156cdf0e10cSrcweir sal_Int32 SAL_CALL ODatabaseMetaDataResultSet::findColumn( const ::rtl::OUString& columnName ) throw(SQLException, RuntimeException) 157cdf0e10cSrcweir { 158cdf0e10cSrcweir 159cdf0e10cSrcweir checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed); 160cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 161cdf0e10cSrcweir 162cdf0e10cSrcweir 163cdf0e10cSrcweir Reference< XResultSetMetaData > xMeta = getMetaData(); 164cdf0e10cSrcweir sal_Int32 nLen = xMeta->getColumnCount(); 165cdf0e10cSrcweir sal_Int32 i = 1; 166cdf0e10cSrcweir for(;i<=nLen;++i) 167cdf0e10cSrcweir if(xMeta->isCaseSensitive(i) ? columnName == xMeta->getColumnName(i) : 168cdf0e10cSrcweir columnName.equalsIgnoreAsciiCase(xMeta->getColumnName(i))) 169cdf0e10cSrcweir break; 170cdf0e10cSrcweir return i; 171cdf0e10cSrcweir } 172cdf0e10cSrcweir // ------------------------------------------------------------------------- 173cdf0e10cSrcweir Reference< ::com::sun::star::io::XInputStream > SAL_CALL ODatabaseMetaDataResultSet::getBinaryStream( sal_Int32 /*columnIndex*/ ) throw(SQLException, RuntimeException) 174cdf0e10cSrcweir { 175cdf0e10cSrcweir ::dbtools::throwFunctionNotSupportedException( "XRow::getBinaryStream", *this ); 176cdf0e10cSrcweir return NULL; 177cdf0e10cSrcweir } 178cdf0e10cSrcweir // ------------------------------------------------------------------------- 179cdf0e10cSrcweir Reference< ::com::sun::star::io::XInputStream > SAL_CALL ODatabaseMetaDataResultSet::getCharacterStream( sal_Int32 /*columnIndex*/ ) throw(SQLException, RuntimeException) 180cdf0e10cSrcweir { 181cdf0e10cSrcweir ::dbtools::throwFunctionNotSupportedException( "XRow::getCharacterStream", *this ); 182cdf0e10cSrcweir return NULL; 183cdf0e10cSrcweir } 184cdf0e10cSrcweir 185cdf0e10cSrcweir // ------------------------------------------------------------------------- 186cdf0e10cSrcweir sal_Bool SAL_CALL ODatabaseMetaDataResultSet::getBoolean( sal_Int32 columnIndex ) throw(SQLException, RuntimeException) 187cdf0e10cSrcweir { 188cdf0e10cSrcweir 189cdf0e10cSrcweir checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed); 190cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 191cdf0e10cSrcweir 192cdf0e10cSrcweir columnIndex = mapColumn(columnIndex); 193cdf0e10cSrcweir 194cdf0e10cSrcweir sal_Bool bRet = sal_False; 195cdf0e10cSrcweir if(columnIndex <= m_nDriverColumnCount) 196cdf0e10cSrcweir { 197cdf0e10cSrcweir sal_Int32 nType = getMetaData()->getColumnType(columnIndex); 198cdf0e10cSrcweir switch(nType) 199cdf0e10cSrcweir { 200cdf0e10cSrcweir case DataType::BIT: 201cdf0e10cSrcweir { 202cdf0e10cSrcweir sal_Int8 nValue = 0; 203cdf0e10cSrcweir OTools::getValue(m_pConnection,m_aStatementHandle,columnIndex,SQL_C_BIT,m_bWasNull,**this,&nValue,sizeof nValue); 204cdf0e10cSrcweir bRet = nValue != 0; 205cdf0e10cSrcweir } 206cdf0e10cSrcweir break; 207cdf0e10cSrcweir default: 208cdf0e10cSrcweir bRet = getInt(columnIndex) != 0; 209cdf0e10cSrcweir } 210cdf0e10cSrcweir } 211cdf0e10cSrcweir return bRet; 212cdf0e10cSrcweir } 213cdf0e10cSrcweir // ------------------------------------------------------------------------- 214cdf0e10cSrcweir 215cdf0e10cSrcweir sal_Int8 SAL_CALL ODatabaseMetaDataResultSet::getByte( sal_Int32 columnIndex ) throw(SQLException, RuntimeException) 216cdf0e10cSrcweir { 217cdf0e10cSrcweir 218cdf0e10cSrcweir checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed); 219cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 220cdf0e10cSrcweir 221cdf0e10cSrcweir 222cdf0e10cSrcweir columnIndex = mapColumn(columnIndex); 223cdf0e10cSrcweir sal_Int8 nVal = 0; 224cdf0e10cSrcweir if(columnIndex <= m_nDriverColumnCount) 225cdf0e10cSrcweir { 226cdf0e10cSrcweir OTools::getValue(m_pConnection,m_aStatementHandle,columnIndex,SQL_C_TINYINT,m_bWasNull,**this,&nVal,sizeof nVal); 227cdf0e10cSrcweir 228cdf0e10cSrcweir ::std::map<sal_Int32, ::connectivity::TInt2IntMap >::iterator aValueRangeIter; 229cdf0e10cSrcweir if ( !m_aValueRange.empty() && (aValueRangeIter = m_aValueRange.find(columnIndex)) != m_aValueRange.end()) 230cdf0e10cSrcweir return sal_Int8((*aValueRangeIter).second[(sal_Int32)nVal]); 231cdf0e10cSrcweir } 232cdf0e10cSrcweir else 233cdf0e10cSrcweir m_bWasNull = sal_True; 234cdf0e10cSrcweir return nVal; 235cdf0e10cSrcweir } 236cdf0e10cSrcweir // ------------------------------------------------------------------------- 237cdf0e10cSrcweir 238cdf0e10cSrcweir Sequence< sal_Int8 > SAL_CALL ODatabaseMetaDataResultSet::getBytes( sal_Int32 columnIndex ) throw(SQLException, RuntimeException) 239cdf0e10cSrcweir { 240cdf0e10cSrcweir 241cdf0e10cSrcweir checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed); 242cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 243cdf0e10cSrcweir 244cdf0e10cSrcweir 245cdf0e10cSrcweir columnIndex = mapColumn(columnIndex); 246cdf0e10cSrcweir if(columnIndex <= m_nDriverColumnCount) 247cdf0e10cSrcweir { 248cdf0e10cSrcweir sal_Int32 nType = getMetaData()->getColumnType(columnIndex); 249cdf0e10cSrcweir switch(nType) 250cdf0e10cSrcweir { 251cdf0e10cSrcweir case DataType::VARCHAR: 252cdf0e10cSrcweir case DataType::LONGVARCHAR: 253cdf0e10cSrcweir { 254cdf0e10cSrcweir ::rtl::OUString aRet = OTools::getStringValue(m_pConnection,m_aStatementHandle,columnIndex,SQL_C_BINARY,m_bWasNull,**this,m_nTextEncoding); 255cdf0e10cSrcweir return Sequence<sal_Int8>(reinterpret_cast<const sal_Int8*>(aRet.getStr()),sizeof(sal_Unicode)*aRet.getLength()); 256cdf0e10cSrcweir } 257cdf0e10cSrcweir } 258cdf0e10cSrcweir return OTools::getBytesValue(m_pConnection,m_aStatementHandle,columnIndex,SQL_C_BINARY,m_bWasNull,**this); 259cdf0e10cSrcweir } 260cdf0e10cSrcweir else 261cdf0e10cSrcweir m_bWasNull = sal_True; 262cdf0e10cSrcweir return Sequence<sal_Int8>(); 263cdf0e10cSrcweir } 264cdf0e10cSrcweir // ------------------------------------------------------------------------- 265cdf0e10cSrcweir 266cdf0e10cSrcweir ::com::sun::star::util::Date SAL_CALL ODatabaseMetaDataResultSet::getDate( sal_Int32 columnIndex ) throw(SQLException, RuntimeException) 267cdf0e10cSrcweir { 268cdf0e10cSrcweir checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed); 269cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 270cdf0e10cSrcweir 271cdf0e10cSrcweir 272cdf0e10cSrcweir columnIndex = mapColumn(columnIndex); 273cdf0e10cSrcweir if(columnIndex <= m_nDriverColumnCount) 274cdf0e10cSrcweir { 275cdf0e10cSrcweir DATE_STRUCT aDate; 276cdf0e10cSrcweir aDate.day = 0; 277cdf0e10cSrcweir aDate.month = 0; 278cdf0e10cSrcweir aDate.year = 0; 279cdf0e10cSrcweir OTools::getValue(m_pConnection,m_aStatementHandle,columnIndex,m_pConnection->useOldDateFormat() ? SQL_C_DATE : SQL_C_TYPE_DATE,m_bWasNull,**this,&aDate,sizeof aDate); 280cdf0e10cSrcweir return Date(aDate.day,aDate.month,aDate.year); 281cdf0e10cSrcweir } 282cdf0e10cSrcweir else 283cdf0e10cSrcweir m_bWasNull = sal_True; 284cdf0e10cSrcweir return Date(); 285cdf0e10cSrcweir } 286cdf0e10cSrcweir // ------------------------------------------------------------------------- 287cdf0e10cSrcweir 288cdf0e10cSrcweir double SAL_CALL ODatabaseMetaDataResultSet::getDouble( sal_Int32 columnIndex ) throw(SQLException, RuntimeException) 289cdf0e10cSrcweir { 290cdf0e10cSrcweir 291cdf0e10cSrcweir checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed); 292cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 293cdf0e10cSrcweir 294cdf0e10cSrcweir 295cdf0e10cSrcweir columnIndex = mapColumn(columnIndex); 296cdf0e10cSrcweir double nValue(0.0); 297cdf0e10cSrcweir if(columnIndex <= m_nDriverColumnCount) 298cdf0e10cSrcweir OTools::getValue(m_pConnection,m_aStatementHandle,columnIndex,SQL_C_DOUBLE,m_bWasNull,**this,&nValue,sizeof nValue); 299cdf0e10cSrcweir else 300cdf0e10cSrcweir m_bWasNull = sal_True; 301cdf0e10cSrcweir return nValue; 302cdf0e10cSrcweir } 303cdf0e10cSrcweir // ------------------------------------------------------------------------- 304cdf0e10cSrcweir 305cdf0e10cSrcweir float SAL_CALL ODatabaseMetaDataResultSet::getFloat( sal_Int32 columnIndex ) throw(SQLException, RuntimeException) 306cdf0e10cSrcweir { 307cdf0e10cSrcweir 308cdf0e10cSrcweir checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed); 309cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 310cdf0e10cSrcweir 311cdf0e10cSrcweir 312cdf0e10cSrcweir columnIndex = mapColumn(columnIndex); 313cdf0e10cSrcweir float nVal(0); 314cdf0e10cSrcweir if(columnIndex <= m_nDriverColumnCount) 315cdf0e10cSrcweir OTools::getValue(m_pConnection,m_aStatementHandle,columnIndex,SQL_C_FLOAT,m_bWasNull,**this,&nVal,sizeof nVal); 316cdf0e10cSrcweir else 317cdf0e10cSrcweir m_bWasNull = sal_True; 318cdf0e10cSrcweir return nVal; 319cdf0e10cSrcweir } 320cdf0e10cSrcweir // ------------------------------------------------------------------------- 321cdf0e10cSrcweir 322cdf0e10cSrcweir sal_Int32 SAL_CALL ODatabaseMetaDataResultSet::getInt( sal_Int32 columnIndex ) throw(SQLException, RuntimeException) 323cdf0e10cSrcweir { 324cdf0e10cSrcweir 325cdf0e10cSrcweir checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed); 326cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 327cdf0e10cSrcweir 328cdf0e10cSrcweir 329cdf0e10cSrcweir columnIndex = mapColumn(columnIndex); 330cdf0e10cSrcweir sal_Int32 nVal = 0; 331cdf0e10cSrcweir if(columnIndex <= m_nDriverColumnCount) 332cdf0e10cSrcweir { 333cdf0e10cSrcweir OTools::getValue(m_pConnection,m_aStatementHandle,columnIndex,SQL_C_LONG,m_bWasNull,**this,&nVal,sizeof nVal); 334cdf0e10cSrcweir 335cdf0e10cSrcweir ::std::map<sal_Int32, ::connectivity::TInt2IntMap >::iterator aValueRangeIter; 336cdf0e10cSrcweir if ( !m_aValueRange.empty() && (aValueRangeIter = m_aValueRange.find(columnIndex)) != m_aValueRange.end()) 337cdf0e10cSrcweir return (*aValueRangeIter).second[(sal_Int32)nVal]; 338cdf0e10cSrcweir } 339cdf0e10cSrcweir else 340cdf0e10cSrcweir m_bWasNull = sal_True; 341cdf0e10cSrcweir return nVal; 342cdf0e10cSrcweir } 343cdf0e10cSrcweir // ------------------------------------------------------------------------- 344cdf0e10cSrcweir 345cdf0e10cSrcweir sal_Int32 SAL_CALL ODatabaseMetaDataResultSet::getRow( ) throw(SQLException, RuntimeException) 346cdf0e10cSrcweir { 347cdf0e10cSrcweir return 0; 348cdf0e10cSrcweir } 349cdf0e10cSrcweir // ------------------------------------------------------------------------- 350cdf0e10cSrcweir 351cdf0e10cSrcweir sal_Int64 SAL_CALL ODatabaseMetaDataResultSet::getLong( sal_Int32 /*columnIndex*/ ) throw(SQLException, RuntimeException) 352cdf0e10cSrcweir { 353cdf0e10cSrcweir ::dbtools::throwFunctionNotSupportedException( "XRow::getLong", *this ); 354cdf0e10cSrcweir return 0; 355cdf0e10cSrcweir } 356cdf0e10cSrcweir // ------------------------------------------------------------------------- 357cdf0e10cSrcweir 358cdf0e10cSrcweir Reference< XResultSetMetaData > SAL_CALL ODatabaseMetaDataResultSet::getMetaData( ) throw(SQLException, RuntimeException) 359cdf0e10cSrcweir { 360cdf0e10cSrcweir checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed); 361cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 362cdf0e10cSrcweir return m_xMetaData.is() ? m_xMetaData : (m_xMetaData = new OResultSetMetaData(m_pConnection,m_aStatementHandle)); 363cdf0e10cSrcweir } 364cdf0e10cSrcweir // ------------------------------------------------------------------------- 365cdf0e10cSrcweir Reference< XArray > SAL_CALL ODatabaseMetaDataResultSet::getArray( sal_Int32 /*columnIndex*/ ) throw(SQLException, RuntimeException) 366cdf0e10cSrcweir { 367cdf0e10cSrcweir ::dbtools::throwFunctionNotSupportedException( "XRow::getArray", *this ); 368cdf0e10cSrcweir return NULL; 369cdf0e10cSrcweir } 370cdf0e10cSrcweir // ------------------------------------------------------------------------- 371cdf0e10cSrcweir Reference< XClob > SAL_CALL ODatabaseMetaDataResultSet::getClob( sal_Int32 /*columnIndex*/ ) throw(SQLException, RuntimeException) 372cdf0e10cSrcweir { 373cdf0e10cSrcweir ::dbtools::throwFunctionNotSupportedException( "XRow::getClob", *this ); 374cdf0e10cSrcweir return NULL; 375cdf0e10cSrcweir } 376cdf0e10cSrcweir // ------------------------------------------------------------------------- 377cdf0e10cSrcweir Reference< XBlob > SAL_CALL ODatabaseMetaDataResultSet::getBlob( sal_Int32 /*columnIndex*/ ) throw(SQLException, RuntimeException) 378cdf0e10cSrcweir { 379cdf0e10cSrcweir ::dbtools::throwFunctionNotSupportedException( "XRow::getBlob", *this ); 380cdf0e10cSrcweir return NULL; 381cdf0e10cSrcweir } 382cdf0e10cSrcweir // ------------------------------------------------------------------------- 383cdf0e10cSrcweir 384cdf0e10cSrcweir Reference< XRef > SAL_CALL ODatabaseMetaDataResultSet::getRef( sal_Int32 /*columnIndex*/ ) throw(SQLException, RuntimeException) 385cdf0e10cSrcweir { 386cdf0e10cSrcweir ::dbtools::throwFunctionNotSupportedException( "XRow::getRef", *this ); 387cdf0e10cSrcweir return NULL; 388cdf0e10cSrcweir } 389cdf0e10cSrcweir // ------------------------------------------------------------------------- 390cdf0e10cSrcweir 391cdf0e10cSrcweir Any SAL_CALL ODatabaseMetaDataResultSet::getObject( sal_Int32 /*columnIndex*/, const Reference< ::com::sun::star::container::XNameAccess >& /*typeMap*/ ) throw(SQLException, RuntimeException) 392cdf0e10cSrcweir { 393cdf0e10cSrcweir ::dbtools::throwFunctionNotSupportedException( "XRow::getObject", *this ); 394cdf0e10cSrcweir return Any(); 395cdf0e10cSrcweir } 396cdf0e10cSrcweir // ------------------------------------------------------------------------- 397cdf0e10cSrcweir 398cdf0e10cSrcweir sal_Int16 SAL_CALL ODatabaseMetaDataResultSet::getShort( sal_Int32 columnIndex ) throw(SQLException, RuntimeException) 399cdf0e10cSrcweir { 400cdf0e10cSrcweir 401cdf0e10cSrcweir checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed); 402cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 403cdf0e10cSrcweir 404cdf0e10cSrcweir columnIndex = mapColumn(columnIndex); 405cdf0e10cSrcweir sal_Int16 nVal = 0; 406cdf0e10cSrcweir if(columnIndex <= m_nDriverColumnCount) 407cdf0e10cSrcweir { 408cdf0e10cSrcweir OTools::getValue(m_pConnection,m_aStatementHandle,columnIndex,SQL_C_SHORT,m_bWasNull,**this,&nVal,sizeof nVal); 409cdf0e10cSrcweir 410cdf0e10cSrcweir ::std::map<sal_Int32, ::connectivity::TInt2IntMap >::iterator aValueRangeIter; 411cdf0e10cSrcweir if ( !m_aValueRange.empty() && (aValueRangeIter = m_aValueRange.find(columnIndex)) != m_aValueRange.end()) 412cdf0e10cSrcweir return sal_Int16((*aValueRangeIter).second[(sal_Int32)nVal]); 413cdf0e10cSrcweir } 414cdf0e10cSrcweir else 415cdf0e10cSrcweir m_bWasNull = sal_True; 416cdf0e10cSrcweir return nVal; 417cdf0e10cSrcweir } 418cdf0e10cSrcweir // ------------------------------------------------------------------------- 419cdf0e10cSrcweir 420cdf0e10cSrcweir ::rtl::OUString SAL_CALL ODatabaseMetaDataResultSet::getString( sal_Int32 columnIndex ) throw(SQLException, RuntimeException) 421cdf0e10cSrcweir { 422cdf0e10cSrcweir 423cdf0e10cSrcweir checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed); 424cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 425cdf0e10cSrcweir 426cdf0e10cSrcweir 427cdf0e10cSrcweir columnIndex = mapColumn(columnIndex); 428cdf0e10cSrcweir ::rtl::OUString aVal; 429cdf0e10cSrcweir if(columnIndex <= m_nDriverColumnCount) 430cdf0e10cSrcweir aVal = OTools::getStringValue(m_pConnection,m_aStatementHandle,columnIndex,impl_getColumnType_nothrow(columnIndex),m_bWasNull,**this,m_nTextEncoding); 431cdf0e10cSrcweir else 432cdf0e10cSrcweir m_bWasNull = sal_True; 433cdf0e10cSrcweir 434cdf0e10cSrcweir return aVal; 435cdf0e10cSrcweir } 436cdf0e10cSrcweir 437cdf0e10cSrcweir // ------------------------------------------------------------------------- 438cdf0e10cSrcweir 439cdf0e10cSrcweir 440cdf0e10cSrcweir ::com::sun::star::util::Time SAL_CALL ODatabaseMetaDataResultSet::getTime( sal_Int32 columnIndex ) throw(SQLException, RuntimeException) 441cdf0e10cSrcweir { 442cdf0e10cSrcweir 443cdf0e10cSrcweir checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed); 444cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 445cdf0e10cSrcweir 446cdf0e10cSrcweir 447cdf0e10cSrcweir columnIndex = mapColumn(columnIndex); 448cdf0e10cSrcweir TIME_STRUCT aTime={0,0,0}; 449cdf0e10cSrcweir if(columnIndex <= m_nDriverColumnCount) 450cdf0e10cSrcweir OTools::getValue(m_pConnection,m_aStatementHandle,columnIndex,m_pConnection->useOldDateFormat() ? SQL_C_TIME : SQL_C_TYPE_TIME,m_bWasNull,**this,&aTime,sizeof aTime); 451cdf0e10cSrcweir else 452cdf0e10cSrcweir m_bWasNull = sal_True; 453cdf0e10cSrcweir return Time(0,aTime.second,aTime.minute,aTime.hour); 454cdf0e10cSrcweir } 455cdf0e10cSrcweir // ------------------------------------------------------------------------- 456cdf0e10cSrcweir 457cdf0e10cSrcweir 458cdf0e10cSrcweir ::com::sun::star::util::DateTime SAL_CALL ODatabaseMetaDataResultSet::getTimestamp( sal_Int32 columnIndex ) throw(SQLException, RuntimeException) 459cdf0e10cSrcweir { 460cdf0e10cSrcweir 461cdf0e10cSrcweir checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed); 462cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 463cdf0e10cSrcweir 464cdf0e10cSrcweir 465cdf0e10cSrcweir columnIndex = mapColumn(columnIndex); 466cdf0e10cSrcweir TIMESTAMP_STRUCT aTime={0,0,0,0,0,0,0}; 467cdf0e10cSrcweir if(columnIndex <= m_nDriverColumnCount) 468cdf0e10cSrcweir OTools::getValue(m_pConnection,m_aStatementHandle,columnIndex,m_pConnection->useOldDateFormat() ? SQL_C_TIMESTAMP : SQL_C_TYPE_TIMESTAMP,m_bWasNull,**this,&aTime,sizeof aTime); 469cdf0e10cSrcweir else 470cdf0e10cSrcweir m_bWasNull = sal_True; 471cdf0e10cSrcweir return DateTime((sal_uInt16)aTime.fraction*1000,aTime.second,aTime.minute,aTime.hour,aTime.day,aTime.month,aTime.year); 472cdf0e10cSrcweir } 473cdf0e10cSrcweir // ------------------------------------------------------------------------- 474cdf0e10cSrcweir 475cdf0e10cSrcweir sal_Bool SAL_CALL ODatabaseMetaDataResultSet::isAfterLast( ) throw(SQLException, RuntimeException) 476cdf0e10cSrcweir { 477cdf0e10cSrcweir 478cdf0e10cSrcweir checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed); 479cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 480cdf0e10cSrcweir 481cdf0e10cSrcweir 482cdf0e10cSrcweir return m_nCurrentFetchState == SQL_NO_DATA; 483cdf0e10cSrcweir } 484cdf0e10cSrcweir // ------------------------------------------------------------------------- 485cdf0e10cSrcweir sal_Bool SAL_CALL ODatabaseMetaDataResultSet::isFirst( ) throw(SQLException, RuntimeException) 486cdf0e10cSrcweir { 487cdf0e10cSrcweir 488cdf0e10cSrcweir checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed); 489cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 490cdf0e10cSrcweir 491cdf0e10cSrcweir 492cdf0e10cSrcweir return m_nRowPos == 1; 493cdf0e10cSrcweir } 494cdf0e10cSrcweir // ------------------------------------------------------------------------- 495cdf0e10cSrcweir sal_Bool SAL_CALL ODatabaseMetaDataResultSet::isLast( ) throw(SQLException, RuntimeException) 496cdf0e10cSrcweir { 497cdf0e10cSrcweir 498cdf0e10cSrcweir checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed); 499cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 500cdf0e10cSrcweir 501cdf0e10cSrcweir 502cdf0e10cSrcweir return m_bEOF && m_nCurrentFetchState != SQL_NO_DATA; 503cdf0e10cSrcweir } 504cdf0e10cSrcweir // ------------------------------------------------------------------------- 505cdf0e10cSrcweir void SAL_CALL ODatabaseMetaDataResultSet::beforeFirst( ) throw(SQLException, RuntimeException) 506cdf0e10cSrcweir { 507cdf0e10cSrcweir 508cdf0e10cSrcweir checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed); 509cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 510cdf0e10cSrcweir 511cdf0e10cSrcweir 512cdf0e10cSrcweir if(first()) 513cdf0e10cSrcweir previous(); 514cdf0e10cSrcweir m_nCurrentFetchState = SQL_SUCCESS; 515cdf0e10cSrcweir } 516cdf0e10cSrcweir // ------------------------------------------------------------------------- 517cdf0e10cSrcweir void SAL_CALL ODatabaseMetaDataResultSet::afterLast( ) throw(SQLException, RuntimeException) 518cdf0e10cSrcweir { 519cdf0e10cSrcweir 520cdf0e10cSrcweir checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed); 521cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 522cdf0e10cSrcweir 523cdf0e10cSrcweir 524cdf0e10cSrcweir if(last()) 525cdf0e10cSrcweir next(); 526cdf0e10cSrcweir m_bEOF = sal_True; 527cdf0e10cSrcweir } 528cdf0e10cSrcweir // ------------------------------------------------------------------------- 529cdf0e10cSrcweir 530cdf0e10cSrcweir void SAL_CALL ODatabaseMetaDataResultSet::close( ) throw(SQLException, RuntimeException) 531cdf0e10cSrcweir { 532cdf0e10cSrcweir { 533cdf0e10cSrcweir 534cdf0e10cSrcweir checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed); 535cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 536cdf0e10cSrcweir 537cdf0e10cSrcweir } 538cdf0e10cSrcweir dispose(); 539cdf0e10cSrcweir } 540cdf0e10cSrcweir // ------------------------------------------------------------------------- 541cdf0e10cSrcweir 542cdf0e10cSrcweir sal_Bool SAL_CALL ODatabaseMetaDataResultSet::first( ) throw(SQLException, RuntimeException) 543cdf0e10cSrcweir { 544cdf0e10cSrcweir 545cdf0e10cSrcweir checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed); 546cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 547cdf0e10cSrcweir 548cdf0e10cSrcweir 549cdf0e10cSrcweir m_nCurrentFetchState = N3SQLFetchScroll(m_aStatementHandle,SQL_FETCH_FIRST,0); 550cdf0e10cSrcweir OTools::ThrowException(m_pConnection,m_nCurrentFetchState,m_aStatementHandle,SQL_HANDLE_STMT,*this); 551cdf0e10cSrcweir sal_Bool bRet = ( m_nCurrentFetchState == SQL_SUCCESS || m_nCurrentFetchState == SQL_SUCCESS_WITH_INFO ); 552cdf0e10cSrcweir if( bRet ) 553cdf0e10cSrcweir m_nRowPos = 1; 554cdf0e10cSrcweir return bRet; 555cdf0e10cSrcweir } 556cdf0e10cSrcweir // ------------------------------------------------------------------------- 557cdf0e10cSrcweir 558cdf0e10cSrcweir sal_Bool SAL_CALL ODatabaseMetaDataResultSet::last( ) throw(SQLException, RuntimeException) 559cdf0e10cSrcweir { 560cdf0e10cSrcweir checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed ); 561cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 562cdf0e10cSrcweir 563cdf0e10cSrcweir 564cdf0e10cSrcweir m_nCurrentFetchState = N3SQLFetchScroll(m_aStatementHandle,SQL_FETCH_LAST,0); 565cdf0e10cSrcweir OTools::ThrowException(m_pConnection,m_nCurrentFetchState,m_aStatementHandle,SQL_HANDLE_STMT,*this); 566cdf0e10cSrcweir // here I know definitely that I stand on the last record 567cdf0e10cSrcweir return (m_nCurrentFetchState == SQL_SUCCESS || m_nCurrentFetchState == SQL_SUCCESS_WITH_INFO); 568cdf0e10cSrcweir } 569cdf0e10cSrcweir // ------------------------------------------------------------------------- 570cdf0e10cSrcweir sal_Bool SAL_CALL ODatabaseMetaDataResultSet::absolute( sal_Int32 row ) throw(SQLException, RuntimeException) 571cdf0e10cSrcweir { 572cdf0e10cSrcweir 573cdf0e10cSrcweir checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed); 574cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 575cdf0e10cSrcweir 576cdf0e10cSrcweir 577cdf0e10cSrcweir m_nCurrentFetchState = N3SQLFetchScroll(m_aStatementHandle,SQL_FETCH_ABSOLUTE,row); 578cdf0e10cSrcweir OTools::ThrowException(m_pConnection,m_nCurrentFetchState,m_aStatementHandle,SQL_HANDLE_STMT,*this); 579cdf0e10cSrcweir sal_Bool bRet = m_nCurrentFetchState == SQL_SUCCESS || m_nCurrentFetchState == SQL_SUCCESS_WITH_INFO; 580cdf0e10cSrcweir if(bRet) 581cdf0e10cSrcweir m_nRowPos = row; 582cdf0e10cSrcweir return bRet; 583cdf0e10cSrcweir } 584cdf0e10cSrcweir // ------------------------------------------------------------------------- 585cdf0e10cSrcweir sal_Bool SAL_CALL ODatabaseMetaDataResultSet::relative( sal_Int32 row ) throw(SQLException, RuntimeException) 586cdf0e10cSrcweir { 587cdf0e10cSrcweir 588cdf0e10cSrcweir checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed); 589cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 590cdf0e10cSrcweir 591cdf0e10cSrcweir 592cdf0e10cSrcweir m_nCurrentFetchState = N3SQLFetchScroll(m_aStatementHandle,SQL_FETCH_RELATIVE,row); 593cdf0e10cSrcweir OTools::ThrowException(m_pConnection,m_nCurrentFetchState,m_aStatementHandle,SQL_HANDLE_STMT,*this); 594cdf0e10cSrcweir sal_Bool bRet = m_nCurrentFetchState == SQL_SUCCESS || m_nCurrentFetchState == SQL_SUCCESS_WITH_INFO; 595cdf0e10cSrcweir if(bRet) 596cdf0e10cSrcweir m_nRowPos += row; 597cdf0e10cSrcweir return bRet; 598cdf0e10cSrcweir } 599cdf0e10cSrcweir // ------------------------------------------------------------------------- 600cdf0e10cSrcweir sal_Bool SAL_CALL ODatabaseMetaDataResultSet::previous( ) throw(SQLException, RuntimeException) 601cdf0e10cSrcweir { 602cdf0e10cSrcweir 603cdf0e10cSrcweir checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed); 604cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 605cdf0e10cSrcweir 606cdf0e10cSrcweir 607cdf0e10cSrcweir m_nCurrentFetchState = N3SQLFetchScroll(m_aStatementHandle,SQL_FETCH_PRIOR,0); 608cdf0e10cSrcweir OTools::ThrowException(m_pConnection,m_nCurrentFetchState,m_aStatementHandle,SQL_HANDLE_STMT,*this); 609cdf0e10cSrcweir sal_Bool bRet = m_nCurrentFetchState == SQL_SUCCESS || m_nCurrentFetchState == SQL_SUCCESS_WITH_INFO; 610cdf0e10cSrcweir if(bRet) 611cdf0e10cSrcweir --m_nRowPos; 612cdf0e10cSrcweir return bRet; 613cdf0e10cSrcweir } 614cdf0e10cSrcweir // ------------------------------------------------------------------------- 615cdf0e10cSrcweir Reference< XInterface > SAL_CALL ODatabaseMetaDataResultSet::getStatement( ) throw(SQLException, RuntimeException) 616cdf0e10cSrcweir { 617cdf0e10cSrcweir return NULL; 618cdf0e10cSrcweir } 619cdf0e10cSrcweir // ------------------------------------------------------------------------- 620cdf0e10cSrcweir 621cdf0e10cSrcweir sal_Bool SAL_CALL ODatabaseMetaDataResultSet::rowDeleted( ) throw(SQLException, RuntimeException) 622cdf0e10cSrcweir { 623cdf0e10cSrcweir 624cdf0e10cSrcweir checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed); 625cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 626cdf0e10cSrcweir 627cdf0e10cSrcweir 628cdf0e10cSrcweir return m_pRowStatusArray[0] == SQL_ROW_DELETED; 629cdf0e10cSrcweir } 630cdf0e10cSrcweir // ------------------------------------------------------------------------- 631cdf0e10cSrcweir sal_Bool SAL_CALL ODatabaseMetaDataResultSet::rowInserted( ) throw(SQLException, RuntimeException) 632cdf0e10cSrcweir { 633cdf0e10cSrcweir checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed); 634cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 635cdf0e10cSrcweir 636cdf0e10cSrcweir 637cdf0e10cSrcweir return m_pRowStatusArray[0] == SQL_ROW_ADDED; 638cdf0e10cSrcweir } 639cdf0e10cSrcweir // ------------------------------------------------------------------------- 640cdf0e10cSrcweir sal_Bool SAL_CALL ODatabaseMetaDataResultSet::rowUpdated( ) throw(SQLException, RuntimeException) 641cdf0e10cSrcweir { 642cdf0e10cSrcweir 643cdf0e10cSrcweir checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed); 644cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 645cdf0e10cSrcweir 646cdf0e10cSrcweir 647cdf0e10cSrcweir return m_pRowStatusArray[0] == SQL_ROW_UPDATED; 648cdf0e10cSrcweir } 649cdf0e10cSrcweir // ------------------------------------------------------------------------- 650cdf0e10cSrcweir 651cdf0e10cSrcweir sal_Bool SAL_CALL ODatabaseMetaDataResultSet::isBeforeFirst( ) throw(SQLException, RuntimeException) 652cdf0e10cSrcweir { 653cdf0e10cSrcweir 654cdf0e10cSrcweir checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed); 655cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 656cdf0e10cSrcweir 657cdf0e10cSrcweir 658cdf0e10cSrcweir return m_nRowPos == 0; 659cdf0e10cSrcweir } 660cdf0e10cSrcweir // ------------------------------------------------------------------------- 661cdf0e10cSrcweir 662cdf0e10cSrcweir sal_Bool SAL_CALL ODatabaseMetaDataResultSet::next( ) throw(SQLException, RuntimeException) 663cdf0e10cSrcweir { 664cdf0e10cSrcweir 665cdf0e10cSrcweir checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed); 666cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 667cdf0e10cSrcweir 668cdf0e10cSrcweir 669cdf0e10cSrcweir // m_nCurrentFetchState = N3SQLFetchScroll(m_aStatementHandle,SQL_FETCH_NEXT,0); 670cdf0e10cSrcweir m_nCurrentFetchState = N3SQLFetch(m_aStatementHandle); 671cdf0e10cSrcweir OTools::ThrowException(m_pConnection,m_nCurrentFetchState,m_aStatementHandle,SQL_HANDLE_STMT,*this); 672cdf0e10cSrcweir return m_nCurrentFetchState == SQL_SUCCESS || m_nCurrentFetchState == SQL_SUCCESS_WITH_INFO; 673cdf0e10cSrcweir } 674cdf0e10cSrcweir // ------------------------------------------------------------------------- 675cdf0e10cSrcweir 676cdf0e10cSrcweir sal_Bool SAL_CALL ODatabaseMetaDataResultSet::wasNull( ) throw(SQLException, RuntimeException) 677cdf0e10cSrcweir { 678cdf0e10cSrcweir 679cdf0e10cSrcweir checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed); 680cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 681cdf0e10cSrcweir 682cdf0e10cSrcweir 683cdf0e10cSrcweir return m_bWasNull; 684cdf0e10cSrcweir } 685cdf0e10cSrcweir // ------------------------------------------------------------------------- 686cdf0e10cSrcweir void SAL_CALL ODatabaseMetaDataResultSet::refreshRow( ) throw(SQLException, RuntimeException) 687cdf0e10cSrcweir { 688cdf0e10cSrcweir 689cdf0e10cSrcweir checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed); 690cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 691cdf0e10cSrcweir 692cdf0e10cSrcweir } 693cdf0e10cSrcweir // ------------------------------------------------------------------------- 694cdf0e10cSrcweir 695cdf0e10cSrcweir void SAL_CALL ODatabaseMetaDataResultSet::cancel( ) throw(RuntimeException) 696cdf0e10cSrcweir { 697cdf0e10cSrcweir 698cdf0e10cSrcweir checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed); 699cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 700cdf0e10cSrcweir 701cdf0e10cSrcweir 702cdf0e10cSrcweir OTools::ThrowException(m_pConnection,N3SQLCancel(m_aStatementHandle),m_aStatementHandle,SQL_HANDLE_STMT,*this); 703cdf0e10cSrcweir } 704cdf0e10cSrcweir // ------------------------------------------------------------------------- 705cdf0e10cSrcweir void SAL_CALL ODatabaseMetaDataResultSet::clearWarnings( ) throw(SQLException, RuntimeException) 706cdf0e10cSrcweir { 707cdf0e10cSrcweir } 708cdf0e10cSrcweir // ------------------------------------------------------------------------- 709cdf0e10cSrcweir Any SAL_CALL ODatabaseMetaDataResultSet::getWarnings( ) throw(SQLException, RuntimeException) 710cdf0e10cSrcweir { 711cdf0e10cSrcweir return Any(); 712cdf0e10cSrcweir } 713cdf0e10cSrcweir //------------------------------------------------------------------------------ 714cdf0e10cSrcweir sal_Int32 ODatabaseMetaDataResultSet::getResultSetConcurrency() const throw(SQLException, RuntimeException) 715cdf0e10cSrcweir { 716cdf0e10cSrcweir return ResultSetConcurrency::READ_ONLY; 717cdf0e10cSrcweir } 718cdf0e10cSrcweir //------------------------------------------------------------------------------ 719cdf0e10cSrcweir sal_Int32 ODatabaseMetaDataResultSet::getResultSetType() const throw(SQLException, RuntimeException) 720cdf0e10cSrcweir { 721cdf0e10cSrcweir return ResultSetType::FORWARD_ONLY; 722cdf0e10cSrcweir } 723cdf0e10cSrcweir //------------------------------------------------------------------------------ 724cdf0e10cSrcweir sal_Int32 ODatabaseMetaDataResultSet::getFetchDirection() const throw(SQLException, RuntimeException) 725cdf0e10cSrcweir { 726cdf0e10cSrcweir return FetchDirection::FORWARD; 727cdf0e10cSrcweir } 728cdf0e10cSrcweir //------------------------------------------------------------------------------ 729cdf0e10cSrcweir sal_Int32 ODatabaseMetaDataResultSet::getFetchSize() const throw(SQLException, RuntimeException) 730cdf0e10cSrcweir { 731cdf0e10cSrcweir sal_Int32 nValue=1; 732cdf0e10cSrcweir return nValue; 733cdf0e10cSrcweir } 734cdf0e10cSrcweir //------------------------------------------------------------------------------ 735cdf0e10cSrcweir ::rtl::OUString ODatabaseMetaDataResultSet::getCursorName() const throw(SQLException, RuntimeException) 736cdf0e10cSrcweir { 737cdf0e10cSrcweir return ::rtl::OUString(); 738cdf0e10cSrcweir } 739cdf0e10cSrcweir 740cdf0e10cSrcweir // ------------------------------------------------------------------------- 741cdf0e10cSrcweir ::cppu::IPropertyArrayHelper* ODatabaseMetaDataResultSet::createArrayHelper( ) const 742cdf0e10cSrcweir { 743cdf0e10cSrcweir 744cdf0e10cSrcweir Sequence< com::sun::star::beans::Property > aProps(5); 745cdf0e10cSrcweir com::sun::star::beans::Property* pProperties = aProps.getArray(); 746cdf0e10cSrcweir sal_Int32 nPos = 0; 747cdf0e10cSrcweir DECL_PROP0(CURSORNAME, ::rtl::OUString); 748cdf0e10cSrcweir DECL_PROP0(FETCHDIRECTION, sal_Int32); 749cdf0e10cSrcweir DECL_PROP0(FETCHSIZE, sal_Int32); 750cdf0e10cSrcweir DECL_PROP0(RESULTSETCONCURRENCY,sal_Int32); 751cdf0e10cSrcweir DECL_PROP0(RESULTSETTYPE, sal_Int32); 752cdf0e10cSrcweir 753cdf0e10cSrcweir return new ::cppu::OPropertyArrayHelper(aProps); 754cdf0e10cSrcweir } 755cdf0e10cSrcweir // ------------------------------------------------------------------------- 756cdf0e10cSrcweir ::cppu::IPropertyArrayHelper & ODatabaseMetaDataResultSet::getInfoHelper() 757cdf0e10cSrcweir { 758cdf0e10cSrcweir return *const_cast<ODatabaseMetaDataResultSet*>(this)->getArrayHelper(); 759cdf0e10cSrcweir } 760cdf0e10cSrcweir // ------------------------------------------------------------------------- 761cdf0e10cSrcweir sal_Bool ODatabaseMetaDataResultSet::convertFastPropertyValue( 762cdf0e10cSrcweir Any & rConvertedValue, 763cdf0e10cSrcweir Any & rOldValue, 764cdf0e10cSrcweir sal_Int32 nHandle, 765cdf0e10cSrcweir const Any& rValue ) 766cdf0e10cSrcweir throw (::com::sun::star::lang::IllegalArgumentException) 767cdf0e10cSrcweir { 768cdf0e10cSrcweir switch(nHandle) 769cdf0e10cSrcweir { 770cdf0e10cSrcweir case PROPERTY_ID_CURSORNAME: 771cdf0e10cSrcweir case PROPERTY_ID_RESULTSETCONCURRENCY: 772cdf0e10cSrcweir case PROPERTY_ID_RESULTSETTYPE: 773cdf0e10cSrcweir throw ::com::sun::star::lang::IllegalArgumentException(); 774cdf0e10cSrcweir case PROPERTY_ID_FETCHDIRECTION: 775cdf0e10cSrcweir return ::comphelper::tryPropertyValue(rConvertedValue, rOldValue, rValue, getFetchDirection()); 776cdf0e10cSrcweir case PROPERTY_ID_FETCHSIZE: 777cdf0e10cSrcweir return ::comphelper::tryPropertyValue(rConvertedValue, rOldValue, rValue, getFetchSize()); 778cdf0e10cSrcweir default: 779cdf0e10cSrcweir ; 780cdf0e10cSrcweir } 781cdf0e10cSrcweir return sal_False; 782cdf0e10cSrcweir } 783cdf0e10cSrcweir // ------------------------------------------------------------------------- 784cdf0e10cSrcweir void ODatabaseMetaDataResultSet::setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const Any& /*rValue*/ ) throw (Exception) 785cdf0e10cSrcweir { 786cdf0e10cSrcweir switch(nHandle) 787cdf0e10cSrcweir { 788cdf0e10cSrcweir case PROPERTY_ID_CURSORNAME: 789cdf0e10cSrcweir case PROPERTY_ID_RESULTSETCONCURRENCY: 790cdf0e10cSrcweir case PROPERTY_ID_RESULTSETTYPE: 791cdf0e10cSrcweir case PROPERTY_ID_FETCHDIRECTION: 792cdf0e10cSrcweir case PROPERTY_ID_FETCHSIZE: 793cdf0e10cSrcweir throw Exception(); 794cdf0e10cSrcweir default: 795cdf0e10cSrcweir OSL_ENSURE(0,"setFastPropertyValue_NoBroadcast: Illegal handle value!"); 796cdf0e10cSrcweir } 797cdf0e10cSrcweir } 798cdf0e10cSrcweir // ------------------------------------------------------------------------- 799cdf0e10cSrcweir void ODatabaseMetaDataResultSet::getFastPropertyValue( Any& rValue, sal_Int32 nHandle ) const 800cdf0e10cSrcweir { 801cdf0e10cSrcweir switch(nHandle) 802cdf0e10cSrcweir { 803cdf0e10cSrcweir case PROPERTY_ID_CURSORNAME: 804cdf0e10cSrcweir rValue <<= getCursorName(); 805cdf0e10cSrcweir break; 806cdf0e10cSrcweir case PROPERTY_ID_RESULTSETCONCURRENCY: 807cdf0e10cSrcweir rValue <<= getResultSetConcurrency(); 808cdf0e10cSrcweir break; 809cdf0e10cSrcweir case PROPERTY_ID_RESULTSETTYPE: 810cdf0e10cSrcweir rValue <<= getResultSetType(); 811cdf0e10cSrcweir break; 812cdf0e10cSrcweir case PROPERTY_ID_FETCHDIRECTION: 813cdf0e10cSrcweir rValue <<= getFetchDirection(); 814cdf0e10cSrcweir break; 815cdf0e10cSrcweir case PROPERTY_ID_FETCHSIZE: 816cdf0e10cSrcweir rValue <<= getFetchSize(); 817cdf0e10cSrcweir break; 818cdf0e10cSrcweir } 819cdf0e10cSrcweir } 820cdf0e10cSrcweir // ------------------------------------------------------------------------- 821cdf0e10cSrcweir void ODatabaseMetaDataResultSet::openTypeInfo() throw(SQLException, RuntimeException) 822cdf0e10cSrcweir { 823cdf0e10cSrcweir TInt2IntMap aMap; 824cdf0e10cSrcweir aMap[SQL_BIT] = DataType::BIT; 825cdf0e10cSrcweir aMap[SQL_TINYINT] = DataType::TINYINT; 826cdf0e10cSrcweir aMap[SQL_SMALLINT] = DataType::SMALLINT; 827cdf0e10cSrcweir aMap[SQL_INTEGER] = DataType::INTEGER; 828cdf0e10cSrcweir aMap[SQL_FLOAT] = DataType::FLOAT; 829cdf0e10cSrcweir aMap[SQL_REAL] = DataType::REAL; 830cdf0e10cSrcweir aMap[SQL_DOUBLE] = DataType::DOUBLE; 831cdf0e10cSrcweir aMap[SQL_BIGINT] = DataType::BIGINT; 832cdf0e10cSrcweir 833cdf0e10cSrcweir aMap[SQL_CHAR] = DataType::CHAR; 834cdf0e10cSrcweir aMap[SQL_WCHAR] = DataType::CHAR; 835cdf0e10cSrcweir aMap[SQL_VARCHAR] = DataType::VARCHAR; 836cdf0e10cSrcweir aMap[SQL_WVARCHAR] = DataType::VARCHAR; 837cdf0e10cSrcweir aMap[SQL_LONGVARCHAR] = DataType::LONGVARCHAR; 838cdf0e10cSrcweir aMap[SQL_WLONGVARCHAR] = DataType::LONGVARCHAR; 839cdf0e10cSrcweir 840cdf0e10cSrcweir aMap[SQL_TYPE_DATE] = DataType::DATE; 841cdf0e10cSrcweir aMap[SQL_DATE] = DataType::DATE; 842cdf0e10cSrcweir aMap[SQL_TYPE_TIME] = DataType::TIME; 843cdf0e10cSrcweir aMap[SQL_TIME] = DataType::TIME; 844cdf0e10cSrcweir aMap[SQL_TYPE_TIMESTAMP] = DataType::TIMESTAMP; 845cdf0e10cSrcweir aMap[SQL_TIMESTAMP] = DataType::TIMESTAMP; 846cdf0e10cSrcweir 847cdf0e10cSrcweir aMap[SQL_DECIMAL] = DataType::DECIMAL; 848cdf0e10cSrcweir aMap[SQL_NUMERIC] = DataType::NUMERIC; 849cdf0e10cSrcweir 850cdf0e10cSrcweir aMap[SQL_BINARY] = DataType::BINARY; 851cdf0e10cSrcweir aMap[SQL_VARBINARY] = DataType::VARBINARY; 852cdf0e10cSrcweir aMap[SQL_LONGVARBINARY] = DataType::LONGVARBINARY; 853cdf0e10cSrcweir 854cdf0e10cSrcweir aMap[SQL_GUID] = DataType::VARBINARY; 855cdf0e10cSrcweir 856cdf0e10cSrcweir 857cdf0e10cSrcweir m_aValueRange[2] = aMap; 858cdf0e10cSrcweir 859cdf0e10cSrcweir OTools::ThrowException(m_pConnection,N3SQLGetTypeInfo(m_aStatementHandle, SQL_ALL_TYPES),m_aStatementHandle,SQL_HANDLE_STMT,*this); 860cdf0e10cSrcweir checkColumnCount(); 861cdf0e10cSrcweir } 862cdf0e10cSrcweir //----------------------------------------------------------------------------- 863cdf0e10cSrcweir void ODatabaseMetaDataResultSet::openTables(const Any& catalog, const ::rtl::OUString& schemaPattern, 864cdf0e10cSrcweir const ::rtl::OUString& tableNamePattern, 865cdf0e10cSrcweir const Sequence< ::rtl::OUString >& types ) throw(SQLException, RuntimeException) 866cdf0e10cSrcweir { 867cdf0e10cSrcweir m_bFreeHandle = sal_True; 868cdf0e10cSrcweir ::rtl::OString aPKQ,aPKO,aPKN,aCOL; 869cdf0e10cSrcweir const ::rtl::OUString *pSchemaPat = NULL; 870cdf0e10cSrcweir 871cdf0e10cSrcweir if(schemaPattern.toChar() != '%') 872cdf0e10cSrcweir pSchemaPat = &schemaPattern; 873cdf0e10cSrcweir else 874cdf0e10cSrcweir pSchemaPat = NULL; 875cdf0e10cSrcweir 876cdf0e10cSrcweir if ( catalog.hasValue() ) 877cdf0e10cSrcweir aPKQ = ::rtl::OUStringToOString(comphelper::getString(catalog),m_nTextEncoding); 878cdf0e10cSrcweir aPKO = ::rtl::OUStringToOString(schemaPattern,m_nTextEncoding); 879cdf0e10cSrcweir 880cdf0e10cSrcweir const char *pPKQ = catalog.hasValue() && aPKQ.getLength() ? aPKQ.getStr() : NULL, 881cdf0e10cSrcweir *pPKO = pSchemaPat && pSchemaPat->getLength() ? aPKO.getStr() : NULL, 882cdf0e10cSrcweir *pPKN = aPKN = ::rtl::OUStringToOString(tableNamePattern,m_nTextEncoding).getStr(); 883cdf0e10cSrcweir 884cdf0e10cSrcweir 885cdf0e10cSrcweir const char *pCOL = NULL; 886cdf0e10cSrcweir const char* pComma = ","; 887cdf0e10cSrcweir const ::rtl::OUString* pBegin = types.getConstArray(); 888cdf0e10cSrcweir const ::rtl::OUString* pEnd = pBegin + types.getLength(); 889cdf0e10cSrcweir for(;pBegin != pEnd;++pBegin) 890cdf0e10cSrcweir { 891cdf0e10cSrcweir aCOL += ::rtl::OUStringToOString(*pBegin,m_nTextEncoding); 892cdf0e10cSrcweir aCOL += pComma; 893cdf0e10cSrcweir } 894cdf0e10cSrcweir if ( aCOL.getLength() ) 895cdf0e10cSrcweir { 896cdf0e10cSrcweir aCOL = aCOL.replaceAt(aCOL.getLength()-1,1,pComma); 897cdf0e10cSrcweir pCOL = aCOL.getStr(); 898cdf0e10cSrcweir } 899cdf0e10cSrcweir else 900cdf0e10cSrcweir pCOL = SQL_ALL_TABLE_TYPES; 901cdf0e10cSrcweir 902cdf0e10cSrcweir SQLRETURN nRetcode = N3SQLTables(m_aStatementHandle, 903cdf0e10cSrcweir (SDB_ODBC_CHAR *) pPKQ, (catalog.hasValue() && aPKQ.getLength()) ? SQL_NTS : 0, 904cdf0e10cSrcweir (SDB_ODBC_CHAR *) pPKO, pPKO ? SQL_NTS : 0, 905cdf0e10cSrcweir (SDB_ODBC_CHAR *) pPKN, SQL_NTS, 906cdf0e10cSrcweir (SDB_ODBC_CHAR *) pCOL, pCOL ? SQL_NTS : 0); 907cdf0e10cSrcweir OTools::ThrowException(m_pConnection,nRetcode,m_aStatementHandle,SQL_HANDLE_STMT,*this); 908cdf0e10cSrcweir checkColumnCount(); 909cdf0e10cSrcweir 910cdf0e10cSrcweir } 911cdf0e10cSrcweir //----------------------------------------------------------------------------- 912cdf0e10cSrcweir void ODatabaseMetaDataResultSet::openTablesTypes( ) throw(SQLException, RuntimeException) 913cdf0e10cSrcweir { 914cdf0e10cSrcweir m_bFreeHandle = sal_True; 915cdf0e10cSrcweir SQLRETURN nRetcode = N3SQLTables(m_aStatementHandle, 916cdf0e10cSrcweir 0,0, 917cdf0e10cSrcweir 0,0, 918cdf0e10cSrcweir 0,0, 919cdf0e10cSrcweir (SDB_ODBC_CHAR *) SQL_ALL_TABLE_TYPES,SQL_NTS); 920cdf0e10cSrcweir OTools::ThrowException(m_pConnection,nRetcode,m_aStatementHandle,SQL_HANDLE_STMT,*this); 921cdf0e10cSrcweir 922cdf0e10cSrcweir m_aColMapping.clear(); 923cdf0e10cSrcweir m_aColMapping.push_back(-1); 924cdf0e10cSrcweir m_aColMapping.push_back(4); 925cdf0e10cSrcweir m_xMetaData = new OResultSetMetaData(m_pConnection,m_aStatementHandle,m_aColMapping); 926cdf0e10cSrcweir checkColumnCount(); 927cdf0e10cSrcweir } 928cdf0e10cSrcweir // ------------------------------------------------------------------------- 929cdf0e10cSrcweir void ODatabaseMetaDataResultSet::openCatalogs() throw(SQLException, RuntimeException) 930cdf0e10cSrcweir { 931cdf0e10cSrcweir m_bFreeHandle = sal_True; 932cdf0e10cSrcweir SQLRETURN nRetcode = N3SQLTables(m_aStatementHandle, 933cdf0e10cSrcweir (SDB_ODBC_CHAR *) SQL_ALL_CATALOGS,SQL_NTS, 934cdf0e10cSrcweir (SDB_ODBC_CHAR *) "",SQL_NTS, 935cdf0e10cSrcweir (SDB_ODBC_CHAR *) "",SQL_NTS, 936cdf0e10cSrcweir (SDB_ODBC_CHAR *) "",SQL_NTS); 937cdf0e10cSrcweir 938cdf0e10cSrcweir OTools::ThrowException(m_pConnection,nRetcode,m_aStatementHandle,SQL_HANDLE_STMT,*this); 939cdf0e10cSrcweir 940cdf0e10cSrcweir m_aColMapping.clear(); 941cdf0e10cSrcweir m_aColMapping.push_back(-1); 942cdf0e10cSrcweir m_aColMapping.push_back(1); 943cdf0e10cSrcweir m_xMetaData = new OResultSetMetaData(m_pConnection,m_aStatementHandle,m_aColMapping); 944cdf0e10cSrcweir checkColumnCount(); 945cdf0e10cSrcweir } 946cdf0e10cSrcweir // ------------------------------------------------------------------------- 947cdf0e10cSrcweir void ODatabaseMetaDataResultSet::openSchemas() throw(SQLException, RuntimeException) 948cdf0e10cSrcweir { 949cdf0e10cSrcweir m_bFreeHandle = sal_True; 950cdf0e10cSrcweir SQLRETURN nRetcode = N3SQLTables(m_aStatementHandle, 951cdf0e10cSrcweir (SDB_ODBC_CHAR *) "",SQL_NTS, 952cdf0e10cSrcweir (SDB_ODBC_CHAR *) SQL_ALL_SCHEMAS,SQL_NTS, 953cdf0e10cSrcweir (SDB_ODBC_CHAR *) "",SQL_NTS, 954cdf0e10cSrcweir (SDB_ODBC_CHAR *) "",SQL_NTS); 955cdf0e10cSrcweir OTools::ThrowException(m_pConnection,nRetcode,m_aStatementHandle,SQL_HANDLE_STMT,*this); 956cdf0e10cSrcweir 957cdf0e10cSrcweir m_aColMapping.clear(); 958cdf0e10cSrcweir m_aColMapping.push_back(-1); 959cdf0e10cSrcweir m_aColMapping.push_back(2); 960cdf0e10cSrcweir m_xMetaData = new OResultSetMetaData(m_pConnection,m_aStatementHandle,m_aColMapping); 961cdf0e10cSrcweir checkColumnCount(); 962cdf0e10cSrcweir } 963cdf0e10cSrcweir // ------------------------------------------------------------------------- 964cdf0e10cSrcweir void ODatabaseMetaDataResultSet::openColumnPrivileges( const Any& catalog, const ::rtl::OUString& schema, 965cdf0e10cSrcweir const ::rtl::OUString& table, const ::rtl::OUString& columnNamePattern ) 966cdf0e10cSrcweir throw(SQLException, RuntimeException) 967cdf0e10cSrcweir { 968cdf0e10cSrcweir const ::rtl::OUString *pSchemaPat = NULL; 969cdf0e10cSrcweir 970cdf0e10cSrcweir if(schema.toChar() != '%') 971cdf0e10cSrcweir pSchemaPat = &schema; 972cdf0e10cSrcweir else 973cdf0e10cSrcweir pSchemaPat = NULL; 974cdf0e10cSrcweir 975cdf0e10cSrcweir m_bFreeHandle = sal_True; 976cdf0e10cSrcweir ::rtl::OString aPKQ,aPKO,aPKN,aCOL; 977cdf0e10cSrcweir 978cdf0e10cSrcweir if ( catalog.hasValue() ) 979cdf0e10cSrcweir aPKQ = ::rtl::OUStringToOString(comphelper::getString(catalog),m_nTextEncoding); 980cdf0e10cSrcweir aPKO = ::rtl::OUStringToOString(schema,m_nTextEncoding); 981cdf0e10cSrcweir 982cdf0e10cSrcweir const char *pPKQ = catalog.hasValue() && aPKQ.getLength() ? aPKQ.getStr() : NULL, 983cdf0e10cSrcweir *pPKO = pSchemaPat && pSchemaPat->getLength() ? aPKO.getStr() : NULL, 984cdf0e10cSrcweir *pPKN = aPKN = ::rtl::OUStringToOString(table,m_nTextEncoding).getStr(), 985cdf0e10cSrcweir *pCOL = aCOL = ::rtl::OUStringToOString(columnNamePattern,m_nTextEncoding).getStr(); 986cdf0e10cSrcweir 987cdf0e10cSrcweir 988cdf0e10cSrcweir SQLRETURN nRetcode = N3SQLColumnPrivileges(m_aStatementHandle, 989cdf0e10cSrcweir (SDB_ODBC_CHAR *) pPKQ, (catalog.hasValue() && aPKQ.getLength()) ? SQL_NTS : 0, 990cdf0e10cSrcweir (SDB_ODBC_CHAR *) pPKO, pPKO ? SQL_NTS : 0 , 991cdf0e10cSrcweir (SDB_ODBC_CHAR *) pPKN, SQL_NTS, 992cdf0e10cSrcweir (SDB_ODBC_CHAR *) pCOL, SQL_NTS); 993cdf0e10cSrcweir OTools::ThrowException(m_pConnection,nRetcode,m_aStatementHandle,SQL_HANDLE_STMT,*this); 994cdf0e10cSrcweir 995cdf0e10cSrcweir checkColumnCount(); 996cdf0e10cSrcweir } 997cdf0e10cSrcweir // ------------------------------------------------------------------------- 998cdf0e10cSrcweir void ODatabaseMetaDataResultSet::openColumns( const Any& catalog, const ::rtl::OUString& schemaPattern, 999cdf0e10cSrcweir const ::rtl::OUString& tableNamePattern, const ::rtl::OUString& columnNamePattern ) 1000cdf0e10cSrcweir throw(SQLException, RuntimeException) 1001cdf0e10cSrcweir { 1002cdf0e10cSrcweir const ::rtl::OUString *pSchemaPat = NULL; 1003cdf0e10cSrcweir 1004cdf0e10cSrcweir if(schemaPattern.toChar() != '%') 1005cdf0e10cSrcweir pSchemaPat = &schemaPattern; 1006cdf0e10cSrcweir else 1007cdf0e10cSrcweir pSchemaPat = NULL; 1008cdf0e10cSrcweir 1009cdf0e10cSrcweir m_bFreeHandle = sal_True; 1010cdf0e10cSrcweir ::rtl::OString aPKQ,aPKO,aPKN,aCOL; 1011cdf0e10cSrcweir if ( catalog.hasValue() ) 1012cdf0e10cSrcweir aPKQ = ::rtl::OUStringToOString(comphelper::getString(catalog),m_nTextEncoding); 1013cdf0e10cSrcweir aPKO = ::rtl::OUStringToOString(schemaPattern,m_nTextEncoding); 1014cdf0e10cSrcweir 1015cdf0e10cSrcweir const char *pPKQ = catalog.hasValue() && aPKQ.getLength() ? aPKQ.getStr() : NULL, 1016cdf0e10cSrcweir *pPKO = pSchemaPat && pSchemaPat->getLength() && pSchemaPat->getLength() ? aPKO.getStr() : NULL, 1017cdf0e10cSrcweir *pPKN = aPKN = ::rtl::OUStringToOString(tableNamePattern,m_nTextEncoding).getStr(), 1018cdf0e10cSrcweir *pCOL = aCOL = ::rtl::OUStringToOString(columnNamePattern,m_nTextEncoding).getStr(); 1019cdf0e10cSrcweir 1020cdf0e10cSrcweir 1021cdf0e10cSrcweir SQLRETURN nRetcode = N3SQLColumns(m_aStatementHandle, 1022cdf0e10cSrcweir (SDB_ODBC_CHAR *) pPKQ, (catalog.hasValue() && aPKQ.getLength()) ? SQL_NTS : 0, 1023cdf0e10cSrcweir (SDB_ODBC_CHAR *) pPKO, pPKO ? SQL_NTS : 0, 1024cdf0e10cSrcweir (SDB_ODBC_CHAR *) pPKN, SQL_NTS, 1025cdf0e10cSrcweir (SDB_ODBC_CHAR *) pCOL, SQL_NTS); 1026cdf0e10cSrcweir 1027cdf0e10cSrcweir OTools::ThrowException(m_pConnection,nRetcode,m_aStatementHandle,SQL_HANDLE_STMT,*this); 1028cdf0e10cSrcweir TInt2IntMap aMap; 1029cdf0e10cSrcweir aMap[SQL_BIT] = DataType::BIT; 1030cdf0e10cSrcweir aMap[SQL_TINYINT] = DataType::TINYINT; 1031cdf0e10cSrcweir aMap[SQL_SMALLINT] = DataType::SMALLINT; 1032cdf0e10cSrcweir aMap[SQL_INTEGER] = DataType::INTEGER; 1033cdf0e10cSrcweir aMap[SQL_FLOAT] = DataType::FLOAT; 1034cdf0e10cSrcweir aMap[SQL_REAL] = DataType::REAL; 1035cdf0e10cSrcweir aMap[SQL_DOUBLE] = DataType::DOUBLE; 1036cdf0e10cSrcweir aMap[SQL_BIGINT] = DataType::BIGINT; 1037cdf0e10cSrcweir 1038cdf0e10cSrcweir aMap[SQL_CHAR] = DataType::CHAR; 1039cdf0e10cSrcweir aMap[SQL_WCHAR] = DataType::CHAR; 1040cdf0e10cSrcweir aMap[SQL_VARCHAR] = DataType::VARCHAR; 1041cdf0e10cSrcweir aMap[SQL_WVARCHAR] = DataType::VARCHAR; 1042cdf0e10cSrcweir aMap[SQL_LONGVARCHAR] = DataType::LONGVARCHAR; 1043cdf0e10cSrcweir aMap[SQL_WLONGVARCHAR] = DataType::LONGVARCHAR; 1044cdf0e10cSrcweir 1045cdf0e10cSrcweir aMap[SQL_TYPE_DATE] = DataType::DATE; 1046cdf0e10cSrcweir aMap[SQL_DATE] = DataType::DATE; 1047cdf0e10cSrcweir aMap[SQL_TYPE_TIME] = DataType::TIME; 1048cdf0e10cSrcweir aMap[SQL_TIME] = DataType::TIME; 1049cdf0e10cSrcweir aMap[SQL_TYPE_TIMESTAMP] = DataType::TIMESTAMP; 1050cdf0e10cSrcweir aMap[SQL_TIMESTAMP] = DataType::TIMESTAMP; 1051cdf0e10cSrcweir 1052cdf0e10cSrcweir aMap[SQL_DECIMAL] = DataType::DECIMAL; 1053cdf0e10cSrcweir aMap[SQL_NUMERIC] = DataType::NUMERIC; 1054cdf0e10cSrcweir 1055cdf0e10cSrcweir aMap[SQL_BINARY] = DataType::BINARY; 1056cdf0e10cSrcweir aMap[SQL_VARBINARY] = DataType::VARBINARY; 1057cdf0e10cSrcweir aMap[SQL_LONGVARBINARY] = DataType::LONGVARBINARY; 1058cdf0e10cSrcweir 1059cdf0e10cSrcweir aMap[SQL_GUID] = DataType::VARBINARY; 1060cdf0e10cSrcweir 1061cdf0e10cSrcweir m_aValueRange[5] = aMap; 1062cdf0e10cSrcweir checkColumnCount(); 1063cdf0e10cSrcweir } 1064cdf0e10cSrcweir // ------------------------------------------------------------------------- 1065cdf0e10cSrcweir void ODatabaseMetaDataResultSet::openProcedureColumns( const Any& catalog, const ::rtl::OUString& schemaPattern, 1066cdf0e10cSrcweir const ::rtl::OUString& procedureNamePattern,const ::rtl::OUString& columnNamePattern ) 1067cdf0e10cSrcweir throw(SQLException, RuntimeException) 1068cdf0e10cSrcweir { 1069cdf0e10cSrcweir const ::rtl::OUString *pSchemaPat = NULL; 1070cdf0e10cSrcweir 1071cdf0e10cSrcweir if(schemaPattern.toChar() != '%') 1072cdf0e10cSrcweir pSchemaPat = &schemaPattern; 1073cdf0e10cSrcweir else 1074cdf0e10cSrcweir pSchemaPat = NULL; 1075cdf0e10cSrcweir 1076cdf0e10cSrcweir m_bFreeHandle = sal_True; 1077cdf0e10cSrcweir ::rtl::OString aPKQ,aPKO,aPKN,aCOL; 1078cdf0e10cSrcweir if ( catalog.hasValue() ) 1079cdf0e10cSrcweir aPKQ = ::rtl::OUStringToOString(comphelper::getString(catalog),m_nTextEncoding); 1080cdf0e10cSrcweir aPKO = ::rtl::OUStringToOString(schemaPattern,m_nTextEncoding); 1081cdf0e10cSrcweir 1082cdf0e10cSrcweir const char *pPKQ = catalog.hasValue() && aPKQ.getLength() ? aPKQ.getStr() : NULL, 1083cdf0e10cSrcweir *pPKO = pSchemaPat && pSchemaPat->getLength() ? aPKO.getStr() : NULL, 1084cdf0e10cSrcweir *pPKN = aPKN = ::rtl::OUStringToOString(procedureNamePattern,m_nTextEncoding).getStr(), 1085cdf0e10cSrcweir *pCOL = aCOL = ::rtl::OUStringToOString(columnNamePattern,m_nTextEncoding).getStr(); 1086cdf0e10cSrcweir 1087cdf0e10cSrcweir 1088cdf0e10cSrcweir SQLRETURN nRetcode = N3SQLProcedureColumns(m_aStatementHandle, 1089cdf0e10cSrcweir (SDB_ODBC_CHAR *) pPKQ, (catalog.hasValue() && aPKQ.getLength()) ? SQL_NTS : 0, 1090cdf0e10cSrcweir (SDB_ODBC_CHAR *) pPKO, pPKO ? SQL_NTS : 0 , 1091cdf0e10cSrcweir (SDB_ODBC_CHAR *) pPKN, SQL_NTS, 1092cdf0e10cSrcweir (SDB_ODBC_CHAR *) pCOL, SQL_NTS); 1093cdf0e10cSrcweir 1094cdf0e10cSrcweir OTools::ThrowException(m_pConnection,nRetcode,m_aStatementHandle,SQL_HANDLE_STMT,*this); 1095cdf0e10cSrcweir checkColumnCount(); 1096cdf0e10cSrcweir } 1097cdf0e10cSrcweir // ------------------------------------------------------------------------- 1098cdf0e10cSrcweir void ODatabaseMetaDataResultSet::openProcedures(const Any& catalog, const ::rtl::OUString& schemaPattern, 1099cdf0e10cSrcweir const ::rtl::OUString& procedureNamePattern) 1100cdf0e10cSrcweir throw(SQLException, RuntimeException) 1101cdf0e10cSrcweir { 1102cdf0e10cSrcweir const ::rtl::OUString *pSchemaPat = NULL; 1103cdf0e10cSrcweir 1104cdf0e10cSrcweir if(schemaPattern.toChar() != '%') 1105cdf0e10cSrcweir pSchemaPat = &schemaPattern; 1106cdf0e10cSrcweir else 1107cdf0e10cSrcweir pSchemaPat = NULL; 1108cdf0e10cSrcweir 1109cdf0e10cSrcweir m_bFreeHandle = sal_True; 1110cdf0e10cSrcweir ::rtl::OString aPKQ,aPKO,aPKN,aCOL; 1111cdf0e10cSrcweir 1112cdf0e10cSrcweir if ( catalog.hasValue() ) 1113cdf0e10cSrcweir aPKQ = ::rtl::OUStringToOString(comphelper::getString(catalog),m_nTextEncoding); 1114cdf0e10cSrcweir aPKO = ::rtl::OUStringToOString(schemaPattern,m_nTextEncoding); 1115cdf0e10cSrcweir 1116cdf0e10cSrcweir const char *pPKQ = catalog.hasValue() && aPKQ.getLength() ? aPKQ.getStr() : NULL, 1117cdf0e10cSrcweir *pPKO = pSchemaPat && pSchemaPat->getLength() ? aPKO.getStr() : NULL, 1118cdf0e10cSrcweir *pPKN = aPKN = ::rtl::OUStringToOString(procedureNamePattern,m_nTextEncoding).getStr(); 1119cdf0e10cSrcweir 1120cdf0e10cSrcweir 1121cdf0e10cSrcweir SQLRETURN nRetcode = N3SQLProcedures(m_aStatementHandle, 1122cdf0e10cSrcweir (SDB_ODBC_CHAR *) pPKQ, (catalog.hasValue() && aPKQ.getLength()) ? SQL_NTS : 0, 1123cdf0e10cSrcweir (SDB_ODBC_CHAR *) pPKO, pPKO ? SQL_NTS : 0 , 1124cdf0e10cSrcweir (SDB_ODBC_CHAR *) pPKN, SQL_NTS); 1125cdf0e10cSrcweir OTools::ThrowException(m_pConnection,nRetcode,m_aStatementHandle,SQL_HANDLE_STMT,*this); 1126cdf0e10cSrcweir checkColumnCount(); 1127cdf0e10cSrcweir } 1128cdf0e10cSrcweir // ------------------------------------------------------------------------- 1129cdf0e10cSrcweir void ODatabaseMetaDataResultSet::openSpecialColumns(sal_Bool _bRowVer,const Any& catalog, const ::rtl::OUString& schema, 1130cdf0e10cSrcweir const ::rtl::OUString& table,sal_Int32 scope, sal_Bool nullable ) 1131cdf0e10cSrcweir throw(SQLException, RuntimeException) 1132cdf0e10cSrcweir { 1133cdf0e10cSrcweir const ::rtl::OUString *pSchemaPat = NULL; 1134cdf0e10cSrcweir 1135cdf0e10cSrcweir if(schema.toChar() != '%') 1136cdf0e10cSrcweir pSchemaPat = &schema; 1137cdf0e10cSrcweir else 1138cdf0e10cSrcweir pSchemaPat = NULL; 1139cdf0e10cSrcweir 1140cdf0e10cSrcweir m_bFreeHandle = sal_True; 1141cdf0e10cSrcweir ::rtl::OString aPKQ,aPKO,aPKN,aCOL; 1142cdf0e10cSrcweir if ( catalog.hasValue() ) 1143cdf0e10cSrcweir aPKQ = ::rtl::OUStringToOString(comphelper::getString(catalog),m_nTextEncoding); 1144cdf0e10cSrcweir aPKO = ::rtl::OUStringToOString(schema,m_nTextEncoding); 1145cdf0e10cSrcweir 1146cdf0e10cSrcweir const char *pPKQ = catalog.hasValue() && aPKQ.getLength() ? aPKQ.getStr() : NULL, 1147cdf0e10cSrcweir *pPKO = pSchemaPat && pSchemaPat->getLength() ? aPKO.getStr() : NULL, 1148cdf0e10cSrcweir *pPKN = aPKN = ::rtl::OUStringToOString(table,m_nTextEncoding).getStr(); 1149cdf0e10cSrcweir 1150cdf0e10cSrcweir 1151cdf0e10cSrcweir SQLRETURN nRetcode = N3SQLSpecialColumns(m_aStatementHandle,_bRowVer ? SQL_ROWVER : SQL_BEST_ROWID, 1152cdf0e10cSrcweir (SDB_ODBC_CHAR *) pPKQ, (catalog.hasValue() && aPKQ.getLength()) ? SQL_NTS : 0, 1153cdf0e10cSrcweir (SDB_ODBC_CHAR *) pPKO, pPKO ? SQL_NTS : 0 , 1154cdf0e10cSrcweir (SDB_ODBC_CHAR *) pPKN, SQL_NTS, 1155cdf0e10cSrcweir (SQLSMALLINT)scope, 1156cdf0e10cSrcweir nullable ? SQL_NULLABLE : SQL_NO_NULLS); 1157cdf0e10cSrcweir OTools::ThrowException(m_pConnection,nRetcode,m_aStatementHandle,SQL_HANDLE_STMT,*this); 1158cdf0e10cSrcweir checkColumnCount(); 1159cdf0e10cSrcweir } 1160cdf0e10cSrcweir // ------------------------------------------------------------------------- 1161cdf0e10cSrcweir void ODatabaseMetaDataResultSet::openVersionColumns(const Any& catalog, const ::rtl::OUString& schema, 1162cdf0e10cSrcweir const ::rtl::OUString& table) throw(SQLException, RuntimeException) 1163cdf0e10cSrcweir { 1164cdf0e10cSrcweir openSpecialColumns(sal_True,catalog,schema,table,SQL_SCOPE_TRANSACTION,sal_False); 1165cdf0e10cSrcweir } 1166cdf0e10cSrcweir // ------------------------------------------------------------------------- 1167cdf0e10cSrcweir void ODatabaseMetaDataResultSet::openBestRowIdentifier( const Any& catalog, const ::rtl::OUString& schema, 1168cdf0e10cSrcweir const ::rtl::OUString& table,sal_Int32 scope,sal_Bool nullable ) throw(SQLException, RuntimeException) 1169cdf0e10cSrcweir { 1170cdf0e10cSrcweir openSpecialColumns(sal_False,catalog,schema,table,scope,nullable); 1171cdf0e10cSrcweir } 1172cdf0e10cSrcweir // ------------------------------------------------------------------------- 1173cdf0e10cSrcweir void ODatabaseMetaDataResultSet::openForeignKeys( const Any& catalog, const ::rtl::OUString* schema, 1174cdf0e10cSrcweir const ::rtl::OUString* table, 1175cdf0e10cSrcweir const Any& catalog2, const ::rtl::OUString* schema2, 1176cdf0e10cSrcweir const ::rtl::OUString* table2) throw(SQLException, RuntimeException) 1177cdf0e10cSrcweir { 1178cdf0e10cSrcweir m_bFreeHandle = sal_True; 1179cdf0e10cSrcweir 1180cdf0e10cSrcweir ::rtl::OString aPKQ,aPKO,aPKN, aFKQ, aFKO, aFKN; 1181cdf0e10cSrcweir if ( catalog.hasValue() ) 1182cdf0e10cSrcweir aPKQ = ::rtl::OUStringToOString(comphelper::getString(catalog),m_nTextEncoding); 1183cdf0e10cSrcweir if ( catalog2.hasValue() ) 1184cdf0e10cSrcweir aFKQ = ::rtl::OUStringToOString(comphelper::getString(catalog2),m_nTextEncoding); 1185cdf0e10cSrcweir 1186cdf0e10cSrcweir const char *pPKQ = catalog.hasValue() && aPKQ.getLength() ? aPKQ.getStr() : NULL, 1187cdf0e10cSrcweir *pPKO = schema && schema->getLength() ? ::rtl::OUStringToOString(*schema,m_nTextEncoding).getStr() : NULL, 1188cdf0e10cSrcweir *pPKN = table ? (aPKN = ::rtl::OUStringToOString(*table,m_nTextEncoding)).getStr(): NULL, 1189cdf0e10cSrcweir *pFKQ = catalog2.hasValue() && aFKQ.getLength() ? aFKQ.getStr() : NULL, 1190cdf0e10cSrcweir *pFKO = schema2 && schema2->getLength() ? (aFKO = ::rtl::OUStringToOString(*schema2,m_nTextEncoding)).getStr() : NULL, 1191cdf0e10cSrcweir *pFKN = table2 ? (aFKN = ::rtl::OUStringToOString(*table2,m_nTextEncoding)).getStr() : NULL; 1192cdf0e10cSrcweir 1193cdf0e10cSrcweir 1194cdf0e10cSrcweir SQLRETURN nRetcode = N3SQLForeignKeys(m_aStatementHandle, 1195cdf0e10cSrcweir (SDB_ODBC_CHAR *) pPKQ, (catalog.hasValue() && aPKQ.getLength()) ? SQL_NTS : 0, 1196cdf0e10cSrcweir (SDB_ODBC_CHAR *) pPKO, pPKO ? SQL_NTS : 0, 1197cdf0e10cSrcweir (SDB_ODBC_CHAR *) pPKN, pPKN ? SQL_NTS : 0, 1198cdf0e10cSrcweir (SDB_ODBC_CHAR *) pFKQ, (catalog2.hasValue() && aFKQ.getLength()) ? SQL_NTS : 0, 1199cdf0e10cSrcweir (SDB_ODBC_CHAR *) pFKO, pFKO ? SQL_NTS : 0, 1200cdf0e10cSrcweir (SDB_ODBC_CHAR *) pFKN, SQL_NTS 1201cdf0e10cSrcweir ); 1202cdf0e10cSrcweir OTools::ThrowException(m_pConnection,nRetcode,m_aStatementHandle,SQL_HANDLE_STMT,*this); 1203cdf0e10cSrcweir checkColumnCount(); 1204cdf0e10cSrcweir } 1205cdf0e10cSrcweir // ------------------------------------------------------------------------- 1206cdf0e10cSrcweir void ODatabaseMetaDataResultSet::openImportedKeys(const Any& catalog, const ::rtl::OUString& schema, 1207cdf0e10cSrcweir const ::rtl::OUString& table) throw(SQLException, RuntimeException) 1208cdf0e10cSrcweir { 1209cdf0e10cSrcweir 1210cdf0e10cSrcweir openForeignKeys(Any(),NULL,NULL,catalog,!schema.compareToAscii("%") ? &schema : NULL,&table); 1211cdf0e10cSrcweir } 1212cdf0e10cSrcweir // ------------------------------------------------------------------------- 1213cdf0e10cSrcweir void ODatabaseMetaDataResultSet::openExportedKeys(const Any& catalog, const ::rtl::OUString& schema, 1214cdf0e10cSrcweir const ::rtl::OUString& table) throw(SQLException, RuntimeException) 1215cdf0e10cSrcweir { 1216cdf0e10cSrcweir openForeignKeys(catalog,!schema.compareToAscii("%") ? &schema : NULL,&table,Any(),NULL,NULL); 1217cdf0e10cSrcweir } 1218cdf0e10cSrcweir // ------------------------------------------------------------------------- 1219cdf0e10cSrcweir void ODatabaseMetaDataResultSet::openPrimaryKeys(const Any& catalog, const ::rtl::OUString& schema, 1220cdf0e10cSrcweir const ::rtl::OUString& table) throw(SQLException, RuntimeException) 1221cdf0e10cSrcweir { 1222cdf0e10cSrcweir const ::rtl::OUString *pSchemaPat = NULL; 1223cdf0e10cSrcweir 1224cdf0e10cSrcweir if(schema.toChar() != '%') 1225cdf0e10cSrcweir pSchemaPat = &schema; 1226cdf0e10cSrcweir else 1227cdf0e10cSrcweir pSchemaPat = NULL; 1228cdf0e10cSrcweir 1229cdf0e10cSrcweir m_bFreeHandle = sal_True; 1230cdf0e10cSrcweir ::rtl::OString aPKQ,aPKO,aPKN,aCOL; 1231cdf0e10cSrcweir 1232cdf0e10cSrcweir if ( catalog.hasValue() ) 1233cdf0e10cSrcweir aPKQ = ::rtl::OUStringToOString(comphelper::getString(catalog),m_nTextEncoding); 1234cdf0e10cSrcweir aPKO = ::rtl::OUStringToOString(schema,m_nTextEncoding); 1235cdf0e10cSrcweir 1236cdf0e10cSrcweir const char *pPKQ = catalog.hasValue() && aPKQ.getLength() ? aPKQ.getStr() : NULL, 1237cdf0e10cSrcweir *pPKO = pSchemaPat && pSchemaPat->getLength() ? aPKO.getStr() : NULL, 1238cdf0e10cSrcweir *pPKN = (aPKN = ::rtl::OUStringToOString(table,m_nTextEncoding)).getStr(); 1239cdf0e10cSrcweir 1240cdf0e10cSrcweir 1241cdf0e10cSrcweir SQLRETURN nRetcode = N3SQLPrimaryKeys(m_aStatementHandle, 1242cdf0e10cSrcweir (SDB_ODBC_CHAR *) pPKQ, (catalog.hasValue() && aPKQ.getLength()) ? SQL_NTS : 0, 1243cdf0e10cSrcweir (SDB_ODBC_CHAR *) pPKO, pPKO ? SQL_NTS : 0 , 1244cdf0e10cSrcweir (SDB_ODBC_CHAR *) pPKN, SQL_NTS); 1245cdf0e10cSrcweir OTools::ThrowException(m_pConnection,nRetcode,m_aStatementHandle,SQL_HANDLE_STMT,*this); 1246cdf0e10cSrcweir checkColumnCount(); 1247cdf0e10cSrcweir } 1248cdf0e10cSrcweir // ------------------------------------------------------------------------- 1249cdf0e10cSrcweir void ODatabaseMetaDataResultSet::openTablePrivileges(const Any& catalog, const ::rtl::OUString& schemaPattern, 1250cdf0e10cSrcweir const ::rtl::OUString& tableNamePattern) throw(SQLException, RuntimeException) 1251cdf0e10cSrcweir { 1252cdf0e10cSrcweir const ::rtl::OUString *pSchemaPat = NULL; 1253cdf0e10cSrcweir 1254cdf0e10cSrcweir if(schemaPattern.toChar() != '%') 1255cdf0e10cSrcweir pSchemaPat = &schemaPattern; 1256cdf0e10cSrcweir else 1257cdf0e10cSrcweir pSchemaPat = NULL; 1258cdf0e10cSrcweir 1259cdf0e10cSrcweir m_bFreeHandle = sal_True; 1260cdf0e10cSrcweir ::rtl::OString aPKQ,aPKO,aPKN; 1261cdf0e10cSrcweir 1262cdf0e10cSrcweir if ( catalog.hasValue() ) 1263cdf0e10cSrcweir aPKQ = ::rtl::OUStringToOString(comphelper::getString(catalog),m_nTextEncoding); 1264cdf0e10cSrcweir aPKO = ::rtl::OUStringToOString(schemaPattern,m_nTextEncoding); 1265cdf0e10cSrcweir 1266cdf0e10cSrcweir const char *pPKQ = catalog.hasValue() && aPKQ.getLength() ? aPKQ.getStr() : NULL, 1267cdf0e10cSrcweir *pPKO = pSchemaPat && pSchemaPat->getLength() ? aPKO.getStr() : NULL, 1268cdf0e10cSrcweir *pPKN = (aPKN = ::rtl::OUStringToOString(tableNamePattern,m_nTextEncoding)).getStr(); 1269cdf0e10cSrcweir 1270cdf0e10cSrcweir 1271cdf0e10cSrcweir SQLRETURN nRetcode = N3SQLTablePrivileges(m_aStatementHandle, 1272cdf0e10cSrcweir (SDB_ODBC_CHAR *) pPKQ, (catalog.hasValue() && aPKQ.getLength()) ? SQL_NTS : 0, 1273cdf0e10cSrcweir (SDB_ODBC_CHAR *) pPKO, pPKO ? SQL_NTS : 0 , 1274cdf0e10cSrcweir (SDB_ODBC_CHAR *) pPKN, SQL_NTS); 1275cdf0e10cSrcweir OTools::ThrowException(m_pConnection,nRetcode,m_aStatementHandle,SQL_HANDLE_STMT,*this); 1276cdf0e10cSrcweir checkColumnCount(); 1277cdf0e10cSrcweir } 1278cdf0e10cSrcweir // ------------------------------------------------------------------------- 1279cdf0e10cSrcweir void ODatabaseMetaDataResultSet::openIndexInfo( const Any& catalog, const ::rtl::OUString& schema, 1280cdf0e10cSrcweir const ::rtl::OUString& table,sal_Bool unique,sal_Bool approximate ) 1281cdf0e10cSrcweir throw(SQLException, RuntimeException) 1282cdf0e10cSrcweir { 1283cdf0e10cSrcweir const ::rtl::OUString *pSchemaPat = NULL; 1284cdf0e10cSrcweir 1285cdf0e10cSrcweir if(schema.toChar() != '%') 1286cdf0e10cSrcweir pSchemaPat = &schema; 1287cdf0e10cSrcweir else 1288cdf0e10cSrcweir pSchemaPat = NULL; 1289cdf0e10cSrcweir 1290cdf0e10cSrcweir m_bFreeHandle = sal_True; 1291cdf0e10cSrcweir ::rtl::OString aPKQ,aPKO,aPKN; 1292cdf0e10cSrcweir 1293cdf0e10cSrcweir if ( catalog.hasValue() ) 1294cdf0e10cSrcweir aPKQ = ::rtl::OUStringToOString(comphelper::getString(catalog),m_nTextEncoding); 1295cdf0e10cSrcweir aPKO = ::rtl::OUStringToOString(schema,m_nTextEncoding); 1296cdf0e10cSrcweir 1297cdf0e10cSrcweir const char *pPKQ = catalog.hasValue() && aPKQ.getLength() ? aPKQ.getStr() : NULL, 1298cdf0e10cSrcweir *pPKO = pSchemaPat && pSchemaPat->getLength() ? aPKO.getStr() : NULL, 1299cdf0e10cSrcweir *pPKN = (aPKN = ::rtl::OUStringToOString(table,m_nTextEncoding)).getStr(); 1300cdf0e10cSrcweir 1301cdf0e10cSrcweir 1302cdf0e10cSrcweir SQLRETURN nRetcode = N3SQLStatistics(m_aStatementHandle, 1303cdf0e10cSrcweir (SDB_ODBC_CHAR *) pPKQ, (catalog.hasValue() && aPKQ.getLength()) ? SQL_NTS : 0, 1304cdf0e10cSrcweir (SDB_ODBC_CHAR *) pPKO, pPKO ? SQL_NTS : 0 , 1305cdf0e10cSrcweir (SDB_ODBC_CHAR *) pPKN, SQL_NTS, 1306cdf0e10cSrcweir unique ? SQL_INDEX_UNIQUE : SQL_INDEX_ALL, 1307cdf0e10cSrcweir approximate); 1308cdf0e10cSrcweir OTools::ThrowException(m_pConnection,nRetcode,m_aStatementHandle,SQL_HANDLE_STMT,*this); 1309cdf0e10cSrcweir checkColumnCount(); 1310cdf0e10cSrcweir } 1311cdf0e10cSrcweir // ------------------------------------------------------------------------- 1312cdf0e10cSrcweir void ODatabaseMetaDataResultSet::checkColumnCount() 1313cdf0e10cSrcweir { 1314cdf0e10cSrcweir sal_Int16 nNumResultCols=0; 1315cdf0e10cSrcweir OTools::ThrowException(m_pConnection,N3SQLNumResultCols(m_aStatementHandle,&nNumResultCols),m_aStatementHandle,SQL_HANDLE_STMT,*this); 1316cdf0e10cSrcweir m_nDriverColumnCount = nNumResultCols; 1317cdf0e10cSrcweir } 1318cdf0e10cSrcweir // ----------------------------------------------------------------------------- 1319cdf0e10cSrcweir 1320cdf0e10cSrcweir SWORD ODatabaseMetaDataResultSet::impl_getColumnType_nothrow(sal_Int32 columnIndex) 1321cdf0e10cSrcweir { 1322cdf0e10cSrcweir ::std::map<sal_Int32,SWORD>::iterator aFind = m_aODBCColumnTypes.find(columnIndex); 1323cdf0e10cSrcweir if ( aFind == m_aODBCColumnTypes.end() ) 1324cdf0e10cSrcweir aFind = m_aODBCColumnTypes.insert(::std::map<sal_Int32,SWORD>::value_type(columnIndex,OResultSetMetaData::getColumnODBCType(m_pConnection,m_aStatementHandle,*this,columnIndex))).first; 1325cdf0e10cSrcweir return aFind->second; 1326cdf0e10cSrcweir } 1327cdf0e10cSrcweir 1328