apache / apache/datafusion-python

Expose SessionContext.register_variable / deregister_variable for SQL @var support

Offen
#1,571 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Python
Sterne
604
Forks
174
Ø Merge
1 T. 7 Std.
Gemergte PRs (30 T.)
4

Beschreibung

## Background

DataFusion's `SessionContext` exposes `register_variable(var_type, provider)` and `deregister_variable(var_type)` for plugging in a `VarProvider` that resolves SQL ``@var`` / ``@@var`` references at execution time. These were surfaced during a v54 upstream coverage audit but are not exposed in the Python bindings.

## Upstream signature

```rust
pub fn register_variable(&self, var_type: VarType, provider: Arc)
pub fn deregister_variable(&self, var_type: VarType) -> Option>
```

`VarProvider` is a small trait with `get_value(&self, name: Vec) -> Result` and `get_type(&self, name: &[String]) -> Option`.

## User value

Enables SQL like ``SELECT * FROM sales WHERE region = @current_region AND user_id = @user_id`` where the provider supplies per-query values. Useful for multi-tenant SaaS embedders, BI / notebook tools that want session-scoped parameters without f-string interpolation (no SQL injection risk), and tools porting MySQL / Postgres SQL that uses session variables.

## Why deferred

Effort estimate is medium (~250-400 LOC): needs a `PyVarProvider` Rust wrapper that calls back into a user-supplied Python object across the GIL boundary, plus the register / deregister bindings on `PySessionContext`, plus a Python-facing ABC. No open user requests at the time of audit, so the work is currently speculative. Filed for tracking; revisit when a concrete user need surfaces or to complete the upstream surface area.

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.