Class: Google::Cloud::Spanner::MutationGroup

Inherits:
Object
  • Object
show all
Defined in:
lib/google/cloud/spanner/mutation_group.rb

Overview

Part of the BatchWrite DSL. This object defines a group of mutations to be included in a BatchWrite operation. All writes within a mutation group will execute atomically at a single logical point in time across columns, rows, and tables in a database.

All changes are accumulated in memory until the block passed to Client#batch_write completes.

Examples:

require "google/cloud/spanner"

spanner = Google::Cloud::Spanner.new

db = spanner.client "my-instance", "my-database"

results = db.batch_write do |b|
  # First mutation group
  b.mutation_group do |mg|
    mg.upsert "Singers", [{ SingerId: 16, FirstName: "Charlie", LastName: "Terry" }]
  end

  # Second mutation group
  b.mutation_group do |mg|
    mg.upsert "Singers", [{ SingerId: 17, FirstName: "Catalina", LastName: "Smith" }]
    mg.update "Albums", [{ SingerId: 17, AlbumId: 1, AlbumTitle: "Go Go Go" }]
  end
end

Instance Method Summary collapse

Instance Method Details

#delete(table, keys = []) ⇒ Object

Deletes rows from a table. Succeeds whether or not the specified rows were present.

All changes are accumulated in memory until the block passed to Client#batch_write completes.

Examples:

require "google/cloud/spanner"

spanner = Google::Cloud::Spanner.new

db = spanner.client "my-instance", "my-database"

results = db.batch_write do |b|
  b.mutation_group do |mg|
    mg.delete "Singers", [1, 2, 3]
  end
end


275
276
277
# File 'lib/google/cloud/spanner/mutation_group.rb', line 275

def delete table, keys = []
  @commit.delete table, keys
end

#insert(table, *rows) ⇒ Object

Inserts new rows in a table. If any of the rows already exist, the write or request fails with error AlreadyExistsError.

All changes are accumulated in memory until the block passed to Client#batch_write completes.

Examples:

require "google/cloud/spanner"

spanner = Google::Cloud::Spanner.new

db = spanner.client "my-instance", "my-database"

results = db.batch_write do |b|
  b.mutation_group do |mg|
    mg.insert "Singers", [{ SingerId: 16, FirstName: "Charlie", LastName: "Terry" }]
  end
end


147
148
149
# File 'lib/google/cloud/spanner/mutation_group.rb', line 147

def insert table, *rows
  @commit.insert table, rows
end

#replace(table, *rows) ⇒ Object

Inserts or replaces rows in a table. If any of the rows already exist, it is deleted, and the column values provided are inserted instead. Unlike #upsert, this means any values not explicitly written become NULL.

All changes are accumulated in memory until the block passed to Client#batch_write completes.

Examples:

require "google/cloud/spanner"

spanner = Google::Cloud::Spanner.new

db = spanner.client "my-instance", "my-database"

results = db.batch_write do |b|
  b.mutation_group do |mg|
    mg.replace "Singers", [{ SingerId: 16, FirstName: "Charlie", LastName: "Terry" }]
  end
end


245
246
247
# File 'lib/google/cloud/spanner/mutation_group.rb', line 245

def replace table, *rows
  @commit.replace table, rows
end

#update(table, *rows) ⇒ Object

Updates existing rows in a table. If any of the rows does not already exist, the request fails with error NotFoundError.

All changes are accumulated in memory until the block passed to Client#batch_write completes.

Examples:

require "google/cloud/spanner"

spanner = Google::Cloud::Spanner.new

db = spanner.client "my-instance", "my-database"

results = db.batch_write do |b|
  b.mutation_group do |mg|
    mg.update "Singers", [{ SingerId: 16, FirstName: "Charlie", LastName: "Terry" }]
  end
end


195
196
197
# File 'lib/google/cloud/spanner/mutation_group.rb', line 195

def update table, *rows
  @commit.update table, rows
end

#upsert(table, *rows) ⇒ Object Also known as: save

Inserts or updates rows in a table. If any of the rows already exist, then its column values are overwritten with the ones provided. Any column values not explicitly written are preserved.

All changes are accumulated in memory until the block passed to Client#batch_write completes.

Examples:

require "google/cloud/spanner"

spanner = Google::Cloud::Spanner.new

db = spanner.client "my-instance", "my-database"

results = db.batch_write do |b|
  b.mutation_group do |mg|
    mg.upsert "Singers", [{ SingerId: 16, FirstName: "Charlie", LastName: "Terry" }]
  end
end


98
99
100
# File 'lib/google/cloud/spanner/mutation_group.rb', line 98

def upsert table, *rows
  @commit.upsert table, rows
end