npm install kysely-sqlcommenterSqlCommenterPlugin does not change the API of Kysely. You can only provide it callback for getting the metadata for the comment. AsyncLocalStorage or any alternative is needed.
Initialize the AsyncLocalStorage:
import { AsyncLocalStorage } from 'node:async_hooks'
import { SqlCommentLike } from 'kysely-sqlcommenter'
const asyncLocalStorage = new AsyncLocalStorage<SqlCommentLike>()Register the SqlCommenterPlugin using the asyncLocalStorage in callback:
import { SqlCommenterPlugin } from 'kysely-sqlcommenter'
const db = new Kysely<DB>({
// ... kysely config
plugins: [
// Provide callback
new SqlCommenterPlugin(() => asyncLocalStorage.getStore()),
],
})Create a root middleware, register the root span with storage via asyncLocalStorage.run. Everything in the callstack of this next will have access to a shared copy of the storage (new calls will have exclusive storage). You can initialize it with a value.
app.use((req, res, next) => {
asyncLocalStorage.run({ controller: req.path }, next)
})Any kysely calls will have the appropriate SqlComment
db.selectFrom('cats').select(['id', 'name'])
// select "id", "name" from "cats" /*controller='cats'*/See the full working example for express here, including concurrency demo and adjusting the comment in other middleware.
- Tests, examples, integration tests
- SqlCommenter spec tests
- Callback API + Examples with CLS
- Builder API (not really a priority with the amount of hacking needed)
- CI
- Query support (assume only DML, other are not useful)
- Select
- Update (will be lot easier after kysely-org/kysely#835)
- Insert (will be lot easier after kysely-org/kysely#835)
- Delete (will be lot easier after kysely-org/kysely#835)
