activerecord-spanner-adapter 2.0.0 → 2.1.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/.kokoro/release.cfg +2 -2
- data/.kokoro/release.sh +1 -2
- data/.release-please-manifest.json +1 -1
- data/CHANGELOG.md +10 -0
- data/README.md +25 -23
- data/acceptance/cases/models/default_value_test.rb +2 -2
- data/acceptance/cases/tasks/database_tasks_test.rb +71 -74
- data/acceptance/cases/transactions/read_write_transactions_test.rb +10 -4
- data/acceptance/test_helper.rb +21 -8
- data/activerecord-spanner-adapter.gemspec +1 -1
- data/examples/snippets/Rakefile +1 -0
- data/examples/snippets/auto-generated-primary-key/README.md +140 -0
- data/examples/snippets/auto-generated-primary-key/Rakefile +13 -0
- data/examples/snippets/auto-generated-primary-key/application.rb +86 -0
- data/examples/snippets/auto-generated-primary-key/config/database.yml +10 -0
- data/examples/snippets/auto-generated-primary-key/db/migrate/01_create_tables.rb +29 -0
- data/examples/snippets/auto-generated-primary-key/db/seeds.rb +31 -0
- data/examples/snippets/auto-generated-primary-key/models/album.rb +11 -0
- data/examples/snippets/auto-generated-primary-key/models/singer.rb +11 -0
- data/lib/active_record/connection_adapters/spanner/column.rb +4 -0
- data/lib/active_record/connection_adapters/spanner/schema_creation.rb +13 -2
- data/lib/active_record/connection_adapters/spanner/schema_statements.rb +5 -5
- data/lib/active_record/connection_adapters/spanner/type_metadata.rb +7 -3
- data/lib/active_record/connection_adapters/spanner_adapter.rb +22 -0
- data/lib/activerecord_spanner_adapter/base.rb +49 -16
- data/lib/activerecord_spanner_adapter/information_schema.rb +4 -2
- data/lib/activerecord_spanner_adapter/table/column.rb +4 -1
- data/lib/activerecord_spanner_adapter/version.rb +1 -1
- metadata +13 -5
@@ -26,7 +26,8 @@ module ActiveRecord
|
|
26
26
|
"project" => ENV["SPANNER_TEST_PROJECT"],
|
27
27
|
"instance" => ENV["SPANNER_TEST_INSTANCE"],
|
28
28
|
"credentials" => ENV["SPANNER_TEST_KEYFILE"],
|
29
|
-
"database" => @database_id
|
29
|
+
"database" => @database_id,
|
30
|
+
"default_sequence_kind" => "BIT_REVERSED_POSITIVE",
|
30
31
|
}
|
31
32
|
|
32
33
|
create_database
|
@@ -74,13 +75,9 @@ module ActiveRecord
|
|
74
75
|
create_tables_in_test_schema
|
75
76
|
|
76
77
|
db_config =
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
connector_config
|
81
|
-
else
|
82
|
-
connector_config
|
83
|
-
end
|
78
|
+
ActiveRecord::DatabaseConfigurations::HashConfig.new "test",
|
79
|
+
"primary",
|
80
|
+
connector_config
|
84
81
|
|
85
82
|
tables = connection.tables.sort
|
86
83
|
config_name = "primary"
|
@@ -109,7 +106,7 @@ module ActiveRecord
|
|
109
106
|
|
110
107
|
def expected_schema_sql_on_emulator
|
111
108
|
"CREATE TABLE all_types (
|
112
|
-
id INT64 NOT NULL,
|
109
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
113
110
|
col_string STRING(MAX),
|
114
111
|
col_int64 INT64,
|
115
112
|
col_float64 FLOAT64,
|
@@ -130,7 +127,7 @@ module ActiveRecord
|
|
130
127
|
col_array_json ARRAY<JSON>,
|
131
128
|
) PRIMARY KEY(id);
|
132
129
|
CREATE TABLE firms (
|
133
|
-
id INT64 NOT NULL,
|
130
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
134
131
|
name STRING(MAX),
|
135
132
|
rating INT64,
|
136
133
|
description STRING(MAX),
|
@@ -138,11 +135,11 @@ CREATE TABLE firms (
|
|
138
135
|
) PRIMARY KEY(id);
|
139
136
|
CREATE INDEX index_firms_on_account_id ON firms(account_id);
|
140
137
|
CREATE TABLE customers (
|
141
|
-
id INT64 NOT NULL,
|
138
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
142
139
|
name STRING(MAX),
|
143
140
|
) PRIMARY KEY(id);
|
144
141
|
CREATE TABLE accounts (
|
145
|
-
id INT64 NOT NULL,
|
142
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
146
143
|
customer_id INT64,
|
147
144
|
firm_id INT64,
|
148
145
|
name STRING(MAX),
|
@@ -150,47 +147,47 @@ CREATE TABLE accounts (
|
|
150
147
|
transactions_count INT64,
|
151
148
|
) PRIMARY KEY(id);
|
152
149
|
CREATE TABLE transactions (
|
153
|
-
id INT64 NOT NULL,
|
150
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
154
151
|
amount FLOAT64,
|
155
152
|
account_id INT64,
|
156
153
|
) PRIMARY KEY(id);
|
157
154
|
CREATE TABLE departments (
|
158
|
-
id INT64 NOT NULL,
|
155
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
159
156
|
name STRING(MAX),
|
160
157
|
resource_type STRING(255),
|
161
158
|
resource_id INT64,
|
162
159
|
) PRIMARY KEY(id);
|
163
160
|
CREATE INDEX index_departments_on_resource ON departments(resource_type, resource_id);
|
164
161
|
CREATE TABLE member_types (
|
165
|
-
id INT64 NOT NULL,
|
162
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
166
163
|
name STRING(MAX),
|
167
164
|
) PRIMARY KEY(id);
|
168
165
|
CREATE TABLE members (
|
169
|
-
id INT64 NOT NULL,
|
166
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
170
167
|
name STRING(MAX),
|
171
168
|
member_type_id INT64,
|
172
169
|
admittable_type STRING(255),
|
173
170
|
admittable_id INT64,
|
174
171
|
) PRIMARY KEY(id);
|
175
172
|
CREATE TABLE memberships (
|
176
|
-
id INT64 NOT NULL,
|
173
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
177
174
|
joined_on TIMESTAMP,
|
178
175
|
club_id INT64,
|
179
176
|
member_id INT64,
|
180
177
|
favourite BOOL,
|
181
178
|
) PRIMARY KEY(id);
|
182
179
|
CREATE TABLE clubs (
|
183
|
-
id INT64 NOT NULL,
|
180
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
184
181
|
name STRING(MAX),
|
185
182
|
) PRIMARY KEY(id);
|
186
183
|
CREATE TABLE authors (
|
187
|
-
id INT64 NOT NULL,
|
184
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
188
185
|
name STRING(MAX) NOT NULL,
|
189
186
|
registered_date DATE,
|
190
187
|
organization_id INT64,
|
191
188
|
) PRIMARY KEY(id);
|
192
189
|
CREATE TABLE posts (
|
193
|
-
id INT64 NOT NULL,
|
190
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
194
191
|
title STRING(MAX),
|
195
192
|
content STRING(MAX),
|
196
193
|
author_id INT64,
|
@@ -200,27 +197,27 @@ CREATE TABLE posts (
|
|
200
197
|
) PRIMARY KEY(id);
|
201
198
|
CREATE INDEX index_posts_on_author_id ON posts(author_id);
|
202
199
|
CREATE TABLE comments (
|
203
|
-
id INT64 NOT NULL,
|
200
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
204
201
|
comment STRING(MAX),
|
205
202
|
post_id INT64,
|
206
203
|
CONSTRAINT fk_rails_2fd19c0db7 FOREIGN KEY(post_id) REFERENCES posts(id),
|
207
204
|
) PRIMARY KEY(id);
|
208
205
|
CREATE TABLE addresses (
|
209
|
-
id INT64 NOT NULL,
|
206
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
210
207
|
line1 STRING(MAX),
|
211
208
|
postal_code STRING(MAX),
|
212
209
|
city STRING(MAX),
|
213
210
|
author_id INT64,
|
214
211
|
) PRIMARY KEY(id);
|
215
212
|
CREATE TABLE organizations (
|
216
|
-
id INT64 NOT NULL,
|
213
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
217
214
|
name STRING(MAX),
|
218
215
|
last_updated TIMESTAMP OPTIONS (
|
219
216
|
allow_commit_timestamp = true
|
220
217
|
),
|
221
218
|
) PRIMARY KEY(id);
|
222
219
|
CREATE TABLE singers (
|
223
|
-
singerid INT64 NOT NULL,
|
220
|
+
singerid INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
224
221
|
first_name STRING(200),
|
225
222
|
last_name STRING(MAX),
|
226
223
|
tracks_count INT64,
|
@@ -229,14 +226,14 @@ CREATE TABLE singers (
|
|
229
226
|
) PRIMARY KEY(singerid);
|
230
227
|
CREATE INDEX index_singers_on_last_name ON singers(last_name) STORING (tracks_count, first_name);
|
231
228
|
CREATE TABLE albums (
|
232
|
-
albumid INT64 NOT NULL,
|
229
|
+
albumid INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
233
230
|
singerid INT64 NOT NULL,
|
234
231
|
title STRING(MAX),
|
235
232
|
lock_version INT64,
|
236
233
|
) PRIMARY KEY(singerid, albumid),
|
237
234
|
INTERLEAVE IN PARENT singers ON DELETE NO ACTION;
|
238
235
|
CREATE TABLE tracks (
|
239
|
-
trackid INT64 NOT NULL,
|
236
|
+
trackid INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
240
237
|
singerid INT64 NOT NULL,
|
241
238
|
albumid INT64 NOT NULL,
|
242
239
|
title STRING(MAX),
|
@@ -267,7 +264,7 @@ INSERT INTO `schema_migrations` (version) VALUES
|
|
267
264
|
|
268
265
|
def expected_schema_sql_on_emulator_7_1
|
269
266
|
"CREATE TABLE all_types (
|
270
|
-
id INT64 NOT NULL,
|
267
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
271
268
|
col_string STRING(MAX),
|
272
269
|
col_int64 INT64,
|
273
270
|
col_float64 FLOAT64,
|
@@ -288,7 +285,7 @@ INSERT INTO `schema_migrations` (version) VALUES
|
|
288
285
|
col_array_json ARRAY<JSON>,
|
289
286
|
) PRIMARY KEY(id);
|
290
287
|
CREATE TABLE firms (
|
291
|
-
id INT64 NOT NULL,
|
288
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
292
289
|
name STRING(MAX),
|
293
290
|
rating INT64,
|
294
291
|
description STRING(MAX),
|
@@ -296,11 +293,11 @@ CREATE TABLE firms (
|
|
296
293
|
) PRIMARY KEY(id);
|
297
294
|
CREATE INDEX index_firms_on_account_id ON firms(account_id);
|
298
295
|
CREATE TABLE customers (
|
299
|
-
id INT64 NOT NULL,
|
296
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
300
297
|
name STRING(MAX),
|
301
298
|
) PRIMARY KEY(id);
|
302
299
|
CREATE TABLE accounts (
|
303
|
-
id INT64 NOT NULL,
|
300
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
304
301
|
customer_id INT64,
|
305
302
|
firm_id INT64,
|
306
303
|
name STRING(MAX),
|
@@ -308,47 +305,47 @@ CREATE TABLE accounts (
|
|
308
305
|
transactions_count INT64,
|
309
306
|
) PRIMARY KEY(id);
|
310
307
|
CREATE TABLE transactions (
|
311
|
-
id INT64 NOT NULL,
|
308
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
312
309
|
amount FLOAT64,
|
313
310
|
account_id INT64,
|
314
311
|
) PRIMARY KEY(id);
|
315
312
|
CREATE TABLE departments (
|
316
|
-
id INT64 NOT NULL,
|
313
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
317
314
|
name STRING(MAX),
|
318
315
|
resource_type STRING(255),
|
319
316
|
resource_id INT64,
|
320
317
|
) PRIMARY KEY(id);
|
321
318
|
CREATE INDEX index_departments_on_resource ON departments(resource_type, resource_id);
|
322
319
|
CREATE TABLE member_types (
|
323
|
-
id INT64 NOT NULL,
|
320
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
324
321
|
name STRING(MAX),
|
325
322
|
) PRIMARY KEY(id);
|
326
323
|
CREATE TABLE members (
|
327
|
-
id INT64 NOT NULL,
|
324
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
328
325
|
name STRING(MAX),
|
329
326
|
member_type_id INT64,
|
330
327
|
admittable_type STRING(255),
|
331
328
|
admittable_id INT64,
|
332
329
|
) PRIMARY KEY(id);
|
333
330
|
CREATE TABLE memberships (
|
334
|
-
id INT64 NOT NULL,
|
331
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
335
332
|
joined_on TIMESTAMP,
|
336
333
|
club_id INT64,
|
337
334
|
member_id INT64,
|
338
335
|
favourite BOOL,
|
339
336
|
) PRIMARY KEY(id);
|
340
337
|
CREATE TABLE clubs (
|
341
|
-
id INT64 NOT NULL,
|
338
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
342
339
|
name STRING(MAX),
|
343
340
|
) PRIMARY KEY(id);
|
344
341
|
CREATE TABLE authors (
|
345
|
-
id INT64 NOT NULL,
|
342
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
346
343
|
name STRING(MAX) NOT NULL,
|
347
344
|
registered_date DATE,
|
348
345
|
organization_id INT64,
|
349
346
|
) PRIMARY KEY(id);
|
350
347
|
CREATE TABLE posts (
|
351
|
-
id INT64 NOT NULL,
|
348
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
352
349
|
title STRING(MAX),
|
353
350
|
content STRING(MAX),
|
354
351
|
author_id INT64,
|
@@ -358,27 +355,27 @@ CREATE TABLE posts (
|
|
358
355
|
) PRIMARY KEY(id);
|
359
356
|
CREATE INDEX index_posts_on_author_id ON posts(author_id);
|
360
357
|
CREATE TABLE comments (
|
361
|
-
id INT64 NOT NULL,
|
358
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
362
359
|
comment STRING(MAX),
|
363
360
|
post_id INT64,
|
364
361
|
CONSTRAINT fk_rails_2fd19c0db7 FOREIGN KEY(post_id) REFERENCES posts(id),
|
365
362
|
) PRIMARY KEY(id);
|
366
363
|
CREATE TABLE addresses (
|
367
|
-
id INT64 NOT NULL,
|
364
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
368
365
|
line1 STRING(MAX),
|
369
366
|
postal_code STRING(MAX),
|
370
367
|
city STRING(MAX),
|
371
368
|
author_id INT64,
|
372
369
|
) PRIMARY KEY(id);
|
373
370
|
CREATE TABLE organizations (
|
374
|
-
id INT64 NOT NULL,
|
371
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
375
372
|
name STRING(MAX),
|
376
373
|
last_updated TIMESTAMP OPTIONS (
|
377
374
|
allow_commit_timestamp = true
|
378
375
|
),
|
379
376
|
) PRIMARY KEY(id);
|
380
377
|
CREATE TABLE singers (
|
381
|
-
singerid INT64 NOT NULL,
|
378
|
+
singerid INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
382
379
|
first_name STRING(200),
|
383
380
|
last_name STRING(MAX),
|
384
381
|
tracks_count INT64,
|
@@ -428,7 +425,7 @@ INSERT INTO `schema_migrations` (version) VALUES
|
|
428
425
|
sequence_kind = 'bit_reversed_positive'
|
429
426
|
);
|
430
427
|
CREATE TABLE accounts (
|
431
|
-
id INT64 NOT NULL,
|
428
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
432
429
|
customer_id INT64,
|
433
430
|
firm_id INT64,
|
434
431
|
name STRING(MAX),
|
@@ -436,14 +433,14 @@ CREATE TABLE accounts (
|
|
436
433
|
transactions_count INT64,
|
437
434
|
) PRIMARY KEY(id);
|
438
435
|
CREATE TABLE addresses (
|
439
|
-
id INT64 NOT NULL,
|
436
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
440
437
|
line1 STRING(MAX),
|
441
438
|
postal_code STRING(MAX),
|
442
439
|
city STRING(MAX),
|
443
440
|
author_id INT64,
|
444
441
|
) PRIMARY KEY(id);
|
445
442
|
CREATE TABLE all_types (
|
446
|
-
id INT64 NOT NULL,
|
443
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
447
444
|
col_string STRING(MAX),
|
448
445
|
col_int64 INT64,
|
449
446
|
col_float64 FLOAT64,
|
@@ -470,33 +467,33 @@ CREATE TABLE ar_internal_metadata (
|
|
470
467
|
updated_at TIMESTAMP NOT NULL,
|
471
468
|
) PRIMARY KEY(key);
|
472
469
|
CREATE TABLE authors (
|
473
|
-
id INT64 NOT NULL,
|
470
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
474
471
|
name STRING(MAX) NOT NULL,
|
475
472
|
registered_date DATE,
|
476
473
|
organization_id INT64,
|
477
474
|
) PRIMARY KEY(id);
|
478
475
|
CREATE TABLE clubs (
|
479
|
-
id INT64 NOT NULL,
|
476
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
480
477
|
name STRING(MAX),
|
481
478
|
) PRIMARY KEY(id);
|
482
479
|
CREATE TABLE comments (
|
483
|
-
id INT64 NOT NULL,
|
480
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
484
481
|
comment STRING(MAX),
|
485
482
|
post_id INT64,
|
486
483
|
) PRIMARY KEY(id);
|
487
484
|
CREATE TABLE customers (
|
488
|
-
id INT64 NOT NULL,
|
485
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
489
486
|
name STRING(MAX),
|
490
487
|
) PRIMARY KEY(id);
|
491
488
|
CREATE TABLE departments (
|
492
|
-
id INT64 NOT NULL,
|
489
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
493
490
|
name STRING(MAX),
|
494
491
|
resource_type STRING(255),
|
495
492
|
resource_id INT64,
|
496
493
|
) PRIMARY KEY(id);
|
497
494
|
CREATE INDEX index_departments_on_resource ON departments(resource_type, resource_id);
|
498
495
|
CREATE TABLE firms (
|
499
|
-
id INT64 NOT NULL,
|
496
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
500
497
|
name STRING(MAX),
|
501
498
|
rating INT64,
|
502
499
|
description STRING(MAX),
|
@@ -504,32 +501,32 @@ CREATE TABLE firms (
|
|
504
501
|
) PRIMARY KEY(id);
|
505
502
|
CREATE INDEX index_firms_on_account_id ON firms(account_id);
|
506
503
|
CREATE TABLE member_types (
|
507
|
-
id INT64 NOT NULL,
|
504
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
508
505
|
name STRING(MAX),
|
509
506
|
) PRIMARY KEY(id);
|
510
507
|
CREATE TABLE members (
|
511
|
-
id INT64 NOT NULL,
|
508
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
512
509
|
name STRING(MAX),
|
513
510
|
member_type_id INT64,
|
514
511
|
admittable_type STRING(255),
|
515
512
|
admittable_id INT64,
|
516
513
|
) PRIMARY KEY(id);
|
517
514
|
CREATE TABLE memberships (
|
518
|
-
id INT64 NOT NULL,
|
515
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
519
516
|
joined_on TIMESTAMP,
|
520
517
|
club_id INT64,
|
521
518
|
member_id INT64,
|
522
519
|
favourite BOOL,
|
523
520
|
) PRIMARY KEY(id);
|
524
521
|
CREATE TABLE organizations (
|
525
|
-
id INT64 NOT NULL,
|
522
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
526
523
|
name STRING(MAX),
|
527
524
|
last_updated TIMESTAMP OPTIONS (
|
528
525
|
allow_commit_timestamp = true
|
529
526
|
),
|
530
527
|
) PRIMARY KEY(id);
|
531
528
|
CREATE TABLE posts (
|
532
|
-
id INT64 NOT NULL,
|
529
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
533
530
|
title STRING(MAX),
|
534
531
|
content STRING(MAX),
|
535
532
|
author_id INT64,
|
@@ -543,7 +540,7 @@ CREATE TABLE schema_migrations (
|
|
543
540
|
version STRING(MAX) NOT NULL,
|
544
541
|
) PRIMARY KEY(version);
|
545
542
|
CREATE TABLE singers (
|
546
|
-
singerid INT64 NOT NULL,
|
543
|
+
singerid INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
547
544
|
first_name STRING(200),
|
548
545
|
last_name STRING(MAX),
|
549
546
|
tracks_count INT64,
|
@@ -574,7 +571,7 @@ CREATE TABLE table_with_sequence (
|
|
574
571
|
age INT64 NOT NULL,
|
575
572
|
) PRIMARY KEY(id);
|
576
573
|
CREATE TABLE transactions (
|
577
|
-
id INT64 NOT NULL,
|
574
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
578
575
|
amount FLOAT64,
|
579
576
|
account_id INT64,
|
580
577
|
) PRIMARY KEY(id);
|
@@ -589,7 +586,7 @@ INSERT INTO `schema_migrations` (version) VALUES
|
|
589
586
|
sequence_kind = 'bit_reversed_positive'
|
590
587
|
);
|
591
588
|
CREATE TABLE accounts (
|
592
|
-
id INT64 NOT NULL,
|
589
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
593
590
|
customer_id INT64,
|
594
591
|
firm_id INT64,
|
595
592
|
name STRING(MAX),
|
@@ -597,14 +594,14 @@ CREATE TABLE accounts (
|
|
597
594
|
transactions_count INT64,
|
598
595
|
) PRIMARY KEY(id);
|
599
596
|
CREATE TABLE addresses (
|
600
|
-
id INT64 NOT NULL,
|
597
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
601
598
|
line1 STRING(MAX),
|
602
599
|
postal_code STRING(MAX),
|
603
600
|
city STRING(MAX),
|
604
601
|
author_id INT64,
|
605
602
|
) PRIMARY KEY(id);
|
606
603
|
CREATE TABLE all_types (
|
607
|
-
id INT64 NOT NULL,
|
604
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
608
605
|
col_string STRING(MAX),
|
609
606
|
col_int64 INT64,
|
610
607
|
col_float64 FLOAT64,
|
@@ -631,33 +628,33 @@ CREATE TABLE ar_internal_metadata (
|
|
631
628
|
updated_at TIMESTAMP NOT NULL,
|
632
629
|
) PRIMARY KEY(key);
|
633
630
|
CREATE TABLE authors (
|
634
|
-
id INT64 NOT NULL,
|
631
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
635
632
|
name STRING(MAX) NOT NULL,
|
636
633
|
registered_date DATE,
|
637
634
|
organization_id INT64,
|
638
635
|
) PRIMARY KEY(id);
|
639
636
|
CREATE TABLE clubs (
|
640
|
-
id INT64 NOT NULL,
|
637
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
641
638
|
name STRING(MAX),
|
642
639
|
) PRIMARY KEY(id);
|
643
640
|
CREATE TABLE comments (
|
644
|
-
id INT64 NOT NULL,
|
641
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
645
642
|
comment STRING(MAX),
|
646
643
|
post_id INT64,
|
647
644
|
) PRIMARY KEY(id);
|
648
645
|
CREATE TABLE customers (
|
649
|
-
id INT64 NOT NULL,
|
646
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
650
647
|
name STRING(MAX),
|
651
648
|
) PRIMARY KEY(id);
|
652
649
|
CREATE TABLE departments (
|
653
|
-
id INT64 NOT NULL,
|
650
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
654
651
|
name STRING(MAX),
|
655
652
|
resource_type STRING(255),
|
656
653
|
resource_id INT64,
|
657
654
|
) PRIMARY KEY(id);
|
658
655
|
CREATE INDEX index_departments_on_resource ON departments(resource_type, resource_id);
|
659
656
|
CREATE TABLE firms (
|
660
|
-
id INT64 NOT NULL,
|
657
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
661
658
|
name STRING(MAX),
|
662
659
|
rating INT64,
|
663
660
|
description STRING(MAX),
|
@@ -665,32 +662,32 @@ CREATE TABLE firms (
|
|
665
662
|
) PRIMARY KEY(id);
|
666
663
|
CREATE INDEX index_firms_on_account_id ON firms(account_id);
|
667
664
|
CREATE TABLE member_types (
|
668
|
-
id INT64 NOT NULL,
|
665
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
669
666
|
name STRING(MAX),
|
670
667
|
) PRIMARY KEY(id);
|
671
668
|
CREATE TABLE members (
|
672
|
-
id INT64 NOT NULL,
|
669
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
673
670
|
name STRING(MAX),
|
674
671
|
member_type_id INT64,
|
675
672
|
admittable_type STRING(255),
|
676
673
|
admittable_id INT64,
|
677
674
|
) PRIMARY KEY(id);
|
678
675
|
CREATE TABLE memberships (
|
679
|
-
id INT64 NOT NULL,
|
676
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
680
677
|
joined_on TIMESTAMP,
|
681
678
|
club_id INT64,
|
682
679
|
member_id INT64,
|
683
680
|
favourite BOOL,
|
684
681
|
) PRIMARY KEY(id);
|
685
682
|
CREATE TABLE organizations (
|
686
|
-
id INT64 NOT NULL,
|
683
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
687
684
|
name STRING(MAX),
|
688
685
|
last_updated TIMESTAMP OPTIONS (
|
689
686
|
allow_commit_timestamp = true
|
690
687
|
),
|
691
688
|
) PRIMARY KEY(id);
|
692
689
|
CREATE TABLE posts (
|
693
|
-
id INT64 NOT NULL,
|
690
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
694
691
|
title STRING(MAX),
|
695
692
|
content STRING(MAX),
|
696
693
|
author_id INT64,
|
@@ -704,7 +701,7 @@ CREATE TABLE schema_migrations (
|
|
704
701
|
version STRING(MAX) NOT NULL,
|
705
702
|
) PRIMARY KEY(version);
|
706
703
|
CREATE TABLE singers (
|
707
|
-
singerid INT64 NOT NULL,
|
704
|
+
singerid INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
708
705
|
first_name STRING(200),
|
709
706
|
last_name STRING(MAX),
|
710
707
|
tracks_count INT64,
|
@@ -735,7 +732,7 @@ CREATE TABLE table_with_sequence (
|
|
735
732
|
age INT64 NOT NULL,
|
736
733
|
) PRIMARY KEY(id);
|
737
734
|
CREATE TABLE transactions (
|
738
|
-
id INT64 NOT NULL,
|
735
|
+
id INT64 NOT NULL GENERATED BY DEFAULT AS IDENTITY (BIT_REVERSED_POSITIVE),
|
739
736
|
amount FLOAT64,
|
740
737
|
account_id INT64,
|
741
738
|
) PRIMARY KEY(id);
|
@@ -260,12 +260,18 @@ module ActiveRecord
|
|
260
260
|
end
|
261
261
|
|
262
262
|
def test_create_record_with_sequence_using_mutations
|
263
|
-
|
264
|
-
|
265
|
-
|
263
|
+
reset_value = TableWithSequence.connection.use_client_side_id_for_mutations
|
264
|
+
begin
|
265
|
+
TableWithSequence.connection.use_client_side_id_for_mutations = false
|
266
|
+
err = assert_raises ActiveRecord::StatementInvalid do
|
267
|
+
TableWithSequence.transaction isolation: :buffered_mutations do
|
268
|
+
TableWithSequence.create name: "Foo", age: 50
|
269
|
+
end
|
266
270
|
end
|
271
|
+
assert_equal "Mutations cannot be used to create records that use an auto-generated primary key.", err.message
|
272
|
+
ensure
|
273
|
+
TableWithSequence.connection.use_client_side_id_for_mutations = reset_value
|
267
274
|
end
|
268
|
-
assert_equal "Mutations cannot be used to create records that use a sequence to generate the primary key. TableWithSequence uses test_sequence.", err.message
|
269
275
|
end
|
270
276
|
end
|
271
277
|
end
|
data/acceptance/test_helper.rb
CHANGED
@@ -27,14 +27,27 @@ end
|
|
27
27
|
$spanner_test_database = "ar-test-#{SecureRandom.hex 4}"
|
28
28
|
|
29
29
|
def connector_config
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
30
|
+
if ActiveRecord.gem_version >= Gem::Version.create("7.1.0")
|
31
|
+
{
|
32
|
+
"adapter" => "spanner",
|
33
|
+
"emulator_host" => ENV["SPANNER_EMULATOR_HOST"],
|
34
|
+
"project" => ENV["SPANNER_TEST_PROJECT"],
|
35
|
+
"instance" => ENV["SPANNER_TEST_INSTANCE"],
|
36
|
+
"credentials" => ENV["SPANNER_TEST_KEYFILE"],
|
37
|
+
"database" => $spanner_test_database,
|
38
|
+
"default_sequence_kind" => "BIT_REVERSED_POSITIVE",
|
39
|
+
"use_client_side_id_for_mutations" => true,
|
40
|
+
}
|
41
|
+
else
|
42
|
+
{
|
43
|
+
"adapter" => "spanner",
|
44
|
+
"emulator_host" => ENV["SPANNER_EMULATOR_HOST"],
|
45
|
+
"project" => ENV["SPANNER_TEST_PROJECT"],
|
46
|
+
"instance" => ENV["SPANNER_TEST_INSTANCE"],
|
47
|
+
"credentials" => ENV["SPANNER_TEST_KEYFILE"],
|
48
|
+
"database" => $spanner_test_database,
|
49
|
+
}
|
50
|
+
end
|
38
51
|
end
|
39
52
|
|
40
53
|
def spanner
|
@@ -27,7 +27,7 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.add_dependency "google-cloud-spanner", "~> 2.18"
|
28
28
|
# Pin gRPC to 1.64.3, as 1.65 and 1.66 cause test runs to hang randomly.
|
29
29
|
spec.add_dependency "grpc", "1.64.3"
|
30
|
-
spec.add_runtime_dependency "activerecord", [">=
|
30
|
+
spec.add_runtime_dependency "activerecord", [">= 7.0", "< 9"]
|
31
31
|
|
32
32
|
spec.add_development_dependency "autotest-suffix", "~> 1.1"
|
33
33
|
spec.add_development_dependency "bundler", "~> 2.0"
|
data/examples/snippets/Rakefile
CHANGED
@@ -32,6 +32,7 @@ task :all do
|
|
32
32
|
samples.delete "interleaved-tables" if less_than_7_1
|
33
33
|
samples.delete "interleaved-tables-before-7.1" unless less_than_7_1
|
34
34
|
samples.delete "bit-reversed-sequence" if less_than_7_1
|
35
|
+
samples.delete "auto-generated-primary-key" if less_than_7_1
|
35
36
|
samples.delete "query-logs" if less_than_7_1
|
36
37
|
samples.each do |sample|
|
37
38
|
run_sample sample
|