Patch level : 10.0 148
Files correlati : ve0.exe Ricompilazione Demo : [ ] Commento : Aggiunta funzione call_filterfunction per riposizionarsi dopo la sua chiamata se necessario git-svn-id: svn://10.65.10.50/trunk@17493 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
8232857172
commit
696eabe624
@ -1134,15 +1134,28 @@ TRecnotype TCursor::buildcursor(TRecnotype rp)
|
|||||||
return ap;
|
return ap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TCursor::call_filterfunction(const TRelation * r, TRecnotype recno) const
|
||||||
|
{
|
||||||
|
bool ok = true;
|
||||||
|
if (_filterfunction)
|
||||||
|
{
|
||||||
|
// memorizzo la chiave prima di eventuali spostamenti
|
||||||
|
const char * s0 = DB_index_getkey(file().handle());
|
||||||
|
ok = _filterfunction(_if);
|
||||||
|
// ripristino la chiave dopo eventuali spostamenti
|
||||||
|
const int handle = file().handle();
|
||||||
|
if (recno != DB_index_recno(handle))
|
||||||
|
DB_index_go(handle, s0, recno);
|
||||||
|
}
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
bool TCursor::filtercursor(TRecnotype recno)
|
bool TCursor::filtercursor(TRecnotype recno)
|
||||||
{
|
{
|
||||||
file().readat(recno);
|
file().readat(recno);
|
||||||
|
|
||||||
|
|
||||||
if (update_relation())
|
if (update_relation())
|
||||||
{
|
{
|
||||||
// memorizzo la chiave prima di eventuali spostamenti
|
// memorizzo la chiave prima di eventuali spostamenti
|
||||||
const TString s0(DB_index_getkey(file().handle()));
|
const char * s0 = DB_index_getkey(file().handle());
|
||||||
|
|
||||||
_if->update(-filter_limit());
|
_if->update(-filter_limit());
|
||||||
|
|
||||||
@ -1152,13 +1165,10 @@ bool TCursor::filtercursor(TRecnotype recno)
|
|||||||
DB_index_go(handle, s0, recno);
|
DB_index_go(handle, s0, recno);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ok = TRUE;
|
bool ok = call_filterfunction(_if, recno);
|
||||||
|
|
||||||
if (_filterfunction)
|
if (ok && _fexpr)
|
||||||
ok = _filterfunction(_if);
|
|
||||||
if (ok && _fexpr)
|
|
||||||
ok = __evalcondition(*_if, _fexpr, _frefs);
|
ok = __evalcondition(*_if, _fexpr, _frefs);
|
||||||
|
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1249,19 +1259,20 @@ bool TCursor::ok() const
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (update_relation())
|
const TRecnotype old = file().recno();
|
||||||
|
|
||||||
|
if (update_relation())
|
||||||
{
|
{
|
||||||
const TRecnotype old = file().recno();
|
|
||||||
_if->update();
|
_if->update();
|
||||||
if (DB_recno(file().handle()) != old)
|
if (DB_recno(file().handle()) != old)
|
||||||
file().readat(old);
|
file().readat(old);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((_filterfunction ? _filterfunction(_if) : TRUE ) &&
|
if (call_filterfunction(_if, old) &&
|
||||||
(_fexpr ? __evalcondition(*_if, _fexpr, _frefs) : TRUE))
|
(_fexpr ? __evalcondition(*_if, _fexpr, _frefs) : true))
|
||||||
return TRUE;
|
return true;
|
||||||
|
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TCursor::changed()
|
bool TCursor::changed()
|
||||||
@ -1603,8 +1614,8 @@ TRecnotype TCursor::read(TIsamop op, TReclock lockop)
|
|||||||
|
|
||||||
TCursor::TCursor(TRelation* r, const char* fil, int nkey,
|
TCursor::TCursor(TRelation* r, const char* fil, int nkey,
|
||||||
const TRectype *from, const TRectype* to, int tilde)
|
const TRectype *from, const TRectype* to, int tilde)
|
||||||
: _if(r), _nkey(nkey), _fexpr(NULL), _frozen(FALSE), _filter_update(FALSE),
|
: _if(r), _nkey(nkey), _fexpr(NULL), _frozen(false), _filter_update(false),
|
||||||
_filterfunction_update(FALSE), _filter_limit(0), _filterfunction(NULL)
|
_filterfunction_update(false), _filter_limit(0), _filterfunction(NULL)
|
||||||
{
|
{
|
||||||
file().setkey(_nkey);
|
file().setkey(_nkey);
|
||||||
_pos = 0;
|
_pos = 0;
|
||||||
|
@ -309,6 +309,9 @@ protected:
|
|||||||
int filter_limit() const { return _filter_limit; }
|
int filter_limit() const { return _filter_limit; }
|
||||||
void set_filter_limit(int l) { _filter_limit = l; }
|
void set_filter_limit(int l) { _filter_limit = l; }
|
||||||
|
|
||||||
|
bool call_filterfunction(const TRelation * r, TRecnotype recno) const;
|
||||||
|
|
||||||
|
|
||||||
// @access Public Member
|
// @access Public Member
|
||||||
public:
|
public:
|
||||||
// @cmember Si sposta alla posizione <p nr>
|
// @cmember Si sposta alla posizione <p nr>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user