activerecord-spanner-adapter 1.8.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/acceptance-tests-on-emulator.yaml +4 -6
- data/.github/workflows/ci.yaml +4 -6
- data/.github/workflows/nightly-acceptance-tests-on-emulator.yaml +4 -6
- data/.github/workflows/nightly-unit-tests.yaml +4 -6
- data/.github/workflows/rubocop.yaml +1 -1
- data/.github/workflows/samples.yaml +30 -0
- data/.kokoro/release.sh +1 -3
- data/.release-please-manifest.json +1 -1
- data/.rubocop.yml +2 -2
- data/CHANGELOG.md +18 -0
- data/Gemfile +6 -5
- data/README.md +11 -9
- data/acceptance/cases/migration/command_recorder_test.rb +7 -38
- data/acceptance/cases/migration/references_index_test.rb +2 -11
- data/acceptance/cases/models/binary_identifiers.rb +97 -0
- data/acceptance/models/binary_project.rb +20 -0
- data/acceptance/models/string_io.rb +28 -0
- data/acceptance/models/user.rb +20 -0
- data/acceptance/test_helper.rb +1 -0
- data/activerecord-spanner-adapter.gemspec +3 -3
- data/benchmarks/application.rb +3 -7
- data/examples/snippets/Rakefile +27 -5
- data/examples/snippets/array-data-type/application.rb +1 -5
- data/examples/snippets/array-data-type/config/database.yml +1 -0
- data/examples/snippets/bit-reversed-sequence/application.rb +0 -4
- data/examples/snippets/bit-reversed-sequence/config/database.yml +1 -0
- data/examples/snippets/bit-reversed-sequence/db/seeds.rb +2 -2
- data/examples/snippets/bulk-insert/application.rb +1 -5
- data/examples/snippets/bulk-insert/config/database.yml +1 -0
- data/examples/snippets/commit-timestamp/application.rb +0 -4
- data/examples/snippets/commit-timestamp/config/database.yml +1 -0
- data/examples/snippets/config/environment.rb +5 -0
- data/examples/snippets/create-records/application.rb +1 -5
- data/examples/snippets/create-records/config/database.yml +1 -0
- data/examples/snippets/date-data-type/application.rb +1 -5
- data/examples/snippets/date-data-type/config/database.yml +1 -0
- data/examples/snippets/date-data-type/db/seeds.rb +1 -1
- data/examples/snippets/generated-column/application.rb +0 -4
- data/examples/snippets/generated-column/config/database.yml +1 -0
- data/examples/snippets/generated-column/db/seeds.rb +1 -1
- data/examples/snippets/hints/application.rb +0 -4
- data/examples/snippets/hints/config/database.yml +1 -0
- data/examples/snippets/hints/db/seeds.rb +1 -1
- data/examples/snippets/interleaved-tables/application.rb +1 -5
- data/examples/snippets/interleaved-tables/config/database.yml +1 -0
- data/examples/snippets/interleaved-tables/db/seeds.rb +1 -1
- data/examples/snippets/interleaved-tables/models/album.rb +6 -2
- data/examples/snippets/interleaved-tables/models/track.rb +5 -1
- data/examples/snippets/interleaved-tables-before-7.1/application.rb +1 -5
- data/examples/snippets/interleaved-tables-before-7.1/config/database.yml +1 -0
- data/examples/snippets/interleaved-tables-before-7.1/db/seeds.rb +1 -1
- data/examples/snippets/migrations/application.rb +0 -4
- data/examples/snippets/migrations/config/database.yml +1 -0
- data/examples/snippets/mutations/application.rb +1 -5
- data/examples/snippets/mutations/config/database.yml +1 -0
- data/examples/snippets/mutations/db/seeds.rb +1 -1
- data/examples/snippets/optimistic-locking/application.rb +0 -4
- data/examples/snippets/optimistic-locking/config/database.yml +1 -0
- data/examples/snippets/optimistic-locking/db/seeds.rb +1 -1
- data/examples/snippets/partitioned-dml/application.rb +0 -4
- data/examples/snippets/partitioned-dml/config/database.yml +1 -0
- data/examples/snippets/partitioned-dml/db/seeds.rb +1 -1
- data/examples/snippets/query-logs/application.rb +15 -13
- data/examples/snippets/query-logs/config/database.yml +1 -0
- data/examples/snippets/query-logs/db/seeds.rb +1 -1
- data/examples/snippets/quickstart/application.rb +0 -4
- data/examples/snippets/quickstart/config/database.yml +1 -0
- data/examples/snippets/quickstart/db/seeds.rb +1 -1
- data/examples/snippets/read-only-transactions/application.rb +0 -4
- data/examples/snippets/read-only-transactions/config/database.yml +1 -0
- data/examples/snippets/read-only-transactions/db/seeds.rb +1 -1
- data/examples/snippets/read-write-transactions/application.rb +2 -6
- data/examples/snippets/read-write-transactions/config/database.yml +1 -0
- data/examples/snippets/read-write-transactions/db/seeds.rb +1 -1
- data/examples/snippets/stale-reads/application.rb +0 -4
- data/examples/snippets/stale-reads/config/database.yml +1 -0
- data/examples/snippets/stale-reads/db/seeds.rb +1 -1
- data/examples/snippets/tags/application.rb +0 -4
- data/examples/snippets/tags/config/database.yml +1 -0
- data/examples/snippets/tags/db/seeds.rb +1 -1
- data/examples/snippets/timestamp-data-type/application.rb +0 -4
- data/examples/snippets/timestamp-data-type/config/database.yml +1 -0
- data/lib/active_record/connection_adapters/spanner/column.rb +3 -3
- data/lib/active_record/connection_adapters/spanner/database_statements.rb +34 -22
- data/lib/active_record/connection_adapters/spanner/quoting.rb +2 -1
- data/lib/active_record/connection_adapters/spanner/schema_creation.rb +7 -9
- data/lib/active_record/connection_adapters/spanner/schema_definitions.rb +12 -2
- data/lib/active_record/connection_adapters/spanner/schema_statements.rb +17 -46
- data/lib/active_record/connection_adapters/spanner/type_metadata.rb +4 -6
- data/lib/active_record/connection_adapters/spanner_adapter.rb +20 -7
- data/lib/active_record/tasks/spanner_database_tasks.rb +4 -4
- data/lib/active_record/type/spanner/array.rb +4 -0
- data/lib/active_record/type/spanner/bytes.rb +10 -0
- data/lib/activerecord_spanner_adapter/base.rb +12 -18
- data/lib/activerecord_spanner_adapter/connection.rb +9 -5
- data/lib/activerecord_spanner_adapter/foreign_key.rb +9 -2
- data/lib/activerecord_spanner_adapter/index/column.rb +6 -1
- data/lib/activerecord_spanner_adapter/index.rb +10 -2
- data/lib/activerecord_spanner_adapter/information_schema.rb +1 -1
- data/lib/activerecord_spanner_adapter/primary_key.rb +2 -2
- data/lib/activerecord_spanner_adapter/table/column.rb +12 -3
- data/lib/activerecord_spanner_adapter/table.rb +8 -2
- data/lib/activerecord_spanner_adapter/transaction.rb +1 -1
- data/lib/activerecord_spanner_adapter/version.rb +1 -1
- data/lib/arel/visitors/spanner.rb +16 -11
- data/lib/spanner_client_ext.rb +4 -3
- metadata +13 -32
- data/examples/snippets/array-data-type/db/schema.rb +0 -31
- data/examples/snippets/bit-reversed-sequence/db/schema.rb +0 -31
- data/examples/snippets/bulk-insert/db/schema.rb +0 -31
- data/examples/snippets/commit-timestamp/db/schema.rb +0 -34
- data/examples/snippets/create-records/db/schema.rb +0 -31
- data/examples/snippets/date-data-type/db/schema.rb +0 -26
- data/examples/snippets/generated-column/db/schema.rb +0 -26
- data/examples/snippets/hints/db/schema.rb +0 -33
- data/examples/snippets/interleaved-tables/db/schema.rb +0 -39
- data/examples/snippets/interleaved-tables-before-7.1/db/schema.rb +0 -37
- data/examples/snippets/migrations/db/schema.rb +0 -38
- data/examples/snippets/mutations/db/schema.rb +0 -32
- data/examples/snippets/optimistic-locking/db/schema.rb +0 -34
- data/examples/snippets/partitioned-dml/db/schema.rb +0 -31
- data/examples/snippets/query-logs/db/schema.rb +0 -31
- data/examples/snippets/quickstart/db/schema.rb +0 -31
- data/examples/snippets/read-only-transactions/db/schema.rb +0 -31
- data/examples/snippets/read-write-transactions/db/schema.rb +0 -32
- data/examples/snippets/stale-reads/db/schema.rb +0 -31
- data/examples/snippets/tags/db/schema.rb +0 -31
- data/examples/snippets/timestamp-data-type/db/schema.rb +0 -26
data/examples/snippets/Rakefile
CHANGED
|
@@ -7,19 +7,37 @@
|
|
|
7
7
|
require_relative "config/environment"
|
|
8
8
|
require "docker"
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
samples = Dir.entries(".").select do |entry|
|
|
10
|
+
def fetch_samples
|
|
11
|
+
Dir.entries(".").select do |entry|
|
|
13
12
|
File.directory?(File.join(".", entry)) \
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
&& !%w[. ..].include?(entry) \
|
|
14
|
+
&& File.exist?(File.join(".", entry, "application.rb"))
|
|
16
15
|
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
desc "Lists all available samples."
|
|
19
|
+
task :list do
|
|
20
|
+
samples = fetch_samples
|
|
17
21
|
puts "Available samples: "
|
|
18
22
|
samples.sort.each { |dir| puts " #{dir}" }
|
|
19
23
|
puts ""
|
|
20
24
|
puts "Run a sample with the command `bundle exec rake run\\[<sample-name>\\]`"
|
|
21
25
|
end
|
|
22
26
|
|
|
27
|
+
desc "Runs all samples."
|
|
28
|
+
task :all do
|
|
29
|
+
samples = fetch_samples
|
|
30
|
+
ar_version = ENV.fetch "AR_VERSION", "~> 7.1.0"
|
|
31
|
+
less_than_7_1 = ar_version.dup.to_s.sub("~>", "").strip < "7.1.0"
|
|
32
|
+
samples.delete "interleaved-tables" if less_than_7_1
|
|
33
|
+
samples.delete "interleaved-tables-before-7.1" unless less_than_7_1
|
|
34
|
+
samples.delete "bit-reversed-sequence" if less_than_7_1
|
|
35
|
+
samples.delete "query-logs" if less_than_7_1
|
|
36
|
+
samples.each do |sample|
|
|
37
|
+
run_sample sample
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
23
41
|
desc "Runs a simple ActiveRecord tutorial on a Spanner emulator."
|
|
24
42
|
task :run, [:sample] do |_t, args|
|
|
25
43
|
sample = args[:sample]
|
|
@@ -28,7 +46,11 @@ task :run, [:sample] do |_t, args|
|
|
|
28
46
|
puts ""
|
|
29
47
|
sample = "quickstart"
|
|
30
48
|
end
|
|
49
|
+
run_sample sample
|
|
50
|
+
end
|
|
31
51
|
|
|
52
|
+
def run_sample sample
|
|
53
|
+
puts "Running #{sample}"
|
|
32
54
|
puts "Downloading Spanner emulator image..."
|
|
33
55
|
Docker::Image.create "fromImage" => "gcr.io/cloud-spanner-emulator/emulator:latest"
|
|
34
56
|
puts "Creating Spanner emulator container..."
|
|
@@ -9,7 +9,7 @@ require_relative "../config/environment"
|
|
|
9
9
|
require_relative "models/entity_with_array_types"
|
|
10
10
|
|
|
11
11
|
class Application
|
|
12
|
-
def self.run
|
|
12
|
+
def self.run
|
|
13
13
|
# Create a record with all array types.
|
|
14
14
|
record = EntityWithArrayTypes.create \
|
|
15
15
|
col_array_string: ["value1", "value2", "value3"],
|
|
@@ -35,10 +35,6 @@ class Application
|
|
|
35
35
|
puts "Bytes array: #{record.col_array_bytes.map(&:read)}"
|
|
36
36
|
puts "Date array: #{record.col_array_date}"
|
|
37
37
|
puts "Timestamp array: #{record.col_array_timestamp}"
|
|
38
|
-
|
|
39
|
-
puts ""
|
|
40
|
-
puts "Press any key to end the application"
|
|
41
|
-
STDIN.getch
|
|
42
38
|
end
|
|
43
39
|
end
|
|
44
40
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# license that can be found in the LICENSE file or at
|
|
5
5
|
# https://opensource.org/licenses/MIT.
|
|
6
6
|
|
|
7
|
-
require_relative "../../config/environment
|
|
7
|
+
require_relative "../../config/environment"
|
|
8
8
|
require_relative "../models/singer"
|
|
9
9
|
require_relative "../models/album"
|
|
10
10
|
|
|
@@ -14,7 +14,7 @@ last_names = %w[Wendelson Allison Peterson Johnson Henderson Ericsson Aronson Te
|
|
|
14
14
|
adjectives = %w[daily happy blue generous cooked bad open]
|
|
15
15
|
nouns = %w[windows potatoes bank street tree glass bottle]
|
|
16
16
|
|
|
17
|
-
#
|
|
17
|
+
# NOTE: We do not use mutations to insert these rows, because letting the database generate the primary key means that
|
|
18
18
|
# we rely on a `THEN RETURN id` clause in the insert statement. This is only supported for DML statements, and not for
|
|
19
19
|
# mutations.
|
|
20
20
|
ActiveRecord::Base.transaction do
|
|
@@ -46,7 +46,7 @@ class Application
|
|
|
46
46
|
]
|
|
47
47
|
end
|
|
48
48
|
puts ""
|
|
49
|
-
puts "Created a batch of #{singers.length} singers and #{albums.length} "\
|
|
49
|
+
puts "Created a batch of #{singers.length} singers and #{albums.length} " \
|
|
50
50
|
"albums using a transaction with buffered mutations:"
|
|
51
51
|
singers.each do |s|
|
|
52
52
|
puts " Created singer #{s.first_name} #{s.last_name} with id #{s.id}"
|
|
@@ -54,10 +54,6 @@ class Application
|
|
|
54
54
|
puts " with album #{a.title} with id #{a.id}"
|
|
55
55
|
end
|
|
56
56
|
end
|
|
57
|
-
|
|
58
|
-
puts ""
|
|
59
|
-
puts "Press any key to end the application"
|
|
60
|
-
STDIN.getch
|
|
61
57
|
end
|
|
62
58
|
end
|
|
63
59
|
|
|
@@ -43,10 +43,6 @@ class Application
|
|
|
43
43
|
puts "Singer and album updated:"
|
|
44
44
|
puts "#{singer.first_name} #{singer.last_name} (Last updated: #{singer.last_updated.strftime format})"
|
|
45
45
|
puts " #{album.title} (Last updated: #{album.last_updated.strftime format})"
|
|
46
|
-
|
|
47
|
-
puts ""
|
|
48
|
-
puts "Press any key to end the application"
|
|
49
|
-
STDIN.getch
|
|
50
46
|
end
|
|
51
47
|
end
|
|
52
48
|
|
|
@@ -4,11 +4,16 @@
|
|
|
4
4
|
# license that can be found in the LICENSE file or at
|
|
5
5
|
# https://opensource.org/licenses/MIT.
|
|
6
6
|
|
|
7
|
+
require "logger" # https://github.com/rails/rails/issues/54260
|
|
7
8
|
require "active_record"
|
|
8
9
|
require "bundler"
|
|
9
10
|
|
|
10
11
|
Dir["../../lib/*.rb"].each { |file| require file }
|
|
11
12
|
|
|
13
|
+
if ActiveRecord.version >= Gem::Version.create("7.2.0")
|
|
14
|
+
ActiveRecord::ConnectionAdapters.register "spanner", "ActiveRecord::ConnectionAdapters::SpannerAdapter"
|
|
15
|
+
end
|
|
16
|
+
|
|
12
17
|
Bundler.require
|
|
13
18
|
|
|
14
19
|
ActiveRecord::Base.establish_connection(
|
|
@@ -13,7 +13,7 @@ class Application
|
|
|
13
13
|
def self.run
|
|
14
14
|
# Creating a single record without an explicit transaction will automatically save it to the database.
|
|
15
15
|
# It is not recommended to call Entity.create repeatedly to insert multiple records, as each call will
|
|
16
|
-
# use a separate Spanner transaction. Instead multiple records should be created by passing an array of
|
|
16
|
+
# use a separate Spanner transaction. Instead, multiple records should be created by passing an array of
|
|
17
17
|
# entities to the Entity.create method.
|
|
18
18
|
singer = Singer.create first_name: "Dave", last_name: "Allison"
|
|
19
19
|
puts ""
|
|
@@ -32,10 +32,6 @@ class Application
|
|
|
32
32
|
singers.each do |s|
|
|
33
33
|
puts " Created singer #{s.first_name} #{s.last_name} with id #{s.id}"
|
|
34
34
|
end
|
|
35
|
-
|
|
36
|
-
puts ""
|
|
37
|
-
puts "Press any key to end the application"
|
|
38
|
-
STDIN.getch
|
|
39
35
|
end
|
|
40
36
|
end
|
|
41
37
|
|
|
@@ -17,7 +17,7 @@ class Application
|
|
|
17
17
|
puts "#{"#{singer.first_name} #{singer.last_name}".ljust 30}#{singer.birth_date}"
|
|
18
18
|
end
|
|
19
19
|
|
|
20
|
-
# Update the
|
|
20
|
+
# Update the birthdate of a random singer using the current system time. Any time and timezone information will be
|
|
21
21
|
# lost after saving the record as a DATE only contains the year, month and day-of-month information.
|
|
22
22
|
singer = Singer.all.sample
|
|
23
23
|
singer.update birth_date: Time.now
|
|
@@ -25,10 +25,6 @@ class Application
|
|
|
25
25
|
puts ""
|
|
26
26
|
puts "Updated birth date to current system time:"
|
|
27
27
|
puts "#{"#{singer.first_name} #{singer.last_name}".ljust 30}#{singer.birth_date}"
|
|
28
|
-
|
|
29
|
-
puts ""
|
|
30
|
-
puts "Press any key to end the application"
|
|
31
|
-
STDIN.getch
|
|
32
28
|
end
|
|
33
29
|
end
|
|
34
30
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# license that can be found in the LICENSE file or at
|
|
5
5
|
# https://opensource.org/licenses/MIT.
|
|
6
6
|
#
|
|
7
|
-
require_relative "../../config/environment
|
|
7
|
+
require_relative "../../config/environment"
|
|
8
8
|
require_relative "../models/singer"
|
|
9
9
|
|
|
10
10
|
first_names = %w[Nelson Todd William Alex Dominique Adenoid Steve Nathan Beverly Annie Amy Norma Diana Regan Phyllis]
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# license that can be found in the LICENSE file or at
|
|
5
5
|
# https://opensource.org/licenses/MIT.
|
|
6
6
|
|
|
7
|
-
require_relative "../../config/environment
|
|
7
|
+
require_relative "../../config/environment"
|
|
8
8
|
require_relative "../models/singer"
|
|
9
9
|
|
|
10
10
|
first_names = %w[Pete Alice John Ethel Trudy Naomi Wendy Ruben Thomas Elly]
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# license that can be found in the LICENSE file or at
|
|
5
5
|
# https://opensource.org/licenses/MIT.
|
|
6
6
|
|
|
7
|
-
require_relative "../../config/environment
|
|
7
|
+
require_relative "../../config/environment"
|
|
8
8
|
require_relative "../models/singer"
|
|
9
9
|
require_relative "../models/album"
|
|
10
10
|
|
|
@@ -13,7 +13,7 @@ require_relative "models/track"
|
|
|
13
13
|
class Application
|
|
14
14
|
def self.run
|
|
15
15
|
# List all singers, albums and tracks.
|
|
16
|
-
|
|
16
|
+
list_singers_albums
|
|
17
17
|
|
|
18
18
|
# Create a new album with some tracks.
|
|
19
19
|
create_new_album
|
|
@@ -28,10 +28,6 @@ class Application
|
|
|
28
28
|
# Try to delete an album that has at least one track. This IS possible as tracks IS marked with
|
|
29
29
|
# ON DELETE CASCADE.
|
|
30
30
|
delete_album_with_tracks
|
|
31
|
-
|
|
32
|
-
puts ""
|
|
33
|
-
puts "Press any key to end the application"
|
|
34
|
-
STDIN.getch
|
|
35
31
|
end
|
|
36
32
|
|
|
37
33
|
def self.find_singer
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# license that can be found in the LICENSE file or at
|
|
5
5
|
# https://opensource.org/licenses/MIT.
|
|
6
6
|
|
|
7
|
-
require_relative "../../config/environment
|
|
7
|
+
require_relative "../../config/environment"
|
|
8
8
|
require_relative "../models/singer"
|
|
9
9
|
require_relative "../models/album"
|
|
10
10
|
require_relative "../models/track"
|
|
@@ -11,6 +11,10 @@ class Album < ActiveRecord::Base
|
|
|
11
11
|
|
|
12
12
|
# `tracks` is defined as INTERLEAVE IN PARENT `albums`.
|
|
13
13
|
# The primary key of `albums` is (`singerid`, `albumid`).
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
if ActiveRecord::VERSION::MAJOR >= 8
|
|
15
|
+
has_many :tracks, foreign_key: [:singerid, :albumid]
|
|
16
|
+
else
|
|
17
|
+
# Rails 7.1 requires using query_constraints to define a composite foreign key.
|
|
18
|
+
has_many :tracks, query_constraints: [:singerid, :albumid]
|
|
19
|
+
end
|
|
16
20
|
end
|
|
@@ -8,7 +8,11 @@ class Track < ActiveRecord::Base
|
|
|
8
8
|
# `tracks` is defined as INTERLEAVE IN PARENT `albums`.
|
|
9
9
|
# The primary key of `albums` is (`singerid`, `albumid`).
|
|
10
10
|
# Rails 7.1 requires a composite primary key in a belongs_to relationship to be specified as query_constraints.
|
|
11
|
-
|
|
11
|
+
if ActiveRecord::VERSION::MAJOR >= 8
|
|
12
|
+
belongs_to :album, foreign_key: [:singerid, :albumid]
|
|
13
|
+
else
|
|
14
|
+
belongs_to :album, query_constraints: [:singerid, :albumid]
|
|
15
|
+
end
|
|
12
16
|
|
|
13
17
|
# `tracks` also has a `singerid` column that can be used to associate a Track with a Singer.
|
|
14
18
|
belongs_to :singer, foreign_key: :singerid
|
|
@@ -13,7 +13,7 @@ require_relative "models/track"
|
|
|
13
13
|
class Application
|
|
14
14
|
def self.run
|
|
15
15
|
# List all singers, albums and tracks.
|
|
16
|
-
|
|
16
|
+
list_singers_albums
|
|
17
17
|
|
|
18
18
|
# Create a new album with some tracks.
|
|
19
19
|
create_new_album
|
|
@@ -28,10 +28,6 @@ class Application
|
|
|
28
28
|
# Try to delete an album that has at least one track. This IS possible as tracks IS marked with
|
|
29
29
|
# ON DELETE CASCADE.
|
|
30
30
|
delete_album_with_tracks
|
|
31
|
-
|
|
32
|
-
puts ""
|
|
33
|
-
puts "Press any key to end the application"
|
|
34
|
-
STDIN.getch
|
|
35
31
|
end
|
|
36
32
|
|
|
37
33
|
def self.find_singer
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# license that can be found in the LICENSE file or at
|
|
5
5
|
# https://opensource.org/licenses/MIT.
|
|
6
6
|
|
|
7
|
-
require_relative "../../config/environment
|
|
7
|
+
require_relative "../../config/environment"
|
|
8
8
|
require_relative "../models/singer"
|
|
9
9
|
require_relative "../models/album"
|
|
10
10
|
require_relative "../models/track"
|
|
@@ -22,7 +22,7 @@ class Application
|
|
|
22
22
|
to_album = Album.where.not(id: from_album.id).sample
|
|
23
23
|
|
|
24
24
|
puts ""
|
|
25
|
-
puts "Transferring 10,000 marketing budget from #{from_album.title} (#{from_album.marketing_budget}) "\
|
|
25
|
+
puts "Transferring 10,000 marketing budget from #{from_album.title} (#{from_album.marketing_budget}) " \
|
|
26
26
|
"to #{to_album.title} (#{to_album.marketing_budget})"
|
|
27
27
|
from_album.update marketing_budget: from_album.marketing_budget - 10000
|
|
28
28
|
to_album.update marketing_budget: to_album.marketing_budget + 10000
|
|
@@ -37,10 +37,6 @@ class Application
|
|
|
37
37
|
puts "Budgets after commit:"
|
|
38
38
|
puts "Marketing budget #{from_album.title}: #{from_album.reload.marketing_budget}"
|
|
39
39
|
puts "Marketing budget #{to_album.title}: #{to_album.reload.marketing_budget}"
|
|
40
|
-
|
|
41
|
-
puts ""
|
|
42
|
-
puts "Press any key to end the application"
|
|
43
|
-
STDIN.getch
|
|
44
40
|
end
|
|
45
41
|
end
|
|
46
42
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# license that can be found in the LICENSE file or at
|
|
5
5
|
# https://opensource.org/licenses/MIT.
|
|
6
6
|
|
|
7
|
-
require_relative "../../config/environment
|
|
7
|
+
require_relative "../../config/environment"
|
|
8
8
|
require_relative "../models/singer"
|
|
9
9
|
require_relative "../models/album"
|
|
10
10
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# license that can be found in the LICENSE file or at
|
|
5
5
|
# https://opensource.org/licenses/MIT.
|
|
6
6
|
|
|
7
|
-
require_relative "../../config/environment
|
|
7
|
+
require_relative "../../config/environment"
|
|
8
8
|
require_relative "../models/singer"
|
|
9
9
|
require_relative "../models/album"
|
|
10
10
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# license that can be found in the LICENSE file or at
|
|
5
5
|
# https://opensource.org/licenses/MIT.
|
|
6
6
|
|
|
7
|
-
require_relative "../../config/environment
|
|
7
|
+
require_relative "../../config/environment"
|
|
8
8
|
require_relative "../models/singer"
|
|
9
9
|
require_relative "../models/album"
|
|
10
10
|
|
|
@@ -17,10 +17,6 @@ class Application
|
|
|
17
17
|
puts "Query all Albums and include an automatically generated request tag"
|
|
18
18
|
albums = Album.all
|
|
19
19
|
puts "Queried #{albums.length} albums using an automatically generated request tag"
|
|
20
|
-
|
|
21
|
-
puts ""
|
|
22
|
-
puts "Press any key to end the application"
|
|
23
|
-
STDIN.getch
|
|
24
20
|
end
|
|
25
21
|
|
|
26
22
|
def self.enable_query_logs
|
|
@@ -31,16 +27,9 @@ class Application
|
|
|
31
27
|
# Query log comments *MUST* be prepended to be included as a request tag.
|
|
32
28
|
ActiveRecord::QueryLogs.prepend_comment = true
|
|
33
29
|
|
|
34
|
-
#
|
|
30
|
+
# Enable query logs in a non-Rails application.
|
|
35
31
|
# This should normally not be needed in your application.
|
|
36
|
-
|
|
37
|
-
application: "example-app",
|
|
38
|
-
action: "run-test-application",
|
|
39
|
-
pid: -> { Process.pid.to_s },
|
|
40
|
-
socket: ->(context) { context[:connection].pool.db_config.socket },
|
|
41
|
-
db_host: ->(context) { context[:connection].pool.db_config.host },
|
|
42
|
-
database: ->(context) { context[:connection].pool.db_config.database }
|
|
43
|
-
)
|
|
32
|
+
enable_query_logs_without_rails
|
|
44
33
|
|
|
45
34
|
ActiveRecord::QueryLogs.tags = [
|
|
46
35
|
# The first tag *MUST* be the fixed value 'request_tag:true'.
|
|
@@ -58,6 +47,19 @@ class Application
|
|
|
58
47
|
:database
|
|
59
48
|
]
|
|
60
49
|
end
|
|
50
|
+
|
|
51
|
+
def self.enable_query_logs_without_rails
|
|
52
|
+
# This block manually enables Query Logs without a full Rails application.
|
|
53
|
+
# This should normally not be needed in your application.
|
|
54
|
+
ActiveRecord::QueryLogs.taggings = {
|
|
55
|
+
application: "example-app",
|
|
56
|
+
action: "run-test-application",
|
|
57
|
+
pid: -> { Process.pid.to_s },
|
|
58
|
+
socket: ->(context) { context[:connection].pool.db_config.socket },
|
|
59
|
+
db_host: ->(context) { context[:connection].pool.db_config.host },
|
|
60
|
+
database: ->(context) { context[:connection].pool.db_config.database }
|
|
61
|
+
}
|
|
62
|
+
end
|
|
61
63
|
end
|
|
62
64
|
|
|
63
65
|
Application.run
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# license that can be found in the LICENSE file or at
|
|
5
5
|
# https://opensource.org/licenses/MIT.
|
|
6
6
|
|
|
7
|
-
require_relative "../../config/environment
|
|
7
|
+
require_relative "../../config/environment"
|
|
8
8
|
require_relative "../models/singer"
|
|
9
9
|
require_relative "../models/album"
|
|
10
10
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# license that can be found in the LICENSE file or at
|
|
5
5
|
# https://opensource.org/licenses/MIT.
|
|
6
6
|
|
|
7
|
-
require_relative "../../config/environment
|
|
7
|
+
require_relative "../../config/environment"
|
|
8
8
|
require_relative "../models/singer"
|
|
9
9
|
require_relative "../models/album"
|
|
10
10
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# license that can be found in the LICENSE file or at
|
|
5
5
|
# https://opensource.org/licenses/MIT.
|
|
6
6
|
|
|
7
|
-
require_relative "../../config/environment
|
|
7
|
+
require_relative "../../config/environment"
|
|
8
8
|
require_relative "../models/singer"
|
|
9
9
|
require_relative "../models/album"
|
|
10
10
|
|