Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 830c6797 authored by Terry Wang's avatar Terry Wang
Browse files

Allow GenericDocument accept a String property longer than 20_000.

This limit was removed from the AppSearch Jetpack API meaning that
a client could construct a GenericDocument successfully, but then
have a PutDocuments call fail when converting from
androidx.appsearch.GenericDocument
to android.appsearch.GenericDocument.

Icing still has a total document size limit which is 16 MiB.
The put call will fail if it trying to write such document.


Bug: 192909904
Test: GenericDocumentTest
Change-Id: I86f97acc3a8e0f1c25fadf597aed9f42a2c493eb
parent 4162c032
Loading
Loading
Loading
Loading
+0 −12
Original line number Diff line number Diff line
@@ -51,9 +51,6 @@ import java.util.Set;
public class GenericDocument {
    private static final String TAG = "AppSearchGenericDocumen";

    /** The maximum {@link String#length} of a {@link String} field. */
    private static final int MAX_STRING_LENGTH = 20_000;

    /** The maximum number of indexed properties a document can have. */
    private static final int MAX_INDEXED_PROPERTIES = 16;

@@ -1286,15 +1283,6 @@ public class GenericDocument {
            for (int i = 0; i < values.length; i++) {
                if (values[i] == null) {
                    throw new IllegalArgumentException("The String at " + i + " is null.");
                } else if (values[i].length() > MAX_STRING_LENGTH) {
                    throw new IllegalArgumentException(
                            "The String at "
                                    + i
                                    + " length is: "
                                    + values[i].length()
                                    + ", which exceeds length limit: "
                                    + MAX_STRING_LENGTH
                                    + ".");
                }
            }
            mProperties.putStringArray(name, values);
+14 −0
Original line number Diff line number Diff line
@@ -62,4 +62,18 @@ public class GenericDocumentTest {
        assertThat(outDoc.getPropertyDocument("propDocument").getPropertyBytesArray("propBytes"))
                .isEqualTo(new byte[][] {{3, 4}});
    }

    @Test
    public void testPutLargeDocument_exceedLimit() throws Exception {
        // Create a String property that has a very large property.
        char[] chars = new char[10_000_000];
        String property = new StringBuilder().append(chars).append("the end.").toString();

        GenericDocument doc =
                new GenericDocument.Builder<>("namespace", "id1", "schema1")
                        .setPropertyString("propString", property)
                        .build();

        assertThat(doc.getPropertyString("propString")).isEqualTo(property);
    }
}