Skip to content

Commit 520fc61

Browse files
committed
improve updateHook documentation
1 parent c35e161 commit 520fc61

File tree

2 files changed

+84
-34
lines changed

2 files changed

+84
-34
lines changed

package-lock.json

Lines changed: 14 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/api.js

Lines changed: 70 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1399,28 +1399,76 @@ Module["onRuntimeInitialized"] = function onRuntimeInitialized() {
13991399
return this;
14001400
};
14011401

1402-
/** Registers the update hook with SQLite
1403-
@param {function(operation, database, table, rowId) | null} callback
1404-
executed whenever a row in any rowid table is changed
1405-
1406-
For each changed row, the callback is called once with the change
1407-
('insert', 'update' or 'delete'), the database name and table name
1408-
where the change happened and the rowid of the row that has been
1409-
changed.
1410-
1411-
rowid is cast to a plain number, if it exceeds Number.MAX_SAFE_INTEGER
1412-
an error will be thrown.
1413-
1414-
The callback MUST NOT modify the database in any way.
1415-
1416-
Only a single callback can be registered. Unregister the callback by
1417-
passing null.
1418-
1419-
Not called for some updates like ON REPLACE CONFLICT and TRUNCATE (a
1420-
DELETE FROM without a WHERE clause).
1421-
1422-
See sqlite docs on sqlite3_update_hook for more details.
1423-
*/
1402+
/** Registers an update hook with SQLite.
1403+
*
1404+
* Every time a row is changed by whatever means, the callback is called
1405+
* once with the change (`'insert'`, `'update'` or `'delete'`), the database
1406+
* name and table name where the change happened and the
1407+
* [rowid](https://www.sqlite.org/rowidtable.html)
1408+
* of the row that has been changed.
1409+
*
1410+
* The rowid is cast to a plain number. If it exceeds
1411+
* `Number.MAX_SAFE_INTEGER` (2^53 - 1), an error will be thrown.
1412+
*
1413+
* **Important notes:**
1414+
* - The callback **MUST NOT** modify the database in any way
1415+
* - Only a single callback can be registered at a time
1416+
* - Unregister the callback by passing `null`
1417+
* - Not called for some updates like `ON REPLACE CONFLICT` and `TRUNCATE`
1418+
* (a `DELETE FROM` without a `WHERE` clause)
1419+
*
1420+
* See SQLite documentation on
1421+
* [sqlite3_update_hook](https://www.sqlite.org/c3ref/update_hook.html)
1422+
* for more details
1423+
*
1424+
* @example
1425+
* // Create a database and table
1426+
* var db = new SQL.Database();
1427+
* db.exec(`
1428+
* CREATE TABLE users (
1429+
* id INTEGER PRIMARY KEY, -- this is the rowid column
1430+
* name TEXT,
1431+
* active INTEGER
1432+
* )
1433+
* `);
1434+
*
1435+
* // Register an update hook
1436+
* var changes = [];
1437+
* db.updateHook(function(operation, database, table, rowId) {
1438+
* changes.push({operation, database, table, rowId});
1439+
* console.log(`${operation} on ${database}.${table} row ${rowId}`);
1440+
* });
1441+
*
1442+
* // Insert a row - triggers the update hook with 'insert'
1443+
* db.run("INSERT INTO users VALUES (1, 'Alice', 1)");
1444+
* // Logs: "insert on main.users row 1"
1445+
*
1446+
* // Update a row - triggers the update hook with 'update'
1447+
* db.run("UPDATE users SET active = 0 WHERE id = 1");
1448+
* // Logs: "update on main.users row 1"
1449+
*
1450+
* // Delete a row - triggers the update hook with 'delete'
1451+
* db.run("DELETE FROM users WHERE id = 1");
1452+
* // Logs: "delete on main.users row 1"
1453+
*
1454+
* // Unregister the update hook
1455+
* db.updateHook(null);
1456+
*
1457+
* // This won't trigger any callback
1458+
* db.run("INSERT INTO users VALUES (2, 'Bob', 1)");
1459+
*
1460+
* @param {function|null} callback -
1461+
* Callback to be executed whenever a row changes.
1462+
* Set to `null` to unregister the callback.
1463+
* @param {string} callback.operation -
1464+
* 'insert', 'update', or 'delete'
1465+
* @param {string} callback.database -
1466+
* database where the change occurred
1467+
* @param {string} callback.table -
1468+
* table where the change occurred
1469+
* @param {number} callback.rowId -
1470+
* rowid of the changed row
1471+
*/
14241472
Database.prototype["updateHook"] = function updateHook(callback) {
14251473
if (this.updateHookFunctionPtr) {
14261474
// unregister and cleanup a previously registered update hook

0 commit comments

Comments
 (0)