From 7fc6cc0352cda3ae3311da8ab3187f4cdc0e4a86 Mon Sep 17 00:00:00 2001 From: Ajay Kannan Date: Tue, 9 Feb 2016 10:34:03 -0800 Subject: [PATCH 01/73] Initial commit for datastore concepts snippets and getting started sample app. --- .../google/datastore/snippets/Concepts.java | 1058 +++++++++++++++++ .../google/datastore/snippets/TaskList.java | 232 ++++ 2 files changed, 1290 insertions(+) create mode 100644 samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java create mode 100644 samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java diff --git a/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java b/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java new file mode 100644 index 000000000..ae38b0070 --- /dev/null +++ b/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java @@ -0,0 +1,1058 @@ +/* + * Copyright 2016 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.datastore.snippets; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import com.google.common.collect.HashMultimap; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Iterators; +import com.google.common.collect.Multimap; +import com.google.gcloud.datastore.Batch; +import com.google.gcloud.datastore.Cursor; +import com.google.gcloud.datastore.Datastore; +import com.google.gcloud.datastore.DatastoreException; +import com.google.gcloud.datastore.DatastoreOptions; +import com.google.gcloud.datastore.DateTime; +import com.google.gcloud.datastore.Entity; +import com.google.gcloud.datastore.EntityQuery; +import com.google.gcloud.datastore.FullEntity; +import com.google.gcloud.datastore.IncompleteKey; +import com.google.gcloud.datastore.Key; +import com.google.gcloud.datastore.KeyFactory; +import com.google.gcloud.datastore.PathElement; +import com.google.gcloud.datastore.ProjectionEntity; +import com.google.gcloud.datastore.Query; +import com.google.gcloud.datastore.Query.ResultType; +import com.google.gcloud.datastore.QueryResults; +import com.google.gcloud.datastore.StringValue; +import com.google.gcloud.datastore.StructuredQuery; +import com.google.gcloud.datastore.StructuredQuery.CompositeFilter; +import com.google.gcloud.datastore.StructuredQuery.OrderBy; +import com.google.gcloud.datastore.StructuredQuery.PropertyFilter; +import com.google.gcloud.datastore.Transaction; +import com.google.gcloud.datastore.Value; +import com.google.gcloud.datastore.testing.LocalGcdHelper; + +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.TimeZone; + +/** + * Contains Cloud Datastore snippets linked from the Concepts documentation. + * + * @see Key Datastore Concepts + */ +public class Concepts { + + private static final String PROJECT_ID = LocalGcdHelper.DEFAULT_PROJECT_ID; + private static LocalGcdHelper gcdHelper; + private static final int PORT = LocalGcdHelper.findAvailablePort(LocalGcdHelper.DEFAULT_PORT); + private static final FullEntity TEST_FULL_ENTITY = FullEntity.builder().build(); + + private Datastore datastore; + private KeyFactory keyFactory; + private Key taskKey; + private Entity testEntity; + private DateTime startDate; + private DateTime endDate; + private DateTime includedDate; + + @Rule + public ExpectedException thrown = ExpectedException.none(); + + /** + * Starts the local Datastore emulator. + * + * @throws IOException if there are errors starting the local Datastore + * @throws InterruptedException if there are errors starting the local Datastore + */ + @BeforeClass + public static void beforeClass() throws IOException, InterruptedException { + if (!LocalGcdHelper.isActive(PROJECT_ID, PORT)) { + gcdHelper = LocalGcdHelper.start(PROJECT_ID, PORT); + } + } + + /** + * Initializes Datastore and cleans out any residual values. Also initializes global variables + * used for testing. + */ + @Before + public void setUp() { + datastore = DatastoreOptions.builder() + .projectId(PROJECT_ID) + .namespace("ghijklmnop") // for namespace metadata query + .host("http://localhost:" + PORT) + .build() + .service(); + StructuredQuery query = Query.keyQueryBuilder().build(); + QueryResults result = datastore.run(query); + datastore.delete(Iterators.toArray(result, Key.class)); + keyFactory = datastore.newKeyFactory().kind("Task"); + taskKey = keyFactory.newKey("some-arbitrary-key"); + testEntity = Entity.builder(taskKey, TEST_FULL_ENTITY).build(); + Calendar startDateCalendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")); + startDateCalendar.set(1990, 1, 1); + startDate = DateTime.copyFrom(startDateCalendar); + Calendar endDateCalendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")); + endDateCalendar.set(2000, 1, 1); + endDate = DateTime.copyFrom(endDateCalendar); + Calendar includedCalendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")); + includedCalendar.set(1999, 12, 31); + includedDate = DateTime.copyFrom(includedCalendar); + } + + /** + * Stops the local Datastore emulator. + * + * @throws IOException if there are errors stopping the local Datastore + * @throws InterruptedException if there are errors stopping the local Datastore + */ + @AfterClass + public static void afterClass() throws IOException, InterruptedException { + if (gcdHelper != null) { + gcdHelper.stop(); + } + } + + private void assertValidKey(Key taskKey) { + datastore.put(Entity.builder(taskKey, TEST_FULL_ENTITY).build()); + } + + @Test + public void testIncompleteKey() { + // [START incomplete_key] + KeyFactory keyFactory = datastore.newKeyFactory().kind("Task"); + Key taskKey = datastore.allocateId(keyFactory.newKey()); + // [END incomplete_key] + assertValidKey(taskKey); + } + + @Test + public void testNamedKey() { + // [START named_key] + KeyFactory keyFactory = datastore.newKeyFactory().kind("Task"); + Key taskKey = keyFactory.newKey("sampleTask"); + // [END named_key] + assertValidKey(taskKey); + } + + @Test + public void testKeyWithParent() { + // [START key_with_parent] + KeyFactory keyFactory = + datastore.newKeyFactory().ancestors(PathElement.of("TaskList", "default")).kind("Task"); + Key taskKey = keyFactory.newKey("sampleTask"); + // [END key_with_parent] + assertValidKey(taskKey); + } + + @Test + public void testKeyWithMultilevelParent() { + // [START key_with_multilevel_parent] + KeyFactory keyFactory = datastore.newKeyFactory() + .ancestors(PathElement.of("User", "Alice"), PathElement.of("TaskList", "default")) + .kind("Task"); + Key taskKey = keyFactory.newKey("sampleTask"); + // [END key_with_multilevel_parent] + assertValidKey(taskKey); + } + + private void assertValidEntity(Entity original) { + datastore.put(original); + assertEquals(original, datastore.get(original.key())); + } + + @Test + public void testEntityWithParent() { + // [START entity_with_parent] + KeyFactory keyFactory = + datastore.newKeyFactory().ancestors(PathElement.of("TaskList", "default")).kind("Task"); + Entity task = Entity.builder(keyFactory.newKey("sampleTask")) + .set("type", "Personal") + .set("done", false) + .set("priority", 4) + .set("description", "Learn Cloud Datastore") + .build(); + // [END entity_with_parent] + assertValidEntity(task); + } + + @Test + public void testProperties() { + // [START properties] + Entity task = Entity.builder(taskKey) + .set("type", "Personal") + .set("created", DateTime.now()) + .set("done", false) + .set("priority", 4) + .set("percent_complete", 10.0) + .set("description", "Learn Cloud Datastore") + .build(); + // [END properties] + assertValidEntity(task); + } + + @Test + public void testArrayValue() { + // [START array_value] + Entity task = Entity.builder(taskKey) + .set("tags", StringValue.of("fun"), StringValue.of("programming")) + .set("collaborators", StringValue.of("alice"), StringValue.of("bob")) + .build(); + // [END array_value] + assertValidEntity(task); + } + + @Test + public void testBasicEntity() { + // [START basic_entity] + Entity task = Entity.builder(taskKey) + .set("type", "Personal") + .set("done", false) + .set("priority", 4) + .set("description", "Learn Cloud Datastore") + .build(); + // [END basic_entity] + assertValidEntity(task); + } + + @Test + public void testUpsert() { + // [START upsert] + Key taskKey = datastore.allocateId(keyFactory.newKey()); + Entity task = Entity.builder(taskKey).build(); + datastore.put(task); + // [END upsert] + assertEquals(task, datastore.get(task.key())); + } + + @Test + public void testInsert() { + // [START insert] + Entity task = Entity.builder(taskKey).build(); + Key taskKey = datastore.add(task).key(); + // [END insert] + assertEquals(task, datastore.get(taskKey)); + } + + @Test + public void testLookup() { + datastore.put(testEntity); + // [START lookup] + Entity task = datastore.get(taskKey); + // [END lookup] + assertEquals(testEntity, task); + } + + @Test + public void testUpdate() { + datastore.put(testEntity); + // [START update] + Entity task = Entity.builder(datastore.get(taskKey)).set("priority", 5).build(); + datastore.update(task); + // [END update] + assertEquals(task, datastore.get(taskKey)); + } + + @Test + public void testDelete() { + datastore.put(testEntity); + // [START delete] + datastore.delete(taskKey); + // [END delete] + assertNull(datastore.get(taskKey)); + } + + private List setUpBatchTests(Key taskKey1, Key taskKey2) { + Entity task1 = Entity.builder(taskKey1) + .set("type", "Personal") + .set("done", false) + .set("priority", 4) + .set("description", "Learn Cloud Datastore") + .build(); + Entity task2 = Entity.builder(taskKey2) + .set("type", "Personal") + .set("done", false) + .set("priority", 5) + .set("description", "Integrate Cloud Datastore") + .build(); + datastore.put(task1, task2); + return ImmutableList.of(task1, task2); + } + + @Test + public void testBatchUpsert() { + Key taskKey1 = keyFactory.newKey(1); + Key taskKey2 = keyFactory.newKey(2); + Entity task1 = Entity.builder(taskKey1) + .set("type", "Personal") + .set("done", false) + .set("priority", 4) + .set("description", "Learn Cloud Datastore") + .build(); + Entity task2 = Entity.builder(taskKey2) + .set("type", "Personal") + .set("done", false) + .set("priority", 5) + .set("description", "Integrate Cloud Datastore") + .build(); + // [START batch_upsert] + Batch batch = datastore.newBatch(); + batch.put(task1, task2); + batch.submit(); + // [END batch_upsert] + assertEquals(task1, datastore.get(taskKey1)); + assertEquals(task2, datastore.get(taskKey2)); + } + + @Test + public void testBatchLookup() { + Key taskKey1 = keyFactory.newKey(1); + Key taskKey2 = keyFactory.newKey(2); + List expectedTasks = setUpBatchTests(taskKey1, taskKey2); + // [START batch_lookup] + Iterator tasks = datastore.get(taskKey1, taskKey2); + // [END batch_lookup] + assertEquals(expectedTasks.get(0), tasks.next()); + assertEquals(expectedTasks.get(1), tasks.next()); + } + + @Test + public void testBatchDelete() { + Key taskKey1 = keyFactory.newKey(1); + Key taskKey2 = keyFactory.newKey(2); + setUpBatchTests(taskKey1, taskKey2); + // [START batch_delete] + Batch batch = datastore.newBatch(); + batch.delete(taskKey1, taskKey2); + batch.submit(); + // [END batch_delete] + assertNull(datastore.get(taskKey1)); + assertNull(datastore.get(taskKey2)); + } + + private void setUpQueryTests() { + KeyFactory keyFactory = + datastore.newKeyFactory().kind("Task").ancestors(PathElement.of("TaskList", "default")); + datastore.put(Entity.builder(keyFactory.newKey("someTask")) + .set("type", "Personal") + .set("done", false) + .set("completed", false) + .set("priority", 4) + .set("created", includedDate) + .set("percent_complete", 10.0) + .set("description", StringValue.builder("Learn Cloud Datastore").indexed(false).build()) + .set("tag", ImmutableList.of(StringValue.of("fun"), StringValue.of("l"), + StringValue.of("programming"))) + .build()); + } + + private V assertValidQuery(Query query) { + QueryResults results = datastore.run(query); + V result = results.next(); + assertFalse(results.hasNext()); + return result; + } + + private void assertInvalidQuery(Query query) { + thrown.expect(DatastoreException.class); + datastore.run(query); + } + + @Test + public void testBasicQuery() { + setUpQueryTests(); + // [START basic_query] + Query query = Query.entityQueryBuilder() + .kind("Task") + .filter(CompositeFilter.and( + PropertyFilter.eq("done", false), PropertyFilter.ge("priority", 4))) + .orderBy(OrderBy.desc("priority")) + .build(); + // [END basic_query] + assertValidQuery(query); + } + + @Test + public void testRunQuery() { + setUpQueryTests(); + Query query = Query.entityQueryBuilder().kind("Task").build(); + // [START run_query] + QueryResults tasks = datastore.run(query); + // [END run_query] + assertNotNull(tasks.next()); + assertFalse(tasks.hasNext()); + } + + @Test + public void testPropertyFilter() { + setUpQueryTests(); + // [START property_filter] + Query query = + Query.entityQueryBuilder().kind("Task").filter(PropertyFilter.eq("done", false)).build(); + // [END property_filter] + assertValidQuery(query); + } + + @Test + public void testCompositeFilter() { + setUpQueryTests(); + // [START composite_filter] + Query query = Query.entityQueryBuilder() + .kind("Task") + .filter( + CompositeFilter.and(PropertyFilter.eq("done", false), PropertyFilter.eq("priority", 4))) + .build(); + // [END composite_filter] + assertValidQuery(query); + } + + @Test + public void testKeyFilter() { + setUpQueryTests(); + // [START key_filter] + Query query = Query.entityQueryBuilder() + .kind("Task") + .filter(PropertyFilter.gt("__key__", keyFactory.newKey("someTask"))) + .build(); + // [END key_filter] + assertValidQuery(query); + } + + @Test + public void testAscendingSort() { + setUpQueryTests(); + // [START ascending_sort] + Query query = + Query.entityQueryBuilder().kind("Task").orderBy(OrderBy.asc("created")).build(); + // [END ascending_sort] + assertValidQuery(query); + } + + @Test + public void testDescendingSort() { + setUpQueryTests(); + // [START descending_sort] + Query query = + Query.entityQueryBuilder().kind("Task").orderBy(OrderBy.desc("created")).build(); + // [END descending_sort] + assertValidQuery(query); + } + + @Test + public void testMultiSort() { + setUpQueryTests(); + // [START multi_sort] + Query query = Query.entityQueryBuilder() + .kind("Task") + .orderBy(OrderBy.desc("priority"), OrderBy.asc("created")) + .build(); + // [END multi_sort] + assertValidQuery(query); + } + + @Test + public void testKindlessQuery() { + Key lastSeenKey = keyFactory.newKey("a"); + setUpQueryTests(); + // [START kindless_query] + Query query = + Query.entityQueryBuilder().filter(PropertyFilter.gt("__key__", lastSeenKey)).build(); + // [END kindless_query] + assertValidQuery(query); + } + + @Test + public void testAncestorQuery() { + setUpQueryTests(); + // [START ancestor_query] + Query query = Query.entityQueryBuilder() + .kind("Task") + .filter(PropertyFilter.hasAncestor( + datastore.newKeyFactory().kind("TaskList").newKey("default"))) + .build(); + // [END ancestor_query] + assertValidQuery(query); + } + + @Test + public void testProjectionQuery() { + setUpQueryTests(); + // [START projection_query] + Query query = Query.projectionEntityQueryBuilder() + .kind("Task") + .projection( + StructuredQuery.Projection.property("priority"), + StructuredQuery.Projection.property("percent_complete")) + .build(); + // [END projection_query] + assertValidQuery(query); + } + + @Test + public void testRunProjectionQuery() { + setUpQueryTests(); + Query query = Query.projectionEntityQueryBuilder() + .kind("Task") + .projection( + StructuredQuery.Projection.property("priority"), + StructuredQuery.Projection.property("percent_complete")) + .build(); + List priorities = new LinkedList<>(); + List percentCompletes = new LinkedList<>(); + // [START run_query_projection] + QueryResults tasks = datastore.run(query); + while (tasks.hasNext()) { + ProjectionEntity task = tasks.next(); + priorities.add(task.getLong("priority")); + percentCompletes.add(task.getDouble("percent_complete")); + } + // [END run_query_projection] + assertEquals(ImmutableList.of(4L), priorities); + assertEquals(ImmutableList.of(10.0), percentCompletes); + } + + @Test + public void testKeysOnlyQuery() { + setUpQueryTests(); + // [START keys_only_query] + Query query = Query.keyQueryBuilder().kind("Task").build(); + // [END keys_only_query] + assertValidQuery(query); + } + + @Test + public void testRunKeysOnlyQuery() { + setUpQueryTests(); + Query query = Query.keyQueryBuilder().kind("Task").build(); + // [START run_keys_only_query] + QueryResults taskKeys = datastore.run(query); + // [END run_keys_only_query] + assertNotNull(taskKeys.next()); + assertFalse(taskKeys.hasNext()); + } + + @Test + public void testDistinctQuery() { + setUpQueryTests(); + // [START distinct_query] + Query query = Query.projectionEntityQueryBuilder() + .kind("Task") + .projection(StructuredQuery.Projection.property("type"), + StructuredQuery.Projection.property("priority")) + .groupBy("type", "priority") + .orderBy(OrderBy.asc("type"), OrderBy.asc("priority")) + .build(); + // [END distinct_query] + assertValidQuery(query); + } + + @Test + public void testDistinctOnQuery() { + setUpQueryTests(); + // [START distinct_on_query] + Query query = Query.projectionEntityQueryBuilder() + .kind("Task") + .projection(StructuredQuery.Projection.property("type"), + StructuredQuery.Projection.first("priority")) + .groupBy("type") + .orderBy(OrderBy.asc("type"), OrderBy.asc("priority")) + .build(); + // [END distinct_on_query] + assertValidQuery(query); + } + + @Test + public void testArrayValueInequalityRange() { + setUpQueryTests(); + // [START array_value_inequality_range] + Query query = Query.entityQueryBuilder() + .kind("Task") + .filter(CompositeFilter.and( + PropertyFilter.gt("tag", "learn"), PropertyFilter.lt("tag", "math"))) + .build(); + // [END array_value_inequality_range] + QueryResults results = datastore.run(query); + assertFalse(results.hasNext()); + } + + @Test + public void testArrayValueEquality() { + setUpQueryTests(); + // [START array_value_equality] + Query query = Query.entityQueryBuilder() + .kind("Task") + .filter(CompositeFilter.and( + PropertyFilter.eq("tag", "fun"), PropertyFilter.eq("tag", "programming"))) + .build(); + // [END array_value_equality] + assertValidQuery(query); + } + + @Test + public void testInequalityRange() { + setUpQueryTests(); + // [START inequality_range] + Query query = Query.entityQueryBuilder() + .kind("Task") + .filter(CompositeFilter.and( + PropertyFilter.gt("created", startDate), PropertyFilter.lt("created", endDate))) + .build(); + // [END inequality_range] + assertValidQuery(query); + } + + @Test + public void testInequalityInvalid() { + // [START inequality_invalid] + Query query = Query.entityQueryBuilder() + .kind("Task") + .filter(CompositeFilter.and( + PropertyFilter.gt("created", startDate), PropertyFilter.gt("priority", 3))) + .build(); + // [END inequality_invalid] + assertInvalidQuery(query); + } + + @Test + public void testEqualAndInequalityRange() { + setUpQueryTests(); + // [START equal_and_inequality_range] + Query query = Query.entityQueryBuilder() + .kind("Task") + .filter(CompositeFilter.and(PropertyFilter.eq("priority", 4), + PropertyFilter.gt("created", startDate), PropertyFilter.lt("created", endDate))) + .build(); + // [END equal_and_inequality_range] + assertValidQuery(query); + } + + @Test + public void testInequalitySort() { + setUpQueryTests(); + // [START inequality_sort] + Query query = Query.entityQueryBuilder() + .kind("Task") + .filter(PropertyFilter.gt("priority", 3)) + .orderBy(OrderBy.asc("priority"), OrderBy.asc("created")) + .build(); + // [END inequality_sort] + assertValidQuery(query); + } + + @Test + public void testInequalitySortInvalidNotSame() { + // [START inequality_sort_invalid_not_same] + Query query = Query.entityQueryBuilder() + .kind("Task") + .filter(PropertyFilter.gt("priority", 3)) + .orderBy(OrderBy.asc("created")) + .build(); + // [END inequality_sort_invalid_not_same] + assertInvalidQuery(query); + } + + @Test + public void testInequalitySortInvalidNotFirst() { + // [START inequality_sort_invalid_not_first] + Query query = Query.entityQueryBuilder() + .kind("Task") + .filter(PropertyFilter.gt("priority", 3)) + .orderBy(OrderBy.asc("created"), OrderBy.asc("priority")) + .build(); + // [END inequality_sort_invalid_not_first] + assertInvalidQuery(query); + } + + @Test + public void testLimit() { + setUpQueryTests(); + // [START limit] + Query query = Query.entityQueryBuilder().kind("Task").limit(5).build(); + // [END limit] + assertValidQuery(query); + } + + @Test + public void testCursorPaging() { + setUpQueryTests(); + datastore.put(testEntity); + Cursor nextPageCursor = cursorPaging(1, null); + assertNotNull(nextPageCursor); + nextPageCursor = cursorPaging(1, nextPageCursor); + assertNotNull(nextPageCursor); + } + + private Cursor cursorPaging(int pageSize, Cursor pageCursor) { + // [START cursor_paging] + EntityQuery.Builder queryBuilder = Query.entityQueryBuilder().kind("Task").limit(pageSize); + if (pageCursor != null) { + queryBuilder.startCursor(pageCursor); + } + QueryResults tasks = datastore.run(queryBuilder.build()); + Entity task = null; + while (tasks.hasNext()) { + task = tasks.next(); + // do something with the task + } + Cursor nextPageCursor = null; + if (task != null && tasks.cursorAfter() != null) { + nextPageCursor = tasks.cursorAfter(); + // Call nextPageCursor.toUrlSafe() if you want an encoded cursor that can be used as part of a + // URL. + } + // [END cursor_paging] + return nextPageCursor; + } + + @Test + public void testEventualConsistentQuery() { + setUpQueryTests(); + // [START eventual_consistent_query] + Query query = Query.entityQueryBuilder() + .kind("Task") + .filter(PropertyFilter.hasAncestor( + datastore.newKeyFactory().kind("TaskList").newKey("default"))) + .build(); + // [END eventual_consistent_query] + assertValidQuery(query); + } + + @Test + public void testUnindexedPropertyQuery() { + setUpQueryTests(); + // [START unindexed_property_query] + Query query = Query.entityQueryBuilder() + .kind("Task") + .filter(PropertyFilter.eq("description", "A task description")) + .build(); + // [END unindexed_property_query] + QueryResults results = datastore.run(query); + assertFalse(results.hasNext()); + } + + @Test + public void testExplodingProperties() { + // [START exploding_properties] + Entity task = Entity.builder(taskKey) + .set("tags", StringValue.of("fun"), StringValue.of("programming"), StringValue.of("learn")) + .set("collaborators", StringValue.of("alice"), StringValue.of("bob"), + StringValue.of("charlie")) + .set("created", DateTime.now()) + .build(); + // [END exploding_properties] + assertValidEntity(task); + } + + private List setUpTransferTests() { + KeyFactory keyFactory = datastore.newKeyFactory().kind("People"); + Key from = keyFactory.newKey("from"); + Key to = keyFactory.newKey("to"); + datastore.put(Entity.builder(from).set("balance", 100).build()); + datastore.put(Entity.builder(to).set("balance", 0).build()); + return ImmutableList.of(from, to); + } + + private void assertSuccessfulTransfer(Key from, Key to) { + assertEquals(90, datastore.get(from).getLong("balance")); + assertEquals(10, datastore.get(to).getLong("balance")); + } + + @Test + public void testTransactionalUpdate() { + List keys = setUpTransferTests(); + transferFunds(keys.get(0), keys.get(1), 10); + assertSuccessfulTransfer(keys.get(0), keys.get(1)); + } + + private void transferFunds(Key fromKey, Key toKey, long amount) { + // [START transactional_update] + Transaction txn = datastore.newTransaction(); + try { + Entity from = txn.get(fromKey); + Entity updatedFrom = + Entity.builder(from).set("balance", from.getLong("balance") - amount).build(); + Entity to = txn.get(toKey); + Entity updatedTo = Entity.builder(to).set("balance", to.getLong("balance") + amount).build(); + txn.put(updatedFrom, updatedTo); + txn.commit(); + } finally { + if (txn.active()) { + txn.rollback(); + } + } + // [END transactional_update] + } + + @Test + public void testTransactionalRetry() { + List keys = setUpTransferTests(); + Key fromKey = keys.get(0); + Key toKey = keys.get(1); + // [START transactional_retry] + int retries = 5; + while (true) { + try { + transferFunds(fromKey, toKey, 10); + break; + } catch (DatastoreException e) { + if (retries == 0) { + throw e; + } + --retries; + } + } + // [END transactional_retry] + assertSuccessfulTransfer(keys.get(0), keys.get(1)); + } + + @Test + public void testTransactionalGetOrCreate() { + // [START transactional_get_or_create] + Entity task; + Transaction txn = datastore.newTransaction(); + try { + try { + task = txn.get(taskKey); + } catch (DatastoreException e) { + task = Entity.builder(taskKey).build(); + txn.put(task); + txn.commit(); + } + } finally { + if (txn.active()) { + txn.rollback(); + } + } + // [END transactional_get_or_create] + assertEquals(task, datastore.get(taskKey)); + } + + @Test + public void testTransactionalSingleEntityGroupReadOnly() { + setUpQueryTests(); + Key taskListKey = datastore.newKeyFactory().kind("TaskList").newKey("default"); + Entity taskListEntity = Entity.builder(taskListKey).build(); + datastore.put(taskListEntity); + // [START transactional_single_entity_group_read_only] + Entity taskList; + QueryResults tasks; + Transaction txn = datastore.newTransaction(); + try { + taskList = txn.get(taskListKey); + Query query = Query.entityQueryBuilder() + .kind("Task") + .filter(PropertyFilter.hasAncestor(taskListKey)) + .build(); + tasks = txn.run(query); + txn.commit(); + } finally { + if (txn.active()) { + txn.rollback(); + } + } + // [END transactional_single_entity_group_read_only] + assertEquals(taskListEntity, taskList); + assertNotNull(tasks.next()); + assertFalse(tasks.hasNext()); + } + + @Test + public void testNamespaceRunQuery() { + setUpQueryTests(); + // [START namespace_run_query] + KeyFactory keyFactory = datastore.newKeyFactory().kind("__namespace__"); + Key startNamespace = keyFactory.newKey("g"); + Key endNamespace = keyFactory.newKey("h"); + Query query = Query.keyQueryBuilder() + .kind("__namespace__") + .filter(CompositeFilter.and( + PropertyFilter.gt("__key__", startNamespace), + PropertyFilter.lt("__key__", endNamespace))) + .build(); + List namespaces = new ArrayList<>(); + QueryResults results = datastore.run(query); + while (results.hasNext()) { + namespaces.add(results.next().name()); + } + // [END namespace_run_query] + assertEquals(ImmutableList.of("ghijklmnop"), namespaces); + } + + @Test + public void testKindRunQuery() { + setUpQueryTests(); + // [START kind_run_query] + Query query = Query.keyQueryBuilder().kind("__kind__").build(); + List kinds = new ArrayList<>(); + QueryResults results = datastore.run(query); + while (results.hasNext()) { + kinds.add(results.next().name()); + } + // [END kind_run_query] + assertEquals(ImmutableList.of("Task"), kinds); + } + + @Test + public void testPropertyRunQuery() { + setUpQueryTests(); + // [START property_run_query] + Query query = Query.keyQueryBuilder().kind("__property__").build(); + QueryResults results = datastore.run(query); + Multimap propertiesByKind = HashMultimap.create(); + while (results.hasNext()) { + Key property = results.next(); + String kind = property.ancestors().get(property.ancestors().size() - 1).name(); + String propertyName = property.name(); + propertiesByKind.put(kind, propertyName); + } + // [END property_run_query] + Multimap expected = HashMultimap.create(); + expected.put("Task", "type"); + expected.put("Task", "done"); + expected.put("Task", "completed"); + expected.put("Task", "priority"); + expected.put("Task", "created"); + expected.put("Task", "percent_complete"); + expected.put("Task", "tag"); + assertEquals(expected, propertiesByKind); + } + + @Test + public void testPropertyByKindRunQuery() { + setUpQueryTests(); + // [START property_by_kind_run_query] + KeyFactory keyFactory = datastore.newKeyFactory().kind("__kind__"); + Query query = Query.entityQueryBuilder() + .kind("__property__") + .filter(PropertyFilter.hasAncestor(keyFactory.newKey("Task"))) + .build(); + QueryResults results = datastore.run(query); + Multimap representationsByProperty = HashMultimap.create(); + while (results.hasNext()) { + Entity property = results.next(); + String propertyName = property.key().name(); + List> representations = property.getList("property_representation"); + for (Value value : representations) { + representationsByProperty.put(propertyName, (String) value.get()); + } + } + // [END property_by_kind_run_query] + Multimap expected = HashMultimap.create(); + expected.put("type", "STRING"); + expected.put("done", "BOOLEAN"); + expected.put("completed", "BOOLEAN"); + expected.put("priority", "INT64"); + expected.put("created", "INT64"); + expected.put("percent_complete", "DOUBLE"); + expected.put("tag", "STRING"); + assertEquals(expected, representationsByProperty); + } + + @Test + public void testPropertyFilteringRunQuery() { + setUpQueryTests(); + // [START property_filtering_run_query] + KeyFactory keyFactory = datastore.newKeyFactory() + .kind("__property__") + .ancestors(PathElement.of("__kind__", "Task")); + Query query = Query.keyQueryBuilder() + .kind("__property__") + .filter(PropertyFilter.ge("__key__", keyFactory.newKey("priority"))) + .build(); + Multimap propertiesByKind = HashMultimap.create(); + QueryResults results = datastore.run(query); + while (results.hasNext()) { + Key property = results.next(); + String kind = property.ancestors().get(property.ancestors().size() - 1).name(); + String propertyName = property.name(); + propertiesByKind.put(kind, propertyName); + } + // [END property_filtering_run_query] + Multimap expected = HashMultimap.create(); + expected.put("Task", "priority"); + expected.put("Task", "tag"); + expected.put("Task", "type"); + assertEquals(expected, propertiesByKind); + } + + @Test + public void testGqlRunQuery() { + setUpQueryTests(); + // [START gql_run_query] + Query query = + Query.gqlQueryBuilder(ResultType.ENTITY, "select * from Task order by created asc").build(); + // [END gql_run_query] + assertValidQuery(query); + } + + @Test + public void testGqlNamedBindingQuery() { + setUpQueryTests(); + // [START gql_named_binding_query] + Query query = + Query.gqlQueryBuilder( + ResultType.ENTITY, + "select * from Task where completed = @completed and priority = @priority") + .setBinding("completed", false) + .setBinding("priority", 4) + .build(); + // [END gql_named_binding_query] + assertValidQuery(query); + } + + @Test + public void testGqlPositionalBindingQuery() { + setUpQueryTests(); + // [START gql_positional_binding_query] + Query query = Query.gqlQueryBuilder( + ResultType.ENTITY, "select * from Task where completed = @1 and priority = @2") + .addBinding(false) + .addBinding(4) + .build(); + // [END gql_positional_binding_query] + assertValidQuery(query); + } + + @Test + public void testGqlLiteralQuery() { + setUpQueryTests(); + // [START gql_literal_query] + Query query = Query.gqlQueryBuilder( + ResultType.ENTITY, "select * from Task where completed = false and priority = 4") + .allowLiteral(true) + .build(); + // [END gql_literal_query] + assertValidQuery(query); + } +} diff --git a/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java b/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java new file mode 100644 index 000000000..e5d9b8a04 --- /dev/null +++ b/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java @@ -0,0 +1,232 @@ +/* + * Copyright 2016 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.datastore.snippets; + +import com.google.gcloud.datastore.Datastore; +import com.google.gcloud.datastore.DatastoreException; +import com.google.gcloud.datastore.DatastoreOptions; +import com.google.gcloud.datastore.DateTime; +import com.google.gcloud.datastore.Entity; +import com.google.gcloud.datastore.Key; +import com.google.gcloud.datastore.KeyFactory; +import com.google.gcloud.datastore.Query; +import com.google.gcloud.datastore.StringValue; +import com.google.gcloud.datastore.StructuredQuery.OrderBy; +import com.google.gcloud.datastore.Transaction; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +/** + * A simple Task List application demonstrating how to connect to Cloud Datastore, create, modify, + * delete, and query entities. + */ +public class TaskList { + + // [START build_service] + // Create an authorized Datastore service using Application Default Credentials. + private final Datastore datastore = DatastoreOptions.defaultInstance().service(); + + // Create a Key factory to construct keys associated with this project. + private final KeyFactory keyFactory = datastore.newKeyFactory().kind("Task"); + // [END build_service] + + // [START add_entity] + /** + * Adds a task entity to the Datastore. + * + * @param description The task description + * + * @return The {@link Key} of the entity. + */ + Key addTask(String description) { + Key key = datastore.allocateId(keyFactory.newKey()); + Entity task = Entity.builder(key) + .set("description", StringValue.builder(description).indexed(false).build()) + .set("created", DateTime.now()) + .set("done", false) + .build(); + datastore.put(task); + return key; + } + // [END add_entity] + + // [START update_entity] + /** + * Marks a task entity as done. + * + * @param id The ID of the task entity as given by {@link Key#id()} + * @throws DatastoreException if the task does not exist + */ + void markDone(long id) { + Transaction transaction = datastore.newTransaction(); + try { + Entity task = transaction.get(keyFactory.newKey(id)); + transaction.put(Entity.builder(task).set("done", true).build()); + transaction.commit(); + } finally { + if (transaction.active()) { + transaction.rollback(); + } + } + } + // [END update_entity] + + // [START retrieve_entities] + /** + * Returns a list of all task entities in ascending order of creation time. + */ + Iterator listTasks() { + Query query = + Query.entityQueryBuilder().kind("Task").orderBy(OrderBy.asc("created")).build(); + return datastore.run(query); + } + // [END retrieve_entities] + + // [START delete_entity] + /** + * Deletes a task entity. + * + * @param id The ID of the task entity as given by {@link Key#id()} + */ + void deleteTask(long id) { + datastore.delete(keyFactory.newKey(id)); + } + // [END delete_entity] + + // [START format_results] + /** + * Converts a list of task entities to a list of formatted task strings. + * + * @param tasks An iterator over task entities + * @returns A list of tasks strings, one per entity + */ + static List formatTasks(Iterator tasks) { + List strings = new ArrayList<>(); + while (tasks.hasNext()) { + Entity task = tasks.next(); + if (task.getBoolean("done")) { + strings.add( + String.format("%d : %s (done)", task.key().id(), task.getString("description"))); + } else { + strings.add(String.format("%d : %s (created %s)", task.key().id(), + task.getString("description"), task.getDateTime("created"))); + } + } + return strings; + } + // [END format_results] + + /** + * Handles a single command. + * + * @param commandLine A line of input provided by the user + */ + void handleCommandLine(String commandLine) { + String[] args = commandLine.split("\\s+"); + + if (args.length < 1) { + throw new IllegalArgumentException("not enough args"); + } + + String command = args[0]; + switch (command) { + case "new": + // Everything after the first whitespace token is interpreted to be the description. + args = commandLine.split("\\s+", 2); + if (args.length != 2) { + throw new IllegalArgumentException("missing description"); + } + // Set created to NOW() and done to false. + addTask(args[1]); + System.out.println("task added"); + break; + case "done": + assertArgsLength(args, 2); + long id = Long.parseLong(args[1]); + try { + markDone(id); + System.out.println("task marked done"); + } catch (DatastoreException e) { + System.out.printf("did not find a Task entity with ID %d\n", id); + } + break; + case "list": + assertArgsLength(args, 1); + List tasks = formatTasks(listTasks()); + System.out.printf("found %d tasks:\n", tasks.size()); + System.out.println("task ID : description"); + System.out.println("---------------------"); + for (String taskString : tasks) { + System.out.println(taskString); + } + break; + case "delete": + assertArgsLength(args, 2); + deleteTask(Long.parseLong(args[1])); + System.out.println("task deleted"); + break; + default: + throw new IllegalArgumentException("unrecognized command: " + command); + } + } + + private void assertArgsLength(String[] args, int expectedLength) { + if (args.length != expectedLength) { + throw new IllegalArgumentException( + String.format("expected exactly %d arg(s), found %d", expectedLength, args.length)); + } + } + + /** + * Exercises the methods defined in this class. + * + *

Assumes that you are authenticated using the Google Cloud SDK (using + * {@code gcloud auth login}). + */ + public static void main(String[] args) throws Exception { + TaskList taskList = new TaskList(); + System.out.println("Cloud Datastore Task List"); + System.out.println(); + printUsage(); + while (true) { + String commandLine = System.console().readLine("> "); + if (commandLine.trim().isEmpty()) { + break; + } + try { + taskList.handleCommandLine(commandLine); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + printUsage(); + } + } + System.out.println("exiting"); + System.exit(0); + } + + private static void printUsage() { + System.out.println("Usage:"); + System.out.println(); + System.out.println(" new Adds a task with a description "); + System.out.println(" done Marks a task as done"); + System.out.println(" list Lists all tasks by creation time"); + System.out.println(" delete Deletes a task"); + System.out.println(); + } +} From 9f747fcffde02e102f7fd7ebf7a70033faaa482d Mon Sep 17 00:00:00 2001 From: Ajay Kannan Date: Wed, 10 Feb 2016 14:31:23 -0800 Subject: [PATCH 02/73] Minor fixes --- .../google/datastore/snippets/Concepts.java | 20 +++++++------------ 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java b/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java index ae38b0070..b1b5624c5 100644 --- a/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java +++ b/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java @@ -312,8 +312,9 @@ private List setUpBatchTests(Key taskKey1, Key taskKey2) { @Test public void testBatchUpsert() { - Key taskKey1 = keyFactory.newKey(1); - Key taskKey2 = keyFactory.newKey(2); + // [START batch_upsert] + Key taskKey1 = datastore.allocateId(keyFactory.newKey()); + Key taskKey2 = datastore.allocateId(keyFactory.newKey()); Entity task1 = Entity.builder(taskKey1) .set("type", "Personal") .set("done", false) @@ -326,7 +327,6 @@ public void testBatchUpsert() { .set("priority", 5) .set("description", "Integrate Cloud Datastore") .build(); - // [START batch_upsert] Batch batch = datastore.newBatch(); batch.put(task1, task2); batch.submit(); @@ -737,15 +737,9 @@ private Cursor cursorPaging(int pageSize, Cursor pageCursor) { @Test public void testEventualConsistentQuery() { - setUpQueryTests(); // [START eventual_consistent_query] - Query query = Query.entityQueryBuilder() - .kind("Task") - .filter(PropertyFilter.hasAncestor( - datastore.newKeyFactory().kind("TaskList").newKey("default"))) - .build(); + // Read consistency cannot be specified in gcloud-java. // [END eventual_consistent_query] - assertValidQuery(query); } @Test @@ -795,8 +789,8 @@ public void testTransactionalUpdate() { assertSuccessfulTransfer(keys.get(0), keys.get(1)); } - private void transferFunds(Key fromKey, Key toKey, long amount) { - // [START transactional_update] + // [START transactional_update] + void transferFunds(Key fromKey, Key toKey, long amount) { Transaction txn = datastore.newTransaction(); try { Entity from = txn.get(fromKey); @@ -811,8 +805,8 @@ private void transferFunds(Key fromKey, Key toKey, long amount) { txn.rollback(); } } - // [END transactional_update] } + // [END transactional_update] @Test public void testTransactionalRetry() { From 27f89144302e656600a144548a19314bc334b5e3 Mon Sep 17 00:00:00 2001 From: Ajay Kannan Date: Wed, 10 Feb 2016 16:54:24 -0800 Subject: [PATCH 03/73] Fix batchUpsert snippet + minor changes for consiceness --- .../google/datastore/snippets/Concepts.java | 55 ++++++++++--------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java b/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java index b1b5624c5..640ea130d 100644 --- a/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java +++ b/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java @@ -110,7 +110,7 @@ public static void beforeClass() throws IOException, InterruptedException { public void setUp() { datastore = DatastoreOptions.builder() .projectId(PROJECT_ID) - .namespace("ghijklmnop") // for namespace metadata query + .namespace("ghijklmnop") .host("http://localhost:" + PORT) .build() .service(); @@ -120,15 +120,13 @@ public void setUp() { keyFactory = datastore.newKeyFactory().kind("Task"); taskKey = keyFactory.newKey("some-arbitrary-key"); testEntity = Entity.builder(taskKey, TEST_FULL_ENTITY).build(); - Calendar startDateCalendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")); - startDateCalendar.set(1990, 1, 1); - startDate = DateTime.copyFrom(startDateCalendar); - Calendar endDateCalendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")); - endDateCalendar.set(2000, 1, 1); - endDate = DateTime.copyFrom(endDateCalendar); - Calendar includedCalendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")); - includedCalendar.set(1999, 12, 31); - includedDate = DateTime.copyFrom(includedCalendar); + Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")); + calendar.set(1990, 1, 1); + startDate = DateTime.copyFrom(calendar); + calendar.set(2000, 1, 1); + endDate = DateTime.copyFrom(calendar); + calendar.set(1999, 12, 31); + includedDate = DateTime.copyFrom(calendar); } /** @@ -195,9 +193,11 @@ private void assertValidEntity(Entity original) { @Test public void testEntityWithParent() { // [START entity_with_parent] - KeyFactory keyFactory = - datastore.newKeyFactory().ancestors(PathElement.of("TaskList", "default")).kind("Task"); - Entity task = Entity.builder(keyFactory.newKey("sampleTask")) + Key taskKey = datastore.newKeyFactory() + .ancestors(PathElement.of("TaskList", "default")) + .kind("Task") + .newKey("sampleTask"); + Entity task = Entity.builder(taskKey) .set("type", "Personal") .set("done", false) .set("priority", 4) @@ -313,26 +313,25 @@ private List setUpBatchTests(Key taskKey1, Key taskKey2) { @Test public void testBatchUpsert() { // [START batch_upsert] - Key taskKey1 = datastore.allocateId(keyFactory.newKey()); - Key taskKey2 = datastore.allocateId(keyFactory.newKey()); - Entity task1 = Entity.builder(taskKey1) + FullEntity task1 = FullEntity.builder(keyFactory.newKey()) .set("type", "Personal") .set("done", false) .set("priority", 4) .set("description", "Learn Cloud Datastore") .build(); - Entity task2 = Entity.builder(taskKey2) + FullEntity task2 = Entity.builder(keyFactory.newKey()) .set("type", "Personal") .set("done", false) .set("priority", 5) .set("description", "Integrate Cloud Datastore") .build(); Batch batch = datastore.newBatch(); - batch.put(task1, task2); - batch.submit(); + batch.addWithDeferredIdAllocation(task1, task2); + Batch.Response response = batch.submit(); + List taskKeys = response.generatedKeys(); // keys listed in order of insertion // [END batch_upsert] - assertEquals(task1, datastore.get(taskKey1)); - assertEquals(task2, datastore.get(taskKey2)); + assertEquals(Entity.builder(taskKeys.get(0), task1).build(), datastore.get(taskKeys.get(0))); + assertEquals(Entity.builder(taskKeys.get(1), task2).build(), datastore.get(taskKeys.get(1))); } @Test @@ -443,7 +442,7 @@ public void testKeyFilter() { // [START key_filter] Query query = Query.entityQueryBuilder() .kind("Task") - .filter(PropertyFilter.gt("__key__", keyFactory.newKey("someTask"))) + .filter(PropertyFilter.gt("__key__", keyFactory.newKey("someTask"))) .build(); // [END key_filter] assertValidQuery(query); @@ -946,10 +945,10 @@ public void testPropertyRunQuery() { public void testPropertyByKindRunQuery() { setUpQueryTests(); // [START property_by_kind_run_query] - KeyFactory keyFactory = datastore.newKeyFactory().kind("__kind__"); + Key key = datastore.newKeyFactory().kind("__kind__").newKey("Task"); Query query = Query.entityQueryBuilder() .kind("__property__") - .filter(PropertyFilter.hasAncestor(keyFactory.newKey("Task"))) + .filter(PropertyFilter.hasAncestor(key)) .build(); QueryResults results = datastore.run(query); Multimap representationsByProperty = HashMultimap.create(); @@ -977,12 +976,14 @@ public void testPropertyByKindRunQuery() { public void testPropertyFilteringRunQuery() { setUpQueryTests(); // [START property_filtering_run_query] - KeyFactory keyFactory = datastore.newKeyFactory() + Key key = + datastore.newKeyFactory() .kind("__property__") - .ancestors(PathElement.of("__kind__", "Task")); + .ancestors(PathElement.of("__kind__", "Task")) + .newKey("priority"); Query query = Query.keyQueryBuilder() .kind("__property__") - .filter(PropertyFilter.ge("__key__", keyFactory.newKey("priority"))) + .filter(PropertyFilter.ge("__key__", key)) .build(); Multimap propertiesByKind = HashMultimap.create(); QueryResults results = datastore.run(query); From 846946cc636c930338f9a4881a9d90bbce18c0db Mon Sep 17 00:00:00 2001 From: Ajay Kannan Date: Thu, 11 Feb 2016 10:10:27 -0800 Subject: [PATCH 04/73] Style fixes and minor bug fixes --- .../google/datastore/snippets/Concepts.java | 154 +++++++++--------- .../google/datastore/snippets/TaskList.java | 9 +- 2 files changed, 79 insertions(+), 84 deletions(-) diff --git a/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java b/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java index 640ea130d..0fac1d1b1 100644 --- a/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java +++ b/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java @@ -16,16 +16,16 @@ package com.google.datastore.snippets; +import static java.util.Calendar.DECEMBER; +import static java.util.Calendar.JANUARY; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; -import com.google.common.collect.HashMultimap; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterators; -import com.google.common.collect.Multimap; -import com.google.gcloud.datastore.Batch; import com.google.gcloud.datastore.Cursor; import com.google.gcloud.datastore.Datastore; import com.google.gcloud.datastore.DatastoreException; @@ -46,6 +46,7 @@ import com.google.gcloud.datastore.StructuredQuery; import com.google.gcloud.datastore.StructuredQuery.CompositeFilter; import com.google.gcloud.datastore.StructuredQuery.OrderBy; +import com.google.gcloud.datastore.StructuredQuery.Projection; import com.google.gcloud.datastore.StructuredQuery.PropertyFilter; import com.google.gcloud.datastore.Transaction; import com.google.gcloud.datastore.Value; @@ -61,9 +62,14 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Calendar; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.TimeZone; /** @@ -121,11 +127,11 @@ public void setUp() { taskKey = keyFactory.newKey("some-arbitrary-key"); testEntity = Entity.builder(taskKey, TEST_FULL_ENTITY).build(); Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")); - calendar.set(1990, 1, 1); + calendar.set(1990, JANUARY, 1); startDate = DateTime.copyFrom(calendar); - calendar.set(2000, 1, 1); + calendar.set(2000, JANUARY, 1); endDate = DateTime.copyFrom(calendar); - calendar.set(1999, 12, 31); + calendar.set(1999, DECEMBER, 31); includedDate = DateTime.copyFrom(calendar); } @@ -158,8 +164,7 @@ public void testIncompleteKey() { @Test public void testNamedKey() { // [START named_key] - KeyFactory keyFactory = datastore.newKeyFactory().kind("Task"); - Key taskKey = keyFactory.newKey("sampleTask"); + Key taskKey = datastore.newKeyFactory().kind("Task").newKey("sampleTask"); // [END named_key] assertValidKey(taskKey); } @@ -167,9 +172,10 @@ public void testNamedKey() { @Test public void testKeyWithParent() { // [START key_with_parent] - KeyFactory keyFactory = - datastore.newKeyFactory().ancestors(PathElement.of("TaskList", "default")).kind("Task"); - Key taskKey = keyFactory.newKey("sampleTask"); + Key taskKey = datastore.newKeyFactory() + .ancestors(PathElement.of("TaskList", "default")) + .kind("Task") + .newKey("sampleTask"); // [END key_with_parent] assertValidKey(taskKey); } @@ -249,8 +255,7 @@ public void testBasicEntity() { @Test public void testUpsert() { // [START upsert] - Key taskKey = datastore.allocateId(keyFactory.newKey()); - Entity task = Entity.builder(taskKey).build(); + Entity task = Entity.builder(keyFactory.newKey("sampleTask")).build(); datastore.put(task); // [END upsert] assertEquals(task, datastore.get(task.key())); @@ -259,10 +264,9 @@ public void testUpsert() { @Test public void testInsert() { // [START insert] - Entity task = Entity.builder(taskKey).build(); - Key taskKey = datastore.add(task).key(); + Key taskKey = datastore.add(FullEntity.builder(keyFactory.newKey()).build()).key(); // [END insert] - assertEquals(task, datastore.get(taskKey)); + assertEquals(FullEntity.builder(taskKey).build(), datastore.get(taskKey)); } @Test @@ -325,13 +329,12 @@ public void testBatchUpsert() { .set("priority", 5) .set("description", "Integrate Cloud Datastore") .build(); - Batch batch = datastore.newBatch(); - batch.addWithDeferredIdAllocation(task1, task2); - Batch.Response response = batch.submit(); - List taskKeys = response.generatedKeys(); // keys listed in order of insertion + List tasks = datastore.add(task1, task2); + Key taskKey1 = tasks.get(0).key(); + Key taskKey2 = tasks.get(1).key(); // [END batch_upsert] - assertEquals(Entity.builder(taskKeys.get(0), task1).build(), datastore.get(taskKeys.get(0))); - assertEquals(Entity.builder(taskKeys.get(1), task2).build(), datastore.get(taskKeys.get(1))); + assertEquals(Entity.builder(taskKey1, task1).build(), datastore.get(taskKey1)); + assertEquals(Entity.builder(taskKey2, task2).build(), datastore.get(taskKey2)); } @Test @@ -352,18 +355,18 @@ public void testBatchDelete() { Key taskKey2 = keyFactory.newKey(2); setUpBatchTests(taskKey1, taskKey2); // [START batch_delete] - Batch batch = datastore.newBatch(); - batch.delete(taskKey1, taskKey2); - batch.submit(); + datastore.delete(taskKey1, taskKey2); // [END batch_delete] assertNull(datastore.get(taskKey1)); assertNull(datastore.get(taskKey2)); } private void setUpQueryTests() { - KeyFactory keyFactory = - datastore.newKeyFactory().kind("Task").ancestors(PathElement.of("TaskList", "default")); - datastore.put(Entity.builder(keyFactory.newKey("someTask")) + Key taskKey = datastore.newKeyFactory() + .kind("Task") + .ancestors(PathElement.of("TaskList", "default")) + .newKey("someTask"); + datastore.put(Entity.builder(taskKey) .set("type", "Personal") .set("done", false) .set("completed", false) @@ -371,8 +374,7 @@ private void setUpQueryTests() { .set("created", includedDate) .set("percent_complete", 10.0) .set("description", StringValue.builder("Learn Cloud Datastore").indexed(false).build()) - .set("tag", ImmutableList.of(StringValue.of("fun"), StringValue.of("l"), - StringValue.of("programming"))) + .set("tag", StringValue.of("fun"), StringValue.of("l"), StringValue.of("programming")) .build()); } @@ -510,9 +512,7 @@ public void testProjectionQuery() { // [START projection_query] Query query = Query.projectionEntityQueryBuilder() .kind("Task") - .projection( - StructuredQuery.Projection.property("priority"), - StructuredQuery.Projection.property("percent_complete")) + .projection(Projection.property("priority"), Projection.property("percent_complete")) .build(); // [END projection_query] assertValidQuery(query); @@ -523,13 +523,11 @@ public void testRunProjectionQuery() { setUpQueryTests(); Query query = Query.projectionEntityQueryBuilder() .kind("Task") - .projection( - StructuredQuery.Projection.property("priority"), - StructuredQuery.Projection.property("percent_complete")) + .projection(Projection.property("priority"), Projection.property("percent_complete")) .build(); + // [START run_query_projection] List priorities = new LinkedList<>(); List percentCompletes = new LinkedList<>(); - // [START run_query_projection] QueryResults tasks = datastore.run(query); while (tasks.hasNext()) { ProjectionEntity task = tasks.next(); @@ -567,8 +565,7 @@ public void testDistinctQuery() { // [START distinct_query] Query query = Query.projectionEntityQueryBuilder() .kind("Task") - .projection(StructuredQuery.Projection.property("type"), - StructuredQuery.Projection.property("priority")) + .projection(Projection.property("type"), Projection.property("priority")) .groupBy("type", "priority") .orderBy(OrderBy.asc("type"), OrderBy.asc("priority")) .build(); @@ -582,8 +579,7 @@ public void testDistinctOnQuery() { // [START distinct_on_query] Query query = Query.projectionEntityQueryBuilder() .kind("Task") - .projection(StructuredQuery.Projection.property("type"), - StructuredQuery.Projection.first("priority")) + .projection(Projection.property("type"), Projection.first("priority")) .groupBy("type") .orderBy(OrderBy.asc("type"), OrderBy.asc("priority")) .build(); @@ -719,17 +715,12 @@ private Cursor cursorPaging(int pageSize, Cursor pageCursor) { queryBuilder.startCursor(pageCursor); } QueryResults tasks = datastore.run(queryBuilder.build()); - Entity task = null; + Entity task; while (tasks.hasNext()) { task = tasks.next(); // do something with the task } - Cursor nextPageCursor = null; - if (task != null && tasks.cursorAfter() != null) { - nextPageCursor = tasks.cursorAfter(); - // Call nextPageCursor.toUrlSafe() if you want an encoded cursor that can be used as part of a - // URL. - } + Cursor nextPageCursor = tasks.cursorAfter(); // [END cursor_paging] return nextPageCursor; } @@ -792,10 +783,11 @@ public void testTransactionalUpdate() { void transferFunds(Key fromKey, Key toKey, long amount) { Transaction txn = datastore.newTransaction(); try { - Entity from = txn.get(fromKey); + List entities = txn.fetch(fromKey, toKey); + Entity from = entities.get(0); Entity updatedFrom = Entity.builder(from).set("balance", from.getLong("balance") - amount).build(); - Entity to = txn.get(toKey); + Entity to = entities.get(1); Entity updatedTo = Entity.builder(to).set("balance", to.getLong("balance") + amount).build(); txn.put(updatedFrom, updatedTo); txn.commit(); @@ -825,6 +817,7 @@ public void testTransactionalRetry() { --retries; } } + // Retry handling can also be configured and automatically applied using gcloud-java. // [END transactional_retry] assertSuccessfulTransfer(keys.get(0), keys.get(1)); } @@ -835,9 +828,8 @@ public void testTransactionalGetOrCreate() { Entity task; Transaction txn = datastore.newTransaction(); try { - try { - task = txn.get(taskKey); - } catch (DatastoreException e) { + task = txn.get(taskKey); + if (task == null) { task = Entity.builder(taskKey).build(); txn.put(task); txn.commit(); @@ -922,22 +914,22 @@ public void testPropertyRunQuery() { // [START property_run_query] Query query = Query.keyQueryBuilder().kind("__property__").build(); QueryResults results = datastore.run(query); - Multimap propertiesByKind = HashMultimap.create(); + Map> propertiesByKind = new HashMap<>(); while (results.hasNext()) { Key property = results.next(); String kind = property.ancestors().get(property.ancestors().size() - 1).name(); String propertyName = property.name(); - propertiesByKind.put(kind, propertyName); + if (!propertiesByKind.containsKey(kind)) { + propertiesByKind.put(kind, new HashSet()); + } + propertiesByKind.get(kind).add(propertyName); } // [END property_run_query] - Multimap expected = HashMultimap.create(); - expected.put("Task", "type"); - expected.put("Task", "done"); - expected.put("Task", "completed"); - expected.put("Task", "priority"); - expected.put("Task", "created"); - expected.put("Task", "percent_complete"); - expected.put("Task", "tag"); + Map> expected = new HashMap<>(); + expected.put( + "Task", + ImmutableSet.of( + "done", "type", "done", "completed", "priority", "created", "percent_complete", "tag")); assertEquals(expected, propertiesByKind); } @@ -951,24 +943,27 @@ public void testPropertyByKindRunQuery() { .filter(PropertyFilter.hasAncestor(key)) .build(); QueryResults results = datastore.run(query); - Multimap representationsByProperty = HashMultimap.create(); + Map> representationsByProperty = new HashMap<>(); while (results.hasNext()) { Entity property = results.next(); String propertyName = property.key().name(); List> representations = property.getList("property_representation"); + if (!representationsByProperty.containsKey(propertyName)) { + representationsByProperty.put(propertyName, new HashSet()); + } for (Value value : representations) { - representationsByProperty.put(propertyName, (String) value.get()); + representationsByProperty.get(propertyName).add((String) value.get()); } } // [END property_by_kind_run_query] - Multimap expected = HashMultimap.create(); - expected.put("type", "STRING"); - expected.put("done", "BOOLEAN"); - expected.put("completed", "BOOLEAN"); - expected.put("priority", "INT64"); - expected.put("created", "INT64"); - expected.put("percent_complete", "DOUBLE"); - expected.put("tag", "STRING"); + Map> expected = new HashMap<>(); + expected.put("type", Collections.singleton("STRING")); + expected.put("done", Collections.singleton("BOOLEAN")); + expected.put("completed", Collections.singleton("BOOLEAN")); + expected.put("priority", Collections.singleton("INT64")); + expected.put("created", Collections.singleton("INT64")); + expected.put("percent_complete", Collections.singleton("DOUBLE")); + expected.put("tag", Collections.singleton("STRING")); assertEquals(expected, representationsByProperty); } @@ -985,19 +980,20 @@ public void testPropertyFilteringRunQuery() { .kind("__property__") .filter(PropertyFilter.ge("__key__", key)) .build(); - Multimap propertiesByKind = HashMultimap.create(); + Map> propertiesByKind = new HashMap<>(); QueryResults results = datastore.run(query); while (results.hasNext()) { Key property = results.next(); String kind = property.ancestors().get(property.ancestors().size() - 1).name(); String propertyName = property.name(); - propertiesByKind.put(kind, propertyName); + if (!propertiesByKind.containsKey(kind)) { + propertiesByKind.put(kind, new HashSet()); + } + propertiesByKind.get(kind).add(propertyName); } // [END property_filtering_run_query] - Multimap expected = HashMultimap.create(); - expected.put("Task", "priority"); - expected.put("Task", "tag"); - expected.put("Task", "type"); + Map> expected = new HashMap<>(); + expected.put("Task", ImmutableSet.of("priority", "tag", "type")); assertEquals(expected, propertiesByKind); } diff --git a/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java b/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java index e5d9b8a04..40920e291 100644 --- a/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java +++ b/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java @@ -51,7 +51,6 @@ public class TaskList { * Adds a task entity to the Datastore. * * @param description The task description - * * @return The {@link Key} of the entity. */ Key addTask(String description) { @@ -114,7 +113,7 @@ void deleteTask(long id) { * Converts a list of task entities to a list of formatted task strings. * * @param tasks An iterator over task entities - * @returns A list of tasks strings, one per entity + * @return A list of tasks strings, one per entity */ static List formatTasks(Iterator tasks) { List strings = new ArrayList<>(); @@ -152,7 +151,7 @@ void handleCommandLine(String commandLine) { if (args.length != 2) { throw new IllegalArgumentException("missing description"); } - // Set created to NOW() and done to false. + // Set created to now() and done to false. addTask(args[1]); System.out.println("task added"); break; @@ -163,13 +162,13 @@ void handleCommandLine(String commandLine) { markDone(id); System.out.println("task marked done"); } catch (DatastoreException e) { - System.out.printf("did not find a Task entity with ID %d\n", id); + System.out.printf("did not find a Task entity with ID %d%n", id); } break; case "list": assertArgsLength(args, 1); List tasks = formatTasks(listTasks()); - System.out.printf("found %d tasks:\n", tasks.size()); + System.out.printf("found %d tasks:%n", tasks.size()); System.out.println("task ID : description"); System.out.println("---------------------"); for (String taskString : tasks) { From 5f308aa0741e2961b314e13e8c7d3c8415854210 Mon Sep 17 00:00:00 2001 From: Ajay Kannan Date: Thu, 11 Feb 2016 16:38:45 -0800 Subject: [PATCH 05/73] Fix nits in pom/README/concept snippets --- .../google/datastore/snippets/Concepts.java | 64 ++++++++++--------- 1 file changed, 34 insertions(+), 30 deletions(-) diff --git a/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java b/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java index 0fac1d1b1..eedd05c7b 100644 --- a/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java +++ b/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java @@ -24,6 +24,7 @@ import static org.junit.Assert.assertNull; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterators; import com.google.gcloud.datastore.Cursor; @@ -49,7 +50,6 @@ import com.google.gcloud.datastore.StructuredQuery.Projection; import com.google.gcloud.datastore.StructuredQuery.PropertyFilter; import com.google.gcloud.datastore.Transaction; -import com.google.gcloud.datastore.Value; import com.google.gcloud.datastore.testing.LocalGcdHelper; import org.junit.AfterClass; @@ -715,9 +715,8 @@ private Cursor cursorPaging(int pageSize, Cursor pageCursor) { queryBuilder.startCursor(pageCursor); } QueryResults tasks = datastore.run(queryBuilder.build()); - Entity task; while (tasks.hasNext()) { - task = tasks.next(); + Entity task = tasks.next(); // do something with the task } Cursor nextPageCursor = tasks.cursorAfter(); @@ -919,17 +918,16 @@ public void testPropertyRunQuery() { Key property = results.next(); String kind = property.ancestors().get(property.ancestors().size() - 1).name(); String propertyName = property.name(); - if (!propertiesByKind.containsKey(kind)) { - propertiesByKind.put(kind, new HashSet()); + Collection properties = propertiesByKind.get(kind); + if (properties == null) { + properties = new HashSet<>(); + propertiesByKind.put(kind, properties); } - propertiesByKind.get(kind).add(propertyName); + properties.add(propertyName); } // [END property_run_query] - Map> expected = new HashMap<>(); - expected.put( - "Task", - ImmutableSet.of( - "done", "type", "done", "completed", "priority", "created", "percent_complete", "tag")); + Map> expected = ImmutableMap.of("Task", ImmutableSet.of( + "done", "type", "done", "completed", "priority", "created", "percent_complete", "tag")); assertEquals(expected, propertiesByKind); } @@ -940,30 +938,34 @@ public void testPropertyByKindRunQuery() { Key key = datastore.newKeyFactory().kind("__kind__").newKey("Task"); Query query = Query.entityQueryBuilder() .kind("__property__") - .filter(PropertyFilter.hasAncestor(key)) + .filter(PropertyFilter.hasAncestor(key)) .build(); QueryResults results = datastore.run(query); Map> representationsByProperty = new HashMap<>(); while (results.hasNext()) { Entity property = results.next(); String propertyName = property.key().name(); - List> representations = property.getList("property_representation"); - if (!representationsByProperty.containsKey(propertyName)) { - representationsByProperty.put(propertyName, new HashSet()); + List representations = + (List) property.getList("property_representation"); + Collection currentRepresentations = representationsByProperty.get(propertyName); + if (currentRepresentations == null) { + currentRepresentations = new HashSet<>(); + representationsByProperty.put(propertyName, currentRepresentations); } - for (Value value : representations) { - representationsByProperty.get(propertyName).add((String) value.get()); + for (StringValue value : representations) { + currentRepresentations.add(value.get()); } } // [END property_by_kind_run_query] - Map> expected = new HashMap<>(); - expected.put("type", Collections.singleton("STRING")); - expected.put("done", Collections.singleton("BOOLEAN")); - expected.put("completed", Collections.singleton("BOOLEAN")); - expected.put("priority", Collections.singleton("INT64")); - expected.put("created", Collections.singleton("INT64")); - expected.put("percent_complete", Collections.singleton("DOUBLE")); - expected.put("tag", Collections.singleton("STRING")); + Map> expected = ImmutableMap.>builder() + .put("type", Collections.singleton("STRING")) + .put("done", Collections.singleton("BOOLEAN")) + .put("completed", Collections.singleton("BOOLEAN")) + .put("priority", Collections.singleton("INT64")) + .put("created", Collections.singleton("INT64")) + .put("percent_complete", Collections.singleton("DOUBLE")) + .put("tag", Collections.singleton("STRING")) + .build(); assertEquals(expected, representationsByProperty); } @@ -986,14 +988,16 @@ public void testPropertyFilteringRunQuery() { Key property = results.next(); String kind = property.ancestors().get(property.ancestors().size() - 1).name(); String propertyName = property.name(); - if (!propertiesByKind.containsKey(kind)) { - propertiesByKind.put(kind, new HashSet()); + Collection properties = propertiesByKind.get(kind); + if (properties == null) { + properties = new HashSet(); + propertiesByKind.put(kind, properties); } - propertiesByKind.get(kind).add(propertyName); + properties.add(propertyName); } // [END property_filtering_run_query] - Map> expected = new HashMap<>(); - expected.put("Task", ImmutableSet.of("priority", "tag", "type")); + Map> expected = + ImmutableMap.of("Task", ImmutableSet.of("priority", "tag", "type")); assertEquals(expected, propertiesByKind); } From e78031b61c88b3c0c93cc381c44d797ba9421198 Mon Sep 17 00:00:00 2001 From: Ajay Kannan Date: Tue, 16 Feb 2016 09:09:24 -0800 Subject: [PATCH 06/73] Indentation fix --- .../java/com/google/datastore/snippets/Concepts.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java b/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java index eedd05c7b..1f6295524 100644 --- a/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java +++ b/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java @@ -973,14 +973,13 @@ public void testPropertyByKindRunQuery() { public void testPropertyFilteringRunQuery() { setUpQueryTests(); // [START property_filtering_run_query] - Key key = - datastore.newKeyFactory() + Key key = datastore.newKeyFactory() .kind("__property__") - .ancestors(PathElement.of("__kind__", "Task")) - .newKey("priority"); + .ancestors(PathElement.of("__kind__", "Task")) + .newKey("priority"); Query query = Query.keyQueryBuilder() .kind("__property__") - .filter(PropertyFilter.ge("__key__", key)) + .filter(PropertyFilter.ge("__key__", key)) .build(); Map> propertiesByKind = new HashMap<>(); QueryResults results = datastore.run(query); From 978e334caa0df04b75c53ab6e44276805316dcf1 Mon Sep 17 00:00:00 2001 From: Ajay Kannan Date: Fri, 19 Feb 2016 16:58:04 -0800 Subject: [PATCH 07/73] Set source/target to jdk 1.7 and use latest gcloud-java release features --- .../google/datastore/snippets/Concepts.java | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java b/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java index 1f6295524..cf07e725d 100644 --- a/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java +++ b/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java @@ -104,7 +104,7 @@ public class Concepts { @BeforeClass public static void beforeClass() throws IOException, InterruptedException { if (!LocalGcdHelper.isActive(PROJECT_ID, PORT)) { - gcdHelper = LocalGcdHelper.start(PROJECT_ID, PORT); + gcdHelper = LocalGcdHelper.start(PROJECT_ID, PORT, 1.0); } } @@ -232,8 +232,8 @@ public void testProperties() { public void testArrayValue() { // [START array_value] Entity task = Entity.builder(taskKey) - .set("tags", StringValue.of("fun"), StringValue.of("programming")) - .set("collaborators", StringValue.of("alice"), StringValue.of("bob")) + .set("tags", "fun", "programming") + .set("collaborators", "alice", "bob") .build(); // [END array_value] assertValidEntity(task); @@ -374,7 +374,7 @@ private void setUpQueryTests() { .set("created", includedDate) .set("percent_complete", 10.0) .set("description", StringValue.builder("Learn Cloud Datastore").indexed(false).build()) - .set("tag", StringValue.of("fun"), StringValue.of("l"), StringValue.of("programming")) + .set("tag", "fun", "l", "programming") .build()); } @@ -748,9 +748,8 @@ public void testUnindexedPropertyQuery() { public void testExplodingProperties() { // [START exploding_properties] Entity task = Entity.builder(taskKey) - .set("tags", StringValue.of("fun"), StringValue.of("programming"), StringValue.of("learn")) - .set("collaborators", StringValue.of("alice"), StringValue.of("bob"), - StringValue.of("charlie")) + .set("tags", "fun", "programming", "learn") + .set("collaborators", "alice", "bob", "charlie") .set("created", DateTime.now()) .build(); // [END exploding_properties] @@ -916,7 +915,7 @@ public void testPropertyRunQuery() { Map> propertiesByKind = new HashMap<>(); while (results.hasNext()) { Key property = results.next(); - String kind = property.ancestors().get(property.ancestors().size() - 1).name(); + String kind = property.parent().name(); String propertyName = property.name(); Collection properties = propertiesByKind.get(kind); if (properties == null) { @@ -945,8 +944,7 @@ public void testPropertyByKindRunQuery() { while (results.hasNext()) { Entity property = results.next(); String propertyName = property.key().name(); - List representations = - (List) property.getList("property_representation"); + List representations = property.getList("property_representation"); Collection currentRepresentations = representationsByProperty.get(propertyName); if (currentRepresentations == null) { currentRepresentations = new HashSet<>(); @@ -985,7 +983,7 @@ public void testPropertyFilteringRunQuery() { QueryResults results = datastore.run(query); while (results.hasNext()) { Key property = results.next(); - String kind = property.ancestors().get(property.ancestors().size() - 1).name(); + String kind = property.parent().name(); String propertyName = property.name(); Collection properties = propertiesByKind.get(kind); if (properties == null) { From e07336cb2c8d715f89bbaabe1425d5f2768dc010 Mon Sep 17 00:00:00 2001 From: Ajay Kannan Date: Mon, 22 Feb 2016 08:08:55 -0800 Subject: [PATCH 08/73] Variable renames --- .../google/datastore/snippets/Concepts.java | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java b/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java index cf07e725d..30954447e 100644 --- a/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java +++ b/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java @@ -911,12 +911,12 @@ public void testPropertyRunQuery() { setUpQueryTests(); // [START property_run_query] Query query = Query.keyQueryBuilder().kind("__property__").build(); - QueryResults results = datastore.run(query); + QueryResults keys = datastore.run(query); Map> propertiesByKind = new HashMap<>(); - while (results.hasNext()) { - Key property = results.next(); - String kind = property.parent().name(); - String propertyName = property.name(); + while (keys.hasNext()) { + Key key = keys.next(); + String kind = key.parent().name(); + String propertyName = key.name(); Collection properties = propertiesByKind.get(kind); if (properties == null) { properties = new HashSet<>(); @@ -942,9 +942,9 @@ public void testPropertyByKindRunQuery() { QueryResults results = datastore.run(query); Map> representationsByProperty = new HashMap<>(); while (results.hasNext()) { - Entity property = results.next(); - String propertyName = property.key().name(); - List representations = property.getList("property_representation"); + Entity result = results.next(); + String propertyName = result.key().name(); + List representations = result.getList("property_representation"); Collection currentRepresentations = representationsByProperty.get(propertyName); if (currentRepresentations == null) { currentRepresentations = new HashSet<>(); @@ -971,20 +971,20 @@ public void testPropertyByKindRunQuery() { public void testPropertyFilteringRunQuery() { setUpQueryTests(); // [START property_filtering_run_query] - Key key = datastore.newKeyFactory() + Key startKey = datastore.newKeyFactory() .kind("__property__") .ancestors(PathElement.of("__kind__", "Task")) .newKey("priority"); Query query = Query.keyQueryBuilder() .kind("__property__") - .filter(PropertyFilter.ge("__key__", key)) + .filter(PropertyFilter.ge("__key__", startKey)) .build(); Map> propertiesByKind = new HashMap<>(); - QueryResults results = datastore.run(query); - while (results.hasNext()) { - Key property = results.next(); - String kind = property.parent().name(); - String propertyName = property.name(); + QueryResults keys = datastore.run(query); + while (keys.hasNext()) { + Key key = keys.next(); + String kind = key.parent().name(); + String propertyName = key.name(); Collection properties = propertiesByKind.get(kind); if (properties == null) { properties = new HashSet(); From 6a4406152af39e065d4de09617b0bade239f44b9 Mon Sep 17 00:00:00 2001 From: Ajay Kannan Date: Thu, 31 Mar 2016 16:52:48 -0700 Subject: [PATCH 09/73] Changes for v1beta3 --- .../google/datastore/snippets/Concepts.java | 26 ++++++++++++------- .../google/datastore/snippets/TaskList.java | 2 +- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java b/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java index 30954447e..67d32a11c 100644 --- a/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java +++ b/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java @@ -43,11 +43,11 @@ import com.google.gcloud.datastore.Query; import com.google.gcloud.datastore.Query.ResultType; import com.google.gcloud.datastore.QueryResults; +import com.google.gcloud.datastore.ReadOption; import com.google.gcloud.datastore.StringValue; import com.google.gcloud.datastore.StructuredQuery; import com.google.gcloud.datastore.StructuredQuery.CompositeFilter; import com.google.gcloud.datastore.StructuredQuery.OrderBy; -import com.google.gcloud.datastore.StructuredQuery.Projection; import com.google.gcloud.datastore.StructuredQuery.PropertyFilter; import com.google.gcloud.datastore.Transaction; import com.google.gcloud.datastore.testing.LocalGcdHelper; @@ -373,7 +373,8 @@ private void setUpQueryTests() { .set("priority", 4) .set("created", includedDate) .set("percent_complete", 10.0) - .set("description", StringValue.builder("Learn Cloud Datastore").indexed(false).build()) + .set("description", + StringValue.builder("Learn Cloud Datastore").excludeFromIndexes(true).build()) .set("tag", "fun", "l", "programming") .build()); } @@ -512,7 +513,7 @@ public void testProjectionQuery() { // [START projection_query] Query query = Query.projectionEntityQueryBuilder() .kind("Task") - .projection(Projection.property("priority"), Projection.property("percent_complete")) + .projection("priority", "percent_complete") .build(); // [END projection_query] assertValidQuery(query); @@ -523,7 +524,7 @@ public void testRunProjectionQuery() { setUpQueryTests(); Query query = Query.projectionEntityQueryBuilder() .kind("Task") - .projection(Projection.property("priority"), Projection.property("percent_complete")) + .projection("priority", "percent_complete") .build(); // [START run_query_projection] List priorities = new LinkedList<>(); @@ -565,8 +566,8 @@ public void testDistinctQuery() { // [START distinct_query] Query query = Query.projectionEntityQueryBuilder() .kind("Task") - .projection(Projection.property("type"), Projection.property("priority")) - .groupBy("type", "priority") + .projection("type", "priority") + .distinctOn("type", "priority") .orderBy(OrderBy.asc("type"), OrderBy.asc("priority")) .build(); // [END distinct_query] @@ -579,8 +580,8 @@ public void testDistinctOnQuery() { // [START distinct_on_query] Query query = Query.projectionEntityQueryBuilder() .kind("Task") - .projection(Projection.property("type"), Projection.first("priority")) - .groupBy("type") + .projection("type", "priority") + .distinctOn("type") .orderBy(OrderBy.asc("type"), OrderBy.asc("priority")) .build(); // [END distinct_on_query] @@ -726,9 +727,16 @@ private Cursor cursorPaging(int pageSize, Cursor pageCursor) { @Test public void testEventualConsistentQuery() { + setUpQueryTests(); // [START eventual_consistent_query] - // Read consistency cannot be specified in gcloud-java. + Query query = Query.entityQueryBuilder() + .kind("Task") + .filter(PropertyFilter.hasAncestor( + datastore.newKeyFactory().kind("TaskList").newKey("default"))) + .build(); + datastore.run(query, ReadOption.eventualConsistency()); // [END eventual_consistent_query] + assertValidQuery(query); } @Test diff --git a/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java b/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java index 40920e291..b26ea4fc1 100644 --- a/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java +++ b/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java @@ -56,7 +56,7 @@ public class TaskList { Key addTask(String description) { Key key = datastore.allocateId(keyFactory.newKey()); Entity task = Entity.builder(key) - .set("description", StringValue.builder(description).indexed(false).build()) + .set("description", StringValue.builder(description).excludeFromIndexes(true).build()) .set("created", DateTime.now()) .set("done", false) .build(); From a17f2c134bb804900d2e4f034453039bdc1c416e Mon Sep 17 00:00:00 2001 From: Ajay Kannan Date: Fri, 1 Apr 2016 18:18:44 -0700 Subject: [PATCH 10/73] Cleanup error handling/docs in TaskList --- .../google/datastore/snippets/TaskList.java | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java b/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java index b26ea4fc1..aa38b1191 100644 --- a/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java +++ b/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java @@ -17,7 +17,6 @@ package com.google.datastore.snippets; import com.google.gcloud.datastore.Datastore; -import com.google.gcloud.datastore.DatastoreException; import com.google.gcloud.datastore.DatastoreOptions; import com.google.gcloud.datastore.DateTime; import com.google.gcloud.datastore.Entity; @@ -51,7 +50,8 @@ public class TaskList { * Adds a task entity to the Datastore. * * @param description The task description - * @return The {@link Key} of the entity. + * @return The {@link Key} of the entity + * @throws DatastoreException if the Datastore put fails */ Key addTask(String description) { Key key = datastore.allocateId(keyFactory.newKey()); @@ -70,14 +70,18 @@ Key addTask(String description) { * Marks a task entity as done. * * @param id The ID of the task entity as given by {@link Key#id()} - * @throws DatastoreException if the task does not exist + * @return true if the task was found, false if not + * @throws DatastoreException if the transaction commit fails */ - void markDone(long id) { + boolean markDone(long id) { Transaction transaction = datastore.newTransaction(); try { Entity task = transaction.get(keyFactory.newKey(id)); - transaction.put(Entity.builder(task).set("done", true).build()); + if (task != null) { + transaction.put(Entity.builder(task).set("done", true).build()); + } transaction.commit(); + return task != null; } finally { if (transaction.active()) { transaction.rollback(); @@ -89,6 +93,8 @@ void markDone(long id) { // [START retrieve_entities] /** * Returns a list of all task entities in ascending order of creation time. + * + * @throws DatastoreException if the query fails */ Iterator listTasks() { Query query = @@ -102,6 +108,7 @@ Iterator listTasks() { * Deletes a task entity. * * @param id The ID of the task entity as given by {@link Key#id()} + * @throws DatastoreException if the delete fails */ void deleteTask(long id) { datastore.delete(keyFactory.newKey(id)); @@ -158,10 +165,9 @@ void handleCommandLine(String commandLine) { case "done": assertArgsLength(args, 2); long id = Long.parseLong(args[1]); - try { - markDone(id); + if (markDone(id)) { System.out.println("task marked done"); - } catch (DatastoreException e) { + } else { System.out.printf("did not find a Task entity with ID %d%n", id); } break; @@ -178,7 +184,7 @@ void handleCommandLine(String commandLine) { case "delete": assertArgsLength(args, 2); deleteTask(Long.parseLong(args[1])); - System.out.println("task deleted"); + System.out.println("task deleted (if it existed)"); break; default: throw new IllegalArgumentException("unrecognized command: " + command); From 5aade877d965145e2f2b11f7aaf970af14cddd75 Mon Sep 17 00:00:00 2001 From: Ajay Kannan Date: Sat, 2 Apr 2016 09:06:45 -0700 Subject: [PATCH 11/73] Correct throws statements --- .../src/main/java/com/google/datastore/snippets/TaskList.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java b/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java index aa38b1191..371d41e35 100644 --- a/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java +++ b/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java @@ -51,7 +51,7 @@ public class TaskList { * * @param description The task description * @return The {@link Key} of the entity - * @throws DatastoreException if the Datastore put fails + * @throws DatastoreException if the ID allocation or put fails */ Key addTask(String description) { Key key = datastore.allocateId(keyFactory.newKey()); @@ -71,7 +71,7 @@ Key addTask(String description) { * * @param id The ID of the task entity as given by {@link Key#id()} * @return true if the task was found, false if not - * @throws DatastoreException if the transaction commit fails + * @throws DatastoreException if the transaction fails */ boolean markDone(long id) { Transaction transaction = datastore.newTransaction(); From df73bbee8aab8f3f5ca777f208f04c4234ad2e55 Mon Sep 17 00:00:00 2001 From: Ajay Kannan Date: Tue, 12 Apr 2016 13:11:42 -0700 Subject: [PATCH 12/73] Update gcloud-java dependency and imports --- .../google/datastore/snippets/Concepts.java | 66 ++++++++----------- .../google/datastore/snippets/TaskList.java | 20 +++--- 2 files changed, 37 insertions(+), 49 deletions(-) diff --git a/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java b/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java index 67d32a11c..1817cee78 100644 --- a/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java +++ b/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java @@ -23,34 +23,33 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; +import com.google.cloud.datastore.Cursor; +import com.google.cloud.datastore.Datastore; +import com.google.cloud.datastore.DatastoreException; +import com.google.cloud.datastore.DateTime; +import com.google.cloud.datastore.Entity; +import com.google.cloud.datastore.EntityQuery; +import com.google.cloud.datastore.FullEntity; +import com.google.cloud.datastore.IncompleteKey; +import com.google.cloud.datastore.Key; +import com.google.cloud.datastore.KeyFactory; +import com.google.cloud.datastore.PathElement; +import com.google.cloud.datastore.ProjectionEntity; +import com.google.cloud.datastore.Query; +import com.google.cloud.datastore.Query.ResultType; +import com.google.cloud.datastore.QueryResults; +import com.google.cloud.datastore.ReadOption; +import com.google.cloud.datastore.StringValue; +import com.google.cloud.datastore.StructuredQuery; +import com.google.cloud.datastore.StructuredQuery.CompositeFilter; +import com.google.cloud.datastore.StructuredQuery.OrderBy; +import com.google.cloud.datastore.StructuredQuery.PropertyFilter; +import com.google.cloud.datastore.Transaction; +import com.google.cloud.datastore.testing.LocalDatastoreHelper; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterators; -import com.google.gcloud.datastore.Cursor; -import com.google.gcloud.datastore.Datastore; -import com.google.gcloud.datastore.DatastoreException; -import com.google.gcloud.datastore.DatastoreOptions; -import com.google.gcloud.datastore.DateTime; -import com.google.gcloud.datastore.Entity; -import com.google.gcloud.datastore.EntityQuery; -import com.google.gcloud.datastore.FullEntity; -import com.google.gcloud.datastore.IncompleteKey; -import com.google.gcloud.datastore.Key; -import com.google.gcloud.datastore.KeyFactory; -import com.google.gcloud.datastore.PathElement; -import com.google.gcloud.datastore.ProjectionEntity; -import com.google.gcloud.datastore.Query; -import com.google.gcloud.datastore.Query.ResultType; -import com.google.gcloud.datastore.QueryResults; -import com.google.gcloud.datastore.ReadOption; -import com.google.gcloud.datastore.StringValue; -import com.google.gcloud.datastore.StructuredQuery; -import com.google.gcloud.datastore.StructuredQuery.CompositeFilter; -import com.google.gcloud.datastore.StructuredQuery.OrderBy; -import com.google.gcloud.datastore.StructuredQuery.PropertyFilter; -import com.google.gcloud.datastore.Transaction; -import com.google.gcloud.datastore.testing.LocalGcdHelper; import org.junit.AfterClass; import org.junit.Before; @@ -79,9 +78,7 @@ */ public class Concepts { - private static final String PROJECT_ID = LocalGcdHelper.DEFAULT_PROJECT_ID; - private static LocalGcdHelper gcdHelper; - private static final int PORT = LocalGcdHelper.findAvailablePort(LocalGcdHelper.DEFAULT_PORT); + private static final LocalDatastoreHelper HELPER = LocalDatastoreHelper.create(1.0); private static final FullEntity TEST_FULL_ENTITY = FullEntity.builder().build(); private Datastore datastore; @@ -103,9 +100,7 @@ public class Concepts { */ @BeforeClass public static void beforeClass() throws IOException, InterruptedException { - if (!LocalGcdHelper.isActive(PROJECT_ID, PORT)) { - gcdHelper = LocalGcdHelper.start(PROJECT_ID, PORT, 1.0); - } + HELPER.start(); } /** @@ -114,12 +109,7 @@ public static void beforeClass() throws IOException, InterruptedException { */ @Before public void setUp() { - datastore = DatastoreOptions.builder() - .projectId(PROJECT_ID) - .namespace("ghijklmnop") - .host("http://localhost:" + PORT) - .build() - .service(); + datastore = HELPER.options().toBuilder().namespace("ghijklmnop").build().service(); StructuredQuery query = Query.keyQueryBuilder().build(); QueryResults result = datastore.run(query); datastore.delete(Iterators.toArray(result, Key.class)); @@ -143,9 +133,7 @@ public void setUp() { */ @AfterClass public static void afterClass() throws IOException, InterruptedException { - if (gcdHelper != null) { - gcdHelper.stop(); - } + HELPER.stop(); } private void assertValidKey(Key taskKey) { diff --git a/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java b/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java index 371d41e35..8ff5b5305 100644 --- a/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java +++ b/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java @@ -16,16 +16,16 @@ package com.google.datastore.snippets; -import com.google.gcloud.datastore.Datastore; -import com.google.gcloud.datastore.DatastoreOptions; -import com.google.gcloud.datastore.DateTime; -import com.google.gcloud.datastore.Entity; -import com.google.gcloud.datastore.Key; -import com.google.gcloud.datastore.KeyFactory; -import com.google.gcloud.datastore.Query; -import com.google.gcloud.datastore.StringValue; -import com.google.gcloud.datastore.StructuredQuery.OrderBy; -import com.google.gcloud.datastore.Transaction; +import com.google.cloud.datastore.Datastore; +import com.google.cloud.datastore.DatastoreOptions; +import com.google.cloud.datastore.DateTime; +import com.google.cloud.datastore.Entity; +import com.google.cloud.datastore.Key; +import com.google.cloud.datastore.KeyFactory; +import com.google.cloud.datastore.Query; +import com.google.cloud.datastore.StringValue; +import com.google.cloud.datastore.StructuredQuery.OrderBy; +import com.google.cloud.datastore.Transaction; import java.util.ArrayList; import java.util.Iterator; From 9830715f50fdbe5c5858695906837e877b18a577 Mon Sep 17 00:00:00 2001 From: Walter Poupore Date: Tue, 12 Jul 2016 10:18:45 -0700 Subject: [PATCH 13/73] Excluded a property from the index (#270) * Excluded a property from the index For doc purposes * Update Concepts.java --- .../src/main/java/com/google/datastore/snippets/Concepts.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java b/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java index 1817cee78..2a666b26a 100644 --- a/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java +++ b/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java @@ -210,7 +210,8 @@ public void testProperties() { .set("done", false) .set("priority", 4) .set("percent_complete", 10.0) - .set("description", "Learn Cloud Datastore") + .set("description", + StringValue.builder("Learn Cloud Datastore").excludeFromIndexes(true).build()) .build(); // [END properties] assertValidEntity(task); From 15fe82df484b8968f37938141bcd72e29bb586ee Mon Sep 17 00:00:00 2001 From: Walter Poupore Date: Mon, 15 Aug 2016 19:16:28 -0700 Subject: [PATCH 14/73] Changes property name (#294) * Uses 'category' instead of 'type' as a property name * 'type' > 'category' --- .../google/datastore/snippets/Concepts.java | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java b/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java index 2a666b26a..b29cb890c 100644 --- a/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java +++ b/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java @@ -192,7 +192,7 @@ public void testEntityWithParent() { .kind("Task") .newKey("sampleTask"); Entity task = Entity.builder(taskKey) - .set("type", "Personal") + .set("category", "Personal") .set("done", false) .set("priority", 4) .set("description", "Learn Cloud Datastore") @@ -205,7 +205,7 @@ public void testEntityWithParent() { public void testProperties() { // [START properties] Entity task = Entity.builder(taskKey) - .set("type", "Personal") + .set("category", "Personal") .set("created", DateTime.now()) .set("done", false) .set("priority", 4) @@ -232,7 +232,7 @@ public void testArrayValue() { public void testBasicEntity() { // [START basic_entity] Entity task = Entity.builder(taskKey) - .set("type", "Personal") + .set("category", "Personal") .set("done", false) .set("priority", 4) .set("description", "Learn Cloud Datastore") @@ -288,13 +288,13 @@ public void testDelete() { private List setUpBatchTests(Key taskKey1, Key taskKey2) { Entity task1 = Entity.builder(taskKey1) - .set("type", "Personal") + .set("category", "Personal") .set("done", false) .set("priority", 4) .set("description", "Learn Cloud Datastore") .build(); Entity task2 = Entity.builder(taskKey2) - .set("type", "Personal") + .set("category", "Personal") .set("done", false) .set("priority", 5) .set("description", "Integrate Cloud Datastore") @@ -307,13 +307,13 @@ private List setUpBatchTests(Key taskKey1, Key taskKey2) { public void testBatchUpsert() { // [START batch_upsert] FullEntity task1 = FullEntity.builder(keyFactory.newKey()) - .set("type", "Personal") + .set("category", "Personal") .set("done", false) .set("priority", 4) .set("description", "Learn Cloud Datastore") .build(); FullEntity task2 = Entity.builder(keyFactory.newKey()) - .set("type", "Personal") + .set("category", "Personal") .set("done", false) .set("priority", 5) .set("description", "Integrate Cloud Datastore") @@ -356,7 +356,7 @@ private void setUpQueryTests() { .ancestors(PathElement.of("TaskList", "default")) .newKey("someTask"); datastore.put(Entity.builder(taskKey) - .set("type", "Personal") + .set("category", "Personal") .set("done", false) .set("completed", false) .set("priority", 4) @@ -555,9 +555,9 @@ public void testDistinctQuery() { // [START distinct_query] Query query = Query.projectionEntityQueryBuilder() .kind("Task") - .projection("type", "priority") - .distinctOn("type", "priority") - .orderBy(OrderBy.asc("type"), OrderBy.asc("priority")) + .projection("category", "priority") + .distinctOn("category", "priority") + .orderBy(OrderBy.asc("category"), OrderBy.asc("priority")) .build(); // [END distinct_query] assertValidQuery(query); @@ -569,9 +569,9 @@ public void testDistinctOnQuery() { // [START distinct_on_query] Query query = Query.projectionEntityQueryBuilder() .kind("Task") - .projection("type", "priority") - .distinctOn("type") - .orderBy(OrderBy.asc("type"), OrderBy.asc("priority")) + .projection("category", "priority") + .distinctOn("category") + .orderBy(OrderBy.asc("category"), OrderBy.asc("priority")) .build(); // [END distinct_on_query] assertValidQuery(query); @@ -923,7 +923,7 @@ public void testPropertyRunQuery() { } // [END property_run_query] Map> expected = ImmutableMap.of("Task", ImmutableSet.of( - "done", "type", "done", "completed", "priority", "created", "percent_complete", "tag")); + "done", "category", "done", "completed", "priority", "created", "percent_complete", "tag")); assertEquals(expected, propertiesByKind); } @@ -953,7 +953,7 @@ public void testPropertyByKindRunQuery() { } // [END property_by_kind_run_query] Map> expected = ImmutableMap.>builder() - .put("type", Collections.singleton("STRING")) + .put("category", Collections.singleton("STRING")) .put("done", Collections.singleton("BOOLEAN")) .put("completed", Collections.singleton("BOOLEAN")) .put("priority", Collections.singleton("INT64")) @@ -991,7 +991,7 @@ public void testPropertyFilteringRunQuery() { } // [END property_filtering_run_query] Map> expected = - ImmutableMap.of("Task", ImmutableSet.of("priority", "tag", "type")); + ImmutableMap.of("Task", ImmutableSet.of("priority", "tag", "category")); assertEquals(expected, propertiesByKind); } From 26904dfb2a9b21202bc22f931f64761cfacd65ff Mon Sep 17 00:00:00 2001 From: Tim Swast Date: Fri, 2 Sep 2016 10:56:59 -0700 Subject: [PATCH 15/73] datastore: Remove broken link in Concepts.java Fixes #325. --- .../src/main/java/com/google/datastore/snippets/Concepts.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java b/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java index b29cb890c..78c773eee 100644 --- a/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java +++ b/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java @@ -72,9 +72,7 @@ import java.util.TimeZone; /** - * Contains Cloud Datastore snippets linked from the Concepts documentation. - * - * @see Key Datastore Concepts + * Contains Cloud Datastore snippets demonstrating concepts for documentation. */ public class Concepts { From 731524ebbc7f1493622e083b1d0ff7c673ae370a Mon Sep 17 00:00:00 2001 From: Jason Dobry Date: Thu, 6 Oct 2016 16:31:51 -0700 Subject: [PATCH 16/73] Add Datastore quickstart sample. --- .../example/datastore/QuickstartSample.java | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java diff --git a/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java b/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java new file mode 100644 index 000000000..f595a391f --- /dev/null +++ b/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java @@ -0,0 +1,46 @@ +/* + Copyright 2016, Google, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package com.example.datastore; + +// [START bigquery_quickstart] +// Imports the Google Cloud client library +import com.google.cloud.datastore.Datastore; +import com.google.cloud.datastore.DatastoreOptions; +import com.google.cloud.datastore.Entity; +import com.google.cloud.datastore.Key; +import com.google.cloud.datastore.KeyFactory; + +public class QuickstartSample { + public static void main(String... args) throws Exception { + // Instantiates a client + Datastore datastore = DatastoreOptions.defaultInstance().service(); + // The kind for the new entity + String kind = "Task"; + // The name/ID for the new entity + String name = "sampletask1"; + // The Cloud Datastore key for the new entity + Key taskKey = datastore.newKeyFactory().kind(kind).newKey(name); + // Prepares the new entity + Entity task = Entity.builder(taskKey) + .set("description", "Buy milk") + .build(); + // Saves the entity + datastore.put(task); + System.out.printf("Saved %s: %s%n", task.key().name(), task.getString("description")); + } +} +// [END bigquery_quickstart] From 53c3733de9d495d2a1f37d9782dee8f7e71de9f1 Mon Sep 17 00:00:00 2001 From: Jason Dobry Date: Thu, 6 Oct 2016 16:34:15 -0700 Subject: [PATCH 17/73] Remove import. --- .../src/main/java/com/example/datastore/QuickstartSample.java | 1 - 1 file changed, 1 deletion(-) diff --git a/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java b/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java index f595a391f..d2a85856f 100644 --- a/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java +++ b/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java @@ -22,7 +22,6 @@ import com.google.cloud.datastore.DatastoreOptions; import com.google.cloud.datastore.Entity; import com.google.cloud.datastore.Key; -import com.google.cloud.datastore.KeyFactory; public class QuickstartSample { public static void main(String... args) throws Exception { From 617be64bd36874b856be8f1db6a5afcd1c127ae6 Mon Sep 17 00:00:00 2001 From: Jason Dobry Date: Thu, 6 Oct 2016 16:34:59 -0700 Subject: [PATCH 18/73] Fixed region tag. --- .../src/main/java/com/example/datastore/QuickstartSample.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java b/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java index d2a85856f..51704ffd8 100644 --- a/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java +++ b/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java @@ -16,7 +16,7 @@ package com.example.datastore; -// [START bigquery_quickstart] +// [START datastore_quickstart] // Imports the Google Cloud client library import com.google.cloud.datastore.Datastore; import com.google.cloud.datastore.DatastoreOptions; @@ -42,4 +42,4 @@ public static void main(String... args) throws Exception { System.out.printf("Saved %s: %s%n", task.key().name(), task.getString("description")); } } -// [END bigquery_quickstart] +// [END datastore_quickstart] From f2d29ec964e1d2e0f20d8372c73ae80e87dc442f Mon Sep 17 00:00:00 2001 From: Jason Dobry Date: Fri, 7 Oct 2016 10:23:52 -0700 Subject: [PATCH 19/73] Add Storage quickstart sample. --- .../src/main/java/com/example/datastore/QuickstartSample.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java b/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java index 51704ffd8..397e842d5 100644 --- a/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java +++ b/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java @@ -27,18 +27,22 @@ public class QuickstartSample { public static void main(String... args) throws Exception { // Instantiates a client Datastore datastore = DatastoreOptions.defaultInstance().service(); + // The kind for the new entity String kind = "Task"; // The name/ID for the new entity String name = "sampletask1"; // The Cloud Datastore key for the new entity Key taskKey = datastore.newKeyFactory().kind(kind).newKey(name); + // Prepares the new entity Entity task = Entity.builder(taskKey) .set("description", "Buy milk") .build(); + // Saves the entity datastore.put(task); + System.out.printf("Saved %s: %s%n", task.key().name(), task.getString("description")); } } From 28f4c924397cfd4629c529c493b5025107b023cc Mon Sep 17 00:00:00 2001 From: Tim Swast Date: Mon, 24 Oct 2016 17:29:58 -0700 Subject: [PATCH 20/73] Add integration tests for Datastore quickstart. --- .../example/datastore/QuickstartSample.java | 4 +- .../example/datastore/QuickstartSampleIT.java | 72 +++++++++++++++++++ 2 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 samples/snippets/src/test/java/com/example/datastore/QuickstartSampleIT.java diff --git a/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java b/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java index 397e842d5..1864a1e8f 100644 --- a/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java +++ b/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java @@ -37,8 +37,8 @@ public static void main(String... args) throws Exception { // Prepares the new entity Entity task = Entity.builder(taskKey) - .set("description", "Buy milk") - .build(); + .set("description", "Buy milk") + .build(); // Saves the entity datastore.put(task); diff --git a/samples/snippets/src/test/java/com/example/datastore/QuickstartSampleIT.java b/samples/snippets/src/test/java/com/example/datastore/QuickstartSampleIT.java new file mode 100644 index 000000000..cd7d8adc0 --- /dev/null +++ b/samples/snippets/src/test/java/com/example/datastore/QuickstartSampleIT.java @@ -0,0 +1,72 @@ +/* + Copyright 2016, Google, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package com.example.datastore; + +import static com.google.common.truth.Truth.assertThat; + +import com.google.cloud.datastore.Datastore; +import com.google.cloud.datastore.DatastoreOptions; +import com.google.cloud.datastore.Key; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; + +/** + * Tests for quickstart sample. + */ +@RunWith(JUnit4.class) +@SuppressWarnings("checkstyle:abbreviationaswordinname") +public class QuickstartSampleIT { + private ByteArrayOutputStream bout; + private PrintStream out; + + private static final void deleteTestEntity() { + Datastore datastore = DatastoreOptions.defaultInstance().service(); + String kind = "Task"; + String name = "sampletask1"; + Key taskKey = datastore.newKeyFactory().kind(kind).newKey(name); + datastore.delete(taskKey); + } + + @Before + public void setUp() { + deleteTestEntity(); + + bout = new ByteArrayOutputStream(); + out = new PrintStream(bout); + System.setOut(out); + } + + @After + public void tearDown() { + System.setOut(null); + deleteTestEntity(); + } + + @Test + public void testQuickstart() throws Exception { + QuickstartSample.main(); + String got = bout.toString(); + assertThat(got).contains("Saved sampletask1: Buy milk"); + } +} +// [END datastore_quickstart] From fffec057aed36b9007b486926ccfaabb5804e078 Mon Sep 17 00:00:00 2001 From: Tim Swast Date: Wed, 26 Oct 2016 16:16:22 -0700 Subject: [PATCH 21/73] Move Datastore concepts to test directory so the tests actually run. --- .../java/com/google/datastore/snippets/Concepts.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename samples/snippets/src/{main => test}/java/com/google/datastore/snippets/Concepts.java (100%) diff --git a/samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java b/samples/snippets/src/test/java/com/google/datastore/snippets/Concepts.java similarity index 100% rename from samples/snippets/src/main/java/com/google/datastore/snippets/Concepts.java rename to samples/snippets/src/test/java/com/google/datastore/snippets/Concepts.java From ea193477662510852294a282353d17e5fa22b790 Mon Sep 17 00:00:00 2001 From: Tim Swast Date: Thu, 27 Oct 2016 09:40:48 -0700 Subject: [PATCH 22/73] Rename Concepts.java and add runWith so tests run Also, some a test was failing, so I changed it's assertion to match what was actually getting returned. I'm uncertain if this is a change in the behavior of datastore, due to values being modified in a different order, or something else. --- .../snippets/{Concepts.java => ConceptsTest.java} | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) rename samples/snippets/src/test/java/com/google/datastore/snippets/{Concepts.java => ConceptsTest.java} (99%) diff --git a/samples/snippets/src/test/java/com/google/datastore/snippets/Concepts.java b/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java similarity index 99% rename from samples/snippets/src/test/java/com/google/datastore/snippets/Concepts.java rename to samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java index 78c773eee..764fa1338 100644 --- a/samples/snippets/src/test/java/com/google/datastore/snippets/Concepts.java +++ b/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java @@ -57,6 +57,8 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; import java.io.IOException; import java.util.ArrayList; @@ -74,7 +76,8 @@ /** * Contains Cloud Datastore snippets demonstrating concepts for documentation. */ -public class Concepts { +@RunWith(JUnit4.class) +public class ConceptsTest { private static final LocalDatastoreHelper HELPER = LocalDatastoreHelper.create(1.0); private static final FullEntity TEST_FULL_ENTITY = FullEntity.builder().build(); @@ -989,7 +992,7 @@ public void testPropertyFilteringRunQuery() { } // [END property_filtering_run_query] Map> expected = - ImmutableMap.of("Task", ImmutableSet.of("priority", "tag", "category")); + ImmutableMap.of("Task", ImmutableSet.of("priority", "tag")); assertEquals(expected, propertiesByKind); } From 4354a4b01c128a5a113305c432d51673783697f6 Mon Sep 17 00:00:00 2001 From: Tim Swast Date: Fri, 28 Oct 2016 12:45:59 -0700 Subject: [PATCH 23/73] Remove references to gcloud-java. We were still using the old artifactId in some pom.xml files, so dpebot could not update these. Also, some READMEs needed updating from my grep search. --- .../test/java/com/google/datastore/snippets/ConceptsTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java b/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java index 764fa1338..b518ffb53 100644 --- a/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java +++ b/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java @@ -813,7 +813,7 @@ public void testTransactionalRetry() { --retries; } } - // Retry handling can also be configured and automatically applied using gcloud-java. + // Retry handling can also be configured and automatically applied using google-cloud-java. // [END transactional_retry] assertSuccessfulTransfer(keys.get(0), keys.get(1)); } From efab0afa01c7e42ea4eb2881a1b8b3dbd556cf3f Mon Sep 17 00:00:00 2001 From: Guillaume Laforge Date: Mon, 7 Nov 2016 20:29:21 +0100 Subject: [PATCH 24/73] Use getters for DatastoreOptions and the Datastore service (#401) `defaultInstance()` and `service()` seem to be deprecated in favor of `getDefaultInstance()` and `getService()` --- .../src/main/java/com/example/datastore/QuickstartSample.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java b/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java index 1864a1e8f..f163222af 100644 --- a/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java +++ b/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java @@ -26,7 +26,7 @@ public class QuickstartSample { public static void main(String... args) throws Exception { // Instantiates a client - Datastore datastore = DatastoreOptions.defaultInstance().service(); + Datastore datastore = DatastoreOptions.getDefaultInstance().getService(); // The kind for the new entity String kind = "Task"; From b0d0d68ba5eb224f9ba04a9d049cae2ce2bf00fc Mon Sep 17 00:00:00 2001 From: Guillaume Laforge Date: Mon, 7 Nov 2016 20:29:21 +0100 Subject: [PATCH 25/73] Use getters for DatastoreOptions and the Datastore service (#401) `defaultInstance()` and `service()` seem to be deprecated in favor of `getDefaultInstance()` and `getService()` --- .../src/main/java/com/example/datastore/QuickstartSample.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java b/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java index 1864a1e8f..f163222af 100644 --- a/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java +++ b/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java @@ -26,7 +26,7 @@ public class QuickstartSample { public static void main(String... args) throws Exception { // Instantiates a client - Datastore datastore = DatastoreOptions.defaultInstance().service(); + Datastore datastore = DatastoreOptions.getDefaultInstance().getService(); // The kind for the new entity String kind = "Task"; From b2a00d5fd1b1ab3d616f98c6b4bf19c6b09eff13 Mon Sep 17 00:00:00 2001 From: Jerjou Date: Tue, 29 Nov 2016 20:43:49 -0800 Subject: [PATCH 26/73] deprecated methods -> undeprecated versions. (#428) --- .../main/java/com/example/datastore/QuickstartSample.java | 6 +++--- .../test/java/com/example/datastore/QuickstartSampleIT.java | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java b/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java index f163222af..a8e0614fe 100644 --- a/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java +++ b/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java @@ -33,17 +33,17 @@ public static void main(String... args) throws Exception { // The name/ID for the new entity String name = "sampletask1"; // The Cloud Datastore key for the new entity - Key taskKey = datastore.newKeyFactory().kind(kind).newKey(name); + Key taskKey = datastore.newKeyFactory().setKind(kind).newKey(name); // Prepares the new entity - Entity task = Entity.builder(taskKey) + Entity task = Entity.newBuilder(taskKey) .set("description", "Buy milk") .build(); // Saves the entity datastore.put(task); - System.out.printf("Saved %s: %s%n", task.key().name(), task.getString("description")); + System.out.printf("Saved %s: %s%n", task.getKey().getName(), task.getString("description")); } } // [END datastore_quickstart] diff --git a/samples/snippets/src/test/java/com/example/datastore/QuickstartSampleIT.java b/samples/snippets/src/test/java/com/example/datastore/QuickstartSampleIT.java index cd7d8adc0..8257a2082 100644 --- a/samples/snippets/src/test/java/com/example/datastore/QuickstartSampleIT.java +++ b/samples/snippets/src/test/java/com/example/datastore/QuickstartSampleIT.java @@ -40,10 +40,10 @@ public class QuickstartSampleIT { private PrintStream out; private static final void deleteTestEntity() { - Datastore datastore = DatastoreOptions.defaultInstance().service(); + Datastore datastore = DatastoreOptions.getDefaultInstance().getService(); String kind = "Task"; String name = "sampletask1"; - Key taskKey = datastore.newKeyFactory().kind(kind).newKey(name); + Key taskKey = datastore.newKeyFactory().setKind(kind).newKey(name); datastore.delete(taskKey); } From 03c5d80a9292e7c576d52b790871be4cab0a0f5b Mon Sep 17 00:00:00 2001 From: Jerjou Date: Tue, 29 Nov 2016 20:43:49 -0800 Subject: [PATCH 27/73] deprecated methods -> undeprecated versions. (#428) --- .../google/datastore/snippets/TaskList.java | 18 +- .../datastore/snippets/ConceptsTest.java | 319 +++++++++--------- 2 files changed, 170 insertions(+), 167 deletions(-) diff --git a/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java b/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java index 8ff5b5305..495864f23 100644 --- a/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java +++ b/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java @@ -39,10 +39,10 @@ public class TaskList { // [START build_service] // Create an authorized Datastore service using Application Default Credentials. - private final Datastore datastore = DatastoreOptions.defaultInstance().service(); + private final Datastore datastore = DatastoreOptions.getDefaultInstance().getService(); // Create a Key factory to construct keys associated with this project. - private final KeyFactory keyFactory = datastore.newKeyFactory().kind("Task"); + private final KeyFactory keyFactory = datastore.newKeyFactory().setKind("Task"); // [END build_service] // [START add_entity] @@ -55,8 +55,8 @@ public class TaskList { */ Key addTask(String description) { Key key = datastore.allocateId(keyFactory.newKey()); - Entity task = Entity.builder(key) - .set("description", StringValue.builder(description).excludeFromIndexes(true).build()) + Entity task = Entity.newBuilder(key) + .set("description", StringValue.newBuilder(description).setExcludeFromIndexes(true).build()) .set("created", DateTime.now()) .set("done", false) .build(); @@ -78,12 +78,12 @@ boolean markDone(long id) { try { Entity task = transaction.get(keyFactory.newKey(id)); if (task != null) { - transaction.put(Entity.builder(task).set("done", true).build()); + transaction.put(Entity.newBuilder(task).set("done", true).build()); } transaction.commit(); return task != null; } finally { - if (transaction.active()) { + if (transaction.isActive()) { transaction.rollback(); } } @@ -98,7 +98,7 @@ boolean markDone(long id) { */ Iterator listTasks() { Query query = - Query.entityQueryBuilder().kind("Task").orderBy(OrderBy.asc("created")).build(); + Query.newEntityQueryBuilder().setKind("Task").setOrderBy(OrderBy.asc("created")).build(); return datastore.run(query); } // [END retrieve_entities] @@ -128,9 +128,9 @@ static List formatTasks(Iterator tasks) { Entity task = tasks.next(); if (task.getBoolean("done")) { strings.add( - String.format("%d : %s (done)", task.key().id(), task.getString("description"))); + String.format("%d : %s (done)", task.getKey().getId(), task.getString("description"))); } else { - strings.add(String.format("%d : %s (created %s)", task.key().id(), + strings.add(String.format("%d : %s (created %s)", task.getKey().getId(), task.getString("description"), task.getDateTime("created"))); } } diff --git a/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java b/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java index b518ffb53..e00b09011 100644 --- a/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java +++ b/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java @@ -80,7 +80,7 @@ public class ConceptsTest { private static final LocalDatastoreHelper HELPER = LocalDatastoreHelper.create(1.0); - private static final FullEntity TEST_FULL_ENTITY = FullEntity.builder().build(); + private static final FullEntity TEST_FULL_ENTITY = FullEntity.newBuilder().build(); private Datastore datastore; private KeyFactory keyFactory; @@ -110,13 +110,13 @@ public static void beforeClass() throws IOException, InterruptedException { */ @Before public void setUp() { - datastore = HELPER.options().toBuilder().namespace("ghijklmnop").build().service(); - StructuredQuery query = Query.keyQueryBuilder().build(); + datastore = HELPER.getOptions().toBuilder().setNamespace("ghijklmnop").build().getService(); + StructuredQuery query = Query.newKeyQueryBuilder().build(); QueryResults result = datastore.run(query); datastore.delete(Iterators.toArray(result, Key.class)); - keyFactory = datastore.newKeyFactory().kind("Task"); + keyFactory = datastore.newKeyFactory().setKind("Task"); taskKey = keyFactory.newKey("some-arbitrary-key"); - testEntity = Entity.builder(taskKey, TEST_FULL_ENTITY).build(); + testEntity = Entity.newBuilder(taskKey, TEST_FULL_ENTITY).build(); Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")); calendar.set(1990, JANUARY, 1); startDate = DateTime.copyFrom(calendar); @@ -138,13 +138,13 @@ public static void afterClass() throws IOException, InterruptedException { } private void assertValidKey(Key taskKey) { - datastore.put(Entity.builder(taskKey, TEST_FULL_ENTITY).build()); + datastore.put(Entity.newBuilder(taskKey, TEST_FULL_ENTITY).build()); } @Test public void testIncompleteKey() { // [START incomplete_key] - KeyFactory keyFactory = datastore.newKeyFactory().kind("Task"); + KeyFactory keyFactory = datastore.newKeyFactory().setKind("Task"); Key taskKey = datastore.allocateId(keyFactory.newKey()); // [END incomplete_key] assertValidKey(taskKey); @@ -153,7 +153,7 @@ public void testIncompleteKey() { @Test public void testNamedKey() { // [START named_key] - Key taskKey = datastore.newKeyFactory().kind("Task").newKey("sampleTask"); + Key taskKey = datastore.newKeyFactory().setKind("Task").newKey("sampleTask"); // [END named_key] assertValidKey(taskKey); } @@ -162,8 +162,8 @@ public void testNamedKey() { public void testKeyWithParent() { // [START key_with_parent] Key taskKey = datastore.newKeyFactory() - .ancestors(PathElement.of("TaskList", "default")) - .kind("Task") + .addAncestors(PathElement.of("TaskList", "default")) + .setKind("Task") .newKey("sampleTask"); // [END key_with_parent] assertValidKey(taskKey); @@ -173,8 +173,8 @@ public void testKeyWithParent() { public void testKeyWithMultilevelParent() { // [START key_with_multilevel_parent] KeyFactory keyFactory = datastore.newKeyFactory() - .ancestors(PathElement.of("User", "Alice"), PathElement.of("TaskList", "default")) - .kind("Task"); + .addAncestors(PathElement.of("User", "Alice"), PathElement.of("TaskList", "default")) + .setKind("Task"); Key taskKey = keyFactory.newKey("sampleTask"); // [END key_with_multilevel_parent] assertValidKey(taskKey); @@ -182,17 +182,17 @@ public void testKeyWithMultilevelParent() { private void assertValidEntity(Entity original) { datastore.put(original); - assertEquals(original, datastore.get(original.key())); + assertEquals(original, datastore.get(original.getKey())); } @Test public void testEntityWithParent() { // [START entity_with_parent] Key taskKey = datastore.newKeyFactory() - .ancestors(PathElement.of("TaskList", "default")) - .kind("Task") + .addAncestors(PathElement.of("TaskList", "default")) + .setKind("Task") .newKey("sampleTask"); - Entity task = Entity.builder(taskKey) + Entity task = Entity.newBuilder(taskKey) .set("category", "Personal") .set("done", false) .set("priority", 4) @@ -205,14 +205,14 @@ public void testEntityWithParent() { @Test public void testProperties() { // [START properties] - Entity task = Entity.builder(taskKey) + Entity task = Entity.newBuilder(taskKey) .set("category", "Personal") .set("created", DateTime.now()) .set("done", false) .set("priority", 4) .set("percent_complete", 10.0) .set("description", - StringValue.builder("Learn Cloud Datastore").excludeFromIndexes(true).build()) + StringValue.newBuilder("Learn Cloud Datastore").setExcludeFromIndexes(true).build()) .build(); // [END properties] assertValidEntity(task); @@ -221,7 +221,7 @@ public void testProperties() { @Test public void testArrayValue() { // [START array_value] - Entity task = Entity.builder(taskKey) + Entity task = Entity.newBuilder(taskKey) .set("tags", "fun", "programming") .set("collaborators", "alice", "bob") .build(); @@ -232,7 +232,7 @@ public void testArrayValue() { @Test public void testBasicEntity() { // [START basic_entity] - Entity task = Entity.builder(taskKey) + Entity task = Entity.newBuilder(taskKey) .set("category", "Personal") .set("done", false) .set("priority", 4) @@ -245,18 +245,18 @@ public void testBasicEntity() { @Test public void testUpsert() { // [START upsert] - Entity task = Entity.builder(keyFactory.newKey("sampleTask")).build(); + Entity task = Entity.newBuilder(keyFactory.newKey("sampleTask")).build(); datastore.put(task); // [END upsert] - assertEquals(task, datastore.get(task.key())); + assertEquals(task, datastore.get(task.getKey())); } @Test public void testInsert() { // [START insert] - Key taskKey = datastore.add(FullEntity.builder(keyFactory.newKey()).build()).key(); + Key taskKey = datastore.add(FullEntity.newBuilder(keyFactory.newKey()).build()).getKey(); // [END insert] - assertEquals(FullEntity.builder(taskKey).build(), datastore.get(taskKey)); + assertEquals(FullEntity.newBuilder(taskKey).build(), datastore.get(taskKey)); } @Test @@ -272,7 +272,7 @@ public void testLookup() { public void testUpdate() { datastore.put(testEntity); // [START update] - Entity task = Entity.builder(datastore.get(taskKey)).set("priority", 5).build(); + Entity task = Entity.newBuilder(datastore.get(taskKey)).set("priority", 5).build(); datastore.update(task); // [END update] assertEquals(task, datastore.get(taskKey)); @@ -288,13 +288,13 @@ public void testDelete() { } private List setUpBatchTests(Key taskKey1, Key taskKey2) { - Entity task1 = Entity.builder(taskKey1) + Entity task1 = Entity.newBuilder(taskKey1) .set("category", "Personal") .set("done", false) .set("priority", 4) .set("description", "Learn Cloud Datastore") .build(); - Entity task2 = Entity.builder(taskKey2) + Entity task2 = Entity.newBuilder(taskKey2) .set("category", "Personal") .set("done", false) .set("priority", 5) @@ -307,24 +307,24 @@ private List setUpBatchTests(Key taskKey1, Key taskKey2) { @Test public void testBatchUpsert() { // [START batch_upsert] - FullEntity task1 = FullEntity.builder(keyFactory.newKey()) + FullEntity task1 = FullEntity.newBuilder(keyFactory.newKey()) .set("category", "Personal") .set("done", false) .set("priority", 4) .set("description", "Learn Cloud Datastore") .build(); - FullEntity task2 = Entity.builder(keyFactory.newKey()) + FullEntity task2 = Entity.newBuilder(keyFactory.newKey()) .set("category", "Personal") .set("done", false) .set("priority", 5) .set("description", "Integrate Cloud Datastore") .build(); List tasks = datastore.add(task1, task2); - Key taskKey1 = tasks.get(0).key(); - Key taskKey2 = tasks.get(1).key(); + Key taskKey1 = tasks.get(0).getKey(); + Key taskKey2 = tasks.get(1).getKey(); // [END batch_upsert] - assertEquals(Entity.builder(taskKey1, task1).build(), datastore.get(taskKey1)); - assertEquals(Entity.builder(taskKey2, task2).build(), datastore.get(taskKey2)); + assertEquals(Entity.newBuilder(taskKey1, task1).build(), datastore.get(taskKey1)); + assertEquals(Entity.newBuilder(taskKey2, task2).build(), datastore.get(taskKey2)); } @Test @@ -353,10 +353,10 @@ public void testBatchDelete() { private void setUpQueryTests() { Key taskKey = datastore.newKeyFactory() - .kind("Task") - .ancestors(PathElement.of("TaskList", "default")) + .setKind("Task") + .addAncestors(PathElement.of("TaskList", "default")) .newKey("someTask"); - datastore.put(Entity.builder(taskKey) + datastore.put(Entity.newBuilder(taskKey) .set("category", "Personal") .set("done", false) .set("completed", false) @@ -364,7 +364,7 @@ private void setUpQueryTests() { .set("created", includedDate) .set("percent_complete", 10.0) .set("description", - StringValue.builder("Learn Cloud Datastore").excludeFromIndexes(true).build()) + StringValue.newBuilder("Learn Cloud Datastore").setExcludeFromIndexes(true).build()) .set("tag", "fun", "l", "programming") .build()); } @@ -385,11 +385,11 @@ private void assertInvalidQuery(Query query) { public void testBasicQuery() { setUpQueryTests(); // [START basic_query] - Query query = Query.entityQueryBuilder() - .kind("Task") - .filter(CompositeFilter.and( + Query query = Query.newEntityQueryBuilder() + .setKind("Task") + .setFilter(CompositeFilter.and( PropertyFilter.eq("done", false), PropertyFilter.ge("priority", 4))) - .orderBy(OrderBy.desc("priority")) + .setOrderBy(OrderBy.desc("priority")) .build(); // [END basic_query] assertValidQuery(query); @@ -398,7 +398,7 @@ public void testBasicQuery() { @Test public void testRunQuery() { setUpQueryTests(); - Query query = Query.entityQueryBuilder().kind("Task").build(); + Query query = Query.newEntityQueryBuilder().setKind("Task").build(); // [START run_query] QueryResults tasks = datastore.run(query); // [END run_query] @@ -411,7 +411,8 @@ public void testPropertyFilter() { setUpQueryTests(); // [START property_filter] Query query = - Query.entityQueryBuilder().kind("Task").filter(PropertyFilter.eq("done", false)).build(); + Query.newEntityQueryBuilder().setKind("Task").setFilter(PropertyFilter.eq("done", false)) + .build(); // [END property_filter] assertValidQuery(query); } @@ -420,9 +421,9 @@ public void testPropertyFilter() { public void testCompositeFilter() { setUpQueryTests(); // [START composite_filter] - Query query = Query.entityQueryBuilder() - .kind("Task") - .filter( + Query query = Query.newEntityQueryBuilder() + .setKind("Task") + .setFilter( CompositeFilter.and(PropertyFilter.eq("done", false), PropertyFilter.eq("priority", 4))) .build(); // [END composite_filter] @@ -433,9 +434,9 @@ public void testCompositeFilter() { public void testKeyFilter() { setUpQueryTests(); // [START key_filter] - Query query = Query.entityQueryBuilder() - .kind("Task") - .filter(PropertyFilter.gt("__key__", keyFactory.newKey("someTask"))) + Query query = Query.newEntityQueryBuilder() + .setKind("Task") + .setFilter(PropertyFilter.gt("__key__", keyFactory.newKey("someTask"))) .build(); // [END key_filter] assertValidQuery(query); @@ -446,7 +447,7 @@ public void testAscendingSort() { setUpQueryTests(); // [START ascending_sort] Query query = - Query.entityQueryBuilder().kind("Task").orderBy(OrderBy.asc("created")).build(); + Query.newEntityQueryBuilder().setKind("Task").setOrderBy(OrderBy.asc("created")).build(); // [END ascending_sort] assertValidQuery(query); } @@ -456,7 +457,7 @@ public void testDescendingSort() { setUpQueryTests(); // [START descending_sort] Query query = - Query.entityQueryBuilder().kind("Task").orderBy(OrderBy.desc("created")).build(); + Query.newEntityQueryBuilder().setKind("Task").setOrderBy(OrderBy.desc("created")).build(); // [END descending_sort] assertValidQuery(query); } @@ -465,9 +466,9 @@ public void testDescendingSort() { public void testMultiSort() { setUpQueryTests(); // [START multi_sort] - Query query = Query.entityQueryBuilder() - .kind("Task") - .orderBy(OrderBy.desc("priority"), OrderBy.asc("created")) + Query query = Query.newEntityQueryBuilder() + .setKind("Task") + .setOrderBy(OrderBy.desc("priority"), OrderBy.asc("created")) .build(); // [END multi_sort] assertValidQuery(query); @@ -479,7 +480,7 @@ public void testKindlessQuery() { setUpQueryTests(); // [START kindless_query] Query query = - Query.entityQueryBuilder().filter(PropertyFilter.gt("__key__", lastSeenKey)).build(); + Query.newEntityQueryBuilder().setFilter(PropertyFilter.gt("__key__", lastSeenKey)).build(); // [END kindless_query] assertValidQuery(query); } @@ -488,10 +489,10 @@ public void testKindlessQuery() { public void testAncestorQuery() { setUpQueryTests(); // [START ancestor_query] - Query query = Query.entityQueryBuilder() - .kind("Task") - .filter(PropertyFilter.hasAncestor( - datastore.newKeyFactory().kind("TaskList").newKey("default"))) + Query query = Query.newEntityQueryBuilder() + .setKind("Task") + .setFilter(PropertyFilter.hasAncestor( + datastore.newKeyFactory().setKind("TaskList").newKey("default"))) .build(); // [END ancestor_query] assertValidQuery(query); @@ -501,9 +502,9 @@ public void testAncestorQuery() { public void testProjectionQuery() { setUpQueryTests(); // [START projection_query] - Query query = Query.projectionEntityQueryBuilder() - .kind("Task") - .projection("priority", "percent_complete") + Query query = Query.newProjectionEntityQueryBuilder() + .setKind("Task") + .setProjection("priority", "percent_complete") .build(); // [END projection_query] assertValidQuery(query); @@ -512,9 +513,9 @@ public void testProjectionQuery() { @Test public void testRunProjectionQuery() { setUpQueryTests(); - Query query = Query.projectionEntityQueryBuilder() - .kind("Task") - .projection("priority", "percent_complete") + Query query = Query.newProjectionEntityQueryBuilder() + .setKind("Task") + .setProjection("priority", "percent_complete") .build(); // [START run_query_projection] List priorities = new LinkedList<>(); @@ -534,7 +535,7 @@ public void testRunProjectionQuery() { public void testKeysOnlyQuery() { setUpQueryTests(); // [START keys_only_query] - Query query = Query.keyQueryBuilder().kind("Task").build(); + Query query = Query.newKeyQueryBuilder().setKind("Task").build(); // [END keys_only_query] assertValidQuery(query); } @@ -542,7 +543,7 @@ public void testKeysOnlyQuery() { @Test public void testRunKeysOnlyQuery() { setUpQueryTests(); - Query query = Query.keyQueryBuilder().kind("Task").build(); + Query query = Query.newKeyQueryBuilder().setKind("Task").build(); // [START run_keys_only_query] QueryResults taskKeys = datastore.run(query); // [END run_keys_only_query] @@ -554,11 +555,11 @@ public void testRunKeysOnlyQuery() { public void testDistinctQuery() { setUpQueryTests(); // [START distinct_query] - Query query = Query.projectionEntityQueryBuilder() - .kind("Task") - .projection("category", "priority") - .distinctOn("category", "priority") - .orderBy(OrderBy.asc("category"), OrderBy.asc("priority")) + Query query = Query.newProjectionEntityQueryBuilder() + .setKind("Task") + .setProjection("category", "priority") + .setDistinctOn("category", "priority") + .setOrderBy(OrderBy.asc("category"), OrderBy.asc("priority")) .build(); // [END distinct_query] assertValidQuery(query); @@ -568,11 +569,11 @@ public void testDistinctQuery() { public void testDistinctOnQuery() { setUpQueryTests(); // [START distinct_on_query] - Query query = Query.projectionEntityQueryBuilder() - .kind("Task") - .projection("category", "priority") - .distinctOn("category") - .orderBy(OrderBy.asc("category"), OrderBy.asc("priority")) + Query query = Query.newProjectionEntityQueryBuilder() + .setKind("Task") + .setProjection("category", "priority") + .setDistinctOn("category") + .setOrderBy(OrderBy.asc("category"), OrderBy.asc("priority")) .build(); // [END distinct_on_query] assertValidQuery(query); @@ -582,9 +583,9 @@ public void testDistinctOnQuery() { public void testArrayValueInequalityRange() { setUpQueryTests(); // [START array_value_inequality_range] - Query query = Query.entityQueryBuilder() - .kind("Task") - .filter(CompositeFilter.and( + Query query = Query.newEntityQueryBuilder() + .setKind("Task") + .setFilter(CompositeFilter.and( PropertyFilter.gt("tag", "learn"), PropertyFilter.lt("tag", "math"))) .build(); // [END array_value_inequality_range] @@ -596,9 +597,9 @@ public void testArrayValueInequalityRange() { public void testArrayValueEquality() { setUpQueryTests(); // [START array_value_equality] - Query query = Query.entityQueryBuilder() - .kind("Task") - .filter(CompositeFilter.and( + Query query = Query.newEntityQueryBuilder() + .setKind("Task") + .setFilter(CompositeFilter.and( PropertyFilter.eq("tag", "fun"), PropertyFilter.eq("tag", "programming"))) .build(); // [END array_value_equality] @@ -609,9 +610,9 @@ public void testArrayValueEquality() { public void testInequalityRange() { setUpQueryTests(); // [START inequality_range] - Query query = Query.entityQueryBuilder() - .kind("Task") - .filter(CompositeFilter.and( + Query query = Query.newEntityQueryBuilder() + .setKind("Task") + .setFilter(CompositeFilter.and( PropertyFilter.gt("created", startDate), PropertyFilter.lt("created", endDate))) .build(); // [END inequality_range] @@ -621,9 +622,9 @@ public void testInequalityRange() { @Test public void testInequalityInvalid() { // [START inequality_invalid] - Query query = Query.entityQueryBuilder() - .kind("Task") - .filter(CompositeFilter.and( + Query query = Query.newEntityQueryBuilder() + .setKind("Task") + .setFilter(CompositeFilter.and( PropertyFilter.gt("created", startDate), PropertyFilter.gt("priority", 3))) .build(); // [END inequality_invalid] @@ -634,9 +635,9 @@ public void testInequalityInvalid() { public void testEqualAndInequalityRange() { setUpQueryTests(); // [START equal_and_inequality_range] - Query query = Query.entityQueryBuilder() - .kind("Task") - .filter(CompositeFilter.and(PropertyFilter.eq("priority", 4), + Query query = Query.newEntityQueryBuilder() + .setKind("Task") + .setFilter(CompositeFilter.and(PropertyFilter.eq("priority", 4), PropertyFilter.gt("created", startDate), PropertyFilter.lt("created", endDate))) .build(); // [END equal_and_inequality_range] @@ -647,10 +648,10 @@ public void testEqualAndInequalityRange() { public void testInequalitySort() { setUpQueryTests(); // [START inequality_sort] - Query query = Query.entityQueryBuilder() - .kind("Task") - .filter(PropertyFilter.gt("priority", 3)) - .orderBy(OrderBy.asc("priority"), OrderBy.asc("created")) + Query query = Query.newEntityQueryBuilder() + .setKind("Task") + .setFilter(PropertyFilter.gt("priority", 3)) + .setOrderBy(OrderBy.asc("priority"), OrderBy.asc("created")) .build(); // [END inequality_sort] assertValidQuery(query); @@ -659,10 +660,10 @@ public void testInequalitySort() { @Test public void testInequalitySortInvalidNotSame() { // [START inequality_sort_invalid_not_same] - Query query = Query.entityQueryBuilder() - .kind("Task") - .filter(PropertyFilter.gt("priority", 3)) - .orderBy(OrderBy.asc("created")) + Query query = Query.newEntityQueryBuilder() + .setKind("Task") + .setFilter(PropertyFilter.gt("priority", 3)) + .setOrderBy(OrderBy.asc("created")) .build(); // [END inequality_sort_invalid_not_same] assertInvalidQuery(query); @@ -671,10 +672,10 @@ public void testInequalitySortInvalidNotSame() { @Test public void testInequalitySortInvalidNotFirst() { // [START inequality_sort_invalid_not_first] - Query query = Query.entityQueryBuilder() - .kind("Task") - .filter(PropertyFilter.gt("priority", 3)) - .orderBy(OrderBy.asc("created"), OrderBy.asc("priority")) + Query query = Query.newEntityQueryBuilder() + .setKind("Task") + .setFilter(PropertyFilter.gt("priority", 3)) + .setOrderBy(OrderBy.asc("created"), OrderBy.asc("priority")) .build(); // [END inequality_sort_invalid_not_first] assertInvalidQuery(query); @@ -684,7 +685,7 @@ public void testInequalitySortInvalidNotFirst() { public void testLimit() { setUpQueryTests(); // [START limit] - Query query = Query.entityQueryBuilder().kind("Task").limit(5).build(); + Query query = Query.newEntityQueryBuilder().setKind("Task").setLimit(5).build(); // [END limit] assertValidQuery(query); } @@ -701,16 +702,17 @@ public void testCursorPaging() { private Cursor cursorPaging(int pageSize, Cursor pageCursor) { // [START cursor_paging] - EntityQuery.Builder queryBuilder = Query.entityQueryBuilder().kind("Task").limit(pageSize); + EntityQuery.Builder queryBuilder = Query.newEntityQueryBuilder().setKind("Task") + .setLimit(pageSize); if (pageCursor != null) { - queryBuilder.startCursor(pageCursor); + queryBuilder.setStartCursor(pageCursor); } QueryResults tasks = datastore.run(queryBuilder.build()); while (tasks.hasNext()) { Entity task = tasks.next(); // do something with the task } - Cursor nextPageCursor = tasks.cursorAfter(); + Cursor nextPageCursor = tasks.getCursorAfter(); // [END cursor_paging] return nextPageCursor; } @@ -719,10 +721,10 @@ private Cursor cursorPaging(int pageSize, Cursor pageCursor) { public void testEventualConsistentQuery() { setUpQueryTests(); // [START eventual_consistent_query] - Query query = Query.entityQueryBuilder() - .kind("Task") - .filter(PropertyFilter.hasAncestor( - datastore.newKeyFactory().kind("TaskList").newKey("default"))) + Query query = Query.newEntityQueryBuilder() + .setKind("Task") + .setFilter(PropertyFilter.hasAncestor( + datastore.newKeyFactory().setKind("TaskList").newKey("default"))) .build(); datastore.run(query, ReadOption.eventualConsistency()); // [END eventual_consistent_query] @@ -733,9 +735,9 @@ public void testEventualConsistentQuery() { public void testUnindexedPropertyQuery() { setUpQueryTests(); // [START unindexed_property_query] - Query query = Query.entityQueryBuilder() - .kind("Task") - .filter(PropertyFilter.eq("description", "A task description")) + Query query = Query.newEntityQueryBuilder() + .setKind("Task") + .setFilter(PropertyFilter.eq("description", "A task description")) .build(); // [END unindexed_property_query] QueryResults results = datastore.run(query); @@ -745,7 +747,7 @@ public void testUnindexedPropertyQuery() { @Test public void testExplodingProperties() { // [START exploding_properties] - Entity task = Entity.builder(taskKey) + Entity task = Entity.newBuilder(taskKey) .set("tags", "fun", "programming", "learn") .set("collaborators", "alice", "bob", "charlie") .set("created", DateTime.now()) @@ -755,11 +757,11 @@ public void testExplodingProperties() { } private List setUpTransferTests() { - KeyFactory keyFactory = datastore.newKeyFactory().kind("People"); + KeyFactory keyFactory = datastore.newKeyFactory().setKind("People"); Key from = keyFactory.newKey("from"); Key to = keyFactory.newKey("to"); - datastore.put(Entity.builder(from).set("balance", 100).build()); - datastore.put(Entity.builder(to).set("balance", 0).build()); + datastore.put(Entity.newBuilder(from).set("balance", 100).build()); + datastore.put(Entity.newBuilder(to).set("balance", 0).build()); return ImmutableList.of(from, to); } @@ -782,13 +784,14 @@ void transferFunds(Key fromKey, Key toKey, long amount) { List entities = txn.fetch(fromKey, toKey); Entity from = entities.get(0); Entity updatedFrom = - Entity.builder(from).set("balance", from.getLong("balance") - amount).build(); + Entity.newBuilder(from).set("balance", from.getLong("balance") - amount).build(); Entity to = entities.get(1); - Entity updatedTo = Entity.builder(to).set("balance", to.getLong("balance") + amount).build(); + Entity updatedTo = Entity.newBuilder(to).set("balance", to.getLong("balance") + amount) + .build(); txn.put(updatedFrom, updatedTo); txn.commit(); } finally { - if (txn.active()) { + if (txn.isActive()) { txn.rollback(); } } @@ -826,12 +829,12 @@ public void testTransactionalGetOrCreate() { try { task = txn.get(taskKey); if (task == null) { - task = Entity.builder(taskKey).build(); + task = Entity.newBuilder(taskKey).build(); txn.put(task); txn.commit(); } } finally { - if (txn.active()) { + if (txn.isActive()) { txn.rollback(); } } @@ -842,8 +845,8 @@ public void testTransactionalGetOrCreate() { @Test public void testTransactionalSingleEntityGroupReadOnly() { setUpQueryTests(); - Key taskListKey = datastore.newKeyFactory().kind("TaskList").newKey("default"); - Entity taskListEntity = Entity.builder(taskListKey).build(); + Key taskListKey = datastore.newKeyFactory().setKind("TaskList").newKey("default"); + Entity taskListEntity = Entity.newBuilder(taskListKey).build(); datastore.put(taskListEntity); // [START transactional_single_entity_group_read_only] Entity taskList; @@ -851,14 +854,14 @@ public void testTransactionalSingleEntityGroupReadOnly() { Transaction txn = datastore.newTransaction(); try { taskList = txn.get(taskListKey); - Query query = Query.entityQueryBuilder() - .kind("Task") - .filter(PropertyFilter.hasAncestor(taskListKey)) + Query query = Query.newEntityQueryBuilder() + .setKind("Task") + .setFilter(PropertyFilter.hasAncestor(taskListKey)) .build(); tasks = txn.run(query); txn.commit(); } finally { - if (txn.active()) { + if (txn.isActive()) { txn.rollback(); } } @@ -872,19 +875,19 @@ public void testTransactionalSingleEntityGroupReadOnly() { public void testNamespaceRunQuery() { setUpQueryTests(); // [START namespace_run_query] - KeyFactory keyFactory = datastore.newKeyFactory().kind("__namespace__"); + KeyFactory keyFactory = datastore.newKeyFactory().setKind("__namespace__"); Key startNamespace = keyFactory.newKey("g"); Key endNamespace = keyFactory.newKey("h"); - Query query = Query.keyQueryBuilder() - .kind("__namespace__") - .filter(CompositeFilter.and( + Query query = Query.newKeyQueryBuilder() + .setKind("__namespace__") + .setFilter(CompositeFilter.and( PropertyFilter.gt("__key__", startNamespace), PropertyFilter.lt("__key__", endNamespace))) .build(); List namespaces = new ArrayList<>(); QueryResults results = datastore.run(query); while (results.hasNext()) { - namespaces.add(results.next().name()); + namespaces.add(results.next().getName()); } // [END namespace_run_query] assertEquals(ImmutableList.of("ghijklmnop"), namespaces); @@ -894,11 +897,11 @@ public void testNamespaceRunQuery() { public void testKindRunQuery() { setUpQueryTests(); // [START kind_run_query] - Query query = Query.keyQueryBuilder().kind("__kind__").build(); + Query query = Query.newKeyQueryBuilder().setKind("__kind__").build(); List kinds = new ArrayList<>(); QueryResults results = datastore.run(query); while (results.hasNext()) { - kinds.add(results.next().name()); + kinds.add(results.next().getName()); } // [END kind_run_query] assertEquals(ImmutableList.of("Task"), kinds); @@ -908,13 +911,13 @@ public void testKindRunQuery() { public void testPropertyRunQuery() { setUpQueryTests(); // [START property_run_query] - Query query = Query.keyQueryBuilder().kind("__property__").build(); + Query query = Query.newKeyQueryBuilder().setKind("__property__").build(); QueryResults keys = datastore.run(query); Map> propertiesByKind = new HashMap<>(); while (keys.hasNext()) { Key key = keys.next(); - String kind = key.parent().name(); - String propertyName = key.name(); + String kind = key.getParent().getName(); + String propertyName = key.getName(); Collection properties = propertiesByKind.get(kind); if (properties == null) { properties = new HashSet<>(); @@ -932,16 +935,16 @@ public void testPropertyRunQuery() { public void testPropertyByKindRunQuery() { setUpQueryTests(); // [START property_by_kind_run_query] - Key key = datastore.newKeyFactory().kind("__kind__").newKey("Task"); - Query query = Query.entityQueryBuilder() - .kind("__property__") - .filter(PropertyFilter.hasAncestor(key)) + Key key = datastore.newKeyFactory().setKind("__kind__").newKey("Task"); + Query query = Query.newEntityQueryBuilder() + .setKind("__property__") + .setFilter(PropertyFilter.hasAncestor(key)) .build(); QueryResults results = datastore.run(query); Map> representationsByProperty = new HashMap<>(); while (results.hasNext()) { Entity result = results.next(); - String propertyName = result.key().name(); + String propertyName = result.getKey().getName(); List representations = result.getList("property_representation"); Collection currentRepresentations = representationsByProperty.get(propertyName); if (currentRepresentations == null) { @@ -970,19 +973,19 @@ public void testPropertyFilteringRunQuery() { setUpQueryTests(); // [START property_filtering_run_query] Key startKey = datastore.newKeyFactory() - .kind("__property__") - .ancestors(PathElement.of("__kind__", "Task")) + .setKind("__property__") + .addAncestors(PathElement.of("__kind__", "Task")) .newKey("priority"); - Query query = Query.keyQueryBuilder() - .kind("__property__") - .filter(PropertyFilter.ge("__key__", startKey)) + Query query = Query.newKeyQueryBuilder() + .setKind("__property__") + .setFilter(PropertyFilter.ge("__key__", startKey)) .build(); Map> propertiesByKind = new HashMap<>(); QueryResults keys = datastore.run(query); while (keys.hasNext()) { Key key = keys.next(); - String kind = key.parent().name(); - String propertyName = key.name(); + String kind = key.getParent().getName(); + String propertyName = key.getName(); Collection properties = propertiesByKind.get(kind); if (properties == null) { properties = new HashSet(); @@ -1000,8 +1003,8 @@ public void testPropertyFilteringRunQuery() { public void testGqlRunQuery() { setUpQueryTests(); // [START gql_run_query] - Query query = - Query.gqlQueryBuilder(ResultType.ENTITY, "select * from Task order by created asc").build(); + Query query = Query.newGqlQueryBuilder( + ResultType.ENTITY, "select * from Task order by created asc").build(); // [END gql_run_query] assertValidQuery(query); } @@ -1011,7 +1014,7 @@ public void testGqlNamedBindingQuery() { setUpQueryTests(); // [START gql_named_binding_query] Query query = - Query.gqlQueryBuilder( + Query.newGqlQueryBuilder( ResultType.ENTITY, "select * from Task where completed = @completed and priority = @priority") .setBinding("completed", false) @@ -1025,7 +1028,7 @@ public void testGqlNamedBindingQuery() { public void testGqlPositionalBindingQuery() { setUpQueryTests(); // [START gql_positional_binding_query] - Query query = Query.gqlQueryBuilder( + Query query = Query.newGqlQueryBuilder( ResultType.ENTITY, "select * from Task where completed = @1 and priority = @2") .addBinding(false) .addBinding(4) @@ -1038,9 +1041,9 @@ public void testGqlPositionalBindingQuery() { public void testGqlLiteralQuery() { setUpQueryTests(); // [START gql_literal_query] - Query query = Query.gqlQueryBuilder( + Query query = Query.newGqlQueryBuilder( ResultType.ENTITY, "select * from Task where completed = false and priority = 4") - .allowLiteral(true) + .setAllowLiteral(true) .build(); // [END gql_literal_query] assertValidQuery(query); From ee579b9f4032385d8da4f142c65b51a893a2bc4c Mon Sep 17 00:00:00 2001 From: Jason Dobry Date: Wed, 7 Dec 2016 20:32:29 -0800 Subject: [PATCH 28/73] Add NL quickstart sample. Fix some other quickstarts. (#438) --- .../src/test/java/com/example/datastore/QuickstartSampleIT.java | 1 - 1 file changed, 1 deletion(-) diff --git a/samples/snippets/src/test/java/com/example/datastore/QuickstartSampleIT.java b/samples/snippets/src/test/java/com/example/datastore/QuickstartSampleIT.java index 8257a2082..3bf69d77b 100644 --- a/samples/snippets/src/test/java/com/example/datastore/QuickstartSampleIT.java +++ b/samples/snippets/src/test/java/com/example/datastore/QuickstartSampleIT.java @@ -69,4 +69,3 @@ public void testQuickstart() throws Exception { assertThat(got).contains("Saved sampletask1: Buy milk"); } } -// [END datastore_quickstart] From a1d833a12b29e2b249f90b6375cff3d3d870f99f Mon Sep 17 00:00:00 2001 From: Tim Swast Date: Fri, 9 Dec 2016 13:04:43 -0800 Subject: [PATCH 29/73] Use latest (beta) versions of cloud client libraries. Note this wasn't automatically done because dpebot currently skips beta releases. We can look at how to add an exception for the com.google.cloud libraries if they are going to stay beta a while. --- .../java/com/google/datastore/snippets/ConceptsTest.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java b/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java index e00b09011..8970e83e2 100644 --- a/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java +++ b/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java @@ -51,6 +51,7 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterators; +import org.joda.time.Duration; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; @@ -72,6 +73,7 @@ import java.util.List; import java.util.Map; import java.util.TimeZone; +import java.util.concurrent.TimeoutException; /** * Contains Cloud Datastore snippets demonstrating concepts for documentation. @@ -133,8 +135,8 @@ public void setUp() { * @throws InterruptedException if there are errors stopping the local Datastore */ @AfterClass - public static void afterClass() throws IOException, InterruptedException { - HELPER.stop(); + public static void afterClass() throws IOException, InterruptedException, TimeoutException { + HELPER.stop(Duration.standardMinutes(1)); } private void assertValidKey(Key taskKey) { From 5c97e9e1ebdc6795bc8ebcf39bf4df41b99d3d98 Mon Sep 17 00:00:00 2001 From: Jisha Abubaker Date: Wed, 15 Feb 2017 14:37:27 -0800 Subject: [PATCH 30/73] Adding retrieve entity to quickstart --- .../main/java/com/example/datastore/QuickstartSample.java | 6 ++++++ .../test/java/com/example/datastore/QuickstartSampleIT.java | 1 + 2 files changed, 7 insertions(+) diff --git a/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java b/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java index a8e0614fe..03f207662 100644 --- a/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java +++ b/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java @@ -44,6 +44,12 @@ public static void main(String... args) throws Exception { datastore.put(task); System.out.printf("Saved %s: %s%n", task.getKey().getName(), task.getString("description")); + + //Retrieve entity + Entity retrieved = datastore.get(taskKey); + + System.out.printf("Retrieved %s: %s%n", taskKey.getName(), retrieved.getString("description")); + } } // [END datastore_quickstart] diff --git a/samples/snippets/src/test/java/com/example/datastore/QuickstartSampleIT.java b/samples/snippets/src/test/java/com/example/datastore/QuickstartSampleIT.java index 3bf69d77b..fa0a2f0fa 100644 --- a/samples/snippets/src/test/java/com/example/datastore/QuickstartSampleIT.java +++ b/samples/snippets/src/test/java/com/example/datastore/QuickstartSampleIT.java @@ -67,5 +67,6 @@ public void testQuickstart() throws Exception { QuickstartSample.main(); String got = bout.toString(); assertThat(got).contains("Saved sampletask1: Buy milk"); + assertThat(got).contains("Retrieved sampletask1: Buy milk"); } } From f0a51110417eb18d8f8ffb53a629e91a08b1f2f4 Mon Sep 17 00:00:00 2001 From: Bill Prin Date: Thu, 9 Mar 2017 15:49:30 -0800 Subject: [PATCH 31/73] Replace all auth commands with ADC (#555) --- .../src/main/java/com/google/datastore/snippets/TaskList.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java b/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java index 495864f23..1482e0784 100644 --- a/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java +++ b/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java @@ -202,7 +202,7 @@ private void assertArgsLength(String[] args, int expectedLength) { * Exercises the methods defined in this class. * *

Assumes that you are authenticated using the Google Cloud SDK (using - * {@code gcloud auth login}). + * {@code gcloud auth application-default login}). */ public static void main(String[] args) throws Exception { TaskList taskList = new TaskList(); From 9d82cfcce96fe8f32975a03b0146004832a33c8b Mon Sep 17 00:00:00 2001 From: Jisha Abubaker Date: Wed, 19 Apr 2017 13:04:13 -0700 Subject: [PATCH 32/73] updating license header to remove ARR (#621) --- .../src/main/java/com/google/datastore/snippets/TaskList.java | 2 +- .../test/java/com/google/datastore/snippets/ConceptsTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java b/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java index 1482e0784..43af1c2e0 100644 --- a/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java +++ b/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Google Inc. All Rights Reserved. + * Copyright 2016 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java b/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java index 8970e83e2..b388e657d 100644 --- a/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java +++ b/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Google Inc. All Rights Reserved. + * Copyright 2016 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From e7fccd36eaa3d98427492c2b2cd0a23b34ac5f1e Mon Sep 17 00:00:00 2001 From: DPE bot Date: Mon, 1 May 2017 16:14:30 -0700 Subject: [PATCH 33/73] Auto-update dependencies. (#636) * Auto-update dependencies. * Roll back speech & Vision due to weird GAX issues. Fix for GA Datastore, Storage, and more. * Fix pom.xml Downgrade to prior version. --- .../google/datastore/snippets/TaskList.java | 6 ++--- .../datastore/snippets/ConceptsTest.java | 22 +++++++++---------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java b/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java index 43af1c2e0..fed6fc3fa 100644 --- a/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java +++ b/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java @@ -16,9 +16,9 @@ package com.google.datastore.snippets; +import com.google.cloud.Timestamp; import com.google.cloud.datastore.Datastore; import com.google.cloud.datastore.DatastoreOptions; -import com.google.cloud.datastore.DateTime; import com.google.cloud.datastore.Entity; import com.google.cloud.datastore.Key; import com.google.cloud.datastore.KeyFactory; @@ -57,7 +57,7 @@ Key addTask(String description) { Key key = datastore.allocateId(keyFactory.newKey()); Entity task = Entity.newBuilder(key) .set("description", StringValue.newBuilder(description).setExcludeFromIndexes(true).build()) - .set("created", DateTime.now()) + .set("created", Timestamp.now()) .set("done", false) .build(); datastore.put(task); @@ -131,7 +131,7 @@ static List formatTasks(Iterator tasks) { String.format("%d : %s (done)", task.getKey().getId(), task.getString("description"))); } else { strings.add(String.format("%d : %s (created %s)", task.getKey().getId(), - task.getString("description"), task.getDateTime("created"))); + task.getString("description"), task.getTimestamp("created"))); } } return strings; diff --git a/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java b/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java index b388e657d..928718a8f 100644 --- a/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java +++ b/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java @@ -23,10 +23,10 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; +import com.google.cloud.Timestamp; import com.google.cloud.datastore.Cursor; import com.google.cloud.datastore.Datastore; import com.google.cloud.datastore.DatastoreException; -import com.google.cloud.datastore.DateTime; import com.google.cloud.datastore.Entity; import com.google.cloud.datastore.EntityQuery; import com.google.cloud.datastore.FullEntity; @@ -51,7 +51,6 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterators; -import org.joda.time.Duration; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; @@ -60,6 +59,7 @@ import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; +import org.threeten.bp.Duration; import java.io.IOException; import java.util.ArrayList; @@ -88,9 +88,9 @@ public class ConceptsTest { private KeyFactory keyFactory; private Key taskKey; private Entity testEntity; - private DateTime startDate; - private DateTime endDate; - private DateTime includedDate; + private Timestamp startDate; + private Timestamp endDate; + private Timestamp includedDate; @Rule public ExpectedException thrown = ExpectedException.none(); @@ -121,11 +121,11 @@ public void setUp() { testEntity = Entity.newBuilder(taskKey, TEST_FULL_ENTITY).build(); Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")); calendar.set(1990, JANUARY, 1); - startDate = DateTime.copyFrom(calendar); + startDate = Timestamp.of(calendar.getTime()); calendar.set(2000, JANUARY, 1); - endDate = DateTime.copyFrom(calendar); + endDate = Timestamp.of(calendar.getTime()); calendar.set(1999, DECEMBER, 31); - includedDate = DateTime.copyFrom(calendar); + includedDate = Timestamp.of(calendar.getTime()); } /** @@ -136,7 +136,7 @@ public void setUp() { */ @AfterClass public static void afterClass() throws IOException, InterruptedException, TimeoutException { - HELPER.stop(Duration.standardMinutes(1)); + HELPER.stop(Duration.ofMinutes(1)); } private void assertValidKey(Key taskKey) { @@ -209,7 +209,7 @@ public void testProperties() { // [START properties] Entity task = Entity.newBuilder(taskKey) .set("category", "Personal") - .set("created", DateTime.now()) + .set("created", Timestamp.now()) .set("done", false) .set("priority", 4) .set("percent_complete", 10.0) @@ -752,7 +752,7 @@ public void testExplodingProperties() { Entity task = Entity.newBuilder(taskKey) .set("tags", "fun", "programming", "learn") .set("collaborators", "alice", "bob", "charlie") - .set("created", DateTime.now()) + .set("created", Timestamp.now()) .build(); // [END exploding_properties] assertValidEntity(task); From 3eef7f73c1daaf543bcd6738799a3864d64fc851 Mon Sep 17 00:00:00 2001 From: Kurtis Van Gent <31518063+kurtisvg@users.noreply.github.com> Date: Thu, 11 Jan 2018 09:17:23 -0800 Subject: [PATCH 34/73] Updated dataflow, datastore, dlp, errorreporting, firestore, iap, and iot folders. (#986) * Updated dataflow/spanner-io * Updated datastore. * Updated dlp * Updated errorreporting. * Updated firestore/ * Updated iap/ * Updated iot. * Updated datastore/cloud-client. * Re-updated dlp samples. --- .../google/datastore/snippets/TaskList.java | 1 - .../datastore/snippets/ConceptsTest.java | 20 +++++++++---------- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java b/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java index fed6fc3fa..4c4910d55 100644 --- a/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java +++ b/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java @@ -26,7 +26,6 @@ import com.google.cloud.datastore.StringValue; import com.google.cloud.datastore.StructuredQuery.OrderBy; import com.google.cloud.datastore.Transaction; - import java.util.ArrayList; import java.util.Iterator; import java.util.List; diff --git a/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java b/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java index 928718a8f..a9308d97f 100644 --- a/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java +++ b/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java @@ -50,17 +50,6 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterators; - -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.junit.runner.RunWith; -import org.junit.runners.JUnit4; -import org.threeten.bp.Duration; - import java.io.IOException; import java.util.ArrayList; import java.util.Calendar; @@ -74,6 +63,15 @@ import java.util.Map; import java.util.TimeZone; import java.util.concurrent.TimeoutException; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; +import org.threeten.bp.Duration; /** * Contains Cloud Datastore snippets demonstrating concepts for documentation. From 9cf79b089698309c73d918811eff6905f324dfa1 Mon Sep 17 00:00:00 2001 From: Kurtis Van Gent <31518063+kurtisvg@users.noreply.github.com> Date: Thu, 11 Jan 2018 09:17:23 -0800 Subject: [PATCH 35/73] Updated dataflow, datastore, dlp, errorreporting, firestore, iap, and iot folders. (#986) * Updated dataflow/spanner-io * Updated datastore. * Updated dlp * Updated errorreporting. * Updated firestore/ * Updated iap/ * Updated iot. * Updated datastore/cloud-client. * Re-updated dlp samples. --- .../example/datastore/QuickstartSample.java | 28 ++++++++-------- .../example/datastore/QuickstartSampleIT.java | 33 +++++++++---------- 2 files changed, 30 insertions(+), 31 deletions(-) diff --git a/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java b/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java index 03f207662..ba1a67706 100644 --- a/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java +++ b/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java @@ -1,18 +1,18 @@ /* - Copyright 2016, Google, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ + * Copyright 2016 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package com.example.datastore; diff --git a/samples/snippets/src/test/java/com/example/datastore/QuickstartSampleIT.java b/samples/snippets/src/test/java/com/example/datastore/QuickstartSampleIT.java index fa0a2f0fa..6bb2dfe30 100644 --- a/samples/snippets/src/test/java/com/example/datastore/QuickstartSampleIT.java +++ b/samples/snippets/src/test/java/com/example/datastore/QuickstartSampleIT.java @@ -1,18 +1,18 @@ /* - Copyright 2016, Google, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ + * Copyright 2016 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package com.example.datastore; @@ -21,15 +21,14 @@ import com.google.cloud.datastore.Datastore; import com.google.cloud.datastore.DatastoreOptions; import com.google.cloud.datastore.Key; +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; -import java.io.ByteArrayOutputStream; -import java.io.PrintStream; - /** * Tests for quickstart sample. */ From e60b7da2245c6d55afbb92f7d6c05873bb6839e4 Mon Sep 17 00:00:00 2001 From: Billy Jacobson Date: Mon, 21 May 2018 09:21:48 -0700 Subject: [PATCH 36/73] Updating all the region tags to have a prefix of datastore (#1106) --- .../google/datastore/snippets/TaskList.java | 24 +- .../datastore/snippets/ConceptsTest.java | 232 +++++++++--------- 2 files changed, 128 insertions(+), 128 deletions(-) diff --git a/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java b/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java index 4c4910d55..f276eb5c9 100644 --- a/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java +++ b/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java @@ -36,15 +36,15 @@ */ public class TaskList { - // [START build_service] + // [START datastore_build_service] // Create an authorized Datastore service using Application Default Credentials. private final Datastore datastore = DatastoreOptions.getDefaultInstance().getService(); // Create a Key factory to construct keys associated with this project. private final KeyFactory keyFactory = datastore.newKeyFactory().setKind("Task"); - // [END build_service] + // [END datastore_build_service] - // [START add_entity] + // [START datastore_add_entity] /** * Adds a task entity to the Datastore. * @@ -62,9 +62,9 @@ Key addTask(String description) { datastore.put(task); return key; } - // [END add_entity] + // [END datastore_add_entity] - // [START update_entity] + // [START datastore_update_entity] /** * Marks a task entity as done. * @@ -87,9 +87,9 @@ boolean markDone(long id) { } } } - // [END update_entity] + // [END datastore_update_entity] - // [START retrieve_entities] + // [START datastore_retrieve_entities] /** * Returns a list of all task entities in ascending order of creation time. * @@ -100,9 +100,9 @@ Iterator listTasks() { Query.newEntityQueryBuilder().setKind("Task").setOrderBy(OrderBy.asc("created")).build(); return datastore.run(query); } - // [END retrieve_entities] + // [END datastore_retrieve_entities] - // [START delete_entity] + // [START datastore_delete_entity] /** * Deletes a task entity. * @@ -112,9 +112,9 @@ Iterator listTasks() { void deleteTask(long id) { datastore.delete(keyFactory.newKey(id)); } - // [END delete_entity] + // [END datastore_delete_entity] - // [START format_results] + // [START datastore_format_results] /** * Converts a list of task entities to a list of formatted task strings. * @@ -135,7 +135,7 @@ static List formatTasks(Iterator tasks) { } return strings; } - // [END format_results] + // [END datastore_format_results] /** * Handles a single command. diff --git a/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java b/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java index a9308d97f..0d082143d 100644 --- a/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java +++ b/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java @@ -143,40 +143,40 @@ private void assertValidKey(Key taskKey) { @Test public void testIncompleteKey() { - // [START incomplete_key] + // [START datastore_incomplete_key] KeyFactory keyFactory = datastore.newKeyFactory().setKind("Task"); Key taskKey = datastore.allocateId(keyFactory.newKey()); - // [END incomplete_key] + // [END datastore_incomplete_key] assertValidKey(taskKey); } @Test public void testNamedKey() { - // [START named_key] + // [START datastore_named_key] Key taskKey = datastore.newKeyFactory().setKind("Task").newKey("sampleTask"); - // [END named_key] + // [END datastore_named_key] assertValidKey(taskKey); } @Test public void testKeyWithParent() { - // [START key_with_parent] + // [START datastore_key_with_parent] Key taskKey = datastore.newKeyFactory() .addAncestors(PathElement.of("TaskList", "default")) .setKind("Task") .newKey("sampleTask"); - // [END key_with_parent] + // [END datastore_key_with_parent] assertValidKey(taskKey); } @Test public void testKeyWithMultilevelParent() { - // [START key_with_multilevel_parent] + // [START datastore_key_with_multilevel_parent] KeyFactory keyFactory = datastore.newKeyFactory() .addAncestors(PathElement.of("User", "Alice"), PathElement.of("TaskList", "default")) .setKind("Task"); Key taskKey = keyFactory.newKey("sampleTask"); - // [END key_with_multilevel_parent] + // [END datastore_key_with_multilevel_parent] assertValidKey(taskKey); } @@ -187,7 +187,7 @@ private void assertValidEntity(Entity original) { @Test public void testEntityWithParent() { - // [START entity_with_parent] + // [START datastore_entity_with_parent] Key taskKey = datastore.newKeyFactory() .addAncestors(PathElement.of("TaskList", "default")) .setKind("Task") @@ -198,13 +198,13 @@ public void testEntityWithParent() { .set("priority", 4) .set("description", "Learn Cloud Datastore") .build(); - // [END entity_with_parent] + // [END datastore_entity_with_parent] assertValidEntity(task); } @Test public void testProperties() { - // [START properties] + // [START datastore_properties] Entity task = Entity.newBuilder(taskKey) .set("category", "Personal") .set("created", Timestamp.now()) @@ -214,76 +214,76 @@ public void testProperties() { .set("description", StringValue.newBuilder("Learn Cloud Datastore").setExcludeFromIndexes(true).build()) .build(); - // [END properties] + // [END datastore_properties] assertValidEntity(task); } @Test public void testArrayValue() { - // [START array_value] + // [START datastore_array_value] Entity task = Entity.newBuilder(taskKey) .set("tags", "fun", "programming") .set("collaborators", "alice", "bob") .build(); - // [END array_value] + // [END datastore_array_value] assertValidEntity(task); } @Test public void testBasicEntity() { - // [START basic_entity] + // [START datastore_basic_entity] Entity task = Entity.newBuilder(taskKey) .set("category", "Personal") .set("done", false) .set("priority", 4) .set("description", "Learn Cloud Datastore") .build(); - // [END basic_entity] + // [END datastore_basic_entity] assertValidEntity(task); } @Test public void testUpsert() { - // [START upsert] + // [START datastore_upsert] Entity task = Entity.newBuilder(keyFactory.newKey("sampleTask")).build(); datastore.put(task); - // [END upsert] + // [END datastore_upsert] assertEquals(task, datastore.get(task.getKey())); } @Test public void testInsert() { - // [START insert] + // [START datastore_insert] Key taskKey = datastore.add(FullEntity.newBuilder(keyFactory.newKey()).build()).getKey(); - // [END insert] + // [END datastore_insert] assertEquals(FullEntity.newBuilder(taskKey).build(), datastore.get(taskKey)); } @Test public void testLookup() { datastore.put(testEntity); - // [START lookup] + // [START datastore_lookup] Entity task = datastore.get(taskKey); - // [END lookup] + // [END datastore_lookup] assertEquals(testEntity, task); } @Test public void testUpdate() { datastore.put(testEntity); - // [START update] + // [START datastore_update] Entity task = Entity.newBuilder(datastore.get(taskKey)).set("priority", 5).build(); datastore.update(task); - // [END update] + // [END datastore_update] assertEquals(task, datastore.get(taskKey)); } @Test public void testDelete() { datastore.put(testEntity); - // [START delete] + // [START datastore_delete] datastore.delete(taskKey); - // [END delete] + // [END datastore_delete] assertNull(datastore.get(taskKey)); } @@ -306,7 +306,7 @@ private List setUpBatchTests(Key taskKey1, Key taskKey2) { @Test public void testBatchUpsert() { - // [START batch_upsert] + // [START datastore_batch_upsert] FullEntity task1 = FullEntity.newBuilder(keyFactory.newKey()) .set("category", "Personal") .set("done", false) @@ -322,7 +322,7 @@ public void testBatchUpsert() { List tasks = datastore.add(task1, task2); Key taskKey1 = tasks.get(0).getKey(); Key taskKey2 = tasks.get(1).getKey(); - // [END batch_upsert] + // [END datastore_batch_upsert] assertEquals(Entity.newBuilder(taskKey1, task1).build(), datastore.get(taskKey1)); assertEquals(Entity.newBuilder(taskKey2, task2).build(), datastore.get(taskKey2)); } @@ -332,9 +332,9 @@ public void testBatchLookup() { Key taskKey1 = keyFactory.newKey(1); Key taskKey2 = keyFactory.newKey(2); List expectedTasks = setUpBatchTests(taskKey1, taskKey2); - // [START batch_lookup] + // [START datastore_batch_lookup] Iterator tasks = datastore.get(taskKey1, taskKey2); - // [END batch_lookup] + // [END datastore_batch_lookup] assertEquals(expectedTasks.get(0), tasks.next()); assertEquals(expectedTasks.get(1), tasks.next()); } @@ -344,9 +344,9 @@ public void testBatchDelete() { Key taskKey1 = keyFactory.newKey(1); Key taskKey2 = keyFactory.newKey(2); setUpBatchTests(taskKey1, taskKey2); - // [START batch_delete] + // [START datastore_batch_delete] datastore.delete(taskKey1, taskKey2); - // [END batch_delete] + // [END datastore_batch_delete] assertNull(datastore.get(taskKey1)); assertNull(datastore.get(taskKey2)); } @@ -384,14 +384,14 @@ private void assertInvalidQuery(Query query) { @Test public void testBasicQuery() { setUpQueryTests(); - // [START basic_query] + // [START datastore_basic_query] Query query = Query.newEntityQueryBuilder() .setKind("Task") .setFilter(CompositeFilter.and( PropertyFilter.eq("done", false), PropertyFilter.ge("priority", 4))) .setOrderBy(OrderBy.desc("priority")) .build(); - // [END basic_query] + // [END datastore_basic_query] assertValidQuery(query); } @@ -399,9 +399,9 @@ public void testBasicQuery() { public void testRunQuery() { setUpQueryTests(); Query query = Query.newEntityQueryBuilder().setKind("Task").build(); - // [START run_query] + // [START datastore_run_query] QueryResults tasks = datastore.run(query); - // [END run_query] + // [END datastore_run_query] assertNotNull(tasks.next()); assertFalse(tasks.hasNext()); } @@ -409,68 +409,68 @@ public void testRunQuery() { @Test public void testPropertyFilter() { setUpQueryTests(); - // [START property_filter] + // [START datastore_property_filter] Query query = Query.newEntityQueryBuilder().setKind("Task").setFilter(PropertyFilter.eq("done", false)) .build(); - // [END property_filter] + // [END datastore_property_filter] assertValidQuery(query); } @Test public void testCompositeFilter() { setUpQueryTests(); - // [START composite_filter] + // [START datastore_composite_filter] Query query = Query.newEntityQueryBuilder() .setKind("Task") .setFilter( CompositeFilter.and(PropertyFilter.eq("done", false), PropertyFilter.eq("priority", 4))) .build(); - // [END composite_filter] + // [END datastore_composite_filter] assertValidQuery(query); } @Test public void testKeyFilter() { setUpQueryTests(); - // [START key_filter] + // [START datastore_key_filter] Query query = Query.newEntityQueryBuilder() .setKind("Task") .setFilter(PropertyFilter.gt("__key__", keyFactory.newKey("someTask"))) .build(); - // [END key_filter] + // [END datastore_key_filter] assertValidQuery(query); } @Test public void testAscendingSort() { setUpQueryTests(); - // [START ascending_sort] + // [START datastore_ascending_sort] Query query = Query.newEntityQueryBuilder().setKind("Task").setOrderBy(OrderBy.asc("created")).build(); - // [END ascending_sort] + // [END datastore_ascending_sort] assertValidQuery(query); } @Test public void testDescendingSort() { setUpQueryTests(); - // [START descending_sort] + // [START datastore_descending_sort] Query query = Query.newEntityQueryBuilder().setKind("Task").setOrderBy(OrderBy.desc("created")).build(); - // [END descending_sort] + // [END datastore_descending_sort] assertValidQuery(query); } @Test public void testMultiSort() { setUpQueryTests(); - // [START multi_sort] + // [START datastore_multi_sort] Query query = Query.newEntityQueryBuilder() .setKind("Task") .setOrderBy(OrderBy.desc("priority"), OrderBy.asc("created")) .build(); - // [END multi_sort] + // [END datastore_multi_sort] assertValidQuery(query); } @@ -478,35 +478,35 @@ public void testMultiSort() { public void testKindlessQuery() { Key lastSeenKey = keyFactory.newKey("a"); setUpQueryTests(); - // [START kindless_query] + // [START datastore_kindless_query] Query query = Query.newEntityQueryBuilder().setFilter(PropertyFilter.gt("__key__", lastSeenKey)).build(); - // [END kindless_query] + // [END datastore_kindless_query] assertValidQuery(query); } @Test public void testAncestorQuery() { setUpQueryTests(); - // [START ancestor_query] + // [START datastore_ancestor_query] Query query = Query.newEntityQueryBuilder() .setKind("Task") .setFilter(PropertyFilter.hasAncestor( datastore.newKeyFactory().setKind("TaskList").newKey("default"))) .build(); - // [END ancestor_query] + // [END datastore_ancestor_query] assertValidQuery(query); } @Test public void testProjectionQuery() { setUpQueryTests(); - // [START projection_query] + // [START datastore_projection_query] Query query = Query.newProjectionEntityQueryBuilder() .setKind("Task") .setProjection("priority", "percent_complete") .build(); - // [END projection_query] + // [END datastore_projection_query] assertValidQuery(query); } @@ -517,7 +517,7 @@ public void testRunProjectionQuery() { .setKind("Task") .setProjection("priority", "percent_complete") .build(); - // [START run_query_projection] + // [START datastore_run_query_projection] List priorities = new LinkedList<>(); List percentCompletes = new LinkedList<>(); QueryResults tasks = datastore.run(query); @@ -526,7 +526,7 @@ public void testRunProjectionQuery() { priorities.add(task.getLong("priority")); percentCompletes.add(task.getDouble("percent_complete")); } - // [END run_query_projection] + // [END datastore_run_query_projection] assertEquals(ImmutableList.of(4L), priorities); assertEquals(ImmutableList.of(10.0), percentCompletes); } @@ -534,9 +534,9 @@ public void testRunProjectionQuery() { @Test public void testKeysOnlyQuery() { setUpQueryTests(); - // [START keys_only_query] + // [START datastore_keys_only_query] Query query = Query.newKeyQueryBuilder().setKind("Task").build(); - // [END keys_only_query] + // [END datastore_keys_only_query] assertValidQuery(query); } @@ -544,9 +544,9 @@ public void testKeysOnlyQuery() { public void testRunKeysOnlyQuery() { setUpQueryTests(); Query query = Query.newKeyQueryBuilder().setKind("Task").build(); - // [START run_keys_only_query] + // [START datastore_run_keys_only_query] QueryResults taskKeys = datastore.run(query); - // [END run_keys_only_query] + // [END datastore_run_keys_only_query] assertNotNull(taskKeys.next()); assertFalse(taskKeys.hasNext()); } @@ -554,41 +554,41 @@ public void testRunKeysOnlyQuery() { @Test public void testDistinctQuery() { setUpQueryTests(); - // [START distinct_query] + // [START datastore_distinct_query] Query query = Query.newProjectionEntityQueryBuilder() .setKind("Task") .setProjection("category", "priority") .setDistinctOn("category", "priority") .setOrderBy(OrderBy.asc("category"), OrderBy.asc("priority")) .build(); - // [END distinct_query] + // [END datastore_distinct_query] assertValidQuery(query); } @Test public void testDistinctOnQuery() { setUpQueryTests(); - // [START distinct_on_query] + // [START datastore_distinct_on_query] Query query = Query.newProjectionEntityQueryBuilder() .setKind("Task") .setProjection("category", "priority") .setDistinctOn("category") .setOrderBy(OrderBy.asc("category"), OrderBy.asc("priority")) .build(); - // [END distinct_on_query] + // [END datastore_distinct_on_query] assertValidQuery(query); } @Test public void testArrayValueInequalityRange() { setUpQueryTests(); - // [START array_value_inequality_range] + // [START datastore_array_value_inequality_range] Query query = Query.newEntityQueryBuilder() .setKind("Task") .setFilter(CompositeFilter.and( PropertyFilter.gt("tag", "learn"), PropertyFilter.lt("tag", "math"))) .build(); - // [END array_value_inequality_range] + // [END datastore_array_value_inequality_range] QueryResults results = datastore.run(query); assertFalse(results.hasNext()); } @@ -596,97 +596,97 @@ public void testArrayValueInequalityRange() { @Test public void testArrayValueEquality() { setUpQueryTests(); - // [START array_value_equality] + // [START datastore_array_value_equality] Query query = Query.newEntityQueryBuilder() .setKind("Task") .setFilter(CompositeFilter.and( PropertyFilter.eq("tag", "fun"), PropertyFilter.eq("tag", "programming"))) .build(); - // [END array_value_equality] + // [END datastore_array_value_equality] assertValidQuery(query); } @Test public void testInequalityRange() { setUpQueryTests(); - // [START inequality_range] + // [START datastore_inequality_range] Query query = Query.newEntityQueryBuilder() .setKind("Task") .setFilter(CompositeFilter.and( PropertyFilter.gt("created", startDate), PropertyFilter.lt("created", endDate))) .build(); - // [END inequality_range] + // [END datastore_inequality_range] assertValidQuery(query); } @Test public void testInequalityInvalid() { - // [START inequality_invalid] + // [START datastore_inequality_invalid] Query query = Query.newEntityQueryBuilder() .setKind("Task") .setFilter(CompositeFilter.and( PropertyFilter.gt("created", startDate), PropertyFilter.gt("priority", 3))) .build(); - // [END inequality_invalid] + // [END datastore_inequality_invalid] assertInvalidQuery(query); } @Test public void testEqualAndInequalityRange() { setUpQueryTests(); - // [START equal_and_inequality_range] + // [START datastore_equal_and_inequality_range] Query query = Query.newEntityQueryBuilder() .setKind("Task") .setFilter(CompositeFilter.and(PropertyFilter.eq("priority", 4), PropertyFilter.gt("created", startDate), PropertyFilter.lt("created", endDate))) .build(); - // [END equal_and_inequality_range] + // [END datastore_equal_and_inequality_range] assertValidQuery(query); } @Test public void testInequalitySort() { setUpQueryTests(); - // [START inequality_sort] + // [START datastore_inequality_sort] Query query = Query.newEntityQueryBuilder() .setKind("Task") .setFilter(PropertyFilter.gt("priority", 3)) .setOrderBy(OrderBy.asc("priority"), OrderBy.asc("created")) .build(); - // [END inequality_sort] + // [END datastore_inequality_sort] assertValidQuery(query); } @Test public void testInequalitySortInvalidNotSame() { - // [START inequality_sort_invalid_not_same] + // [START datastore_inequality_sort_invalid_not_same] Query query = Query.newEntityQueryBuilder() .setKind("Task") .setFilter(PropertyFilter.gt("priority", 3)) .setOrderBy(OrderBy.asc("created")) .build(); - // [END inequality_sort_invalid_not_same] + // [END datastore_inequality_sort_invalid_not_same] assertInvalidQuery(query); } @Test public void testInequalitySortInvalidNotFirst() { - // [START inequality_sort_invalid_not_first] + // [START datastore_inequality_sort_invalid_not_first] Query query = Query.newEntityQueryBuilder() .setKind("Task") .setFilter(PropertyFilter.gt("priority", 3)) .setOrderBy(OrderBy.asc("created"), OrderBy.asc("priority")) .build(); - // [END inequality_sort_invalid_not_first] + // [END datastore_inequality_sort_invalid_not_first] assertInvalidQuery(query); } @Test public void testLimit() { setUpQueryTests(); - // [START limit] + // [START datastore_limit] Query query = Query.newEntityQueryBuilder().setKind("Task").setLimit(5).build(); - // [END limit] + // [END datastore_limit] assertValidQuery(query); } @@ -701,7 +701,7 @@ public void testCursorPaging() { } private Cursor cursorPaging(int pageSize, Cursor pageCursor) { - // [START cursor_paging] + // [START datastore_cursor_paging] EntityQuery.Builder queryBuilder = Query.newEntityQueryBuilder().setKind("Task") .setLimit(pageSize); if (pageCursor != null) { @@ -713,46 +713,46 @@ private Cursor cursorPaging(int pageSize, Cursor pageCursor) { // do something with the task } Cursor nextPageCursor = tasks.getCursorAfter(); - // [END cursor_paging] + // [END datastore_cursor_paging] return nextPageCursor; } @Test public void testEventualConsistentQuery() { setUpQueryTests(); - // [START eventual_consistent_query] + // [START datastore_eventual_consistent_query] Query query = Query.newEntityQueryBuilder() .setKind("Task") .setFilter(PropertyFilter.hasAncestor( datastore.newKeyFactory().setKind("TaskList").newKey("default"))) .build(); datastore.run(query, ReadOption.eventualConsistency()); - // [END eventual_consistent_query] + // [END datastore_eventual_consistent_query] assertValidQuery(query); } @Test public void testUnindexedPropertyQuery() { setUpQueryTests(); - // [START unindexed_property_query] + // [START datastore_unindexed_property_query] Query query = Query.newEntityQueryBuilder() .setKind("Task") .setFilter(PropertyFilter.eq("description", "A task description")) .build(); - // [END unindexed_property_query] + // [END datastore_unindexed_property_query] QueryResults results = datastore.run(query); assertFalse(results.hasNext()); } @Test public void testExplodingProperties() { - // [START exploding_properties] + // [START datastore_exploding_properties] Entity task = Entity.newBuilder(taskKey) .set("tags", "fun", "programming", "learn") .set("collaborators", "alice", "bob", "charlie") .set("created", Timestamp.now()) .build(); - // [END exploding_properties] + // [END datastore_exploding_properties] assertValidEntity(task); } @@ -777,7 +777,7 @@ public void testTransactionalUpdate() { assertSuccessfulTransfer(keys.get(0), keys.get(1)); } - // [START transactional_update] + // [START datastore_transactional_update] void transferFunds(Key fromKey, Key toKey, long amount) { Transaction txn = datastore.newTransaction(); try { @@ -796,14 +796,14 @@ void transferFunds(Key fromKey, Key toKey, long amount) { } } } - // [END transactional_update] + // [END datastore_transactional_update] @Test public void testTransactionalRetry() { List keys = setUpTransferTests(); Key fromKey = keys.get(0); Key toKey = keys.get(1); - // [START transactional_retry] + // [START datastore_transactional_retry] int retries = 5; while (true) { try { @@ -817,13 +817,13 @@ public void testTransactionalRetry() { } } // Retry handling can also be configured and automatically applied using google-cloud-java. - // [END transactional_retry] + // [END datastore_transactional_retry] assertSuccessfulTransfer(keys.get(0), keys.get(1)); } @Test public void testTransactionalGetOrCreate() { - // [START transactional_get_or_create] + // [START datastore_transactional_get_or_create] Entity task; Transaction txn = datastore.newTransaction(); try { @@ -838,7 +838,7 @@ public void testTransactionalGetOrCreate() { txn.rollback(); } } - // [END transactional_get_or_create] + // [END datastore_transactional_get_or_create] assertEquals(task, datastore.get(taskKey)); } @@ -848,7 +848,7 @@ public void testTransactionalSingleEntityGroupReadOnly() { Key taskListKey = datastore.newKeyFactory().setKind("TaskList").newKey("default"); Entity taskListEntity = Entity.newBuilder(taskListKey).build(); datastore.put(taskListEntity); - // [START transactional_single_entity_group_read_only] + // [START datastore_transactional_single_entity_group_read_only] Entity taskList; QueryResults tasks; Transaction txn = datastore.newTransaction(); @@ -865,7 +865,7 @@ public void testTransactionalSingleEntityGroupReadOnly() { txn.rollback(); } } - // [END transactional_single_entity_group_read_only] + // [END datastore_transactional_single_entity_group_read_only] assertEquals(taskListEntity, taskList); assertNotNull(tasks.next()); assertFalse(tasks.hasNext()); @@ -874,7 +874,7 @@ public void testTransactionalSingleEntityGroupReadOnly() { @Test public void testNamespaceRunQuery() { setUpQueryTests(); - // [START namespace_run_query] + // [START datastore_namespace_run_query] KeyFactory keyFactory = datastore.newKeyFactory().setKind("__namespace__"); Key startNamespace = keyFactory.newKey("g"); Key endNamespace = keyFactory.newKey("h"); @@ -889,28 +889,28 @@ public void testNamespaceRunQuery() { while (results.hasNext()) { namespaces.add(results.next().getName()); } - // [END namespace_run_query] + // [END datastore_namespace_run_query] assertEquals(ImmutableList.of("ghijklmnop"), namespaces); } @Test public void testKindRunQuery() { setUpQueryTests(); - // [START kind_run_query] + // [START datastore_kind_run_query] Query query = Query.newKeyQueryBuilder().setKind("__kind__").build(); List kinds = new ArrayList<>(); QueryResults results = datastore.run(query); while (results.hasNext()) { kinds.add(results.next().getName()); } - // [END kind_run_query] + // [END datastore_kind_run_query] assertEquals(ImmutableList.of("Task"), kinds); } @Test public void testPropertyRunQuery() { setUpQueryTests(); - // [START property_run_query] + // [START datastore_property_run_query] Query query = Query.newKeyQueryBuilder().setKind("__property__").build(); QueryResults keys = datastore.run(query); Map> propertiesByKind = new HashMap<>(); @@ -925,7 +925,7 @@ public void testPropertyRunQuery() { } properties.add(propertyName); } - // [END property_run_query] + // [END datastore_property_run_query] Map> expected = ImmutableMap.of("Task", ImmutableSet.of( "done", "category", "done", "completed", "priority", "created", "percent_complete", "tag")); assertEquals(expected, propertiesByKind); @@ -934,7 +934,7 @@ public void testPropertyRunQuery() { @Test public void testPropertyByKindRunQuery() { setUpQueryTests(); - // [START property_by_kind_run_query] + // [START datastore_property_by_kind_run_query] Key key = datastore.newKeyFactory().setKind("__kind__").newKey("Task"); Query query = Query.newEntityQueryBuilder() .setKind("__property__") @@ -955,7 +955,7 @@ public void testPropertyByKindRunQuery() { currentRepresentations.add(value.get()); } } - // [END property_by_kind_run_query] + // [END datastore_property_by_kind_run_query] Map> expected = ImmutableMap.>builder() .put("category", Collections.singleton("STRING")) .put("done", Collections.singleton("BOOLEAN")) @@ -971,7 +971,7 @@ public void testPropertyByKindRunQuery() { @Test public void testPropertyFilteringRunQuery() { setUpQueryTests(); - // [START property_filtering_run_query] + // [START datastore_property_filtering_run_query] Key startKey = datastore.newKeyFactory() .setKind("__property__") .addAncestors(PathElement.of("__kind__", "Task")) @@ -993,7 +993,7 @@ public void testPropertyFilteringRunQuery() { } properties.add(propertyName); } - // [END property_filtering_run_query] + // [END datastore_property_filtering_run_query] Map> expected = ImmutableMap.of("Task", ImmutableSet.of("priority", "tag")); assertEquals(expected, propertiesByKind); @@ -1002,17 +1002,17 @@ public void testPropertyFilteringRunQuery() { @Test public void testGqlRunQuery() { setUpQueryTests(); - // [START gql_run_query] + // [START datastore_gql_run_query] Query query = Query.newGqlQueryBuilder( ResultType.ENTITY, "select * from Task order by created asc").build(); - // [END gql_run_query] + // [END datastore_gql_run_query] assertValidQuery(query); } @Test public void testGqlNamedBindingQuery() { setUpQueryTests(); - // [START gql_named_binding_query] + // [START datastore_gql_named_binding_query] Query query = Query.newGqlQueryBuilder( ResultType.ENTITY, @@ -1020,32 +1020,32 @@ public void testGqlNamedBindingQuery() { .setBinding("completed", false) .setBinding("priority", 4) .build(); - // [END gql_named_binding_query] + // [END datastore_gql_named_binding_query] assertValidQuery(query); } @Test public void testGqlPositionalBindingQuery() { setUpQueryTests(); - // [START gql_positional_binding_query] + // [START datastore_gql_positional_binding_query] Query query = Query.newGqlQueryBuilder( ResultType.ENTITY, "select * from Task where completed = @1 and priority = @2") .addBinding(false) .addBinding(4) .build(); - // [END gql_positional_binding_query] + // [END datastore_gql_positional_binding_query] assertValidQuery(query); } @Test public void testGqlLiteralQuery() { setUpQueryTests(); - // [START gql_literal_query] + // [START datastore_gql_literal_query] Query query = Query.newGqlQueryBuilder( ResultType.ENTITY, "select * from Task where completed = false and priority = 4") .setAllowLiteral(true) .build(); - // [END gql_literal_query] + // [END datastore_gql_literal_query] assertValidQuery(query); } } From dbd7fbcf44329de788c2676f4c29aeaf6677e259 Mon Sep 17 00:00:00 2001 From: Jason Dobry Date: Wed, 20 Jun 2018 13:48:34 -0700 Subject: [PATCH 37/73] Delete unused Datastore region tags / samples. (#1138) --- .../google/datastore/snippets/TaskList.java | 2 - .../datastore/snippets/ConceptsTest.java | 75 ------------------- 2 files changed, 77 deletions(-) diff --git a/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java b/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java index f276eb5c9..3f035d3e3 100644 --- a/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java +++ b/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java @@ -114,7 +114,6 @@ void deleteTask(long id) { } // [END datastore_delete_entity] - // [START datastore_format_results] /** * Converts a list of task entities to a list of formatted task strings. * @@ -135,7 +134,6 @@ static List formatTasks(Iterator tasks) { } return strings; } - // [END datastore_format_results] /** * Handles a single command. diff --git a/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java b/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java index 0d082143d..0ae608bdc 100644 --- a/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java +++ b/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java @@ -540,31 +540,6 @@ public void testKeysOnlyQuery() { assertValidQuery(query); } - @Test - public void testRunKeysOnlyQuery() { - setUpQueryTests(); - Query query = Query.newKeyQueryBuilder().setKind("Task").build(); - // [START datastore_run_keys_only_query] - QueryResults taskKeys = datastore.run(query); - // [END datastore_run_keys_only_query] - assertNotNull(taskKeys.next()); - assertFalse(taskKeys.hasNext()); - } - - @Test - public void testDistinctQuery() { - setUpQueryTests(); - // [START datastore_distinct_query] - Query query = Query.newProjectionEntityQueryBuilder() - .setKind("Task") - .setProjection("category", "priority") - .setDistinctOn("category", "priority") - .setOrderBy(OrderBy.asc("category"), OrderBy.asc("priority")) - .build(); - // [END datastore_distinct_query] - assertValidQuery(query); - } - @Test public void testDistinctOnQuery() { setUpQueryTests(); @@ -998,54 +973,4 @@ public void testPropertyFilteringRunQuery() { ImmutableMap.of("Task", ImmutableSet.of("priority", "tag")); assertEquals(expected, propertiesByKind); } - - @Test - public void testGqlRunQuery() { - setUpQueryTests(); - // [START datastore_gql_run_query] - Query query = Query.newGqlQueryBuilder( - ResultType.ENTITY, "select * from Task order by created asc").build(); - // [END datastore_gql_run_query] - assertValidQuery(query); - } - - @Test - public void testGqlNamedBindingQuery() { - setUpQueryTests(); - // [START datastore_gql_named_binding_query] - Query query = - Query.newGqlQueryBuilder( - ResultType.ENTITY, - "select * from Task where completed = @completed and priority = @priority") - .setBinding("completed", false) - .setBinding("priority", 4) - .build(); - // [END datastore_gql_named_binding_query] - assertValidQuery(query); - } - - @Test - public void testGqlPositionalBindingQuery() { - setUpQueryTests(); - // [START datastore_gql_positional_binding_query] - Query query = Query.newGqlQueryBuilder( - ResultType.ENTITY, "select * from Task where completed = @1 and priority = @2") - .addBinding(false) - .addBinding(4) - .build(); - // [END datastore_gql_positional_binding_query] - assertValidQuery(query); - } - - @Test - public void testGqlLiteralQuery() { - setUpQueryTests(); - // [START datastore_gql_literal_query] - Query query = Query.newGqlQueryBuilder( - ResultType.ENTITY, "select * from Task where completed = false and priority = 4") - .setAllowLiteral(true) - .build(); - // [END datastore_gql_literal_query] - assertValidQuery(query); - } } From ba20337d4fa58ec2126a741bfd0fde164266a8a1 Mon Sep 17 00:00:00 2001 From: BenWhitehead Date: Mon, 4 Feb 2019 13:26:05 -0500 Subject: [PATCH 38/73] Add `ReadOnly` `TransactionOptions` to Datastore snippet (#1321) --- .../java/com/google/datastore/snippets/ConceptsTest.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java b/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java index 0ae608bdc..abb1ba5e8 100644 --- a/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java +++ b/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java @@ -36,7 +36,6 @@ import com.google.cloud.datastore.PathElement; import com.google.cloud.datastore.ProjectionEntity; import com.google.cloud.datastore.Query; -import com.google.cloud.datastore.Query.ResultType; import com.google.cloud.datastore.QueryResults; import com.google.cloud.datastore.ReadOption; import com.google.cloud.datastore.StringValue; @@ -50,6 +49,8 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterators; +import com.google.datastore.v1.TransactionOptions; +import com.google.datastore.v1.TransactionOptions.ReadOnly; import java.io.IOException; import java.util.ArrayList; import java.util.Calendar; @@ -826,7 +827,11 @@ public void testTransactionalSingleEntityGroupReadOnly() { // [START datastore_transactional_single_entity_group_read_only] Entity taskList; QueryResults tasks; - Transaction txn = datastore.newTransaction(); + Transaction txn = datastore.newTransaction( + TransactionOptions.newBuilder() + .setReadOnly(ReadOnly.newBuilder().build()) + .build() + ); try { taskList = txn.get(taskListKey); Query query = Query.newEntityQueryBuilder() From da90f8ffe3597603f794d26510ce719c08e7f6b3 Mon Sep 17 00:00:00 2001 From: BenWhitehead Date: Wed, 8 May 2019 16:40:01 -0400 Subject: [PATCH 39/73] docs(samples): Update datastore_basic_entity sample to include `taskKey` definition (#1350) --- .../test/java/com/google/datastore/snippets/ConceptsTest.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java b/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java index abb1ba5e8..ce6b59d8f 100644 --- a/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java +++ b/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java @@ -233,6 +233,9 @@ public void testArrayValue() { @Test public void testBasicEntity() { // [START datastore_basic_entity] + Key taskKey = datastore.newKeyFactory() + .setKind("Task") + .newKey("sampleTask"); Entity task = Entity.newBuilder(taskKey) .set("category", "Personal") .set("done", false) From c6807f78a0a6087deab0b5ae9df79dbc4dc32ab0 Mon Sep 17 00:00:00 2001 From: BenWhitehead Date: Wed, 26 Jun 2019 11:35:36 -0400 Subject: [PATCH 40/73] Add explicit ListValue to datastore_array_value (#1486) --- .../test/java/com/google/datastore/snippets/ConceptsTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java b/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java index ce6b59d8f..92500ddf9 100644 --- a/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java +++ b/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java @@ -33,6 +33,7 @@ import com.google.cloud.datastore.IncompleteKey; import com.google.cloud.datastore.Key; import com.google.cloud.datastore.KeyFactory; +import com.google.cloud.datastore.ListValue; import com.google.cloud.datastore.PathElement; import com.google.cloud.datastore.ProjectionEntity; import com.google.cloud.datastore.Query; @@ -224,7 +225,7 @@ public void testArrayValue() { // [START datastore_array_value] Entity task = Entity.newBuilder(taskKey) .set("tags", "fun", "programming") - .set("collaborators", "alice", "bob") + .set("collaborators", ListValue.of("alice", "bob")) .build(); // [END datastore_array_value] assertValidEntity(task); From e15510084e1d20cfd350983b5ad5810e36d41cf3 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Thu, 18 Jun 2020 22:35:42 +0200 Subject: [PATCH 41/73] chore(deps): update dependency com.google.cloud:google-cloud-datastore to v1.104.0 (#172) --- samples/install-without-bom/pom.xml | 2 +- samples/snapshot/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml index 749f5d3f5..22d7ba045 100644 --- a/samples/install-without-bom/pom.xml +++ b/samples/install-without-bom/pom.xml @@ -29,7 +29,7 @@ com.google.cloud google-cloud-datastore - 1.103.0 + 1.104.0 diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml index 2e5e1d8d2..c341fb63b 100644 --- a/samples/snapshot/pom.xml +++ b/samples/snapshot/pom.xml @@ -28,7 +28,7 @@ com.google.cloud google-cloud-datastore - 1.103.0 + 1.104.0 From 713fd904132d55a6e7fb9f2b01f3361c0010d7df Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Thu, 18 Jun 2020 21:36:08 +0000 Subject: [PATCH 42/73] chore: release 1.104.1-SNAPSHOT (#173) :robot: I have created a release \*beep\* \*boop\* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). --- google-cloud-datastore-bom/pom.xml | 6 +++--- google-cloud-datastore/pom.xml | 4 ++-- pom.xml | 4 ++-- proto-google-cloud-datastore-v1/pom.xml | 4 ++-- versions.txt | 8 ++++---- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/google-cloud-datastore-bom/pom.xml b/google-cloud-datastore-bom/pom.xml index 1a3b53317..495a23ba7 100644 --- a/google-cloud-datastore-bom/pom.xml +++ b/google-cloud-datastore-bom/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.google.cloud google-cloud-datastore-bom - 1.104.0 + 1.104.1-SNAPSHOT pom com.google.cloud @@ -63,12 +63,12 @@ com.google.api.grpc proto-google-cloud-datastore-v1 - 0.87.0 + 0.87.1-SNAPSHOT com.google.cloud google-cloud-datastore - 1.104.0 + 1.104.1-SNAPSHOT diff --git a/google-cloud-datastore/pom.xml b/google-cloud-datastore/pom.xml index 518648f69..4d4c3a9a3 100644 --- a/google-cloud-datastore/pom.xml +++ b/google-cloud-datastore/pom.xml @@ -2,7 +2,7 @@ 4.0.0 google-cloud-datastore - 1.104.0 + 1.104.1-SNAPSHOT jar Google Cloud Datastore https://github.com/googleapis/java-datastore @@ -12,7 +12,7 @@ com.google.cloud google-cloud-datastore-parent - 1.104.0 + 1.104.1-SNAPSHOT google-cloud-datastore diff --git a/pom.xml b/pom.xml index 72bbbc0ee..3bc16dea5 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.google.cloud google-cloud-datastore-parent pom - 1.104.0 + 1.104.1-SNAPSHOT Google Cloud Datastore Parent https://github.com/googleapis/java-datastore @@ -168,7 +168,7 @@ com.google.api.grpc proto-google-cloud-datastore-v1 - 0.87.0 + 0.87.1-SNAPSHOT com.google.cloud.datastore diff --git a/proto-google-cloud-datastore-v1/pom.xml b/proto-google-cloud-datastore-v1/pom.xml index de0b88bc0..002263efe 100644 --- a/proto-google-cloud-datastore-v1/pom.xml +++ b/proto-google-cloud-datastore-v1/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc proto-google-cloud-datastore-v1 - 0.87.0 + 0.87.1-SNAPSHOT proto-google-cloud-datastore-v1 PROTO library for proto-google-cloud-datastore-v1 com.google.cloud google-cloud-datastore-parent - 1.104.0 + 1.104.1-SNAPSHOT diff --git a/versions.txt b/versions.txt index 492e61c8b..3e94f3954 100644 --- a/versions.txt +++ b/versions.txt @@ -1,8 +1,8 @@ # Format: # module:released-version:current-version -google-cloud-datastore:1.104.0:1.104.0 -google-cloud-datastore-bom:1.104.0:1.104.0 -google-cloud-datastore-parent:1.104.0:1.104.0 -proto-google-cloud-datastore-v1:0.87.0:0.87.0 +google-cloud-datastore:1.104.0:1.104.1-SNAPSHOT +google-cloud-datastore-bom:1.104.0:1.104.1-SNAPSHOT +google-cloud-datastore-parent:1.104.0:1.104.1-SNAPSHOT +proto-google-cloud-datastore-v1:0.87.0:0.87.1-SNAPSHOT From 8618c1848e71424fa164fee9d8b7b53641b6b823 Mon Sep 17 00:00:00 2001 From: yangnuoyu <46553752+yangnuoyu@users.noreply.github.com> Date: Fri, 19 Jun 2020 18:50:09 -0700 Subject: [PATCH 43/73] feat(deps): adopt flatten plugin and google-cloud-shared-dependencies (#174) --- pom.xml | 1 - proto-google-cloud-datastore-v1/pom.xml | 1 - 2 files changed, 2 deletions(-) diff --git a/pom.xml b/pom.xml index 3bc16dea5..5f7436a6c 100644 --- a/pom.xml +++ b/pom.xml @@ -152,7 +152,6 @@ github google-cloud-datastore-parent https://googleapis.dev/java/google-api-grpc/latest - 1.3.2 diff --git a/proto-google-cloud-datastore-v1/pom.xml b/proto-google-cloud-datastore-v1/pom.xml index 002263efe..8e7e8d517 100644 --- a/proto-google-cloud-datastore-v1/pom.xml +++ b/proto-google-cloud-datastore-v1/pom.xml @@ -44,7 +44,6 @@ javax.annotation javax.annotation-api - ${javax.annotations.version} From ae6dc45dcd8b9cc71d08d22e6fc4437cea09bede Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Mon, 22 Jun 2020 22:51:11 +0200 Subject: [PATCH 44/73] build(deps): update dependency org.codehaus.mojo:build-helper-maven-plugin to v3.2.0 (#177) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [org.codehaus.mojo:build-helper-maven-plugin](http://www.mojohaus.org/build-helper-maven-plugin/) ([source](https://togithub.com/mojohaus/build-helper-maven-plugin)) | minor | `3.1.0` -> `3.2.0` | --- ### Renovate configuration :date: **Schedule**: At any time (no schedule defined). :vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied. :recycle: **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. :no_bell: **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#googleapis/java-datastore). --- samples/install-without-bom/pom.xml | 2 +- samples/snapshot/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml index 22d7ba045..5303163b8 100644 --- a/samples/install-without-bom/pom.xml +++ b/samples/install-without-bom/pom.xml @@ -53,7 +53,7 @@ org.codehaus.mojo build-helper-maven-plugin - 3.1.0 + 3.2.0 add-snippets-source diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml index c341fb63b..ced7beed0 100644 --- a/samples/snapshot/pom.xml +++ b/samples/snapshot/pom.xml @@ -52,7 +52,7 @@ org.codehaus.mojo build-helper-maven-plugin - 3.1.0 + 3.2.0 add-snippets-source From 805aa78533d1181ccae84ec83bcf7961813b2bef Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Tue, 23 Jun 2020 00:43:21 +0200 Subject: [PATCH 45/73] chore(deps): update dependency com.google.cloud:libraries-bom to v7.0.1 (#178) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [com.google.cloud:libraries-bom](https://togithub.com/GoogleCloudPlatform/cloud-opensource-java) | patch | `7.0.0` -> `7.0.1` | --- ### Renovate configuration :date: **Schedule**: At any time (no schedule defined). :vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied. :recycle: **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. :no_bell: **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#googleapis/java-datastore). --- samples/snippets/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml index f4cc04008..508ce9688 100644 --- a/samples/snippets/pom.xml +++ b/samples/snippets/pom.xml @@ -30,7 +30,7 @@ com.google.cloud libraries-bom - 7.0.0 + 7.0.1 pom import From 6b8eb9f6e26227dd1bffca9b02c21045e90e650f Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Wed, 24 Jun 2020 00:09:53 +0200 Subject: [PATCH 46/73] chore(deps): update dependency com.google.cloud:libraries-bom to v7.0.2 (#180) --- samples/snippets/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml index 508ce9688..b0b5a17be 100644 --- a/samples/snippets/pom.xml +++ b/samples/snippets/pom.xml @@ -30,7 +30,7 @@ com.google.cloud libraries-bom - 7.0.1 + 7.0.2 pom import From a55127121b8cf371b36c1c6279c3cac6a877523c Mon Sep 17 00:00:00 2001 From: David Supplee Date: Tue, 23 Jun 2020 15:11:31 -0700 Subject: [PATCH 47/73] chore: update client_documentation link (#179) --- .repo-metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.repo-metadata.json b/.repo-metadata.json index d1f6e9e23..f0c0aefad 100644 --- a/.repo-metadata.json +++ b/.repo-metadata.json @@ -2,7 +2,7 @@ "name": "datastore", "name_pretty": "Cloud Datastore", "product_documentation": "https://cloud.google.com/datastore", - "client_documentation": "https://googleapis.dev/java/google-cloud-clients/latest/index.html?com/google/cloud/asset/v1beta1/package-summary.html", + "client_documentation": "https://googleapis.dev/java/google-cloud-datastore/latest/index.html", "issue_tracker": "https://issuetracker.google.com/savedsearches/559768", "release_level": "ga", "language": "java", From 8e793754b7da676c98da273a741f6ede2bf220b7 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Thu, 25 Jun 2020 21:41:06 +0200 Subject: [PATCH 48/73] chore(deps): update dependency com.google.cloud:libraries-bom to v8 (#182) --- samples/snippets/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml index b0b5a17be..abaf534c1 100644 --- a/samples/snippets/pom.xml +++ b/samples/snippets/pom.xml @@ -30,7 +30,7 @@ com.google.cloud libraries-bom - 7.0.2 + 8.0.0 pom import From 4fa4df40d63d7fbce023d6231830dcc296c29dd1 Mon Sep 17 00:00:00 2001 From: BenWhitehead Date: Fri, 26 Jun 2020 12:10:00 -0400 Subject: [PATCH 49/73] deps: remove direct declaration of google-auth-library-oauth2-http (#184) Rather than having a direct managed dependency for google-auth-library-oauth2-http use the version provided by google-cloud-shared-dependencies. --- pom.xml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/pom.xml b/pom.xml index 5f7436a6c..e5785b6a3 100644 --- a/pom.xml +++ b/pom.xml @@ -180,11 +180,6 @@ - - com.google.auth - google-auth-library-oauth2-http - 0.20.0 - com.google.oauth-client google-oauth-client From 16bfb9a0127f4969a796ad95cc11cf2b8b92d0f3 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Tue, 30 Jun 2020 17:07:46 +0200 Subject: [PATCH 50/73] deps: update dependency com.google.oauth-client:google-oauth-client to v1.31.0 (#186) --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e5785b6a3..ae11fdd3a 100644 --- a/pom.xml +++ b/pom.xml @@ -183,7 +183,7 @@ com.google.oauth-client google-oauth-client - 1.30.6 + 1.31.0 From 941bea016f1ce4e1c1fd027b1671f950e9c52160 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Wed, 1 Jul 2020 19:50:28 +0200 Subject: [PATCH 51/73] deps: update dependency com.google.cloud:google-cloud-shared-dependencies to v0.8.2 (#187) --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ae11fdd3a..f2c19d059 100644 --- a/pom.xml +++ b/pom.xml @@ -159,7 +159,7 @@ com.google.cloud google-cloud-shared-dependencies - 0.8.1 + 0.8.2 pom import From 485a4cc5c71ce4b4ce3c1569b1f7a9d261bfc505 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Mon, 6 Jul 2020 22:59:11 +0200 Subject: [PATCH 52/73] build(deps): update dependency com.google.cloud:google-cloud-shared-config to v0.9.2 (#189) --- google-cloud-datastore-bom/pom.xml | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/google-cloud-datastore-bom/pom.xml b/google-cloud-datastore-bom/pom.xml index 495a23ba7..19cf07b9b 100644 --- a/google-cloud-datastore-bom/pom.xml +++ b/google-cloud-datastore-bom/pom.xml @@ -8,7 +8,7 @@ com.google.cloud google-cloud-shared-config - 0.8.1 + 0.9.2 Google Cloud datastore BOM diff --git a/pom.xml b/pom.xml index f2c19d059..c6c7045f9 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ com.google.cloud google-cloud-shared-config - 0.8.1 + 0.9.2 From 4de5241268ee97a88bd6a066db97177b8b7f5b07 Mon Sep 17 00:00:00 2001 From: BenWhitehead Date: Mon, 6 Jul 2020 17:20:35 -0400 Subject: [PATCH 53/73] build: add javax.annotation-api maven-dependency-plugin ignore for java9+ profile activation (#190) --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index c6c7045f9..68e5ce421 100644 --- a/pom.xml +++ b/pom.xml @@ -211,6 +211,7 @@ com.google.http-client:google-http-client-jackson2 com.google.oauth-client:google-oauth-client + javax.annotation:javax.annotation-api From 4c40b17989a64736df503ca9f35002ee12b88d86 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Thu, 9 Jul 2020 11:56:21 -0700 Subject: [PATCH 54/73] ci(java): run dependency test on Java 8 and 11 (#185) Redo fix in #633 with proper jinja templating format Source-Author: Jeff Ching Source-Date: Fri Jun 19 16:52:15 2020 -0700 Source-Repo: googleapis/synthtool Source-Sha: 4f2c9f752a94042472fc03c5bd9e06e89817d2bd Source-Link: https://github.com/googleapis/synthtool/commit/4f2c9f752a94042472fc03c5bd9e06e89817d2bd --- .github/workflows/ci.yaml | 5 ++++- .kokoro/dependencies.sh | 4 +++- synth.metadata | 4 ++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 445b4bf82..683022075 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -36,11 +36,14 @@ jobs: JOB_TYPE: test dependencies: runs-on: ubuntu-latest + strategy: + matrix: + java: [8, 11] steps: - uses: actions/checkout@v2 - uses: actions/setup-java@v1 with: - java-version: 8 + java-version: ${{matrix.java}} - run: java -version - run: .kokoro/dependencies.sh linkage-monitor: diff --git a/.kokoro/dependencies.sh b/.kokoro/dependencies.sh index cf3bb4347..cee4f11e7 100755 --- a/.kokoro/dependencies.sh +++ b/.kokoro/dependencies.sh @@ -41,8 +41,10 @@ echo "****************** DEPENDENCY LIST COMPLETENESS CHECK *******************" ## Run dependency list completeness check function completenessCheck() { # Output dep list with compile scope generated using the original pom + # Running mvn dependency:list on Java versions that support modules will also include the module of the dependency. + # This is stripped from the output as it is not present in the flattened pom. msg "Generating dependency list using original pom..." - mvn dependency:list -f pom.xml -Dsort=true | grep '\[INFO] .*:.*:.*:.*:.*' | grep -v ':test$' >.org-list.txt + mvn dependency:list -f pom.xml -Dsort=true | grep '\[INFO] .*:.*:.*:.*:.*' | sed -e s/\\s--\\smodule.*// | grep -v ':test$' >.org-list.txt # Output dep list generated using the flattened pom (test scope deps are ommitted) msg "Generating dependency list using flattened pom..." diff --git a/synth.metadata b/synth.metadata index c6089f985..2f0838df3 100644 --- a/synth.metadata +++ b/synth.metadata @@ -4,7 +4,7 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/java-datastore.git", - "sha": "f1874f1b2745724ccc2345f35b65fb577f53683e" + "sha": "4de5241268ee97a88bd6a066db97177b8b7f5b07" } }, { @@ -19,7 +19,7 @@ "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "c4f3059c27591eb24d6942a0e357ec94c80459f2" + "sha": "4f2c9f752a94042472fc03c5bd9e06e89817d2bd" } } ], From 2a2b15c76c3284516347276e4a279d5d00ef2719 Mon Sep 17 00:00:00 2001 From: Jeff Ching Date: Thu, 9 Jul 2020 13:10:03 -0700 Subject: [PATCH 55/73] chore: regenerate CODEOWNERS from templates (#153) CODEOWNERS is now managed by templates and we can configure the default team in the .repo-metadata.json file. --- .github/CODEOWNERS | 3 +++ .repo-metadata.json | 1 + synth.metadata | 10 +++++----- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 6137bef2a..538bf5f09 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -4,5 +4,8 @@ # For syntax help see: # https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners#codeowners-syntax +# The @googleapis/firestore-dpe is the default owner for changes in this repo +**/*.java @googleapis/firestore-dpe + # The java-samples-reviewers team is the default owner for samples changes samples/**/*.java @googleapis/java-samples-reviewers diff --git a/.repo-metadata.json b/.repo-metadata.json index f0c0aefad..1f65ef5c9 100644 --- a/.repo-metadata.json +++ b/.repo-metadata.json @@ -9,5 +9,6 @@ "repo": "googleapis/java-datastore", "repo_short": "java-datastore", "distribution_name": "com.google.cloud:google-cloud-datastore", + "codeowner_team": "@googleapis/firestore-dpe", "api_id": "datastore.googleapis.com" } diff --git a/synth.metadata b/synth.metadata index 2f0838df3..dc9cd9c1c 100644 --- a/synth.metadata +++ b/synth.metadata @@ -3,23 +3,23 @@ { "git": { "name": ".", - "remote": "https://github.com/googleapis/java-datastore.git", - "sha": "4de5241268ee97a88bd6a066db97177b8b7f5b07" + "remote": "git@github.com:BenWhitehead/java-datastore.git", + "sha": "d0b86f4ef69f52925a5670385e494177e841cef2" } }, { "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "c829fa0bfa725adaf20d82e86cbc1220e3ffd784", - "internalRef": "316124477" + "sha": "99ae9a76dbecb2aab008d5403e25413f5da0f436", + "internalRef": "320455075" } }, { "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "4f2c9f752a94042472fc03c5bd9e06e89817d2bd" + "sha": "799d8e6522c1ef7cb55a70d9ea0b15e045c3d00b" } } ], From a89eb08be1cd9689d38b8b67c472cc928e3549c1 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Fri, 10 Jul 2020 18:11:33 +0200 Subject: [PATCH 56/73] deps: update dependency com.google.cloud:google-cloud-shared-dependencies to v0.8.3 (#191) --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 68e5ce421..a2a1a5a1c 100644 --- a/pom.xml +++ b/pom.xml @@ -159,7 +159,7 @@ com.google.cloud google-cloud-shared-dependencies - 0.8.2 + 0.8.3 pom import From bc55730c92df8d8b6a692c1782834a3dd024c7e2 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Fri, 17 Jul 2020 00:42:11 +0200 Subject: [PATCH 57/73] chore(deps): update dependency com.google.cloud:libraries-bom to v8.1.0 (#192) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [com.google.cloud:libraries-bom](https://togithub.com/GoogleCloudPlatform/cloud-opensource-java) | minor | `8.0.0` -> `8.1.0` | --- ### Renovate configuration :date: **Schedule**: At any time (no schedule defined). :vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied. :recycle: **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. :no_bell: **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#googleapis/java-datastore). --- samples/snippets/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml index abaf534c1..b3b37ed3b 100644 --- a/samples/snippets/pom.xml +++ b/samples/snippets/pom.xml @@ -30,7 +30,7 @@ com.google.cloud libraries-bom - 8.0.0 + 8.1.0 pom import From a2d589acf8dc55764e91fa6aafcb7740b34f2e73 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Fri, 31 Jul 2020 10:54:44 -0700 Subject: [PATCH 58/73] build: add cloud-RAD for Java (#193) Co-authored-by: Jeff Ching Source-Author: Les Vogel Source-Date: Thu Jul 30 13:09:50 2020 -0700 Source-Repo: googleapis/synthtool Source-Sha: dd230c816f88d0141fcd0be83498986287220d1b Source-Link: https://github.com/googleapis/synthtool/commit/dd230c816f88d0141fcd0be83498986287220d1b --- .kokoro/release/publish_javadoc.cfg | 10 ++ .kokoro/release/publish_javadoc.sh | 25 ++++- synth.metadata | 158 +++++++++++++++++++++++++++- 3 files changed, 188 insertions(+), 5 deletions(-) diff --git a/.kokoro/release/publish_javadoc.cfg b/.kokoro/release/publish_javadoc.cfg index f321c5f60..5429fad5e 100644 --- a/.kokoro/release/publish_javadoc.cfg +++ b/.kokoro/release/publish_javadoc.cfg @@ -1,14 +1,24 @@ # Format: //devtools/kokoro/config/proto/build.proto + +gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/doc-templates/" + env_vars: { key: "STAGING_BUCKET" value: "docs-staging" } +env_vars: { + key: "STAGING_BUCKET_V2" + value: "docs-staging-v2-staging" + # Production will be at: docs-staging-v2 +} + env_vars: { key: "TRAMPOLINE_BUILD_FILE" value: "github/java-datastore/.kokoro/release/publish_javadoc.sh" } + before_action { fetch_keystore { keystore_resource { diff --git a/.kokoro/release/publish_javadoc.sh b/.kokoro/release/publish_javadoc.sh index 3dd8fe4a9..0597eb241 100755 --- a/.kokoro/release/publish_javadoc.sh +++ b/.kokoro/release/publish_javadoc.sh @@ -24,6 +24,11 @@ if [[ -z "${STAGING_BUCKET}" ]]; then exit 1 fi +if [[ -z "${STAGING_BUCKET_V2}" ]]; then + echo "Need to set STAGING_BUCKET_V2 environment variable" + exit 1 +fi + # work from the git root directory pushd $(dirname "$0")/../../ @@ -31,13 +36,13 @@ pushd $(dirname "$0")/../../ python3 -m pip install gcp-docuploader # compile all packages -mvn clean install -B -DskipTests=true +mvn clean install -B -q -DskipTests=true NAME=google-cloud-datastore VERSION=$(grep ${NAME}: versions.txt | cut -d: -f3) # build the docs -mvn site -B +mvn site -B -q pushd target/site/apidocs @@ -53,3 +58,19 @@ python3 -m docuploader upload . \ --staging-bucket ${STAGING_BUCKET} popd + +# V2 +mvn clean site -B -q -Ddevsite.template="${KOKORO_GFILE_DIR}/java/" + +pushd target/devsite + +# create metadata +python3 -m docuploader create-metadata \ + --name ${NAME} \ + --version ${VERSION} \ + --language java + +# upload docs +python3 -m docuploader upload . \ + --credentials ${CREDENTIALS} \ + --staging-bucket ${STAGING_BUCKET_V2} diff --git a/synth.metadata b/synth.metadata index dc9cd9c1c..63396cfc9 100644 --- a/synth.metadata +++ b/synth.metadata @@ -3,8 +3,8 @@ { "git": { "name": ".", - "remote": "git@github.com:BenWhitehead/java-datastore.git", - "sha": "d0b86f4ef69f52925a5670385e494177e841cef2" + "remote": "https://github.com/googleapis/java-datastore.git", + "sha": "bc55730c92df8d8b6a692c1782834a3dd024c7e2" } }, { @@ -19,7 +19,7 @@ "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "799d8e6522c1ef7cb55a70d9ea0b15e045c3d00b" + "sha": "dd230c816f88d0141fcd0be83498986287220d1b" } } ], @@ -33,5 +33,157 @@ "generator": "bazel" } } + ], + "generatedFiles": [ + ".github/CODEOWNERS", + ".github/ISSUE_TEMPLATE/bug_report.md", + ".github/ISSUE_TEMPLATE/feature_request.md", + ".github/ISSUE_TEMPLATE/support_request.md", + ".github/PULL_REQUEST_TEMPLATE.md", + ".github/release-please.yml", + ".github/trusted-contribution.yml", + ".github/workflows/ci.yaml", + ".kokoro/build.bat", + ".kokoro/build.sh", + ".kokoro/coerce_logs.sh", + ".kokoro/common.cfg", + ".kokoro/common.sh", + ".kokoro/continuous/common.cfg", + ".kokoro/continuous/dependencies.cfg", + ".kokoro/continuous/integration.cfg", + ".kokoro/continuous/java11.cfg", + ".kokoro/continuous/java7.cfg", + ".kokoro/continuous/java8-osx.cfg", + ".kokoro/continuous/java8-win.cfg", + ".kokoro/continuous/java8.cfg", + ".kokoro/continuous/lint.cfg", + ".kokoro/continuous/propose_release.cfg", + ".kokoro/continuous/samples.cfg", + ".kokoro/dependencies.sh", + ".kokoro/linkage-monitor.sh", + ".kokoro/nightly/common.cfg", + ".kokoro/nightly/dependencies.cfg", + ".kokoro/nightly/integration.cfg", + ".kokoro/nightly/java11.cfg", + ".kokoro/nightly/java7.cfg", + ".kokoro/nightly/java8-osx.cfg", + ".kokoro/nightly/java8-win.cfg", + ".kokoro/nightly/java8.cfg", + ".kokoro/nightly/lint.cfg", + ".kokoro/nightly/samples.cfg", + ".kokoro/populate-secrets.sh", + ".kokoro/presubmit/clirr.cfg", + ".kokoro/presubmit/common.cfg", + ".kokoro/presubmit/dependencies.cfg", + ".kokoro/presubmit/integration.cfg", + ".kokoro/presubmit/java11.cfg", + ".kokoro/presubmit/java7.cfg", + ".kokoro/presubmit/java8-osx.cfg", + ".kokoro/presubmit/java8-win.cfg", + ".kokoro/presubmit/java8.cfg", + ".kokoro/presubmit/linkage-monitor.cfg", + ".kokoro/presubmit/lint.cfg", + ".kokoro/presubmit/samples.cfg", + ".kokoro/release/bump_snapshot.cfg", + ".kokoro/release/common.cfg", + ".kokoro/release/common.sh", + ".kokoro/release/drop.cfg", + ".kokoro/release/drop.sh", + ".kokoro/release/promote.cfg", + ".kokoro/release/promote.sh", + ".kokoro/release/publish_javadoc.cfg", + ".kokoro/release/publish_javadoc.sh", + ".kokoro/release/snapshot.cfg", + ".kokoro/release/snapshot.sh", + ".kokoro/release/stage.cfg", + ".kokoro/release/stage.sh", + ".kokoro/trampoline.sh", + "CODE_OF_CONDUCT.md", + "CONTRIBUTING.md", + "LICENSE", + "codecov.yaml", + "java.header", + "license-checks.xml", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AllocateIdsRequest.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AllocateIdsRequestOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AllocateIdsResponse.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AllocateIdsResponseOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ArrayValue.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ArrayValueOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionRequest.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionRequestOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionResponse.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionResponseOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitRequest.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitRequestOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitResponse.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitResponseOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CompositeFilter.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CompositeFilterOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/DatastoreProto.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Entity.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/EntityOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/EntityProto.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/EntityResult.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/EntityResultOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Filter.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/FilterOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQuery.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQueryOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQueryParameter.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQueryParameterOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Key.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/KeyOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/KindExpression.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/KindExpressionOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupRequest.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupRequestOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupResponse.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupResponseOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Mutation.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/MutationOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/MutationResult.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/MutationResultOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PartitionId.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PartitionIdOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Projection.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ProjectionOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyFilter.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyFilterOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyOrder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyOrderOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyReference.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyReferenceOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Query.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryProto.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryResultBatch.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryResultBatchOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReadOptions.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReadOptionsOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsRequest.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsRequestOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsResponse.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsResponseOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackRequest.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackRequestOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackResponse.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackResponseOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryRequest.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryRequestOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryResponse.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryResponseOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/TransactionOptions.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/TransactionOptionsOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Value.java", + "proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ValueOrBuilder.java", + "proto-google-cloud-datastore-v1/src/main/proto/google/datastore/v1/datastore.proto", + "proto-google-cloud-datastore-v1/src/main/proto/google/datastore/v1/entity.proto", + "proto-google-cloud-datastore-v1/src/main/proto/google/datastore/v1/query.proto", + "renovate.json", + "samples/install-without-bom/pom.xml", + "samples/pom.xml", + "samples/snapshot/pom.xml", + "samples/snippets/pom.xml" ] } \ No newline at end of file From 7214e0ae224633e2effc023d10494e0164a8f9dc Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Tue, 4 Aug 2020 20:24:31 +0200 Subject: [PATCH 59/73] deps: update dependency com.google.cloud:google-cloud-shared-dependencies to v0.8.4 (#196) --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a2a1a5a1c..434a87874 100644 --- a/pom.xml +++ b/pom.xml @@ -159,7 +159,7 @@ com.google.cloud google-cloud-shared-dependencies - 0.8.3 + 0.8.4 pom import From 21c4f6c95dc8281c26f0d410e3fe52c0600bd2c2 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Thu, 6 Aug 2020 15:47:20 -0700 Subject: [PATCH 60/73] cleanup: removes unused kokoro config files (#197) * cleanup: removes unused kokoro config files Removes unused kokoro files from the java library template. We have stopped running some of these due to Github quota issues. * fix:reverts back samples.cfg files The files presubmit/samples.cfg and nightly/samples.cfg should remain in the java template repository. Co-authored-by: Jeffrey Rennie Source-Author: Thiago Nunes Source-Date: Thu Aug 6 09:48:58 2020 +1000 Source-Repo: googleapis/synthtool Source-Sha: 4530cc6ff080ef8aca258c1ec92c4db10a1bbfb4 Source-Link: https://github.com/googleapis/synthtool/commit/4530cc6ff080ef8aca258c1ec92c4db10a1bbfb4 --- .kokoro/continuous/dependencies.cfg | 12 ------ .kokoro/continuous/integration.cfg | 7 ---- .kokoro/continuous/java11.cfg | 7 ---- .kokoro/continuous/java7.cfg | 7 ---- .kokoro/continuous/java8-osx.cfg | 3 -- .kokoro/continuous/java8-win.cfg | 3 -- .kokoro/continuous/lint.cfg | 13 ------- .kokoro/continuous/propose_release.cfg | 53 -------------------------- .kokoro/continuous/samples.cfg | 31 --------------- .kokoro/nightly/dependencies.cfg | 12 ------ .kokoro/nightly/lint.cfg | 13 ------- synth.metadata | 15 +------- 12 files changed, 2 insertions(+), 174 deletions(-) delete mode 100644 .kokoro/continuous/dependencies.cfg delete mode 100644 .kokoro/continuous/integration.cfg delete mode 100644 .kokoro/continuous/java11.cfg delete mode 100644 .kokoro/continuous/java7.cfg delete mode 100644 .kokoro/continuous/java8-osx.cfg delete mode 100644 .kokoro/continuous/java8-win.cfg delete mode 100644 .kokoro/continuous/lint.cfg delete mode 100644 .kokoro/continuous/propose_release.cfg delete mode 100644 .kokoro/continuous/samples.cfg delete mode 100644 .kokoro/nightly/dependencies.cfg delete mode 100644 .kokoro/nightly/lint.cfg diff --git a/.kokoro/continuous/dependencies.cfg b/.kokoro/continuous/dependencies.cfg deleted file mode 100644 index 8908efe02..000000000 --- a/.kokoro/continuous/dependencies.cfg +++ /dev/null @@ -1,12 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Configure the docker image for kokoro-trampoline. -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/java8" -} - -env_vars: { - key: "TRAMPOLINE_BUILD_FILE" - value: "github/java-datastore/.kokoro/dependencies.sh" -} diff --git a/.kokoro/continuous/integration.cfg b/.kokoro/continuous/integration.cfg deleted file mode 100644 index 3b017fc80..000000000 --- a/.kokoro/continuous/integration.cfg +++ /dev/null @@ -1,7 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Configure the docker image for kokoro-trampoline. -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/java8" -} diff --git a/.kokoro/continuous/java11.cfg b/.kokoro/continuous/java11.cfg deleted file mode 100644 index 709f2b4c7..000000000 --- a/.kokoro/continuous/java11.cfg +++ /dev/null @@ -1,7 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Configure the docker image for kokoro-trampoline. -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/java11" -} diff --git a/.kokoro/continuous/java7.cfg b/.kokoro/continuous/java7.cfg deleted file mode 100644 index cb24f44ee..000000000 --- a/.kokoro/continuous/java7.cfg +++ /dev/null @@ -1,7 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Configure the docker image for kokoro-trampoline. -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/java7" -} diff --git a/.kokoro/continuous/java8-osx.cfg b/.kokoro/continuous/java8-osx.cfg deleted file mode 100644 index 3ba7de0b1..000000000 --- a/.kokoro/continuous/java8-osx.cfg +++ /dev/null @@ -1,3 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -build_file: "java-datastore/.kokoro/build.sh" diff --git a/.kokoro/continuous/java8-win.cfg b/.kokoro/continuous/java8-win.cfg deleted file mode 100644 index 85494f810..000000000 --- a/.kokoro/continuous/java8-win.cfg +++ /dev/null @@ -1,3 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -build_file: "java-datastore/.kokoro/build.bat" diff --git a/.kokoro/continuous/lint.cfg b/.kokoro/continuous/lint.cfg deleted file mode 100644 index 6d323c8ae..000000000 --- a/.kokoro/continuous/lint.cfg +++ /dev/null @@ -1,13 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Configure the docker image for kokoro-trampoline. - -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/java8" -} - -env_vars: { - key: "JOB_TYPE" - value: "lint" -} \ No newline at end of file diff --git a/.kokoro/continuous/propose_release.cfg b/.kokoro/continuous/propose_release.cfg deleted file mode 100644 index 8ca7ae7f7..000000000 --- a/.kokoro/continuous/propose_release.cfg +++ /dev/null @@ -1,53 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Build logs will be here -action { - define_artifacts { - regex: "**/*sponge_log.xml" - } -} - -# Download trampoline resources. -gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline" - -# Use the trampoline script to run in docker. -build_file: "java-datastore/.kokoro/trampoline.sh" - -# Configure the docker image for kokoro-trampoline. -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/node:10-user" -} - -env_vars: { - key: "TRAMPOLINE_BUILD_FILE" - value: "github/java-datastore/.kokoro/continuous/propose_release.sh" -} - -# tokens used by release-please to keep an up-to-date release PR. -before_action { - fetch_keystore { - keystore_resource { - keystore_config_id: 73713 - keyname: "github-magic-proxy-key-release-please" - } - } -} - -before_action { - fetch_keystore { - keystore_resource { - keystore_config_id: 73713 - keyname: "github-magic-proxy-token-release-please" - } - } -} - -before_action { - fetch_keystore { - keystore_resource { - keystore_config_id: 73713 - keyname: "github-magic-proxy-url-release-please" - } - } -} diff --git a/.kokoro/continuous/samples.cfg b/.kokoro/continuous/samples.cfg deleted file mode 100644 index fa7b493d0..000000000 --- a/.kokoro/continuous/samples.cfg +++ /dev/null @@ -1,31 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Configure the docker image for kokoro-trampoline. -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/java8" -} - -env_vars: { - key: "JOB_TYPE" - value: "samples" -} - -env_vars: { - key: "GCLOUD_PROJECT" - value: "gcloud-devel" -} - -env_vars: { - key: "GOOGLE_APPLICATION_CREDENTIALS" - value: "keystore/73713_java_it_service_account" -} - -before_action { - fetch_keystore { - keystore_resource { - keystore_config_id: 73713 - keyname: "java_it_service_account" - } - } -} diff --git a/.kokoro/nightly/dependencies.cfg b/.kokoro/nightly/dependencies.cfg deleted file mode 100644 index 8908efe02..000000000 --- a/.kokoro/nightly/dependencies.cfg +++ /dev/null @@ -1,12 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Configure the docker image for kokoro-trampoline. -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/java8" -} - -env_vars: { - key: "TRAMPOLINE_BUILD_FILE" - value: "github/java-datastore/.kokoro/dependencies.sh" -} diff --git a/.kokoro/nightly/lint.cfg b/.kokoro/nightly/lint.cfg deleted file mode 100644 index 6d323c8ae..000000000 --- a/.kokoro/nightly/lint.cfg +++ /dev/null @@ -1,13 +0,0 @@ -# Format: //devtools/kokoro/config/proto/build.proto - -# Configure the docker image for kokoro-trampoline. - -env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/java8" -} - -env_vars: { - key: "JOB_TYPE" - value: "lint" -} \ No newline at end of file diff --git a/synth.metadata b/synth.metadata index 63396cfc9..f784adce1 100644 --- a/synth.metadata +++ b/synth.metadata @@ -4,7 +4,7 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/java-datastore.git", - "sha": "bc55730c92df8d8b6a692c1782834a3dd024c7e2" + "sha": "7214e0ae224633e2effc023d10494e0164a8f9dc" } }, { @@ -19,7 +19,7 @@ "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "dd230c816f88d0141fcd0be83498986287220d1b" + "sha": "4530cc6ff080ef8aca258c1ec92c4db10a1bbfb4" } } ], @@ -49,27 +49,16 @@ ".kokoro/common.cfg", ".kokoro/common.sh", ".kokoro/continuous/common.cfg", - ".kokoro/continuous/dependencies.cfg", - ".kokoro/continuous/integration.cfg", - ".kokoro/continuous/java11.cfg", - ".kokoro/continuous/java7.cfg", - ".kokoro/continuous/java8-osx.cfg", - ".kokoro/continuous/java8-win.cfg", ".kokoro/continuous/java8.cfg", - ".kokoro/continuous/lint.cfg", - ".kokoro/continuous/propose_release.cfg", - ".kokoro/continuous/samples.cfg", ".kokoro/dependencies.sh", ".kokoro/linkage-monitor.sh", ".kokoro/nightly/common.cfg", - ".kokoro/nightly/dependencies.cfg", ".kokoro/nightly/integration.cfg", ".kokoro/nightly/java11.cfg", ".kokoro/nightly/java7.cfg", ".kokoro/nightly/java8-osx.cfg", ".kokoro/nightly/java8-win.cfg", ".kokoro/nightly/java8.cfg", - ".kokoro/nightly/lint.cfg", ".kokoro/nightly/samples.cfg", ".kokoro/populate-secrets.sh", ".kokoro/presubmit/clirr.cfg", From 60a080c07c73562962c24684b5f5314e5888c2d5 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Fri, 7 Aug 2020 10:42:10 -0700 Subject: [PATCH 61/73] build: update dependencies check to only check for runtime and compile scopes (#198) * change:Updated dependencies check to only use runtime & compile scope * Update dependencies.sh * feat: update dependencies check to only check for runtime and compile scopes Co-authored-by: Saleh Mostafa Co-authored-by: Jeffrey Rennie Source-Author: salehsquared Source-Date: Thu Aug 6 13:01:02 2020 -0400 Source-Repo: googleapis/synthtool Source-Sha: f8823dec98277a9516f2fb6fae9f58b3a59a23e1 Source-Link: https://github.com/googleapis/synthtool/commit/f8823dec98277a9516f2fb6fae9f58b3a59a23e1 --- .kokoro/dependencies.sh | 9 +++++---- synth.metadata | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/.kokoro/dependencies.sh b/.kokoro/dependencies.sh index cee4f11e7..c91e5a569 100755 --- a/.kokoro/dependencies.sh +++ b/.kokoro/dependencies.sh @@ -43,12 +43,13 @@ function completenessCheck() { # Output dep list with compile scope generated using the original pom # Running mvn dependency:list on Java versions that support modules will also include the module of the dependency. # This is stripped from the output as it is not present in the flattened pom. + # Only dependencies with 'compile' or 'runtime' scope are included from original dependency list. msg "Generating dependency list using original pom..." - mvn dependency:list -f pom.xml -Dsort=true | grep '\[INFO] .*:.*:.*:.*:.*' | sed -e s/\\s--\\smodule.*// | grep -v ':test$' >.org-list.txt + mvn dependency:list -f pom.xml -DincludeScope=runtime -Dsort=true | grep '\[INFO] .*:.*:.*:.*:.*' | sed -e s/\\s--\\smodule.*// >.org-list.txt - # Output dep list generated using the flattened pom (test scope deps are ommitted) + # Output dep list generated using the flattened pom (only 'compile' and 'runtime' scopes) msg "Generating dependency list using flattened pom..." - mvn dependency:list -f .flattened-pom.xml -Dsort=true | grep '\[INFO] .*:.*:.*:.*:.*' >.new-list.txt + mvn dependency:list -f .flattened-pom.xml -DincludeScope=runtime -Dsort=true | grep '\[INFO] .*:.*:.*:.*:.*' >.new-list.txt # Compare two dependency lists msg "Comparing dependency lists..." @@ -85,4 +86,4 @@ then else msg "Errors found. See log statements above." exit 1 -fi +fi \ No newline at end of file diff --git a/synth.metadata b/synth.metadata index f784adce1..a579e9258 100644 --- a/synth.metadata +++ b/synth.metadata @@ -4,7 +4,7 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/java-datastore.git", - "sha": "7214e0ae224633e2effc023d10494e0164a8f9dc" + "sha": "21c4f6c95dc8281c26f0d410e3fe52c0600bd2c2" } }, { @@ -19,7 +19,7 @@ "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "4530cc6ff080ef8aca258c1ec92c4db10a1bbfb4" + "sha": "f8823dec98277a9516f2fb6fae9f58b3a59a23e1" } } ], From 6a959d3f7ca75ba5da1d1c4cb509593d3be39e98 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Fri, 7 Aug 2020 23:34:17 +0200 Subject: [PATCH 62/73] deps: update dependency com.google.cloud:google-cloud-shared-dependencies to v0.8.6 (#199) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [com.google.cloud:google-cloud-shared-dependencies](https://togithub.com/googleapis/java-shared-dependencies) | patch | `0.8.4` -> `0.8.6` | --- ### Release Notes

googleapis/java-shared-dependencies ### [`v0.8.6`](https://togithub.com/googleapis/java-shared-dependencies/blob/master/CHANGELOG.md#​086-httpswwwgithubcomgoogleapisjava-shared-dependenciescomparev085v086-2020-08-07) [Compare Source](https://togithub.com/googleapis/java-shared-dependencies/compare/v0.8.5...v0.8.6) ### [`v0.8.5`](https://togithub.com/googleapis/java-shared-dependencies/blob/master/CHANGELOG.md#​085-httpswwwgithubcomgoogleapisjava-shared-dependenciescomparev084v085-2020-08-07) [Compare Source](https://togithub.com/googleapis/java-shared-dependencies/compare/v0.8.4...v0.8.5)
--- ### Renovate configuration :date: **Schedule**: At any time (no schedule defined). :vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied. :recycle: **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. :no_bell: **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#googleapis/java-datastore). --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 434a87874..919f370c4 100644 --- a/pom.xml +++ b/pom.xml @@ -159,7 +159,7 @@ com.google.cloud google-cloud-shared-dependencies - 0.8.4 + 0.8.6 pom import From 9425972905d1e370192eeb3bbfe837f5a7fb25cf Mon Sep 17 00:00:00 2001 From: Elliotte Rusty Harold Date: Wed, 12 Aug 2020 16:38:03 +0000 Subject: [PATCH 63/73] docs: libraries-bom 8.1.0 (#200) @chingor13 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 213eb9f9b..75af41389 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ If you are using Maven with a BOM, add this to your pom.xml file. com.google.cloud libraries-bom - 3.0.0 + 8.1.0 pom import From 55dd1083f3a5ace6a39f1376563d3c43f8fbd4ce Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Fri, 14 Aug 2020 04:26:16 +0200 Subject: [PATCH 64/73] chore(deps): update dependency com.google.cloud:libraries-bom to v9 (#201) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [com.google.cloud:libraries-bom](https://togithub.com/GoogleCloudPlatform/cloud-opensource-java) | major | `8.1.0` -> `9.0.0` | --- ### Renovate configuration :date: **Schedule**: At any time (no schedule defined). :vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied. :recycle: **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. :no_bell: **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#googleapis/java-datastore). --- samples/snippets/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml index b3b37ed3b..ffd8d8903 100644 --- a/samples/snippets/pom.xml +++ b/samples/snippets/pom.xml @@ -30,7 +30,7 @@ com.google.cloud libraries-bom - 8.1.0 + 9.0.0 pom import From 44095b3c76f0913e0c39af5723eedbc6d18b60e8 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Tue, 18 Aug 2020 00:04:13 +0200 Subject: [PATCH 65/73] chore(deps): update dependency com.google.cloud:libraries-bom to v9.1.0 --- samples/snippets/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml index ffd8d8903..1995442a2 100644 --- a/samples/snippets/pom.xml +++ b/samples/snippets/pom.xml @@ -30,7 +30,7 @@ com.google.cloud libraries-bom - 9.0.0 + 9.1.0 pom import From d188c4cc65fc726532f99943beaff744e38f7fc6 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Tue, 18 Aug 2020 09:57:31 -0700 Subject: [PATCH 66/73] chore(java_templates): add lint/static analysis presubmit checks for samples (#203) * chore(java_templates): add lint/static analysis presubmit checks for samples * chore: fix trailing whitespace Source-Author: Jeff Ching Source-Date: Mon Aug 17 14:29:16 2020 -0700 Source-Repo: googleapis/synthtool Source-Sha: c3caf0704f25a0c365f1c315e804a30b87c62a75 Source-Link: https://github.com/googleapis/synthtool/commit/c3caf0704f25a0c365f1c315e804a30b87c62a75 --- .github/workflows/samples.yaml | 24 ++++++++++++++++++++++++ synth.metadata | 5 +++-- 2 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/samples.yaml diff --git a/.github/workflows/samples.yaml b/.github/workflows/samples.yaml new file mode 100644 index 000000000..34bf860f6 --- /dev/null +++ b/.github/workflows/samples.yaml @@ -0,0 +1,24 @@ +on: + pull_request: +name: samples +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-java@v1 + with: + java-version: 8 + - name: Run checkstyle + run: mvn -P lint --quiet --batch-mode checkstyle:check + working-directory: samples/snippets + static: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-java@v1 + with: + java-version: 8 + - name: Run PMD & Spotbugs + run: mvn -P lint --quiet --batch-mode compile pmd:cpd-check spotbugs:check + working-directory: samples/snippets diff --git a/synth.metadata b/synth.metadata index a579e9258..5e015cdb0 100644 --- a/synth.metadata +++ b/synth.metadata @@ -4,7 +4,7 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/java-datastore.git", - "sha": "21c4f6c95dc8281c26f0d410e3fe52c0600bd2c2" + "sha": "44095b3c76f0913e0c39af5723eedbc6d18b60e8" } }, { @@ -19,7 +19,7 @@ "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "f8823dec98277a9516f2fb6fae9f58b3a59a23e1" + "sha": "c3caf0704f25a0c365f1c315e804a30b87c62a75" } } ], @@ -43,6 +43,7 @@ ".github/release-please.yml", ".github/trusted-contribution.yml", ".github/workflows/ci.yaml", + ".github/workflows/samples.yaml", ".kokoro/build.bat", ".kokoro/build.sh", ".kokoro/coerce_logs.sh", From 254988134ad240aac3bab3e48ee2e3c69e4dd54b Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Fri, 21 Aug 2020 09:22:44 -0700 Subject: [PATCH 67/73] chore(java_templates): stop running pmd/spotbugs checks for samples (#206) This was creating too much noise. We will revisit with other options and/or tune these checks. Source-Author: Jeff Ching Source-Date: Wed Aug 19 12:26:49 2020 -0700 Source-Repo: googleapis/synthtool Source-Sha: 9602086c6c5b05db77950c7f7495a2a3868f3537 Source-Link: https://github.com/googleapis/synthtool/commit/9602086c6c5b05db77950c7f7495a2a3868f3537 --- .github/workflows/samples.yaml | 10 ---------- synth.metadata | 4 ++-- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/.github/workflows/samples.yaml b/.github/workflows/samples.yaml index 34bf860f6..a1d500730 100644 --- a/.github/workflows/samples.yaml +++ b/.github/workflows/samples.yaml @@ -12,13 +12,3 @@ jobs: - name: Run checkstyle run: mvn -P lint --quiet --batch-mode checkstyle:check working-directory: samples/snippets - static: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-java@v1 - with: - java-version: 8 - - name: Run PMD & Spotbugs - run: mvn -P lint --quiet --batch-mode compile pmd:cpd-check spotbugs:check - working-directory: samples/snippets diff --git a/synth.metadata b/synth.metadata index 5e015cdb0..ad6407021 100644 --- a/synth.metadata +++ b/synth.metadata @@ -4,7 +4,7 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/java-datastore.git", - "sha": "44095b3c76f0913e0c39af5723eedbc6d18b60e8" + "sha": "d188c4cc65fc726532f99943beaff744e38f7fc6" } }, { @@ -19,7 +19,7 @@ "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "c3caf0704f25a0c365f1c315e804a30b87c62a75" + "sha": "9602086c6c5b05db77950c7f7495a2a3868f3537" } } ], From d6eca596440371e31031d36d600466b8e13e8109 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Wed, 26 Aug 2020 09:31:49 -0700 Subject: [PATCH 68/73] build: temporarily disable reporting to unblock releases Source-Author: Stephanie Wang Source-Date: Tue Aug 25 13:05:26 2020 -0400 Source-Repo: googleapis/synthtool Source-Sha: 968465a1cad496e1292ef4584a054a35f756ff94 Source-Link: https://github.com/googleapis/synthtool/commit/968465a1cad496e1292ef4584a054a35f756ff94 --- .kokoro/release/stage.sh | 5 +++-- synth.metadata | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.kokoro/release/stage.sh b/.kokoro/release/stage.sh index 3c482cbc5..d19191fc8 100755 --- a/.kokoro/release/stage.sh +++ b/.kokoro/release/stage.sh @@ -16,8 +16,9 @@ set -eo pipefail # Start the releasetool reporter -python3 -m pip install gcp-releasetool -python3 -m releasetool publish-reporter-script > /tmp/publisher-script; source /tmp/publisher-script +# Disable reporting due to issue observed with Kokoro blocking releases +# python3 -m pip install gcp-releasetool +# python3 -m releasetool publish-reporter-script > /tmp/publisher-script; source /tmp/publisher-script source $(dirname "$0")/common.sh MAVEN_SETTINGS_FILE=$(realpath $(dirname "$0")/../../)/settings.xml diff --git a/synth.metadata b/synth.metadata index ad6407021..bd32f2d1f 100644 --- a/synth.metadata +++ b/synth.metadata @@ -4,7 +4,7 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/java-datastore.git", - "sha": "d188c4cc65fc726532f99943beaff744e38f7fc6" + "sha": "254988134ad240aac3bab3e48ee2e3c69e4dd54b" } }, { @@ -19,7 +19,7 @@ "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "9602086c6c5b05db77950c7f7495a2a3868f3537" + "sha": "968465a1cad496e1292ef4584a054a35f756ff94" } } ], From 2cacc10e6678f9f041bf4cc8b5ffc6d8db03d28b Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Thu, 27 Aug 2020 09:27:05 -0700 Subject: [PATCH 69/73] build(java): switch to release-publish app for notifying GitHub of release status Source-Author: Jeff Ching Source-Date: Wed Aug 26 21:48:06 2020 -0700 Source-Repo: googleapis/synthtool Source-Sha: 019c7168faa0e56619f792693a8acdb30d6de19b Source-Link: https://github.com/googleapis/synthtool/commit/019c7168faa0e56619f792693a8acdb30d6de19b --- .kokoro/release/stage.cfg | 31 +++---------------------------- .kokoro/release/stage.sh | 5 ++--- synth.metadata | 4 ++-- 3 files changed, 7 insertions(+), 33 deletions(-) diff --git a/.kokoro/release/stage.cfg b/.kokoro/release/stage.cfg index c6ff500b2..159e4cfdf 100644 --- a/.kokoro/release/stage.cfg +++ b/.kokoro/release/stage.cfg @@ -13,32 +13,7 @@ action { } } -# Fetch the token needed for reporting release status to GitHub -before_action { - fetch_keystore { - keystore_resource { - keystore_config_id: 73713 - keyname: "yoshi-automation-github-key" - } - } -} - -# Fetch magictoken to use with Magic Github Proxy -before_action { - fetch_keystore { - keystore_resource { - keystore_config_id: 73713 - keyname: "releasetool-magictoken" - } - } -} - -# Fetch api key to use with Magic Github Proxy -before_action { - fetch_keystore { - keystore_resource { - keystore_config_id: 73713 - keyname: "magic-github-proxy-api-key" - } - } +env_vars: { + key: "SECRET_MANAGER_KEYS" + value: "releasetool-publish-reporter-app,releasetool-publish-reporter-googleapis-installation,releasetool-publish-reporter-pem" } diff --git a/.kokoro/release/stage.sh b/.kokoro/release/stage.sh index d19191fc8..3c482cbc5 100755 --- a/.kokoro/release/stage.sh +++ b/.kokoro/release/stage.sh @@ -16,9 +16,8 @@ set -eo pipefail # Start the releasetool reporter -# Disable reporting due to issue observed with Kokoro blocking releases -# python3 -m pip install gcp-releasetool -# python3 -m releasetool publish-reporter-script > /tmp/publisher-script; source /tmp/publisher-script +python3 -m pip install gcp-releasetool +python3 -m releasetool publish-reporter-script > /tmp/publisher-script; source /tmp/publisher-script source $(dirname "$0")/common.sh MAVEN_SETTINGS_FILE=$(realpath $(dirname "$0")/../../)/settings.xml diff --git a/synth.metadata b/synth.metadata index bd32f2d1f..70f2f18e5 100644 --- a/synth.metadata +++ b/synth.metadata @@ -4,7 +4,7 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/java-datastore.git", - "sha": "254988134ad240aac3bab3e48ee2e3c69e4dd54b" + "sha": "d6eca596440371e31031d36d600466b8e13e8109" } }, { @@ -19,7 +19,7 @@ "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "968465a1cad496e1292ef4584a054a35f756ff94" + "sha": "019c7168faa0e56619f792693a8acdb30d6de19b" } } ], From 023229a15edbbe773bd03410ed0784aba248ad6e Mon Sep 17 00:00:00 2001 From: Ajit Thakor <49403056+athakor@users.noreply.github.com> Date: Fri, 28 Aug 2020 01:18:22 +0530 Subject: [PATCH 70/73] fix: query result start with startCursor if specified (#207) --- .../cloud/datastore/QueryResultsImpl.java | 5 +---- .../cloud/datastore/ITDatastoreTest.java | 21 ++++++++++++++++++ .../cloud/datastore/it/ITDatastoreTest.java | 22 +++++++++++++++++++ 3 files changed, 44 insertions(+), 4 deletions(-) diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/QueryResultsImpl.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/QueryResultsImpl.java index 3c8bba10a..9ed822985 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/QueryResultsImpl.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/QueryResultsImpl.java @@ -71,10 +71,7 @@ private void sendRequest() { requestPb.setPartitionId(partitionIdPb); query.populatePb(requestPb); runQueryResponsePb = datastore.runQuery(requestPb.build()); - mostRecentQueryPb = runQueryResponsePb.getQuery(); - if (mostRecentQueryPb == null) { - mostRecentQueryPb = requestPb.getQuery(); - } + mostRecentQueryPb = requestPb.getQuery(); moreResults = runQueryResponsePb.getBatch().getMoreResults(); lastBatch = moreResults != MoreResultsType.NOT_FINISHED; entityResultPbIter = runQueryResponsePb.getBatch().getEntityResultsList().iterator(); diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/ITDatastoreTest.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/ITDatastoreTest.java index 442a6eb72..5a3bc7e00 100644 --- a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/ITDatastoreTest.java +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/ITDatastoreTest.java @@ -1242,4 +1242,25 @@ public void testGqlQueryWithNullBinding() { } assertEquals(1, count); } + + @Test + public void testQueryWithStartCursor() { + Entity entity1 = + Entity.newBuilder(Key.newBuilder(PROJECT_ID, KIND1, "name-01").build()).build(); + Entity entity2 = + Entity.newBuilder(Key.newBuilder(PROJECT_ID, KIND1, "name-02").build()).build(); + Entity entity3 = + Entity.newBuilder(Key.newBuilder(PROJECT_ID, KIND1, "name-03").build()).build(); + datastore.put(entity1, entity2, entity3); + QueryResults run1 = datastore.run(Query.newEntityQueryBuilder().setKind(KIND1).build()); + run1.next(); + Cursor cursor1 = run1.getCursorAfter(); + assertNotNull(cursor1); + QueryResults run2 = + datastore.run(Query.newEntityQueryBuilder().setKind(KIND1).setStartCursor(cursor1).build()); + Cursor cursor2 = run2.getCursorAfter(); + assertNotNull(cursor2); + assertEquals(cursor2, cursor1); + datastore.delete(entity1.getKey(), entity2.getKey(), entity3.getKey()); + } } diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITDatastoreTest.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITDatastoreTest.java index 7e7fec35f..3db8cfe3e 100644 --- a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITDatastoreTest.java +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITDatastoreTest.java @@ -28,6 +28,7 @@ import com.google.cloud.Timestamp; import com.google.cloud.datastore.Batch; import com.google.cloud.datastore.BooleanValue; +import com.google.cloud.datastore.Cursor; import com.google.cloud.datastore.Datastore; import com.google.cloud.datastore.DatastoreException; import com.google.cloud.datastore.DatastoreOptions; @@ -898,4 +899,25 @@ public void testGqlQueryWithNullBinding() { assertEquals(ENTITY1, results.next()); assertFalse(results.hasNext()); } + + @Test + public void testQueryWithStartCursor() { + Entity entity1 = + Entity.newBuilder(Key.newBuilder(PROJECT_ID, KIND1, "name-01").build()).build(); + Entity entity2 = + Entity.newBuilder(Key.newBuilder(PROJECT_ID, KIND1, "name-02").build()).build(); + Entity entity3 = + Entity.newBuilder(Key.newBuilder(PROJECT_ID, KIND1, "name-03").build()).build(); + DATASTORE.put(entity1, entity2, entity3); + QueryResults run1 = DATASTORE.run(Query.newEntityQueryBuilder().setKind(KIND1).build()); + run1.next(); + Cursor cursor1 = run1.getCursorAfter(); + assertNotNull(cursor1); + QueryResults run2 = + DATASTORE.run(Query.newEntityQueryBuilder().setKind(KIND1).setStartCursor(cursor1).build()); + Cursor cursor2 = run2.getCursorAfter(); + assertNotNull(cursor2); + assertEquals(cursor2, cursor1); + DATASTORE.delete(entity1.getKey(), entity2.getKey(), entity3.getKey()); + } } From 9407c4afec3de6e18c96c24872269e61c8ad40fb Mon Sep 17 00:00:00 2001 From: Ajit Thakor <49403056+athakor@users.noreply.github.com> Date: Fri, 28 Aug 2020 22:34:40 +0530 Subject: [PATCH 71/73] docs: update libraries-bom (#211) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 75af41389..970d85923 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ If you are using Maven with a BOM, add this to your pom.xml file. com.google.cloud libraries-bom - 8.1.0 + 9.1.0 pom import From 3c75a58b860fb0a946167861a535433e3a1b1092 Mon Sep 17 00:00:00 2001 From: BenWhitehead Date: Tue, 1 Sep 2020 17:34:33 -0400 Subject: [PATCH 72/73] chore(build): update synth config to generate README.md (#213) --- .readme-partials.yaml | 122 ++++++++++++++++++++++++ .repo-metadata.json | 3 +- README.md | 215 +++++++++++++++++++++++++----------------- synth.py | 5 +- 4 files changed, 257 insertions(+), 88 deletions(-) create mode 100644 .readme-partials.yaml diff --git a/.readme-partials.yaml b/.readme-partials.yaml new file mode 100644 index 000000000..0796b52e5 --- /dev/null +++ b/.readme-partials.yaml @@ -0,0 +1,122 @@ +custom_content: | + See the [Google Cloud Datastore docs][cloud-datastore-activation] for more details on how to activate + Cloud Datastore for your project. + + See the [Datastore client library docs][datastore-client-lib-docs] to learn how to interact + with the Cloud Datastore using this Client Library. + + #### Creating an authorized service object + To make authenticated requests to Google Cloud Datastore, you must create a service object with credentials. You can then make API calls by calling methods on the Datastore service object. The simplest way to authenticate is to use [Application Default Credentials](https://developers.google.com/identity/protocols/application-default-credentials). These credentials are automatically inferred from your environment, so you only need the following code to create your service object: + + ```java + import com.google.cloud.datastore.Datastore; + import com.google.cloud.datastore.DatastoreOptions; + + Datastore datastore = DatastoreOptions.getDefaultInstance().getService(); + ``` + + For other authentication options, see the [Authentication](https://github.com/googleapis/google-cloud-java#authentication) page. + + #### Storing data + Objects in Datastore are known as entities. Entities are grouped by "kind" and have keys for easy access. In this code snippet, we will create a new entity representing a person and store that data by the person's email. First, add the following imports at the top of your file: + + ```java + import com.google.cloud.datastore.Entity; + import com.google.cloud.datastore.Key; + import com.google.cloud.datastore.KeyFactory; + ``` + + Then add the following code to put an entity in Datastore. + + ```java + KeyFactory keyFactory = datastore.newKeyFactory().setKind("Person"); + Key key = keyFactory.newKey("john.doe@gmail.com"); + Entity entity = Entity.newBuilder(key) + .set("name", "John Doe") + .set("age", 51) + .set("favorite_food", "pizza") + .build(); + datastore.put(entity); + ``` + + Later, if you want to get this entity back, add the following to your code: + + ```java + Entity johnEntity = datastore.get(key); + ``` + + #### Running a query + In addition to retrieving entities by their keys, you can perform queries to retrieve entities by + the values of their properties. A typical query includes an entity kind, filters to select entities + with matching values, and sort orders to sequence the results. `google-cloud-datastore` supports two + types of queries: `StructuredQuery` (that allows you to construct query elements) and `GqlQuery` + (which operates using [GQL syntax](https://cloud.google.com/datastore/docs/apis/gql/gql_reference)) + in string format. In this tutorial, we will use a simple `StructuredQuery`. + + Suppose that you've added more people to Datastore, and now you want to find all people whose favorite food is pizza. Import the following: + + ```java + import com.google.cloud.datastore.Query; + import com.google.cloud.datastore.QueryResults; + import com.google.cloud.datastore.StructuredQuery; + import com.google.cloud.datastore.StructuredQuery.PropertyFilter; + ``` + + Then add the following code to your program: + + ```java + Query query = Query.newEntityQueryBuilder() + .setKind("Person") + .setFilter(PropertyFilter.eq("favorite_food", "pizza")) + .build(); + QueryResults results = datastore.run(query); + while (results.hasNext()) { + Entity currentEntity = results.next(); + System.out.println(currentEntity.getString("name") + ", you're invited to a pizza party!"); + } + ``` + + Cloud Datastore relies on indexing to run queries. Indexing is turned on by default for most types of properties. To read more about indexing, see the [Cloud Datastore Index Configuration documentation](https://cloud.google.com/datastore/docs/tools/indexconfig). + + #### Updating data + Another thing you'll probably want to do is update your data. The following snippet shows how to update a Datastore entity if it exists. + + ``` java + KeyFactory keyFactory = datastore.newKeyFactory().setKind("keyKind"); + Key key = keyFactory.newKey("keyName"); + Entity entity = datastore.get(key); + if (entity != null) { + System.out.println("Updating access_time for " + entity.getString("name")); + entity = Entity.newBuilder(entity) + .set("access_time", DateTime.now()) + .build(); + datastore.update(entity); + } + ``` + + The complete source code can be found at + [UpdateEntity.java](../../google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/UpdateEntity.java). + + #### Complete source code + + In + [AddEntitiesAndRunQuery.java](../../google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/AddEntitiesAndRunQuery.java) + we put together all the code to store data and run queries into one program. The program assumes that you are + running on Compute Engine or from your own desktop. To run the example on App Engine, simply move + the code from the main method to your application's servlet class and change the print statements to + display on your webpage. + + Testing + ------- + + This library has tools to help write tests for code that uses the Datastore. + + See [TESTING.md](https://github.com/googleapis/google-cloud-java/blob/master/TESTING.md#testing-code-that-uses-datastore) to read more about testing. + + Example Applications + -------------------- + - [`Bookshelf`](https://github.com/GoogleCloudPlatform/getting-started-java/tree/master/bookshelf) - An App Engine app that manages a virtual bookshelf. + - This app uses `google-cloud` to interface with Cloud Datastore and Cloud Storage. It also uses Cloud SQL, another Google Cloud Platform service. + - [`Flexible Environment/Datastore example`](https://github.com/GoogleCloudPlatform/java-docs-samples/tree/master/flexible/datastore) - A simple app that uses Cloud Datastore to list the last 10 IP addresses that visited your site. + - [`SparkDemo`](https://github.com/GoogleCloudPlatform/java-docs-samples/blob/master/flexible/sparkjava) - An example of using `google-cloud-datastore` from within the SparkJava and App Engine Flexible Environment frameworks. + - Read about how it works on the example's [README page](https://github.com/GoogleCloudPlatform/java-docs-samples/tree/master/flexible/sparkjava#how-does-it-work). diff --git a/.repo-metadata.json b/.repo-metadata.json index 1f65ef5c9..188b904e2 100644 --- a/.repo-metadata.json +++ b/.repo-metadata.json @@ -10,5 +10,6 @@ "repo_short": "java-datastore", "distribution_name": "com.google.cloud:google-cloud-datastore", "codeowner_team": "@googleapis/firestore-dpe", - "api_id": "datastore.googleapis.com" + "api_id": "datastore.googleapis.com", + "api_description": "is a fully managed, schemaless database for\nstoring non-relational data. Cloud Datastore automatically scales with\nyour users and supports ACID transactions, high availability of reads and\nwrites, strong consistency for reads and ancestor queries, and eventual\nconsistency for all other queries." } diff --git a/README.md b/README.md index 970d85923..bbb3477f5 100644 --- a/README.md +++ b/README.md @@ -1,45 +1,50 @@ -Google Cloud Java Client for Datastore -====================================== +# Google Cloud Datastore Client for Java -Java idiomatic client for [Google Cloud Datastore][cloud-datastore]. +Java idiomatic client for [Cloud Datastore][product-docs]. -[![Kokoro CI](http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/master.svg)](http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/master.html) -[![Maven](https://img.shields.io/maven-central/v/com.google.cloud/google-cloud-datastore.svg)]( https://img.shields.io/maven-central/v/com.google.cloud/google-cloud-datastore.svg) -[![Codacy Badge](https://api.codacy.com/project/badge/grade/9da006ad7c3a4fe1abd142e77c003917)](https://www.codacy.com/app/mziccard/google-cloud-java) +[![Maven][maven-version-image]][maven-version-link] +![Stability][stability-image] -- [Product Documentation][datastore-product-docs] -- [Client Library Documentation][datastore-client-lib-docs] +- [Product Documentation][product-docs] +- [Client Library Documentation][javadocs] -Quickstart ----------- -If you are using Maven with a BOM, add this to your pom.xml file. +## Quickstart + +If you are using Maven with [BOM][libraries-bom], add this to your pom.xml file ```xml - + + + com.google.cloud + libraries-bom + 9.1.0 + pom + import + + + + + com.google.cloud - libraries-bom - 9.1.0 - pom - import - - - + google-cloud-datastore + - - com.google.cloud - google-cloud-datastore - ``` -[//]: # ({x-version-update-start:google-cloud-datastore:released}) -If you are using Maven without a BOM, add this to your dependencies. + +If you are using Maven without BOM, add this to your dependencies: + ```xml com.google.cloud google-cloud-datastore 1.104.0 + ``` + +[//]: # ({x-version-update-start:google-cloud-datastore:released}) + If you are using Gradle, add this to your dependencies ```Groovy compile 'com.google.cloud:google-cloud-datastore:1.104.0' @@ -50,46 +55,44 @@ libraryDependencies += "com.google.cloud" % "google-cloud-datastore" % "1.104.0" ``` [//]: # ({x-version-update-end}) -Example Applications --------------------- -- [`DatastoreExample`](../../google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/DatastoreExample.java) is a simple command line interface for the Cloud Datastore. -- [`Bookshelf`](https://github.com/GoogleCloudPlatform/getting-started-java/tree/master/bookshelf) - An App Engine app that manages a virtual bookshelf. - - This app uses `google-cloud` to interface with Cloud Datastore and Cloud Storage. It also uses Cloud SQL, another Google Cloud Platform service. -- [`Flexible Environment/Datastore example`](https://github.com/GoogleCloudPlatform/java-docs-samples/tree/master/flexible/datastore) - A simple app that uses Cloud Datastore to list the last 10 IP addresses that visited your site. -- [`GuestBook`](https://github.com/GoogleCloudPlatform/java-docs-samples/tree/master/appengine/guestbook-cloud-datastore) - An App Engine Standard guestbook that uses Cloud Datastore. -- [`SparkDemo`](https://github.com/GoogleCloudPlatform/java-docs-samples/blob/master/flexible/sparkjava) - An example of using `google-cloud-datastore` from within the SparkJava and App Engine Flexible Environment frameworks. - - Read about how it works on the example's [README page](https://github.com/GoogleCloudPlatform/java-docs-samples/tree/master/flexible/sparkjava#how-does-it-work). -- [`TaskList`](https://github.com/GoogleCloudPlatform/java-docs-samples/blob/master/datastore/src/main/java/com/google/datastore/snippets/TaskList.java) - A command line application that uses Cloud Datastore to manage a to-do list. - - Read about how to run the application on its [README page](https://github.com/GoogleCloudPlatform/java-docs-samples/tree/master/datastore). +## Authentication -Authentication --------------- +See the [Authentication][authentication] section in the base directory's README. -See the [Authentication](https://github.com/googleapis/google-cloud-java#authentication) section in the base directory's README. +## Getting Started -About Google Cloud Datastore ----------------------------- +### Prerequisites -Google [Cloud Datastore][cloud-datastore] is a fully managed, schemaless database for +You will need a [Google Cloud Platform Console][developer-console] project with the Cloud Datastore [API enabled][enable-api]. + +[Follow these instructions][create-project] to get your project set up. You will also need to set up the local development environment by +[installing the Google Cloud SDK][cloud-sdk] and running the following commands in command line: +`gcloud auth login` and `gcloud config set project [YOUR PROJECT ID]`. + +### Installation and setup + +You'll need to obtain the `google-cloud-datastore` library. See the [Quickstart](#quickstart) section +to add `google-cloud-datastore` as a dependency in your code. + +## About Cloud Datastore + + +[Cloud Datastore][product-docs] is a fully managed, schemaless database for storing non-relational data. Cloud Datastore automatically scales with your users and supports ACID transactions, high availability of reads and writes, strong consistency for reads and ancestor queries, and eventual consistency for all other queries. +See the [Cloud Datastore client library docs][javadocs] to learn how to +use this Cloud Datastore Client Library. + + See the [Google Cloud Datastore docs][cloud-datastore-activation] for more details on how to activate Cloud Datastore for your project. See the [Datastore client library docs][datastore-client-lib-docs] to learn how to interact with the Cloud Datastore using this Client Library. -Getting Started ---------------- -#### Prerequisites -For this tutorial, you will need a [Google Developers Console](https://console.developers.google.com/) project with the Datastore API enabled. [Follow these instructions](https://cloud.google.com/resource-manager/docs/creating-managing-projects) to get your project set up. You will also need to set up the local development environment by [installing the Google Cloud SDK](https://cloud.google.com/sdk/) and running the following commands in command line: `gcloud auth login` and `gcloud config set project [YOUR PROJECT ID]`. - -#### Installation and setup -You'll need to obtain the `google-cloud-datastore` library. See the [Quickstart](#quickstart) section to add `google-cloud-datastore` as a dependency in your code. - #### Creating an authorized service object To make authenticated requests to Google Cloud Datastore, you must create a service object with credentials. You can then make API calls by calling methods on the Datastore service object. The simplest way to authenticate is to use [Application Default Credentials](https://developers.google.com/identity/protocols/application-default-credentials). These credentials are automatically inferred from your environment, so you only need the following code to create your service object: @@ -191,55 +194,99 @@ running on Compute Engine or from your own desktop. To run the example on App En the code from the main method to your application's servlet class and change the print statements to display on your webpage. -Troubleshooting ---------------- +Testing +------- -To get help, follow the instructions in the [shared Troubleshooting document](https://github.com/googleapis/google-cloud-common/blob/master/troubleshooting/readme.md#troubleshooting). +This library has tools to help write tests for code that uses the Datastore. -Transport ---------- -Datastore uses HTTP for the transport layer. +See [TESTING.md](https://github.com/googleapis/google-cloud-java/blob/master/TESTING.md#testing-code-that-uses-datastore) to read more about testing. -Java Versions -------------- +Example Applications +-------------------- +- [`Bookshelf`](https://github.com/GoogleCloudPlatform/getting-started-java/tree/master/bookshelf) - An App Engine app that manages a virtual bookshelf. + - This app uses `google-cloud` to interface with Cloud Datastore and Cloud Storage. It also uses Cloud SQL, another Google Cloud Platform service. +- [`Flexible Environment/Datastore example`](https://github.com/GoogleCloudPlatform/java-docs-samples/tree/master/flexible/datastore) - A simple app that uses Cloud Datastore to list the last 10 IP addresses that visited your site. +- [`SparkDemo`](https://github.com/GoogleCloudPlatform/java-docs-samples/blob/master/flexible/sparkjava) - An example of using `google-cloud-datastore` from within the SparkJava and App Engine Flexible Environment frameworks. + - Read about how it works on the example's [README page](https://github.com/GoogleCloudPlatform/java-docs-samples/tree/master/flexible/sparkjava#how-does-it-work). -Java 7 or above is required for using this client. -Testing -------- -This library has tools to help write tests for code that uses the Datastore. -See [TESTING] to read more about testing. +## Samples -Versioning ----------- +Samples are in the [`samples/`](https://github.com/googleapis/java-datastore/tree/master/samples) directory. The samples' `README.md` +has instructions for running the samples. -This library follows [Semantic Versioning](http://semver.org/). +| Sample | Source Code | Try it | +| --------------------------- | --------------------------------- | ------ | +| Quickstart Sample | [source code](https://github.com/googleapis/java-datastore/blob/master/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-datastore&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java) | +| Task List | [source code](https://github.com/googleapis/java-datastore/blob/master/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-datastore&page=editor&open_in_editor=samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java) | -It is currently in major version one (``1.y.z``), which means that the public API should be considered stable. -Contributing ------------- -Contributions to this library are always welcome and highly encouraged. +## Troubleshooting -See `google-cloud`'s [CONTRIBUTING] documentation and the [shared documentation](https://github.com/googleapis/google-cloud-common/blob/master/contributing/readme.md#how-to-contribute-to-gcloud) for more information on how to get started. +To get help, follow the instructions in the [shared Troubleshooting document][troubleshooting]. -Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms. See [Code of Conduct][code-of-conduct] for more information. +## Java Versions -License -------- +Java 7 or above is required for using this client. -Apache 2.0 - See [LICENSE] for more information. +## Versioning -[CONTRIBUTING]:https://github.com/googleapis/google-cloud-java/blob/master/CONTRIBUTING.md -[code-of-conduct]:https://github.com/googleapis/google-cloud-java/blob/master/CODE_OF_CONDUCT.md#contributor-code-of-conduct -[LICENSE]: https://github.com/googleapis/google-cloud-java/blob/master/LICENSE -[TESTING]: https://github.com/googleapis/google-cloud-java/blob/master/TESTING.md#testing-code-that-uses-datastore -[cloud-platform]: https://cloud.google.com/ -[cloud-datastore-activation]: https://cloud.google.com/datastore/docs/activate -[cloud-datastore]: https://cloud.google.com/datastore/ -[datastore-product-docs]: https://cloud.google.com/datastore/docs/ -[datastore-client-lib-docs]: https://googleapis.dev/java/google-cloud-clients/latest/index.html?com/google/cloud/datastore/package-summary.html +This library follows [Semantic Versioning](http://semver.org/). + + +## Contributing + + +Contributions to this library are always welcome and highly encouraged. + +See [CONTRIBUTING][contributing] for more information how to get started. + +Please note that this project is released with a Contributor Code of Conduct. By participating in +this project you agree to abide by its terms. See [Code of Conduct][code-of-conduct] for more +information. + +## License + +Apache 2.0 - See [LICENSE][license] for more information. + +## CI Status + +Java Version | Status +------------ | ------ +Java 7 | [![Kokoro CI][kokoro-badge-image-1]][kokoro-badge-link-1] +Java 8 | [![Kokoro CI][kokoro-badge-image-2]][kokoro-badge-link-2] +Java 8 OSX | [![Kokoro CI][kokoro-badge-image-3]][kokoro-badge-link-3] +Java 8 Windows | [![Kokoro CI][kokoro-badge-image-4]][kokoro-badge-link-4] +Java 11 | [![Kokoro CI][kokoro-badge-image-5]][kokoro-badge-link-5] + +[product-docs]: https://cloud.google.com/datastore +[javadocs]: https://googleapis.dev/java/google-cloud-datastore/latest/index.html +[kokoro-badge-image-1]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-datastore/java7.svg +[kokoro-badge-link-1]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-datastore/java7.html +[kokoro-badge-image-2]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-datastore/java8.svg +[kokoro-badge-link-2]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-datastore/java8.html +[kokoro-badge-image-3]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-datastore/java8-osx.svg +[kokoro-badge-link-3]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-datastore/java8-osx.html +[kokoro-badge-image-4]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-datastore/java8-win.svg +[kokoro-badge-link-4]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-datastore/java8-win.html +[kokoro-badge-image-5]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-datastore/java11.svg +[kokoro-badge-link-5]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-datastore/java11.html +[stability-image]: https://img.shields.io/badge/stability-ga-green +[maven-version-image]: https://img.shields.io/maven-central/v/com.google.cloud/google-cloud-datastore.svg +[maven-version-link]: https://search.maven.org/search?q=g:com.google.cloud%20AND%20a:google-cloud-datastore&core=gav +[authentication]: https://github.com/googleapis/google-cloud-java#authentication +[developer-console]: https://console.developers.google.com/ +[create-project]: https://cloud.google.com/resource-manager/docs/creating-managing-projects +[cloud-sdk]: https://cloud.google.com/sdk/ +[troubleshooting]: https://github.com/googleapis/google-cloud-common/blob/master/troubleshooting/readme.md#troubleshooting +[contributing]: https://github.com/googleapis/java-datastore/blob/master/CONTRIBUTING.md +[code-of-conduct]: https://github.com/googleapis/java-datastore/blob/master/CODE_OF_CONDUCT.md#contributor-code-of-conduct +[license]: https://github.com/googleapis/java-datastore/blob/master/LICENSE + +[enable-api]: https://console.cloud.google.com/flows/enableapi?apiid=datastore.googleapis.com +[libraries-bom]: https://github.com/GoogleCloudPlatform/cloud-opensource-java/wiki/The-Google-Cloud-Platform-Libraries-BOM +[shell_img]: https://gstatic.com/cloudssh/images/open-btn.png diff --git a/synth.py b/synth.py index d04690762..7220e8879 100644 --- a/synth.py +++ b/synth.py @@ -66,6 +66,5 @@ java.format_code('google-cloud-datastore/src') java.format_code(f'proto-google-cloud-{service}-{version}/src') -java.common_templates(excludes=[ - 'README.md', -]) +java.common_templates() + From a8f91a263c3798beb9b956bc801c16aebb6fafcb Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Thu, 17 Sep 2020 15:49:30 -0400 Subject: [PATCH 73/73] chore: release 1.105.0 (#175) * chore: updated CHANGELOG.md [ci skip] * chore: updated README.md [ci skip] * chore: updated versions.txt [ci skip] * chore: updated samples/pom.xml [ci skip] * chore: updated proto-google-cloud-datastore-v1/pom.xml [ci skip] * chore: updated google-cloud-datastore/pom.xml [ci skip] * chore: updated samples/install-without-bom/pom.xml [ci skip] * chore: updated samples/snapshot/pom.xml [ci skip] * chore: updated google-cloud-datastore-bom/pom.xml [ci skip] * chore: updated pom.xml [ci skip] * chore: updated samples/snippets/pom.xml Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> --- CHANGELOG.md | 28 +++++++++++++++++++++++++ README.md | 4 ++-- google-cloud-datastore-bom/pom.xml | 6 +++--- google-cloud-datastore/pom.xml | 4 ++-- pom.xml | 4 ++-- proto-google-cloud-datastore-v1/pom.xml | 4 ++-- versions.txt | 8 +++---- 7 files changed, 43 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 925c17a3b..6e0c6283b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,33 @@ # Changelog +## [1.105.0](https://www.github.com/googleapis/java-datastore/compare/v1.104.0...v1.105.0) (2020-09-01) + + +### Features + +* **deps:** adopt flatten plugin and google-cloud-shared-dependencies ([#174](https://www.github.com/googleapis/java-datastore/issues/174)) ([8618c18](https://www.github.com/googleapis/java-datastore/commit/8618c1848e71424fa164fee9d8b7b53641b6b823)) + + +### Bug Fixes + +* query result start with startCursor if specified ([#207](https://www.github.com/googleapis/java-datastore/issues/207)) ([023229a](https://www.github.com/googleapis/java-datastore/commit/023229a15edbbe773bd03410ed0784aba248ad6e)) + + +### Dependencies + +* remove direct declaration of google-auth-library-oauth2-http ([#184](https://www.github.com/googleapis/java-datastore/issues/184)) ([4fa4df4](https://www.github.com/googleapis/java-datastore/commit/4fa4df40d63d7fbce023d6231830dcc296c29dd1)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.8.2 ([#187](https://www.github.com/googleapis/java-datastore/issues/187)) ([941bea0](https://www.github.com/googleapis/java-datastore/commit/941bea016f1ce4e1c1fd027b1671f950e9c52160)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.8.3 ([#191](https://www.github.com/googleapis/java-datastore/issues/191)) ([a89eb08](https://www.github.com/googleapis/java-datastore/commit/a89eb08be1cd9689d38b8b67c472cc928e3549c1)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.8.4 ([#196](https://www.github.com/googleapis/java-datastore/issues/196)) ([7214e0a](https://www.github.com/googleapis/java-datastore/commit/7214e0ae224633e2effc023d10494e0164a8f9dc)) +* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.8.6 ([#199](https://www.github.com/googleapis/java-datastore/issues/199)) ([6a959d3](https://www.github.com/googleapis/java-datastore/commit/6a959d3f7ca75ba5da1d1c4cb509593d3be39e98)) +* update dependency com.google.oauth-client:google-oauth-client to v1.31.0 ([#186](https://www.github.com/googleapis/java-datastore/issues/186)) ([16bfb9a](https://www.github.com/googleapis/java-datastore/commit/16bfb9a0127f4969a796ad95cc11cf2b8b92d0f3)) + + +### Documentation + +* libraries-bom 8.1.0 ([#200](https://www.github.com/googleapis/java-datastore/issues/200)) ([9425972](https://www.github.com/googleapis/java-datastore/commit/9425972905d1e370192eeb3bbfe837f5a7fb25cf)) +* update libraries-bom ([#211](https://www.github.com/googleapis/java-datastore/issues/211)) ([9407c4a](https://www.github.com/googleapis/java-datastore/commit/9407c4afec3de6e18c96c24872269e61c8ad40fb)) + ## [1.104.0](https://www.github.com/googleapis/java-datastore/compare/v1.103.0...v1.104.0) (2020-06-17) diff --git a/README.md b/README.md index bbb3477f5..3ad8286e4 100644 --- a/README.md +++ b/README.md @@ -47,11 +47,11 @@ If you are using Maven without BOM, add this to your dependencies: If you are using Gradle, add this to your dependencies ```Groovy -compile 'com.google.cloud:google-cloud-datastore:1.104.0' +compile 'com.google.cloud:google-cloud-datastore:1.105.0' ``` If you are using SBT, add this to your dependencies ```Scala -libraryDependencies += "com.google.cloud" % "google-cloud-datastore" % "1.104.0" +libraryDependencies += "com.google.cloud" % "google-cloud-datastore" % "1.105.0" ``` [//]: # ({x-version-update-end}) diff --git a/google-cloud-datastore-bom/pom.xml b/google-cloud-datastore-bom/pom.xml index 19cf07b9b..cd830c0a6 100644 --- a/google-cloud-datastore-bom/pom.xml +++ b/google-cloud-datastore-bom/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.google.cloud google-cloud-datastore-bom - 1.104.1-SNAPSHOT + 1.105.0 pom com.google.cloud @@ -63,12 +63,12 @@ com.google.api.grpc proto-google-cloud-datastore-v1 - 0.87.1-SNAPSHOT + 0.88.0 com.google.cloud google-cloud-datastore - 1.104.1-SNAPSHOT + 1.105.0 diff --git a/google-cloud-datastore/pom.xml b/google-cloud-datastore/pom.xml index 4d4c3a9a3..724ad4a00 100644 --- a/google-cloud-datastore/pom.xml +++ b/google-cloud-datastore/pom.xml @@ -2,7 +2,7 @@ 4.0.0 google-cloud-datastore - 1.104.1-SNAPSHOT + 1.105.0 jar Google Cloud Datastore https://github.com/googleapis/java-datastore @@ -12,7 +12,7 @@ com.google.cloud google-cloud-datastore-parent - 1.104.1-SNAPSHOT + 1.105.0 google-cloud-datastore diff --git a/pom.xml b/pom.xml index 919f370c4..c06a6c2f2 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.google.cloud google-cloud-datastore-parent pom - 1.104.1-SNAPSHOT + 1.105.0 Google Cloud Datastore Parent https://github.com/googleapis/java-datastore @@ -167,7 +167,7 @@ com.google.api.grpc proto-google-cloud-datastore-v1 - 0.87.1-SNAPSHOT + 0.88.0 com.google.cloud.datastore diff --git a/proto-google-cloud-datastore-v1/pom.xml b/proto-google-cloud-datastore-v1/pom.xml index 8e7e8d517..d5d7dcd2f 100644 --- a/proto-google-cloud-datastore-v1/pom.xml +++ b/proto-google-cloud-datastore-v1/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc proto-google-cloud-datastore-v1 - 0.87.1-SNAPSHOT + 0.88.0 proto-google-cloud-datastore-v1 PROTO library for proto-google-cloud-datastore-v1 com.google.cloud google-cloud-datastore-parent - 1.104.1-SNAPSHOT + 1.105.0 diff --git a/versions.txt b/versions.txt index 3e94f3954..96e4e4ae4 100644 --- a/versions.txt +++ b/versions.txt @@ -1,8 +1,8 @@ # Format: # module:released-version:current-version -google-cloud-datastore:1.104.0:1.104.1-SNAPSHOT -google-cloud-datastore-bom:1.104.0:1.104.1-SNAPSHOT -google-cloud-datastore-parent:1.104.0:1.104.1-SNAPSHOT -proto-google-cloud-datastore-v1:0.87.0:0.87.1-SNAPSHOT +google-cloud-datastore:1.105.0:1.105.0 +google-cloud-datastore-bom:1.105.0:1.105.0 +google-cloud-datastore-parent:1.105.0:1.105.0 +proto-google-cloud-datastore-v1:0.88.0:0.88.0