fix(ext/node): implement DatabaseSync#applyChangeset() (#27967)

https://nodejs.org/api/sqlite.html#databaseapplychangesetchangeset-options

```js
const sourceDb = new DatabaseSync(':memory:');
const targetDb = new DatabaseSync(':memory:');

sourceDb.exec('CREATE TABLE data(key INTEGER PRIMARY KEY, value TEXT)');
targetDb.exec('CREATE TABLE data(key INTEGER PRIMARY KEY, value TEXT)');

const session = sourceDb.createSession();

const insert = sourceDb.prepare('INSERT INTO data (key, value) VALUES (?, ?)');
insert.run(1, 'hello');
insert.run(2, 'world');

const changeset = session.changeset();
targetDb.applyChangeset(changeset);
// Now that the changeset has been applied, targetDb contains the same data as sourceDb. 
```
This commit is contained in:
Divy Srivastava 2025-02-06 08:52:39 +05:30 committed by GitHub
parent bc8554878e
commit ece384c094
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 160 additions and 0 deletions

View file

@ -152,3 +152,32 @@ Deno.test({
}
},
});
Deno.test("[node/sqlite] applyChangeset across databases", () => {
const sourceDb = new DatabaseSync(":memory:");
const targetDb = new DatabaseSync(":memory:");
sourceDb.exec("CREATE TABLE data(key INTEGER PRIMARY KEY, value TEXT)");
targetDb.exec("CREATE TABLE data(key INTEGER PRIMARY KEY, value TEXT)");
const session = sourceDb.createSession();
const insert = sourceDb.prepare(
"INSERT INTO data (key, value) VALUES (?, ?)",
);
insert.run(1, "hello");
insert.run(2, "world");
const changeset = session.changeset();
targetDb.applyChangeset(changeset, {
filter(e) {
return e === "data";
},
});
const stmt = targetDb.prepare("SELECT * FROM data");
assertEquals(stmt.all(), [
{ key: 1, value: "hello", __proto__: null },
{ key: 2, value: "world", __proto__: null },
]);
});