Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit5103be5

Browse files
committed
Bugfix and small refactor of rum_ts_join_pos
1 parent9d16555 commit5103be5

File tree

1 file changed

+31
-19
lines changed

1 file changed

+31
-19
lines changed

‎src/rum_ts_utils.c

Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -991,6 +991,7 @@ count_pos(char *ptr, int len)
991991
if (!(ptr[i]&HIGHBIT))
992992
count++;
993993
}
994+
Assert(!(ptr[i-1]&HIGHBIT));
994995
returncount;
995996
}
996997

@@ -2208,6 +2209,7 @@ rum_ts_join_pos(PG_FUNCTION_ARGS)
22082209
count2=count_pos(in2,VARSIZE_ANY_EXHDR(addInfo2)),
22092210
countRes=0;
22102211
inti1=0,i2=0;
2212+
intn_equals=0;
22112213
Sizesize;
22122214
WordEntryPospos1=0,
22132215
pos2=0,
@@ -2220,51 +2222,61 @@ rum_ts_join_pos(PG_FUNCTION_ARGS)
22202222
in1=decompress_pos(in1,&pos1);
22212223
in2=decompress_pos(in2,&pos2);
22222224

2223-
while(i1<count1&&i2<count2)
2225+
for(;;)
22242226
{
22252227
if (WEP_GETPOS(pos1)>WEP_GETPOS(pos2))
22262228
{
22272229
pos[countRes++]=pos2;
2228-
if (i2<count2)
2229-
in2=decompress_pos(in2,&pos2);
22302230
i2++;
2231+
if (i2 >=count2)
2232+
break;
2233+
in2=decompress_pos(in2,&pos2);
22312234
}
22322235
elseif (WEP_GETPOS(pos1)<WEP_GETPOS(pos2))
22332236
{
22342237
pos[countRes++]=pos1;
2235-
if (i1<count1)
2236-
in1=decompress_pos(in1,&pos1);
22372238
i1++;
2239+
if (i1 >=count1)
2240+
break;
2241+
in1=decompress_pos(in1,&pos1);
22382242
}
22392243
else
22402244
{
22412245
pos[countRes++]=pos1;
2246+
n_equals++;
2247+
i1++;
2248+
i2++;
22422249
if (i1<count1)
22432250
in1=decompress_pos(in1,&pos1);
22442251
if (i2<count2)
22452252
in2=decompress_pos(in2,&pos2);
2246-
i1++;
2247-
i2++;
2253+
if (i2 >=count2||i1 >=count1)
2254+
break;
22482255
}
22492256
}
22502257

2251-
while(i1<count1)
2252-
{
2253-
pos[countRes++]=pos1;
2254-
if (i1<count1)
2258+
if (i1<count1)
2259+
for(;;)
2260+
{
2261+
pos[countRes++]=pos1;
2262+
i1++;
2263+
if (i1 >=count1)
2264+
break;
22552265
in1=decompress_pos(in1,&pos1);
2256-
i1++;
2257-
}
2258-
2259-
while(i2<count2)
2266+
}
2267+
elseif (i2<count2)
22602268
{
2261-
pos[countRes++]=pos2;
2262-
if (i2<count2)
2269+
for(;;)
2270+
{
2271+
pos[countRes++]=pos2;
2272+
i2++;
2273+
if (i2 >=count2)
2274+
break;
22632275
in2=decompress_pos(in2,&pos2);
2264-
i2++;
2276+
}
22652277
}
22662278

2267-
Assert(countRes<= (count1+count2));
2279+
Assert(countRes==count1+count2-n_equals);
22682280

22692281
/*
22702282
* In some cases compressed positions may take more memory than

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp