Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

c/driver/postgresql: Support paramterized queries that return a result set #2024

Closed
paleolimbot opened this issue Jul 18, 2024 · 3 comments · Fixed by #2065
Closed

c/driver/postgresql: Support paramterized queries that return a result set #2024

paleolimbot opened this issue Jul 18, 2024 · 3 comments · Fixed by #2065
Labels
Type: enhancement New feature or request

Comments

@paleolimbot
Copy link
Member

What feature or improvement would you like to see?

Currently, any select query that is parameterized will fail unless it is an insert. This isn't critical for many applications but is annoying because it means that the ADBC driver can't be a drop-in replacement for an existing driver. Parameterized queries are a part of many existing workflows (although doesn't typically affect SQL generation tools like ibis or dbplyr, which do the preparation/inlining of parameters themselves). I have one anecdotal story of somebody who took a look at ADBC and ran across this error immediately and stopped investigating as well.

library(adbcdrivermanager)
#> Warning: package 'adbcdrivermanager' was built under R version 4.3.3

con <- adbc_database_init(
  adbcpostgresql::adbcpostgresql(), 
  uri = "postgresql://localhost:5432/postgres?user=postgres&password=password"
) |> 
  adbc_connection_init()

# Paramterized queries work for things like insert
write_adbc(data.frame(x = 1:5), con, "integers")
execute_adbc(con, "INSERT INTO integers VALUES ($1);", bind = data.frame(6:10))
read_adbc(con, "SELECT * from integers") |> 
  tibble::as_tibble()
#> # A tibble: 10 × 1
#>        x
#>    <int>
#>  1     1
#>  2     2
#>  3     3
#>  4     4
#>  5     5
#>  6     6
#>  7     7
#>  8     8
#>  9     9
#> 10    10

# Parameterized queries don't work for selects
read_adbc(con, "SELECT * from integers where x > $1", bind = data.frame(5L))
#> Error in adbc_statement_execute_query(stmt, stream, stream_join_parent = TRUE): NOT_IMPLEMENTED: [libpq] Prepared statements returning result sets are not implemented

This unfortunately may require a separate set of infrastructure from the COPY reader and might not be able to support all types as well; however, it is probably not hard to support some basic set of types once the infrastructure is in place.

@paleolimbot paleolimbot added the Type: enhancement New feature or request label Jul 18, 2024
@lidavidm
Copy link
Member

There's also #855 which is implicitly the same thing (from the description)

@paleolimbot
Copy link
Member Author

Ah I missed that!

@paleolimbot paleolimbot closed this as not planned Won't fix, can't repro, duplicate, stale Jul 19, 2024
@paleolimbot paleolimbot reopened this Aug 7, 2024
@paleolimbot
Copy link
Member Author

Reopening this since #2029 didn't quite cover the second half of this issue, which is wiring up the BindStream to the new reader. Working on this next!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Type: enhancement New feature or request
Projects
None yet
2 participants