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.
Files changed (129) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/acceptance-tests-on-emulator.yaml +4 -6
  3. data/.github/workflows/ci.yaml +4 -6
  4. data/.github/workflows/nightly-acceptance-tests-on-emulator.yaml +4 -6
  5. data/.github/workflows/nightly-unit-tests.yaml +4 -6
  6. data/.github/workflows/rubocop.yaml +1 -1
  7. data/.github/workflows/samples.yaml +30 -0
  8. data/.kokoro/release.sh +1 -3
  9. data/.release-please-manifest.json +1 -1
  10. data/.rubocop.yml +2 -2
  11. data/CHANGELOG.md +18 -0
  12. data/Gemfile +6 -5
  13. data/README.md +11 -9
  14. data/acceptance/cases/migration/command_recorder_test.rb +7 -38
  15. data/acceptance/cases/migration/references_index_test.rb +2 -11
  16. data/acceptance/cases/models/binary_identifiers.rb +97 -0
  17. data/acceptance/models/binary_project.rb +20 -0
  18. data/acceptance/models/string_io.rb +28 -0
  19. data/acceptance/models/user.rb +20 -0
  20. data/acceptance/test_helper.rb +1 -0
  21. data/activerecord-spanner-adapter.gemspec +3 -3
  22. data/benchmarks/application.rb +3 -7
  23. data/examples/snippets/Rakefile +27 -5
  24. data/examples/snippets/array-data-type/application.rb +1 -5
  25. data/examples/snippets/array-data-type/config/database.yml +1 -0
  26. data/examples/snippets/bit-reversed-sequence/application.rb +0 -4
  27. data/examples/snippets/bit-reversed-sequence/config/database.yml +1 -0
  28. data/examples/snippets/bit-reversed-sequence/db/seeds.rb +2 -2
  29. data/examples/snippets/bulk-insert/application.rb +1 -5
  30. data/examples/snippets/bulk-insert/config/database.yml +1 -0
  31. data/examples/snippets/commit-timestamp/application.rb +0 -4
  32. data/examples/snippets/commit-timestamp/config/database.yml +1 -0
  33. data/examples/snippets/config/environment.rb +5 -0
  34. data/examples/snippets/create-records/application.rb +1 -5
  35. data/examples/snippets/create-records/config/database.yml +1 -0
  36. data/examples/snippets/date-data-type/application.rb +1 -5
  37. data/examples/snippets/date-data-type/config/database.yml +1 -0
  38. data/examples/snippets/date-data-type/db/seeds.rb +1 -1
  39. data/examples/snippets/generated-column/application.rb +0 -4
  40. data/examples/snippets/generated-column/config/database.yml +1 -0
  41. data/examples/snippets/generated-column/db/seeds.rb +1 -1
  42. data/examples/snippets/hints/application.rb +0 -4
  43. data/examples/snippets/hints/config/database.yml +1 -0
  44. data/examples/snippets/hints/db/seeds.rb +1 -1
  45. data/examples/snippets/interleaved-tables/application.rb +1 -5
  46. data/examples/snippets/interleaved-tables/config/database.yml +1 -0
  47. data/examples/snippets/interleaved-tables/db/seeds.rb +1 -1
  48. data/examples/snippets/interleaved-tables/models/album.rb +6 -2
  49. data/examples/snippets/interleaved-tables/models/track.rb +5 -1
  50. data/examples/snippets/interleaved-tables-before-7.1/application.rb +1 -5
  51. data/examples/snippets/interleaved-tables-before-7.1/config/database.yml +1 -0
  52. data/examples/snippets/interleaved-tables-before-7.1/db/seeds.rb +1 -1
  53. data/examples/snippets/migrations/application.rb +0 -4
  54. data/examples/snippets/migrations/config/database.yml +1 -0
  55. data/examples/snippets/mutations/application.rb +1 -5
  56. data/examples/snippets/mutations/config/database.yml +1 -0
  57. data/examples/snippets/mutations/db/seeds.rb +1 -1
  58. data/examples/snippets/optimistic-locking/application.rb +0 -4
  59. data/examples/snippets/optimistic-locking/config/database.yml +1 -0
  60. data/examples/snippets/optimistic-locking/db/seeds.rb +1 -1
  61. data/examples/snippets/partitioned-dml/application.rb +0 -4
  62. data/examples/snippets/partitioned-dml/config/database.yml +1 -0
  63. data/examples/snippets/partitioned-dml/db/seeds.rb +1 -1
  64. data/examples/snippets/query-logs/application.rb +15 -13
  65. data/examples/snippets/query-logs/config/database.yml +1 -0
  66. data/examples/snippets/query-logs/db/seeds.rb +1 -1
  67. data/examples/snippets/quickstart/application.rb +0 -4
  68. data/examples/snippets/quickstart/config/database.yml +1 -0
  69. data/examples/snippets/quickstart/db/seeds.rb +1 -1
  70. data/examples/snippets/read-only-transactions/application.rb +0 -4
  71. data/examples/snippets/read-only-transactions/config/database.yml +1 -0
  72. data/examples/snippets/read-only-transactions/db/seeds.rb +1 -1
  73. data/examples/snippets/read-write-transactions/application.rb +2 -6
  74. data/examples/snippets/read-write-transactions/config/database.yml +1 -0
  75. data/examples/snippets/read-write-transactions/db/seeds.rb +1 -1
  76. data/examples/snippets/stale-reads/application.rb +0 -4
  77. data/examples/snippets/stale-reads/config/database.yml +1 -0
  78. data/examples/snippets/stale-reads/db/seeds.rb +1 -1
  79. data/examples/snippets/tags/application.rb +0 -4
  80. data/examples/snippets/tags/config/database.yml +1 -0
  81. data/examples/snippets/tags/db/seeds.rb +1 -1
  82. data/examples/snippets/timestamp-data-type/application.rb +0 -4
  83. data/examples/snippets/timestamp-data-type/config/database.yml +1 -0
  84. data/lib/active_record/connection_adapters/spanner/column.rb +3 -3
  85. data/lib/active_record/connection_adapters/spanner/database_statements.rb +34 -22
  86. data/lib/active_record/connection_adapters/spanner/quoting.rb +2 -1
  87. data/lib/active_record/connection_adapters/spanner/schema_creation.rb +7 -9
  88. data/lib/active_record/connection_adapters/spanner/schema_definitions.rb +12 -2
  89. data/lib/active_record/connection_adapters/spanner/schema_statements.rb +17 -46
  90. data/lib/active_record/connection_adapters/spanner/type_metadata.rb +4 -6
  91. data/lib/active_record/connection_adapters/spanner_adapter.rb +20 -7
  92. data/lib/active_record/tasks/spanner_database_tasks.rb +4 -4
  93. data/lib/active_record/type/spanner/array.rb +4 -0
  94. data/lib/active_record/type/spanner/bytes.rb +10 -0
  95. data/lib/activerecord_spanner_adapter/base.rb +12 -18
  96. data/lib/activerecord_spanner_adapter/connection.rb +9 -5
  97. data/lib/activerecord_spanner_adapter/foreign_key.rb +9 -2
  98. data/lib/activerecord_spanner_adapter/index/column.rb +6 -1
  99. data/lib/activerecord_spanner_adapter/index.rb +10 -2
  100. data/lib/activerecord_spanner_adapter/information_schema.rb +1 -1
  101. data/lib/activerecord_spanner_adapter/primary_key.rb +2 -2
  102. data/lib/activerecord_spanner_adapter/table/column.rb +12 -3
  103. data/lib/activerecord_spanner_adapter/table.rb +8 -2
  104. data/lib/activerecord_spanner_adapter/transaction.rb +1 -1
  105. data/lib/activerecord_spanner_adapter/version.rb +1 -1
  106. data/lib/arel/visitors/spanner.rb +16 -11
  107. data/lib/spanner_client_ext.rb +4 -3
  108. metadata +13 -32
  109. data/examples/snippets/array-data-type/db/schema.rb +0 -31
  110. data/examples/snippets/bit-reversed-sequence/db/schema.rb +0 -31
  111. data/examples/snippets/bulk-insert/db/schema.rb +0 -31
  112. data/examples/snippets/commit-timestamp/db/schema.rb +0 -34
  113. data/examples/snippets/create-records/db/schema.rb +0 -31
  114. data/examples/snippets/date-data-type/db/schema.rb +0 -26
  115. data/examples/snippets/generated-column/db/schema.rb +0 -26
  116. data/examples/snippets/hints/db/schema.rb +0 -33
  117. data/examples/snippets/interleaved-tables/db/schema.rb +0 -39
  118. data/examples/snippets/interleaved-tables-before-7.1/db/schema.rb +0 -37
  119. data/examples/snippets/migrations/db/schema.rb +0 -38
  120. data/examples/snippets/mutations/db/schema.rb +0 -32
  121. data/examples/snippets/optimistic-locking/db/schema.rb +0 -34
  122. data/examples/snippets/partitioned-dml/db/schema.rb +0 -31
  123. data/examples/snippets/query-logs/db/schema.rb +0 -31
  124. data/examples/snippets/quickstart/db/schema.rb +0 -31
  125. data/examples/snippets/read-only-transactions/db/schema.rb +0 -31
  126. data/examples/snippets/read-write-transactions/db/schema.rb +0 -32
  127. data/examples/snippets/stale-reads/db/schema.rb +0 -31
  128. data/examples/snippets/tags/db/schema.rb +0 -31
  129. 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
