diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadata.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadata.java index d802b4648b..05ce99529a 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadata.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadata.java @@ -180,6 +180,78 @@ public com.google.spanner.v1.TransactionOrBuilder getTransactionOrBuilder() { return getTransaction(); } + public static final int UNDECLARED_PARAMETERS_FIELD_NUMBER = 3; + private com.google.spanner.v1.StructType undeclaredParameters_; + /** + * + * + *
+   * A SQL query can be parameterized. In PLAN mode, these parameters can be
+   * undeclared. This indicates the field names and types for those undeclared
+   * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
+   * Users where UserId = @userId and UserName = @userName "` could return a
+   * `undeclared_parameters` value like:
+   *     "fields": [
+   *       { "name": "UserId", "type": { "code": "INT64" } },
+   *       { "name": "UserName", "type": { "code": "STRING" } },
+   *     ]
+   * 
+ * + * .google.spanner.v1.StructType undeclared_parameters = 3; + * + * @return Whether the undeclaredParameters field is set. + */ + @java.lang.Override + public boolean hasUndeclaredParameters() { + return undeclaredParameters_ != null; + } + /** + * + * + *
+   * A SQL query can be parameterized. In PLAN mode, these parameters can be
+   * undeclared. This indicates the field names and types for those undeclared
+   * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
+   * Users where UserId = @userId and UserName = @userName "` could return a
+   * `undeclared_parameters` value like:
+   *     "fields": [
+   *       { "name": "UserId", "type": { "code": "INT64" } },
+   *       { "name": "UserName", "type": { "code": "STRING" } },
+   *     ]
+   * 
+ * + * .google.spanner.v1.StructType undeclared_parameters = 3; + * + * @return The undeclaredParameters. + */ + @java.lang.Override + public com.google.spanner.v1.StructType getUndeclaredParameters() { + return undeclaredParameters_ == null + ? com.google.spanner.v1.StructType.getDefaultInstance() + : undeclaredParameters_; + } + /** + * + * + *
+   * A SQL query can be parameterized. In PLAN mode, these parameters can be
+   * undeclared. This indicates the field names and types for those undeclared
+   * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
+   * Users where UserId = @userId and UserName = @userName "` could return a
+   * `undeclared_parameters` value like:
+   *     "fields": [
+   *       { "name": "UserId", "type": { "code": "INT64" } },
+   *       { "name": "UserName", "type": { "code": "STRING" } },
+   *     ]
+   * 
+ * + * .google.spanner.v1.StructType undeclared_parameters = 3; + */ + @java.lang.Override + public com.google.spanner.v1.StructTypeOrBuilder getUndeclaredParametersOrBuilder() { + return getUndeclaredParameters(); + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -200,6 +272,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (transaction_ != null) { output.writeMessage(2, getTransaction()); } + if (undeclaredParameters_ != null) { + output.writeMessage(3, getUndeclaredParameters()); + } getUnknownFields().writeTo(output); } @@ -215,6 +290,10 @@ public int getSerializedSize() { if (transaction_ != null) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getTransaction()); } + if (undeclaredParameters_ != null) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize(3, getUndeclaredParameters()); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -238,6 +317,10 @@ public boolean equals(final java.lang.Object obj) { if (hasTransaction()) { if (!getTransaction().equals(other.getTransaction())) return false; } + if (hasUndeclaredParameters() != other.hasUndeclaredParameters()) return false; + if (hasUndeclaredParameters()) { + if (!getUndeclaredParameters().equals(other.getUndeclaredParameters())) return false; + } if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -257,6 +340,10 @@ public int hashCode() { hash = (37 * hash) + TRANSACTION_FIELD_NUMBER; hash = (53 * hash) + getTransaction().hashCode(); } + if (hasUndeclaredParameters()) { + hash = (37 * hash) + UNDECLARED_PARAMETERS_FIELD_NUMBER; + hash = (53 * hash) + getUndeclaredParameters().hashCode(); + } hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -407,6 +494,12 @@ public Builder clear() { transaction_ = null; transactionBuilder_ = null; } + if (undeclaredParametersBuilder_ == null) { + undeclaredParameters_ = null; + } else { + undeclaredParameters_ = null; + undeclaredParametersBuilder_ = null; + } return this; } @@ -444,6 +537,11 @@ public com.google.spanner.v1.ResultSetMetadata buildPartial() { } else { result.transaction_ = transactionBuilder_.build(); } + if (undeclaredParametersBuilder_ == null) { + result.undeclaredParameters_ = undeclaredParameters_; + } else { + result.undeclaredParameters_ = undeclaredParametersBuilder_.build(); + } onBuilt(); return result; } @@ -499,6 +597,9 @@ public Builder mergeFrom(com.google.spanner.v1.ResultSetMetadata other) { if (other.hasTransaction()) { mergeTransaction(other.getTransaction()); } + if (other.hasUndeclaredParameters()) { + mergeUndeclaredParameters(other.getUndeclaredParameters()); + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -537,6 +638,13 @@ public Builder mergeFrom( break; } // case 18 + case 26: + { + input.readMessage( + getUndeclaredParametersFieldBuilder().getBuilder(), extensionRegistry); + + break; + } // case 26 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -981,6 +1089,264 @@ public com.google.spanner.v1.TransactionOrBuilder getTransactionOrBuilder() { return transactionBuilder_; } + private com.google.spanner.v1.StructType undeclaredParameters_; + private com.google.protobuf.SingleFieldBuilderV3< + com.google.spanner.v1.StructType, + com.google.spanner.v1.StructType.Builder, + com.google.spanner.v1.StructTypeOrBuilder> + undeclaredParametersBuilder_; + /** + * + * + *
+     * A SQL query can be parameterized. In PLAN mode, these parameters can be
+     * undeclared. This indicates the field names and types for those undeclared
+     * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
+     * Users where UserId = @userId and UserName = @userName "` could return a
+     * `undeclared_parameters` value like:
+     *     "fields": [
+     *       { "name": "UserId", "type": { "code": "INT64" } },
+     *       { "name": "UserName", "type": { "code": "STRING" } },
+     *     ]
+     * 
+ * + * .google.spanner.v1.StructType undeclared_parameters = 3; + * + * @return Whether the undeclaredParameters field is set. + */ + public boolean hasUndeclaredParameters() { + return undeclaredParametersBuilder_ != null || undeclaredParameters_ != null; + } + /** + * + * + *
+     * A SQL query can be parameterized. In PLAN mode, these parameters can be
+     * undeclared. This indicates the field names and types for those undeclared
+     * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
+     * Users where UserId = @userId and UserName = @userName "` could return a
+     * `undeclared_parameters` value like:
+     *     "fields": [
+     *       { "name": "UserId", "type": { "code": "INT64" } },
+     *       { "name": "UserName", "type": { "code": "STRING" } },
+     *     ]
+     * 
+ * + * .google.spanner.v1.StructType undeclared_parameters = 3; + * + * @return The undeclaredParameters. + */ + public com.google.spanner.v1.StructType getUndeclaredParameters() { + if (undeclaredParametersBuilder_ == null) { + return undeclaredParameters_ == null + ? com.google.spanner.v1.StructType.getDefaultInstance() + : undeclaredParameters_; + } else { + return undeclaredParametersBuilder_.getMessage(); + } + } + /** + * + * + *
+     * A SQL query can be parameterized. In PLAN mode, these parameters can be
+     * undeclared. This indicates the field names and types for those undeclared
+     * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
+     * Users where UserId = @userId and UserName = @userName "` could return a
+     * `undeclared_parameters` value like:
+     *     "fields": [
+     *       { "name": "UserId", "type": { "code": "INT64" } },
+     *       { "name": "UserName", "type": { "code": "STRING" } },
+     *     ]
+     * 
+ * + * .google.spanner.v1.StructType undeclared_parameters = 3; + */ + public Builder setUndeclaredParameters(com.google.spanner.v1.StructType value) { + if (undeclaredParametersBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + undeclaredParameters_ = value; + onChanged(); + } else { + undeclaredParametersBuilder_.setMessage(value); + } + + return this; + } + /** + * + * + *
+     * A SQL query can be parameterized. In PLAN mode, these parameters can be
+     * undeclared. This indicates the field names and types for those undeclared
+     * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
+     * Users where UserId = @userId and UserName = @userName "` could return a
+     * `undeclared_parameters` value like:
+     *     "fields": [
+     *       { "name": "UserId", "type": { "code": "INT64" } },
+     *       { "name": "UserName", "type": { "code": "STRING" } },
+     *     ]
+     * 
+ * + * .google.spanner.v1.StructType undeclared_parameters = 3; + */ + public Builder setUndeclaredParameters( + com.google.spanner.v1.StructType.Builder builderForValue) { + if (undeclaredParametersBuilder_ == null) { + undeclaredParameters_ = builderForValue.build(); + onChanged(); + } else { + undeclaredParametersBuilder_.setMessage(builderForValue.build()); + } + + return this; + } + /** + * + * + *
+     * A SQL query can be parameterized. In PLAN mode, these parameters can be
+     * undeclared. This indicates the field names and types for those undeclared
+     * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
+     * Users where UserId = @userId and UserName = @userName "` could return a
+     * `undeclared_parameters` value like:
+     *     "fields": [
+     *       { "name": "UserId", "type": { "code": "INT64" } },
+     *       { "name": "UserName", "type": { "code": "STRING" } },
+     *     ]
+     * 
+ * + * .google.spanner.v1.StructType undeclared_parameters = 3; + */ + public Builder mergeUndeclaredParameters(com.google.spanner.v1.StructType value) { + if (undeclaredParametersBuilder_ == null) { + if (undeclaredParameters_ != null) { + undeclaredParameters_ = + com.google.spanner.v1.StructType.newBuilder(undeclaredParameters_) + .mergeFrom(value) + .buildPartial(); + } else { + undeclaredParameters_ = value; + } + onChanged(); + } else { + undeclaredParametersBuilder_.mergeFrom(value); + } + + return this; + } + /** + * + * + *
+     * A SQL query can be parameterized. In PLAN mode, these parameters can be
+     * undeclared. This indicates the field names and types for those undeclared
+     * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
+     * Users where UserId = @userId and UserName = @userName "` could return a
+     * `undeclared_parameters` value like:
+     *     "fields": [
+     *       { "name": "UserId", "type": { "code": "INT64" } },
+     *       { "name": "UserName", "type": { "code": "STRING" } },
+     *     ]
+     * 
+ * + * .google.spanner.v1.StructType undeclared_parameters = 3; + */ + public Builder clearUndeclaredParameters() { + if (undeclaredParametersBuilder_ == null) { + undeclaredParameters_ = null; + onChanged(); + } else { + undeclaredParameters_ = null; + undeclaredParametersBuilder_ = null; + } + + return this; + } + /** + * + * + *
+     * A SQL query can be parameterized. In PLAN mode, these parameters can be
+     * undeclared. This indicates the field names and types for those undeclared
+     * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
+     * Users where UserId = @userId and UserName = @userName "` could return a
+     * `undeclared_parameters` value like:
+     *     "fields": [
+     *       { "name": "UserId", "type": { "code": "INT64" } },
+     *       { "name": "UserName", "type": { "code": "STRING" } },
+     *     ]
+     * 
+ * + * .google.spanner.v1.StructType undeclared_parameters = 3; + */ + public com.google.spanner.v1.StructType.Builder getUndeclaredParametersBuilder() { + + onChanged(); + return getUndeclaredParametersFieldBuilder().getBuilder(); + } + /** + * + * + *
+     * A SQL query can be parameterized. In PLAN mode, these parameters can be
+     * undeclared. This indicates the field names and types for those undeclared
+     * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
+     * Users where UserId = @userId and UserName = @userName "` could return a
+     * `undeclared_parameters` value like:
+     *     "fields": [
+     *       { "name": "UserId", "type": { "code": "INT64" } },
+     *       { "name": "UserName", "type": { "code": "STRING" } },
+     *     ]
+     * 
+ * + * .google.spanner.v1.StructType undeclared_parameters = 3; + */ + public com.google.spanner.v1.StructTypeOrBuilder getUndeclaredParametersOrBuilder() { + if (undeclaredParametersBuilder_ != null) { + return undeclaredParametersBuilder_.getMessageOrBuilder(); + } else { + return undeclaredParameters_ == null + ? com.google.spanner.v1.StructType.getDefaultInstance() + : undeclaredParameters_; + } + } + /** + * + * + *
+     * A SQL query can be parameterized. In PLAN mode, these parameters can be
+     * undeclared. This indicates the field names and types for those undeclared
+     * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
+     * Users where UserId = @userId and UserName = @userName "` could return a
+     * `undeclared_parameters` value like:
+     *     "fields": [
+     *       { "name": "UserId", "type": { "code": "INT64" } },
+     *       { "name": "UserName", "type": { "code": "STRING" } },
+     *     ]
+     * 
+ * + * .google.spanner.v1.StructType undeclared_parameters = 3; + */ + private com.google.protobuf.SingleFieldBuilderV3< + com.google.spanner.v1.StructType, + com.google.spanner.v1.StructType.Builder, + com.google.spanner.v1.StructTypeOrBuilder> + getUndeclaredParametersFieldBuilder() { + if (undeclaredParametersBuilder_ == null) { + undeclaredParametersBuilder_ = + new com.google.protobuf.SingleFieldBuilderV3< + com.google.spanner.v1.StructType, + com.google.spanner.v1.StructType.Builder, + com.google.spanner.v1.StructTypeOrBuilder>( + getUndeclaredParameters(), getParentForChildren(), isClean()); + undeclaredParameters_ = null; + } + return undeclaredParametersBuilder_; + } + @java.lang.Override public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { return super.setUnknownFields(unknownFields); diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadataOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadataOrBuilder.java index e1a554096f..38216902ce 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadataOrBuilder.java @@ -113,4 +113,63 @@ public interface ResultSetMetadataOrBuilder * .google.spanner.v1.Transaction transaction = 2; */ com.google.spanner.v1.TransactionOrBuilder getTransactionOrBuilder(); + + /** + * + * + *
+   * A SQL query can be parameterized. In PLAN mode, these parameters can be
+   * undeclared. This indicates the field names and types for those undeclared
+   * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
+   * Users where UserId = @userId and UserName = @userName "` could return a
+   * `undeclared_parameters` value like:
+   *     "fields": [
+   *       { "name": "UserId", "type": { "code": "INT64" } },
+   *       { "name": "UserName", "type": { "code": "STRING" } },
+   *     ]
+   * 
+ * + * .google.spanner.v1.StructType undeclared_parameters = 3; + * + * @return Whether the undeclaredParameters field is set. + */ + boolean hasUndeclaredParameters(); + /** + * + * + *
+   * A SQL query can be parameterized. In PLAN mode, these parameters can be
+   * undeclared. This indicates the field names and types for those undeclared
+   * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
+   * Users where UserId = @userId and UserName = @userName "` could return a
+   * `undeclared_parameters` value like:
+   *     "fields": [
+   *       { "name": "UserId", "type": { "code": "INT64" } },
+   *       { "name": "UserName", "type": { "code": "STRING" } },
+   *     ]
+   * 
+ * + * .google.spanner.v1.StructType undeclared_parameters = 3; + * + * @return The undeclaredParameters. + */ + com.google.spanner.v1.StructType getUndeclaredParameters(); + /** + * + * + *
+   * A SQL query can be parameterized. In PLAN mode, these parameters can be
+   * undeclared. This indicates the field names and types for those undeclared
+   * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
+   * Users where UserId = @userId and UserName = @userName "` could return a
+   * `undeclared_parameters` value like:
+   *     "fields": [
+   *       { "name": "UserId", "type": { "code": "INT64" } },
+   *       { "name": "UserName", "type": { "code": "STRING" } },
+   *     ]
+   * 
+ * + * .google.spanner.v1.StructType undeclared_parameters = 3; + */ + com.google.spanner.v1.StructTypeOrBuilder getUndeclaredParametersOrBuilder(); } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetProto.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetProto.java index 4a16d3a312..3c90e33d82 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetProto.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetProto.java @@ -66,19 +66,21 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + "\003(\0132\026.google.protobuf.Value\022\025\n\rchunked_v" + "alue\030\003 \001(\010\022\024\n\014resume_token\030\004 \001(\014\0220\n\005stat" + "s\030\005 \001(\0132!.google.spanner.v1.ResultSetSta" - + "ts\"y\n\021ResultSetMetadata\022/\n\010row_type\030\001 \001(" - + "\0132\035.google.spanner.v1.StructType\0223\n\013tran" - + "saction\030\002 \001(\0132\036.google.spanner.v1.Transa" - + "ction\"\271\001\n\016ResultSetStats\0220\n\nquery_plan\030\001" - + " \001(\0132\034.google.spanner.v1.QueryPlan\022,\n\013qu" - + "ery_stats\030\002 \001(\0132\027.google.protobuf.Struct" - + "\022\031\n\017row_count_exact\030\003 \001(\003H\000\022\037\n\025row_count" - + "_lower_bound\030\004 \001(\003H\000B\013\n\trow_countB\267\001\n\025co" - + "m.google.spanner.v1B\016ResultSetProtoP\001Z8g" - + "oogle.golang.org/genproto/googleapis/spa" - + "nner/v1;spanner\370\001\001\252\002\027Google.Cloud.Spanne" - + "r.V1\312\002\027Google\\Cloud\\Spanner\\V1\352\002\032Google:" - + ":Cloud::Spanner::V1b\006proto3" + + "ts\"\267\001\n\021ResultSetMetadata\022/\n\010row_type\030\001 \001" + + "(\0132\035.google.spanner.v1.StructType\0223\n\013tra" + + "nsaction\030\002 \001(\0132\036.google.spanner.v1.Trans" + + "action\022<\n\025undeclared_parameters\030\003 \001(\0132\035." + + "google.spanner.v1.StructType\"\271\001\n\016ResultS" + + "etStats\0220\n\nquery_plan\030\001 \001(\0132\034.google.spa" + + "nner.v1.QueryPlan\022,\n\013query_stats\030\002 \001(\0132\027" + + ".google.protobuf.Struct\022\031\n\017row_count_exa" + + "ct\030\003 \001(\003H\000\022\037\n\025row_count_lower_bound\030\004 \001(" + + "\003H\000B\013\n\trow_countB\267\001\n\025com.google.spanner." + + "v1B\016ResultSetProtoP\001Z8google.golang.org/" + + "genproto/googleapis/spanner/v1;spanner\370\001" + + "\001\252\002\027Google.Cloud.Spanner.V1\312\002\027Google\\Clo" + + "ud\\Spanner\\V1\352\002\032Google::Cloud::Spanner::" + + "V1b\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( @@ -111,7 +113,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_google_spanner_v1_ResultSetMetadata_descriptor, new java.lang.String[] { - "RowType", "Transaction", + "RowType", "Transaction", "UndeclaredParameters", }); internal_static_google_spanner_v1_ResultSetStats_descriptor = getDescriptor().getMessageTypes().get(3); diff --git a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/result_set.proto b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/result_set.proto index 714d8bea9e..36df232bcf 100644 --- a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/result_set.proto +++ b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/result_set.proto @@ -174,6 +174,18 @@ message ResultSetMetadata { // If the read or SQL query began a transaction as a side-effect, the // information about the new transaction is yielded here. Transaction transaction = 2; + + // A SQL query can be parameterized. In PLAN mode, these parameters can be + // undeclared. This indicates the field names and types for those undeclared + // parameters in the SQL query. For example, a SQL query like `"SELECT * FROM + // Users where UserId = @userId and UserName = @userName "` could return a + // `undeclared_parameters` value like: + // + // "fields": [ + // { "name": "UserId", "type": { "code": "INT64" } }, + // { "name": "UserName", "type": { "code": "STRING" } }, + // ] + StructType undeclared_parameters = 3; } // Additional statistics about a [ResultSet][google.spanner.v1.ResultSet] or [PartialResultSet][google.spanner.v1.PartialResultSet].