google-cloud-bigquery 1.32.0 → 1.35.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -291,7 +291,7 @@ module Google
291
291
  # use named query parameters. When set, `legacy_sql` will automatically be set to false and `standard_sql` to
292
292
  # true.
293
293
  #
294
- # Ruby types are mapped to BigQuery types as follows:
294
+ # BigQuery types are converted from Ruby types as follows:
295
295
  #
296
296
  # | BigQuery | Ruby | Notes |
297
297
  # |--------------|--------------------------------------|----------------------------------------------------|
@@ -299,10 +299,11 @@ module Google
299
299
  # | `INT64` | `Integer` | |
300
300
  # | `FLOAT64` | `Float` | |
301
301
  # | `NUMERIC` | `BigDecimal` | `BigDecimal` values will be rounded to scale 9. |
302
- # | `BIGNUMERIC` | | Query param values must be mapped in `types`. |
302
+ # | `BIGNUMERIC` | `BigDecimal` | NOT AUTOMATIC: Must be mapped using `types`, below.|
303
303
  # | `STRING` | `String` | |
304
304
  # | `DATETIME` | `DateTime` | `DATETIME` does not support time zone. |
305
305
  # | `DATE` | `Date` | |
306
+ # | `GEOGRAPHY` | `String` (WKT or GeoJSON) | NOT AUTOMATIC: Must be mapped using `types`, below.|
306
307
  # | `TIMESTAMP` | `Time` | |
307
308
  # | `TIME` | `Google::Cloud::BigQuery::Time` | |
308
309
  # | `BYTES` | `File`, `IO`, `StringIO`, or similar | |
@@ -310,7 +311,8 @@ module Google
310
311
  # | `STRUCT` | `Hash` | Hash keys may be strings or symbols. |
311
312
  #
312
313
  # See [Data Types](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types) for an overview
313
- # of each BigQuery data type, including allowed values.
314
+ # of each BigQuery data type, including allowed values. For the `GEOGRAPHY` type, see [Working with BigQuery
315
+ # GIS data](https://cloud.google.com/bigquery/docs/gis-data).
314
316
  # @param [Array, Hash] types Standard SQL only. Types of the SQL parameters in `params`. It is not always
315
317
  # possible to infer the right SQL type from a value in `params`. In these cases, `types` must be used to
316
318
  # specify the SQL type for these values.
@@ -327,6 +329,7 @@ module Google
327
329
  # * `:STRING`
328
330
  # * `:DATETIME`
329
331
  # * `:DATE`
332
+ # * `:GEOGRAPHY`
330
333
  # * `:TIMESTAMP`
331
334
  # * `:TIME`
332
335
  # * `:BYTES`
@@ -638,7 +641,7 @@ module Google
638
641
  # use named query parameters. When set, `legacy_sql` will automatically be set to false and `standard_sql` to
639
642
  # true.
640
643
  #
641
- # Ruby types are mapped to BigQuery types as follows:
644
+ # BigQuery types are converted from Ruby types as follows:
642
645
  #
643
646
  # | BigQuery | Ruby | Notes |
644
647
  # |--------------|--------------------------------------|----------------------------------------------------|
@@ -646,10 +649,11 @@ module Google
646
649
  # | `INT64` | `Integer` | |
647
650
  # | `FLOAT64` | `Float` | |
648
651
  # | `NUMERIC` | `BigDecimal` | `BigDecimal` values will be rounded to scale 9. |
649
- # | `BIGNUMERIC` | | Query param values must be mapped in `types`. |
652
+ # | `BIGNUMERIC` | `BigDecimal` | NOT AUTOMATIC: Must be mapped using `types`, below.|
650
653
  # | `STRING` | `String` | |
651
654
  # | `DATETIME` | `DateTime` | `DATETIME` does not support time zone. |
652
655
  # | `DATE` | `Date` | |
656
+ # | `GEOGRAPHY` | `String` (WKT or GeoJSON) | NOT AUTOMATIC: Must be mapped using `types`, below.|
653
657
  # | `TIMESTAMP` | `Time` | |
654
658
  # | `TIME` | `Google::Cloud::BigQuery::Time` | |
655
659
  # | `BYTES` | `File`, `IO`, `StringIO`, or similar | |
