connectivity/source/drivers/firebird/DatabaseMetaData.cxx | 33 ++++++++----- connectivity/source/drivers/firebird/ResultSetMetaData.cxx | 4 + connectivity/source/drivers/firebird/Util.cxx | 6 ++ connectivity/source/drivers/firebird/Util.hxx | 8 +++ 4 files changed, 39 insertions(+), 12 deletions(-)
New commits: commit fe010c7c1905f76e2c1dcddfa3bf8b4bc70b858a Author: Andrzej J.R. Hunt <andr...@ahunt.org> Date: Wed Jul 31 17:31:00 2013 +0200 Use correct MetaDataResultSetType (firebird-sdbc). Change-Id: I9f501dc9e578c9d7bd997072345578bdc860f6a6 diff --git a/connectivity/source/drivers/firebird/DatabaseMetaData.cxx b/connectivity/source/drivers/firebird/DatabaseMetaData.cxx index 452f72d..580fa23 100644 --- a/connectivity/source/drivers/firebird/DatabaseMetaData.cxx +++ b/connectivity/source/drivers/firebird/DatabaseMetaData.cxx @@ -1012,7 +1012,8 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumnPrivileges( "Table: " << sTable << " & ColumnNamePattern: " << sColumnNamePattern); - ODatabaseMetaDataResultSet* pResultSet = new ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTables); + ODatabaseMetaDataResultSet* pResultSet = new + ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eColumnPrivileges); uno::Reference< XResultSet > xResultSet = pResultSet; uno::Reference< XStatement > statement = m_pConnection->createStatement(); @@ -1297,7 +1298,8 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumns( aResults.push_back(aCurrentRow); } - ODatabaseMetaDataResultSet* pResultSet = new ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTables); + ODatabaseMetaDataResultSet* pResultSet = new + ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eColumns); uno::Reference< XResultSet > xResultSet = pResultSet; pResultSet->setRows( aResults ); @@ -1318,7 +1320,8 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTables( SAL_INFO("connectivity.firebird", "getTables() with " "TableNamePattern: " << tableNamePattern); - ODatabaseMetaDataResultSet* pResultSet = new ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTables); + ODatabaseMetaDataResultSet* pResultSet = new + ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTables); uno::Reference< XResultSet > xResultSet = pResultSet; uno::Reference< XStatement > statement = m_pConnection->createStatement(); @@ -1510,7 +1513,8 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getPrimaryKeys( aResults.push_back(aCurrentRow); } - ODatabaseMetaDataResultSet* pResultSet = new ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTables); + ODatabaseMetaDataResultSet* pResultSet = new + ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::ePrimaryKeys); uno::Reference< XResultSet > xResultSet = pResultSet; pResultSet->setRows( aResults ); @@ -1553,7 +1557,8 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTablePrivileges( SAL_INFO("connectivity.firebird", "getTablePrivileges() with " "TableNamePattern: " << sTableNamePattern); - ODatabaseMetaDataResultSet* pResultSet = new ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTables); + ODatabaseMetaDataResultSet* pResultSet = new + ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTablePrivileges); uno::Reference< XResultSet > xResultSet = pResultSet; uno::Reference< XStatement > statement = m_pConnection->createStatement(); commit 43095140eb162dad953919facc636a19c24c8cc0 Author: Andrzej J.R. Hunt <andr...@ahunt.org> Date: Wed Jul 31 17:22:43 2013 +0200 Cut identifier to correct length (firebird-sdbc). Currently firebird returns table and column identifiers as being 93 chars long (rather than 31 as per spec), this leads to problems with ALTER and DROP commands which are unable to deal with the incorrect length. For now we simply discard the extra characters (which are blank characters). (SELECT and similar commands have been able to deal with the overlength identifiers previously, which is why this hack wasn't required beforehand.) Change-Id: Ib6c984b5fc72dc4e326b3f8d36f6cbc4a3c9086a diff --git a/connectivity/source/drivers/firebird/DatabaseMetaData.cxx b/connectivity/source/drivers/firebird/DatabaseMetaData.cxx index 943bb82..452f72d 100644 --- a/connectivity/source/drivers/firebird/DatabaseMetaData.cxx +++ b/connectivity/source/drivers/firebird/DatabaseMetaData.cxx @@ -1067,11 +1067,13 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumnPrivileges( // 3. TABLE_NAME { OUString sTableName = xRow->getString(1); + sanitizeIdentifier(sTableName); aCurrentRow.push_back(new ORowSetValueDecorator(sTableName)); } // 3. COLUMN_NAME { OUString sColumnName = xRow->getString(6); + sanitizeIdentifier(sColumnName); aCurrentRow.push_back(new ORowSetValueDecorator(sColumnName)); } // 4. GRANTOR @@ -1180,13 +1182,15 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumns( { // 3. TABLE_NAME { - OUString aTableName = xRow->getString(1); - aCurrentRow[3] = new ORowSetValueDecorator(aTableName); + OUString sTableName = xRow->getString(1); + sanitizeIdentifier(sTableName); + aCurrentRow[3] = new ORowSetValueDecorator(sTableName); } // 4. Column Name { - OUString aColumnName = xRow->getString(2); - aCurrentRow[4] = new ORowSetValueDecorator(aColumnName); + OUString sColumnName = xRow->getString(2); + sanitizeIdentifier(sColumnName); + aCurrentRow[4] = new ORowSetValueDecorator(sColumnName); } // 5. Datatype @@ -1348,7 +1352,8 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTables( { ODatabaseMetaDataResultSet::ORow aCurrentRow(3); - OUString aTableName = xRow->getString(1); + OUString sTableName = xRow->getString(1); + sanitizeIdentifier(sTableName); sal_Int16 systemFlag = xRow->getShort(2); sal_Int16 tableType = xRow->getShort(3); uno::Reference< XBlob > xBlob = xRow->getBlob(4); @@ -1383,7 +1388,7 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTables( // TABLE_CAT (catalog) may be null -- thus we omit it. // TABLE_SCHEM (schema) may be null -- thus we omit it. // TABLE_NAME - aCurrentRow.push_back(new ORowSetValueDecorator(aTableName)); + aCurrentRow.push_back(new ORowSetValueDecorator(sTableName)); // TABLE_TYPE aCurrentRow.push_back(new ORowSetValueDecorator(aTableType)); // REMARKS @@ -1599,6 +1604,7 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTablePrivileges( // 3. TABLE_NAME { OUString sTableName = xRow->getString(1); + sanitizeIdentifier(sTableName); aCurrentRow.push_back(new ORowSetValueDecorator(sTableName)); } // 4. GRANTOR diff --git a/connectivity/source/drivers/firebird/ResultSetMetaData.cxx b/connectivity/source/drivers/firebird/ResultSetMetaData.cxx index 9bcc6b3..31110fc 100644 --- a/connectivity/source/drivers/firebird/ResultSetMetaData.cxx +++ b/connectivity/source/drivers/firebird/ResultSetMetaData.cxx @@ -85,9 +85,11 @@ OUString SAL_CALL OResultSetMetaData::getColumnName(sal_Int32 column) throw(SQLException, RuntimeException) { verifyValidColumn(column); - return OUString(m_pSqlda->sqlvar[column-1].sqlname, + OUString sRet(m_pSqlda->sqlvar[column-1].sqlname, m_pSqlda->sqlvar[column-1].sqlname_length, RTL_TEXTENCODING_UTF8); + sanitizeIdentifier(sRet); + return sRet; } OUString SAL_CALL OResultSetMetaData::getTableName(sal_Int32 column) diff --git a/connectivity/source/drivers/firebird/Util.cxx b/connectivity/source/drivers/firebird/Util.cxx index f8259de..90c74fc 100644 --- a/connectivity/source/drivers/firebird/Util.cxx +++ b/connectivity/source/drivers/firebird/Util.cxx @@ -19,6 +19,12 @@ using namespace ::com::sun::star; using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::uno; +void firebird::sanitizeIdentifier(OUString& rIdentifier) +{ + if (rIdentifier.getLength() > 31) + rIdentifier = rIdentifier.copy(0, 31); +} + void firebird::evaluateStatusVector(ISC_STATUS_ARRAY& aStatusVector, const OUString& aCause, const uno::Reference< XInterface >& _rxContext) diff --git a/connectivity/source/drivers/firebird/Util.hxx b/connectivity/source/drivers/firebird/Util.hxx index 664a17d..fcd34bf 100644 --- a/connectivity/source/drivers/firebird/Util.hxx +++ b/connectivity/source/drivers/firebird/Util.hxx @@ -23,6 +23,14 @@ namespace connectivity { /** + * Make sure an identifier is safe to use within the databse. Currently + * firebird seems to return identifiers with 93 character (instead of + * 31). Use this to avoid issues when using the identifier in other + * sql queries. + */ + void sanitizeIdentifier(::rtl::OUString& rIdentifier); + + /** * Evaluate a firebird status vector and throw exceptions as necessary. * The content of the status vector is included in the thrown exception. */ _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits