Skip to content

allow named arguments to 'pass through' in translation to SQL? #1574

Open
@cboettig

Description

@cboettig

Most of the time dbplyr is very good about letting functions known to the database backend (e.g. duckdb with spatial extension), to just "pass through", e.g. if tbl is a lazy table to a duckdb extension, we can do:

tbl |> 
  mutate(geom = st_transform(geom, "EPSG:4326", "EPSG:3857")) 

because st_transform() is understood by duckdb.

(Full reprex here: cboettig/duckdbfs#34).

But in this particular case, DuckDB requires an extra argument for working with EPSG:4326, as described in the docs. We want the SQL query to render as:

SELECT ST_TRANSFORM(geom,  'EPSG:4326',  'EPSG:3857', always_xy := true) AS geom

But I cannot see how to get the always_xy := true part to render properly. E.g. if we try this:

tbl |> 
  mutate(geom = st_transform(geom, "EPSG:4326", "EPSG:3857", always_xy = TRUE)) 

dbplyr gives us this kinda nonsense SQL instead:

SELECT ST_TRANSFORM(geom,  'EPSG:4326',  'EPSG:3857',  TRUE AS always_xy) AS geom

The docs just suggest that "unknown functions translate "as is" but that does not seem to be what happens here.

Thanks!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions