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
This commit is contained in:
alex 2010-11-22 17:15:19 +00:00
parent 6ec84414f9
commit a52ef0ef1f
3 changed files with 48 additions and 4 deletions

View File

@ -2523,6 +2523,7 @@ int TBrowse::do_input(
}
}
_cursor->relation()->mask2rel(field().mask());
_cursor->setfilter(work, filter_update);
_cursor->setregion(filtrec, filtrec);

View File

@ -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
///////////////////////////////////////////////////////////

View File

@ -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 <m>
// (ritorna lo stato)
void mask2rel(const TMask & m);
// @cmember Costruttore dal numero logico del file
TRelation(int logicnum);