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 6039d2463b
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>
This commit is contained in:
@@ -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:
|
||||
@@ -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
|
||||
|
||||
Binary file not shown.
@@ -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();
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user