@@ -657,7 +661,8 @@ module Google
657
661
  # | `STRUCT` | `Hash` | Hash keys may be strings or symbols. |
658
662
  #
659
663
  # See [Data Types](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types) for an overview
660
- # of each BigQuery data type, including allowed values.
664
+ # of each BigQuery data type, including allowed values. For the `GEOGRAPHY` type, see [Working with BigQuery
665
+ # GIS data](https://cloud.google.com/bigquery/docs/gis-data).
661
666
  # @param [Array, Hash] types Standard SQL only. Types of the SQL parameters in `params`. It is not always
662
667
  # possible to infer the right SQL type from a value in `params`. In these cases, `types` must be used to
663
668
  # specify the SQL type for these values.
@@ -674,6 +679,7 @@ module Google
674
679
  # * `:STRING`
675
680
  # * `:DATETIME`
676
681
  # * `:DATE`
682
+ # * `:GEOGRAPHY`
677
683
  # * `:TIMESTAMP`
678
684
  # * `:TIME`
679
685
  # * `:BYTES`
@@ -386,6 +386,39 @@ module Google
386
386
  @gapi.statistics.query.num_dml_affected_rows
387
387
  end
388
388
 
389
+ ##
390
+ # The number of deleted rows. Present only for DML statements `DELETE`,
391
+ # `MERGE` and `TRUNCATE`. (See {#statement_type}.)
392
+ #
393
+ # @return [Integer, nil] The number of deleted rows, or `nil` if not
394
+ # applicable.
395
+ #
396
+ def deleted_row_count
397
+ @gapi.statistics.query&.dml_stats&.deleted_row_count
398
+ end
399
+
400
+ ##
401
+ # The number of inserted rows. Present only for DML statements `INSERT`
402
+ # and `MERGE`. (See {#statement_type}.)
403
+ #
404
+ # @return [Integer, nil] The number of inserted rows, or `nil` if not
405
+ # applicable.
406
+ #
407
+ def inserted_row_count
408
+ @gapi.statistics.query&.dml_stats&.inserted_row_count
409
+ end
410
+
411
+ ##
412
+ # The number of updated rows. Present only for DML statements `UPDATE`
413
+ # and `MERGE`. (See {#statement_type}.)
414
+ #
415
+ # @return [Integer, nil] The number of updated rows, or `nil` if not
416
+ # applicable.
417
+ #
418
+ def updated_row_count
419
+ @gapi.statistics.query&.dml_stats&.updated_row_count
420
+ end
421
+
389
422
  ##
390
423
  # The table in which the query results are stored.
391
424
  #
@@ -858,7 +891,7 @@ module Google
858
891
  # use named query parameters. When set, `legacy_sql` will automatically be set to false and `standard_sql`
859
892
  # to true.
860
893
  #
861
- # Ruby types are mapped to BigQuery types as follows:
894
+ # BigQuery types are converted from Ruby types as follows:
862
895
  #
863
896
  # | BigQuery | Ruby | Notes |
864
897
  # |--------------|--------------------------------------|--------------------------------------------------|
@@ -866,10 +899,11 @@ module Google
866
899
  # | `INT64` | `Integer` | |
867
900
  # | `FLOAT64` | `Float` | |
868
901
  # | `NUMERIC` | `BigDecimal` | `BigDecimal` values will be rounded to scale 9. |
869
- # | `BIGNUMERIC` | | Query param values must be mapped in `types`. |
902
+ # | `BIGNUMERIC` | `BigDecimal` | NOT AUTOMATIC: Must be mapped using `types`. |
870
903
  # | `STRING` | `String` | |
871
904
  # | `DATETIME` | `DateTime` | `DATETIME` does not support time zone. |
872
905
  # | `DATE` | `Date` | |
906
+ # | `GEOGRAPHY` | `String` (WKT or GeoJSON) | NOT AUTOMATIC: Must be mapped using `types`. |
873
907
  # | `TIMESTAMP` | `Time` | |
874
908
  # | `TIME` | `Google::Cloud::BigQuery::Time` | |
875
909
  # | `BYTES` | `File`, `IO`, `StringIO`, or similar | |
@@ -877,7 +911,8 @@ module Google
877
911
  # | `STRUCT` | `Hash` | Hash keys may be strings or symbols. |
