Skip to content

Client::join API#3143

Draft
texodus wants to merge 3 commits intomasterfrom
engine-inner-joins
Draft

Client::join API#3143
texodus wants to merge 3 commits intomasterfrom
engine-inner-joins

Conversation

@texodus
Copy link
Copy Markdown
Member

@texodus texodus commented Mar 23, 2026

This PR adds a reactive Client::join to JavaScript, Python and Rust.

  • Adds Client::join API across all platforms (Rust, JavaScript, Python) to create read-only tables by joining two source tables on a shared column (potentially with different names, but they must have the same type).
  • Supports inner (default), left, and outer join types, with an optional right_on parameter for joining on differently-named columns. Duplicates (cross-product) are handled correctly and left-precedence natural order is preserved for visual stability.
  • Joined Table objects are reactive — updates to either sourceTable automatically recompute the join and propagate to any derived View.
  • Joins can be chained and will preserve evaluation and deletion order.
  • and a new set of benchmarks (which are only useful going forward since no prior version of Perspective supports this API).
  • Adds docs for join types, options, and reactivity; how-to guides for JS, Python, and Rust.
  • Adds comprehensive test suites for all join types, indexed tables, and right_on behavior.
const left = await worker.table(data);
const right = await worker.table(other_data);
const options = {join_type: "outer", name: "Joined Table"};
const joined_table = await worker.join(left, right, "Row ID", options);

@texodus texodus added the enhancement Feature requests or improvements label Mar 23, 2026
Signed-off-by: Andrew Stein <steinlink@gmail.com>

# Conflicts:
#	tools/test/results.tar.gz
@texodus texodus force-pushed the engine-inner-joins branch from 3b622da to dc2fcd9 Compare April 1, 2026 03:04
texodus added 2 commits April 2, 2026 00:02
Signed-off-by: Andrew Stein <steinlink@gmail.com>
Signed-off-by: Andrew Stein <steinlink@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement Feature requests or improvements

Development

Successfully merging this pull request may close these issues.

1 participant