Skip to content

Commit 22cda06

Browse files
committed
fix decrement
1 parent 9f36902 commit 22cda06

File tree

5 files changed

+32
-15
lines changed

5 files changed

+32
-15
lines changed

roaring.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9114,6 +9114,15 @@ roaring_uint32_iterator_t *roaring_create_iterator(const roaring_bitmap_t *ra) {
91149114
return newit;
91159115
}
91169116

9117+
/* Mod by ZEROMAX create previous iterator */
9118+
roaring_uint32_iterator_t *roaring_create_iterator_last(const roaring_bitmap_t *ra) {
9119+
roaring_uint32_iterator_t *newit =
9120+
(roaring_uint32_iterator_t *)malloc(sizeof(roaring_uint32_iterator_t));
9121+
if (newit == NULL) return NULL;
9122+
roaring_init_iterator_last(ra, newit);
9123+
return newit;
9124+
}
9125+
91179126
roaring_uint32_iterator_t *roaring_copy_uint32_iterator(
91189127
const roaring_uint32_iterator_t *it) {
91199128
roaring_uint32_iterator_t *newit =

roaring.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7174,6 +7174,9 @@ void roaring_init_iterator_last(const roaring_bitmap_t *ra,
71747174
*/
71757175
roaring_uint32_iterator_t *roaring_create_iterator(const roaring_bitmap_t *ra);
71767176

7177+
/* Mod by ZEROMAX create previous iterator */
7178+
roaring_uint32_iterator_t *roaring_create_iterator_last(const roaring_bitmap_t *ra);
7179+
71777180
/**
71787181
* Advance the iterator. If there is a new value, then it->has_value is true.
71797182
* The new value is in it->current_value. Values are traversed in increasing

roaringbitmap--0.2.65--0.2.65.1.sql

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ CREATE
55
OR REPLACE FUNCTION roaringbitmap(bytea) RETURNS roaringbitmap AS 'MODULE_PATHNAME',
66
'roaringbitmap' LANGUAGE C STRICT IMMUTABLE;
77

8+
DROP CAST IF EXISTS (bytea AS roaringbitmap);
89
CREATE CAST (bytea AS roaringbitmap) WITH FUNCTION roaringbitmap(bytea);
10+
DROP CAST IF EXISTS (roaringbitmap AS bytea);
911
CREATE CAST (roaringbitmap AS bytea) WITHOUT FUNCTION;
1012

1113
CREATE
@@ -113,7 +115,7 @@ CREATE
113115
'rb_iterate_decrement' LANGUAGE C STRICT IMMUTABLE;
114116

115117

116-
CREATE
118+
CREATE
117119
OR REPLACE FUNCTION rb_and_trans(internal, roaringbitmap) RETURNS internal AS 'MODULE_PATHNAME',
118120
'rb_and_trans' LANGUAGE C IMMUTABLE;
119121
CREATE

roaringbitmap--0.2.65.1.sql

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
SET
33
search_path = pg_catalog;
44
--- data type --
5-
CREATE
5+
CREATE
66
OR REPLACE FUNCTION roaringbitmap_in(cstring) RETURNS roaringbitmap AS 'MODULE_PATHNAME',
77
'roaringbitmap_in' LANGUAGE C STRICT IMMUTABLE;
88
CREATE
@@ -25,8 +25,12 @@ CREATE TYPE roaringbitmap (
2525
CREATE
2626
OR REPLACE FUNCTION roaringbitmap(bytea) RETURNS roaringbitmap AS 'MODULE_PATHNAME',
2727
'roaringbitmap' LANGUAGE C STRICT IMMUTABLE;
28+
29+
DROP CAST IF EXISTS (bytea AS roaringbitmap);
2830
CREATE CAST (bytea AS roaringbitmap) WITH FUNCTION roaringbitmap(bytea);
31+
DROP CAST IF EXISTS (roaringbitmap AS bytea);
2932
CREATE CAST (roaringbitmap AS bytea) WITHOUT FUNCTION;
33+
3034
-- functions --
3135
CREATE
3236
OR REPLACE FUNCTION rb_build(integer[]) RETURNS roaringbitmap AS 'MODULE_PATHNAME',

roaringbitmap.c

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -650,7 +650,6 @@ Datum
650650
}
651651
}
652652

653-
654653
//bitmap iterate decrement
655654
PG_FUNCTION_INFO_V1(rb_iterate_decrement);
656655
Datum rb_iterate_decrement(PG_FUNCTION_ARGS);
@@ -674,7 +673,7 @@ Datum
674673
if (!r1)
675674
ereport(ERROR, (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), errmsg("bitmap format is error")));
676675

677-
roaring_uint32_iterator_t *fctx = roaring_create_iterator(r1);
676+
roaring_uint32_iterator_t *fctx = roaring_create_iterator_last(r1);
678677

679678
funcctx->user_fctx = fctx;
680679

@@ -882,19 +881,19 @@ Datum
882881

883882
// Is the second argument non-null?
884883
if (!PG_ARGISNULL(1))
884+
{
885+
r2 = (roaring_bitmap_t *)PG_GETARG_POINTER(1);
886+
887+
if (PG_ARGISNULL(0))
885888
{
886-
r2 = (roaring_bitmap_t *)PG_GETARG_POINTER(1);
887-
888-
if (PG_ARGISNULL(0))
889-
{
890-
r1 = roaring_bitmap_copy(r2);
891-
}
892-
else
893-
{
894-
roaring_bitmap_and_inplace(r1, r2);
895-
}
896-
roaring_bitmap_free(r2);
889+
r1 = roaring_bitmap_copy(r2);
897890
}
891+
else
892+
{
893+
roaring_bitmap_and_inplace(r1, r2);
894+
}
895+
roaring_bitmap_free(r2);
896+
}
898897

899898
PG_RETURN_POINTER(r1);
900899
}

0 commit comments

Comments
 (0)