From e9f133bec0c1420396ff25d30baf1fba74e1ab04 Mon Sep 17 00:00:00 2001 From: Alvaro Viebrantz Date: Wed, 24 Jan 2024 16:57:49 -0400 Subject: [PATCH] feat: support JSON query param (#1329) --- src/bigquery.ts | 4 ++++ test/bigquery.ts | 27 +++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/bigquery.ts b/src/bigquery.ts index d7adaa6a..c2a2983d 100644 --- a/src/bigquery.ts +++ b/src/bigquery.ts @@ -1005,6 +1005,8 @@ export class BigQuery extends Service { 'GEOGRAPHY', 'ARRAY', 'STRUCT', + 'JSON', + 'RANGE', ]; if (is.array(providedType)) { @@ -1182,6 +1184,8 @@ export class BigQuery extends Service { }, {} ); + } else if (typeName === 'JSON' && is.object(value)) { + queryParameter.parameterValue!.value = JSON.stringify(value); } else { queryParameter.parameterValue!.value = BigQuery._getValue( value, diff --git a/test/bigquery.ts b/test/bigquery.ts index 41491ef1..1a6f51b9 100644 --- a/test/bigquery.ts +++ b/test/bigquery.ts @@ -1521,6 +1521,33 @@ describe('BigQuery', () => { assert.deepStrictEqual(param, expectedParam); }); + it('should format JSON types', () => { + const typeName = 'JSON'; + const value = { + foo: 'bar', + }; + const strValue = JSON.stringify(value); + assert.deepStrictEqual(BigQuery.valueToQueryParameter_(value, typeName), { + parameterType: { + type: typeName, + }, + parameterValue: { + value: strValue, + }, + }); + assert.deepStrictEqual( + BigQuery.valueToQueryParameter_(strValue, typeName), + { + parameterType: { + type: typeName, + }, + parameterValue: { + value: strValue, + }, + } + ); + }); + it('should format all other types', () => { const typeName = 'ANY-TYPE'; sandbox.stub(BigQuery, 'getTypeDescriptorFromValue_').returns({