Skip to content

Commit 44e9789

Browse files
authored
fix(bq): do not call 'getQueryResults' for stateful queries via 'query' api (#12999)
1 parent 814cb1a commit 44e9789

2 files changed

Lines changed: 23 additions & 9 deletions

File tree

java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/BigQueryImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2104,7 +2104,7 @@ && getOptions().getOpenTelemetryTracer() != null) {
21042104

21052105
return queryRpc(projectId, content, options);
21062106
}
2107-
return create(JobInfo.of(jobId, configuration), options).getQueryResults();
2107+
return create(JobInfo.of(jobId, configuration), options);
21082108
} finally {
21092109
if (querySpan != null) {
21102110
querySpan.end();

java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/it/ITBigQueryTest.java

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7487,22 +7487,36 @@ void testQueryWithTimeout() throws InterruptedException {
74877487
}
74887488

74897489
// Stateful query returns Job
7490-
// Test scenario 2 to ensure job is created if JobCreationMode is set, but for a small query
7491-
// it still returns results.
7490+
// Test scenario 2 to ensure job is created if Query is long running.
7491+
// Explicitly disable cache to ensure it is long-running query;
7492+
config = QueryJobConfiguration.newBuilder(largeQuery).setUseQueryCache(false).build();
7493+
long millis = System.currentTimeMillis();
7494+
result = bigQuery.queryWithTimeout(config, null, 1000L);
7495+
millis = System.currentTimeMillis() - millis;
7496+
assertTrue(result instanceof Job);
7497+
// Cancel the job as we don't need results.
7498+
((Job) result).cancel();
7499+
// Allow 2 seconds of timeout value to account for random delays
7500+
assertTrue(millis < 1_000_000 * 2);
7501+
7502+
// Stateful query returns Job
7503+
// Test scenario 3 to ensure job is created if JobCreationMode is set.
74927504
config =
74937505
QueryJobConfiguration.newBuilder(query)
74947506
.setJobCreationMode(JobCreationMode.JOB_CREATION_REQUIRED)
74957507
.build();
74967508
result = bigQuery.queryWithTimeout(config, null, null);
7497-
assertTrue(result instanceof TableResult);
7498-
assertNotNull(((TableResult) result).getJobId());
7499-
assertNull(((TableResult) result).getQueryId());
7509+
assertTrue(result instanceof Job);
75007510

75017511
// Stateful query returns Job
7502-
// Test scenario 3 to ensure job is created if Query is long running.
7512+
// Test scenario 4 to ensure job is created if Query is long running.
75037513
// Explicitly disable cache to ensure it is long-running query;
7504-
config = QueryJobConfiguration.newBuilder(largeQuery).setUseQueryCache(false).build();
7505-
long millis = System.currentTimeMillis();
7514+
config =
7515+
QueryJobConfiguration.newBuilder(largeQuery)
7516+
.setJobCreationMode(JobCreationMode.JOB_CREATION_REQUIRED)
7517+
.setUseQueryCache(false)
7518+
.build();
7519+
millis = System.currentTimeMillis();
75067520
result = bigQuery.queryWithTimeout(config, null, 1000L);
75077521
millis = System.currentTimeMillis() - millis;
75087522
assertTrue(result instanceof Job);

0 commit comments

Comments
 (0)