Skip to content

Commit

Permalink
docs: adds OR filter sample (#1032)
Browse files Browse the repository at this point in the history
* docs: adds OR filter sample
  • Loading branch information
telpirion authored Mar 28, 2023
1 parent 13a48f4 commit e319efa
Show file tree
Hide file tree
Showing 3 changed files with 133 additions and 0 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -268,6 +268,7 @@ Samples are in the [`samples/`](/~https://github.com/googleapis/java-datastore/tre
| Count Aggregation With Order By | [source code](/~https://github.com/googleapis/java-datastore/blob/main/samples/snippets/src/main/java/com/example/datastore/aggregation/CountAggregationWithOrderBy.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/aggregation/CountAggregationWithOrderBy.java) |
| Count Aggregation With Property Filter | [source code](/~https://github.com/googleapis/java-datastore/blob/main/samples/snippets/src/main/java/com/example/datastore/aggregation/CountAggregationWithPropertyFilter.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/aggregation/CountAggregationWithPropertyFilter.java) |
| Count Aggregation With Stale Read | [source code](/~https://github.com/googleapis/java-datastore/blob/main/samples/snippets/src/main/java/com/example/datastore/aggregation/CountAggregationWithStaleRead.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/aggregation/CountAggregationWithStaleRead.java) |
| Create a union between two filters | [source code](/~https://github.com/googleapis/java-datastore/blob/main/samples/snippets/src/main/java/com/example/datastore/filters/OrFilterQuery.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/filters/OrFilterQuery.java) |
| Task List | [source code](/~https://github.com/googleapis/java-datastore/blob/main/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) |


Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
/*
* Copyright 2023 Google LLC
*
* 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.filters;

// sample-metadata:
// title: Create a union between two filters
// description: Create a union between two filters (logical OR operator)

// [START datastore_query_filter_or]
import com.google.cloud.datastore.Datastore;
import com.google.cloud.datastore.DatastoreOptions;
import com.google.cloud.datastore.Entity;
import com.google.cloud.datastore.Query;
import com.google.cloud.datastore.QueryResults;
import com.google.cloud.datastore.StructuredQuery.CompositeFilter;
import com.google.cloud.datastore.StructuredQuery.Filter;
import com.google.cloud.datastore.StructuredQuery.PropertyFilter;

public class OrFilterQuery {
public static void invoke() throws Exception {

// Instantiates a client
Datastore datastore = DatastoreOptions.getDefaultInstance().getService();
String propertyName = "description";

// Create the two filters
Filter orFilter =
CompositeFilter.or(
PropertyFilter.eq(propertyName, "Feed cats"),
PropertyFilter.eq(propertyName, "Buy milk"));

// Build the query
Query<Entity> query = Query.newEntityQueryBuilder().setKind("Task").setFilter(orFilter).build();

// Get the results back from Datastore
QueryResults<Entity> results = datastore.run(query);

if (!results.hasNext()) {
throw new Exception("query yielded no results");
}

while (results.hasNext()) {
Entity entity = results.next();
System.out.printf("Entity: %s%n", entity);
}
}
}
// [END datastore_query_filter_or]
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
/*
* Copyright 2023 Google LLC
*
* 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 com.example.datastore.filters.OrFilterQuery;
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.rule.SystemsOutRule;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;

@RunWith(JUnit4.class)
@SuppressWarnings("checkstyle:abbreviationaswordinname")
public class OrFilterQuerySampleIT {

private final Datastore datastore = DatastoreOptions.getDefaultInstance().getService();
private final String fieldName = "description";

private Key taskKey1;
private Key taskKey2;

@Rule public final SystemsOutRule systemsOutRule = new SystemsOutRule();

@Before
public void setUp() {
taskKey1 = datastore.newKeyFactory().setKind("Task").newKey("sampleTask");
Entity task1 = Entity.newBuilder(taskKey1).set(fieldName, "Buy milk").build();

taskKey2 = datastore.newKeyFactory().setKind("Task").newKey("sampleTask2");
Entity task2 = Entity.newBuilder(taskKey2).set(fieldName, "Feed cats").build();

datastore.put(task1);
datastore.put(task2);
}

@After
public void tearDown() {
datastore.delete(taskKey1);
datastore.delete(taskKey2);
}

@Test
public void testOrFilterQuery() throws Exception {
// Act
OrFilterQuery.invoke();

// Assert
systemsOutRule.assertContains("Entity");
}
}

0 comments on commit e319efa

Please sign in to comment.