nebius/SWE-rebench-V2-PRs huggingface dataset:
Repository: cdk8s-team/cdk8s-plus
Pull request #1512 (2022-12-14 14:13:01)

feat(pod): allow adding an existing `Container` object
Fixes: #1508



yfried: > @yfried Unfortunately we can't do this because union types don't translate well to other languages. In Java for example this would translate to accepting an `Object`, which is not a good experience. What we usually do is just add another method with a different name that accepts the different argument.

So instead you meant to have `attachConainer(cont: Container)` and `addContainer(cont: ContainerProps)`?
It's easy to do technically but I'm concerned that these 2 methods will look the same to new users (like me), and would raise a whole new bunch of questions/frustrations
iliapolo: @yfried I agree adding another method might be confusing, but we can clarify the confusion with documentation. 

Ideally we would have the `addContainer` method accept a `Container`, and then have another method called `createContainer` that would accept `ContainerProps` and create the `Container`. But unfortunately we cannot break the API.

So given our limitations, I think adding the `attachXXX` methods will be an OK solution. 
iliapolo: @yfried looks good. Just need the DCO: https://github.com/cdk8s-team/cdk8s-plus/blob/k8s-25/main/CONTRIBUTING.md#developer-certificate-of-origin-dco
iliapolo: @yfried The build is failing because it detected a diff between your code and the one our linters expect. Can you run `yarn build` locally to auto-fix it? 

Patch:
diff --git a/src/pod.ts b/src/pod.ts
index 21db0f3a..805964cd 100644
--- a/src/pod.ts
+++ b/src/pod.ts
@@ -107,10 +107,14 @@ export abstract class AbstractPod extends base.Resource implements IPodSelector,
 
   public addContainer(cont: container.ContainerProps): container.Container {
     const impl = new container.Container(cont);
-    this._containers.push(impl);
+    this.attachContainer(impl);
     return impl;
   }
 
