GoogleSQL for Spanner supports the following protocol buffer functions.
Function list
Name | Summary |
---|---|
REPLACE_FIELDS
|
Replaces the values in one or more protocol buffer fields. |
REPLACE_FIELDS
REPLACE_FIELDS
(
proto_expression
,
value
AS
field_path
[
,
...
]
)
Description
Returns a copy of a protocol buffer, replacing the values in one or more fields. field_path
is a delimited path to the protocol buffer field that's replaced.
When using replace_fields
, the following limitations apply:
- If
value
isNULL
, it un-setsfield_path
or returns an error if the last component offield_path
is a required field. - Replacing subfields will succeed only if the message containing the field is set.
- Replacing subfields of repeated field isn't allowed.
- A repeated field can be replaced with an
ARRAY
value.
Return type
Type of proto_expression
Examples
The following example uses protocol buffer messages Book
and BookDetails
.
message
Book
{
required
string
title
=
1
;
repeated
string
reviews
=
2
;
optional
BookDetails
details
=
3
;
}
;
message
BookDetails
{
optional
string
author
=
1
;
optional
int32
chapters
=
2
;
}
;
This statement replaces the values of the field title
and subfield chapters
of proto type Book
. Note that field details
must be set for the statement
to succeed.
SELECT
REPLACE_FIELDS
(
NEW
Book
(
"The Hummingbird"
AS
title
,
NEW
BookDetails
(
10
AS
chapters
)
AS
details
),
"The Hummingbird II"
AS
title
,
11
AS
details
.
chapters
)
AS
proto
;
/*-----------------------------------------------------------------------------*
| proto |
+-----------------------------------------------------------------------------+
|{title: "The Hummingbird II" details: {chapters: 11 }} |
*-----------------------------------------------------------------------------*/
The function can replace value of repeated fields.
SELECT
REPLACE_FIELDS
(
NEW
Book
(
"The Hummingbird"
AS
title
,
NEW
BookDetails
(
10
AS
chapters
)
AS
details
),
[
"A good read!"
,
"Highly recommended."
]
AS
reviews
)
AS
proto
;
/*-----------------------------------------------------------------------------*
| proto |
+-----------------------------------------------------------------------------+
|{title: "The Hummingbird" review: "A good read" review: "Highly recommended."|
| details: {chapters: 10 }} |
*-----------------------------------------------------------------------------*/
The function can also set a field to NULL
.
SELECT
REPLACE_FIELDS
(
NEW
Book
(
"The Hummingbird"
AS
title
,
NEW
BookDetails
(
10
AS
chapters
)
AS
details
),
NULL
AS
details
)
AS
proto
;
/*-----------------------------------------------------------------------------*
| proto |
+-----------------------------------------------------------------------------+
|{title: "The Hummingbird" } |
*-----------------------------------------------------------------------------*/