Skip to content

Commit 953f2b8

Browse files
committed
fix misc
1 parent bea5a50 commit 953f2b8

File tree

2 files changed

+21
-12
lines changed

2 files changed

+21
-12
lines changed

roaringbitmap--0.2.65.1--0.2.65.2.sql

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ CREATE
4343
CREATE
4444
OR REPLACE FUNCTION rb_cardinality(roaringbitmap, integer, integer, integer) RETURNS BIGINT AS 'MODULE_PATHNAME',
4545
'rb_cardinality_step' LANGUAGE C STRICT IMMUTABLE;
46+
CREATE
47+
OR REPLACE FUNCTION rb_cardinality(roaringbitmap, integer, integer, integer, integer[]) RETURNS BIGINT AS 'MODULE_PATHNAME',
48+
'rb_cardinality_step_intval' LANGUAGE C STRICT IMMUTABLE;
4649
CREATE
4750
OR REPLACE FUNCTION rb_is_empty(roaringbitmap) RETURNS bool AS 'MODULE_PATHNAME',
4851
'rb_is_empty' LANGUAGE C STRICT IMMUTABLE;

roaringbitmap.c

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -390,14 +390,22 @@ Datum
390390
uint32_t rmax = roaring_bitmap_maximum(r1);
391391

392392
max = max == -1 ? rmax : max;
393+
393394
uint32_t p = min;
395+
uint32_t n;
394396
int64 card1 = 0;
395397
while (p <= max)
396398
{
397-
if (p >= rmin)
399+
if (p + step >= rmin)
398400
{
399-
if (roaring_bitmap_contains_range(r1, p, p + step))
400-
card1++;
401+
for (n = 0; n < step; n++)
402+
{
403+
if (roaring_bitmap_contains(r1, n + p))
404+
{
405+
card1++;
406+
break;
407+
}
408+
}
401409
}
402410
p += step;
403411
}
@@ -432,8 +440,6 @@ Datum
432440
na = ARRNELEMS(a);
433441
da = ARRPTR(a);
434442

435-
roaring_bitmap_t *rt = roaring_bitmap_create();
436-
437443
uint32_t rmin = roaring_bitmap_minimum(r1);
438444
uint32_t rmax = roaring_bitmap_maximum(r1);
439445

@@ -442,21 +448,21 @@ Datum
442448
int64 card1 = 0;
443449
while (p <= max)
444450
{
445-
if (p >= rmin)
451+
if (p + step >= rmin)
446452
{
447453
for (n = 0; n < na; n++)
448454
{
449-
roaring_bitmap_add(rt, da[n] + p);
455+
if (roaring_bitmap_contains(r1, da[n] + p))
456+
{
457+
card1++;
458+
break;
459+
}
450460
}
451-
if (roaring_bitmap_intersect(r1, rt))
452-
card1++;
453-
roaring_bitmap_clear(rt);
454461
}
455462
p += step;
456463
}
457464

458465
roaring_bitmap_free(r1);
459-
roaring_bitmap_free(rt);
460466
PG_RETURN_INT64(card1);
461467
}
462468

@@ -703,7 +709,7 @@ Datum
703709

704710
for (n = 0; n < na; n++)
705711
{
706-
roaring_bitmap_add(r1, da[n] +);
712+
roaring_bitmap_add(r1, da[n]);
707713
}
708714

709715
size_t expectedsize = roaring_bitmap_portable_size_in_bytes(r1);

0 commit comments

Comments
 (0)