878
912
  #
879
913
  # See [Data Types](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types) for an overview
880
- # of each BigQuery data type, including allowed values.
914
+ # of each BigQuery data type, including allowed values. For the `GEOGRAPHY` type, see [Working with BigQuery
915
+ # GIS data](https://cloud.google.com/bigquery/docs/gis-data).
881
916
  #
882
917
  # @!group Attributes
883
918
  def params= params
@@ -893,7 +928,7 @@ module Google
893
928
  # use named query parameters. When set, `legacy_sql` will automatically be set to false and `standard_sql`
894
929
  # to true.
895
930
  #
896
- # Ruby types are mapped to BigQuery types as follows:
931
+ # BigQuery types are converted from Ruby types as follows:
897
932
  #
898
933
  # | BigQuery | Ruby | Notes |
899
934
  # |--------------|--------------------------------------|--------------------------------------------------|
@@ -901,10 +936,11 @@ module Google
901
936
  # | `INT64` | `Integer` | |
902
937
  # | `FLOAT64` | `Float` | |
903
938
  # | `NUMERIC` | `BigDecimal` | `BigDecimal` values will be rounded to scale 9. |
904
- # | `BIGNUMERIC` | | Query param values must be mapped in `types`. |
939
+ # | `BIGNUMERIC` | `BigDecimal` | NOT AUTOMATIC: Must be mapped using `types`. |
905
940
  # | `STRING` | `String` | |
906
941
  # | `DATETIME` | `DateTime` | `DATETIME` does not support time zone. |
907
942
  # | `DATE` | `Date` | |
943
+ # | `GEOGRAPHY` | `String` (WKT or GeoJSON) | NOT AUTOMATIC: Must be mapped using `types`. |
908
944
  # | `TIMESTAMP` | `Time` | |
909
945
  # | `TIME` | `Google::Cloud::BigQuery::Time` | |
910
946
  # | `BYTES` | `File`, `IO`, `StringIO`, or similar | |
@@ -912,7 +948,8 @@ module Google
912
948
  # | `STRUCT` | `Hash` | Hash keys may be strings or symbols. |
913
949
  #
914
950
  # See [Data Types](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types) for an overview
915
- # of each BigQuery data type, including allowed values.
951
+ # of each BigQuery data type, including allowed values. For the `GEOGRAPHY` type, see [Working with BigQuery
952
+ # GIS data](https://cloud.google.com/bigquery/docs/gis-data).
916
953
  # @param [Array, Hash] types Standard SQL only. Types of the SQL parameters in `params`. It is not always
917
954
  # possible to infer the right SQL type from a value in `params`. In these cases, `types` must be used to
918
955
  # specify the SQL type for these values.
@@ -929,6 +966,7 @@ module Google
929
966
  # * `:STRING`
930
967
  # * `:DATETIME`
931
968
  # * `:DATE`
969
+ # * `:GEOGRAPHY`
932
970
  # * `:TIMESTAMP`
933
971
  # * `:TIME`
934
972
  # * `:BYTES`
@@ -294,9 +294,20 @@ module Google
294
294
  # @param [Symbol] mode The field's mode. The possible values are
295
295
  # `:nullable`, `:required`, and `:repeated`. The default value is
296
296
  # `:nullable`.
297
- #
298
- def string name, description: nil, mode: :nullable
299
- add_field name, :string, description: description, mode: mode
297
+ # @param [Array<String>, String] policy_tags The policy tag list or
298
+ # single policy tag for the field. Policy tag identifiers are of
299
+ # the form `projects/*/locations/*/taxonomies/*/policyTags/*`.
300
+ # At most 1 policy tag is currently allowed.
301
+ # @param [Integer] max_length The maximum UTF-8 length of strings
302
+ # allowed in the field.
303
+ #
304
+ def string name, description: nil, mode: :nullable, policy_tags: nil, max_length: nil
305
+ add_field name,
306
+ :string,
307
+ description: description,
308
+ mode: mode,
309
+ policy_tags: policy_tags,
310
+ max_length: max_length
300
311
  end
301
312
 
302
313
  ##
@@ -310,9 +321,13 @@ module Google
310
321
  # @param [Symbol] mode The field's mode. The possible values are
