1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_connectivity.hxx" 30*cdf0e10cSrcweir #include "hsqldb/HUser.hxx" 31*cdf0e10cSrcweir #include <com/sun/star/sdbc/XRow.hpp> 32*cdf0e10cSrcweir #include <com/sun/star/sdbc/XResultSet.hpp> 33*cdf0e10cSrcweir #include "connectivity/dbtools.hxx" 34*cdf0e10cSrcweir #include "connectivity/dbexception.hxx" 35*cdf0e10cSrcweir #include <com/sun/star/sdbcx/Privilege.hpp> 36*cdf0e10cSrcweir #include <com/sun/star/sdbcx/PrivilegeObject.hpp> 37*cdf0e10cSrcweir #include "TConnection.hxx" 38*cdf0e10cSrcweir #include "resource/hsqldb_res.hrc" 39*cdf0e10cSrcweir 40*cdf0e10cSrcweir using namespace connectivity; 41*cdf0e10cSrcweir using namespace connectivity::hsqldb; 42*cdf0e10cSrcweir using namespace ::com::sun::star::uno; 43*cdf0e10cSrcweir using namespace ::com::sun::star::beans; 44*cdf0e10cSrcweir using namespace ::com::sun::star::sdbcx; 45*cdf0e10cSrcweir using namespace ::com::sun::star::sdbc; 46*cdf0e10cSrcweir using namespace ::com::sun::star::container; 47*cdf0e10cSrcweir using namespace ::com::sun::star::lang; 48*cdf0e10cSrcweir // ------------------------------------------------------------------------- 49*cdf0e10cSrcweir OHSQLUser::OHSQLUser( const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _xConnection) : connectivity::sdbcx::OUser(sal_True) 50*cdf0e10cSrcweir ,m_xConnection(_xConnection) 51*cdf0e10cSrcweir { 52*cdf0e10cSrcweir construct(); 53*cdf0e10cSrcweir } 54*cdf0e10cSrcweir // ------------------------------------------------------------------------- 55*cdf0e10cSrcweir OHSQLUser::OHSQLUser( const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _xConnection, 56*cdf0e10cSrcweir const ::rtl::OUString& _Name 57*cdf0e10cSrcweir ) : connectivity::sdbcx::OUser(_Name,sal_True) 58*cdf0e10cSrcweir ,m_xConnection(_xConnection) 59*cdf0e10cSrcweir { 60*cdf0e10cSrcweir construct(); 61*cdf0e10cSrcweir } 62*cdf0e10cSrcweir // ------------------------------------------------------------------------- 63*cdf0e10cSrcweir void OHSQLUser::refreshGroups() 64*cdf0e10cSrcweir { 65*cdf0e10cSrcweir } 66*cdf0e10cSrcweir // ------------------------------------------------------------------------- 67*cdf0e10cSrcweir OUserExtend::OUserExtend( const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _xConnection) : OHSQLUser(_xConnection) 68*cdf0e10cSrcweir { 69*cdf0e10cSrcweir construct(); 70*cdf0e10cSrcweir } 71*cdf0e10cSrcweir // ------------------------------------------------------------------------- 72*cdf0e10cSrcweir typedef connectivity::sdbcx::OUser OUser_TYPEDEF; 73*cdf0e10cSrcweir void OUserExtend::construct() 74*cdf0e10cSrcweir { 75*cdf0e10cSrcweir registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_PASSWORD), PROPERTY_ID_PASSWORD,0,&m_Password,::getCppuType(reinterpret_cast< ::rtl::OUString*>(NULL))); 76*cdf0e10cSrcweir } 77*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 78*cdf0e10cSrcweir cppu::IPropertyArrayHelper* OUserExtend::createArrayHelper() const 79*cdf0e10cSrcweir { 80*cdf0e10cSrcweir Sequence< Property > aProps; 81*cdf0e10cSrcweir describeProperties(aProps); 82*cdf0e10cSrcweir return new cppu::OPropertyArrayHelper(aProps); 83*cdf0e10cSrcweir } 84*cdf0e10cSrcweir // ------------------------------------------------------------------------- 85*cdf0e10cSrcweir cppu::IPropertyArrayHelper & OUserExtend::getInfoHelper() 86*cdf0e10cSrcweir { 87*cdf0e10cSrcweir return *OUserExtend_PROP::getArrayHelper(); 88*cdf0e10cSrcweir } 89*cdf0e10cSrcweir typedef connectivity::sdbcx::OUser_BASE OUser_BASE_RBHELPER; 90*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 91*cdf0e10cSrcweir sal_Int32 SAL_CALL OHSQLUser::getPrivileges( const ::rtl::OUString& objName, sal_Int32 objType ) throw(SQLException, RuntimeException) 92*cdf0e10cSrcweir { 93*cdf0e10cSrcweir ::osl::MutexGuard aGuard(m_aMutex); 94*cdf0e10cSrcweir checkDisposed(OUser_BASE_RBHELPER::rBHelper.bDisposed); 95*cdf0e10cSrcweir 96*cdf0e10cSrcweir sal_Int32 nRights,nRightsWithGrant; 97*cdf0e10cSrcweir findPrivilegesAndGrantPrivileges(objName,objType,nRights,nRightsWithGrant); 98*cdf0e10cSrcweir return nRights; 99*cdf0e10cSrcweir } 100*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 101*cdf0e10cSrcweir void OHSQLUser::findPrivilegesAndGrantPrivileges(const ::rtl::OUString& objName, sal_Int32 objType,sal_Int32& nRights,sal_Int32& nRightsWithGrant) throw(SQLException, RuntimeException) 102*cdf0e10cSrcweir { 103*cdf0e10cSrcweir nRightsWithGrant = nRights = 0; 104*cdf0e10cSrcweir // first we need to create the sql stmt to select the privs 105*cdf0e10cSrcweir Reference<XDatabaseMetaData> xMeta = m_xConnection->getMetaData(); 106*cdf0e10cSrcweir ::rtl::OUString sCatalog,sSchema,sTable; 107*cdf0e10cSrcweir ::dbtools::qualifiedNameComponents(xMeta,objName,sCatalog,sSchema,sTable,::dbtools::eInDataManipulation); 108*cdf0e10cSrcweir Reference<XResultSet> xRes; 109*cdf0e10cSrcweir switch(objType) 110*cdf0e10cSrcweir { 111*cdf0e10cSrcweir case PrivilegeObject::TABLE: 112*cdf0e10cSrcweir case PrivilegeObject::VIEW: 113*cdf0e10cSrcweir { 114*cdf0e10cSrcweir Any aCatalog; 115*cdf0e10cSrcweir if ( sCatalog.getLength() ) 116*cdf0e10cSrcweir aCatalog <<= sCatalog; 117*cdf0e10cSrcweir xRes = xMeta->getTablePrivileges(aCatalog,sSchema,sTable); 118*cdf0e10cSrcweir } 119*cdf0e10cSrcweir break; 120*cdf0e10cSrcweir 121*cdf0e10cSrcweir case PrivilegeObject::COLUMN: 122*cdf0e10cSrcweir { 123*cdf0e10cSrcweir Any aCatalog; 124*cdf0e10cSrcweir if ( sCatalog.getLength() ) 125*cdf0e10cSrcweir aCatalog <<= sCatalog; 126*cdf0e10cSrcweir xRes = xMeta->getColumnPrivileges(aCatalog,sSchema,sTable,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("%"))); 127*cdf0e10cSrcweir } 128*cdf0e10cSrcweir break; 129*cdf0e10cSrcweir } 130*cdf0e10cSrcweir 131*cdf0e10cSrcweir if ( xRes.is() ) 132*cdf0e10cSrcweir { 133*cdf0e10cSrcweir static const ::rtl::OUString sSELECT = ::rtl::OUString::createFromAscii("SELECT"); 134*cdf0e10cSrcweir static const ::rtl::OUString sINSERT = ::rtl::OUString::createFromAscii("INSERT"); 135*cdf0e10cSrcweir static const ::rtl::OUString sUPDATE = ::rtl::OUString::createFromAscii("UPDATE"); 136*cdf0e10cSrcweir static const ::rtl::OUString sDELETE = ::rtl::OUString::createFromAscii("DELETE"); 137*cdf0e10cSrcweir static const ::rtl::OUString sREAD = ::rtl::OUString::createFromAscii("READ"); 138*cdf0e10cSrcweir static const ::rtl::OUString sCREATE = ::rtl::OUString::createFromAscii("CREATE"); 139*cdf0e10cSrcweir static const ::rtl::OUString sALTER = ::rtl::OUString::createFromAscii("ALTER"); 140*cdf0e10cSrcweir static const ::rtl::OUString sREFERENCE = ::rtl::OUString::createFromAscii("REFERENCE"); 141*cdf0e10cSrcweir static const ::rtl::OUString sDROP = ::rtl::OUString::createFromAscii("DROP"); 142*cdf0e10cSrcweir static const ::rtl::OUString sYes = ::rtl::OUString::createFromAscii("YES"); 143*cdf0e10cSrcweir 144*cdf0e10cSrcweir nRightsWithGrant = nRights = 0; 145*cdf0e10cSrcweir 146*cdf0e10cSrcweir Reference<XRow> xCurrentRow(xRes,UNO_QUERY); 147*cdf0e10cSrcweir while( xCurrentRow.is() && xRes->next() ) 148*cdf0e10cSrcweir { 149*cdf0e10cSrcweir ::rtl::OUString sGrantee = xCurrentRow->getString(5); 150*cdf0e10cSrcweir ::rtl::OUString sPrivilege = xCurrentRow->getString(6); 151*cdf0e10cSrcweir ::rtl::OUString sGrantable = xCurrentRow->getString(7); 152*cdf0e10cSrcweir 153*cdf0e10cSrcweir if (!m_Name.equalsIgnoreAsciiCase(sGrantee)) 154*cdf0e10cSrcweir continue; 155*cdf0e10cSrcweir 156*cdf0e10cSrcweir if (sPrivilege.equalsIgnoreAsciiCase(sSELECT)) 157*cdf0e10cSrcweir { 158*cdf0e10cSrcweir nRights |= Privilege::SELECT; 159*cdf0e10cSrcweir if ( sGrantable.equalsIgnoreAsciiCase(sYes) ) 160*cdf0e10cSrcweir nRightsWithGrant |= Privilege::SELECT; 161*cdf0e10cSrcweir } 162*cdf0e10cSrcweir else if (sPrivilege.equalsIgnoreAsciiCase(sINSERT)) 163*cdf0e10cSrcweir { 164*cdf0e10cSrcweir nRights |= Privilege::INSERT; 165*cdf0e10cSrcweir if ( sGrantable.equalsIgnoreAsciiCase(sYes) ) 166*cdf0e10cSrcweir nRightsWithGrant |= Privilege::INSERT; 167*cdf0e10cSrcweir } 168*cdf0e10cSrcweir else if (sPrivilege.equalsIgnoreAsciiCase(sUPDATE)) 169*cdf0e10cSrcweir { 170*cdf0e10cSrcweir nRights |= Privilege::UPDATE; 171*cdf0e10cSrcweir if ( sGrantable.equalsIgnoreAsciiCase(sYes) ) 172*cdf0e10cSrcweir nRightsWithGrant |= Privilege::UPDATE; 173*cdf0e10cSrcweir } 174*cdf0e10cSrcweir else if (sPrivilege.equalsIgnoreAsciiCase(sDELETE)) 175*cdf0e10cSrcweir { 176*cdf0e10cSrcweir nRights |= Privilege::DELETE; 177*cdf0e10cSrcweir if ( sGrantable.equalsIgnoreAsciiCase(sYes) ) 178*cdf0e10cSrcweir nRightsWithGrant |= Privilege::DELETE; 179*cdf0e10cSrcweir } 180*cdf0e10cSrcweir else if (sPrivilege.equalsIgnoreAsciiCase(sREAD)) 181*cdf0e10cSrcweir { 182*cdf0e10cSrcweir nRights |= Privilege::READ; 183*cdf0e10cSrcweir if ( sGrantable.equalsIgnoreAsciiCase(sYes) ) 184*cdf0e10cSrcweir nRightsWithGrant |= Privilege::READ; 185*cdf0e10cSrcweir } 186*cdf0e10cSrcweir else if (sPrivilege.equalsIgnoreAsciiCase(sCREATE)) 187*cdf0e10cSrcweir { 188*cdf0e10cSrcweir nRights |= Privilege::CREATE; 189*cdf0e10cSrcweir if ( sGrantable.equalsIgnoreAsciiCase(sYes) ) 190*cdf0e10cSrcweir nRightsWithGrant |= Privilege::CREATE; 191*cdf0e10cSrcweir } 192*cdf0e10cSrcweir else if (sPrivilege.equalsIgnoreAsciiCase(sALTER)) 193*cdf0e10cSrcweir { 194*cdf0e10cSrcweir nRights |= Privilege::ALTER; 195*cdf0e10cSrcweir if ( sGrantable.equalsIgnoreAsciiCase(sYes) ) 196*cdf0e10cSrcweir nRightsWithGrant |= Privilege::ALTER; 197*cdf0e10cSrcweir } 198*cdf0e10cSrcweir else if (sPrivilege.equalsIgnoreAsciiCase(sREFERENCE)) 199*cdf0e10cSrcweir { 200*cdf0e10cSrcweir nRights |= Privilege::REFERENCE; 201*cdf0e10cSrcweir if ( sGrantable.equalsIgnoreAsciiCase(sYes) ) 202*cdf0e10cSrcweir nRightsWithGrant |= Privilege::REFERENCE; 203*cdf0e10cSrcweir } 204*cdf0e10cSrcweir else if (sPrivilege.equalsIgnoreAsciiCase(sDROP)) 205*cdf0e10cSrcweir { 206*cdf0e10cSrcweir nRights |= Privilege::DROP; 207*cdf0e10cSrcweir if ( sGrantable.equalsIgnoreAsciiCase(sYes) ) 208*cdf0e10cSrcweir nRightsWithGrant |= Privilege::DROP; 209*cdf0e10cSrcweir } 210*cdf0e10cSrcweir } 211*cdf0e10cSrcweir ::comphelper::disposeComponent(xRes); 212*cdf0e10cSrcweir } 213*cdf0e10cSrcweir } 214*cdf0e10cSrcweir // ------------------------------------------------------------------------- 215*cdf0e10cSrcweir sal_Int32 SAL_CALL OHSQLUser::getGrantablePrivileges( const ::rtl::OUString& objName, sal_Int32 objType ) throw(SQLException, RuntimeException) 216*cdf0e10cSrcweir { 217*cdf0e10cSrcweir ::osl::MutexGuard aGuard(m_aMutex); 218*cdf0e10cSrcweir checkDisposed(OUser_BASE_RBHELPER::rBHelper.bDisposed); 219*cdf0e10cSrcweir 220*cdf0e10cSrcweir sal_Int32 nRights,nRightsWithGrant; 221*cdf0e10cSrcweir findPrivilegesAndGrantPrivileges(objName,objType,nRights,nRightsWithGrant); 222*cdf0e10cSrcweir return nRightsWithGrant; 223*cdf0e10cSrcweir } 224*cdf0e10cSrcweir // ------------------------------------------------------------------------- 225*cdf0e10cSrcweir void SAL_CALL OHSQLUser::grantPrivileges( const ::rtl::OUString& objName, sal_Int32 objType, sal_Int32 objPrivileges ) throw(SQLException, RuntimeException) 226*cdf0e10cSrcweir { 227*cdf0e10cSrcweir if ( objType != PrivilegeObject::TABLE ) 228*cdf0e10cSrcweir { 229*cdf0e10cSrcweir ::connectivity::SharedResources aResources; 230*cdf0e10cSrcweir const ::rtl::OUString sError( aResources.getResourceString(STR_PRIVILEGE_NOT_GRANTED)); 231*cdf0e10cSrcweir ::dbtools::throwGenericSQLException(sError,*this); 232*cdf0e10cSrcweir } // if ( objType != PrivilegeObject::TABLE ) 233*cdf0e10cSrcweir 234*cdf0e10cSrcweir 235*cdf0e10cSrcweir ::osl::MutexGuard aGuard(m_aMutex); 236*cdf0e10cSrcweir 237*cdf0e10cSrcweir ::rtl::OUString sPrivs = getPrivilegeString(objPrivileges); 238*cdf0e10cSrcweir if(sPrivs.getLength()) 239*cdf0e10cSrcweir { 240*cdf0e10cSrcweir ::rtl::OUString sGrant; 241*cdf0e10cSrcweir sGrant += ::rtl::OUString::createFromAscii("GRANT "); 242*cdf0e10cSrcweir sGrant += sPrivs; 243*cdf0e10cSrcweir sGrant += ::rtl::OUString::createFromAscii(" ON "); 244*cdf0e10cSrcweir Reference<XDatabaseMetaData> xMeta = m_xConnection->getMetaData(); 245*cdf0e10cSrcweir sGrant += ::dbtools::quoteTableName(xMeta,objName,::dbtools::eInDataManipulation); 246*cdf0e10cSrcweir sGrant += ::rtl::OUString::createFromAscii(" TO "); 247*cdf0e10cSrcweir sGrant += m_Name; 248*cdf0e10cSrcweir 249*cdf0e10cSrcweir Reference<XStatement> xStmt = m_xConnection->createStatement(); 250*cdf0e10cSrcweir if(xStmt.is()) 251*cdf0e10cSrcweir xStmt->execute(sGrant); 252*cdf0e10cSrcweir ::comphelper::disposeComponent(xStmt); 253*cdf0e10cSrcweir } 254*cdf0e10cSrcweir } 255*cdf0e10cSrcweir // ------------------------------------------------------------------------- 256*cdf0e10cSrcweir void SAL_CALL OHSQLUser::revokePrivileges( const ::rtl::OUString& objName, sal_Int32 objType, sal_Int32 objPrivileges ) throw(SQLException, RuntimeException) 257*cdf0e10cSrcweir { 258*cdf0e10cSrcweir if ( objType != PrivilegeObject::TABLE ) 259*cdf0e10cSrcweir { 260*cdf0e10cSrcweir ::connectivity::SharedResources aResources; 261*cdf0e10cSrcweir const ::rtl::OUString sError( aResources.getResourceString(STR_PRIVILEGE_NOT_REVOKED)); 262*cdf0e10cSrcweir ::dbtools::throwGenericSQLException(sError,*this); 263*cdf0e10cSrcweir } // if ( objType != PrivilegeObject::TABLE ) 264*cdf0e10cSrcweir 265*cdf0e10cSrcweir ::osl::MutexGuard aGuard(m_aMutex); 266*cdf0e10cSrcweir checkDisposed(OUser_BASE_RBHELPER::rBHelper.bDisposed); 267*cdf0e10cSrcweir ::rtl::OUString sPrivs = getPrivilegeString(objPrivileges); 268*cdf0e10cSrcweir if(sPrivs.getLength()) 269*cdf0e10cSrcweir { 270*cdf0e10cSrcweir ::rtl::OUString sGrant; 271*cdf0e10cSrcweir sGrant += ::rtl::OUString::createFromAscii("REVOKE "); 272*cdf0e10cSrcweir sGrant += sPrivs; 273*cdf0e10cSrcweir sGrant += ::rtl::OUString::createFromAscii(" ON "); 274*cdf0e10cSrcweir Reference<XDatabaseMetaData> xMeta = m_xConnection->getMetaData(); 275*cdf0e10cSrcweir sGrant += ::dbtools::quoteTableName(xMeta,objName,::dbtools::eInDataManipulation); 276*cdf0e10cSrcweir sGrant += ::rtl::OUString::createFromAscii(" FROM "); 277*cdf0e10cSrcweir sGrant += m_Name; 278*cdf0e10cSrcweir 279*cdf0e10cSrcweir Reference<XStatement> xStmt = m_xConnection->createStatement(); 280*cdf0e10cSrcweir if(xStmt.is()) 281*cdf0e10cSrcweir xStmt->execute(sGrant); 282*cdf0e10cSrcweir ::comphelper::disposeComponent(xStmt); 283*cdf0e10cSrcweir } 284*cdf0e10cSrcweir } 285*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 286*cdf0e10cSrcweir // XUser 287*cdf0e10cSrcweir void SAL_CALL OHSQLUser::changePassword( const ::rtl::OUString& /*oldPassword*/, const ::rtl::OUString& newPassword ) throw(SQLException, RuntimeException) 288*cdf0e10cSrcweir { 289*cdf0e10cSrcweir ::osl::MutexGuard aGuard(m_aMutex); 290*cdf0e10cSrcweir checkDisposed(OUser_BASE_RBHELPER::rBHelper.bDisposed); 291*cdf0e10cSrcweir ::rtl::OUString sAlterPwd; 292*cdf0e10cSrcweir sAlterPwd = ::rtl::OUString::createFromAscii("SET PASSWORD FOR "); 293*cdf0e10cSrcweir sAlterPwd += m_Name; 294*cdf0e10cSrcweir sAlterPwd += ::rtl::OUString::createFromAscii("@\"%\" = PASSWORD('") ; 295*cdf0e10cSrcweir sAlterPwd += newPassword; 296*cdf0e10cSrcweir sAlterPwd += ::rtl::OUString::createFromAscii("')") ; 297*cdf0e10cSrcweir 298*cdf0e10cSrcweir 299*cdf0e10cSrcweir Reference<XStatement> xStmt = m_xConnection->createStatement(); 300*cdf0e10cSrcweir if ( xStmt.is() ) 301*cdf0e10cSrcweir { 302*cdf0e10cSrcweir xStmt->execute(sAlterPwd); 303*cdf0e10cSrcweir ::comphelper::disposeComponent(xStmt); 304*cdf0e10cSrcweir } 305*cdf0e10cSrcweir } 306*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 307*cdf0e10cSrcweir ::rtl::OUString OHSQLUser::getPrivilegeString(sal_Int32 nRights) const 308*cdf0e10cSrcweir { 309*cdf0e10cSrcweir ::rtl::OUString sPrivs; 310*cdf0e10cSrcweir if((nRights & Privilege::INSERT) == Privilege::INSERT) 311*cdf0e10cSrcweir sPrivs += ::rtl::OUString::createFromAscii("INSERT"); 312*cdf0e10cSrcweir 313*cdf0e10cSrcweir if((nRights & Privilege::DELETE) == Privilege::DELETE) 314*cdf0e10cSrcweir { 315*cdf0e10cSrcweir if(sPrivs.getLength()) 316*cdf0e10cSrcweir sPrivs += ::rtl::OUString::createFromAscii(","); 317*cdf0e10cSrcweir sPrivs += ::rtl::OUString::createFromAscii("DELETE"); 318*cdf0e10cSrcweir } 319*cdf0e10cSrcweir 320*cdf0e10cSrcweir if((nRights & Privilege::UPDATE) == Privilege::UPDATE) 321*cdf0e10cSrcweir { 322*cdf0e10cSrcweir if(sPrivs.getLength()) 323*cdf0e10cSrcweir sPrivs += ::rtl::OUString::createFromAscii(","); 324*cdf0e10cSrcweir sPrivs += ::rtl::OUString::createFromAscii("UPDATE"); 325*cdf0e10cSrcweir } 326*cdf0e10cSrcweir 327*cdf0e10cSrcweir if((nRights & Privilege::ALTER) == Privilege::ALTER) 328*cdf0e10cSrcweir { 329*cdf0e10cSrcweir if(sPrivs.getLength()) 330*cdf0e10cSrcweir sPrivs += ::rtl::OUString::createFromAscii(","); 331*cdf0e10cSrcweir sPrivs += ::rtl::OUString::createFromAscii("ALTER"); 332*cdf0e10cSrcweir } 333*cdf0e10cSrcweir 334*cdf0e10cSrcweir if((nRights & Privilege::SELECT) == Privilege::SELECT) 335*cdf0e10cSrcweir { 336*cdf0e10cSrcweir if(sPrivs.getLength()) 337*cdf0e10cSrcweir sPrivs += ::rtl::OUString::createFromAscii(","); 338*cdf0e10cSrcweir sPrivs += ::rtl::OUString::createFromAscii("SELECT"); 339*cdf0e10cSrcweir } 340*cdf0e10cSrcweir 341*cdf0e10cSrcweir if((nRights & Privilege::REFERENCE) == Privilege::REFERENCE) 342*cdf0e10cSrcweir { 343*cdf0e10cSrcweir if(sPrivs.getLength()) 344*cdf0e10cSrcweir sPrivs += ::rtl::OUString::createFromAscii(","); 345*cdf0e10cSrcweir sPrivs += ::rtl::OUString::createFromAscii("REFERENCES"); 346*cdf0e10cSrcweir } 347*cdf0e10cSrcweir 348*cdf0e10cSrcweir return sPrivs; 349*cdf0e10cSrcweir } 350*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 351*cdf0e10cSrcweir 352