Known Limitations

This page consolidates all known limitations across Stoolap. Each limitation is categorized by feature area and links to the relevant documentation for more details.

JSON

  • No modification functions: JSON_SET, JSON_INSERT, JSON_REPLACE, and JSON_REMOVE are not yet supported. JSON values can be read and queried but not modified in place.
  • No path query functions: JSON_CONTAINS and JSON_CONTAINS_PATH are not yet available.
  • No JSON property indexing: Indexes cannot be created on values within JSON documents.

See JSON Support for supported JSON features.

Foreign Keys

  • Single-column only: Composite foreign keys (referencing multiple columns) are not yet supported.
  • No recursive CASCADE: ON UPDATE CASCADE does not recursively cascade to grandchild tables when the child’s FK column is also its PK.
  • Self-referencing insertion order: Self-referencing foreign keys require careful ordering of inserts.

See Foreign Keys for full FK documentation.

Date and Time

  • UTC only: Timestamps are normalized to UTC internally. There are no explicit functions for time zone conversion.
  • Approximate intervals: INTERVAL calculations for months and years use approximations (30 days per month, 365 days per year) rather than calendar-aware calculations.

See Date and Time Handling for supported date/time features.

Temporal Queries (AS OF)

  • No subqueries with AS OF: AS OF clauses cannot be combined with subqueries.
  • System clock dependency: Timestamp resolution depends on the system clock precision.
  • VACUUM removes history: Running VACUUM permanently removes all historical row versions not needed by currently active transactions. After a VACUUM, AS OF queries referencing timestamps before the VACUUM will return no results.

See Temporal Queries for AS OF usage.

Views

  • Read-only: INSERT, UPDATE, and DELETE on views are not supported.
  • Shared namespace: View names and table names share the same namespace and cannot conflict.
  • Nesting limit: Maximum nesting depth of 32 levels prevents infinite recursion from circular definitions.

See Views for view documentation.

ALTER TABLE

  • Blocking: ALTER TABLE operations may temporarily block concurrent writes.
  • No existing data validation: MODIFY COLUMN can change nullability (add or remove NOT NULL), but does not validate that existing data satisfies the new constraint.
  • No composite PK changes: Composite primary key modifications are not supported.

See ALTER TABLE for full syntax.

ON DUPLICATE KEY UPDATE

  • No inserted value reference: Unlike MySQL’s VALUES() function, Stoolap does not provide special syntax to reference values from the failed insert.

See ON DUPLICATE KEY UPDATE for upsert documentation.

WebAssembly (WASM)

Feature Status
File persistence Not available (in-memory only, data lost on page reload)
Background threads Not available (no parallel execution, no automatic cleanup)
Cleanup Manual only (use VACUUM or PRAGMA vacuum)
WAL / Snapshots Not available (no crash recovery needed)

See WebAssembly for WASM usage.

General SQL

  • No stored procedures or triggers: Only built-in functions and SQL statements are supported.
  • No user-defined functions: Custom functions cannot be registered through SQL.
  • No GRANT/REVOKE: There is no access control or permission system. Stoolap is an embedded database, so access control is managed at the application level.
  • No full-text search: Only pattern matching (LIKE, ILIKE, GLOB, REGEXP) is available.
  • No materialized views: Views are always computed on demand.
  • No event-based notifications: There is no LISTEN/NOTIFY mechanism.

Data Types

  • No BLOB/BINARY type: Binary data is not directly supported as a column type.
  • No ARRAY type: Array columns are not supported. Use JSON arrays as an alternative.
  • No ENUM type: Enumerated types are not available. Use TEXT with CHECK constraints as an alternative.
  • No INTERVAL type as column: INTERVAL is supported in expressions (e.g., NOW() - INTERVAL '1 day') but not as a stored column type.