Skip to content

Release v1.13.0

Latest
Compare
Choose a tag to compare
@github-actions github-actions released this 15 Mar 21:19

sql.js v1.13 Release Notes

This release of sql.js brings significant updates and improvements, primarily focused on modernizing the underlying toolchain and enhancing functionality.

The online playground was rewritten:

sql editor

Key highlights include:

🚀 Dependency Updates and Modernization

  • SQLite Core Upgrade: sql.js is now built with SQLite version 3.49. This incorporates all the enhancements and bug fixes from SQLite versions 3.45.0 through 3.49.1. See SQLite release notes. Notable SQLite improvements in this range include:

    • Query Planner Enhancements: Expect improved query performance due to optimizations in query planning, especially for complex queries, star joins, and queries involving IN operators. These improvements are detailed in the SQLite release notes for versions 3.47.0, 3.49.0, and 3.46.0.
    • New SQL Features: Take advantage of new SQL functions and features introduced in SQLite 3.47+, such as:
      • Enhanced iif() function with support for multiple arguments (SQLite 3.49.0).
      • Right-hand side negative indexing for JSON ->> operator (SQLite 3.47.0).
      • json_pretty() function for formatted JSON output (SQLite 3.46.0).
      • Support for underscore characters in numeric literals (SQLite 3.46.0).
      • Improved date and time function modifiers like ceiling and floor (SQLite 3.46.0).
    • Bug Fixes and Stability: Benefit from numerous bug fixes and stability improvements across various SQLite components, ensuring a more robust database experience. Refer to the SQLite Changelog for detailed fixes in versions 3.45.1, 3.45.2, 3.45.3, 3.46.1, 3.47.1, 3.47.2, 3.49.1, and 3.44.2.
  • Emscripten 4.x Upgrade: sql.js is now compiled with Emscripten 4. See changes in emscripten. This major update to the Emscripten toolchain brings several under-the-hood improvements:

    • Modern JavaScript Output: Emscripten 4 generates more modern JavaScript code. While compatibility with older browsers is still maintained through transpilation where necessary, this move to modern JS internally can lead to performance improvements in modern environments.
    • LLVM 19.1.6: The underlying compiler toolchain is updated to LLVM 19.1.6, which includes improvements to code generation, optimizations, and potentially better support for newer WebAssembly features.
    • Minimum Node.js Version Increase (for Emscripten Toolchain): While sql.js itself aims for broad compatibility, the Emscripten toolchain now requires Node.js v18.3 as a minimum (and is tested with Node.js 22 in this release). This is primarily relevant for developers building sql.js from source.
  • Node.js Worker Thread Compatibility: The worker scripts are now fully compatible with Node.js worker threads, allowing for seamless integration in Node.js environments leveraging worker threads. This is a significant step towards better performance and concurrency in Node.js.

  • Removal of Puppeteer Dev Dependency: The project no longer depends on Puppeteer for worker tests. Worker tests now utilize Node.js worker threads directly, simplifying the testing setup and removing an external dependency. This also speeds up the devcontainer installation.

✨ New Features

  • updateHook API (#604): This release introduces a new low-level API, Database.updateHook, providing a mechanism to register a callback function that is invoked whenever a row is updated, inserted, or deleted in the database. view docs
    • This feature wraps the native sqlite3_update_hook functionality, allowing developers to monitor database modifications at a granular level.
    • Callbacks receive information about the operation type (update, insert, delete), the database name, table name, and rowid.

🛠️ Internal and Development Changes

  • Worker Debug Script: Added a new debug script specifically for worker environments to aid in development and troubleshooting of worker-related issues.