311
322
  # `:nullable`, `:required`, and `:repeated`. The default value is
312
323
  # `:nullable`.
324
+ # @param [Array<String>, String] policy_tags The policy tag list or
325
+ # single policy tag for the field. Policy tag identifiers are of
326
+ # the form `projects/*/locations/*/taxonomies/*/policyTags/*`.
327
+ # At most 1 policy tag is currently allowed.
313
328
  #
314
- def integer name, description: nil, mode: :nullable
315
- add_field name, :integer, description: description, mode: mode
329
+ def integer name, description: nil, mode: :nullable, policy_tags: nil
330
+ add_field name, :integer, description: description, mode: mode, policy_tags: policy_tags
316
331
  end
317
332
 
318
333
  ##
@@ -326,9 +341,13 @@ module Google
326
341
  # @param [Symbol] mode The field's mode. The possible values are
327
342
  # `:nullable`, `:required`, and `:repeated`. The default value is
328
343
  # `:nullable`.
344
+ # @param [Array<String>, String] policy_tags The policy tag list or
345
+ # single policy tag for the field. Policy tag identifiers are of
346
+ # the form `projects/*/locations/*/taxonomies/*/policyTags/*`.
347
+ # At most 1 policy tag is currently allowed.
329
348
  #
330
- def float name, description: nil, mode: :nullable
331
- add_field name, :float, description: description, mode: mode
349
+ def float name, description: nil, mode: :nullable, policy_tags: nil
350
+ add_field name, :float, description: description, mode: mode, policy_tags: policy_tags
332
351
  end
333
352
 
334
353
  ##
@@ -353,9 +372,29 @@ module Google
353
372
  # @param [Symbol] mode The field's mode. The possible values are
354
373
  # `:nullable`, `:required`, and `:repeated`. The default value is
355
374
  # `:nullable`.
356
- #
357
- def numeric name, description: nil, mode: :nullable
358
- add_field name, :numeric, description: description, mode: mode
375
+ # @param [Array<String>, String] policy_tags The policy tag list or
376
+ # single policy tag for the field. Policy tag identifiers are of
377
+ # the form `projects/*/locations/*/taxonomies/*/policyTags/*`.
378
+ # At most 1 policy tag is currently allowed.
379
+ # @param [Integer] precision The precision (maximum number of total
380
+ # digits) for the field. Acceptable values for precision must be:
381
+ # `1 ≤ (precision - scale) ≤ 29`. Values for scale must be:
382
+ # `0 ≤ scale ≤ 9`. If the scale value is set, the precision value
383
+ # must be set as well.
384
+ # @param [Integer] scale The scale (maximum number of digits in the
385
+ # fractional part) for the field. Acceptable values for precision
386
+ # must be: `1 ≤ (precision - scale) ≤ 29`. Values for scale must
387
+ # be: `0 ≤ scale ≤ 9`. If the scale value is set, the precision
388
+ # value must be set as well.
389
+ #
390
+ def numeric name, description: nil, mode: :nullable, policy_tags: nil, precision: nil, scale: nil
391
+ add_field name,
392
+ :numeric,
393
+ description: description,
394
+ mode: mode,
395
+ policy_tags: policy_tags,
396
+ precision: precision,
397
+ scale: scale
359
398
  end
360
399
 
361
400
  ##
@@ -380,9 +419,29 @@ module Google
380
419
  # @param [Symbol] mode The field's mode. The possible values are
381
420
  # `:nullable`, `:required`, and `:repeated`. The default value is
382
421
  # `:nullable`.
383
- #
384
- def bignumeric name, description: nil, mode: :nullable
385
- add_field name, :bignumeric, description: description, mode: mode
422
+ # @param [Array<String>, String] policy_tags The policy tag list or
423
+ # single policy tag for the field. Policy tag identifiers are of
424
+ # the form `projects/*/locations/*/taxonomies/*/policyTags/*`.
425
+ # At most 1 policy tag is currently allowed.
426
+ # @param [Integer] precision The precision (maximum number of total
427
+ # digits) for the field. Acceptable values for precision must be:
428
+ # `1 ≤ (precision - scale) ≤ 38`. Values for scale must be:
429
+ # `0 ≤ scale ≤ 38`. If the scale value is set, the precision value
430
+ # must be set as well.
431
+ # @param [Integer] scale The scale (maximum number of digits in the
432
+ # fractional part) for the field. Acceptable values for precision
433
+ # must be: `1 ≤ (precision - scale) ≤ 38`. Values for scale must
434
+ # be: `0 ≤ scale ≤ 38`. If the scale value is set, the precision
435
+ # value must be set as well.
436
+ #
437
+ def bignumeric name, description: nil, mode: :nullable, policy_tags: nil, precision: nil, scale: nil
438
+ add_field name,
439
+ :bignumeric,
440
+ description: description,
441
+ mode: mode,
442
+ policy_tags: policy_tags,
443
+ precision: precision,
444
+ scale: scale
386
445
  end