- "to generate the primary key. #{self} uses #{sequence_name}."
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 = Hash[primary_key.zip(primary_key_value)]
122
- values = []
123
- keys.each do |column|
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
- primary_key_value = []
220
- primary_key.each do |col|
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
- serialized_values = []
423
- keys.each do |key|
424
- serialized_values << ActiveRecord::Type::Spanner::SpannerActiveRecordConverter
425
- .serialize_with_transaction_isolation_level(metadata.type(key),
426
- attribute_in_database(key),
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
- "WHERE #{pk_sql} AND `#{locking_column}` = @lock_version"
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, :database_id, :spanner
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: (current_transaction&.next_sequence_number)
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
- return current_transaction&.transaction_selector if current_transaction&.active?
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, :table_name, :name, :columns, :ref_schema, :ref_table, :ref_columns,
10
- :on_delete, :on_update
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, :schema_name, :index_name, :name, :order, :ordinal_position
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, :table, :name, :columns, :type, :unique, :null_filtered,
12
- :interleave_in, :storing, :state
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,
@@ -32,7 +32,7 @@ module ActiveRecordSpannerAdapter
32
32
 
33
33
  rows = execute_query(
34
34
  sql,
35
- schema_name: (schema_name || ""), table_name: table_name
35
+ schema_name: schema_name || "", table_name: table_name
36
36
  )
37
37
 
38
38
  rows.map do |row|
@@ -18,8 +18,8 @@ module ActiveRecord
18
18
  end
19
19
 
20
20
  def fetch_primary_and_parent_key
21
- return connection.spanner_schema_cache.primary_and_parent_keys table_name \
22
- if ActiveRecord::Base != self && table_exists?
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, :table_name, :name, :type, :limit, :ordinal_position,
11
- :allow_commit_timestamp, :default, :default_function, :generated,
12
- :primary_key, :nullable
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, :on_delete, :parent_table, :schema_name, :catalog,
34
- :indexes, :columns, :foreign_keys
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 # rubocop:disable Lint/HandleExceptions
126
+ rescue StandardError
127
127
  # Ignored
128
128
  end
129
129
 
@@ -5,5 +5,5 @@
5
5
  # https://opensource.org/licenses/MIT.
6
6
 
7
7
  module ActiveRecordSpannerAdapter
8
- VERSION = "1.8.0".freeze
8
+ VERSION = "2.0.0".freeze
9
9
  end
@@ -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
- binds << collector.hints[:staleness] if collector.hints[:staleness]
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
 
@@ -66,8 +66,8 @@ module Google
66
66
  ensure_service!
67
67
 
68
68
  snp_grpc = service.create_snapshot \
69
- path, timestamp: (timestamp || read_timestamp),
70
- staleness: (staleness || exact_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, :commit
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: 1.8.0
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: 2024-12-12 00:00:00.000000000 Z
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: '7.3'
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: '7.3'
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.24.0
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.24.0
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: '2.7'
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.5.23
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