-
Notifications
You must be signed in to change notification settings - Fork 5.9k
feat(ext/node): add sqlite-type symbol for DatabaseSync #30511
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
This comment was marked as outdated.
This comment was marked as outdated.
| ObjectDefineProperty(DatabaseSync.prototype, sqliteTypeSymbol, { | ||
| __proto__: null, | ||
| value: "node:sqlite", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@littledivy is this okay, or should we do it in Rust?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yea this can be done in Rust:
#[getter]
#[symbol("sqlite-type")]
fn sqlite_type(&self) -> bool {
true
}There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
thanks! let me fix it
Co-authored-by: Bartek Iwańczuk <biwanczuk@gmail.com> Signed-off-by: Alex Yang <himself65@outlook.com>
ext/node/ops/sqlite/database.rs
Outdated
|
|
||
| // Returns "node:sqlite" for Node.js compatibility | ||
| #[getter] | ||
| #[symbol("sqlite-type")] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@littledivy this seems to panic now... Should we fix it in deno_core and for the time being use the previous version in JS?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
oh we reuse the name as a Rust identifier in the macro. I think we can revert to the JS version for now @himself65. I will open a deno_core PR to fix the panic.
bartlomieju
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reverted to using a JS symbol for now. LGTM, thanks!
Related: nodejs/node@d1eabcb Related: nodejs/node#59405 Related: better-auth/better-auth#3869 Related: oven-sh/bun#22109 Nowadays, there are tons of database packages, like sqlite3, sqlite, better-sqlite, bun:sqlite... Checking the difference from them is pretty hard. instanceof is not good, since the developer will still need to import the module, which is costly. I think we should provide a symbol to distinguish different SQLite classes, at least nodejs could make the first step. --------- Signed-off-by: Alex Yang <himself65@outlook.com> Co-authored-by: Bartek Iwańczuk <biwanczuk@gmail.com>
Related: nodejs/node@d1eabcb
Related: nodejs/node#59405
Related: better-auth/better-auth#3869
Related: oven-sh/bun#22109
Nowadays, there are tons of database packages, like sqlite3, sqlite, better-sqlite, bun:sqlite... Checking the difference from them is pretty hard.
instanceof is not good, since the developer will still need to import the module, which is costly.
I think we should provide a symbol to distinguish different SQLite classes, at least nodejs could make the first step
This symbol could help with lots of duplicate properties checking, like https://github.com/kysely-org/kysely, https://github.com/knex/knex
It helps the library author to write an adapter for a different SQLite library. Right now, the library is checking the prototype method to determine whether it's node:sqlite, bun:sqlite, or better-sqlite... It was a lot of performance, and it's not stable as the API could change
https://github.com/better-auth/better-auth/blob/375e9f3ced6f3842c133f4cae689cb2a604ba94a/packages/better-auth/src/adapters/kysely-adapter/dialect.ts#L53-L109
I hope there's an easy way. like a symbol tag, to determine the user's land SQLite lib