fix: gate experimental local functions behind an opt-in feature (#4688)

Published SDK builds currently expose local SQL computed columns and
materialized-view execution that are not ready for release. Add the
opt-in `experimental-functions` Cargo feature to the Rust core and
forward it through the Python and Node bindings; published packages
leave it disabled.

Local declarations and refreshes now return `NotSupported` before
mutating tables or spawning jobs, including prepared materialized-view
creation. Remote Cloud/Enterprise client operations, Python UDF
packaging, ordinary eager `add_columns`, and access to existing data
remain available. Stored metadata and write protections stay active, and
shared server commit helpers remain usable.

CI covers both feature configurations. Existing local execution tests
run with the feature enabled; default-build regressions cover early
rejection, unchanged table versions, existing metadata protections, and
normal eager transforms. API and source-build documentation explain the
opt-in.

Validation: Rust library tests pass with the feature disabled (1,869
tests) and enabled (1,947 tests), plus three default-build integration
regressions. Python and TypeScript bindings were rebuilt and tested in
both configurations, including mocked remote requests; Rust formatting,
Python package lint, TypeScript lint/build, and generated docs were
checked. Repository-wide Ruff still reports 48 pre-existing errors in
unchanged `docs/web-tests` files.
This commit is contained in:
Xuanwo
2026-10-27 14:32:09 +08:00
committed by GitHub
parent dcbf5ce66a
commit 8a4effa06a
41 changed files with 955 additions and 66 deletions
@@ -8,13 +8,20 @@ availability:
oss: available
enterprise: available
summary: >-
Both offerings support computed columns. Enterprise requires the deployment to enable them; the embedded library evaluates them in your process.
Local computed columns require a source build with the experimental-functions Cargo feature. Enterprise requires the deployment to enable them.
---
A computed column is declared with an expression and starts with no values.
Declaring it is cheap on any table size, because nothing is evaluated until
[a refresh](/feature-engineering/refresh-column) asks for it.
<Note>
In the 0.41 SDK release, local computed-column declaration and refresh require a
source build with the `experimental-functions` Cargo feature. Published Python
and TypeScript packages leave it disabled. Remote Cloud and Enterprise operations
do not require this feature. Ordinary eager `add_columns` transforms remain available.
</Note>
## Add a computed column {#declare}
```python
@@ -8,7 +8,7 @@ availability:
oss: available
enterprise: available
summary: >-
Both offerings support materialized views. OSS refreshes run in your process; Enterprise runs the work on remote compute. See [Enterprise refreshes](#availability) for server compatibility requirements.
Local creation and refresh require a source build with the experimental-functions Cargo feature. Enterprise runs the work on remote compute. See [Enterprise refreshes](#availability) for server compatibility requirements.
---
import {
@@ -20,6 +20,13 @@ A materialized view stores the result of a query as a table. Use it to keep a
filtered or transformed dataset that you can query, index and search repeatedly.
Refresh the view after its source data changes.
<Note>
In the 0.41 SDK release, local materialized-view creation and refresh require a
source build with the `experimental-functions` Cargo feature. Published Python
and TypeScript packages leave it disabled. Opening, reading, listing and dropping
existing views remain available, as do remote Cloud and Enterprise operations.
</Note>
<Note>
In SQL this is [`REFRESH MATERIALIZED VIEW`](/sql/refresh#refresh-materialized-view).
</Note>
@@ -8,13 +8,20 @@ availability:
oss: available
enterprise: available
summary: >-
Both offerings support column refresh. The embedded library runs it in your process; Enterprise runs it as a server job that must be enabled for your Enterprise cluster.
Local column refresh requires a source build with the experimental-functions Cargo feature. Enterprise runs it as a server job that must be enabled for your Enterprise cluster.
---
Refresh a [computed column](/feature-engineering/add-computed-column) to fill
new rows and recompute values whose inputs changed. The example below continues
with the `doubled` column from the computed-column guide.
<Note>
In the 0.41 SDK release, local declaration and refresh require a source build
with the `experimental-functions` Cargo feature. Published Python and TypeScript
packages leave it disabled. Remote Cloud and Enterprise operations do not require
this feature; existing computed-column data remains readable in default builds.
</Note>
<CodeGroup>
```python Python icon="python"
table.refresh_column("doubled")