1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 // MARKER(update_precomp.py): autogen include statement, do not remove 29 #include "precompiled_connectivity.hxx" 30 #include "TPrivilegesResultSet.hxx" 31 32 using namespace connectivity; 33 //------------------------------------------------------------------------------ 34 using namespace ::com::sun::star::beans; 35 using namespace ::com::sun::star::uno; 36 using namespace ::com::sun::star::sdbcx; 37 using namespace ::com::sun::star::sdbc; 38 using namespace ::com::sun::star::container; 39 using namespace ::com::sun::star::lang; 40 //------------------------------------------------------------------------------ 41 OResultSetPrivileges::OResultSetPrivileges( const Reference< XDatabaseMetaData>& _rxMeta 42 , const Any& catalog 43 , const ::rtl::OUString& schemaPattern 44 , const ::rtl::OUString& tableNamePattern) 45 : ODatabaseMetaDataResultSet(eTablePrivileges) 46 , m_bResetValues(sal_True) 47 { 48 osl_incrementInterlockedCount( &m_refCount ); 49 { 50 ::rtl::OUString sUserWorkingFor; 51 static Sequence< ::rtl::OUString > sTableTypes; 52 if ( sTableTypes.getLength() == 0 ) 53 { 54 // we want all catalogues, all schemas, all tables 55 sTableTypes.realloc(3); 56 sTableTypes[0] = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("VIEW")); 57 sTableTypes[1] = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TABLE")); 58 sTableTypes[2] = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%")); // just to be sure to include anything else .... 59 } 60 try 61 { 62 m_xTables = _rxMeta->getTables(catalog,schemaPattern,tableNamePattern,sTableTypes); 63 m_xRow = Reference< XRow>(m_xTables,UNO_QUERY); 64 65 sUserWorkingFor = _rxMeta->getUserName(); 66 } 67 catch(Exception&) 68 { 69 } 70 71 ODatabaseMetaDataResultSet::ORows aRows; 72 static ODatabaseMetaDataResultSet::ORow aRow(8); 73 aRow[5] = new ORowSetValueDecorator(sUserWorkingFor); 74 aRow[6] = ODatabaseMetaDataResultSet::getSelectValue(); 75 aRow[7] = new ORowSetValueDecorator(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("YES"))); 76 aRows.push_back(aRow); 77 aRow[6] = ODatabaseMetaDataResultSet::getInsertValue(); 78 aRows.push_back(aRow); 79 aRow[6] = ODatabaseMetaDataResultSet::getDeleteValue(); 80 aRows.push_back(aRow); 81 aRow[6] = ODatabaseMetaDataResultSet::getUpdateValue(); 82 aRows.push_back(aRow); 83 aRow[6] = ODatabaseMetaDataResultSet::getCreateValue(); 84 aRows.push_back(aRow); 85 aRow[6] = ODatabaseMetaDataResultSet::getReadValue(); 86 aRows.push_back(aRow); 87 aRow[6] = ODatabaseMetaDataResultSet::getAlterValue(); 88 aRows.push_back(aRow); 89 aRow[6] = ODatabaseMetaDataResultSet::getDropValue(); 90 aRows.push_back(aRow); 91 aRow[6] = new ORowSetValueDecorator(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("REFERENCE"))); 92 aRows.push_back(aRow); 93 94 setRows(aRows); 95 } 96 osl_decrementInterlockedCount( &m_refCount ); 97 } 98 //------------------------------------------------------------------------------ 99 const ORowSetValue& OResultSetPrivileges::getValue(sal_Int32 columnIndex) 100 { 101 switch(columnIndex) 102 { 103 case 1: 104 case 2: 105 case 3: 106 if ( m_xRow.is() && m_bResetValues ) 107 { 108 (*m_aRowsIter)[1] = new ORowSetValueDecorator(m_xRow->getString(1)); 109 if ( m_xRow->wasNull() ) 110 (*m_aRowsIter)[1]->setNull(); 111 (*m_aRowsIter)[2] = new ORowSetValueDecorator(m_xRow->getString(2)); 112 if ( m_xRow->wasNull() ) 113 (*m_aRowsIter)[2]->setNull(); 114 (*m_aRowsIter)[3] = new ORowSetValueDecorator(m_xRow->getString(3)); 115 if ( m_xRow->wasNull() ) 116 (*m_aRowsIter)[3]->setNull(); 117 118 m_bResetValues = sal_False; 119 } 120 } 121 return ODatabaseMetaDataResultSet::getValue(columnIndex); 122 } 123 // ----------------------------------------------------------------------------- 124 void SAL_CALL OResultSetPrivileges::disposing(void) 125 { 126 ODatabaseMetaDataResultSet::disposing(); 127 m_xTables.clear(); 128 m_xRow.clear(); 129 } 130 // ----------------------------------------------------------------------------- 131 sal_Bool SAL_CALL OResultSetPrivileges::next( ) throw(SQLException, RuntimeException) 132 { 133 ::osl::MutexGuard aGuard( m_aMutex ); 134 checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed ); 135 136 sal_Bool bReturn = sal_False; 137 if ( m_xTables.is() ) 138 { 139 if ( m_bBOF ) 140 { 141 m_bResetValues = sal_True; 142 if ( !m_xTables->next() ) 143 return sal_False; 144 } 145 146 bReturn = ODatabaseMetaDataResultSet::next(); 147 if ( !bReturn ) 148 { 149 m_bBOF = sal_False; 150 m_bResetValues = bReturn = m_xTables->next(); 151 } 152 } 153 return bReturn; 154 } 155 // ----------------------------------------------------------------------------- 156