trgm-regexp-gist-optimize.patch
application/octet-stream
Filename: trgm-regexp-gist-optimize.patch
Type: application/octet-stream
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
| File | + | − |
|---|---|---|
| contrib/pg_trgm/trgm_gist.c | 0 | 0 |
diff --git a/contrib/pg_trgm/trgm_gist.c b/contrib/pg_trgm/trgm_gist.c
new file mode 100644
index 178f073..f2b4a17
*** a/contrib/pg_trgm/trgm_gist.c
--- b/contrib/pg_trgm/trgm_gist.c
*************** gtrgm_consistent(PG_FUNCTION_ARGS)
*** 401,418 ****
len = ARRNELEM(qtrg);
trgm *ptr = GETARR(qtrg);
BITVECP sign = GETSIGN(key);
! /* descend only if at least one trigram is present */
res = false;
for (k = 0; k < len; k++)
{
CPTRGM(((char *) &tmp), ptr + k);
! if (GETBIT(sign, HASHVAL(tmp)))
! {
! res = true;
! break;
! }
}
}
}
else
--- 401,424 ----
len = ARRNELEM(qtrg);
trgm *ptr = GETARR(qtrg);
BITVECP sign = GETSIGN(key);
+ bool *check;
! /*
! * trigramsMatchGraph implements monotonous boolean
! * function, i.e. false positives in "check" array can't
! * lead to false negative answer. That's why we can use
! * corresponding signature bits in the capacity of "check"
! * array.
! */
! check = (bool *) palloc(len * sizeof(bool));
res = false;
for (k = 0; k < len; k++)
{
CPTRGM(((char *) &tmp), ptr + k);
! check[k] = GETBIT(sign, HASHVAL(tmp));
}
+ res = trigramsMatchGraph(cache->graph, check);
+ pfree(check);
}
}
else