The TypeAnnotationCode that disambiguates SQL type that Spanner will use to represent values of this type during query processing. This is necessary for some type codes because a single TypeCode can be mapped to different SQL types depending on the SQL dialect. typeAnnotation typically is not needed to process the content of a value (it doesn't affect serialization) and clients can ignore it on the read path.
TypeCode is used as part of Type to indicate the type of a Cloud Spanner value.
Each legal value of a type can be encoded to or decoded from a JSON value, using the encodings described below. All Cloud Spanner values can be null, regardless of type; nulls are always encoded as a JSON null.
Encoded as JSON true or false.
Encoded as string, in decimal format.
Encoded as number, or the strings "NaN", "Infinity", or "-Infinity".
Encoded as string in RFC 3339 timestamp format. The time zone must be present, and must be "Z".
If the schema has the column option allow_commit_timestamp=true, the placeholder string "spanner.commit_timestamp()" can be used to instruct the system to insert the commit timestamp associated with the transaction commit.
Encoded as string in RFC 3339 date format.
Encoded as string.
Encoded as a base64-encoded string, as described in RFC 4648, section 4.
Encoded as list, where the list elements are represented according to arrayElementType.
Encoded as string, in decimal format or scientific notation format. Decimal format: [+-]Digits[.[Digits]] or [+-][Digits].Digits
Scientific notation: [+-]Digits[.[Digits]][ExponentIndicator[+-]Digits] or [+-][Digits].Digits[ExponentIndicator[+-]Digits] (ExponentIndicator is "e" or "E")
Encoded as a JSON-formatted string as described in RFC 7159. The following rules are applied when parsing JSON input:
Whitespace characters are not preserved.
If a JSON object has duplicate keys, only the first key is preserved.
Members of a JSON object are not guaranteed to have their order preserved.
JSON array elements will have their order preserved.
TypeAnnotationCode is used as a part of Type to disambiguate SQL types that should be used for a given Cloud Spanner value. Disambiguation is needed because the same Cloud Spanner type can be mapped to different SQL types depending on SQL dialect. TypeAnnotationCode doesn't affect the way value is serialized.
PostgreSQL compatible NUMERIC type. This annotation needs to be applied to Type instances having NUMERIC type code to specify that values of this type should be treated as PostgreSQL NUMERIC values. Currently this annotation is always needed for NUMERIC when a client interacts with PostgreSQL-enabled Spanner databases.