sw/inc/calc.hxx | 11 ++++++++--- sw/source/core/bastyp/calc.cxx | 7 +++++++ sw/source/uibase/dbui/dbmgr.cxx | 8 +++++++- 3 files changed, 22 insertions(+), 4 deletions(-)
New commits: commit e8c47f47fc2bd96ef90e552759f927dd88a3646f Author: Jan-Marek Glogowski <glo...@fbihome.de> Date: Tue Jul 4 17:15:14 2017 +0200 tdf#108873 fix merge data handling in fields This is a regression from tdf#70346 / commit 4851cde7b98226b0f82ae2b191c290173e9b06c6 It added the whole DB row as variables to the SwCalc hash set. This works correct for conditionals when hiding sections, but not for conditionals used in fields - actually they break. Previously the field would do a fallback to query the DB again, if no variable was in the dict and the only possible variables in the dict could have been user-defined fields. This handles the added variables correctly for fields. Also fixes a bug to store the DB number values as number variables and adds the record number, as SwCalc::VarLook does. Reviewed-on: https://gerrit.libreoffice.org/39509 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Samuel Mehrbrodt <samuel.mehrbr...@cib.de> Conflicts: sw/inc/calc.hxx Change-Id: Ib0dbeda68234e671768ede55b2012235a3680276 diff --git a/sw/inc/calc.hxx b/sw/inc/calc.hxx index 6b85dbdf0968..63d42a6ecf3d 100644 --- a/sw/inc/calc.hxx +++ b/sw/inc/calc.hxx @@ -103,14 +103,16 @@ enum SwCalcError class SwSbxValue : public SbxValue { bool bVoid; + bool bDBvalue; public: // always default to a number. otherwise it will become a SbxEMPTY - SwSbxValue( long n = 0 ) : bVoid(false) { PutLong( n ); } - SwSbxValue( const double& rD ) : bVoid(false) { PutDouble( rD ); } + SwSbxValue( long n = 0 ) : bVoid(false), bDBvalue(false) { PutLong( n ); } + SwSbxValue( const double& rD ) : bVoid(false), bDBvalue(false) { PutDouble( rD ); } SwSbxValue( const SwSbxValue& rVal ) : SvRefBase( rVal ), SbxValue( rVal ), - bVoid(rVal.bVoid) + bVoid(rVal.bVoid), + bDBvalue(rVal.bDBvalue) {} virtual ~SwSbxValue(); @@ -120,6 +122,9 @@ public: bool IsVoidValue() {return bVoid;} void SetVoidValue(bool bSet) {bVoid = bSet;} + + bool IsDBvalue() {return bDBvalue;} + void SetDBvalue(bool bSet) {bDBvalue = bSet;} }; // Calculate HashTables for VarTable und Operations diff --git a/sw/source/core/bastyp/calc.cxx b/sw/source/core/bastyp/calc.cxx index 272b89f9357f..64a0ba1eddae 100644 --- a/sw/source/core/bastyp/calc.cxx +++ b/sw/source/core/bastyp/calc.cxx @@ -499,6 +499,13 @@ SwCalcExp* SwCalc::VarLook( const OUString& rStr, bool bIns ) pFndExp->nValue.PutDouble( pUField->GetValue() ); } } + else if ( !pFndExp->pFieldType && pFndExp->nValue.IsDBvalue() ) + { + if ( pFndExp->nValue.IsString() ) + pFndExp->nValue.PutString( pFndExp->nValue.GetOUString() ); + else if ( pFndExp->nValue.IsDouble() ) + pFndExp->nValue.PutDouble( pFndExp->nValue.GetDouble() ); + } return pFndExp; } diff --git a/sw/source/uibase/dbui/dbmgr.cxx b/sw/source/uibase/dbui/dbmgr.cxx index 253d4e9c036b..5c6540112fcb 100644 --- a/sw/source/uibase/dbui/dbmgr.cxx +++ b/sw/source/uibase/dbui/dbmgr.cxx @@ -2103,6 +2103,10 @@ bool SwDBManager::FillCalcWithMergeData( SvNumberFormatter *pDocFormatter, const OUString* pColNames = aColNames.getConstArray(); OUString aString; + // add the "record number" variable, as SwCalc::VarLook would. + rCalc.VarChange( GetAppCharClass().lowercase( + SwFieldType::GetTypeStr(TYP_DBSETNUMBERFLD) ), GetSelectedRecordId() ); + for( int nCol = 0; nCol < aColNames.getLength(); nCol++ ) { // get the column type @@ -2128,7 +2132,8 @@ bool SwDBManager::FillCalcWithMergeData( SvNumberFormatter *pDocFormatter, if( bValidValue ) { SwSbxValue aValue; - aValue.PutString( aString ); + aValue.PutDouble( aNumber ); + aValue.SetDBvalue( true ); SAL_INFO( "sw.ui", "'" << pColNames[nCol] << "': " << aNumber << " / " << aString ); rCalc.VarChange( pColNames[nCol], aValue ); } @@ -2137,6 +2142,7 @@ bool SwDBManager::FillCalcWithMergeData( SvNumberFormatter *pDocFormatter, { SwSbxValue aValue; aValue.PutString( aString ); + aValue.SetDBvalue( true ); SAL_INFO( "sw.ui", "'" << pColNames[nCol] << "': " << aString ); rCalc.VarChange( pColNames[nCol], aValue ); } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits