aboutsummaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authorTerry Wang <tytytyww@google.com>2020-10-22 21:33:43 -0700
committerTerry Wang <tytytyww@google.com>2020-10-23 03:49:34 -0700
commit18d2742f9f26de64ffe5aa753eed10cdd8263893 (patch)
treeb55937a55fd0d04c884b8ca0f29b52efc6cab0e2 /java
parent06f1872a4e95cfcfe3b1827449a926a5b8dc3826 (diff)
parentd583b2dd0e95e15180b25b42e3fa1fa122bce744 (diff)
downloadicing-18d2742f9f26de64ffe5aa753eed10cdd8263893.tar.gz
Merge remote-tracking branch 'goog/androidx-platform-dev'
* goog/androidx-platform-dev: Pull upstream changes. Upgrade to protobuf gradle plugin 0.8.13 Pull upstream changes. Strip .proto files from appsearch proto-lite dependency using jar task Change-Id: I3bb93729e9cc55332c00c3d9e546e6ded9eca9be
Diffstat (limited to 'java')
-rw-r--r--java/src/com/google/android/icing/IcingSearchEngine.java23
-rw-r--r--java/tests/instrumentation/src/com/google/android/icing/IcingSearchEngineTest.java52
2 files changed, 75 insertions, 0 deletions
diff --git a/java/src/com/google/android/icing/IcingSearchEngine.java b/java/src/com/google/android/icing/IcingSearchEngine.java
index 7be631c..76fa33d 100644
--- a/java/src/com/google/android/icing/IcingSearchEngine.java
+++ b/java/src/com/google/android/icing/IcingSearchEngine.java
@@ -328,6 +328,27 @@ public final class IcingSearchEngine {
}
@NonNull
+ public DeleteResultProto deleteByQuery(@NonNull SearchSpecProto searchSpec) {
+ byte[] deleteResultBytes = nativeDeleteByQuery(nativePointer, searchSpec.toByteArray());
+ if (deleteResultBytes == null) {
+ Log.e(TAG, "Received null DeleteResultProto from native.");
+ return DeleteResultProto.newBuilder()
+ .setStatus(StatusProto.newBuilder().setCode(StatusProto.Code.INTERNAL))
+ .build();
+ }
+
+ try {
+ return DeleteResultProto.parseFrom(
+ deleteResultBytes, EXTENSION_REGISTRY_LITE);
+ } catch (InvalidProtocolBufferException e) {
+ Log.e(TAG, "Error parsing DeleteResultProto.", e);
+ return DeleteResultProto.newBuilder()
+ .setStatus(StatusProto.newBuilder().setCode(StatusProto.Code.INTERNAL))
+ .build();
+ }
+ }
+
+ @NonNull
public PersistToDiskResultProto persistToDisk() {
byte[] persistToDiskResultBytes = nativePersistToDisk(nativePointer);
if (persistToDiskResultBytes == null) {
@@ -438,6 +459,8 @@ public final class IcingSearchEngine {
private static native byte[] nativeDeleteBySchemaType(long nativePointer, String schemaType);
+ private static native byte[] nativeDeleteByQuery(long nativePointer, byte[] searchSpecBytes);
+
private static native byte[] nativePersistToDisk(long nativePointer);
private static native byte[] nativeOptimize(long nativePointer);
diff --git a/java/tests/instrumentation/src/com/google/android/icing/IcingSearchEngineTest.java b/java/tests/instrumentation/src/com/google/android/icing/IcingSearchEngineTest.java
index d907d4e..fb77d6e 100644
--- a/java/tests/instrumentation/src/com/google/android/icing/IcingSearchEngineTest.java
+++ b/java/tests/instrumentation/src/com/google/android/icing/IcingSearchEngineTest.java
@@ -335,6 +335,58 @@ public final class IcingSearchEngineTest {
assertThat(getResultProto.getStatus().getCode()).isEqualTo(StatusProto.Code.NOT_FOUND);
}
+
+ @Test
+ public void testDeleteByQuery() throws Exception {
+ IcingSearchEngineOptions options =
+ IcingSearchEngineOptions.newBuilder().setBaseDir(filesDir).build();
+ IcingSearchEngine icing = new IcingSearchEngine(options);
+ assertThat(icing.initialize().getStatus().getCode()).isEqualTo(StatusProto.Code.OK);
+
+ SchemaTypeConfigProto emailTypeConfig = createEmailTypeConfig();
+ SchemaProto schema = SchemaProto.newBuilder().addTypes(emailTypeConfig).build();
+ assertThat(
+ icing
+ .setSchema(schema, /*ignoreErrorsAndDeleteDocuments=*/ false)
+ .getStatus()
+ .getCode())
+ .isEqualTo(StatusProto.Code.OK);
+
+ DocumentProto emailDocument1 =
+ createEmailDocument("namespace", "uri1").toBuilder()
+ .addProperties(PropertyProto.newBuilder().setName("subject").addStringValues("foo"))
+ .build();;
+ assertThat(icing.put(emailDocument1).getStatus().getCode()).isEqualTo(StatusProto.Code.OK);
+ DocumentProto emailDocument2 =
+ createEmailDocument("namespace", "uri2").toBuilder()
+ .addProperties(PropertyProto.newBuilder().setName("subject").addStringValues("bar"))
+ .build();;
+ assertThat(icing.put(emailDocument2).getStatus().getCode()).isEqualTo(StatusProto.Code.OK);
+
+ SearchSpecProto searchSpec =
+ SearchSpecProto.newBuilder()
+ .setQuery("foo")
+ .setTermMatchType(TermMatchType.Code.PREFIX)
+ .build();
+
+ SearchResultProto searchResultProto =
+ icing.search(
+ searchSpec,
+ ScoringSpecProto.getDefaultInstance(),
+ ResultSpecProto.getDefaultInstance());
+ assertThat(searchResultProto.getStatus().getCode()).isEqualTo(StatusProto.Code.OK);
+ assertThat(searchResultProto.getResultsCount()).isEqualTo(1);
+ assertThat(searchResultProto.getResults(0).getDocument()).isEqualTo(emailDocument1);
+
+ DeleteResultProto deleteResultProto = icing.deleteByQuery(searchSpec);
+ assertThat(deleteResultProto.getStatus().getCode()).isEqualTo(StatusProto.Code.OK);
+
+ GetResultProto getResultProto = icing.get("namespace", "uri1");
+ assertThat(getResultProto.getStatus().getCode()).isEqualTo(StatusProto.Code.NOT_FOUND);
+ getResultProto = icing.get("namespace", "uri2");
+ assertThat(getResultProto.getStatus().getCode()).isEqualTo(StatusProto.Code.OK);
+ }
+
@Test
public void testPersistToDisk() throws Exception {
IcingSearchEngineOptions options =