Inherits
- Object
Example
require "google/cloud/spanner" spanner = Google::Cloud::Spanner.new db = spanner.client "my-instance", "my-database" results = db.execute_query "SELECT * FROM users" results.fields.pairs.each do |name, type| puts "Column #{name} is type #{type}" end
Methods
#[]
def [](key) -> Symbol, nil
Returns the type code for the provided name (String) or index (Integer). Do not pass a name to this method if the data has more than one member with the same name. (See #duplicate_names?)
- key (String, Integer) — The name (String) or zero-based index position (Integer) of the value.
- (Symbol, nil) — The type code, or nil if no value is found.
- (Google::Cloud::Spanner::DuplicateNameError) — if the data contains duplicate names.
#data
def data(data) -> Data
Creates a new Data object given the data values matching the fields. Can be provided as either an Array of values, or a Hash where the hash keys match the field name or match the index position of the field.
For more information, see Data Types - Constructing a STRUCT.
-
data (Array, Hash) — Accepts an array or hash data values.
Arrays can contain just the data value, nested arrays will be treated as lists of values. Values must be provided in the same order as the fields, and there is no way to associate values to the field names.
Hash keys must contain the field name as a
Symbol
orString
, or the field position as anInteger
. Hash values must contain the data value. Hash values will be matched to the fields, so they don't need to match the same order as the fields.
- (Data) — A new Data object.
- (ArgumentError)
Create a STRUCT value with named fields using Fields object:
require "google/cloud/spanner" spanner = Google::Cloud::Spanner.new db = spanner.client "my-instance", "my-database" named_type = db.fields( { id: :INT64, name: :STRING, active: :BOOL } ) named_data = named_type.struct( { id: 42, name: nil, active: false } )
Create a STRUCT value with anonymous field names:
require "google/cloud/spanner" spanner = Google::Cloud::Spanner.new db = spanner.client "my-instance", "my-database" anon_type = db.fields [:INT64, :STRING, :BOOL] anon_data = anon_type.struct [42, nil, false]
Create a STRUCT value with duplicate field names:
require "google/cloud/spanner" spanner = Google::Cloud::Spanner.new db = spanner.client "my-instance", "my-database" dup_type = db.fields [[:x, :INT64], [:x, :STRING], [:x, :BOOL]] dup_data = dup_type.struct [42, nil, false]
#duplicate_names?
def duplicate_names?() -> Boolean
Detects duplicate names in the keys for the fields.
-
(Boolean) — Returns
true
if there are duplicate names.
#initialize
def initialize(types) -> Fields
Creates Fields object from types. See Client#fields.
This object can be used to create Data objects by providing values that match the field types. See #struct.
-
types (Array, Hash) —
Accepts an array or hash types.
Arrays can contain just the type value, or a sub-array of the field's name and type value. Hash keys must contain the field name as a
Symbol
orString
, or the field position as anInteger
. Hash values must contain the type value. If a Hash is used the fields will be created using the same order as the Hash keys.Supported type values include:
:BOOL
:BYTES
:DATE
:FLOAT64
:NUMERIC
:INT64
:STRING
:TIMESTAMP
Array
- Lists are specified by providing the type code in an array. For example, an array of integers are specified as[:INT64]
.- Fields - Nested Structs are specified by providing a Fields object.
- (Fields) — The fields of the given types.
Create a STRUCT value with named fields using Fields object:
require "google/cloud/spanner" named_type = Google::Cloud::Spanner::Fields.new( { id: :INT64, name: :STRING, active: :BOOL } ) named_data = named_type.struct( { id: 42, name: nil, active: false } )
Create a STRUCT value with anonymous field names:
require "google/cloud/spanner" anon_type = Google::Cloud::Spanner::Fields.new( [:INT64, :STRING, :BOOL] ) anon_data = anon_type.struct [42, nil, false]
Create a STRUCT value with duplicate field names:
require "google/cloud/spanner" dup_type = Google::Cloud::Spanner::Fields.new( [[:x, :INT64], [:x, :STRING], [:x, :BOOL]] ) dup_data = dup_type.struct [42, nil, false]
#keys
def keys() -> Array<(String,Integer)>
Returns the names of the data values, or in cases in which values are unnamed, the zero-based index position of values.
- (Array<(String,Integer)>) — An array containing the names (String) or position (Integer) for the corresponding values of the data.
#new
def new(data) -> Data
Creates a new Data object given the data values matching the fields. Can be provided as either an Array of values, or a Hash where the hash keys match the field name or match the index position of the field.
For more information, see Data Types - Constructing a STRUCT.
-
data (Array, Hash) — Accepts an array or hash data values.
Arrays can contain just the data value, nested arrays will be treated as lists of values. Values must be provided in the same order as the fields, and there is no way to associate values to the field names.
Hash keys must contain the field name as a
Symbol
orString
, or the field position as anInteger
. Hash values must contain the data value. Hash values will be matched to the fields, so they don't need to match the same order as the fields.
- (Data) — A new Data object.
- (ArgumentError)
Create a STRUCT value with named fields using Fields object:
require "google/cloud/spanner" spanner = Google::Cloud::Spanner.new db = spanner.client "my-instance", "my-database" named_type = db.fields( { id: :INT64, name: :STRING, active: :BOOL } ) named_data = named_type.struct( { id: 42, name: nil, active: false } )
Create a STRUCT value with anonymous field names:
require "google/cloud/spanner" spanner = Google::Cloud::Spanner.new db = spanner.client "my-instance", "my-database" anon_type = db.fields [:INT64, :STRING, :BOOL] anon_data = anon_type.struct [42, nil, false]
Create a STRUCT value with duplicate field names:
require "google/cloud/spanner" spanner = Google::Cloud::Spanner.new db = spanner.client "my-instance", "my-database" dup_type = db.fields [[:x, :INT64], [:x, :STRING], [:x, :BOOL]] dup_data = dup_type.struct [42, nil, false]
#pairs
def pairs() -> Array<Array>
Returns the names or positions and their corresponding types as an array of arrays.
- (Array<Array>) — An array containing name/position and types pairs.
#struct
def struct(data) -> Data
Creates a new Data object given the data values matching the fields. Can be provided as either an Array of values, or a Hash where the hash keys match the field name or match the index position of the field.
For more information, see Data Types - Constructing a STRUCT.
-
data (Array, Hash) — Accepts an array or hash data values.
Arrays can contain just the data value, nested arrays will be treated as lists of values. Values must be provided in the same order as the fields, and there is no way to associate values to the field names.
Hash keys must contain the field name as a
Symbol
orString
, or the field position as anInteger
. Hash values must contain the data value. Hash values will be matched to the fields, so they don't need to match the same order as the fields.
- (Data) — A new Data object.
- (ArgumentError)
Create a STRUCT value with named fields using Fields object:
require "google/cloud/spanner" spanner = Google::Cloud::Spanner.new db = spanner.client "my-instance", "my-database" named_type = db.fields( { id: :INT64, name: :STRING, active: :BOOL } ) named_data = named_type.struct( { id: 42, name: nil, active: false } )
Create a STRUCT value with anonymous field names:
require "google/cloud/spanner" spanner = Google::Cloud::Spanner.new db = spanner.client "my-instance", "my-database" anon_type = db.fields [:INT64, :STRING, :BOOL] anon_data = anon_type.struct [42, nil, false]
Create a STRUCT value with duplicate field names:
require "google/cloud/spanner" spanner = Google::Cloud::Spanner.new db = spanner.client "my-instance", "my-database" dup_type = db.fields [[:x, :INT64], [:x, :STRING], [:x, :BOOL]] dup_data = dup_type.struct [42, nil, false]
#to_a
def to_a() -> Array<Symbol|Array<Symbol>|Fields|Array<Fields>>
Returns the type codes as an array. Do not use this method if the data has more than one member with the same name. (See #duplicate_names?)
- (Array<Symbol|Array<Symbol>|Fields|Array<Fields>>) — An array containing the type codes.
#to_h
def to_h() -> Hash<(Symbol|Integer) => (Symbol|Array<Symbol>|Fields|Array<Fields>)] A hash containing the names or indexes and corresponding types.
Returns the names or indexes and corresponding type codes as a hash.
- (Hash<(Symbol|Integer) => (Symbol|Array<Symbol>|Fields|Array<Fields>)] A hash containing the names or indexes and corresponding types.) — Hash<(Symbol|Integer) => (Symbol|Array
- (Google::Cloud::Spanner::DuplicateNameError) — if the data contains duplicate names.
#types
def types() -> Array<Symbol>
- (Array<Symbol>) — An array containing the types of the data.