# 8.7 Release Notes

> **📝 Note**: - To deploy a SingleStore 8.7 cluster, refer to the [Deploy SingleStore Guide](https://docs.singlestore.com/db/v9.1/deploy.md).
> - To make a backup of a database in this release or to restore a database backup to this release, follow [this guide](https://docs.singlestore.com/db/v9.1/manage-data/back-up-and-restore-data.md).
> - The [data\_conversion\_compatibility\_level](https://docs.singlestore.com/db/v9.1/reference/configuration-reference/engine-variables/list-of-engine-variables/#sync-variables-lists-4.md) engine variable now defaults to `'8.0'` in new installations. This results in stricter [data type conversions](https://docs.singlestore.com/db/v9.1/create-a-database/understanding-how-datatype-can-affect-performance.md). The value is not changed when upgrading to version 8.0. This new `data_conversion_compatibility_level` setting additionally flags invalid string-to-number conversion in `INSERT` statements, `PIPELINES`, `LOAD DATA` commands, and type casts.
>
>   Applications will likely see more compatibility issues flagged when run against installations with `data_conversion_compatibility_level` set to `'8.0'` than when run with a lower compatibility level.
> - New deployments of SingleStore 8.7 require a 64-bit version of RHEL/AlmaLinux 7 or later, or Debian 8 or later, with kernel 3.10 or later and `glibc` 2.17 or later. Refer to the [System Requirements and Recommendations](https://docs.singlestore.com/db/v9.1/reference/configuration-reference/cluster-configuration/system-requirements-and-recommendations.md) for additional information.
> - In 8.7, string functions such as `CONCAT`, `LENGTH`, `SUBSTR`, and `HEX` operate on the binary representation of vectors. In 8.5, these functions operated on the JSON representation of vectors; that behavior is deprecated. Refer to [Vector Type](https://docs.singlestore.com/db/v9.1/reference/sql-reference/data-types/vector-type.md) for more information.
> - The default output format for vectors has been changed to binary format from JSON format for performance reasons. An engine variable `vector_type_project_format` has been added to allow the users to control whether vectors are output in binary or JSON format. The default value for new 8.7 deployments is BINARY. Upgrades from 8.5 will set the value to JSON to preserve 8.5 behavior. Future upgrades will leave the variable as is.

## Default Charset and Collation

The default charset has changed in version 8.7:

* The default server character set is now utf8mb4 (previously utf8).
* The default collation is now utf8mb4\_general\_ci (previously utf8\_general\_ci).

Newly created clusters will have these values as defaults, ensuring that characters with 4-byte encoding (such as emojis) are treated correctly. Existing clusters will retain their current settings.

The following additional notes apply:

**JSON Collation**: JSON now has utf8mb4\_bin collation unless collation is specified explicitly, regardless of the value of the default character set. This change can affect JSON columns in the information schema, as they will have utf8mb4\_bin collation after an upgrade.

**Upgrading**: For all existing clusters, the default collation and collations of TEXT/JSON columns will not be changed.

**`JSON_EXTRACT_STRING`**: To support using the `JSON_EXTRACT_STRING` built-in function on JSON with utf8mb4\_bin collation, it is highly recommended to set the `json_extract_string_collation` engine variable to `SERVER_V2`, which is default beginning in version 7.8.21. If `json_extract_string_collation` is set to `AUTO` or `SERVER`, using a JSON argument with utf8mb4\_bin collation may throw an error. To avoid this, set `json_extract_string_collation` to `SERVER_V2`.

## Release Highlights

> **📝 Note**: This is the complete list of new features and fixes in engine version 8.7 **and its maintenance patches**. For a list of all new features and bug fixes added in maintenance releases only, see the maintenance release changelog. If you are upgrading from an existing 8.7 version, see the [changelog](https://docs.singlestore.com/db/v9.1/release-notes/singlestore-memsql/8-7-release-notes/maintenance-release-changelog-v-8-7.md) for a list of new features and fixes added to 8.7 by date.

## Vector Range Search

Vector range search allows users to query for vectors that have a similarity score beyond a specified threshold using a vector index. This feature supplements the existing indexed vector search in SingleStore. Refer to [Vector Range Search](https://docs.singlestore.com/db/v9.1/reference/sql-reference/vector-functions/vector-range-search.md) for more information.

## Full-Text Search Enhancement

Full-text search version 2 is the enhanced and recommended use of the full-text search functionality in SingleStore. The legacy full-text search functionality has been deprecated.

Full-text search version 2:

* Supports integration with the Java Lucene library.
* Supports [BM25](https://en.wikipedia.org/wiki/Okapi_BM25) relevancy scoring for term queries at a partition level.
* Allows creation and querying of full-text indexes on JSON columns.

Refer to [Working with Full-Text Search](https://docs.singlestore.com/db/v9.1/developer-resources/functional-extensions/working-with-full-text-search.md) for more information.

## Schema and Pipeline Inference

Table and pipeline definitions can be inferred from input files using the `INFER` and `CREATE INFERRED` commands which create definitions for table or pipeline based on input files. Refer to [Schema and Pipeline Inference](https://docs.singlestore.com/db/v9.1/load-data/about-singlestore-pipelines/pipeline-concepts/schema-and-pipeline-inference.md) for more information.

## Ingest from Apache Iceberg

[Apache Iceberg](https://iceberg.apache.org/) tables can be directly ingested into SingleStore using pipelines. Refer to [Iceberg Ingest](https://docs.singlestore.com/db/v9.1/load-data/data-sources/iceberg-ingest.md) for more information.

## Feedback Reoptimization

This feature can be used to reoptimize a poorly performing query by feeding in the statistics collected from the query's initial run back into the optimizer instead of repeatedly using the original estimates. It helps fix query performance issues without the need to add any hints or rewrites. Refer to [Query Tuning](https://docs.singlestore.com/db/v9.1/query-data/query-tuning/#section-idm234346860053849.md) for more information.

## Other Improvements and Fixes

## Vector Type Fixes and Enhancements

## Vector - Project Format

The default projection format for `VECTOR`-type columns now is binary format. The format can be controlled via the `vector_type_project_format` engine variable. The currently supported values are `BINARY` and `JSON`. Refer to [Vector Type](https://docs.singlestore.com/db/v9.1/reference/sql-reference/data-types/vector-type.md) for more information and for examples of using the `vector_type_project_format` engine variable.

## Vector - String Builtins

String builtins now operate on the binary representation of `VECTOR` arguments instead of the JSON string representation. String functions, such as `CONCAT`, `LENGTH`, and `SUBSTR` previously operated on the JSON representation of a vector, interpreted as a string. This behavior is deprecated. In the 8.7 release, string functions operate on the binary representation of a vector.

This is a breaking change; those using the `VECTOR` type should review their application for the use of string functions on `VECTOR` arguments before upgrading to 8.7. Refer to [Vector Type](https://docs.singlestore.com/db/v9.1/reference/sql-reference/data-types/vector-type.md) for more information.

## Vector - HEX Function

The `HEX` function now operates on the binary representation of `VECTOR` arguments instead of the JSON string representation.

This is a **breaking change**; those using the `VECTOR` type should review their application for the use of the `HEX` function on vector arguments before upgrading to 8.7. Refer to [Vector Type](https://docs.singlestore.com/db/v9.1/reference/sql-reference/data-types/vector-type.md) for more information.

## Vector Comparisons

Added the ability to compare `VECTOR`-type expressions vs. `BLOB`s.

## Other Performance Enhancements

* **Enhancement:** Improved the performance of regular expression (regex) operations. (8.7.18)
* **Enhancement**: Improved performance of `REPLACE` query into a columnstore table when table-level locking is triggered. (8.7.17)
* **Enhancement**: The library used for building IVF\_PQFS indexes, FAISS, has been updated to improve the performance of IVF\_PQFS indexes. With this change, `nprobe` is now a search option for IVF\_PQFS indexes in addition to being an index-building option. Refer to [Vector Indexing](https://docs.singlestore.com/db/v9.1/reference/sql-reference/vector-functions/vector-indexing.md) for more information.
* **Bugfix**: Resolved inaccurate memory estimation due to out-of-sync stats between aggregators and leaf nodes by only using collated memory usage stat for profile queries.
* **Enhancement**: Improved the performance of Point In Time Recovery (PITR).
* **Enhancement**: Improved performance related to `PIPELINES_BATCHES` information schema table.
* **Enhancement**: Improved query performance up to 2x when retrieving data blobs from the object store for unlimited storage databases. This is achieved by allowing blob files that are downloaded from the object store to `fsync()` in the background while enabling query threads to read them immediately. This process occurs transparently without any user intervention.

Query Optimization Enhancements:

* Enabled decorrelating scalar subselects that are not equi-joins on fields. Decorrelation involves transforming a query that contains a correlated subselect into a join that can be more efficiently executed by the database engine.
* Improved the optimization of queries containing `ORDER BY` and `LIMIT` in a subselect.

## New Information Schema Views and Columns

* **Enhancement**: Added `source_type` to the `config_json` shown in the `information_schema.PIPELINES view`. (8.7.44)
* **Enhancement**: Added the `TABLE_NAME` column to the `LOAD_DATA_ERRORS` information schema view. `TABLE_NAME` is the name of the table associated with the error. (8.7.21)
* **Enhancement**: Added the `MV_BOTTOMLESS_API_EVENTS_SUMMARY` information schema view that contains a summary of remote API calls made from the engine. Refer to [MV\_BOTTOMLESS\_API\_EVENTS\_SUMMARY](https://docs.singlestore.com/db/v9.1/reference/information-schema-reference/unlimited-storage/mv-bottomless-api-events-summary.md) for more information. (8.7.20)
* **Enhancement**: Add bottle service reliability metrics to `MV_BOTTOMLESS_STATUS_EXTENDED`. (8.7.16)
* **Enhancement**: Fixed the `KILLED_QUERIES` counter in `MV_RESOURCE_POOL_STATUS`. (8.7.16)
* **Enhancement**: Updated the `MV_BOTTOMLESS_STATUS_EXTENDED` information schema table (8.7.4):

  * Removed the `LATEST_API_FAILURE_RATE` and `AVERAGE_API_LATENCY_US` columns.
  * Added the following columns:

    `SUCCESS_API_PER_SECOND` - Number of successful remote storage api calls per second over the last 30 seconds.

    `FAILED_API_PER_SECOND` - Number of failed remote storage api calls per second over the last 30 seconds.

    `AVERAGE_API_EVENT_LATENCY_US` - Average latency to complete a remote storage api event over the past 30 seconds. Includes time taken on retries or waiting for rate limiting.

    `AVERAGE_API_RESPONSE_LATENCY_US` - Average latency of receiving a response for a remote storage api request. Excludes waiting for rate limiting or retries. NOTE: This is relevant only for S3. otherwise this field is identical to `AVERAGE_API_EVENT_LATENCY_US`.
* **Enhancement**: Added the following monitoring metrics to the `information_schema.mv_bottomless_status_extended` view: `NUM_SUCCESS_API_REQUESTS`, `NUM_FAILED_API_REQUESTS`, `LATEST_API_FAILURE_RATE`, `AVERAGE_API_LATENCY_US`, `IS_GC_RUNNING`, `NUM_REMOTE_FILES_DELETED`, and `NUM_SLOW_DOWNS`. (8.7.2)
* Added the new [`MV_VERSION_HISTORY`](https://docs.singlestore.com/db/v9.1/reference/information-schema-reference/management/mv-version-history.md) view. This view shows the upgrade history for a cluster. There are also two related views: `LMV_VERSION_HISTORY_EXTENDED` and `MV_VERSION_HISTORY_EXTENDED`.

## New Commands and Functions

* **New feature**: Added support for the following parameter in the `CONFIG` clause of `CREATE PIPELINE AS ... LOAD DATA S3` statement:

  * `file_compression`: Decompresses files with the specified extensions.

  Refer to [S3 Configurations](https://docs.singlestore.com/db/v9.1/load-data/data-sources/configuration-options-for-different-sources/#section-idm234488319463038.md) for more information. (8.7.22)
* **New feature**: Added a `SHOW CDC EXTRACTOR POOL` command that displays information about the CDC-in pipelines. Refer to [SHOW CDC EXTRACTOR POOL](https://docs.singlestore.com/db/v9.1/reference/sql-reference/show-commands/show-cdc-extractor-pool.md) for more information. (8.7.20)
* **New Feature**: Added the new `FULLTEXT SERVICE STOP` command. This command stops the full-text V2 service running on any node connected to the aggregator on which the command is run.

  Syntax:
  ```sql
  FULLTEXT SERVICE STOP
  ```
  `FULLTEXT SERVICE STOP` requires the `PROCESS` permission.

  This command is useful when making configuration changes to the full-text service via engine variables that only take effect when the service (re)starts (`fts2_max_connections`, for example). Also can be used to force a reclaim of resources the service might be using before the idle-out time is reached.

  The service run state can be checked using `SHOW FULLTEXT SERVICE STATUS`. (8.7.12)
* **Enhancement**: Added Feedback Reoptimization via the `REOPTIMIZE` SQL command. The command is used to reoptimize a query based on previous executions of it. You can reoptimize a query multiple times, pick execution plans from any iteration, and then choose the best iteration's plan to commit to use. Syntax:
  ```sql
  REOPTIMIZE [[EXPLAIN] | [COMMIT]] [<reoptimize_level>]

  ```
  For more information, see `REOPTIMIZE`. (8.7.7)
* Introduced the `BM25( )` function. This function is used to employ BM25 partition-scoped scoring for `VERSION 2` full-text search queries. Refer to [Working with Full-Text Search](https://docs.singlestore.com/db/v9.1/developer-resources/functional-extensions/working-with-full-text-search.md) for more information.

## New or Modified Engine Variables

* **Enhancement**: Added a new engine variable `scheduler_slow_loop_seconds` that specifies the threshold for triggering the verbose logging of scheduler thread timing. (8.7.24)
* **Enhancement**: Added a new engine variable `scheduler_slow_ready_queue_seconds` that specifies the threshold for triggering logging of slow ready queue draining. (8.7.24)
* **Enhancement:** Added a new filter deviation rewrite controlled by the `optimizer_not_null_filter_deviation` engine variable. (8.7.17)
* **Enhancement:** Added a variable, `max_autostats_update_workers`, to tune the maximum number of background autostats update workers. (8.7.17)
* **Enhancement**: Added a new engine variable, `json_collation`, which is used to control JSON collation, the value of which can either be `utf8_bin` or `utf8mb4_bin`. (8.7.15)
* **Enhancement**: Added new engine variables for full-text search, used to fine-tune Lucene service connections: `fts2_socket_timeout_ms` and `fts2_socket_ttl_ms`. These variables control the service's socket timeout and time-to-live. (8.7.9)
* **Enhancement**: Added a new engine variable: `assume_udfs_deterministic`. This variable controls behavior where SingleStore will do extra work to avoid issues caused by UDFs that return different values when repeatedly invoked (e.g., are non-deterministic). This variable defaults to false, preserving the existing behavior (since SingleStore version 8.0), where SingleStore will ensure these computations take place once on an aggregator node. When set to true, SingleStore will avoid this extra layer of coordination (and bottleneck) allowing leaf nodes to independently coordinate. (8.7.8)
* **Enhancement**: Added a new engine variable: `external_functions_service_buffer_mb`. Sets the maximum size (in mb) of the memory-mapped region used to communicate between the engine and collocated services. (8.7.8)
* **Enhancement**: Added a method to throttle upload ingest when blob cache has low evictability and running out of disk space is imminent. This is controlled via two new engine variables: `bottomless_upload_throttle_hard_limit_cache_usability` and `bottomless_upload_throttle_soft_limit_cache_usability`. (8.7.7)

  `bottomless_upload_throttle_hard_limit_cache_usability`: The usability (free space + evictable space) of blob cache below which all columnstore ingest is throttled.

  `bottomless_upload_throttle_soft_limit_cache_usability`: The usability (free space + evictable space) of blob cache below which some columnstore ingest is throttled.
* **Enhancement**: Enabled `log_file_size_partitions` and `log_file_size_ref_dbs` engine variables on SingleStore Helios. (8.7.7)
* **Enhancement**: Added a new engine variable, `sampling_estimate_approach`, used to configure sampling in columnstore tables.

  See [Statistics and Sampling Concepts](https://docs.singlestore.com/db/v9.1/query-data/query-tuning/statistics-and-sampling/statistics-and-sampling-concepts/#section-idm4556665136652832788440675389.md) for more information.
* An engine variable `vector_type_project_format` has been added to allow the users to control whether vectors are output in binary or JSON format. The default value is BINARY for new deployments, but will be set to JSON for upgrades from 8.5 and will not be changed in future upgrades. Refer to [List of Engine Variables](https://docs.singlestore.com/db/v9.1/reference/configuration-reference/engine-variables/list-of-engine-variables.md) for more information.
* Several engine variables have been introduced to configure and manage the enhanced full-text search (FTS V2) functionality. Refer to the [Working with Full-Text Search](https://docs.singlestore.com/db/v9.1/developer-resources/functional-extensions/working-with-full-text-search.md) page for more information. The new engine variables are:

  * `fts2_java_home` - If set, this provides the JAVA\_HOME for the full-text search service.  **Not configurable on SingleStore Helios.**
  * `fts2_java_path` - If set, this provides the path for the Java executable used by the full-text search service. **Not configurable on SingleStore Helios.**
  * `fts2_ctrl_endpoint` - Collocated service control endpoint for the full-text search service. **Not configurable on SingleStore Helios.**
  * `fts2_endpoint` - Collocated service request endpoint for full-text search service. **Not configurable on SingleStore Helios.**
  * `fts2_init_memory_mb` - The amount of heap memory with which to start the Java process for the full-text search collocated service. If it is 0, the Java default is used.
  * `fts2_max_connections` - The maximum number of parallel requests that the full-text search collocated service can accept before queuing them.
  * `fts2_max_idle_seconds` - The number of seconds that the full-text search collocated service may be idle before shutting itself down. Requires full text service restart to take effect.
  * `fts2_max_service_buffer_mb` - Sets the maximum size of the memory-mapped region used to communicate with the FTS service (in MB). Minimum value is 1MB.
  * `fts2_max_memory_mb` - The maximum amount of heap memory that the Java process for the full-text search collocated service may use. If it is 0, the Java default is used.
  * `fts2_monitor_interval_secs` - This is the number of seconds between monitor polls (0 disables it).
  * `fts2_position_increment_gap` - Sets the positionIncrementGap for use when indexing multi-valued fields. Concatenates multiple values within a field. This variable controls the amount of virtual white space that is inserted between same-field values during a search. This helps prevent proximity and phrase queries from erroneously matching across field instances. The default value gives good results in most cases.
  * `fts2_query_timeout` - Sets the maximum number of seconds that a query will wait for a response from the full-text service before returning a timeout error.
  * `fts2_start_timeout_secs` - The maximum number of seconds to wait for the FTS V2 collocated service to become initially pingable before it will be automatically killed and restarted.
  * `fts2_stop_timeout_secs` - When the full-text search collocated service is shut down in a controlled manner with the [FULLTEXT SERVICE STOP](https://docs.singlestore.com/db/v9.1/reference/sql-reference/operational-commands/fulltext-service-stop.md) command, this sets the number of seconds to wait before it must be forcibly killed.
* `Full` for table evictions is now the default value for the global engine variable `enable_idle_table_eviction`. Refer to [Sync Variables Lists](https://docs.singlestore.com/db/v9.1/reference/configuration-reference/engine-variables/list-of-engine-variables/#sync-variables-lists.md) for more information.
* Adjusted the lower threshold for `max_allowed_packet` engine variable. Refer to [Sync Variables Lists](https://docs.singlestore.com/db/v9.1/reference/configuration-reference/engine-variables/list-of-engine-variables/#sync-variables-lists-2.md) for more information.
* An engine variable `enable_iceberg_ingest` has been added which can be used to turn on the new [Iceberg Ingest](https://docs.singlestore.com/db/v9.1/load-data/data-sources/iceberg-ingest.md) feature. Refer to [List of Engine Variables](https://docs.singlestore.com/db/v9.1/reference/configuration-reference/engine-variables/list-of-engine-variables.md) for more information.
* Introduced an engine variable `highlight_allow_ascii_binary_strings` to control whether `HIGHLIGHT` allows ascii binary strings as input argument. This variable controls the behavior of `HIGHLIGHT (expression) AGAINST (query_expression, [max_number_fragments])` statement if it is allowed to process ascii binary strings or not. Refer to the [Sync Variables](https://docs.singlestore.com/db/v9.1/reference/configuration-reference/engine-variables/list-of-engine-variables/#sync-variables-lists-3.md).
* An engine variable `enable_use_of_stale_incremental_stats` has been added to allow the query optimizer to use stale statistics instead of querying for statistics during optimization.
* Added an engine variable `max_sys_mem_usage_for_load_data` that sets percentage of `maximum_memory` available for allocation to the `load_data_read_size` and `load_data_write_size` variables. This variable limits the memory usage by `LOAD DATA` read/write operations
* Added an engine variable `enable_histogram_auto_creation_for_joins` that enables the automatic creation of histograms based on `JOIN` clauses.

## Miscellaneous

* **Enhancement**: Improved phonehome security by adding remote endpoint verification. (8.7.44)
* **Enhancement**: Upgraded the Almalinux version to Almalinux 10. (8.7.44)
* **Enhancement**: Updated the zookeeper version. (8.7.44)
* **Bugfix**: Fixed an issue where the `ALTER TABLE` command could hang and become unkillable due to a type conversion error occurring during the alter operation. (8.7.44)
* **Bugfix**: Fixed an issue that caused a stalled cluster in the presence of many concurrent `DROP TEMPORARY TABLE` commands. (8.7.44)
* **Bugfix**: Fixed an issue where `memsql_exporter` would not work with specific values of the `ssl_cipher` engine variable. (8.7.44)

* **Enhancement**: Added a new `blob_compute_id` column for `columnar_segments` and `mv_columnstore_files` information schema tables. (8.7.43)
* **Bugfix**: Fixed a deadlock in result table creation during reshuffle with the always-false filter. (8.7.42)
* **Enhancement**: Manually register the path to the Java 11 library. This path is set with the `java_pipelines_java11_path` engine variable. (8.7.42)
* **Bugfix**: Enable full enclosure optimization for queries such as `SELECT COUNT(t.a) FROM t` if `t.a` is a non-nullable column. No longer performs segment scans. (8.7.42)

* **Bugfix**: Fixed a crash when a `BM25` function in a subselect referenced a table from the outer select. (8.7.40)
* **Bugfix**: Disabled repartition on expressions for Materialized Common Table Expressions (MCTEs). (8.7.40)
* **Bugfix**: Fixed an issue where certain commands (e.g. `DROP TABLE`) could hang due to aborted queries caused by stuck collocated services triggered by external functions. (8.7.40)

* **Enhancement**: Added knob to disable cardinality estimates on JSON/BSON columns during analyze. (8.7.39)
* **Enhancement**: Segment elimination is now only applied to `IN` clauses where the left-hand side is a table column field. (8.7.39)
* **Bugfix**: Fixed query performance issue caused by heuristic estimate selectivity being overwritten. (8.7.39)
* **Bugfix**: Updated third party libraries to fix security vulnerabilities. (8.7.39)

* **Bugfix**: Bumped the \_bt timeout from 60 seconds to 180 seconds. (8.7.38)
* **Enhancement**: Users with database visibility can now query the `*_BOTTOMLESS_*` information schema views in the respective database. `CLUSTER` permissions are no longer enforced for querying these views. (8.7.37)
* **Enhancement**: Added Lucene logs to the cluster report. (8.7.37)
* **Bugfix**: Fixed a leak in a rare scenario. (8.7.37)
* **Bugfix**: Fixed the `ER_BAD_TABLE_ERROR` error on `UPDATE` or `DELETE` queries with a specific shape. (8.7.37)
* **Bugfix**: Fixed a crash in a shallow copy of a table with a pending `ALTER` operation. (8.7.37)
* **Bugfix**: Fixed an issue where periodic autostat was disabled when it should not have been. (8.7.37)
* **Bugfix:** Fixed crash in lockfree hashtable when engine is under high memory pressure. Report out of memory error instead. (8.7.37)
* **Bugfix**: Fixed an issue that led to undefined behavior if a node failed concurrently with the computation of the replication distribution tree. (8.7.37)

* **Enhancement**: Improved error message for parameter count mismatch during query parsing. (8.7.36)
* **Bugfix**: Fixed a bug that caused filter-aware optimizations to not be applied above MCTE when involved in hash joins. (8.7.36)
* **Enhancement**: Extended a rewrite to allow merging derived tables with json functions. (8.7.35)
* **Enhancement**: Prevented the destination table from being replaced by projection on update or delete. (8.7.35)
* **Enhancement**: Added more metrics to views,`MV_CLOUD_PER_COMPUTE_REMOTE_STATS` and `MV_CLOUD_REMOTE_STATS` for tracking of retention log chunks and snapshots.(8.7.34)
* **Enhancement**: New variables (Note, these should only be set with guidance from SingleStore):

  * `repl_page_desc_limit_before_stall`: limits the number of page descriptors in the page map that a 'ReplLog' can use before stalling new txs. See 'ReplLog::StallForPageMap'. The default 256K page desciptor limit means the hash table will not have load greater than 4.(8.7.34)
  * `repl_io_buffer_limit`: limits the number of IO buffers that a 'ReplLog' can use before stalling new txs. See 'ReplLog::StallForPageMap'. 128 IO buffers is 16MB since each IO buffer is 128K.(8.7.34)
  * `[dr_]repl_network_buffer_size`: replication tries to set both send and receive buffer sizes to reduce waits on TCP ack packets. 8MB is a sane battle-tested value. Can be set for both DR and non-DR replicas.(8.7.34)(8.7.34)
  * `[dr_]repl_max_chunk_size`: when sending logs or snapshots to a replica limits chunk size to this value. Too long of a chunk increases the chance of timeout waiting for the replica's response packet (since the replica must process the entire chunk before acking). This defaults to 8MB - a sane limit chunk size to this value. Maximum value is 1GB and it must be divisible by 128kb so it is a multiple of io buffer size. Can be set for both dr and non-DR replicas.(8.7.34)
* **BugFix**: Fixed an issue to use full table scan instead of vector index scan if enough rows are not produced.(8.7.34)

* **Enhancement**: Added estimates for query memory usage based on static row count and row size estimates to improve Workload Manager (WM) memory management. (8.7.32)
* **Bugfix**: Fixed a `NULL` value inline bug by adding typecast operations above the referencing field. (8.7.32)
* **Bugfix**: Fixed an issue where a node that had not been upgraded could trigger undefined behavior if the node's `processlist` was queried while the node was processing an internal RPC. (8.7.32)

* **Enhancement**: Improved optimization speed of parameterized `IN`-lists by limiting traversal depth. (8.7.31)
* **Enhancement**: Enabled auto `PROFILE` for `INSERT ... SELECT` and `REPLACE ... SELECT` query shapes. (8.7.31)
* **Enhancement**: `OPTIMIZE TABLE ... INDEX` is now more responsive to `KILL QUERY` statements. (8.7.31)
* **Bugfix**: Fixed an issue that caused a crash when a query referenced too many tables. (8.7.31)
* **Bugfix**: Fixed a crash while creating a shallow table copy due to a deleted column in the source table. (8.7.31)

* **Bugfix**: Fixed a crash while creating a shallow table copy due to a deleted column in the source table. (8.7.30)
* **Bugfix**: Fixed a bug in `JSON_TO_ARRAY()` join pushdown optimization that occured when the JSON value being extracted from `table_col` is a JSON array. (8.7.29)
* **Bugfix**: Fixed an issue to prevent LRU eviction from stalling when several table modules are stale. (8.7.29)
* **Bugfix**: Reduced contention on a global lock controlling modules, affecting code loading and unwinding of exceptions. (8.7.29)
* **Bugfix**: Fixed a memory corruption issue caused by a rare race condition involving `MV_ACTIVE_TRANSACTIONS` information schema view. (8.7.29)

* **Enhancement**: General improvements and optimizations for `CHECK BOTTOMLESS CHECKSUM` command. (8.7.28)
* **Enhancement**: Added support for updated Standard and Premium licenses. (8.7.28)
* **Bugfix**: Removed garbage collection from cleaning up arrangements when such garbage collection is already in process. (8.7.28)
* **Bugfix**: Fix `ALTER RESOURCE POOL` to respect queue depth constraints. (8.7.28)
* **Bugfix**: Fixes bug that produced incorrect results when performing a hash join with a condition that compares mismatched types where one of the types is BSON. (8.7.28)

* **Bugfix**: Fixed an issue impacting creating or altering a resource pool with a CPU percentage limitation after a MA failover. (8.7.27)
* **Bugfix**: Fixed a bug that occurred when a query used `I0` as a column name. (8.7.27)
* **Bugfix**: Reserved memory space for `segment_id` in the pseudo column's MemoryFile. (8.7.27)
* **Enhancement**: Added support for the `LIMIT` clause in prepared statements. (8.7.27)
* **Enhancement**: Added an option to run queries that failed asynchronous compilation, allowing users to introspect the compilation results. (8.7.27)
* **Enhancement**: Added a feature to record Kafka properties of a message. (8.7.27)

* **Bugfix**: Fixed a bug that caused a node to crash when the variable `ignore_foreign_keys` is ON and the `ALTER TABLE` command is used to add a foreign key. (8.7.26)
* **Bugfix**: Changed the output projection DDL to `CREATE PROJECTION` instead of `CREATE TABLE _$_table_name_$` in debug profile. (8.7.26)
* **Bugfix**: Fixed a bug to prevent a crash when using FTS v2 with CTE. (8.7.26)

* **Enhancement**: Added an engine variable `disk_plan_gc_pause_seconds_on_startup` that disables disk plan garbage collection on startup. This variable prevents hot plans from being unintentionally disk garbage collected. (8.7.25)
* **Bugfix**: Fixed a crash that occurred when aggregator functions are used with `VECTOR` type data inside other built-ins. (8.7.25)
* **Bugfix**: Fixed a bug that caused incorrect results when running `INFER PIPELINE CSV`. (8.7.25)

* **Enhancement**: The `DROP` and `ALTER TABLE` commands no longer have to wait for the plan garbage collector. (8.7.24)
* **Enhancement**: Computed column definitions now support the `SPLIT` function. (8.7.24)
* **Bugfix**: Fixed a bug that caused CDC-in pipelines to fail while inferring the table schema, with the "Failed to allocate slot in the extractor pool" error. (8.7.24)
* **Bugfix**: Fixed a bug where a CDC pipeline gets stuck while waiting for data. (8.7.24)
* **Bugfix**: Fixed a bug where a compilation failure in a cross site query crashed a node. (8.7.24)
* **Bugfix**: Fixed a bug in `JSON_ARRAY_CONTAINS_STRING` query rewrite for query shapes with the `LIMIT` clause. (8.7.24)

* **Enhancement**: Improved pipeline error clearing. Additional errors are cleared when `CLEAR PIPELINES ERRORS` is run or when the `pipelines_errors_retention_minutes` limit is reached. (8.7.23)
* **Bugfix**: Fixed a bug in lateral join; lateral join subselect's projection fields' aliases are now preserved. (8.7.23)

* **Enhancement**: Improve behavior of garbage collection for plancache. (8.7.22)
* **Enhancement**: Introduced support for placeholders for partition ID and timestamp in the `SELECT INTO ... file name` command. (8.7.22)
* **Enhancement**: Added logging for LRU compiled unit eviction. (8.7.22)
* **Bugfix**: Fixed an issue where the engine halted while deleting a user when there were multiple users with the same user name but different host names. (8.7.22)
* **Bugfix**: Fixed an issue that allowed starvation of `DROP DATABASE` and other cluster management commands. (8.7.22)

* **Bugfix**: Fixed a bug with updates and asserts using `JSON_ARRAY_CONTAINS_<type>` predicates. (8.7.22)
* **Bugfix**: Fixed bottomless upload throttling criteria. (8.7.22)
* **Bugfix**: Blocked creation of temporary table as a shallow copy. (8.7.22)

* **Bugfix**: Fixed handling of heartbeat messages in the MongoDB® extractor in debug mode. (8.7.21)
* **Bugfix**: Fixed display of default BSON and string values with null-terminators in the information schema. (8.7.21)
* **Bugfix**: Removed trailing dot for decimal column types that have scale equal to 0. (8.7.21)
* **Bugfix**: Fixed `IN`-list index matching for columnstore tables when a query has multiple `IN`-list predicates. (8.7.21)
* **Bugfix**: Fixed a bug that caused an invalid optree error after the `JsonArrayContainsToTableBuiltin` rewrite. (8.7.21)
* **Bugfix**: Allowed cached table memory to be freed for empty tables in replica databases. (8.7.21)
* **Bugfix**: Fixed a crash that occurred during spilling when executing a query with a large number of `GROUP BY` columns. (8.7.21)
* **Bugfix**: Fixed an issue where attaching a leaf node to the Master Aggregator (MA) failed if the MA was still starting up. (8.7.21)
* **Bugfix**: Fixed an issue where some point-in-time-recovery (PITR) operations failed when started from a restored snapshot. (8.7.21)
* **Bugfix**: Fixed a rare issue where `ALTER` operation and two-phase commit (2PC) caused index corruption. (8.7.21)
* **Bugfix**: Fixed an issue with lagging in binlogs offsets processing in MySQL CDC pipelines. (8.7.21)

* **Bugfix**: Fixed a lateral join parsing bug. (8.7.20)
* **Bugfix**: Fixed an issue that caused a deadlock between the `DROP TABLE` and `AGGREGATOR SYNC AUTO_INCREMENT` queries.
* **Bugfix**: Fixed an issue where the Master Aggregator could temporarily stop behaving like the Master Aggregator after being restarted. (8.7.20)
* **Enhancement**: Allow rewrite for joining tables on the `JSON_ARRAY_CONTAINS_<type>` function to support multiple predicates of that form on different columns. (8.7.20)
* **Enhancement**: Added information on remote API calls and bottle service reliability metrics to `MV_BOTTOMLESS_STATUS_EXTENDED` information schema view.
* **Enhancement**: Added metrics to track the availability of unlimited storage and the bottle service to `MV_BOTTOMLESS_SUMMARY` information schema view. (8.7.20)
* **Bugfix**: Fixed an issue where repair operation gets stuck while converting milestones. (8.7.20)
* **Enhancement**: Implemented heartbeats for bottle service. Each node in the cluster now validates the availability of bottle service every minute and records any consecutive failures in the `LMV_EVENTS` information schema view. (8.7.20)
* **Bugfix**: Fixed an issue that caused dangling compute sessions after a failed `ALTER DATABASE` command. (8.7.20)
* **Bugfix**: Fixed an edge case; common table expressions (CTEs) are now recognized in subselect to join rewrite. (8.7.20)
* **Bugfix**: Fixed an error in `BSON_MATCH_ANY()` pushdown. (8.7.20)
* **Bugfix**: Fixed a bug that caused a query to fail in a specific situation when using `SEARCH OPTIONS` with vector index search. (8.7.20)
* **Bugfix**: Fixed an issue caused when multi-part names were used in common table expressions (CTEs) within `UNION`. (8.7.20)
* **Bugfix**: Fixed issue that causes uneven time distribution in extractor pool. (8.7.20)
* **Bugfix**: Fixed the result of `ORDER BY <sort_key> LIMIT` queries on tables with a sort key column defined in `DESC` order. (8.7.20)
* **Enhancement**: Improved out of memory (OOM) error message to make the message more accurate. (8.7.19)
* **Bugfix**: Fixed a crash that could occur when columns were dropped with `ALTER TABLE`. (8.7.19)
* **Bugfix**: Fixed an issue where left join sometimes returned an incorrect result when spilling occurred. (8.7.19)
* **Bugfix**: Fixed an issue that could lead to new connections hanging. (8.7.19)
* **Bugfix:** Additional binlog position updates for CDC-in pipelines in the extractor pool que. (8.7.17)
* **Bugfix:** Fixed an edge case certificate refresh issue for connections to remote storage in long running clusters. (8.7.17)
* **Enhancement**: Improved the Debezium DDL statetements parser. (8.7.17)
* **Bugfix**: Disable `JSON_ARRAY_CONTAINS_<type>` rewrite in common table expressions (CTEs). (8.7.17)
* **Bugfix**: Improved the error message for CDC-in pipelines for insufficient permissions errors. (8.7.17)
* **Bugfix**: Fixed deadlock in db recovery due to evicting table module holding an open LOCK. (8.7.17)
* **Bugfix**: Fixed an issue where the garbage collection of a partition database's 2PC transaction table could unnecessarily delay the reprovisioning of the reference database. (8.7.17)
* **Bugfix**: Fixed an issue with alter repair where the repair job would be created before alter commits. (8.7.17)
* **Bugfix**: Fixed a race condition where node shutdown could get stuck if it happens concurrently with a partition failover. (8.7.17)
* **Bugfix**: Fixed a rare bug where `STOP PIPELINE` could write an old extractor cookie into pipeline metadata (8.7.17)
* **Enhancement**: Added single-parameter `JSON_EXTRACT` builtins. (8.7.16)
* **Bugfix**: Fixed a crash when using a unique key to upsert into a table when JSON column optimization is enabled. (8.7.16)
* **Bugfix**: Fixed a certificate refresh issue for connections to remote storage in long-running clusters. (8.7.16)
* **Bugfix**: Fixed some cases of an incorrect transaction ID (txId) for snapshot records. `BeginSnapshot`/`CommitSnapshot` can now report nested `BeginTransaction`/`CommitTransaction` when there are unresolved distributed transactions while the snapshot is taken. (8.7.16)
* **Enhancement**: Added metrics to track the availability of universal storage and the bottle service. (8.7.16)
* **Enhancement**: Enabled hash joins when two tables are joined together using the `JSON_ARRAY_CONTAINS_<type>` function. (8.7.16)
* **Enhancement:** Added support for query rewrite for certain query patterns with `EXISTS` and subselects. (8.7.16)
* **Enhancement**: Added support for BM25 over multiple columns. (8.7.15)
* **Enhancement**: Added support for BM25 partition-scoped scoring for Boolean and boost queries. (8.7.15)
* **Bugfix**: Fixed a rare issue where a membership-related clustering operation could delay the re-provision or deletion of a cluster database. (8.7.15)
* **Enhancement**: Improved the logic for selecting vectors close to the distance threshold during vector range search. (8.7.15)
* **Bugfix**: Fixed an issue where `JSON_MATCH_ANY()` queries with `MATCH_ELEMENTS` evaluated incorrectly on non-array values. (8.7.14)
* **Enhancement**: Updated `JSON_MATCH_ANY()` simplified syntax to allow specifying `MATCH_ELEMENTS` by appending a '`*`' to the end of the keypath. (8.7.14)
* **Enhancement**: Added support for BM25 partition-scoped scoring for phrase and proximity search queries. (8.7.14)
* **Bugfix**: Fixed sporadic reading failures from `MV_SYSINFO_CPU`. (8.7.14)
* **Bugfix**: Clarified the error message produced in some cases where a snapshot gets aborted. (8.7.13)
* **Bugfix**: Fixed schema history in incremental snapshot mode for MySQL CDC. (8.7.13)
* **Enhancement**: Significant overall performance improvements for the full-text V2 service. (8.7.12)
* **Bugfix**: Fixed an intermittent hang under load issue with the full-text V2 service. (8.7.12)
* **Bugfix**: Reduce `server_id` collision probability for MySQL CDC. (8.7.12)
* **Enhancement**: When `parametrize_json_keys` is enabled, numeric keys will be parametrized as well. Also fixed a crash in queries with json extracts within JSON MATCH ANY (when `parametrize_json_keys` is switched on). (8.7.12)
* **Enhancement**: Update to certificate loading behavior. Prior to this change, only the first certificate was loaded from a server's .pem file specified via the server configuration. Now all certificates are loaded, so if a .pem file contains a certificates chain, then intermediate CA certificates will be returned by the server. (8.7.11)
* **Enhancement**: Updated the distributed OpenSSL license file to to 1.0.2zj (8.7.11)
* **Enhancement**: Added `X-Content-Type-Options: nosniff`, `Strict-Transport-Security: max-age=31536000`, `Cache-control: no-store` headers to Data API responses. (8.7.10)
* **Bugfix**: Address an issue with rewriting of scalar subqueries with null-accepting projections. (8.7.10)
* **Bugfix**: Fixed an issue where concurrent `DROP TABLE`s could block a snapshot from running indefinitely. (8.7.10)
* **Bugfix**: Fixed an issue that caused INFER of CDC-in pipelines to fail with "Failed to allocate slot in the extractor pool" error after increasing the limit. (8.7.10)
* **Enhancement**: The default value for the `fts2_max_connections` engine variable has been increased to 100000. (8.7.9)
* **Enhancement**: Improved throughput for full-text v2 queries. (8.7.9)
* **Enhancement**: Optimized full-text queries that contain an `ORDER BY ... LIMIT ...` over a full-text score and optionally filter on the same full-text clause. (8.7.9)
* **Bugfix**: Fixed an issue in vector range search with `DOT PRODUCT` as the distance metric. (8.7.9)
* **Bugfix**: Fixed an issue with lateral join queries with identical aliases. (8.7.9)
* **Bugfix**: Fixed a possible race condition with DR connections that could cause repeated connection failures when attempting to replicate from the primary. (8.7.9)
* **Bugfix**: Fixed a rare race condition where PITR would incorrectly operate on an unrecoverable database. (8.7.9)
* **Bugfix**: Fixed a password validation error on `ADD AGGREGATOR`. (8.7.8)
* **Bugfix**: Fixed an issue that could occur when replacing JSON expressions with computed columns in `GROUP BY` lists. (8.7.8)
* **Bugfix**: Fixed potential deadlock in Lucene service under high load. (8.7.8)
* **Bugfix**: Fixed an issue where in a VM environment `SHOW LEAVES` could show corrupted latency values due to incorrect values from the system clock if the VM is stopped or migrated. (8.7.8)
* **Bugfix**: Fixed a vector index issue in unlimited storage that could make a vector index blob file inaccessible. (8.7.8)
* **Bugfix**: Fixed an issue where indexes were not case-sensitive when performing full-text search against JSON keys. (8.7.7)
* **Bugfix**: Fixed an issue where `ALTER TABLE` could throw errors related to VECTOR-type columns, even if those columns were not part of the `ALTER`. (8.7.7)
* **Bugfix**: Fixed an issue in CDC-in pipelines causing delays between batches. (8.7.7)
* **Enhancement**: Added websocket\_proxy.log to the files managed via Trace Log Rotation. (8.7.7)
* **Enhancement**: Added support for numeric range queries when doing full-text search against JSON fields. (8.7.7)

  See [numeric range queries](https://docs.singlestore.com/db/v9.1/developer-resources/functional-extensions/working-with-full-text-search.md) for more information.
* **Enhancement**: Enabled lateral join subselects to reference fields in grandparent `SELECT`. (8.7.7)
* **Bugfix**: Fixed an issue that could occur when replacing JSON expressions with computed columns in `GROUP BY` lists. (8.7.7)
* **Bugfix**: Fixed display of microseconds for default TIMESTAMP(6) column values in system information commands (such as `DESCRIBE TABLE` or `INFORMATION_SCHEMA.COLUMNS.COLUMN_DEFAULT`). (8.7.6)
* **Bugfix**: Fixed an issue where user defined variables could read collation-related variables incorrectly during a `SET @var = ...` command. (8.7.6)
* **Bugfix**: Fixed a table eviction issue that can crash a node when replaying straight-to-disk inserts on unique key tables during database recovery. (8.7.6)
* **Bugfix**: Fixed an issue in MongoDB® CDC-in pipelines which blocks data ingestion after `ALTER PIPELINE`. (8.7.6)
* **Enhancement**: Allow NULL values in JSON columns when used with Full-Text search. (8.7.6)
* **Bugfix**: Fixed several system warnings that occur when running a `SELECT` from the `MV_VERSION_HISTORY` information schema view. (8.7.6)
* **Enhancement**: Improved performance of VECTOR-type User-Defined Variables(UDVs). No longer require using extra typecast to BLOB datatype. (8.7.6)
* **Enhancement**: Added support for `INNER`/`LEFT` lateral joins. (8.7.5)
* **Bugfix**: Fixed issue that caused protocol errors in the pipelines. (8.7.5)
* **Bugfix**: Fixed an issue to now avoid prematurely assigning column reference to namespace. (8.7.5)
* **Bugfix**: Temporarily disallow shallow table copy for tables created on version 8.0 or before. (8.7.4)
* **Enhancement**: Enhance table pushdown to union rewrite to enable derived table pushdown based on row count estimation. (8.7.4)
* **Enhancement**: Added support for `ON NODE` clause for `SHOW PROFILE PROCESS|PLAN`, which forwards the command to another aggregator. (8.7.4)
* **Enhancement**: Improved performance of the `CREATE PROJECTION` command. (8.7.4)
* **Bugfix**: Unneeded sort fields will no longer be projected to the aggregator. (8.7.4)
* **Enhancement**: Improved the performance of `CREATE TABLES AS INFER PIPELINE`. (8.7.4)
* **Bugfix**: Fixed an issue that could occur where a join with `TABLE(JSON_TO_ARRAY(JSON_EXTRACT_JSON()))` is performed with numeric keys in the `JSON_EXTRACT_JSON()` statement could possibly lead to incorrect output or crashes. (8.7.4)
* **Bugfix**: Identified an upgrade scenario that causes a blob leak and added a command to delete the leaked blobs. As a result, temporarily disallowing shallow table copy for tables created on version 8.0 or before. (8.7.4)
* **Enhancement**: Set collation utf8\_bin for the `JSON_TO_ARRAY` builtin in cases where the input has utf8 charset, and set collation utf8mb4\_bin in cases where the input has utf8mb4 charset. (8.7.4)
* **Bugfix**: An error is reported when inserting incorrect data into vector column for any `data_conversion_compatibility_level`. (8.7.4)
* **Bugfix**: Fixed a possible connectivity issue and eliminated delay when starting the Lucene service for the first time. (8.7.4)
* **Bugfix**: Fixed an edge case where unlimited storage garbage collection was causing the master aggregator to run out of connections. (8.7.3)
* **Bugfix**: Fixed a crash that occurred when dropping a database that contained tables with both very high and low column IDs. (8.7.3)
* **Bugfix**: Fixed a crash that occurred when spilling a hash join operation with at least 3 tables. (8.7.2)
* **Bugfix**: Fixed a crash that occurred when running the `SHOW CREATE PROJECTIONS` command when using the database name in the syntax (`SHOW CREATE PROJECTIONS database_name.projection_name...`). (8.7.2)
* **Bugfix**: Fixed a bug where the full-text service controller would periodically restart the process when the started process hadn't fully completed. (8.7.2)
* **Bugfix**: Fixed an issue where `INSERT ... SELECT` into `VECTOR` type columns returned an error. (8.7.2)
* **Bugfix**: Fixed issues with the `TO_CHAR()` function where results were truncated or reading communication packet errors were generated. (8.7.2)
* **Bugfix**: Fixed an integer overflow issue in unique integer columns by changing the storage type to a 32-bit unsigned integer. (8.7.2)
* **Bugfix**: Fixed incorrect results in an uncommon scenario where hash join operators with an optimization path need to spill. (8.7.2)
* **Enhancement**: The `memsql_exporter` now collects additional fields from the `mv_activities_extended_cumulative` information schema view. (8.7.2)
* **Enhancement**: Updated the default `client.id` for the Kafka configuration to the SingleStore partner ID. (8.7.2)
* **Enhancement**: Added support for Iceberg ingest via Snowflake, REST, and JDBC. (8.7.2)
* **Enhancement**: Added support for BM25 full-text search (FTS) as a built-in feature. (8.7.2)
* **Enhancement**: Indexed vector search has been upgraded so that filters are applied before index search. This removes the need to adjust the search parameter `k` in indexed searches with a filter.
* **Enhancement**: Introduced the `SUB_PARTITIONS n` argument to the `CREATE DATABASE` command. This argument allows you to set the number of sub-partitions per physical partition when a new database is created. Using this optional argument in the `CREATE DATABASE` command will overwrite the value set by the `sub_to_physical_partition_ratio` variable. The value of `n` must be set at 0 or a power of 2 value of the physical partition count.
* **Enhancement**: A user with both the `GRANT OPTION` and `SUPER` privileges can now grant *and remove* any privilege to the users (including themselves) within a scoped database.
* **Enhancement**: The deprecated Strict Mode feature is officially removed from SingleStore.
* **Enhancement**: Improved error reporting for exceeding stack memory during SQL parsing for CTEs.
* **Bugfix**: Fixed a bug that could cause scans on non-unique indexes to return incorrect results or crash.
* **Bugfix**: Fixed a crash in a rare case involving `ALTER TABLE` and failovers.
* **Bugfix**: Fixed a bug where the cleanup of unlimited storage data outside of the retention period is delayed when a database is restored.
* **Enhancement**: Improved error messaging for unsupported index types on columnstore tables.
* **Bugfix**: Fixed an error with the  total cache size after an `OPTIMIZE TABLE WARM BLOB CACHE` command.
* **Enhancement**: Updated the default return type of the `FORMAT` function to `VARCHAR`.
* **Bugfix**: Fixed a bug with `LIMIT 0` in an `EXIST` clause in a subselect such as `WHERE EXISTS (SELECT … LIMIT 0)`.
* **Bugfix**: Fixed incorrect results that occur in some `DELETE` commands that contain a self-join and a `LIMIT` clause.
* **Bugfix**: Fixed incorrect results and deadlocks that occur in some `INSERT SELECTS` inside multi-statement transactions.
* **Bugfix**: Restricted queries on information\_schema tables to be case-sensitive with respect to database names.
* **Bugfix**: Table-level locking (such as large `UPDATE`s or `DELETE`s) no longer blocks the background flusher.
* **Bugfix**: Fixed an error encountered while backing up a database using an hyphenated resource group name.
* **Enhancement**: Unnecessary `LIMIT` clauses are removed when combined with unique key filters.
* **Bugfix**: Fixed an issue where histograms are built from up to 10x more rows than desired.
* **Enhancement**: Added file lock to prevent multiple SingleStore instances starting on the same datadir.
* **Enhancement**: Disabled `JSON_TO_ARRAY` TVF join optimization if query does not use the TVF output column.
* **Bugfix**: An `info_schema.mv_cached_blobs` query will no longer affect blob cache's internal eviction performance.
* **Bugfix**: Fixed an unlimited storage issue with checking for missing files before downloading.
* **Bugfix**: Fixed a rare situation where a windows function would not be killable.
* **Bugfix**: Fixed a rare crash scenario with mv views.
* **Enhancement**: Added support histogram data collection for BSON keys.
* **Enhancement**: Allow using `TABLE` builtin with info schema tables (for example: `SELECT * FROM information_schema.tables JOIN TABLE(SPLIT(table_name, '_')) LIMIT 2;`).
* **Enhancement**: Added support for expressions with `VALUE()` in the delete condition for `ON DUPLICATE KEY DELETE` in pipelines.
* **Enhancement**: Engine variable `optimizer_empty_tables_limit` restricts to only show rule-based optimization warning message when cost based optimization is meaningful.
* **Bugfix**: Fixed an issue in backup restore when the backup has a corrupted GV timestamp in the about snapshot record.
* **Enhancement**: Provided the ability to collect non-truncated pipeline errors (`CREATE PIPELINE ... DEBUG`).
* **Enhancement**: Improved performance for `SELECT INTO kafka`.
* **Enhancement**: Added support for correlated subselects with `LIMIT`. `ORDER BY` and `OFFSET` are optional, but if they are present, they are also supported.
* **Enhancement**: Allow `EXPLAIN` for `ATTACH DATABASE READ ONLY`. Nothing is returned if it could not be attached read only.
* **Enhancement**: The `EVENT_TYPE` column of the `MV_BOTTOMLESS_API_EVENTS` view was modified to include the COPY event.
* **Enhancement**: Added two file types to `mv_bottomless_api_events`: Backup Blob and Backup Snapshot
* **Enhancement**: Added a visibility (security) check for detached databases.
* **Enhancement**: Added JSON validation for link credentials and configuration.
* **Enhancement**: Added the optional `IF NOT EXISTS` clause to the `CREATE LINK` and `CREATE RESOURCE POOL` statements.
* **Bugfix**: Fixed a bug that blocked histograms from being enabled on remote tables.
* **Bugfix**: `LAST_INSERT_ID` will now correctly retrieve the last inserted ID for a forwarded `INSERT` query.
* **Enhancement**: Added support for `mongodb.connection.string` parameter in the `CONFIG` clause of the `CREATE AGGREGATOR PIPELINE ... AS LOAD DATA MONGODB` statement. Refer to [Replicate Data from MongoDB®](https://docs.singlestore.com/db/v9.1/load-data/data-sources/replicate-data-from-mongodb.md) for more information.
* **Bugfix**: Fixed an issue with incorrect results in `information_schema.PROJECTIONS` when filtering on the `PROJECTION_NAME` column.

## In this section

* [Maintenance Release Changelog v8.7](https://docs.singlestore.com/db/v9.1/release-notes/singlestore-memsql/8-7-release-notes/maintenance-release-changelog-v-8-7.md)

***

Modified at: May 12, 2026

Source: [/db/v9.1/release-notes/singlestore-memsql/8-7-release-notes/](https://docs.singlestore.com/db/v9.1/release-notes/singlestore-memsql/8-7-release-notes/)

(An index of the documentation is available at /llms.txt)
