activerecord-spanner-adapter 1.8.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -76,7 +76,7 @@ module ActiveRecord
|
|
76
76
|
# Mutations cannot be used in combination with a sequence, as mutations do not support a THEN RETURN clause.
|
77
77
|
if buffered_mutations? && sequence_name
|
78
78
|
raise StatementInvalid, "Mutations cannot be used to create records that use a sequence " \
|
79
|
-
|
79
|
+
"to generate the primary key. #{self} uses #{sequence_name}."
|
80
80
|
end
|
81
81
|
|
82
82
|
return _buffer_record values, :insert, returning if buffered_mutations?
|
@@ -118,12 +118,10 @@ module ActiveRecord
|
|
118
118
|
keys = returning || primary_key
|
119
119
|
return primary_key_value if keys == primary_key
|
120
120
|
|
121
|
-
primary_key_values_hash =
|
122
|
-
|
123
|
-
|
124
|
-
values.append primary_key_values_hash[column]
|
121
|
+
primary_key_values_hash = primary_key.zip(primary_key_value).to_h
|
122
|
+
keys.map do |column|
|
123
|
+
primary_key_values_hash[column]
|
125
124
|
end
|
126
|
-
values
|
127
125
|
end
|
128
126
|
|
129
127
|
def self._upsert_record values, returning
|
@@ -216,11 +214,9 @@ module ActiveRecord
|
|
216
214
|
end
|
217
215
|
|
218
216
|
def self._set_composite_primary_key_values primary_key, values
|
219
|
-
|
220
|
-
|
221
|
-
primary_key_value.append _set_composite_primary_key_value col, values
|
217
|
+
primary_key.map do |col|
|
218
|
+
_set_composite_primary_key_value col, values
|
222
219
|
end
|
223
|
-
primary_key_value
|
224
220
|
end
|
225
221
|
|
226
222
|
def self._set_composite_primary_key_value primary_key, values
|
@@ -419,14 +415,12 @@ module ActiveRecord
|
|
419
415
|
end
|
420
416
|
|
421
417
|
def serialize_keys metadata, keys
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
:mutation)
|
418
|
+
keys.map do |key|
|
419
|
+
ActiveRecord::Type::Spanner::SpannerActiveRecordConverter
|
420
|
+
.serialize_with_transaction_isolation_level(metadata.type(key),
|
421
|
+
attribute_in_database(key),
|
422
|
+
:mutation)
|
428
423
|
end
|
429
|
-
serialized_values
|
430
424
|
end
|
431
425
|
|
432
426
|
def _execute_version_check attempted_action # rubocop:disable Metrics/AbcSize
|
@@ -456,7 +450,7 @@ module ActiveRecord
|
|
456
450
|
|
457
451
|
# We need to check the version using a SELECT query, as a mutation cannot include a WHERE clause.
|
458
452
|
sql = "SELECT 1 FROM `#{self.class.arel_table.name}` " \
|
459
|
-
|
453
|
+
"WHERE #{pk_sql} AND `#{locking_column}` = @lock_version"
|
460
454
|
locked_row = self.class.connection.raw_connection.execute_query sql, params: params, types: param_types
|
461
455
|
raise ActiveRecord::StaleObjectError.new(self, attempted_action) unless locked_row.rows.any?
|
462
456
|
end
|
@@ -10,7 +10,9 @@ require "activerecord_spanner_adapter/information_schema"
|
|
10
10
|
|
11
11
|
module ActiveRecordSpannerAdapter
|
12
12
|
class Connection
|
13
|
-
attr_reader :instance_id
|
13
|
+
attr_reader :instance_id
|
14
|
+
attr_reader :database_id
|
15
|
+
attr_reader :spanner
|
14
16
|
attr_accessor :current_transaction
|
15
17
|
|
16
18
|
def initialize config
|
@@ -45,7 +47,7 @@ module ActiveRecordSpannerAdapter
|
|
45
47
|
|
46
48
|
def self.information_schema config
|
47
49
|
@information_schemas ||= {}
|
48
|
-
@information_schemas[database_path(config)] ||=
|
50
|
+
@information_schemas[database_path(config)] ||=
|
49
51
|
ActiveRecordSpannerAdapter::InformationSchema.new new(config)
|
50
52
|
end
|
51
53
|
|
@@ -202,7 +204,7 @@ module ActiveRecordSpannerAdapter
|
|
202
204
|
|
203
205
|
def execute_query sql, params: nil, types: nil, single_use_selector: nil, request_options: nil
|
204
206
|
if params
|
205
|
-
converted_params, types =
|
207
|
+
converted_params, types =
|
206
208
|
Google::Cloud::Spanner::Convert.to_input_params_and_types(
|
207
209
|
params, types
|
208
210
|
)
|
@@ -217,6 +219,7 @@ module ActiveRecordSpannerAdapter
|
|
217
219
|
execute_sql_request sql, converted_params, types, selector, request_options
|
218
220
|
end
|
219
221
|
|
222
|
+
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
220
223
|
def execute_sql_request sql, converted_params, types, selector, request_options = nil
|
221
224
|
res = session.execute_query \
|
222
225
|
sql,
|
@@ -224,7 +227,7 @@ module ActiveRecordSpannerAdapter
|
|
224
227
|
types: types,
|
225
228
|
transaction: selector,
|
226
229
|
request_options: request_options,
|
227
|
-
seqno:
|
230
|
+
seqno: current_transaction&.next_sequence_number
|
228
231
|
current_transaction.grpc_transaction = res.metadata.transaction \
|
229
232
|
if current_transaction && res&.metadata&.transaction
|
230
233
|
res
|
@@ -252,6 +255,7 @@ module ActiveRecordSpannerAdapter
|
|
252
255
|
# It was not the first statement, so propagate the error.
|
253
256
|
raise
|
254
257
|
end
|
258
|
+
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
255
259
|
|
256
260
|
# Creates a transaction using a BeginTransaction RPC. This is used if the first statement of a
|
257
261
|
# transaction fails, as that also means that no transaction id was returned.
|
@@ -283,7 +287,7 @@ module ActiveRecordSpannerAdapter
|
|
283
287
|
end
|
284
288
|
|
285
289
|
def transaction_selector
|
286
|
-
|
290
|
+
current_transaction&.transaction_selector if current_transaction&.active?
|
287
291
|
end
|
288
292
|
|
289
293
|
def truncate table_name
|
@@ -6,8 +6,15 @@
|
|
6
6
|
|
7
7
|
module ActiveRecordSpannerAdapter
|
8
8
|
class ForeignKey
|
9
|
-
attr_accessor :table_schema
|
10
|
-
|
9
|
+
attr_accessor :table_schema
|
10
|
+
attr_accessor :table_name
|
11
|
+
attr_accessor :name
|
12
|
+
attr_accessor :columns
|
13
|
+
attr_accessor :ref_schema
|
14
|
+
attr_accessor :ref_table
|
15
|
+
attr_accessor :ref_columns
|
16
|
+
attr_accessor :on_delete
|
17
|
+
attr_accessor :on_update
|
11
18
|
|
12
19
|
def initialize \
|
13
20
|
table_name,
|
@@ -7,7 +7,12 @@
|
|
7
7
|
module ActiveRecordSpannerAdapter
|
8
8
|
class Index
|
9
9
|
class Column
|
10
|
-
attr_accessor :table_name
|
10
|
+
attr_accessor :table_name
|
11
|
+
attr_accessor :schema_name
|
12
|
+
attr_accessor :index_name
|
13
|
+
attr_accessor :name
|
14
|
+
attr_accessor :order
|
15
|
+
attr_accessor :ordinal_position
|
11
16
|
|
12
17
|
def initialize \
|
13
18
|
table_name,
|
@@ -8,8 +8,16 @@ require "activerecord_spanner_adapter/index/column"
|
|
8
8
|
|
9
9
|
module ActiveRecordSpannerAdapter
|
10
10
|
class Index
|
11
|
-
attr_accessor :schema
|
12
|
-
|
11
|
+
attr_accessor :schema
|
12
|
+
attr_accessor :table
|
13
|
+
attr_accessor :name
|
14
|
+
attr_accessor :columns
|
15
|
+
attr_accessor :type
|
16
|
+
attr_accessor :unique
|
17
|
+
attr_accessor :null_filtered
|
18
|
+
attr_accessor :interleave_in
|
19
|
+
attr_accessor :storing
|
20
|
+
attr_accessor :state
|
13
21
|
|
14
22
|
def initialize \
|
15
23
|
table,
|
@@ -18,8 +18,8 @@ module ActiveRecord
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def fetch_primary_and_parent_key
|
21
|
-
|
22
|
-
if ActiveRecord::Base
|
21
|
+
connection.spanner_schema_cache.primary_and_parent_keys table_name \
|
22
|
+
if self != ActiveRecord::Base && table_exists?
|
23
23
|
end
|
24
24
|
|
25
25
|
def primary_and_parent_key= value
|
@@ -7,9 +7,18 @@
|
|
7
7
|
module ActiveRecordSpannerAdapter
|
8
8
|
class Table
|
9
9
|
class Column
|
10
|
-
attr_accessor :schema_name
|
11
|
-
|
12
|
-
|
10
|
+
attr_accessor :schema_name
|
11
|
+
attr_accessor :table_name
|
12
|
+
attr_accessor :name
|
13
|
+
attr_accessor :type
|
14
|
+
attr_accessor :limit
|
15
|
+
attr_accessor :ordinal_position
|
16
|
+
attr_accessor :allow_commit_timestamp
|
17
|
+
attr_accessor :default
|
18
|
+
attr_accessor :default_function
|
19
|
+
attr_accessor :generated
|
20
|
+
attr_accessor :primary_key
|
21
|
+
attr_accessor :nullable
|
13
22
|
|
14
23
|
def initialize \
|
15
24
|
table_name,
|
@@ -30,8 +30,14 @@ require "activerecord_spanner_adapter/table/column"
|
|
30
30
|
|
31
31
|
module ActiveRecordSpannerAdapter
|
32
32
|
class Table
|
33
|
-
attr_accessor :name
|
34
|
-
|
33
|
+
attr_accessor :name
|
34
|
+
attr_accessor :on_delete
|
35
|
+
attr_accessor :parent_table
|
36
|
+
attr_accessor :schema_name
|
37
|
+
attr_accessor :catalog
|
38
|
+
attr_accessor :indexes
|
39
|
+
attr_accessor :columns
|
40
|
+
attr_accessor :foreign_keys
|
35
41
|
|
36
42
|
# parent_table == interleave_in
|
37
43
|
def initialize \
|
@@ -123,7 +123,7 @@ module ActiveRecordSpannerAdapter
|
|
123
123
|
|
124
124
|
def shoot_and_forget_rollback
|
125
125
|
@connection.session.rollback @grpc_transaction.transaction_id if @committable
|
126
|
-
rescue StandardError
|
126
|
+
rescue StandardError
|
127
127
|
# Ignored
|
128
128
|
end
|
129
129
|
|
@@ -35,9 +35,7 @@ module Arel # :nodoc: all
|
|
35
35
|
sql = collector.hints[:statement_hint].value + sql if collector.hints[:statement_hint]
|
36
36
|
|
37
37
|
if binds
|
38
|
-
|
39
|
-
binds << collector.hints[:request_options] if collector.hints[:request_options]
|
40
|
-
[sql, binds]
|
38
|
+
compile_with_binds collector, sql, binds
|
41
39
|
else
|
42
40
|
sql
|
43
41
|
end
|
@@ -45,6 +43,12 @@ module Arel # :nodoc: all
|
|
45
43
|
|
46
44
|
private
|
47
45
|
|
46
|
+
def compile_with_binds collector, sql, binds
|
47
|
+
binds << collector.hints[:staleness] if collector.hints[:staleness]
|
48
|
+
binds << collector.hints[:request_options] if collector.hints[:request_options]
|
49
|
+
[sql, binds]
|
50
|
+
end
|
51
|
+
|
48
52
|
BIND_BLOCK = proc { |i| "@p#{i}" }
|
49
53
|
private_constant :BIND_BLOCK
|
50
54
|
|
@@ -62,43 +66,44 @@ module Arel # :nodoc: all
|
|
62
66
|
end
|
63
67
|
|
64
68
|
def visit_statement_hint v, collector
|
65
|
-
collector.hints[:statement_hint] =
|
69
|
+
collector.hints[:statement_hint] =
|
66
70
|
StatementHint.new v.delete_prefix("statement_hint:")
|
67
71
|
end
|
68
72
|
|
69
|
-
# rubocop:disable Naming/MethodName
|
73
|
+
# rubocop:disable Naming/MethodName, Metrics/AbcSize
|
70
74
|
def visit_Arel_Nodes_OptimizerHints o, collector
|
71
75
|
o.expr.each do |v|
|
72
76
|
visit_table_hint v, collector if v.start_with? "table_hint:"
|
73
77
|
visit_statement_hint v, collector if v.start_with? "statement_hint:"
|
74
78
|
if v.start_with? "max_staleness:"
|
75
|
-
collector.hints[:staleness] =
|
79
|
+
collector.hints[:staleness] =
|
76
80
|
StalenessHint.new max_staleness: v.delete_prefix("max_staleness:").to_f
|
77
81
|
next
|
78
82
|
end
|
79
83
|
if v.start_with? "exact_staleness:"
|
80
|
-
collector.hints[:staleness] =
|
84
|
+
collector.hints[:staleness] =
|
81
85
|
StalenessHint.new exact_staleness: v.delete_prefix("exact_staleness:").to_f
|
82
86
|
next
|
83
87
|
end
|
84
88
|
if v.start_with? "min_read_timestamp:"
|
85
89
|
time = Time.xmlschema v.delete_prefix("min_read_timestamp:")
|
86
|
-
collector.hints[:staleness] =
|
90
|
+
collector.hints[:staleness] =
|
87
91
|
StalenessHint.new min_read_timestamp: time
|
88
92
|
next
|
89
93
|
end
|
90
94
|
next unless v.start_with? "read_timestamp:"
|
91
95
|
time = Time.xmlschema v.delete_prefix("read_timestamp:")
|
92
|
-
collector.hints[:staleness] =
|
96
|
+
collector.hints[:staleness] =
|
93
97
|
StalenessHint.new read_timestamp: time
|
94
98
|
end
|
95
99
|
collector
|
96
100
|
end
|
101
|
+
# rubocop:enable Metrics/AbcSize
|
97
102
|
|
98
103
|
def visit_Arel_Nodes_Comment o, collector
|
99
|
-
o.values.each do |v|
|
104
|
+
o.values.each do |v| # rubocop:disable Style/HashEachMethods
|
100
105
|
if v.start_with?("request_tag:") || v.start_with?("transaction_tag:")
|
101
|
-
collector.hints[:request_options] ||=
|
106
|
+
collector.hints[:request_options] ||=
|
102
107
|
Google::Cloud::Spanner::V1::RequestOptions.new
|
103
108
|
end
|
104
109
|
|
data/lib/spanner_client_ext.rb
CHANGED
@@ -66,8 +66,8 @@ module Google
|
|
66
66
|
ensure_service!
|
67
67
|
|
68
68
|
snp_grpc = service.create_snapshot \
|
69
|
-
path, timestamp:
|
70
|
-
staleness:
|
69
|
+
path, timestamp: timestamp || read_timestamp,
|
70
|
+
staleness: staleness || exact_staleness
|
71
71
|
num_args = Snapshot.method(:from_grpc).arity
|
72
72
|
if num_args == 3
|
73
73
|
Snapshot.from_grpc snp_grpc, self, nil
|
@@ -105,7 +105,8 @@ module Google
|
|
105
105
|
end
|
106
106
|
|
107
107
|
class Transaction
|
108
|
-
attr_accessor :seqno
|
108
|
+
attr_accessor :seqno
|
109
|
+
attr_accessor :commit
|
109
110
|
end
|
110
111
|
end
|
111
112
|
end
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-spanner-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Google LLC
|
8
|
-
autorequire:
|
9
8
|
bindir: exe
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 2025-01-23 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: google-cloud-spanner
|
@@ -47,7 +46,7 @@ dependencies:
|
|
47
46
|
version: '6.1'
|
48
47
|
- - "<"
|
49
48
|
- !ruby/object:Gem::Version
|
50
|
-
version: '
|
49
|
+
version: '9'
|
51
50
|
type: :runtime
|
52
51
|
prerelease: false
|
53
52
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -57,7 +56,7 @@ dependencies:
|
|
57
56
|
version: '6.1'
|
58
57
|
- - "<"
|
59
58
|
- !ruby/object:Gem::Version
|
60
|
-
version: '
|
59
|
+
version: '9'
|
61
60
|
- !ruby/object:Gem::Dependency
|
62
61
|
name: autotest-suffix
|
63
62
|
requirement: !ruby/object:Gem::Requirement
|
@@ -92,14 +91,14 @@ dependencies:
|
|
92
91
|
requirements:
|
93
92
|
- - "~>"
|
94
93
|
- !ruby/object:Gem::Version
|
95
|
-
version: 1.
|
94
|
+
version: 1.30.1
|
96
95
|
type: :development
|
97
96
|
prerelease: false
|
98
97
|
version_requirements: !ruby/object:Gem::Requirement
|
99
98
|
requirements:
|
100
99
|
- - "~>"
|
101
100
|
- !ruby/object:Gem::Version
|
102
|
-
version: 1.
|
101
|
+
version: 1.30.1
|
103
102
|
- !ruby/object:Gem::Dependency
|
104
103
|
name: minitest
|
105
104
|
requirement: !ruby/object:Gem::Requirement
|
@@ -245,6 +244,7 @@ files:
|
|
245
244
|
- ".github/workflows/nightly-acceptance-tests-on-production.yaml"
|
246
245
|
- ".github/workflows/nightly-unit-tests.yaml"
|
247
246
|
- ".github/workflows/rubocop.yaml"
|
247
|
+
- ".github/workflows/samples.yaml"
|
248
248
|
- ".gitignore"
|
249
249
|
- ".kokoro/populate-secrets.sh"
|
250
250
|
- ".kokoro/release.cfg"
|
@@ -283,6 +283,7 @@ files:
|
|
283
283
|
- acceptance/cases/migration/references_statements_test.rb
|
284
284
|
- acceptance/cases/migration/rename_column_test.rb
|
285
285
|
- acceptance/cases/migration/schema_dumper_test.rb
|
286
|
+
- acceptance/cases/models/binary_identifiers.rb
|
286
287
|
- acceptance/cases/models/calculation_query_test.rb
|
287
288
|
- acceptance/cases/models/default_value_test.rb
|
288
289
|
- acceptance/cases/models/generated_column_test.rb
|
@@ -313,6 +314,7 @@ files:
|
|
313
314
|
- acceptance/models/album.rb
|
314
315
|
- acceptance/models/all_types.rb
|
315
316
|
- acceptance/models/author.rb
|
317
|
+
- acceptance/models/binary_project.rb
|
316
318
|
- acceptance/models/club.rb
|
317
319
|
- acceptance/models/comment.rb
|
318
320
|
- acceptance/models/customer.rb
|
@@ -324,9 +326,11 @@ files:
|
|
324
326
|
- acceptance/models/organization.rb
|
325
327
|
- acceptance/models/post.rb
|
326
328
|
- acceptance/models/singer.rb
|
329
|
+
- acceptance/models/string_io.rb
|
327
330
|
- acceptance/models/table_with_sequence.rb
|
328
331
|
- acceptance/models/track.rb
|
329
332
|
- acceptance/models/transaction.rb
|
333
|
+
- acceptance/models/user.rb
|
330
334
|
- acceptance/schema/schema.rb
|
331
335
|
- acceptance/test_helper.rb
|
332
336
|
- acceptance/test_helpers/with_separate_database.rb
|
@@ -351,7 +355,6 @@ files:
|
|
351
355
|
- examples/snippets/array-data-type/application.rb
|
352
356
|
- examples/snippets/array-data-type/config/database.yml
|
353
357
|
- examples/snippets/array-data-type/db/migrate/01_create_tables.rb
|
354
|
-
- examples/snippets/array-data-type/db/schema.rb
|
355
358
|
- examples/snippets/array-data-type/db/seeds.rb
|
356
359
|
- examples/snippets/array-data-type/models/entity_with_array_types.rb
|
357
360
|
- examples/snippets/bin/create_emulator_instance.rb
|
@@ -360,7 +363,6 @@ files:
|
|
360
363
|
- examples/snippets/bit-reversed-sequence/application.rb
|
361
364
|
- examples/snippets/bit-reversed-sequence/config/database.yml
|
362
365
|
- examples/snippets/bit-reversed-sequence/db/migrate/01_create_tables.rb
|
363
|
-
- examples/snippets/bit-reversed-sequence/db/schema.rb
|
364
366
|
- examples/snippets/bit-reversed-sequence/db/seeds.rb
|
365
367
|
- examples/snippets/bit-reversed-sequence/models/album.rb
|
366
368
|
- examples/snippets/bit-reversed-sequence/models/singer.rb
|
@@ -369,7 +371,6 @@ files:
|
|
369
371
|
- examples/snippets/bulk-insert/application.rb
|
370
372
|
- examples/snippets/bulk-insert/config/database.yml
|
371
373
|
- examples/snippets/bulk-insert/db/migrate/01_create_tables.rb
|
372
|
-
- examples/snippets/bulk-insert/db/schema.rb
|
373
374
|
- examples/snippets/bulk-insert/db/seeds.rb
|
374
375
|
- examples/snippets/bulk-insert/models/album.rb
|
375
376
|
- examples/snippets/bulk-insert/models/singer.rb
|
@@ -378,7 +379,6 @@ files:
|
|
378
379
|
- examples/snippets/commit-timestamp/application.rb
|
379
380
|
- examples/snippets/commit-timestamp/config/database.yml
|
380
381
|
- examples/snippets/commit-timestamp/db/migrate/01_create_tables.rb
|
381
|
-
- examples/snippets/commit-timestamp/db/schema.rb
|
382
382
|
- examples/snippets/commit-timestamp/db/seeds.rb
|
383
383
|
- examples/snippets/commit-timestamp/models/album.rb
|
384
384
|
- examples/snippets/commit-timestamp/models/singer.rb
|
@@ -388,7 +388,6 @@ files:
|
|
388
388
|
- examples/snippets/create-records/application.rb
|
389
389
|
- examples/snippets/create-records/config/database.yml
|
390
390
|
- examples/snippets/create-records/db/migrate/01_create_tables.rb
|
391
|
-
- examples/snippets/create-records/db/schema.rb
|
392
391
|
- examples/snippets/create-records/db/seeds.rb
|
393
392
|
- examples/snippets/create-records/models/album.rb
|
394
393
|
- examples/snippets/create-records/models/singer.rb
|
@@ -397,7 +396,6 @@ files:
|
|
397
396
|
- examples/snippets/date-data-type/application.rb
|
398
397
|
- examples/snippets/date-data-type/config/database.yml
|
399
398
|
- examples/snippets/date-data-type/db/migrate/01_create_tables.rb
|
400
|
-
- examples/snippets/date-data-type/db/schema.rb
|
401
399
|
- examples/snippets/date-data-type/db/seeds.rb
|
402
400
|
- examples/snippets/date-data-type/models/singer.rb
|
403
401
|
- examples/snippets/generated-column/README.md
|
@@ -405,7 +403,6 @@ files:
|
|
405
403
|
- examples/snippets/generated-column/application.rb
|
406
404
|
- examples/snippets/generated-column/config/database.yml
|
407
405
|
- examples/snippets/generated-column/db/migrate/01_create_tables.rb
|
408
|
-
- examples/snippets/generated-column/db/schema.rb
|
409
406
|
- examples/snippets/generated-column/db/seeds.rb
|
410
407
|
- examples/snippets/generated-column/models/singer.rb
|
411
408
|
- examples/snippets/hints/README.md
|
@@ -413,7 +410,6 @@ files:
|
|
413
410
|
- examples/snippets/hints/application.rb
|
414
411
|
- examples/snippets/hints/config/database.yml
|
415
412
|
- examples/snippets/hints/db/migrate/01_create_tables.rb
|
416
|
-
- examples/snippets/hints/db/schema.rb
|
417
413
|
- examples/snippets/hints/db/seeds.rb
|
418
414
|
- examples/snippets/hints/models/album.rb
|
419
415
|
- examples/snippets/hints/models/singer.rb
|
@@ -422,7 +418,6 @@ files:
|
|
422
418
|
- examples/snippets/interleaved-tables-before-7.1/application.rb
|
423
419
|
- examples/snippets/interleaved-tables-before-7.1/config/database.yml
|
424
420
|
- examples/snippets/interleaved-tables-before-7.1/db/migrate/01_create_tables.rb
|
425
|
-
- examples/snippets/interleaved-tables-before-7.1/db/schema.rb
|
426
421
|
- examples/snippets/interleaved-tables-before-7.1/db/seeds.rb
|
427
422
|
- examples/snippets/interleaved-tables-before-7.1/models/album.rb
|
428
423
|
- examples/snippets/interleaved-tables-before-7.1/models/singer.rb
|
@@ -432,7 +427,6 @@ files:
|
|
432
427
|
- examples/snippets/interleaved-tables/application.rb
|
433
428
|
- examples/snippets/interleaved-tables/config/database.yml
|
434
429
|
- examples/snippets/interleaved-tables/db/migrate/01_create_tables.rb
|
435
|
-
- examples/snippets/interleaved-tables/db/schema.rb
|
436
430
|
- examples/snippets/interleaved-tables/db/seeds.rb
|
437
431
|
- examples/snippets/interleaved-tables/models/album.rb
|
438
432
|
- examples/snippets/interleaved-tables/models/singer.rb
|
@@ -442,7 +436,6 @@ files:
|
|
442
436
|
- examples/snippets/migrations/application.rb
|
443
437
|
- examples/snippets/migrations/config/database.yml
|
444
438
|
- examples/snippets/migrations/db/migrate/01_create_tables.rb
|
445
|
-
- examples/snippets/migrations/db/schema.rb
|
446
439
|
- examples/snippets/migrations/db/seeds.rb
|
447
440
|
- examples/snippets/migrations/models/album.rb
|
448
441
|
- examples/snippets/migrations/models/singer.rb
|
@@ -452,7 +445,6 @@ files:
|
|
452
445
|
- examples/snippets/mutations/application.rb
|
453
446
|
- examples/snippets/mutations/config/database.yml
|
454
447
|
- examples/snippets/mutations/db/migrate/01_create_tables.rb
|
455
|
-
- examples/snippets/mutations/db/schema.rb
|
456
448
|
- examples/snippets/mutations/db/seeds.rb
|
457
449
|
- examples/snippets/mutations/models/album.rb
|
458
450
|
- examples/snippets/mutations/models/singer.rb
|
@@ -461,7 +453,6 @@ files:
|
|
461
453
|
- examples/snippets/optimistic-locking/application.rb
|
462
454
|
- examples/snippets/optimistic-locking/config/database.yml
|
463
455
|
- examples/snippets/optimistic-locking/db/migrate/01_create_tables.rb
|
464
|
-
- examples/snippets/optimistic-locking/db/schema.rb
|
465
456
|
- examples/snippets/optimistic-locking/db/seeds.rb
|
466
457
|
- examples/snippets/optimistic-locking/models/album.rb
|
467
458
|
- examples/snippets/optimistic-locking/models/singer.rb
|
@@ -470,7 +461,6 @@ files:
|
|
470
461
|
- examples/snippets/partitioned-dml/application.rb
|
471
462
|
- examples/snippets/partitioned-dml/config/database.yml
|
472
463
|
- examples/snippets/partitioned-dml/db/migrate/01_create_tables.rb
|
473
|
-
- examples/snippets/partitioned-dml/db/schema.rb
|
474
464
|
- examples/snippets/partitioned-dml/db/seeds.rb
|
475
465
|
- examples/snippets/partitioned-dml/models/album.rb
|
476
466
|
- examples/snippets/partitioned-dml/models/singer.rb
|
@@ -479,7 +469,6 @@ files:
|
|
479
469
|
- examples/snippets/query-logs/application.rb
|
480
470
|
- examples/snippets/query-logs/config/database.yml
|
481
471
|
- examples/snippets/query-logs/db/migrate/01_create_tables.rb
|
482
|
-
- examples/snippets/query-logs/db/schema.rb
|
483
472
|
- examples/snippets/query-logs/db/seeds.rb
|
484
473
|
- examples/snippets/query-logs/models/album.rb
|
485
474
|
- examples/snippets/query-logs/models/singer.rb
|
@@ -488,7 +477,6 @@ files:
|
|
488
477
|
- examples/snippets/quickstart/application.rb
|
489
478
|
- examples/snippets/quickstart/config/database.yml
|
490
479
|
- examples/snippets/quickstart/db/migrate/01_create_tables.rb
|
491
|
-
- examples/snippets/quickstart/db/schema.rb
|
492
480
|
- examples/snippets/quickstart/db/seeds.rb
|
493
481
|
- examples/snippets/quickstart/models/album.rb
|
494
482
|
- examples/snippets/quickstart/models/singer.rb
|
@@ -497,7 +485,6 @@ files:
|
|
497
485
|
- examples/snippets/read-only-transactions/application.rb
|
498
486
|
- examples/snippets/read-only-transactions/config/database.yml
|
499
487
|
- examples/snippets/read-only-transactions/db/migrate/01_create_tables.rb
|
500
|
-
- examples/snippets/read-only-transactions/db/schema.rb
|
501
488
|
- examples/snippets/read-only-transactions/db/seeds.rb
|
502
489
|
- examples/snippets/read-only-transactions/models/album.rb
|
503
490
|
- examples/snippets/read-only-transactions/models/singer.rb
|
@@ -506,7 +493,6 @@ files:
|
|
506
493
|
- examples/snippets/read-write-transactions/application.rb
|
507
494
|
- examples/snippets/read-write-transactions/config/database.yml
|
508
495
|
- examples/snippets/read-write-transactions/db/migrate/01_create_tables.rb
|
509
|
-
- examples/snippets/read-write-transactions/db/schema.rb
|
510
496
|
- examples/snippets/read-write-transactions/db/seeds.rb
|
511
497
|
- examples/snippets/read-write-transactions/models/album.rb
|
512
498
|
- examples/snippets/read-write-transactions/models/singer.rb
|
@@ -515,7 +501,6 @@ files:
|
|
515
501
|
- examples/snippets/stale-reads/application.rb
|
516
502
|
- examples/snippets/stale-reads/config/database.yml
|
517
503
|
- examples/snippets/stale-reads/db/migrate/01_create_tables.rb
|
518
|
-
- examples/snippets/stale-reads/db/schema.rb
|
519
504
|
- examples/snippets/stale-reads/db/seeds.rb
|
520
505
|
- examples/snippets/stale-reads/models/album.rb
|
521
506
|
- examples/snippets/stale-reads/models/singer.rb
|
@@ -524,7 +509,6 @@ files:
|
|
524
509
|
- examples/snippets/tags/application.rb
|
525
510
|
- examples/snippets/tags/config/database.yml
|
526
511
|
- examples/snippets/tags/db/migrate/01_create_tables.rb
|
527
|
-
- examples/snippets/tags/db/schema.rb
|
528
512
|
- examples/snippets/tags/db/seeds.rb
|
529
513
|
- examples/snippets/tags/models/album.rb
|
530
514
|
- examples/snippets/tags/models/singer.rb
|
@@ -533,7 +517,6 @@ files:
|
|
533
517
|
- examples/snippets/timestamp-data-type/application.rb
|
534
518
|
- examples/snippets/timestamp-data-type/config/database.yml
|
535
519
|
- examples/snippets/timestamp-data-type/db/migrate/01_create_tables.rb
|
536
|
-
- examples/snippets/timestamp-data-type/db/schema.rb
|
537
520
|
- examples/snippets/timestamp-data-type/db/seeds.rb
|
538
521
|
- examples/snippets/timestamp-data-type/models/meeting.rb
|
539
522
|
- examples/solidus/README.md
|
@@ -574,7 +557,6 @@ homepage: https://github.com/googleapis/ruby-spanner-activerecord
|
|
574
557
|
licenses:
|
575
558
|
- MIT
|
576
559
|
metadata: {}
|
577
|
-
post_install_message:
|
578
560
|
rdoc_options: []
|
579
561
|
require_paths:
|
580
562
|
- lib
|
@@ -582,15 +564,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
582
564
|
requirements:
|
583
565
|
- - ">="
|
584
566
|
- !ruby/object:Gem::Version
|
585
|
-
version: '
|
567
|
+
version: '3.1'
|
586
568
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
587
569
|
requirements:
|
588
570
|
- - ">="
|
589
571
|
- !ruby/object:Gem::Version
|
590
572
|
version: '0'
|
591
573
|
requirements: []
|
592
|
-
rubygems_version: 3.
|
593
|
-
signing_key:
|
574
|
+
rubygems_version: 3.6.2
|
594
575
|
specification_version: 4
|
595
576
|
summary: Rails ActiveRecord connector for Google Spanner Database
|
596
577
|
test_files: []
|
@@ -1,31 +0,0 @@
|
|
1
|
-
# This file is auto-generated from the current state of the database. Instead
|
2
|
-
# of editing this file, please use the migrations feature of Active Record to
|
3
|
-
# incrementally modify your database, and then regenerate this schema definition.
|
4
|
-
#
|
5
|
-
# This file is the source Rails uses to define your schema when running `bin/rails
|
6
|
-
# db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to
|
7
|
-
# be faster and is potentially less error prone than running all of your
|
8
|
-
# migrations from scratch. Old migrations may fail to apply correctly if those
|
9
|
-
# migrations use external dependencies or application code.
|
10
|
-
#
|
11
|
-
# It's strongly recommended that you check this file into your version control system.
|
12
|
-
|
13
|
-
ActiveRecord::Schema.define(version: 1) do
|
14
|
-
connection.start_batch_ddl
|
15
|
-
|
16
|
-
create_table "entity_with_array_types", id: { limit: 8 }, force: :cascade do |t|
|
17
|
-
t.string "col_array_string"
|
18
|
-
t.integer "col_array_int64", limit: 8
|
19
|
-
t.float "col_array_float64"
|
20
|
-
t.decimal "col_array_numeric"
|
21
|
-
t.boolean "col_array_bool"
|
22
|
-
t.binary "col_array_bytes"
|
23
|
-
t.date "col_array_date"
|
24
|
-
t.time "col_array_timestamp"
|
25
|
-
end
|
26
|
-
|
27
|
-
connection.run_batch
|
28
|
-
rescue
|
29
|
-
abort_batch
|
30
|
-
raise
|
31
|
-
end
|