Implement datastore Blob to byte[] conversion on read #729
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Blob-to-byte[] and reverse are a special case in conversion -- it's the only exception to the general rule of "Datastore collection becomes Java collection; Datastore simple type becomes Java type". It seems to have been intended to work in original implementation, but never had a test, so either never worked right or broke over the years. The other direction, on write, works fine through
BYTE_ARRAY_TO_BLOB_CONVERTER
combined withValueUtil.isArrayOfItems()
exemptingbyte[]
from array status.There were several ways of fixing this (each commit in this PR is a working solution), but at the end I went with making the standard conversion path worked. It required redefining the meaning of collection to exclude byte arrays, which is already done in the local utility
ValueUtil.isArrayOfItems()
. I replaced Spring Data's built-inTypeDiscoverer.isCollectionLike()
, which (reasonably) assumes byte arrays are collection-like with the Spring Cloud Gcp Datastore implementation-specificValueUtil.isArrayOfItems()
, which excludesbyte[]
. This exclusion is already documented in the refdoc, so no additional documentation is needed.Fixes #661.