+  public attachContainer(cont: container.Container) {
+    this._containers.push(cont);
+  }
+
   public addInitContainer(cont: container.ContainerProps): container.Container {
 
     // https://kubernetes.io/docs/concepts/workloads/pods/init-containers/#differences-from-regular-containers


Test patch:
diff --git a/test/pod.test.ts b/test/pod.test.ts
index 32bab00a..3b03568d 100644
--- a/test/pod.test.ts
+++ b/test/pod.test.ts
@@ -148,6 +148,22 @@ test('Can add container post instantiation', () => {
 
 });
 
+test('Can attach an existing container post instantiation', () => {
+
+  const chart = Testing.chart();
+
+  const pod = new kplus.Pod(chart, 'Pod');
+
+  const container = new kplus.Container({ image: 'image' });
+
+  pod.attachContainer(container);
+
+  const spec = Testing.synth(chart)[0].spec;
+
+  expect(spec.containers[0].image).toEqual('image');
+
+});
+
 test('Must have at least one container', () => {
 
   const chart = Testing.chart();
Repository: cdk8s-team/cdk8s-plus
Pull request #1541 (2022-12-20 18:31:24)

feat(pod): allow adding an existing `Container` object (#1512)
# Backport

This will backport the following commits from `k8s-25/main` to `k8s-23/main`:
 - [feat(pod): allow adding an existing `Container` object (#1512)](https://github.com/cdk8s-team/cdk8s-plus/pull/1512)

<!--- Backport version: 8.5.0 -->

### Questions ?
Please refer to the [Backport tool documentation](https://github.com/sqren/backport)


Patch:
diff --git a/src/pod.ts b/src/pod.ts
index 9f853dd0..b6d82ef0 100644
--- a/src/pod.ts
+++ b/src/pod.ts
@@ -107,10 +107,14 @@ export abstract class AbstractPod extends base.Resource implements IPodSelector,
 
   public addContainer(cont: container.ContainerProps): container.Container {
     const impl = new container.Container(cont);
-    this._containers.push(impl);
+    this.attachContainer(impl);
     return impl;
   }
 
+  public attachContainer(cont: container.Container) {
+    this._containers.push(cont);
+  }
+
   public addInitContainer(cont: container.ContainerProps): container.Container {
 
     // https://kubernetes.io/docs/concepts/workloads/pods/init-containers/#differences-from-regular-containers


Test patch:
diff --git a/test/pod.test.ts b/test/pod.test.ts
index 32bab00a..3b03568d 100644
--- a/test/pod.test.ts
+++ b/test/pod.test.ts
@@ -148,6 +148,22 @@ test('Can add container post instantiation', () => {
 
 });
 
+test('Can attach an existing container post instantiation', () => {
+
+  const chart = Testing.chart();
+
+  const pod = new kplus.Pod(chart, 'Pod');
+
+  const container = new kplus.Container({ image: 'image' });
+
+  pod.attachContainer(container);
+
+  const spec = Testing.synth(chart)[0].spec;
+
+  expect(spec.containers[0].image).toEqual('image');
+
+});
+
 test('Must have at least one container', () => {
 
   const chart = Testing.chart();
Repository: cdk8s-team/cdk8s-plus
Pull request #1542 (2022-12-20 18:31:27)

feat(pod): allow adding an existing `Container` object (#1512)
# Backport

This will backport the following commits from `k8s-25/main` to `k8s-24/main`:
 - [feat(pod): allow adding an existing `Container` object (#1512)](https://github.com/cdk8s-team/cdk8s-plus/pull/1512)

<!--- Backport version: 8.5.0 -->

### Questions ?
Please refer to the [Backport tool documentation](https://github.com/sqren/backport)


Patch:
diff --git a/src/pod.ts b/src/pod.ts
index 21db0f3a..805964cd 100644
--- a/src/pod.ts
+++ b/src/pod.ts
@@ -107,10 +107,14 @@ export abstract class AbstractPod extends base.Resource implements IPodSelector,
 
   public addContainer(cont: container.ContainerProps): container.Container {
     const impl = new container.Container(cont);
-    this._containers.push(impl);
+    this.attachContainer(impl);
     return impl;
   }
 
+  public attachContainer(cont: container.Container) {
+    this._containers.push(cont);
+  }
+
   public addInitContainer(cont: container.ContainerProps): container.Container {
 
     // https://kubernetes.io/docs/concepts/workloads/pods/init-containers/#differences-from-regular-containers


Test patch:
diff --git a/test/pod.test.ts b/test/pod.test.ts
index 32bab00a..3b03568d 100644
--- a/test/pod.test.ts
+++ b/test/pod.test.ts
@@ -148,6 +148,22 @@ test('Can add container post instantiation', () => {
 
 });
 
+test('Can attach an existing container post instantiation', () => {
+
+  const chart = Testing.chart();
+
+  const pod = new kplus.Pod(chart, 'Pod');
+
+  const container = new kplus.Container({ image: 'image' });
+
+  pod.attachContainer(container);
+
+  const spec = Testing.synth(chart)[0].spec;
+
+  expect(spec.containers[0].image).toEqual('image');
+
+});
+
 test('Must have at least one container', () => {
 
   const chart = Testing.chart();
Repository: cdk8s-team/cdk8s-plus
Pull request #1647 (2023-01-25 09:21:56)

feat(secret): convert a secret to an `EnvValue` (#1643)
# Backport

This will backport the following commits from `k8s-25/main` to `k8s-23/main`:
 - [feat(secret): convert a secret to an `EnvValue` (#1643)](https://github.com/cdk8s-team/cdk8s-plus/pull/1643)

<!--- Backport version: 8.5.0 -->

### Questions ?
Please refer to the [Backport tool documentation](https://github.com/sqren/backport)


Patch:
diff --git a/src/secret.ts b/src/secret.ts
index 872cdd4f..eb98247d 100644
--- a/src/secret.ts
+++ b/src/secret.ts
@@ -1,6 +1,7 @@
 import { ApiObject } from 'cdk8s';
 import { Construct } from 'constructs';
 import * as base from './base';
+import { EnvValue, EnvValueFromSecretOptions } from './container';
 import * as k8s from './imports/k8s';
 import * as serviceaccount from './service-account';
 
@@ -42,7 +43,12 @@ export interface SecretProps extends CommonSecretProps {
 }
 
 export interface ISecret extends base.IResource {
-
+  /**
+   * Returns EnvValue object from a secret's key.
+   * @param key Secret's key
+   * @param options Additional EnvValue options
+   */
+  envValue(key: string, options?: EnvValueFromSecretOptions): EnvValue;
 }
 
 /**
@@ -91,6 +97,10 @@ class ImportedSecret extends Construct implements ISecret {
     return this.name;
   }
 
+  public envValue(key: string, options?: EnvValueFromSecretOptions): EnvValue {
+    return EnvValue.fromSecretValue({ secret: this, key }, options);
+  }
+
 }
 
 /**
@@ -154,6 +164,10 @@ export class Secret extends base.Resource implements ISecret {
   public getStringData(key: string): string | undefined {
     return this.stringData[key];
   }
+
+  public envValue(key: string, options?: EnvValueFromSecretOptions): EnvValue {
+    return EnvValue.fromSecretValue({ secret: this, key }, options);
+  }
 }
 
 /**


Test patch:
diff --git a/test/container.test.ts b/test/container.test.ts
index 97429f1d..331b6fd5 100644
--- a/test/container.test.ts
+++ b/test/container.test.ts
@@ -47,6 +47,36 @@ describe('EnvValue', () => {
     });
   });
 
+  test('Can be created from ISecret.envValue', () => {
+    const chart = Testing.chart();
+
+    const actual = kplus.Secret.fromSecretName(chart, 'Secret', 'Secret').envValue('my-key', { optional: false });
+
+    expect(actual.value).toBeUndefined();
+    expect(actual.valueFrom).toEqual({
+      secretKeyRef: {
+        key: 'my-key',
+        name: 'Secret',
+        optional: false,
+      },
+    });
+  });
+
+  test('Can be created from new secret.envValue', () => {
+    const chart = Testing.chart();
+
+    const actual = new kplus.Secret(chart, 'Secret', { stringData: { 'my-key': 'my-value' } }).envValue('my-key', { optional: true });
+
+    expect(actual.value).toBeUndefined();
+    expect(actual.valueFrom).toEqual({
+      secretKeyRef: {
+        key: 'my-key',
+        name: 'test-secret-c837fa76',
+        optional: true,
+      },
+    });
+  });
+
   test('Cannot be created from missing required process env', () => {
 
     const key = 'cdk8s-plus.tests.container.env.fromProcess';
Repository: cdk8s-team/cdk8s-plus
Pull request #1648 (2023-01-25 09:21:59)

feat(secret): convert a secret to an `EnvValue` (#1643)
# Backport

This will backport the following commits from `k8s-25/main` to `k8s-24/main`:
 - [feat(secret): convert a secret to an `EnvValue` (#1643)](https://github.com/cdk8s-team/cdk8s-plus/pull/1643)

<!--- Backport version: 8.5.0 -->

### Questions ?
Please refer to the [Backport tool documentation](https://github.com/sqren/backport)


Patch:
diff --git a/src/secret.ts b/src/secret.ts
index 872cdd4f..eb98247d 100644
--- a/src/secret.ts
+++ b/src/secret.ts
@@ -1,6 +1,7 @@
 import { ApiObject } from 'cdk8s';
 import { Construct } from 'constructs';
 import * as base from './base';
+import { EnvValue, EnvValueFromSecretOptions } from './container';
 import * as k8s from './imports/k8s';
 import * as serviceaccount from './service-account';
 
@@ -42,7 +43,12 @@ export interface SecretProps extends CommonSecretProps {
 }
 
 export interface ISecret extends base.IResource {
-
+  /**
+   * Returns EnvValue object from a secret's key.
+   * @param key Secret's key
+   * @param options Additional EnvValue options
+   */
+  envValue(key: string, options?: EnvValueFromSecretOptions): EnvValue;
 }
 
 /**
@@ -91,6 +97,10 @@ class ImportedSecret extends Construct implements ISecret {
     return this.name;
   }
 
+  public envValue(key: string, options?: EnvValueFromSecretOptions): EnvValue {
+    return EnvValue.fromSecretValue({ secret: this, key }, options);
+  }
+
 }
 
 /**
@@ -154,6 +164,10 @@ export class Secret extends base.Resource implements ISecret {
   public getStringData(key: string): string | undefined {
     return this.stringData[key];
   }
+
+  public envValue(key: string, options?: EnvValueFromSecretOptions): EnvValue {
+    return EnvValue.fromSecretValue({ secret: this, key }, options);
+  }
 }
 
 /**


Test patch:
diff --git a/test/container.test.ts b/test/container.test.ts
index 97429f1d..331b6fd5 100644
--- a/test/container.test.ts
+++ b/test/container.test.ts
@@ -47,6 +47,36 @@ describe('EnvValue', () => {
     });
   });
 
+  test('Can be created from ISecret.envValue', () => {
+    const chart = Testing.chart();
+
+    const actual = kplus.Secret.fromSecretName(chart, 'Secret', 'Secret').envValue('my-key', { optional: false });
+
+    expect(actual.value).toBeUndefined();
+    expect(actual.valueFrom).toEqual({
+      secretKeyRef: {
+        key: 'my-key',
+        name: 'Secret',
+        optional: false,
+      },
+    });
+  });
+
+  test('Can be created from new secret.envValue', () => {
+    const chart = Testing.chart();
+
+    const actual = new kplus.Secret(chart, 'Secret', { stringData: { 'my-key': 'my-value' } }).envValue('my-key', { optional: true });
+
+    expect(actual.value).toBeUndefined();
+    expect(actual.valueFrom).toEqual({
+      secretKeyRef: {
+        key: 'my-key',
+        name: 'test-secret-c837fa76',
+        optional: true,
+      },
+    });
+  });
+
   test('Cannot be created from missing required process env', () => {
 
     const key = 'cdk8s-plus.tests.container.env.fromProcess';
Repository: cdk8s-team/cdk8s-plus
Pull request #2404 (2023-07-26 06:40:27)

feat(volume): nfs volume support (#2300) (#2302)
# Backport

This will backport the following commits from `k8s-27/main` to `k8s-25/main`:
 - [feat(volume): nfs volume support (#2300) (#2302)](https://github.com/cdk8s-team/cdk8s-plus/pull/2302)

<!--- Backport version: 8.5.0 -->

### Questions ?
Please refer to the [Backport tool documentation](https://github.com/sqren/backport)


Patch:
diff --git a/src/volume.ts b/src/volume.ts
index a881f4b5..9e3c50ad 100644
--- a/src/volume.ts
+++ b/src/volume.ts
@@ -221,6 +221,21 @@ export class Volume extends Construct implements IStorage {
     });
   }
 
+  /**
+   * Used to mount an NFS share into a Pod.
+   *
+   * @see https://kubernetes.io/docs/concepts/storage/volumes/#nfs
+   */
+  public static fromNfs(scope: Construct, id: string, name: string, options: NfsVolumeOptions): Volume {
+    return new Volume(scope, id, name, {
+      nfs: {
+        server: options.server,
+        path: options.path,
+        readOnly: options.readOnly,
+      },
+    });
+  }
+
   /**
    * Populate the volume from a CSI driver, for example the Secrets Store CSI
    * Driver: https://secrets-store-csi-driver.sigs.k8s.io/introduction.html.
@@ -680,6 +695,29 @@ export enum HostPathVolumeType {
   BLOCK_DEVICE = 'BlockDevice'
 }
 
+/**
+ * Options for the NFS based volume.
+ */
+export interface NfsVolumeOptions {
+
+  /**
+   * Server is the hostname or IP address of the NFS server.
+   */
+  readonly server: string;
+
+  /**
+   * If set to true, will force the NFS export to be mounted with read-only permissions.
+   *
+   * @default - false
+   */
+  readonly readOnly?: boolean;
+
+  /**
+   * Path that is exported by the NFS server
+   */
+  readonly path: string;
+}
+
 /**
  * Options for the CSI driver based volume.
  */


Test patch:
diff --git a/test/volume.test.ts b/test/volume.test.ts
index 1a931b62..f30ae887 100644
--- a/test/volume.test.ts
+++ b/test/volume.test.ts
@@ -577,6 +577,48 @@ describe('fromHostPath', () => {
 
 });
 
+describe('fromNfs', () => {
+
+  test('defaults', () => {
+
+    const chart = Testing.chart();
+    const volume = Volume.fromNfs(chart, 'Volume', 'disk', {
+      server: '169.254.1.1',
+      path: '/nfs/path',
+    });
+    const spec = volume._toKube();
+    expect(spec).toEqual({
+      name: 'disk',
+      nfs: {
+        server: '169.254.1.1',
+        path: '/nfs/path',
+      },
+    });
+
+  });
+
+  test('custom', () => {
+
+    const chart = Testing.chart();
+    const volume = Volume.fromNfs(chart, 'Volume', 'disk', {
+      server: '169.254.1.1',
+      path: '/nfs/path',
+      readOnly: true,
+    });
+    const spec = volume._toKube();
+    expect(spec).toEqual({
+      name: 'disk',
+      nfs: {
+        server: '169.254.1.1',
+        path: '/nfs/path',
+        readOnly: true,
+      },
+    });
+
+  });
+
+});
+
 describe('fromCsi', () => {
   test('minimal definition', () => {
     // GIVEN
Repository: cdk8s-team/cdk8s-plus
Pull request #2405 (2023-07-26 06:40:31)

feat(volume): nfs volume support (#2300) (#2302)
# Backport

This will backport the following commits from `k8s-27/main` to `k8s-26/main`:
 - [feat(volume): nfs volume support (#2300) (#2302)](https://github.com/cdk8s-team/cdk8s-plus/pull/2302)

<!--- Backport version: 8.5.0 -->

### Questions ?
Please refer to the [Backport tool documentation](https://github.com/sqren/backport)


Patch:
diff --git a/src/volume.ts b/src/volume.ts
index a881f4b5..9e3c50ad 100644
--- a/src/volume.ts
+++ b/src/volume.ts
@@ -221,6 +221,21 @@ export class Volume extends Construct implements IStorage {
     });
   }
 
+  /**
+   * Used to mount an NFS share into a Pod.
+   *
+   * @see https://kubernetes.io/docs/concepts/storage/volumes/#nfs
+   */
+  public static fromNfs(scope: Construct, id: string, name: string, options: NfsVolumeOptions): Volume {
+    return new Volume(scope, id, name, {
+      nfs: {
+        server: options.server,
+        path: options.path,
+        readOnly: options.readOnly,
+      },
+    });
+  }
+
   /**
    * Populate the volume from a CSI driver, for example the Secrets Store CSI
    * Driver: https://secrets-store-csi-driver.sigs.k8s.io/introduction.html.
@@ -680,6 +695,29 @@ export enum HostPathVolumeType {
   BLOCK_DEVICE = 'BlockDevice'
 }
 
+/**
+ * Options for the NFS based volume.
+ */
+export interface NfsVolumeOptions {
+
+  /**
+   * Server is the hostname or IP address of the NFS server.
+   */
+  readonly server: string;
+
+  /**
+   * If set to true, will force the NFS export to be mounted with read-only permissions.
+   *
+   * @default - false
+   */
+  readonly readOnly?: boolean;
+
+  /**
+   * Path that is exported by the NFS server
+   */
+  readonly path: string;
+}
+
 /**
  * Options for the CSI driver based volume.
  */


Test patch:
diff --git a/test/volume.test.ts b/test/volume.test.ts
index 1a931b62..f30ae887 100644
--- a/test/volume.test.ts
+++ b/test/volume.test.ts
@@ -577,6 +577,48 @@ describe('fromHostPath', () => {
 
 });
 
+describe('fromNfs', () => {
+
+  test('defaults', () => {
+
+    const chart = Testing.chart();
+    const volume = Volume.fromNfs(chart, 'Volume', 'disk', {
+      server: '169.254.1.1',
+      path: '/nfs/path',
+    });
+    const spec = volume._toKube();
+    expect(spec).toEqual({
+      name: 'disk',
+      nfs: {
+        server: '169.254.1.1',
+        path: '/nfs/path',
+      },
+    });
+
+  });
+
+  test('custom', () => {
+
+    const chart = Testing.chart();
+    const volume = Volume.fromNfs(chart, 'Volume', 'disk', {
+      server: '169.254.1.1',
+      path: '/nfs/path',
+      readOnly: true,
+    });
+    const spec = volume._toKube();
+    expect(spec).toEqual({
+      name: 'disk',
+      nfs: {
+        server: '169.254.1.1',
+        path: '/nfs/path',
+        readOnly: true,
+      },
+    });
+
+  });
+
+});
+
 describe('fromCsi', () => {
   test('minimal definition', () => {
     // GIVEN
Repository: googleapis/google-cloud-go
Pull request #2858 (2020-09-15 00:21:54)

feat(bigquery): add additional time partitioning intervals


Patch:
diff --git a/bigquery/table.go b/bigquery/table.go
index 05e1270e8f..5fd48fba0b 100644
--- a/bigquery/table.go
+++ b/bigquery/table.go
@@ -232,12 +232,19 @@ const (
 
 	// HourPartitioningType uses an hour-based interval for time partitioning.
 	HourPartitioningType TimePartitioningType = "HOUR"
+
+	// MonthPartitioningType uses a month-based interval for time partitioning.
+	MonthPartitioningType TimePartitioningType = "MONTH"
+
+	// YearPartitioningType uses a year-based interval for time partitioning.
+	YearPartitioningType TimePartitioningType = "YEAR"
 )
 
 // TimePartitioning describes the time-based date partitioning on a table.
 // For more information see: https://cloud.google.com/bigquery/docs/creating-partitioned-tables.
 type TimePartitioning struct {
-	// Defines the partition interval type.  Supported values are "DAY" or "HOUR".
+	// Defines the partition interval type.  Supported values are "HOUR", "DAY", "MONTH", and "YEAR".
+	// When the interval type is not specified, default behavior is DAY.
 	Type TimePartitioningType
 
 	// The amount of time to keep the storage for a partition.


Test patch:
diff --git a/bigquery/load_test.go b/bigquery/load_test.go
index f605333ac7..eb9ec38804 100644
--- a/bigquery/load_test.go
+++ b/bigquery/load_test.go
@@ -102,7 +102,7 @@ func TestLoad(t *testing.T) {
 				CreateDisposition:           CreateNever,
 				WriteDisposition:            WriteTruncate,
 				Labels:                      map[string]string{"a": "b"},
-				TimePartitioning:            &TimePartitioning{Type: DayPartitioningType, Expiration: 1234 * time.Millisecond},
+				TimePartitioning:            &TimePartitioning{Type: MonthPartitioningType, Expiration: 1234 * time.Millisecond},
 				Clustering:                  &Clustering{Fields: []string{"cfield1"}},
 				DestinationEncryptionConfig: &EncryptionConfig{KMSKeyName: "keyName"},
 				SchemaUpdateOptions:         []string{"ALLOW_FIELD_ADDITION"},
@@ -114,7 +114,7 @@ func TestLoad(t *testing.T) {
 				j.Configuration.Load.CreateDisposition = "CREATE_NEVER"
 				j.Configuration.Load.WriteDisposition = "WRITE_TRUNCATE"
 				j.Configuration.Load.TimePartitioning = &bq.TimePartitioning{
-					Type:         "DAY",
+					Type:         "MONTH",
 					ExpirationMs: 1234,
 				}
 				j.Configuration.Load.Clustering = &bq.Clustering{
Repository: googleapis/google-cloud-go
Pull request #3760 (2021-03-02 18:40:44)

feat(bigquery): support type alias names for numeric/bignumeric schemas
BigQuery documents aliases DECIMAL for NUMERIC, and BIGDECIMAL for BIGNUMERIC.  Add them to the alias list.


Patch:
diff --git a/bigquery/schema.go b/bigquery/schema.go
index dcb5c6f9b7..0bcd85a606 100644
--- a/bigquery/schema.go
+++ b/bigquery/schema.go
@@ -206,10 +206,12 @@ var (
 	}
 	// The API will accept alias names for the types based on the Standard SQL type names.
 	fieldAliases = map[FieldType]FieldType{
-		"BOOL":    BooleanFieldType,
-		"FLOAT64": FloatFieldType,
-		"INT64":   IntegerFieldType,
-		"STRUCT":  RecordFieldType,
+		"BOOL":       BooleanFieldType,
+		"FLOAT64":    FloatFieldType,
+		"INT64":      IntegerFieldType,
+		"STRUCT":     RecordFieldType,
+		"DECIMAL":    NumericFieldType,
+		"BIGDECIMAL": BigNumericFieldType,
 	}
 )
 


Test patch:
diff --git a/bigquery/schema_test.go b/bigquery/schema_test.go
index ae936980c7..6bdbf13858 100644
--- a/bigquery/schema_test.go
+++ b/bigquery/schema_test.go
@@ -1047,7 +1047,8 @@ func TestSchemaFromJSON(t *testing.T) {
 	{"name":"aliased_integer","type":"INT64","mode":"REQUIRED","description":"Aliased required integer"},
 	{"name":"aliased_boolean","type":"BOOL","mode":"NULLABLE","description":"Aliased nullable boolean"},
 	{"name":"aliased_float","type":"FLOAT64","mode":"REQUIRED","description":"Aliased required float"},
-	{"name":"aliased_record","type":"STRUCT","mode":"NULLABLE","description":"Aliased nullable record"}
+	{"name":"aliased_record","type":"STRUCT","mode":"NULLABLE","description":"Aliased nullable record"},
+	{"name":"aliased_bignumeric","type":"BIGDECIMAL","mode":"NULLABLE","description":"Aliased nullable bignumeric"}
 ]`),
 			expectedSchema: Schema{
 				fieldSchema("Flat nullable string", "flat_string", "STRING", false, false, nil),
@@ -1066,6 +1067,7 @@ func TestSchemaFromJSON(t *testing.T) {
 				fieldSchema("Aliased nullable boolean", "aliased_boolean", "BOOLEAN", false, false, nil),
 				fieldSchema("Aliased required float", "aliased_float", "FLOAT", false, true, nil),
 				fieldSchema("Aliased nullable record", "aliased_record", "RECORD", false, false, nil),
+				fieldSchema("Aliased nullable bignumeric", "aliased_bignumeric", "BIGNUMERIC", false, false, nil),
 			},
 		},
 		{