Files
SpacetimeDB/crates/table/Cargo.toml
Mazdak Farrokhzad 8544e6cf02 Add Hash indices (#3976)
# Description of Changes

Fixes https://github.com/clockworklabs/SpacetimeDB/issues/1122.

Adds hash indices and exposes them through `#[index(hash)]` for Rust
modules,
with support for typescript and C# to come in follow ups.
On the client/sdk side, for now, any index is backed via a BTree/native
index as it is the most general.

A hash index may only be queried through point scan and never ranged
scans.
Attempting a ranged scan results in an error, with the mechanism
implemented in the previous PR
(https://github.com/clockworklabs/SpacetimeDB/pull/3974).



# API and ABI breaking changes

None

# Expected complexity level and risk

2?

# Testing

A test for ensuring that hash indices cannot be used for range scans is
added.
Tests exercising hash indices will come in the next PR.
2026-01-14 09:44:20 +00:00

67 lines
1.7 KiB
TOML

[package]
name = "spacetimedb-table"
version.workspace = true
edition.workspace = true
license-file = "LICENSE"
description = "A database Table implementation and friends"
rust-version.workspace = true
[[bench]]
name = "pointer_map"
harness = false
[[bench]]
name = "page"
harness = false
[[bench]]
name = "var_len_visitor"
harness = false
[[bench]]
name = "page_manager"
harness = false
[features]
# Allows using `Arbitrary` impls defined in this crate.
proptest = ["dep:proptest", "dep:proptest-derive", "spacetimedb-sats/proptest"]
# Needed for miri
blake3_pure = ["blake3/pure"]
[dependencies]
spacetimedb-data-structures = { workspace = true, features = ["memory-usage"] }
spacetimedb-memory-usage = { workspace = true, features = ["hash_map", "ethnum", "smallvec"] }
spacetimedb-primitives.workspace = true
spacetimedb-sats = { workspace = true, features = ["blake3"] }
spacetimedb-lib = { workspace = true, features = ["memory-usage"] }
spacetimedb-schema.workspace = true
ahash.workspace = true
blake3.workspace = true
bytemuck = { workspace = true, features = ["derive"] }
decorum.workspace = true
derive_more.workspace = true
enum-as-inner.workspace = true
foldhash.workspace = true
hashbrown.workspace = true
itertools.workspace = true
smallvec.workspace = true
thiserror.workspace = true
crossbeam-queue.workspace = true
# For the 'proptest' feature.
proptest = { workspace = true, optional = true }
proptest-derive = { workspace = true, optional = true }
[dev-dependencies]
spacetimedb-schema = { path = "../schema", features = ["test"] }
spacetimedb-sats = { path = "../sats", features = ["proptest"] }
criterion.workspace = true
proptest.workspace = true
proptest-derive.workspace = true
rand.workspace = true
[lints]
workspace = true