Index: pkg/appengine/lib/src/protobuf_api/external/datastore_v1.proto |
diff --git a/pkg/appengine/lib/src/protobuf_api/external/datastore_v1.proto b/pkg/appengine/lib/src/protobuf_api/external/datastore_v1.proto |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3d562709ddeffc483ad65c1601632356f46b2b06 |
--- /dev/null |
+++ b/pkg/appengine/lib/src/protobuf_api/external/datastore_v1.proto |
@@ -0,0 +1,594 @@ |
+// Copyright 2013 Google Inc. All Rights Reserved. |
+// |
+// The datastore v1 service proto definitions |
+ |
+syntax = "proto2"; |
+ |
+package api.services.datastore; |
+option java_package = "com.google.api.services.datastore"; |
+ |
+ |
+// An identifier for a particular subset of entities. |
+// |
+// Entities are partitioned into various subsets, each used by different |
+// datasets and different namespaces within a dataset and so forth. |
+// |
+// All input partition IDs are normalized before use. |
+// A partition ID is normalized as follows: |
+// If the partition ID is unset or is set to an empty partition ID, replace it |
+// with the context partition ID. |
+// Otherwise, if the partition ID has no dataset ID, assign it the context |
+// partition ID's dataset ID. |
+// Unless otherwise documented, the context partition ID has the dataset ID set |
+// to the context dataset ID and no other partition dimension set. |
+// |
+// A partition ID is empty if all of its fields are unset. |
+// |
+// Partition dimension: |
+// A dimension may be unset. |
+// A dimension's value must never be "". |
+// A dimension's value must match [A-Za-z\d\.\-_]{1,100} |
+// If the value of any dimension matches regex "__.*__", |
+// the partition is reserved/read-only. |
+// A reserved/read-only partition ID is forbidden in certain documented contexts. |
+// |
+// Dataset ID: |
+// A dataset id's value must never be "". |
+// A dataset id's value must match |
+// ([a-z\d\-]{1,100}~)?([a-z\d][a-z\d\-\.]{0,99}:)?([a-z\d][a-z\d\-]{0,99} |
+message PartitionId { |
+ // The dataset ID. |
+ optional string dataset_id = 3; |
+ // The namespace. |
+ optional string namespace = 4; |
+} |
+ |
+// A unique identifier for an entity. |
+// If a key's partition id or any of its path kinds or names are |
+// reserved/read-only, the key is reserved/read-only. |
+// A reserved/read-only key is forbidden in certain documented contexts. |
+message Key { |
+ // Entities are partitioned into subsets, currently identified by a dataset |
+ // (usually implicitly specified by the project) and namespace ID. |
+ // Queries are scoped to a single partition. |
+ optional PartitionId partition_id = 1; |
+ |
+ // A (kind, ID/name) pair used to construct a key path. |
+ // |
+ // At most one of name or ID may be set. |
+ // If either is set, the element is complete. |
+ // If neither is set, the element is incomplete. |
+ message PathElement { |
+ // The kind of the entity. |
+ // A kind matching regex "__.*__" is reserved/read-only. |
+ // A kind must not contain more than 500 characters. |
+ // Cannot be "". |
+ required string kind = 1; |
+ // The ID of the entity. |
+ // Never equal to zero. Values less than zero are discouraged and will not |
+ // be supported in the future. |
+ optional int64 id = 2; |
+ // The name of the entity. |
+ // A name matching regex "__.*__" is reserved/read-only. |
+ // A name must not be more than 500 characters. |
+ // Cannot be "". |
+ optional string name = 3; |
+ } |
+ |
+ // The entity path. |
+ // An entity path consists of one or more elements composed of a kind and a |
+ // string or numerical identifier, which identify entities. The first |
+ // element identifies a <em>root entity</em>, the second element identifies |
+ // a <em>child</em> of the root entity, the third element a child of the |
+ // second entity, and so forth. The entities identified by all prefixes of |
+ // the path are called the element's <em>ancestors</em>. |
+ // An entity path is always fully complete: ALL of the entity's ancestors |
+ // are required to be in the path along with the entity identifier itself. |
+ // The only exception is that in some documented cases, the identifier in the |
+ // last path element (for the entity) itself may be omitted. A path can never |
+ // be empty. |
+ repeated PathElement path_element = 2; |
+} |
+ |
+// A message that can hold any of the supported value types and associated |
+// metadata. |
+// |
+// At most one of the <type>Value fields may be set. |
+// If none are set the value is "null". |
+// |
+message Value { |
+ // A boolean value. |
+ optional bool boolean_value = 1; |
+ // An integer value. |
+ optional int64 integer_value = 2; |
+ // A double value. |
+ optional double double_value = 3; |
+ // A timestamp value. |
+ optional int64 timestamp_microseconds_value = 4; |
+ // A key value. |
+ optional Key key_value = 5; |
+ // A blob key value. |
+ optional string blob_key_value = 16; |
+ // A UTF-8 encoded string value. |
+ optional string string_value = 17; |
+ // A blob value. |
+ optional bytes blob_value = 18; |
+ // An entity value. |
+ // May have no key. |
+ // May have a key with an incomplete key path. |
+ // May have a reserved/read-only key. |
+ optional Entity entity_value = 6; |
+ // A list value. |
+ // Cannot contain another list value. |
+ // Cannot also have a meaning and indexing set. |
+ repeated Value list_value = 7; |
+ |
+ // The <code>meaning</code> field is reserved and should not be used. |
+ optional int32 meaning = 14; |
+ |
+ // If the value should be indexed. |
+ // |
+ // The <code>indexed</code> property may be set for a |
+ // <code>null</code> value. |
+ // When <code>indexed</code> is <code>true</code>, <code>stringValue</code> |
+ // is limited to 500 characters and the blob value is limited to 500 bytes. |
+ // Exception: If meaning is set to 2, string_value is limited to 2038 |
+ // characters regardless of indexed. |
+ // When indexed is true, meaning 15 and 22 are not allowed, and meaning 16 |
+ // will be ignored on input (and will never be set on output). |
+ // Input values by default have <code>indexed</code> set to |
+ // <code>true</code>; however, you can explicitly set <code>indexed</code> to |
+ // <code>true</code> if you want. (An output value never has |
+ // <code>indexed</code> explicitly set to <code>true</code>.) If a value is |
+ // itself an entity, it cannot have <code>indexed</code> set to |
+ // <code>true</code>. |
+ // Exception: An entity value with meaning 9, 20 or 21 may be indexed. |
+ optional bool indexed = 15 [default = true]; |
+} |
+ |
+// An entity property. |
+message Property { |
+ // The name of the property. |
+ // A property name matching regex "__.*__" is reserved. |
+ // A reserved property name is forbidden in certain documented contexts. |
+ // The name must not contain more than 500 characters. |
+ // Cannot be "". |
+ required string name = 1; |
+ |
+ // The value(s) of the property. |
+ // Each value can have only one value property populated. For example, |
+ // you cannot have a values list of <code>{ value: { integerValue: 22, |
+ // stringValue: "a" } }</code>, but you can have <code>{ value: { listValue: |
+ // [ { integerValue: 22 }, { stringValue: "a" } ] }</code>. |
+ required Value value = 4; |
+} |
+ |
+// An entity. |
+// |
+// An entity is limited to 1 megabyte when stored. That <em>roughly</em> |
+// corresponds to a limit of 1 megabyte for the serialized form of this |
+// message. |
+message Entity { |
+ // The entity's key. |
+ // |
+ // An entity must have a key, unless otherwise documented (for example, |
+ // an entity in <code>Value.entityValue</code> may have no key). |
+ // An entity's kind is its key's path's last element's kind, |
+ // or null if it has no key. |
+ optional Key key = 1; |
+ // The entity's properties. |
+ // Each property's name must be unique for its entity. |
+ repeated Property property = 2; |
+} |
+ |
+// The result of fetching an entity from the datastore. |
+message EntityResult { |
+ // Specifies what data the 'entity' field contains. |
+ // A ResultType is either implied (for example, in LookupResponse.found it |
+ // is always FULL) or specified by context (for example, in message |
+ // QueryResultBatch, field 'entity_result_type' specifies a ResultType |
+ // for all the values in field 'entity_result'). |
+ enum ResultType { |
+ FULL = 1; // The entire entity. |
+ PROJECTION = 2; // A projected subset of properties. |
+ // The entity may have no key. |
+ // A property value may have meaning 18. |
+ KEY_ONLY = 3; // Only the key. |
+ } |
+ |
+ // The resulting entity. |
+ required Entity entity = 1; |
+} |
+ |
+// A query. |
+message Query { |
+ // The projection to return. If not set the entire entity is returned. |
+ repeated PropertyExpression projection = 2; |
+ |
+ // The kinds to query (if empty, returns entities from all kinds). |
+ repeated KindExpression kind = 3; |
+ |
+ // The filter to apply (optional). |
+ optional Filter filter = 4; |
+ |
+ // The order to apply to the query results (if empty, order is unspecified). |
+ repeated PropertyOrder order = 5; |
+ |
+ // The properties to group by (if empty, no grouping is applied to the |
+ // result set). |
+ repeated PropertyReference group_by = 6; |
+ |
+ // A starting point for the query results. Optional. Query cursors are |
+ // returned in query result batches. |
+ optional bytes /* serialized QueryCursor */ start_cursor = 7; |
+ |
+ // An ending point for the query results. Optional. Query cursors are |
+ // returned in query result batches. |
+ optional bytes /* serialized QueryCursor */ end_cursor = 8; |
+ |
+ // The number of results to skip. Applies before limit, but after all other |
+ // constraints (optional, defaults to 0). |
+ optional int32 offset = 10 [default=0]; |
+ |
+ // The maximum number of results to return. Applies after all other |
+ // constraints. Optional. |
+ optional int32 limit = 11; |
+} |
+ |
+// A representation of a kind. |
+message KindExpression { |
+ // The name of the kind. |
+ required string name = 1; |
+} |
+ |
+// A reference to a property relative to the kind expressions. |
+// exactly. |
+message PropertyReference { |
+ // The name of the property. |
+ required string name = 2; |
+} |
+ |
+// A representation of a property in a projection. |
+message PropertyExpression { |
+ enum AggregationFunction { |
+ FIRST = 1; |
+ } |
+ // The property to project. |
+ required PropertyReference property = 1; |
+ // The aggregation function to apply to the property. Optional. |
+ // Can only be used when grouping by at least one property. Must |
+ // then be set on all properties in the projection that are not |
+ // being grouped by. |
+ optional AggregationFunction aggregation_function = 2; |
+} |
+ |
+// The desired order for a specific property. |
+message PropertyOrder { |
+ enum Direction { |
+ ASCENDING = 1; |
+ DESCENDING = 2; |
+ } |
+ // The property to order by. |
+ required PropertyReference property = 1; |
+ // The direction to order by. |
+ optional Direction direction = 2 [default=ASCENDING]; |
+} |
+ |
+// A holder for any type of filter. Exactly one field should be specified. |
+message Filter { |
+ // A composite filter. |
+ optional CompositeFilter composite_filter = 1; |
+ // A filter on a property. |
+ optional PropertyFilter property_filter = 2; |
+} |
+ |
+// A filter that merges the multiple other filters using the given operation. |
+message CompositeFilter { |
+ enum Operator { |
+ AND = 1; |
+ } |
+ |
+ // The operator for combining multiple filters. |
+ required Operator operator = 1; |
+ // The list of filters to combine. |
+ // Must contain at least one filter. |
+ repeated Filter filter = 2; |
+} |
+ |
+// A filter on a specific property. |
+message PropertyFilter { |
+ enum Operator { |
+ LESS_THAN = 1; |
+ LESS_THAN_OR_EQUAL = 2; |
+ GREATER_THAN = 3; |
+ GREATER_THAN_OR_EQUAL = 4; |
+ EQUAL = 5; |
+ |
+ HAS_ANCESTOR = 11; |
+ } |
+ |
+ // The property to filter by. |
+ required PropertyReference property = 1; |
+ // The operator to filter by. |
+ required Operator operator = 2; |
+ // The value to compare the property to. |
+ required Value value = 3; |
+} |
+ |
+// A GQL query. |
+message GqlQuery { |
+ required string query_string = 1; |
+ // When false, the query string must not contain a literal. |
+ optional bool allow_literal = 2 [default = false]; |
+ // A named argument must set field GqlQueryArg.name. |
+ // No two named arguments may have the same name. |
+ // For each non-reserved named binding site in the query string, |
+ // there must be a named argument with that name, |
+ // but not necessarily the inverse. |
+ repeated GqlQueryArg name_arg = 3; |
+ // Numbered binding site @1 references the first numbered argument, |
+ // effectively using 1-based indexing, rather than the usual 0. |
+ // A numbered argument must NOT set field GqlQueryArg.name. |
+ // For each binding site numbered i in query_string, |
+ // there must be an ith numbered argument. |
+ // The inverse must also be true. |
+ repeated GqlQueryArg number_arg = 4; |
+} |
+ |
+// A binding argument for a GQL query. |
+// Exactly one of fields value and cursor must be set. |
+message GqlQueryArg { |
+ // Must match regex "[A-Za-z_$][A-Za-z_$0-9]*". |
+ // Must not match regex "__.*__". |
+ // Must not be "". |
+ optional string name = 1; |
+ optional Value value = 2; |
+ optional bytes cursor = 3; |
+} |
+ |
+// A batch of results produced by a query. |
+message QueryResultBatch { |
+ // The possible values for the 'more_results' field. |
+ enum MoreResultsType { |
+ NOT_FINISHED = 1; // There are additional batches to fetch from this query. |
+ MORE_RESULTS_AFTER_LIMIT = 2; // The query is finished, but there are more |
+ // results after the limit. |
+ NO_MORE_RESULTS = 3; // The query has been exhausted. |
+ } |
+ |
+ // The result type for every entity in entityResults. |
+ required EntityResult.ResultType entity_result_type = 1; |
+ // The results for this batch. |
+ repeated EntityResult entity_result = 2; |
+ |
+ // A cursor that points to the position after the last result in the batch. |
+ // May be absent. |
+ optional bytes /* serialized QueryCursor */ end_cursor = 4; |
+ |
+ // The state of the query after the current batch. |
+ required MoreResultsType more_results = 5; |
+ |
+ // The number of results skipped because of <code>Query.offset</code>. |
+ optional int32 skipped_results = 6; |
+} |
+ |
+// A set of changes to apply. |
+// |
+// No entity in this message may have a reserved property name, |
+// not even a property in an entity in a value. |
+// No value in this message may have meaning 18, |
+// not even a value in an entity in another value. |
+// |
+// If entities with duplicate keys are present, an arbitrary choice will |
+// be made as to which is written. |
+message Mutation { |
+ // Entities to upsert. |
+ // Each upserted entity's key must have a complete path and |
+ // must not be reserved/read-only. |
+ repeated Entity upsert = 1; |
+ // Entities to update. |
+ // Each updated entity's key must have a complete path and |
+ // must not be reserved/read-only. |
+ repeated Entity update = 2; |
+ // Entities to insert. |
+ // Each inserted entity's key must have a complete path and |
+ // must not be reserved/read-only. |
+ repeated Entity insert = 3; |
+ // Insert entities with a newly allocated ID. |
+ // Each inserted entity's key must omit the final identifier in its path and |
+ // must not be reserved/read-only. |
+ repeated Entity insert_auto_id = 4; |
+ // Keys of entities to delete. |
+ // Each key must have a complete key path and must not be reserved/read-only. |
+ repeated Key delete = 5; |
+ // Ignore a user specified read-only period. Optional. |
+ optional bool force = 6; |
+} |
+ |
+// The result of applying a mutation. |
+message MutationResult { |
+ // Number of index writes. |
+ required int32 index_updates = 1; |
+ // Keys for <code>insertAutoId</code> entities. One per entity from the |
+ // request, in the same order. |
+ repeated Key insert_auto_id_key = 2; |
+} |
+ |
+// Options shared by read requests. |
+message ReadOptions { |
+ enum ReadConsistency { |
+ DEFAULT = 0; |
+ STRONG = 1; |
+ EVENTUAL = 2; |
+ } |
+ |
+ // The read consistency to use. |
+ // Cannot be set when transaction is set. |
+ // Lookup and ancestor queries default to STRONG, global queries default to |
+ // EVENTUAL and cannot be set to STRONG. |
+ optional ReadConsistency read_consistency = 1 [default=DEFAULT]; |
+ |
+ // The transaction to use. Optional. |
+ optional bytes /* serialized Transaction */ transaction = 2; |
+} |
+ |
+// The request for Lookup. |
+message LookupRequest { |
+ |
+ // Options for this lookup request. Optional. |
+ optional ReadOptions read_options = 1; |
+ // Keys of entities to look up from the datastore. |
+ repeated Key key = 3; |
+} |
+ |
+// The response for Lookup. |
+message LookupResponse { |
+ |
+ // The order of results in these fields is undefined and has no relation to |
+ // the order of the keys in the input. |
+ |
+ // Entities found as ResultType.FULL entities. |
+ repeated EntityResult found = 1; |
+ |
+ // Entities not found as ResultType.KEY_ONLY entities. |
+ repeated EntityResult missing = 2; |
+ |
+ // A list of keys that were not looked up due to resource constraints. |
+ repeated Key deferred = 3; |
+} |
+ |
+ |
+// The request for RunQuery. |
+message RunQueryRequest { |
+ |
+ // The options for this query. |
+ optional ReadOptions read_options = 1; |
+ |
+ // Entities are partitioned into subsets, identified by a dataset (usually |
+ // implicitly specified by the project) and namespace ID. Queries are scoped |
+ // to a single partition. |
+ // This partition ID is normalized with the standard default context |
+ // partition ID, but all other partition IDs in RunQueryRequest are |
+ // normalized with this partition ID as the context partition ID. |
+ optional PartitionId partition_id = 2; |
+ |
+ // The query to run. |
+ // Either this field or field gql_query must be set, but not both. |
+ optional Query query = 3; |
+ // The GQL query to run. |
+ // Either this field or field query must be set, but not both. |
+ optional GqlQuery gql_query = 7; |
+} |
+ |
+// The response for RunQuery. |
+message RunQueryResponse { |
+ |
+ // A batch of query results (always present). |
+ optional QueryResultBatch batch = 1; |
+ |
+} |
+ |
+// The request for BeginTransaction. |
+message BeginTransactionRequest { |
+ |
+ enum IsolationLevel { |
+ SNAPSHOT = 0; // Read from a consistent snapshot. Concurrent transactions |
+ // conflict if their mutations conflict. For example: |
+ // Read(A),Write(B) may not conflict with Read(B),Write(A), |
+ // but Read(B),Write(B) does conflict with Read(B),Write(B). |
+ SERIALIZABLE = 1; // Read from a consistent snapshot. Concurrent |
+ // transactions conflict if they cannot be serialized. |
+ // For example Read(A),Write(B) does conflict with |
+ // Read(B),Write(A) but Read(A) may not conflict with |
+ // Write(A). |
+ } |
+ |
+ // The transaction isolation level. |
+ optional IsolationLevel isolation_level = 1 [default=SNAPSHOT]; |
+} |
+ |
+// The response for BeginTransaction. |
+message BeginTransactionResponse { |
+ |
+ // The transaction identifier (always present). |
+ optional bytes /* serialized Transaction */ transaction = 1; |
+} |
+ |
+// The request for Rollback. |
+message RollbackRequest { |
+ |
+ // The transaction identifier, returned by a call to |
+ // <code>beginTransaction</code>. |
+ required bytes /* serialized Transaction */ transaction = 1; |
+} |
+ |
+// The response for Rollback. |
+message RollbackResponse { |
+// Empty |
+} |
+ |
+// The request for Commit. |
+message CommitRequest { |
+ |
+ enum Mode { |
+ TRANSACTIONAL = 1; |
+ NON_TRANSACTIONAL = 2; |
+ } |
+ |
+ // The transaction identifier, returned by a call to |
+ // <code>beginTransaction</code>. Must be set when mode is TRANSACTIONAL. |
+ optional bytes /* serialized Transaction */ transaction = 1; |
+ // The mutation to perform. Optional. |
+ optional Mutation mutation = 2; |
+ // The type of commit to perform. Either TRANSACTIONAL or NON_TRANSACTIONAL. |
+ optional Mode mode = 5 [default=TRANSACTIONAL]; |
+} |
+ |
+// The response for Commit. |
+message CommitResponse { |
+ |
+ // The result of performing the mutation (if any). |
+ optional MutationResult mutation_result = 1; |
+} |
+ |
+// The request for AllocateIds. |
+message AllocateIdsRequest { |
+ |
+ // A list of keys with incomplete key paths to allocate IDs for. |
+ // No key may be reserved/read-only. |
+ repeated Key key = 1; |
+} |
+ |
+// The response for AllocateIds. |
+message AllocateIdsResponse { |
+ |
+ // The keys specified in the request (in the same order), each with |
+ // its key path completed with a newly allocated ID. |
+ repeated Key key = 1; |
+} |
+ |
+// Each rpc normalizes the partition IDs of the keys in its input entities, |
+// and always returns entities with keys with normalized partition IDs. |
+// (Note that applies to all entities, including entities in values.) |
+service DatastoreService { |
+ // Look up some entities by key. |
+ rpc Lookup(LookupRequest) returns (LookupResponse) { |
+ }; |
+ // Query for entities. |
+ rpc RunQuery(RunQueryRequest) returns (RunQueryResponse) { |
+ }; |
+ // Begin a new transaction. |
+ rpc BeginTransaction(BeginTransactionRequest) returns (BeginTransactionResponse) { |
+ }; |
+ // Commit a transaction, optionally creating, deleting or modifying some |
+ // entities. |
+ rpc Commit(CommitRequest) returns (CommitResponse) { |
+ }; |
+ // Roll back a transaction. |
+ rpc Rollback(RollbackRequest) returns (RollbackResponse) { |
+ }; |
+ // Allocate IDs for incomplete keys (useful for referencing an entity before |
+ // it is inserted). |
+ rpc AllocateIds(AllocateIdsRequest) returns (AllocateIdsResponse) { |
+ }; |
+} |