Skip to content

[BigQuery] BigQueryResultSet mangles the data type when calling getLong with a column index #3938

@raelik

Description

@raelik

I tested this on both Mac OS X Sonoma 14.7.7 and Rocky Linux 8 (4.18.0-553.16.1.el8_10.cloud.0.1.x86_64), using OpenJDK 21.0.7 on both. This was using the google-cloud-bigquery v2.52.0 API.

When using executeSelect(), if a query uses the Read API (so this does NOT affect small result sets that use the slower API), if you call getLong() with a column index instead of a column name, it will incorrectly interpret that data as an Integer (int) instead, resulting in the mangling of data for values larger than 2,147,483,647.

The problematic code is here:

return getInt(schemaFieldList.get(columnIndex).getName());

That shouldn't be calling getInt() with the column name, it should be calling getLong() with the column name.

Steps to reproduce

  1. Use the executeSelect() API to run a query with INTEGER fields containing large values (higher than 2,147,483,647), returning a large result set (400,000 rows is adequate). Iterate over the ResultSet.
  2. Use getLong() with a column index to retrieve those integer fields.

Metadata

Metadata

Assignees

No one assigned

    Labels

    api: bigqueryIssues related to the googleapis/java-bigquery API.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions