@@ -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