diff options
author | Xisco Fauli <xiscofauli@libreoffice.org> | 2019-07-10 19:06:13 +0200 |
---|---|---|
committer | Xisco Faulí <xiscofauli@libreoffice.org> | 2019-07-11 15:23:17 +0200 |
commit | 2e26ef34bf1a2e5d1293e45cf3b1415d9514b056 (patch) | |
tree | 105bbaaaa82e6c0641b09bafed19034b3d7e0ddb /dbaccess/qa | |
parent | 721cef392f301321a632a1d9286d57cd45335649 (diff) |
tdf#126268: first byte is not used for the sign symbol
This code is just broken, negative numbers and positive
numbers above 25 are incorrectly migrated if using decimal.
E.g:
-1 -> 24,6
26 -> -6527'6
thus, delete it and pass the 8 bytes as they are to
lcl_double_dabble.
Note: this only fixes the positive numbers,
-1 still returns 24,6
Code introduced in 6039d2463b4cc503b963811b3b1471de3291ee09
Change-Id: Id0e249e47a91b274a247fb7e8b71353114149650
Reviewed-on: https://gerrit.libreoffice.org/75375
Tested-by: Jenkins
Reviewed-by: Lionel Elie Mamane <lionel@mamane.lu>
Reviewed-by: Xisco Faulí <xiscofauli@libreoffice.org>
Diffstat (limited to 'dbaccess/qa')
-rw-r--r-- | dbaccess/qa/unit/data/tdf126268.odb | bin | 0 -> 4877 bytes | |||
-rw-r--r-- | dbaccess/qa/unit/tdf126268.cxx | 85 |
2 files changed, 85 insertions, 0 deletions
diff --git a/dbaccess/qa/unit/data/tdf126268.odb b/dbaccess/qa/unit/data/tdf126268.odb Binary files differnew file mode 100644 index 000000000000..ffd00c140791 --- /dev/null +++ b/dbaccess/qa/unit/data/tdf126268.odb diff --git a/dbaccess/qa/unit/tdf126268.cxx b/dbaccess/qa/unit/tdf126268.cxx new file mode 100644 index 000000000000..967d5e671ff0 --- /dev/null +++ b/dbaccess/qa/unit/tdf126268.cxx @@ -0,0 +1,85 @@ +/* -*- 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 "dbtest_base.cxx" + +#include <hsqlimport.hxx> + +#include <osl/process.h> +#include <cppunit/plugin/TestPlugIn.h> +#include <com/sun/star/sdbc/DataType.hpp> +#include <com/sun/star/sdbc/XRow.hpp> +#include <cppunit/TestFixture.h> +#include <cppunit/extensions/HelperMacros.h> +#include <test/unoapi_test.hxx> +#include <svtools/miscopt.hxx> + +using namespace dbahsql; + +class Tdf126268Test : public DBTestBase +{ +public: + void testNumbers(); + + virtual void setUp() override; + + CPPUNIT_TEST_SUITE(Tdf126268Test); + + CPPUNIT_TEST(testNumbers); + + CPPUNIT_TEST_SUITE_END(); +}; + +void Tdf126268Test::setUp() +{ + DBTestBase::setUp(); + SvtMiscOptions aMiscOptions; + osl_setEnvironment(OUString{ "DBACCESS_HSQL_MIGRATION" }.pData, OUString{ "1" }.pData); +} + +struct expect_t +{ + sal_Int16 id; + OUString number; +}; + +static const expect_t expect[] + = { { 1, "0.00" }, { 2, "25.00" }, { 3, "26.00" }, { 4, "30.4" }, { 5, "45.8" } }; + +void Tdf126268Test::testNumbers() +{ + // the migration requires the file to be writable + utl::TempFile const temp(createTempCopy("tdf126268.odb")); + uno::Reference<XOfficeDatabaseDocument> const xDocument = getDocumentForUrl(temp.GetURL()); + + uno::Reference<XConnection> xConnection = getConnectionForDocument(xDocument); + + // select basically everything from the .odb + uno::Reference<XStatement> statement = xConnection->createStatement(); + const OUString sql{ "SELECT ID, Column1, Column2 FROM tableTest ORDER BY ID" }; + + uno::Reference<XResultSet> xRes = statement->executeQuery(sql); + uno::Reference<XRow> xRow(xRes, UNO_QUERY_THROW); + + // check result + for (auto& e : expect) + { + CPPUNIT_ASSERT(xRes->next()); + CPPUNIT_ASSERT_EQUAL(e.id, xRow->getShort(1)); + CPPUNIT_ASSERT_EQUAL(e.number, xRow->getString(2)); //decimal + CPPUNIT_ASSERT_EQUAL(e.number, xRow->getString(3)); //numeric + } + CPPUNIT_ASSERT(!xRes->next()); + + closeDocument(uno::Reference<lang::XComponent>(xDocument, uno::UNO_QUERY)); +} + +CPPUNIT_TEST_SUITE_REGISTRATION(Tdf126268Test); + +CPPUNIT_PLUGIN_IMPLEMENT(); |