Skip to content
This repository was archived by the owner on Feb 24, 2026. It is now read-only.

Commit f2121a7

Browse files
authored
feat: Add INTERVAL and JSON type support to JsonStreamWriter (#1351)
* fix: update code comment to reflect max size change * feat: Add JSON and INTERVAL type support to JsonStreamWriter
1 parent ada370a commit f2121a7

File tree

7 files changed

+70
-0
lines changed

7 files changed

+70
-0
lines changed

google-cloud-bigquerystorage/src/main/java/com/google/cloud/bigquery/storage/v1/BQTableSchemaToProtoDescriptor.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ public class BQTableSchemaToProtoDescriptor {
5656
.put(TableFieldSchema.Type.STRUCT, FieldDescriptorProto.Type.TYPE_MESSAGE)
5757
.put(TableFieldSchema.Type.TIME, FieldDescriptorProto.Type.TYPE_INT64)
5858
.put(TableFieldSchema.Type.TIMESTAMP, FieldDescriptorProto.Type.TYPE_INT64)
59+
.put(TableFieldSchema.Type.JSON, FieldDescriptorProto.Type.TYPE_STRING)
60+
.put(TableFieldSchema.Type.INTERVAL, FieldDescriptorProto.Type.TYPE_STRING)
5961
.build();
6062

6163
/**

google-cloud-bigquerystorage/src/main/java/com/google/cloud/bigquery/storage/v1beta2/BQTableSchemaToProtoDescriptor.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ public class BQTableSchemaToProtoDescriptor {
5656
.put(TableFieldSchema.Type.STRUCT, FieldDescriptorProto.Type.TYPE_MESSAGE)
5757
.put(TableFieldSchema.Type.TIME, FieldDescriptorProto.Type.TYPE_INT64)
5858
.put(TableFieldSchema.Type.TIMESTAMP, FieldDescriptorProto.Type.TYPE_INT64)
59+
.put(TableFieldSchema.Type.JSON, FieldDescriptorProto.Type.TYPE_STRING)
60+
.put(TableFieldSchema.Type.INTERVAL, FieldDescriptorProto.Type.TYPE_STRING)
5961
.build();
6062

6163
/**

google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1/BQTableSchemaToProtoDescriptorTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,18 @@ public void testStructComplex() throws Exception {
245245
.setMode(TableFieldSchema.Mode.REPEATED)
246246
.setName("test_bignumeric_str")
247247
.build();
248+
final TableFieldSchema TEST_INTERVAL =
249+
TableFieldSchema.newBuilder()
250+
.setType(TableFieldSchema.Type.INTERVAL)
251+
.setMode(TableFieldSchema.Mode.NULLABLE)
252+
.setName("test_interval")
253+
.build();
254+
final TableFieldSchema TEST_JSON =
255+
TableFieldSchema.newBuilder()
256+
.setType(TableFieldSchema.Type.JSON)
257+
.setMode(TableFieldSchema.Mode.REPEATED)
258+
.setName("test_json")
259+
.build();
248260
final TableSchema tableSchema =
249261
TableSchema.newBuilder()
250262
.addFields(0, test_int)
@@ -266,6 +278,8 @@ public void testStructComplex() throws Exception {
266278
.addFields(16, TEST_NUMERIC_STR)
267279
.addFields(17, TEST_BIGNUMERIC)
268280
.addFields(18, TEST_BIGNUMERIC_STR)
281+
.addFields(19, TEST_INTERVAL)
282+
.addFields(20, TEST_JSON)
269283
.build();
270284
final Descriptor descriptor =
271285
BQTableSchemaToProtoDescriptor.convertBQTableSchemaToProtoDescriptor(tableSchema);

google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1/JsonToProtoMessageTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,6 +394,18 @@ public class JsonToProtoMessageTest {
394394
.setMode(TableFieldSchema.Mode.REPEATED)
395395
.setName("test_bignumeric_str")
396396
.build();
397+
final TableFieldSchema TEST_INTERVAL =
398+
TableFieldSchema.newBuilder()
399+
.setType(TableFieldSchema.Type.INTERVAL)
400+
.setMode(TableFieldSchema.Mode.NULLABLE)
401+
.setName("test_interval")
402+
.build();
403+
final TableFieldSchema TEST_JSON =
404+
TableFieldSchema.newBuilder()
405+
.setType(TableFieldSchema.Type.JSON)
406+
.setMode(TableFieldSchema.Mode.REPEATED)
407+
.setName("test_json")
408+
.build();
397409
private final TableSchema COMPLEX_TABLE_SCHEMA =
398410
TableSchema.newBuilder()
399411
.addFields(0, TEST_INT)
@@ -415,6 +427,8 @@ public class JsonToProtoMessageTest {
415427
.addFields(16, TEST_NUMERIC_STR)
416428
.addFields(17, TEST_BIGNUMERIC)
417429
.addFields(18, TEST_BIGNUMERIC_STR)
430+
.addFields(19, TEST_INTERVAL)
431+
.addFields(20, TEST_JSON)
418432
.build();
419433

420434
@Test
@@ -743,6 +757,8 @@ public void testStructComplex() throws Exception {
743757
BigDecimalByteStringEncoder.encodeToNumericByteString(new BigDecimal("2.3")))
744758
.addTestBignumericStr(
745759
BigDecimalByteStringEncoder.encodeToNumericByteString(new BigDecimal("1.23")))
760+
.setTestInterval("0-0 0 0:0:0.000005")
761+
.addTestJson("{'a':'b'}")
746762
.build();
747763
JSONObject complex_lvl2 = new JSONObject();
748764
complex_lvl2.put("test_int", 3);
@@ -789,6 +805,8 @@ public void testStructComplex() throws Exception {
789805
"test_bignumeric",
790806
BigDecimalByteStringEncoder.encodeToNumericByteString(BigDecimal.valueOf(2.3)));
791807
json.put("test_bignumeric_str", new JSONArray(new String[] {"1.23"}));
808+
json.put("test_interval", "0-0 0 0:0:0.000005");
809+
json.put("test_json", new JSONArray(new String[] {"{'a':'b'}"}));
792810
DynamicMessage protoMsg =
793811
JsonToProtoMessage.convertJsonToProtoMessage(
794812
ComplexRoot.getDescriptor(), COMPLEX_TABLE_SCHEMA, json);

google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1beta2/BQTableSchemaToProtoDescriptorTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,18 @@ public void testStructComplex() throws Exception {
245245
.setMode(TableFieldSchema.Mode.REPEATED)
246246
.setName("test_bignumeric_str")
247247
.build();
248+
final TableFieldSchema TEST_INTERVAL =
249+
TableFieldSchema.newBuilder()
250+
.setType(TableFieldSchema.Type.INTERVAL)
251+
.setMode(TableFieldSchema.Mode.NULLABLE)
252+
.setName("test_interval")
253+
.build();
254+
final TableFieldSchema TEST_JSON =
255+
TableFieldSchema.newBuilder()
256+
.setType(TableFieldSchema.Type.JSON)
257+
.setMode(TableFieldSchema.Mode.REPEATED)
258+
.setName("test_json")
259+
.build();
248260
final TableSchema tableSchema =
249261
TableSchema.newBuilder()
250262
.addFields(0, test_int)
@@ -266,6 +278,8 @@ public void testStructComplex() throws Exception {
266278
.addFields(16, TEST_NUMERIC_STR)
267279
.addFields(17, TEST_BIGNUMERIC)
268280
.addFields(18, TEST_BIGNUMERIC_STR)
281+
.addFields(19, TEST_INTERVAL)
282+
.addFields(20, TEST_JSON)
269283
.build();
270284
final Descriptor descriptor =
271285
BQTableSchemaToProtoDescriptor.convertBQTableSchemaToProtoDescriptor(tableSchema);

google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1beta2/JsonToProtoMessageTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,18 @@ public class JsonToProtoMessageTest {
395395
.setMode(TableFieldSchema.Mode.REPEATED)
396396
.setName("test_bignumeric_str")
397397
.build();
398+
private final TableFieldSchema TEST_INTERVAL =
399+
TableFieldSchema.newBuilder()
400+
.setType(TableFieldSchema.Type.INTERVAL)
401+
.setMode(TableFieldSchema.Mode.NULLABLE)
402+
.setName("test_interval")
403+
.build();
404+
private final TableFieldSchema TEST_JSON =
405+
TableFieldSchema.newBuilder()
406+
.setType(TableFieldSchema.Type.JSON)
407+
.setMode(TableFieldSchema.Mode.REPEATED)
408+
.setName("test_json")
409+
.build();
398410
private final TableSchema COMPLEX_TABLE_SCHEMA =
399411
TableSchema.newBuilder()
400412
.addFields(0, TEST_INT)
@@ -416,6 +428,8 @@ public class JsonToProtoMessageTest {
416428
.addFields(16, TEST_NUMERIC_STR)
417429
.addFields(17, TEST_BIGNUMERIC)
418430
.addFields(18, TEST_BIGNUMERIC_STR)
431+
.addFields(19, TEST_INTERVAL)
432+
.addFields(20, TEST_JSON)
419433
.build();
420434

421435
@Test
@@ -744,6 +758,8 @@ public void testStructComplex() throws Exception {
744758
BigDecimalByteStringEncoder.encodeToNumericByteString(new BigDecimal("2.3")))
745759
.addTestBignumericStr(
746760
BigDecimalByteStringEncoder.encodeToNumericByteString(new BigDecimal("1.23")))
761+
.setTestInterval("0-0 0 0:0:0.000005")
762+
.addTestJson("{'a':'b'}")
747763
.build();
748764
JSONObject complex_lvl2 = new JSONObject();
749765
complex_lvl2.put("test_int", 3);
@@ -790,6 +806,8 @@ public void testStructComplex() throws Exception {
790806
"test_bignumeric",
791807
BigDecimalByteStringEncoder.encodeToNumericByteString(BigDecimal.valueOf(2.3)));
792808
json.put("test_bignumeric_str", new JSONArray(new String[] {"1.23"}));
809+
json.put("test_interval", "0-0 0 0:0:0.000005");
810+
json.put("test_json", new JSONArray(new String[] {"{'a':'b'}"}));
793811
DynamicMessage protoMsg =
794812
JsonToProtoMessage.convertJsonToProtoMessage(
795813
ComplexRoot.getDescriptor(), COMPLEX_TABLE_SCHEMA, json);

google-cloud-bigquerystorage/src/test/proto/jsonTest.proto

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ message ComplexRoot {
2323
optional bytes test_numeric_str = 17;
2424
optional bytes test_bignumeric = 18;
2525
repeated bytes test_bignumeric_str = 19;
26+
optional string test_interval = 20;
27+
repeated string test_json = 21;
2628
}
2729

2830
message CasingComplex {

0 commit comments

Comments
 (0)