connectivity/Library_firebird_sdbc.mk | 2 connectivity/source/commontools/dbtools2.cxx | 40 ++++++---- connectivity/source/drivers/firebird/Catalog.cxx | 28 ++++++- connectivity/source/drivers/firebird/Table.cxx | 63 +++++++++++++--- connectivity/source/drivers/firebird/User.cxx | 38 +++++++++ connectivity/source/drivers/firebird/User.hxx | 49 ++++++++++++ connectivity/source/drivers/firebird/Users.cxx | 90 +++++++++++++++++++++++ connectivity/source/drivers/firebird/Users.hxx | 65 ++++++++++++++++ include/connectivity/dbtools.hxx | 3 9 files changed, 349 insertions(+), 29 deletions(-)
New commits: commit e6c4e419d6bc3572b183ca8ed3f2b75417899fff Author: Andrzej J.R. Hunt <andr...@ahunt.org> Date: Tue Aug 20 14:34:54 2013 +0100 Implement changing nullable. (firebird-sdbc) Change-Id: I0aa745becbd8b3dae11917248205f46eb61c17de diff --git a/connectivity/source/drivers/firebird/Table.cxx b/connectivity/source/drivers/firebird/Table.cxx index 3f99917..2b30057 100644 --- a/connectivity/source/drivers/firebird/Table.cxx +++ b/connectivity/source/drivers/firebird/Table.cxx @@ -15,6 +15,8 @@ #include <connectivity/TIndexes.hxx> #include <connectivity/TKeys.hxx> +#include <com/sun/star/sdbc/ColumnValue.hpp> + using namespace ::connectivity; using namespace ::connectivity::firebird; using namespace ::connectivity::sdbcx; @@ -93,19 +95,20 @@ void SAL_CALL Table::alterColumnByName(const OUString& rColName, uno::Reference< XPropertySet > xColumn(m_pColumns->getByName(rColName), UNO_QUERY); // sdbcx::Descriptor - bool bNameChanged = xColumn->getPropertyValue("Name") != rDescriptor->getPropertyValue("Name"); + const bool bNameChanged = xColumn->getPropertyValue("Name") != rDescriptor->getPropertyValue("Name"); // sdbcx::ColumnDescriptor - bool bTypeChanged = xColumn->getPropertyValue("Type") != rDescriptor->getPropertyValue("Type"); - bool bTypeNameChanged = xColumn->getPropertyValue("TypeName") != rDescriptor->getPropertyValue("TypeName"); - bool bPrecisionChanged = xColumn->getPropertyValue("Precision") != rDescriptor->getPropertyValue("Precision"); - bool bScaleChanged = xColumn->getPropertyValue("Scale") != rDescriptor->getPropertyValue("Scale"); - bool bIsNullableChanged = xColumn->getPropertyValue("IsNullable") != rDescriptor->getPropertyValue("IsNullable"); - bool bIsAutoIncrementChanged = xColumn->getPropertyValue("IsAutoIncrement") != rDescriptor->getPropertyValue("IsAutoIncrement"); + const bool bTypeChanged = xColumn->getPropertyValue("Type") != rDescriptor->getPropertyValue("Type"); + const bool bTypeNameChanged = xColumn->getPropertyValue("TypeName") != rDescriptor->getPropertyValue("TypeName"); + const bool bPrecisionChanged = xColumn->getPropertyValue("Precision") != rDescriptor->getPropertyValue("Precision"); + const bool bScaleChanged = xColumn->getPropertyValue("Scale") != rDescriptor->getPropertyValue("Scale"); + const bool bIsNullableChanged = xColumn->getPropertyValue("IsNullable") != rDescriptor->getPropertyValue("IsNullable"); + const bool bIsAutoIncrementChanged = xColumn->getPropertyValue("IsAutoIncrement") != rDescriptor->getPropertyValue("IsAutoIncrement"); // TODO: remainder -- these are all "optional" so have to detect presence and change. bool bDefaultChanged = xColumn->getPropertyValue("DefaultValue") != rDescriptor->getPropertyValue("DefaultValue"); + // TODO: quote identifiers as needed. if (bNameChanged) { OUString sNewTableName; @@ -125,8 +128,50 @@ void SAL_CALL Table::alterColumnByName(const OUString& rColName, // possibly we have to wrap things in Util::evaluateStatusVector. } - if (bPrecisionChanged || bScaleChanged - || bIsNullableChanged || bIsAutoIncrementChanged) + if (bIsNullableChanged) + { + sal_Int32 nNullabble; + rDescriptor->getPropertyValue("IsNullable") >>= nNullabble; + + if (nNullabble != ColumnValue::NULLABLE_UNKNOWN) + { + + OUString sSql; + // Dirty hack: can't change null directly in sql, we have to fiddle + // the system tables manually. + if (nNullabble == ColumnValue::NULLABLE) + { + sSql = "UPDATE RDB$RELATION_FIELDS SET RDB$NULL_FLAG = NULL " + "WHERE RDB$FIELD_NAME = '" + rColName + "' " + "AND RDB$RELATION_NAME = '" + getName() + "'"; + } + else if (nNullabble == ColumnValue::NO_NULLS) + { + // And if we are making NOT NULL then we have to make sure we have + // no nulls left in the column. + OUString sFillNulls("UPDATE \"" + getName() + "\" SET \"" + + rColName + "\" = 0 " + "WHERE \"" + rColName + "\" IS NULL"); + getConnection()->createStatement()->execute(sFillNulls); + + sSql = "UPDATE RDB$RELATION_FIELDS SET RDB$NULL_FLAG = 1 " + "WHERE RDB$FIELD_NAME = '" + rColName + "' " + "AND RDB$RELATION_NAME = '" + getName() + "'"; + } + getConnection()->createStatement()->execute(sSql); + + // This is in essence a DDL statement which requires a commit + // to become visible in practice. + getConnection()->commit(); + // TODO: confirm, do we really need this. + } + else + { + SAL_WARN("connectivity.firebird", "Attempting to set Nullable to NULLABLE_UNKNOWN"); + } + } + + if (bPrecisionChanged || bScaleChanged || bIsAutoIncrementChanged) { // TODO: changeType } commit 84286f674bffaa2b9de44341a2f2700aa4352d86 Author: Andrzej J.R. Hunt <andr...@ahunt.org> Date: Tue Aug 20 14:07:37 2013 +0100 Rearrange createStandardTypePart to not include extraneous parameters. We specifically only want the type identifier but not any autoincrement/ nullabe parameters which have to be modified separately in some databases (e.g. firebird). Change-Id: I8b33bae8ce4aaf5f325c4156955140ad4fb17db7 diff --git a/connectivity/source/commontools/dbtools2.cxx b/connectivity/source/commontools/dbtools2.cxx index 055a3bd..bfa0750 100644 --- a/connectivity/source/commontools/dbtools2.cxx +++ b/connectivity/source/commontools/dbtools2.cxx @@ -60,7 +60,7 @@ namespace dbtools using namespace connectivity; using namespace comphelper; -OUString createStandardTypePart(const Reference< XPropertySet >& xColProp,const Reference< XConnection>& _xConnection,ISQLStatementHelper* _pHelper,const OUString& _sCreatePattern) +OUString createStandardTypePart(const Reference< XPropertySet >& xColProp,const Reference< XConnection>& _xConnection,const OUString& _sCreatePattern) { Reference<XDatabaseMetaData> xMetaData = _xConnection->getMetaData(); @@ -73,12 +73,11 @@ OUString createStandardTypePart(const Reference< XPropertySet >& xColProp,const sal_Int32 nScale = 0; nDataType = nPrecision = nScale = 0; - sal_Bool bIsAutoIncrement = sal_False; + xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_TYPENAME)) >>= sTypeName; xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_TYPE)) >>= nDataType; xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_PRECISION)) >>= nPrecision; xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_SCALE)) >>= nScale; - xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_ISAUTOINCREMENT)) >>= bIsAutoIncrement; OUStringBuffer aSql; @@ -163,18 +162,6 @@ OUString createStandardTypePart(const Reference< XPropertySet >& xColProp,const aSql.append(sPostFix); } // if ( aDefault.getLength() ) - if(::comphelper::getINT32(xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_ISNULLABLE))) == ColumnValue::NO_NULLS) - aSql.append(OUString(" NOT NULL")); - - if ( bIsAutoIncrement && !sAutoIncrementValue.isEmpty()) - { - aSql.appendAscii(" "); - aSql.append(sAutoIncrementValue); - } - - if ( _pHelper ) - _pHelper->addComment(xColProp,aSql); - return aSql.makeStringAndClear(); } @@ -184,12 +171,33 @@ OUString createStandardColumnPart(const Reference< XPropertySet >& xColProp,cons ::dbtools::OPropertyMap& rPropMap = OMetaConnection::getPropMap(); + sal_Bool bIsAutoIncrement = sal_False; + xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_ISAUTOINCREMENT)) >>= bIsAutoIncrement; + const OUString sQuoteString = xMetaData->getIdentifierQuoteString(); OUStringBuffer aSql = ::dbtools::quoteName(sQuoteString,::comphelper::getString(xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_NAME)))); + // check if the user enter a specific string to create autoincrement values + OUString sAutoIncrementValue; + Reference<XPropertySetInfo> xPropInfo = xColProp->getPropertySetInfo(); + if ( xPropInfo.is() && xPropInfo->hasPropertyByName(rPropMap.getNameByIndex(PROPERTY_ID_AUTOINCREMENTCREATION)) ) + xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_AUTOINCREMENTCREATION)) >>= sAutoIncrementValue; + aSql.appendAscii(" "); - aSql.append(createStandardTypePart(xColProp, _xConnection, _pHelper, _sCreatePattern)); + aSql.append(createStandardTypePart(xColProp, _xConnection, _sCreatePattern)); + + if(::comphelper::getINT32(xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_ISNULLABLE))) == ColumnValue::NO_NULLS) + aSql.append(OUString(" NOT NULL")); + + if ( bIsAutoIncrement && !sAutoIncrementValue.isEmpty()) + { + aSql.appendAscii(" "); + aSql.append(sAutoIncrementValue); + } + + if ( _pHelper ) + _pHelper->addComment(xColProp,aSql); return aSql.makeStringAndClear(); } diff --git a/include/connectivity/dbtools.hxx b/include/connectivity/dbtools.hxx index 8064355..e584e35 100644 --- a/include/connectivity/dbtools.hxx +++ b/include/connectivity/dbtools.hxx @@ -652,13 +652,10 @@ namespace dbtools The descriptor of the column. @param _xConnection The connection. - @param _pHelper - Allow to add special SQL constructs. */ OOO_DLLPUBLIC_DBTOOLS OUString createStandardTypePart( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& descriptor ,const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection>& _xConnection - ,ISQLStatementHelper* _pHelper = NULL ,const OUString& _sCreatePattern = OUString()); /** creates the standard sql statement for the column part of a create table statement. commit 4eaca49a5ae7a70b18688b0ebb5ee6bb51f03927 Author: Andrzej J.R. Hunt <andr...@ahunt.org> Date: Tue Aug 20 08:18:57 2013 +0100 Simplify Users.createObject. (firebird-sdbc) Unnecessary relic of Tables. Change-Id: I8d36f2ad3b3dc877ba64e063415922895c1c25d9 diff --git a/connectivity/source/drivers/firebird/Users.cxx b/connectivity/source/drivers/firebird/Users.cxx index 75073a7..5f19765 100644 --- a/connectivity/source/drivers/firebird/Users.cxx +++ b/connectivity/source/drivers/firebird/Users.cxx @@ -51,27 +51,7 @@ void Users::impl_refresh() ObjectType Users::createObject(const OUString& rName) { - (void) rName; - // TODO: set query string - OUString sSql; - uno::Reference< XResultSet > xUsers = m_xMetaData->getConnection() - ->createStatement()->executeQuery(sSql); - - if (!xUsers.is()) - throw RuntimeException(); - - uno::Reference< XRow > xRow(xUsers,UNO_QUERY); - - if (!xRow.is() || !xUsers->next()) - throw RuntimeException(); - - ObjectType xRet(new User(m_xMetaData->getConnection(), - xRow->getString(1))); // Name - - if (xUsers->next()) - throw RuntimeException(); // Only one user should be returned - - return xRet; + return new User(m_xMetaData->getConnection(), rName); } uno::Reference< XPropertySet > Users::createDescriptor() commit 38bc9693cc253d26b11f9a262f26f2cd373d50f9 Author: Andrzej J.R. Hunt <andr...@ahunt.org> Date: Tue Aug 20 08:16:03 2013 +0100 Implement Catalog::refreshUsers. (firebird-sdbc) Change-Id: I54ca18b36c19d5a13efd8a194b59f0d8aebbac4c diff --git a/connectivity/source/drivers/firebird/Catalog.cxx b/connectivity/source/drivers/firebird/Catalog.cxx index 4a0700d..dbbfaa3 100644 --- a/connectivity/source/drivers/firebird/Catalog.cxx +++ b/connectivity/source/drivers/firebird/Catalog.cxx @@ -9,6 +9,7 @@ #include "Catalog.hxx" #include "Tables.hxx" +#include "Users.hxx" using namespace ::connectivity::firebird; @@ -37,6 +38,9 @@ void Catalog::refreshTables() "%", aTypes); + if (!xTables.is()) + return; + TStringVector aTableNames; fillNames(xTables, aTableNames); @@ -66,6 +70,28 @@ void Catalog::refreshGroups() //----- IRefreshableUsers ---------------------------------------------------- void Catalog::refreshUsers() { - // TODO: implement me + OUString sSql("SELECT DISTINCT RDB$USER FROM RDB$USER_PRIVILEGES"); + + uno::Reference< XResultSet > xUsers = m_xMetaData->getConnection() + ->createStatement()->executeQuery(sSql); + + if (!xUsers.is()) + return; + + TStringVector aUserNames; + + uno::Reference< XRow > xRow(xUsers,UNO_QUERY); + while (xUsers->next()) + { + aUserNames.push_back(xRow->getString(1)); + } + + if (!m_pUsers) + m_pUsers = new Users(m_xConnection->getMetaData(), + *this, + m_aMutex, + aUserNames); + else + m_pUsers->reFill(aUserNames); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ \ No newline at end of file commit 6b184f638d5027eab0166a11506c59fa6194dd62 Author: Andrzej J.R. Hunt <andr...@ahunt.org> Date: Mon Aug 19 13:58:55 2013 +0100 Add skeleton sdbcx Users/User implementation. (firebird-sdbc) Change-Id: I8a64f9776a618691fa61aa0e71067a0eb6176811 diff --git a/connectivity/Library_firebird_sdbc.mk b/connectivity/Library_firebird_sdbc.mk index 577c169..1f78608 100644 --- a/connectivity/Library_firebird_sdbc.mk +++ b/connectivity/Library_firebird_sdbc.mk @@ -51,6 +51,8 @@ $(eval $(call gb_Library_add_exception_objects,firebird_sdbc,\ connectivity/source/drivers/firebird/StatementCommonBase \ connectivity/source/drivers/firebird/Table \ connectivity/source/drivers/firebird/Tables \ + connectivity/source/drivers/firebird/User \ + connectivity/source/drivers/firebird/Users \ connectivity/source/drivers/firebird/Util \ )) diff --git a/connectivity/source/drivers/firebird/User.cxx b/connectivity/source/drivers/firebird/User.cxx new file mode 100644 index 0000000..885ecff --- /dev/null +++ b/connectivity/source/drivers/firebird/User.cxx @@ -0,0 +1,38 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include "User.hxx" + +using namespace ::connectivity; +using namespace ::connectivity::firebird; +using namespace ::connectivity::sdbcx; + +using namespace ::rtl; + +using namespace ::com::sun::star; +using namespace ::com::sun::star::sdbc; + +User::User(const uno::Reference< XConnection >& rConnection): + OUser(sal_True) // Case Sensitive +{ + (void) rConnection; +} + +User::User(const uno::Reference< XConnection >& rConnection, const OUString& rName): + OUser(rName, + sal_True) // Case Sensitive +{ + (void) rConnection; +} + +//----- IRefreshableGroups ---------------------------------------------------- +void User::refreshGroups() +{ + // TODO: implement. +} \ No newline at end of file diff --git a/connectivity/source/drivers/firebird/User.hxx b/connectivity/source/drivers/firebird/User.hxx new file mode 100644 index 0000000..8ae8bd4 --- /dev/null +++ b/connectivity/source/drivers/firebird/User.hxx @@ -0,0 +1,49 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef CONNECTIVITY_FIREBIRD_USER_HXX +#define CONNECTIVITY_FIREBIRD_USER_HXX + +#include <connectivity/sdbcx/VUser.hxx> + +#include <com/sun/star/sdbc/XConnection.hpp> + +namespace connectivity +{ + namespace firebird + { + + /** + * This implements com.sun.star.sdbcx.Container. + */ + class User: public ::connectivity::sdbcx::OUser + { + + public: + /** + * Create a "new" descriptor, which isn't yet in the database. + */ + User(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& rConnection); + /** + * For a user that already exists in the db. + */ + User(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& rConnection, + const ::rtl::OUString& rName); + + // IRefreshableGroups:: + virtual void refreshGroups(); + }; + + } // namespace firebird +} // namespace connectivity + + +#endif // CONNECTIVITY_FIREBIRD_USER_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ \ No newline at end of file diff --git a/connectivity/source/drivers/firebird/Users.cxx b/connectivity/source/drivers/firebird/Users.cxx new file mode 100644 index 0000000..75073a7 --- /dev/null +++ b/connectivity/source/drivers/firebird/Users.cxx @@ -0,0 +1,110 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include "User.hxx" +#include "Users.hxx" + +#include <connectivity/dbtools.hxx> + +#include <com/sun/star/sdbc/XRow.hpp> + +using namespace ::connectivity; +using namespace ::connectivity::firebird; +using namespace ::connectivity::sdbcx; +using namespace ::cppu; +using namespace ::osl; +using namespace ::rtl; + +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; + + +Users::Users(const uno::Reference< XDatabaseMetaData >& rMetaData, + OWeakObject& rParent, + Mutex& rMutex, + TStringVector& rNames) : + OCollection(rParent, + sal_True, + rMutex, + rNames), + m_rMutex(rMutex), + m_xMetaData(rMetaData) +{ +} + +//----- OCollection ----------------------------------------------------------- +void Users::impl_refresh() + throw(RuntimeException) +{ + // TODO: IMPLEMENT ME +} + +ObjectType Users::createObject(const OUString& rName) +{ + (void) rName; + // TODO: set query string + OUString sSql; + uno::Reference< XResultSet > xUsers = m_xMetaData->getConnection() + ->createStatement()->executeQuery(sSql); + + if (!xUsers.is()) + throw RuntimeException(); + + uno::Reference< XRow > xRow(xUsers,UNO_QUERY); + + if (!xRow.is() || !xUsers->next()) + throw RuntimeException(); + + ObjectType xRet(new User(m_xMetaData->getConnection(), + xRow->getString(1))); // Name + + if (xUsers->next()) + throw RuntimeException(); // Only one user should be returned + + return xRet; +} + +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()); +} + +//----- XAppend --------------------------------------------------------------- +ObjectType Users::appendObject(const OUString& rName, + const uno::Reference< XPropertySet >& rDescriptor) +{ + // TODO: set sSql as appropriate + (void) rName; + (void) rDescriptor; + OUString sSql; + m_xMetaData->getConnection()->createStatement()->execute(sSql); + + return createObject(rName); +} + +//----- XDrop ----------------------------------------------------------------- +void Users::dropObject(sal_Int32 nPosition, const OUString sName) +{ + uno::Reference< XPropertySet > xUser(getObject(nPosition)); + + if (!ODescriptor::isNew(xUser)) + { + (void) sName; + // TODO: drop me + } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ \ No newline at end of file diff --git a/connectivity/source/drivers/firebird/Users.hxx b/connectivity/source/drivers/firebird/Users.hxx new file mode 100644 index 0000000..12f2ef3 --- /dev/null +++ b/connectivity/source/drivers/firebird/Users.hxx @@ -0,0 +1,65 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef CONNECTIVITY_FIREBIRD_USERS_HXX +#define CONNECTIVITY_FIREBIRD_USERS_HXX + +#include "DatabaseMetaData.hxx" + +#include <connectivity/sdbcx/VCollection.hxx> + +namespace connectivity +{ + namespace firebird + { + + /** + * This implements com.sun.star.sdbcx.Container. + */ + class Users: public ::connectivity::sdbcx::OCollection + { + private: + ::osl::Mutex& m_rMutex; + + protected: + ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData > + m_xMetaData; + + // OCollection + virtual void impl_refresh() + throw(::com::sun::star::uno::RuntimeException); + virtual ::connectivity::sdbcx::ObjectType createObject( + const ::rtl::OUString& rName); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > + createDescriptor(); + virtual ::connectivity::sdbcx::ObjectType appendObject( + const OUString& rName, + const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& rDescriptor); + + public: + Users(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData >& rMetaData, + ::cppu::OWeakObject& rParent, + ::osl::Mutex& rMutex, + ::connectivity::TStringVector& rNames); + + // TODO: we should also implement XDataDescriptorFactory, XRefreshable, + // XAppend, etc., but all are optional. + + // XDrop + virtual void dropObject(sal_Int32 nPosition, const ::rtl::OUString rName); + + }; + + } // namespace firebird +} // namespace connectivity + + +#endif // CONNECTIVITY_FIREBIRD_USERS_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ \ No newline at end of file _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits