From a52ef0ef1ff129fde33d09caf41b85d262a65908 Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 22 Nov 2010 17:15:19 +0000 Subject: [PATCH] Patch level : 10.0 838 Files correlati : ve0.exe Ricompilazione Demo : [ ] Commento : Aggiunta la possibilita di mettere campi della maschera nei join delle ricerche (cliente SRM) git-svn-id: svn://10.65.10.50/branches/R_10_00@21160 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- include/maskfld.cpp | 1 + include/relation.cpp | 43 +++++++++++++++++++++++++++++++++++++++---- include/relation.h | 8 ++++++++ 3 files changed, 48 insertions(+), 4 deletions(-) diff --git a/include/maskfld.cpp b/include/maskfld.cpp index 366735874..7ae4ed19e 100755 --- a/include/maskfld.cpp +++ b/include/maskfld.cpp @@ -2523,6 +2523,7 @@ int TBrowse::do_input( } } + _cursor->relation()->mask2rel(field().mask()); _cursor->setfilter(work, filter_update); _cursor->setregion(filtrec, filtrec); diff --git a/include/relation.cpp b/include/relation.cpp index 657094d6b..0a2e8365c 100755 --- a/include/relation.cpp +++ b/include/relation.cpp @@ -246,8 +246,11 @@ const char* TRelationdef::evaluate_expr(int j, const TLocalisamfile& to) TExpression& expr = (TExpression&)_exprs[j]; for (int k = 0; k < expr.numvar(); k++) { - const TFieldref fr(expr.varname(k), rec.num()); - expr.setvar(k, fr.read(rec)); + if (expr.varname(k)[0] != '#') + { + const TFieldref fr(expr.varname(k), rec.num()); + expr.setvar(k, fr.read(rec)); + } } const char* val = (const char*)expr.as_string(); @@ -256,8 +259,11 @@ const char* TRelationdef::evaluate_expr(int j, const TLocalisamfile& to) TExpression& altexpr = (TExpression&)_altexprs[j]; for (int k = 0; k < altexpr.numvar(); k++) { - const TFieldref fr(altexpr.varname(k), rec.num()); - altexpr.setvar(k, fr.read(rec)); + if (altexpr.varname(k)[0] != '#') + { + const TFieldref fr(altexpr.varname(k), rec.num()); + altexpr.setvar(k, fr.read(rec)); + } } val = (const char*)altexpr.as_string(); } @@ -949,6 +955,35 @@ bool TRelation::exist(int logicnum) const return lucky; } +void TRelation::mask2rel(const TMask & m) +{ + for (int i = 0; i < _reldefs.items(); i++) + { + TRelationdef& rdi = reldef(i); + + for (int j = 0; j < rdi._exprs.items(); j++) + { + TExpression& expr = (TExpression&)rdi._exprs[j]; + for (int k = 0; k < expr.numvar(); k++) + { + const char * name = expr.varname(k); + if (name[0] == '#') + expr.setvar(k, m.fld(0).evaluate_field(name)); + } + if (rdi._altexprs.objptr(j)) + { + TExpression& altexpr = (TExpression&)rdi._altexprs[j]; + for (int k = 0; k < altexpr.numvar(); k++) + { + const char * name = altexpr.varname(k); + if (name[0] == '#') + altexpr.setvar(k, m.fld(0).evaluate_field(name)); + } + } + } + } +} + /////////////////////////////////////////////////////////// // TCursor /////////////////////////////////////////////////////////// diff --git a/include/relation.h b/include/relation.h index cd299505b..449fac692 100755 --- a/include/relation.h +++ b/include/relation.h @@ -9,6 +9,10 @@ class TSort; #endif +#ifndef __MASK_H +class TMask; +#endif + // @doc EXTERNAL // @class TRelation | Classe per la definizione delle relazioni esistenti tra i file @@ -195,6 +199,10 @@ public: // TObject // (ritorna lo stato) TRecnotype operator --() { return prev(); } + + // @cmember Aggiorna i valori delle variabili udando maschera + // (ritorna lo stato) + void mask2rel(const TMask & m); // @cmember Costruttore dal numero logico del file TRelation(int logicnum);