Skip to content

Commit 96eb649

Browse files
committed
fix: ensure expired items are deleted with correct prefixed keys
1 parent e9bb74d commit 96eb649

3 files changed

Lines changed: 35 additions & 1 deletion

File tree

.changeset/loose-beds-run.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'bentocache': patch
3+
---
4+
5+
Remove database entries with correct prefixed keys

packages/bentocache/src/drivers/database/database.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ export class DatabaseDriver extends BaseDriver implements CacheDriver<true> {
9191
if (!result) return
9292

9393
if (this.#isExpired(result.expiresAt)) {
94-
await this.#adapter.delete(key)
94+
await this.#adapter.delete(this.getItemKey(key))
9595
return
9696
}
9797

packages/bentocache/tests/drivers/database.spec.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,33 @@ test.group('Database driver', () => {
6262
assert.isUndefined(hasFoo)
6363
assert.isUndefined(hasFoo2)
6464
})
65+
66+
test('should delete expired item with correct prefixed key', async ({ assert, cleanup }) => {
67+
const db = knex({
68+
client: 'better-sqlite3',
69+
connection: { filename: ':memory:' },
70+
useNullAsDefault: true,
71+
})
72+
73+
const driver = new DatabaseDriver(new KnexAdapter({ connection: db }), {
74+
tableName: 'cache',
75+
autoCreateTable: true,
76+
prefix: 'test',
77+
pruneInterval: false,
78+
})
79+
cleanup(() => driver.disconnect())
80+
81+
await driver.set('foo', 'bar', 100)
82+
83+
const hasKeyBefore = await db('cache').where('key', 'test:foo').first()
84+
assert.isDefined(hasKeyBefore)
85+
86+
await sleep(150)
87+
88+
const result = await driver.get('foo')
89+
assert.isUndefined(result)
90+
91+
const hasKeyAfter = await db('cache').where('key', 'test:foo').first()
92+
assert.isUndefined(hasKeyAfter)
93+
})
6594
})

0 commit comments

Comments
 (0)