diff options
Diffstat (limited to 'connectivity/source/drivers/mysqlc/mysqlc_users.cxx')
-rw-r--r-- | connectivity/source/drivers/mysqlc/mysqlc_users.cxx | 40 |
1 files changed, 31 insertions, 9 deletions
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_users.cxx b/connectivity/source/drivers/mysqlc/mysqlc_users.cxx index 41fce5c395cd..296377c1be94 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_users.cxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_users.cxx @@ -7,8 +7,13 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#include <utility> + #include "mysqlc_user.hxx" #include "mysqlc_users.hxx" +#include <comphelper/types.hxx> +#include <connectivity/dbtools.hxx> +#include <TConnection.hxx> using namespace ::connectivity; using namespace ::connectivity::mysqlc; @@ -17,8 +22,6 @@ using namespace ::cppu; using namespace ::osl; using namespace ::com::sun::star; using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::lang; using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::uno; @@ -37,7 +40,7 @@ void Users::impl_refresh() ObjectType Users::createObject(const OUString& rName) { - return new User(m_xMetaData->getConnection(), rName); + return new OUserExtend(m_xMetaData->getConnection(), rName); } uno::Reference<XPropertySet> Users::createDescriptor() @@ -45,26 +48,45 @@ uno::Reference<XPropertySet> Users::createDescriptor() // There is some internal magic so that the same class can be used as either // a descriptor or as a normal user. See VUser.cxx for the details. In our // case we just need to ensure we use the correct constructor. - return new User(m_xMetaData->getConnection()); + return new OUserExtend(m_xMetaData->getConnection(), ""); } //----- XAppend --------------------------------------------------------------- -ObjectType Users::appendObject(const OUString& rName, const uno::Reference<XPropertySet>&) +ObjectType Users::appendObject(const OUString& rName, + const uno::Reference<XPropertySet>& descriptor) { - // TODO: set sSql as appropriate - m_xMetaData->getConnection()->createStatement()->execute(OUString()); + OUString aSql("GRANT USAGE ON * TO "); + OUString aQuote = m_xMetaData->getIdentifierQuoteString(); + aSql += ::dbtools::quoteName(aQuote, rName) + " @\"%\" "; + OUString sPassword; + descriptor->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_PASSWORD)) + >>= sPassword; + if (!sPassword.isEmpty()) + { + aSql += " IDENTIFIED BY '" + sPassword + "'"; + } + + Reference<XStatement> statement = m_xMetaData->getConnection()->createStatement(); + if (statement.is()) + statement->execute(aSql); + ::comphelper::disposeComponent(statement); return createObject(rName); } //----- XDrop ----------------------------------------------------------------- -void Users::dropObject(sal_Int32 nPosition, const OUString&) +void Users::dropObject(sal_Int32 nPosition, const OUString& rName) { uno::Reference<XPropertySet> xUser(getObject(nPosition)); if (!ODescriptor::isNew(xUser)) { - // TODO: drop me + Reference<XStatement> statement = m_xMetaData->getConnection()->createStatement(); + if (statement.is()) + { + statement->execute("DROP USER " + rName); + ::comphelper::disposeComponent(statement); + } } } |