blob: 497b4d9a9af51b2bf31ce2a11cc145e4f09d272a [file] [log] [blame]
Zack Williamse940c7a2019-08-21 14:25:39 -07001syntax = "proto2";
2option go_package = "datastore";
3
4package appengine;
5
6message Action{}
7
8message PropertyValue {
9 optional int64 int64Value = 1;
10 optional bool booleanValue = 2;
11 optional string stringValue = 3;
12 optional double doubleValue = 4;
13
14 optional group PointValue = 5 {
15 required double x = 6;
16 required double y = 7;
17 }
18
19 optional group UserValue = 8 {
20 required string email = 9;
21 required string auth_domain = 10;
22 optional string nickname = 11;
23 optional string federated_identity = 21;
24 optional string federated_provider = 22;
25 }
26
27 optional group ReferenceValue = 12 {
28 required string app = 13;
29 optional string name_space = 20;
30 repeated group PathElement = 14 {
31 required string type = 15;
32 optional int64 id = 16;
33 optional string name = 17;
34 }
35 }
36}
37
38message Property {
39 enum Meaning {
40 NO_MEANING = 0;
41 BLOB = 14;
42 TEXT = 15;
43 BYTESTRING = 16;
44
45 ATOM_CATEGORY = 1;
46 ATOM_LINK = 2;
47 ATOM_TITLE = 3;
48 ATOM_CONTENT = 4;
49 ATOM_SUMMARY = 5;
50 ATOM_AUTHOR = 6;
51
52 GD_WHEN = 7;
53 GD_EMAIL = 8;
54 GEORSS_POINT = 9;
55 GD_IM = 10;
56
57 GD_PHONENUMBER = 11;
58 GD_POSTALADDRESS = 12;
59
60 GD_RATING = 13;
61
62 BLOBKEY = 17;
63 ENTITY_PROTO = 19;
64
65 INDEX_VALUE = 18;
66 };
67
68 optional Meaning meaning = 1 [default = NO_MEANING];
69 optional string meaning_uri = 2;
70
71 required string name = 3;
72
73 required PropertyValue value = 5;
74
75 required bool multiple = 4;
76
77 optional bool searchable = 6 [default=false];
78
79 enum FtsTokenizationOption {
80 HTML = 1;
81 ATOM = 2;
82 }
83
84 optional FtsTokenizationOption fts_tokenization_option = 8;
85
86 optional string locale = 9 [default = "en"];
87}
88
89message Path {
90 repeated group Element = 1 {
91 required string type = 2;
92 optional int64 id = 3;
93 optional string name = 4;
94 }
95}
96
97message Reference {
98 required string app = 13;
99 optional string name_space = 20;
100 required Path path = 14;
101}
102
103message User {
104 required string email = 1;
105 required string auth_domain = 2;
106 optional string nickname = 3;
107 optional string federated_identity = 6;
108 optional string federated_provider = 7;
109}
110
111message EntityProto {
112 required Reference key = 13;
113 required Path entity_group = 16;
114 optional User owner = 17;
115
116 enum Kind {
117 GD_CONTACT = 1;
118 GD_EVENT = 2;
119 GD_MESSAGE = 3;
120 }
121 optional Kind kind = 4;
122 optional string kind_uri = 5;
123
124 repeated Property property = 14;
125 repeated Property raw_property = 15;
126
127 optional int32 rank = 18;
128}
129
130message CompositeProperty {
131 required int64 index_id = 1;
132 repeated string value = 2;
133}
134
135message Index {
136 required string entity_type = 1;
137 required bool ancestor = 5;
138 repeated group Property = 2 {
139 required string name = 3;
140 enum Direction {
141 ASCENDING = 1;
142 DESCENDING = 2;
143 }
144 optional Direction direction = 4 [default = ASCENDING];
145 }
146}
147
148message CompositeIndex {
149 required string app_id = 1;
150 required int64 id = 2;
151 required Index definition = 3;
152
153 enum State {
154 WRITE_ONLY = 1;
155 READ_WRITE = 2;
156 DELETED = 3;
157 ERROR = 4;
158 }
159 required State state = 4;
160
161 optional bool only_use_if_required = 6 [default = false];
162}
163
164message IndexPostfix {
165 message IndexValue {
166 required string property_name = 1;
167 required PropertyValue value = 2;
168 }
169
170 repeated IndexValue index_value = 1;
171
172 optional Reference key = 2;
173
174 optional bool before = 3 [default=true];
175}
176
177message IndexPosition {
178 optional string key = 1;
179
180 optional bool before = 2 [default=true];
181}
182
183message Snapshot {
184 enum Status {
185 INACTIVE = 0;
186 ACTIVE = 1;
187 }
188
189 required int64 ts = 1;
190}
191
192message InternalHeader {
193 optional string qos = 1;
194}
195
196message Transaction {
197 optional InternalHeader header = 4;
198 required fixed64 handle = 1;
199 required string app = 2;
200 optional bool mark_changes = 3 [default = false];
201}
202
203message Query {
204 optional InternalHeader header = 39;
205
206 required string app = 1;
207 optional string name_space = 29;
208
209 optional string kind = 3;
210 optional Reference ancestor = 17;
211
212 repeated group Filter = 4 {
213 enum Operator {
214 LESS_THAN = 1;
215 LESS_THAN_OR_EQUAL = 2;
216 GREATER_THAN = 3;
217 GREATER_THAN_OR_EQUAL = 4;
218 EQUAL = 5;
219 IN = 6;
220 EXISTS = 7;
221 }
222
223 required Operator op = 6;
224 repeated Property property = 14;
225 }
226
227 optional string search_query = 8;
228
229 repeated group Order = 9 {
230 enum Direction {
231 ASCENDING = 1;
232 DESCENDING = 2;
233 }
234
235 required string property = 10;
236 optional Direction direction = 11 [default = ASCENDING];
237 }
238
239 enum Hint {
240 ORDER_FIRST = 1;
241 ANCESTOR_FIRST = 2;
242 FILTER_FIRST = 3;
243 }
244 optional Hint hint = 18;
245
246 optional int32 count = 23;
247
248 optional int32 offset = 12 [default = 0];
249
250 optional int32 limit = 16;
251
252 optional CompiledCursor compiled_cursor = 30;
253 optional CompiledCursor end_compiled_cursor = 31;
254
255 repeated CompositeIndex composite_index = 19;
256
257 optional bool require_perfect_plan = 20 [default = false];
258
259 optional bool keys_only = 21 [default = false];
260
261 optional Transaction transaction = 22;
262
263 optional bool compile = 25 [default = false];
264
265 optional int64 failover_ms = 26;
266
267 optional bool strong = 32;
268
269 repeated string property_name = 33;
270
271 repeated string group_by_property_name = 34;
272
273 optional bool distinct = 24;
274
275 optional int64 min_safe_time_seconds = 35;
276
277 repeated string safe_replica_name = 36;
278
279 optional bool persist_offset = 37 [default=false];
280}
281
282message CompiledQuery {
283 required group PrimaryScan = 1 {
284 optional string index_name = 2;
285
286 optional string start_key = 3;
287 optional bool start_inclusive = 4;
288 optional string end_key = 5;
289 optional bool end_inclusive = 6;
290
291 repeated string start_postfix_value = 22;
292 repeated string end_postfix_value = 23;
293
294 optional int64 end_unapplied_log_timestamp_us = 19;
295 }
296
297 repeated group MergeJoinScan = 7 {
298 required string index_name = 8;
299
300 repeated string prefix_value = 9;
301
302 optional bool value_prefix = 20 [default=false];
303 }
304
305 optional Index index_def = 21;
306
307 optional int32 offset = 10 [default = 0];
308
309 optional int32 limit = 11;
310
311 required bool keys_only = 12;
312
313 repeated string property_name = 24;
314
315 optional int32 distinct_infix_size = 25;
316
317 optional group EntityFilter = 13 {
318 optional bool distinct = 14 [default=false];
319
320 optional string kind = 17;
321 optional Reference ancestor = 18;
322 }
323}
324
325message CompiledCursor {
326 optional group Position = 2 {
327 optional string start_key = 27;
328
329 repeated group IndexValue = 29 {
330 optional string property = 30;
331 required PropertyValue value = 31;
332 }
333
334 optional Reference key = 32;
335
336 optional bool start_inclusive = 28 [default=true];
337 }
338}
339
340message Cursor {
341 required fixed64 cursor = 1;
342
343 optional string app = 2;
344}
345
346message Error {
347 enum ErrorCode {
348 BAD_REQUEST = 1;
349 CONCURRENT_TRANSACTION = 2;
350 INTERNAL_ERROR = 3;
351 NEED_INDEX = 4;
352 TIMEOUT = 5;
353 PERMISSION_DENIED = 6;
354 BIGTABLE_ERROR = 7;
355 COMMITTED_BUT_STILL_APPLYING = 8;
356 CAPABILITY_DISABLED = 9;
357 TRY_ALTERNATE_BACKEND = 10;
358 SAFE_TIME_TOO_OLD = 11;
359 }
360}
361
362message Cost {
363 optional int32 index_writes = 1;
364 optional int32 index_write_bytes = 2;
365 optional int32 entity_writes = 3;
366 optional int32 entity_write_bytes = 4;
367 optional group CommitCost = 5 {
368 optional int32 requested_entity_puts = 6;
369 optional int32 requested_entity_deletes = 7;
370 };
371 optional int32 approximate_storage_delta = 8;
372 optional int32 id_sequence_updates = 9;
373}
374
375message GetRequest {
376 optional InternalHeader header = 6;
377
378 repeated Reference key = 1;
379 optional Transaction transaction = 2;
380
381 optional int64 failover_ms = 3;
382
383 optional bool strong = 4;
384
385 optional bool allow_deferred = 5 [default=false];
386}
387
388message GetResponse {
389 repeated group Entity = 1 {
390 optional EntityProto entity = 2;
391 optional Reference key = 4;
392
393 optional int64 version = 3;
394 }
395
396 repeated Reference deferred = 5;
397
398 optional bool in_order = 6 [default=true];
399}
400
401message PutRequest {
402 optional InternalHeader header = 11;
403
404 repeated EntityProto entity = 1;
405 optional Transaction transaction = 2;
406 repeated CompositeIndex composite_index = 3;
407
408 optional bool trusted = 4 [default = false];
409
410 optional bool force = 7 [default = false];
411
412 optional bool mark_changes = 8 [default = false];
413 repeated Snapshot snapshot = 9;
414
415 enum AutoIdPolicy {
416 CURRENT = 0;
417 SEQUENTIAL = 1;
418 }
419 optional AutoIdPolicy auto_id_policy = 10 [default = CURRENT];
420}
421
422message PutResponse {
423 repeated Reference key = 1;
424 optional Cost cost = 2;
425 repeated int64 version = 3;
426}
427
428message TouchRequest {
429 optional InternalHeader header = 10;
430
431 repeated Reference key = 1;
432 repeated CompositeIndex composite_index = 2;
433 optional bool force = 3 [default = false];
434 repeated Snapshot snapshot = 9;
435}
436
437message TouchResponse {
438 optional Cost cost = 1;
439}
440
441message DeleteRequest {
442 optional InternalHeader header = 10;
443
444 repeated Reference key = 6;
445 optional Transaction transaction = 5;
446
447 optional bool trusted = 4 [default = false];
448
449 optional bool force = 7 [default = false];
450
451 optional bool mark_changes = 8 [default = false];
452 repeated Snapshot snapshot = 9;
453}
454
455message DeleteResponse {
456 optional Cost cost = 1;
457 repeated int64 version = 3;
458}
459
460message NextRequest {
461 optional InternalHeader header = 5;
462
463 required Cursor cursor = 1;
464 optional int32 count = 2;
465
466 optional int32 offset = 4 [default = 0];
467
468 optional bool compile = 3 [default = false];
469}
470
471message QueryResult {
472 optional Cursor cursor = 1;
473
474 repeated EntityProto result = 2;
475
476 optional int32 skipped_results = 7;
477
478 required bool more_results = 3;
479
480 optional bool keys_only = 4;
481
482 optional bool index_only = 9;
483
484 optional bool small_ops = 10;
485
486 optional CompiledQuery compiled_query = 5;
487
488 optional CompiledCursor compiled_cursor = 6;
489
490 repeated CompositeIndex index = 8;
491
492 repeated int64 version = 11;
493}
494
495message AllocateIdsRequest {
496 optional InternalHeader header = 4;
497
498 optional Reference model_key = 1;
499
500 optional int64 size = 2;
501
502 optional int64 max = 3;
503
504 repeated Reference reserve = 5;
505}
506
507message AllocateIdsResponse {
508 required int64 start = 1;
509 required int64 end = 2;
510 optional Cost cost = 3;
511}
512
513message CompositeIndices {
514 repeated CompositeIndex index = 1;
515}
516
517message AddActionsRequest {
518 optional InternalHeader header = 3;
519
520 required Transaction transaction = 1;
521 repeated Action action = 2;
522}
523
524message AddActionsResponse {
525}
526
527message BeginTransactionRequest {
528 optional InternalHeader header = 3;
529
530 required string app = 1;
531 optional bool allow_multiple_eg = 2 [default = false];
532 optional string database_id = 4;
533
534 enum TransactionMode {
535 UNKNOWN = 0;
536 READ_ONLY = 1;
537 READ_WRITE = 2;
538 }
539 optional TransactionMode mode = 5 [default = UNKNOWN];
540
541 optional Transaction previous_transaction = 7;
542}
543
544message CommitResponse {
545 optional Cost cost = 1;
546
547 repeated group Version = 3 {
548 required Reference root_entity_key = 4;
549 required int64 version = 5;
550 }
551}