ent-framework
Version:
A PostgreSQL graph-database-alike library with microsharding and row-level security
33 lines (22 loc) • 1.45 kB
Markdown
This is another privacy-unaware API call, similar to `count()`.
Returns true if there isat least one Ent in the database matching the `where` condition. Works across multiple microshards too.
In terms of the logic, `exists()` call is similar to `count() > 0` check, with two performance optimizations:
1. It uses `EXISTS` SQL clause, which doesn’t read more tuples from the database than needed (as opposed to `count()` aggregate).
2. During the run, it severely reduces the weight (basically, the probability) of seqscan to happen (with `SET enable_seqscan=off` directive merged with the query). I.e. it implies that you must have a good index covering the `where` condition.
As all API calls in Ent Framework, multiple parallel `exists()` calls are batched into a single SQL query:
```typescript
const [exists1, exists2] = await Promise.all([
EntTopic.exists(vc, { creator_id: "123" }),
EntTopic.exists(vc, { updated_at: { $gt: new Date("2024-01-01") } }),
]);
```
This sends the following SQL query to the underlying database:
```sql
SET enable_seqscan=off;
SELECT EXISTS (SELECT true FROM topics WHERE creator_id='123')
UNION ALL
SELECT EXISTS (SELECT true FROM topics WHERE created_at>'...')
```
The `exists()` call is even more useful to build custom privacy checks than `count()`, because it’s faster and almost guarantees using an index.