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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy