connectivity/source/drivers/firebird/ResultSetMetaData.cxx | 12 ++++- dbaccess/qa/unit/data/tdf132924.odb |binary dbaccess/qa/unit/firebird.cxx | 28 +++++++++++++ 3 files changed, 37 insertions(+), 3 deletions(-)
New commits: commit 4590048952a9e62124641c512dc2d19122f7fb2d Author: Andreas Heinisch <andreas.heini...@yahoo.de> AuthorDate: Wed Mar 23 21:14:46 2022 +0100 Commit: Andreas Heinisch <andreas.heini...@yahoo.de> CommitDate: Fri Mar 25 13:37:57 2022 +0100 tdf#132924 - Firebird findColumn: return column alias if specified The function findColumn in a Basic macro should also find aliases for columns specified in an SQL query using a Firebird database. Change-Id: I96adb2564da1e18cee58f1c6803526d8ff4deabb Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131990 Tested-by: Jenkins Reviewed-by: Andreas Heinisch <andreas.heini...@yahoo.de> diff --git a/connectivity/source/drivers/firebird/ResultSetMetaData.cxx b/connectivity/source/drivers/firebird/ResultSetMetaData.cxx index 78d684a725a2..5653d29c4211 100644 --- a/connectivity/source/drivers/firebird/ResultSetMetaData.cxx +++ b/connectivity/source/drivers/firebird/ResultSetMetaData.cxx @@ -128,9 +128,15 @@ OUString SAL_CALL OResultSetMetaData::getSchemaName(sal_Int32) OUString SAL_CALL OResultSetMetaData::getColumnName(sal_Int32 column) { verifyValidColumn(column); - OUString sRet(m_pSqlda->sqlvar[column-1].sqlname, - m_pSqlda->sqlvar[column-1].sqlname_length, - RTL_TEXTENCODING_UTF8); + char* pColumnName = m_pSqlda->sqlvar[column - 1].sqlname; + sal_Int32 nColumnNameLength = m_pSqlda->sqlvar[column - 1].sqlname_length; + // tdf#132924 - return column alias if specified + if (m_pSqlda->sqlvar[column - 1].aliasname_length > 0) + { + pColumnName = m_pSqlda->sqlvar[column - 1].aliasname; + nColumnNameLength = m_pSqlda->sqlvar[column - 1].aliasname_length; + } + OUString sRet(pColumnName, nColumnNameLength, RTL_TEXTENCODING_UTF8); sanitizeIdentifier(sRet); return sRet; } diff --git a/dbaccess/qa/unit/data/tdf132924.odb b/dbaccess/qa/unit/data/tdf132924.odb new file mode 100644 index 000000000000..8cee7bcbabfd Binary files /dev/null and b/dbaccess/qa/unit/data/tdf132924.odb differ diff --git a/dbaccess/qa/unit/firebird.cxx b/dbaccess/qa/unit/firebird.cxx index e67a4d10c097..7a8143810097 100644 --- a/dbaccess/qa/unit/firebird.cxx +++ b/dbaccess/qa/unit/firebird.cxx @@ -27,10 +27,12 @@ class FirebirdTest public: void testEmptyDBConnection(); void testIntegerDatabase(); + void testTdf132924(); CPPUNIT_TEST_SUITE(FirebirdTest); CPPUNIT_TEST(testEmptyDBConnection); CPPUNIT_TEST(testIntegerDatabase); + CPPUNIT_TEST(testTdf132924); CPPUNIT_TEST_SUITE_END(); }; @@ -90,6 +92,32 @@ void FirebirdTest::testIntegerDatabase() closeDocument(uno::Reference<lang::XComponent>(xDocument, uno::UNO_QUERY)); } +void FirebirdTest::testTdf132924() +{ + uno::Reference<XOfficeDatabaseDocument> xDocument = getDocumentForFileName(u"tdf132924.odb"); + uno::Reference<XConnection> xConnection = getConnectionForDocument(xDocument); + + uno::Reference<XStatement> xStatement = xConnection->createStatement(); + CPPUNIT_ASSERT(xStatement.is()); + + uno::Reference<XResultSet> xResultSet = xStatement->executeQuery("SELECT * FROM AliasTest"); + CPPUNIT_ASSERT(xResultSet.is()); + CPPUNIT_ASSERT(xResultSet->next()); + + uno::Reference<XRow> xRow(xResultSet, UNO_QUERY); + CPPUNIT_ASSERT(xRow.is()); + uno::Reference<XColumnLocate> xColumnLocate(xRow, UNO_QUERY); + CPPUNIT_ASSERT(xColumnLocate.is()); + + // Without the fix in place, this test would have failed with: + // - Expected: 1 + // - Actual : The column name 'TestId' is not valid + CPPUNIT_ASSERT_EQUAL(sal_Int16(1), xRow->getShort(xColumnLocate->findColumn("TestId"))); + CPPUNIT_ASSERT_EQUAL(OUString("TestName"), xRow->getString(xColumnLocate->findColumn("TestName"))); + + closeDocument(uno::Reference<lang::XComponent>(xDocument, uno::UNO_QUERY)); +} + CPPUNIT_TEST_SUITE_REGISTRATION(FirebirdTest); CPPUNIT_PLUGIN_IMPLEMENT();