Patch level : No patch on Main trunk
Files correlati : Ricompilazione Demo : [ ] Commento : Risolti conflitti git-svn-id: svn://10.65.10.50/trunk@9216 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
5e3ed3ba8c
commit
d41a2da1e2
@ -989,60 +989,52 @@ bool TCursor::has_simple_filter() const
|
|||||||
|
|
||||||
TRecnotype TCursor::buildcursor(TRecnotype rp)
|
TRecnotype TCursor::buildcursor(TRecnotype rp)
|
||||||
{
|
{
|
||||||
FILE* _f = open_index(TRUE);
|
|
||||||
|
|
||||||
const int handle = file().handle();
|
|
||||||
if (DB_reccount(handle) == 0)
|
|
||||||
{
|
|
||||||
close_index(_f);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
const int l = strlen(to());
|
|
||||||
int junk = DB_index_seek(handle, (char*)(const char*) from());
|
|
||||||
if (junk < 0) junk = get_error(junk);
|
|
||||||
if (junk == _iseof)
|
|
||||||
{
|
|
||||||
close_index(_f);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
TRecnotype oldrecno=0,ap = 0;
|
TRecnotype oldrecno=0,ap = 0;
|
||||||
size_t pagecnt = 0;
|
int pagecnt = 0;
|
||||||
const bool filtered = has_filter();
|
const bool filtered = has_filter();
|
||||||
|
|
||||||
|
FILE* _f = open_index(TRUE);
|
||||||
|
|
||||||
|
const int fhnd = file().handle();
|
||||||
|
if (DB_reccount(fhnd) == 0)
|
||||||
|
{
|
||||||
|
close_index(_f);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
fseek(_f, 0L, SEEK_SET);
|
||||||
|
|
||||||
|
const int l = strlen(to());
|
||||||
|
int junk = DB_index_seek(fhnd, (char*)(const char*) from());
|
||||||
|
if (junk < 0) junk=get_error(junk);
|
||||||
|
if (junk == _iseof) return 0;
|
||||||
|
|
||||||
TRecnotype* page = new TRecnotype [CMAXELPAGE];
|
TRecnotype* page = new TRecnotype [CMAXELPAGE];
|
||||||
// TRecnotype pos = DB_index_recno(handle);
|
|
||||||
// pos = DB_index_recno(fhnd);
|
DB_index_recno(fhnd);
|
||||||
_pos=-1;
|
_pos=-1;
|
||||||
|
|
||||||
const bool simple_filter = has_simple_filter();
|
const bool simple_filter = has_simple_filter();
|
||||||
|
|
||||||
while (TRUE)
|
while (TRUE)
|
||||||
{
|
{
|
||||||
if (DB_index_eof(handle)) break;
|
if (DB_index_eof(fhnd)) break;
|
||||||
const char* s0 = DB_index_getkey(handle);
|
const char* s0 = DB_index_getkey(fhnd);
|
||||||
if (l && (strncmp(to(), s0, l) < 0)) break;
|
if (l && (strncmp(to(), s0, l) < 0)) break;
|
||||||
const TRecnotype recno = DB_index_recno(handle);
|
const TRecnotype recno = DB_index_recno(fhnd);
|
||||||
if (recno == oldrecno) break; // means that no more keys are available
|
if (recno == oldrecno) break; // means that no more keys are available
|
||||||
oldrecno=recno;
|
oldrecno=recno;
|
||||||
if (pagecnt == CMAXELPAGE)
|
if (pagecnt == CMAXELPAGE)
|
||||||
{
|
{
|
||||||
if (filtered && !simple_filter)
|
if (filtered && !simple_filter)
|
||||||
pagecnt = filtercursor(pagecnt,page);
|
pagecnt = filtercursor(pagecnt,page);
|
||||||
|
fwrite(page,sizeof(TRecnotype),pagecnt,_f);
|
||||||
size_t written = fwrite(page, sizeof(TRecnotype), pagecnt, _f);
|
for (int i= 0; i< pagecnt; i++)
|
||||||
CHECKS(written == pagecnt, "Error writing index ", (const char*)_indexname);
|
|
||||||
|
|
||||||
if (_pos < 0)
|
|
||||||
{
|
|
||||||
for (size_t i= 0; i < pagecnt; i++)
|
|
||||||
if (page[i] == rp)
|
if (page[i] == rp)
|
||||||
{
|
{
|
||||||
_pos = ap + i;
|
_pos = ap + i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
ap += pagecnt;
|
ap += pagecnt;
|
||||||
pagecnt = 0;
|
pagecnt = 0;
|
||||||
}
|
}
|
||||||
@ -1054,31 +1046,27 @@ TRecnotype TCursor::buildcursor(TRecnotype rp)
|
|||||||
else
|
else
|
||||||
page[pagecnt++] = recno;
|
page[pagecnt++] = recno;
|
||||||
|
|
||||||
DB_index_next(handle);
|
DB_index_next(fhnd);
|
||||||
int rt=get_error(-1);
|
/*
|
||||||
|
int rt=get_error(-1); // Get Last Codebase Error
|
||||||
if (rt != NOERR)
|
if (rt != NOERR)
|
||||||
fatal_box("Can't read index n. %d - file n. %d", DB_tagget(handle), file().num());
|
fatal_box("Can't read index n. %d - file n. %d",DB_tagget(fhnd), file().num());
|
||||||
|
*/
|
||||||
} // while
|
} // while
|
||||||
if (pagecnt)
|
if (pagecnt)
|
||||||
{
|
{
|
||||||
if (filtered && !simple_filter)
|
if (filtered && !simple_filter)
|
||||||
pagecnt = filtercursor(pagecnt, page);
|
pagecnt = filtercursor(pagecnt, page);
|
||||||
|
|
||||||
size_t written = fwrite(page, sizeof(TRecnotype), pagecnt, _f);
|
fwrite(page, sizeof(TRecnotype), pagecnt, _f);
|
||||||
CHECKS(written == pagecnt, "Error writing index ", (const char*)_indexname);
|
for (int i = 0; i < pagecnt; i++)
|
||||||
if (_pos < 0)
|
|
||||||
{
|
|
||||||
for (size_t i = 0; i < pagecnt; i++)
|
|
||||||
if (page[i] == rp)
|
if (page[i] == rp)
|
||||||
{
|
{
|
||||||
_pos = ap + i;
|
_pos = ap + i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
ap += pagecnt;
|
ap += pagecnt;
|
||||||
}
|
}
|
||||||
if (_pos == -1 && ap > 0)
|
|
||||||
_pos = 0;
|
|
||||||
delete page;
|
delete page;
|
||||||
close_index(_f);
|
close_index(_f);
|
||||||
return ap;
|
return ap;
|
||||||
@ -2835,7 +2823,11 @@ TSortedfile::TSortedfile(int logicnum, TRelation* rel, const char* ordexpr, cons
|
|||||||
_rel=rel;
|
_rel=rel;
|
||||||
_curs = new TSorted_cursor(_rel,ordexpr,"",nkey);
|
_curs = new TSorted_cursor(_rel,ordexpr,"",nkey);
|
||||||
|
|
||||||
_curs->setfilter(filter,TRUE); //BUG: cursors doesn't update rel.
|
if (&curr()!=&(_curs->file().curr()))
|
||||||
|
_curs->file().set_curr(&curr());
|
||||||
|
|
||||||
|
_curs->setfilter(filter,TRUE); //must pass TRUE because cursors doesn't update rel (BUG).
|
||||||
|
// DON't move this line BEFORE set_curr : filter's fieldrefs are allocated at cursor setfilter
|
||||||
}
|
}
|
||||||
|
|
||||||
// @mfunc Distruttore
|
// @mfunc Distruttore
|
||||||
|
@ -98,10 +98,10 @@ void TString512::strncpy(const char* s, int n)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef FOXPRO
|
#ifdef FOXPRO
|
||||||
HIDDEN TString512 _spark;
|
HIDDEN TString512 spark;
|
||||||
#else
|
#else
|
||||||
HIDDEN TString512* ptr_spark = new TString512;
|
HIDDEN TString512* ptr_spark = new TString512;
|
||||||
HIDDEN TString512& _spark = *ptr_spark;
|
HIDDEN TString512& spark = *ptr_spark;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
inline bool is_space(char c)
|
inline bool is_space(char c)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user