387
446
 
388
447
  ##
@@ -396,9 +455,13 @@ module Google
396
455
  # @param [Symbol] mode The field's mode. The possible values are
397
456
  # `:nullable`, `:required`, and `:repeated`. The default value is
398
457
  # `:nullable`.
458
+ # @param [Array<String>, String] policy_tags The policy tag list or
459
+ # single policy tag for the field. Policy tag identifiers are of
460
+ # the form `projects/*/locations/*/taxonomies/*/policyTags/*`.
461
+ # At most 1 policy tag is currently allowed.
399
462
  #
400
- def boolean name, description: nil, mode: :nullable
401
- add_field name, :boolean, description: description, mode: mode
463
+ def boolean name, description: nil, mode: :nullable, policy_tags: nil
464
+ add_field name, :boolean, description: description, mode: mode, policy_tags: policy_tags
402
465
  end
403
466
 
404
467
  ##
@@ -412,9 +475,15 @@ module Google
412
475
  # @param [Symbol] mode The field's mode. The possible values are
413
476
  # `:nullable`, `:required`, and `:repeated`. The default value is
414
477
  # `:nullable`.
415
- #
416
- def bytes name, description: nil, mode: :nullable
417
- add_field name, :bytes, description: description, mode: mode
478
+ # @param [Array<String>, String] policy_tags The policy tag list or
479
+ # single policy tag for the field. Policy tag identifiers are of
480
+ # the form `projects/*/locations/*/taxonomies/*/policyTags/*`.
481
+ # At most 1 policy tag is currently allowed.
482
+ # @param [Integer] max_length The maximum the maximum number of
483
+ # bytes in the field.
484
+ #
485
+ def bytes name, description: nil, mode: :nullable, policy_tags: nil, max_length: nil
486
+ add_field name, :bytes, description: description, mode: mode, policy_tags: policy_tags, max_length: max_length
418
487
  end
419
488
 
420
489
  ##
@@ -428,8 +497,13 @@ module Google
428
497
  # @param [Symbol] mode The field's mode. The possible values are
429
498
  # `:nullable`, `:required`, and `:repeated`. The default value is
430
499
  # `:nullable`.
431
- def timestamp name, description: nil, mode: :nullable
432
- add_field name, :timestamp, description: description, mode: mode
500
+ # @param [Array<String>, String] policy_tags The policy tag list or
501
+ # single policy tag for the field. Policy tag identifiers are of
502
+ # the form `projects/*/locations/*/taxonomies/*/policyTags/*`.
503
+ # At most 1 policy tag is currently allowed.
504
+ #
505
+ def timestamp name, description: nil, mode: :nullable, policy_tags: nil
506
+ add_field name, :timestamp, description: description, mode: mode, policy_tags: policy_tags
433
507
  end
434
508
 
435
509
  ##
@@ -443,9 +517,13 @@ module Google
443
517
  # @param [Symbol] mode The field's mode. The possible values are
444
518
  # `:nullable`, `:required`, and `:repeated`. The default value is
445
519
  # `:nullable`.
520
+ # @param [Array<String>, String] policy_tags The policy tag list or
521
+ # single policy tag for the field. Policy tag identifiers are of
522
+ # the form `projects/*/locations/*/taxonomies/*/policyTags/*`.
523
+ # At most 1 policy tag is currently allowed.
446
524
  #
447
- def time name, description: nil, mode: :nullable
448
- add_field name, :time, description: description, mode: mode
525
+ def time name, description: nil, mode: :nullable, policy_tags: nil
526
+ add_field name, :time, description: description, mode: mode, policy_tags: policy_tags
449
527
  end
