Skip to content

ArrowArrayInitFromSchema(): Error parsing schema->format: Expected decimal bitwidth of 128 or 256 but found 64 #31

@mskyttner

Description

@mskyttner

Connecting using adbi and adbcflightsql against a Arrow Flight SQL Server and reading data from a decimal column ("lineitem" table) complains with the error message "ArrowArrayInitFromSchema(): Error parsing schema->format: Expected decimal bitwidth of 128 or 256 but found 64".

Replicate by running two Flight SQL Servers, using container images from voltrondata/sqlflite (older) and gizmodata/gizmosql (newer):

# first run this arrow flight sql server (arrow v 17 and duckdb v 1.1.1)
docker run --name sqlflite --detach --rm --tty --init --publish 31336:31337   --env TLS_ENABLED="0" --env SQLFLITE_PASSWORD="sqlflite_password"   --env PRINT_QUERIES="1" --env INIT_SQL_COMMANDS="SET threads = 1; SET memory_limit = '1GB';"   --pull missing voltrondata/sqlflite:latest

# then run the new "version" of this "gizmosql" (arrow v 20 and duckdb v 1.3)
docker run --name gizmosql --detach --rm --tty --init --publish 31337:31337   --env TLS_ENABLED="0" --env GIZMOSQL_PASSWORD="sqlflite_password"   --env PRINT_QUERIES="1" --env INIT_SQL_COMMANDS="SET threads = 1; SET memory_limit = '1GB';"   --pull missing gizmodata/gizmosql:latest

Then from R make a connection to the newer server:

#install.packages("adbi")
#install.packages("adbcflightsql", repos = "https://community.r-multiverse.org")

con <- adbi::dbConnect(adbi::adbi("adbcflightsql"),
  uri = "grpc://127.0.0.1:31337/",
  username = "sqlflite_username",
  password = "sqlflite_password"
)

con |> DBI::dbGetQuery("select #5 from lineitem;")

# we get an error ! ArrowArrayInitFromSchema(): Error parsing schema->format: Expected decimal bitwidth of 128 or 256 but found 64


DBI::dbDisconnect(con)

Note that this works against the other (older) server

# it works against the older version (voltrondata/sqlflite)

con <- adbi::dbConnect(adbi::adbi("adbcflightsql"),
  uri = "grpc://127.0.0.1:31336/",
  username = "sqlflite_username",
  password = "sqlflite_password"
)

con |> DBI::dbGetQuery("select #5 from lineitem;")

DBI::dbDisconnect(con)

The error traceback:

Error in `nanoarrow::nanoarrow_array_init()`:
! ArrowArrayInitFromSchema(): Error parsing schema->format: Expected decimal bitwidth of 128 or 256 but found 64
Hide Traceback
    ▆
 1. ├─DBI::dbGetQuery(con, "select #5 from lineitem;")
 2. └─DBI::dbGetQuery(con, "select #5 from lineitem;")
 3.   └─DBI (local) .local(conn, statement, ...)
 4.     ├─DBI::dbFetch(rs, n = n, ...)
 5.     └─adbi::dbFetch(rs, n = n, ...)
 6.       └─adbi:::get_data_batch(res, "rest")
 7.         └─adbi:::arrow_ptype(x)
 8.           └─nanoarrow::nanoarrow_array_init(...)

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