[Libreoffice-commits] core.git: dbaccess/CppunitTest_dbaccess_tdf126268.mk dbaccess/Module_dbaccess.mk dbaccess/qa dbaccess/source

Xisco Fauli (via logerrit) logerrit at kemper.freedesktop.org
Thu Jul 11 13:24:20 UTC 2019


 dbaccess/CppunitTest_dbaccess_tdf126268.mk       |  107 +++++++++++++++++++++++
 dbaccess/Module_dbaccess.mk                      |    1 
 dbaccess/qa/unit/data/tdf126268.odb              |binary
 dbaccess/qa/unit/tdf126268.cxx                   |   85 ++++++++++++++++++
 dbaccess/source/filter/hsqldb/rowinputbinary.cxx |   20 ----
 5 files changed, 194 insertions(+), 19 deletions(-)

New commits:
commit 2e26ef34bf1a2e5d1293e45cf3b1415d9514b056
Author:     Xisco Fauli <xiscofauli at libreoffice.org>
AuthorDate: Wed Jul 10 19:06:13 2019 +0200
Commit:     Xisco FaulĂ­ <xiscofauli at libreoffice.org>
CommitDate: Thu Jul 11 15:23:17 2019 +0200

    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 at mamane.lu>
    Reviewed-by: Xisco FaulĂ­ <xiscofauli at libreoffice.org>

diff --git a/dbaccess/CppunitTest_dbaccess_tdf126268.mk b/dbaccess/CppunitTest_dbaccess_tdf126268.mk
new file mode 100644
index 000000000000..379e2f27433b
--- /dev/null
+++ b/dbaccess/CppunitTest_dbaccess_tdf126268.mk
@@ -0,0 +1,107 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# 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/.
+#
+
+$(eval $(call gb_CppunitTest_CppunitTest,dbaccess_tdf126268))
+
+$(eval $(call gb_CppunitTest_add_exception_objects,dbaccess_tdf126268, \
+    dbaccess/qa/unit/tdf126268 \
+))
+
+$(eval $(call gb_CppunitTest_use_libraries,dbaccess_tdf126268, \
+    basegfx \
+    comphelper \
+    cppu \
+    cppuhelper \
+    dba \
+	dbahsql \
+    dbu \
+    sdbt \
+    drawinglayer \
+    editeng \
+    for \
+    forui \
+    i18nlangtag \
+    msfilter \
+    oox \
+    sal \
+    salhelper \
+    sax \
+    sb \
+    sfx \
+    sot \
+    svl \
+    svt \
+    svx \
+    svxcore \
+    test \
+    subsequenttest \
+    tl \
+    tk \
+    ucbhelper \
+	unotest \
+    utl \
+    vbahelper \
+    vcl \
+    xo \
+))
+
+$(eval $(call gb_CppunitTest_use_ure,dbaccess_tdf126268))
+$(eval $(call gb_CppunitTest_use_vcl,dbaccess_tdf126268))
+
+$(eval $(call gb_CppunitTest_set_include,dbaccess_tdf126268,\
+	-I$(SRCDIR)/dbaccess/source/filter/hsqldb \
+    $$(INCLUDE) \
+))
+
+$(eval $(call gb_CppunitTest_use_api,dbaccess_tdf126268,\
+    offapi \
+    oovbaapi \
+    udkapi \
+))
+
+$(eval $(call gb_CppunitTest_use_components,dbaccess_tdf126268,\
+    basic/util/sb \
+    comphelper/util/comphelp \
+    configmgr/source/configmgr \
+    connectivity/source/drivers/hsqldb/hsqldb \
+    connectivity/source/drivers/firebird/firebird_sdbc \
+    connectivity/source/manager/sdbc2 \
+    dbaccess/util/dba \
+    dbaccess/util/dbu \
+    dbaccess/util/sdbt \
+    dbaccess/source/filter/xml/dbaxml \
+    filter/source/config/cache/filterconfig1 \
+    forms/util/frm \
+    framework/util/fwk \
+    i18npool/util/i18npool \
+    linguistic/source/lng \
+    oox/util/oox \
+    package/source/xstor/xstor \
+    package/util/package2 \
+    sax/source/expatwrap/expwrap \
+    scripting/source/basprov/basprov \
+    scripting/util/scriptframe \
+    sfx2/util/sfx \
+    sot/util/sot \
+    svl/source/fsstor/fsstorage \
+    svl/util/svl \
+    toolkit/util/tk \
+    ucb/source/core/ucb1 \
+    ucb/source/ucp/file/ucpfile1 \
+    ucb/source/ucp/tdoc/ucptdoc1 \
+    unotools/util/utl \
+    unoxml/source/rdf/unordf \
+    unoxml/source/service/unoxml \
+    uui/util/uui \
+    xmloff/util/xo \
+))
+
+$(eval $(call gb_CppunitTest_use_configuration,dbaccess_tdf126268))
+
+# vim: set noet sw=4 ts=4:
diff --git a/dbaccess/Module_dbaccess.mk b/dbaccess/Module_dbaccess.mk
index a45acd3af2f4..0a66d5fe7586 100644
--- a/dbaccess/Module_dbaccess.mk
+++ b/dbaccess/Module_dbaccess.mk
@@ -37,6 +37,7 @@ ifeq ($(ENABLE_FIREBIRD_SDBC),TRUE)
 $(eval $(call gb_Module_add_check_targets,dbaccess,\
     $(if $(ENABLE_JAVA),CppunitTest_dbaccess_hsqlbinary_import) \
     $(if $(ENABLE_JAVA),CppunitTest_dbaccess_tdf119625) \
+    $(if $(ENABLE_JAVA),CppunitTest_dbaccess_tdf126268) \
 ))
 
 # remove if we have a be file for this
diff --git a/dbaccess/qa/unit/data/tdf126268.odb b/dbaccess/qa/unit/data/tdf126268.odb
new file mode 100644
index 000000000000..ffd00c140791
Binary files /dev/null and b/dbaccess/qa/unit/data/tdf126268.odb differ
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();
diff --git a/dbaccess/source/filter/hsqldb/rowinputbinary.cxx b/dbaccess/source/filter/hsqldb/rowinputbinary.cxx
index 24448f627971..a12ab0513abf 100644
--- a/dbaccess/source/filter/hsqldb/rowinputbinary.cxx
+++ b/dbaccess/source/filter/hsqldb/rowinputbinary.cxx
@@ -90,26 +90,8 @@ OUString lcl_makeStringFromBigint(const std::vector<sal_uInt8>& bytes)
 {
     std::vector<sal_uInt8> aBytes{ bytes };
 
-    OUStringBuffer sRet;
-    // two's complement
-    if (aBytes[0] == 1)
-    {
-        sRet.append("-");
-        for (auto& byte : aBytes)
-            byte = ~byte;
-        // add 1 to byte array
-        // FIXME e.g. 10000 valid ?
-        for (size_t i = aBytes.size() - 1; i != 0; --i)
-        {
-            aBytes[i] += 1;
-            if (aBytes[i] != 0)
-                break;
-        }
-    }
     // convert binary to BCD
-    OUString sNum = lcl_double_dabble(aBytes);
-    sRet.append(sNum);
-    return sRet.makeStringAndClear();
+    return lcl_double_dabble(aBytes);
 }
 
 OUString lcl_putDot(const OUString& sNum, sal_Int32 nScale)


More information about the Libreoffice-commits mailing list