450
528
 
451
529
  ##
@@ -459,9 +537,13 @@ module Google
459
537
  # @param [Symbol] mode The field's mode. The possible values are
460
538
  # `:nullable`, `:required`, and `:repeated`. The default value is
461
539
  # `:nullable`.
540
+ # @param [Array<String>, String] policy_tags The policy tag list or
541
+ # single policy tag for the field. Policy tag identifiers are of
542
+ # the form `projects/*/locations/*/taxonomies/*/policyTags/*`.
543
+ # At most 1 policy tag is currently allowed.
462
544
  #
463
- def datetime name, description: nil, mode: :nullable
464
- add_field name, :datetime, description: description, mode: mode
545
+ def datetime name, description: nil, mode: :nullable, policy_tags: nil
546
+ add_field name, :datetime, description: description, mode: mode, policy_tags: policy_tags
465
547
  end
466
548
 
467
549
  ##
@@ -475,9 +557,35 @@ module Google
475
557
  # @param [Symbol] mode The field's mode. The possible values are
476
558
  # `:nullable`, `:required`, and `:repeated`. The default value is
477
559
  # `:nullable`.
560
+ # @param [Array<String>, String] policy_tags The policy tag list or
561
+ # single policy tag for the field. Policy tag identifiers are of
562
+ # the form `projects/*/locations/*/taxonomies/*/policyTags/*`.
563
+ # At most 1 policy tag is currently allowed.
478
564
  #
479
- def date name, description: nil, mode: :nullable
480
- add_field name, :date, description: description, mode: mode
565
+ def date name, description: nil, mode: :nullable, policy_tags: nil
566
+ add_field name, :date, description: description, mode: mode, policy_tags: policy_tags
567
+ end
568
+
569
+ ##
570
+ # Adds a geography field to the schema.
571
+ #
572
+ # @see https://cloud.google.com/bigquery/docs/gis-data Working with BigQuery GIS data
573
+ #
574
+ # @param [String] name The field name. The name must contain only
575
+ # letters (a-z, A-Z), numbers (0-9), or underscores (_), and must
576
+ # start with a letter or underscore. The maximum length is 128
577
+ # characters.
578
+ # @param [String] description A description of the field.
579
+ # @param [Symbol] mode The field's mode. The possible values are
580
+ # `:nullable`, `:required`, and `:repeated`. The default value is
581
+ # `:nullable`.
582
+ # @param [Array<String>, String] policy_tags The policy tag list or
583
+ # single policy tag for the field. Policy tag identifiers are of
584
+ # the form `projects/*/locations/*/taxonomies/*/policyTags/*`.
585
+ # At most 1 policy tag is currently allowed.
586
+ #
587
+ def geography name, description: nil, mode: :nullable, policy_tags: nil
588
+ add_field name, :geography, description: description, mode: mode, policy_tags: policy_tags
481
589
  end
482
590
 
483
591
  ##
@@ -560,7 +668,14 @@ module Google
560
668
  raise ArgumentError, "Cannot modify a frozen schema"
561
669
  end
562
670
 
563
- def add_field name, type, description: nil, mode: :nullable
671
+ def add_field name,
672
+ type,
673
+ description: nil,
674
+ mode: :nullable,
675
+ policy_tags: nil,
676
+ max_length: nil,
677
+ precision: nil,
678
+ scale: nil
564
679
  frozen_check!
565
680
 
566
681
  new_gapi = Google::Apis::BigqueryV2::TableFieldSchema.new(
@@ -570,7 +685,13 @@ module Google
570
685
  mode: verify_mode(mode),
571
686
  fields: []
572
687
  )
573
-
688
+ if policy_tags
689
+ policy_tags = Array(policy_tags)
690
+ new_gapi.policy_tags = Google::Apis::BigqueryV2::TableFieldSchema::PolicyTags.new names: policy_tags
691
+ end
692
+ new_gapi.max_length = max_length if max_length
693
+ new_gapi.precision = precision if precision
694
+ new_gapi.scale = scale if scale
574
695
  # Remove any existing field of this name
575
696
  @gapi.fields ||= []
576
697
  @gapi.fields.reject! { |f| f.name == new_gapi.name }