Skip to content

Commit d3095c7

Browse files
authored
Add numDmlAffectedRows to QueryResponse (#2320)
1 parent 5a234de commit d3095c7

4 files changed

Lines changed: 26 additions & 1 deletion

File tree

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -571,6 +571,7 @@ public com.google.api.services.bigquery.model.QueryResponse call() {
571571
QueryResponse.Builder builder = QueryResponse.newBuilder();
572572
JobId completeJobId = JobId.fromPb(results.getJobReference());
573573
builder.setJobId(completeJobId);
574+
builder.setNumDmlAffectedRows(results.getNumDmlAffectedRows());
574575
builder.setJobCompleted(results.getJobComplete());
575576
List<TableRow> rowsPb = results.getRows();
576577
if (results.getJobComplete()) {
@@ -617,6 +618,7 @@ public GetQueryResultsResponse call() {
617618
}, serviceOptions.getRetrySettings(), EXCEPTION_HANDLER, serviceOptions.getClock());
618619
QueryResponse.Builder builder = QueryResponse.newBuilder();
619620
builder.setJobId(JobId.fromPb(results.getJobReference()));
621+
builder.setNumDmlAffectedRows(results.getNumDmlAffectedRows());
620622
builder.setEtag(results.getEtag());
621623
builder.setJobCompleted(results.getJobComplete());
622624
List<TableRow> rowsPb = results.getRows();

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

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ public class QueryResponse implements Serializable {
5656
private final QueryResult result;
5757
private final String etag;
5858
private final JobId jobId;
59+
private final Long numDmlAffectedRows;
5960
private final boolean jobCompleted;
6061
private final List<BigQueryError> executionErrors;
6162

@@ -64,6 +65,7 @@ static final class Builder {
6465
private QueryResult result;
6566
private String etag;
6667
private JobId jobId;
68+
private Long numDmlAffectedRows;
6769
private boolean jobCompleted;
6870
private List<BigQueryError> executionErrors;
6971

@@ -84,6 +86,11 @@ Builder setJobId(JobId jobId) {
8486
return this;
8587
}
8688

89+
Builder setNumDmlAffectedRows(Long numDmlAffectedRows) {
90+
this.numDmlAffectedRows = numDmlAffectedRows;
91+
return this;
92+
}
93+
8794
Builder setJobCompleted(boolean jobCompleted) {
8895
this.jobCompleted = jobCompleted;
8996
return this;
@@ -103,6 +110,7 @@ private QueryResponse(Builder builder) {
103110
this.result = builder.result;
104111
this.etag = builder.etag;
105112
this.jobId = builder.jobId;
113+
this.numDmlAffectedRows = builder.numDmlAffectedRows;
106114
this.jobCompleted = builder.jobCompleted;
107115
this.executionErrors = builder.executionErrors != null ? builder.executionErrors
108116
: ImmutableList.<BigQueryError>of();
@@ -134,6 +142,12 @@ public JobId getJobId() {
134142
return jobId;
135143
}
136144

145+
/**
146+
* Returns the number of rows affected by a DML statement. Present only for DML statements INSERT,
147+
* UPDATE or DELETE.
148+
*/
149+
public Long getNumDmlAffectedRows() { return numDmlAffectedRows; }
150+
137151
/**
138152
* Returns whether the job running the query has completed or not. If {@link #getResult()} is not
139153
* {@code null}, this method will always return {@code true}. If this method returns {@code false}
@@ -168,14 +182,15 @@ public String toString() {
168182
.add("result", result)
169183
.add("etag", etag)
170184
.add("jobId", jobId)
185+
.add("numDmlAffectedRows", numDmlAffectedRows)
171186
.add("jobCompleted", jobCompleted)
172187
.add("executionErrors", executionErrors)
173188
.toString();
174189
}
175190

176191
@Override
177192
public final int hashCode() {
178-
return Objects.hash(jobId);
193+
return Objects.hash(result, etag, jobId, numDmlAffectedRows, jobCompleted, executionErrors);
179194
}
180195

181196
@Override
@@ -191,6 +206,7 @@ public final boolean equals(Object obj) {
191206
&& Objects.equals(etag, response.etag)
192207
&& Objects.equals(result, response.result)
193208
&& Objects.equals(jobId, response.jobId)
209+
&& Objects.equals(numDmlAffectedRows, response.numDmlAffectedRows)
194210
&& Objects.equals(executionErrors, response.executionErrors);
195211
}
196212

google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/QueryResponseTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public class QueryResponseTest {
3838

3939
private static final Schema SCHEMA = Schema.of(FIELD_SCHEMA1);
4040
private static final JobId JOB_ID = JobId.of("project", "job");
41+
private static final Long NUM_DML_AFFECTED_ROWS = 24L;
4142
private static final Long TOTAL_ROWS = 42L;
4243
private static final QueryResult.QueryResultsPageFetcher FETCHER =
4344
new QueryResult.QueryResultsPageFetcher() {
@@ -66,6 +67,7 @@ public QueryResult getNextPage() {
6667
private static final QueryResponse QUERY_RESPONSE = QueryResponse.newBuilder()
6768
.setEtag(ETAG)
6869
.setJobId(JOB_ID)
70+
.setNumDmlAffectedRows(NUM_DML_AFFECTED_ROWS)
6971
.setJobCompleted(JOB_COMPLETE)
7072
.setExecutionErrors(ERRORS)
7173
.setResult(QUERY_RESULT)
@@ -76,6 +78,7 @@ public void testBuilder() {
7678
assertEquals(ETAG, QUERY_RESPONSE.getEtag());
7779
assertEquals(QUERY_RESULT, QUERY_RESPONSE.getResult());
7880
assertEquals(JOB_ID, QUERY_RESPONSE.getJobId());
81+
assertEquals(NUM_DML_AFFECTED_ROWS, QUERY_RESPONSE.getNumDmlAffectedRows());
7982
assertEquals(JOB_COMPLETE, QUERY_RESPONSE.jobCompleted());
8083
assertEquals(ERRORS, QUERY_RESPONSE.getExecutionErrors());
8184
assertTrue(QUERY_RESPONSE.hasErrors());
@@ -88,6 +91,7 @@ public void testBuilderIncomplete() {
8891
assertNull(queryResponse.getEtag());
8992
assertNull(queryResponse.getResult());
9093
assertNull(queryResponse.getJobId());
94+
assertNull(queryResponse.getNumDmlAffectedRows());
9195
assertFalse(queryResponse.jobCompleted());
9296
assertEquals(ImmutableList.<BigQueryError>of(), queryResponse.getExecutionErrors());
9397
assertFalse(queryResponse.hasErrors());
@@ -103,6 +107,7 @@ private void compareQueryResponse(QueryResponse expected, QueryResponse value) {
103107
assertEquals(expected.getEtag(), value.getEtag());
104108
assertEquals(expected.getResult(), value.getResult());
105109
assertEquals(expected.getJobId(), value.getJobId());
110+
assertEquals(expected.getNumDmlAffectedRows(), value.getNumDmlAffectedRows());
106111
assertEquals(expected.jobCompleted(), value.jobCompleted());
107112
assertEquals(expected.getExecutionErrors(), value.getExecutionErrors());
108113
assertEquals(expected.hasErrors(), value.hasErrors());

google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/SerializationTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ public class SerializationTest extends BaseSerializationTest {
160160
private static final JobStatus JOB_STATUS = new JobStatus(JobStatus.State.DONE, BIGQUERY_ERROR,
161161
ImmutableList.of(BIGQUERY_ERROR));
162162
private static final JobId JOB_ID = JobId.of("project", "job");
163+
private static final Long NUM_DL_AFFECTED_ROWS = 24L;
163164
private static final CopyJobConfiguration COPY_JOB_CONFIGURATION =
164165
CopyJobConfiguration.of(TABLE_ID, TABLE_ID);
165166
private static final ExtractJobConfiguration EXTRACT_JOB_CONFIGURATION =
@@ -211,6 +212,7 @@ public class SerializationTest extends BaseSerializationTest {
211212
private static final QueryResponse QUERY_RESPONSE = QueryResponse.newBuilder()
212213
.setEtag(ETAG)
213214
.setJobId(JOB_ID)
215+
.setNumDmlAffectedRows(NUM_DL_AFFECTED_ROWS)
214216
.setJobCompleted(true)
215217
.setResult(QUERY_RESULT)
216218
.build();

0 commit comments

Comments
 (0)