From e15b6b66f871a71b73278c34d5c54f648f880c29 Mon Sep 17 00:00:00 2001 From: Terry Wang Date: Thu, 24 Sep 2020 13:39:23 -0700 Subject: Pull upstream changes. Change-Id: I44831fdadcdb67f2e19570a35cb4c76faf8397f9 --- .../google/android/icing/IcingSearchEngine.java | 23 ++++++++++ .../android/icing/IcingSearchEngineTest.java | 52 ++++++++++++++++++++++ 2 files changed, 75 insertions(+) (limited to 'java') diff --git a/java/src/com/google/android/icing/IcingSearchEngine.java b/java/src/com/google/android/icing/IcingSearchEngine.java index f4e301d..125da12 100644 --- a/java/src/com/google/android/icing/IcingSearchEngine.java +++ b/java/src/com/google/android/icing/IcingSearchEngine.java @@ -327,6 +327,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); @@ -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..ed7e318 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("") + .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(2); + // 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.NOT_FOUND); + } + @Test public void testPersistToDisk() throws Exception { IcingSearchEngineOptions options = -- cgit v1.2.3 From 5abfe5bcac00f4f188d3d8041fa97bf77206b577 Mon Sep 17 00:00:00 2001 From: Terry Wang Date: Thu, 1 Oct 2020 18:53:44 -0700 Subject: Pull upstream changes. Change-Id: I794757716961569b5c02171cfc82785efb2cf106 --- .../src/com/google/android/icing/IcingSearchEngineTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'java') 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 ed7e318..fb77d6e 100644 --- a/java/tests/instrumentation/src/com/google/android/icing/IcingSearchEngineTest.java +++ b/java/tests/instrumentation/src/com/google/android/icing/IcingSearchEngineTest.java @@ -365,7 +365,7 @@ public final class IcingSearchEngineTest { SearchSpecProto searchSpec = SearchSpecProto.newBuilder() - // .setQuery("") + .setQuery("foo") .setTermMatchType(TermMatchType.Code.PREFIX) .build(); @@ -375,8 +375,8 @@ public final class IcingSearchEngineTest { ScoringSpecProto.getDefaultInstance(), ResultSpecProto.getDefaultInstance()); assertThat(searchResultProto.getStatus().getCode()).isEqualTo(StatusProto.Code.OK); - assertThat(searchResultProto.getResultsCount()).isEqualTo(2); - // assertThat(searchResultProto.getResults(0).getDocument()).isEqualTo(emailDocument1); + 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); @@ -384,7 +384,7 @@ public final class IcingSearchEngineTest { 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.NOT_FOUND); + assertThat(getResultProto.getStatus().getCode()).isEqualTo(StatusProto.Code.OK); } @Test -- cgit v1.2.3