fix: json data type for non object values#1236
Merged
surbhigarg92 merged 3 commits intogoogleapis:mainfrom Nov 14, 2024
Merged
Conversation
harshachinta
approved these changes
Nov 14, 2024
sakthivelmanii
approved these changes
Nov 14, 2024
yeesian
added a commit
to yeesian/langchain-google-spanner-python
that referenced
this pull request
Nov 14, 2024
The bump in lowerbound for google-cloud-spanner is to capture the fix in googleapis/python-spanner#1236.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
JSON supports various types of values. At a high level: Objects, Arrays, and various kinds of Scalars. A Spanner column of type JSON can support any of these:
spanner> create table t_json (i int64, j json) primary key (i);
spanner> insert into t_json (i,j) values (1,JSON '[1,2,3]');
spanner> insert into t_json (i,j) values (2,JSON '"foo"');
spanner> insert into t_json (i,j) values (3,JSON '{"a": "b"}');
spanner> select * from t_json;
+---+-----------+
| i | j |
+---+-----------+
| 1 | [1,2,3] |
| 2 | "foo" |
| 3 | {"a":"b"} |
+---+-----------+
Spanner's Python Client assumes that all JSON values are Objects. If you read back a value that is not an Object, you will get an error that looks like:
ValueError: dictionary update sequence element #0 has length 3; 2 is required
The root cause of this issue is this line here: https://github.com/googleapis/python-spanner/blob/main/google/cloud/spanner_v1/data_types.py#L47