activerecord-spanner-adapter 1.2.1 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/CODEOWNERS +1 -1
- data/.github/blunderbuss.yml +1 -1
- data/.release-please-manifest.json +1 -1
- data/CHANGELOG.md +29 -0
- data/README.md +7 -2
- data/acceptance/cases/migration/schema_dumper_test.rb +69 -0
- data/acceptance/cases/models/generated_column_test.rb +21 -7
- data/acceptance/cases/models/interleave_test.rb +36 -0
- data/acceptance/cases/models/logging_test.rb +53 -0
- data/acceptance/cases/models/query_test.rb +6 -1
- data/acceptance/cases/tasks/database_tasks_test.rb +407 -0
- data/acceptance/models/album_partial_disabled.rb +17 -0
- data/acceptance/schema/schema.rb +139 -134
- data/acceptance/test_helper.rb +2 -0
- data/examples/snippets/array-data-type/db/schema.rb +8 -3
- data/examples/snippets/bulk-insert/db/schema.rb +9 -4
- data/examples/snippets/commit-timestamp/db/schema.rb +11 -6
- data/examples/snippets/create-records/db/schema.rb +9 -4
- data/examples/snippets/date-data-type/db/schema.rb +8 -3
- data/examples/snippets/generated-column/db/schema.rb +6 -1
- data/examples/snippets/hints/db/schema.rb +6 -1
- data/examples/snippets/interleaved-tables/README.md +2 -2
- data/examples/snippets/interleaved-tables/db/schema.rb +5 -0
- data/examples/snippets/migrations/db/schema.rb +10 -5
- data/examples/snippets/mutations/db/schema.rb +9 -4
- data/examples/snippets/optimistic-locking/db/schema.rb +9 -4
- data/examples/snippets/partitioned-dml/db/schema.rb +5 -0
- data/examples/snippets/quickstart/db/schema.rb +9 -4
- data/examples/snippets/read-only-transactions/db/schema.rb +5 -0
- data/examples/snippets/read-write-transactions/db/schema.rb +9 -4
- data/examples/snippets/stale-reads/db/schema.rb +5 -0
- data/examples/snippets/timestamp-data-type/db/schema.rb +8 -3
- data/lib/active_record/connection_adapters/spanner/column.rb +23 -0
- data/lib/active_record/connection_adapters/spanner/database_statements.rb +7 -4
- data/lib/active_record/connection_adapters/spanner/quoting.rb +9 -0
- data/lib/active_record/connection_adapters/spanner/schema_creation.rb +17 -4
- data/lib/active_record/connection_adapters/spanner/schema_definitions.rb +11 -2
- data/lib/active_record/connection_adapters/spanner/schema_dumper.rb +56 -0
- data/lib/active_record/connection_adapters/spanner/schema_statements.rb +56 -9
- data/lib/active_record/connection_adapters/spanner/type_metadata.rb +19 -4
- data/lib/active_record/connection_adapters/spanner_adapter.rb +11 -0
- data/lib/active_record/tasks/spanner_database_tasks.rb +18 -4
- data/lib/active_record/type/spanner/spanner_active_record_converter.rb +10 -0
- data/lib/active_record/type/spanner/time.rb +10 -3
- data/lib/activerecord_spanner_adapter/base.rb +41 -27
- data/lib/activerecord_spanner_adapter/connection.rb +8 -3
- data/lib/activerecord_spanner_adapter/information_schema.rb +52 -3
- data/lib/activerecord_spanner_adapter/table/column.rb +7 -2
- data/lib/activerecord_spanner_adapter/version.rb +1 -1
- data/lib/arel/visitors/spanner.rb +8 -2
- metadata +8 -2
data/acceptance/schema/schema.rb
CHANGED
@@ -6,140 +6,145 @@
|
|
6
6
|
|
7
7
|
# frozen_string_literal: true
|
8
8
|
|
9
|
-
|
10
|
-
ActiveRecord::
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
t
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
t
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
9
|
+
def create_tables_in_test_schema
|
10
|
+
ActiveRecord::Schema.define(version: 1) do
|
11
|
+
ActiveRecord::Base.connection.ddl_batch do
|
12
|
+
create_table :all_types, id: { limit: 8 } do |t|
|
13
|
+
t.column :col_string, :string
|
14
|
+
t.column :col_int64, :bigint
|
15
|
+
t.column :col_float64, :float
|
16
|
+
t.column :col_numeric, :numeric
|
17
|
+
t.column :col_bool, :boolean
|
18
|
+
t.column :col_bytes, :binary
|
19
|
+
t.column :col_date, :date
|
20
|
+
t.column :col_timestamp, :datetime
|
21
|
+
t.column :col_json, :json
|
22
|
+
|
23
|
+
t.column :col_array_string, :string, array: true
|
24
|
+
t.column :col_array_int64, :bigint, array: true
|
25
|
+
t.column :col_array_float64, :float, array: true
|
26
|
+
t.column :col_array_numeric, :numeric, array: true
|
27
|
+
t.column :col_array_bool, :boolean, array: true
|
28
|
+
t.column :col_array_bytes, :binary, array: true
|
29
|
+
t.column :col_array_date, :date, array: true
|
30
|
+
t.column :col_array_timestamp, :datetime, array: true
|
31
|
+
t.column :col_array_json, :json, array: true
|
32
|
+
end
|
33
|
+
|
34
|
+
create_table :firms do |t|
|
35
|
+
t.string :name
|
36
|
+
t.integer :rating
|
37
|
+
t.string :description
|
38
|
+
t.references :account
|
39
|
+
end
|
40
|
+
|
41
|
+
create_table :customers do |t|
|
42
|
+
t.string :name
|
43
|
+
end
|
44
|
+
|
45
|
+
create_table :accounts do |t|
|
46
|
+
t.references :customer, index: false
|
47
|
+
t.references :firm, index: false
|
48
|
+
t.string :name
|
49
|
+
t.integer :credit_limit
|
50
|
+
t.integer :transactions_count
|
51
|
+
end
|
52
|
+
|
53
|
+
create_table :transactions do |t|
|
54
|
+
t.float :amount
|
55
|
+
t.references :account, index: false
|
56
|
+
end
|
57
|
+
|
58
|
+
create_table :departments do |t|
|
59
|
+
t.string :name
|
60
|
+
t.references :resource, polymorphic: true, index: { name: "index_departments_on_resource" }
|
61
|
+
end
|
62
|
+
|
63
|
+
create_table :member_types do |t|
|
64
|
+
t.string :name
|
65
|
+
end
|
66
|
+
|
67
|
+
create_table :members do |t|
|
68
|
+
t.string :name
|
69
|
+
t.references :member_type, index: false
|
70
|
+
t.references :admittable, polymorphic: true, index: false
|
71
|
+
end
|
72
|
+
|
73
|
+
create_table :memberships do |t|
|
74
|
+
t.datetime :joined_on
|
75
|
+
t.references :club, index: false
|
76
|
+
t.references :member, index: false
|
77
|
+
t.boolean :favourite
|
78
|
+
end
|
79
|
+
|
80
|
+
create_table :clubs do |t|
|
81
|
+
t.string :name
|
82
|
+
end
|
83
|
+
|
84
|
+
create_table :authors do |t|
|
85
|
+
t.string :name, null: false
|
86
|
+
t.date :registered_date
|
87
|
+
t.references :organization, index: false
|
88
|
+
end
|
89
|
+
|
90
|
+
create_table :posts do |t|
|
91
|
+
t.string :title
|
92
|
+
t.string :content
|
93
|
+
t.references :author
|
94
|
+
t.integer :comments_count
|
95
|
+
t.date :post_date
|
96
|
+
t.time :published_time
|
97
|
+
end
|
98
|
+
|
99
|
+
create_table :comments do |t|
|
100
|
+
t.string :comment
|
101
|
+
t.references :post, index: false, foreign_key: true
|
102
|
+
end
|
103
|
+
|
104
|
+
create_table :addresses do |t|
|
105
|
+
t.string :line1
|
106
|
+
t.string :postal_code
|
107
|
+
t.string :city
|
108
|
+
t.references :author, index: false
|
109
|
+
end
|
110
|
+
|
111
|
+
create_table :organizations do |t|
|
112
|
+
t.string :name
|
113
|
+
t.datetime :last_updated, allow_commit_timestamp: true
|
114
|
+
end
|
115
|
+
|
116
|
+
create_table :singers, id: false do |t|
|
117
|
+
t.primary_key :singerid
|
118
|
+
t.column :first_name, :string, limit: 200
|
119
|
+
t.string :last_name
|
120
|
+
t.integer :tracks_count
|
121
|
+
t.integer :lock_version
|
122
|
+
t.virtual :full_name, type: :string, as: "COALESCE(first_name || ' ', '') || last_name", stored: true
|
123
|
+
end
|
124
|
+
|
125
|
+
create_table :albums, id: false do |t|
|
126
|
+
t.interleave_in :singers
|
127
|
+
t.primary_key :albumid
|
128
|
+
# `singerid` is part of the primary key in the table definition, but it is not visible to ActiveRecord as part of
|
129
|
+
# the primary key, to prevent ActiveRecord from considering this to be an entity with a composite primary key.
|
130
|
+
t.parent_key :singerid
|
131
|
+
t.string :title
|
132
|
+
t.integer :lock_version
|
133
|
+
end
|
134
|
+
|
135
|
+
create_table :tracks, id: false do |t|
|
136
|
+
# `:cascade` causes all tracks that belong to an album to automatically be deleted when an album is deleted.
|
137
|
+
t.interleave_in :albums, :cascade
|
138
|
+
t.primary_key :trackid
|
139
|
+
t.parent_key :singerid
|
140
|
+
t.parent_key :albumid
|
141
|
+
t.string :title
|
142
|
+
t.numeric :duration
|
143
|
+
t.integer :lock_version
|
144
|
+
end
|
145
|
+
|
146
|
+
add_index :tracks, [:singerid, :albumid, :title], interleave_in: :albums, null_filtered: true, unique: false
|
133
147
|
|
134
|
-
create_table :tracks, id: false do |t|
|
135
|
-
# `:cascade` causes all tracks that belong to an album to automatically be deleted when an album is deleted.
|
136
|
-
t.interleave_in :albums, :cascade
|
137
|
-
t.primary_key :trackid
|
138
|
-
t.parent_key :singerid
|
139
|
-
t.parent_key :albumid
|
140
|
-
t.string :title
|
141
|
-
t.numeric :duration
|
142
|
-
t.integer :lock_version
|
143
148
|
end
|
144
149
|
end
|
145
|
-
end
|
150
|
+
end
|
data/acceptance/test_helper.rb
CHANGED
@@ -64,6 +64,7 @@ def create_test_database
|
|
64
64
|
puts "Loading test schema..."
|
65
65
|
ActiveRecord::Base.establish_connection connector_config
|
66
66
|
require_relative "schema/schema"
|
67
|
+
create_tables_in_test_schema
|
67
68
|
end
|
68
69
|
|
69
70
|
def drop_test_database
|
@@ -83,6 +84,7 @@ def load_test_schema
|
|
83
84
|
ActiveRecord::Base.establish_connection connector_config
|
84
85
|
|
85
86
|
require_relative "schema/schema"
|
87
|
+
create_tables_in_test_schema
|
86
88
|
end
|
87
89
|
|
88
90
|
module SpannerAdapter
|
@@ -2,8 +2,8 @@
|
|
2
2
|
# of editing this file, please use the migrations feature of Active Record to
|
3
3
|
# incrementally modify your database, and then regenerate this schema definition.
|
4
4
|
#
|
5
|
-
# This file is the source Rails uses to define your schema when running `rails
|
6
|
-
# db:schema:load`. When creating a new database, `rails db:schema:load` tends to
|
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
7
|
# be faster and is potentially less error prone than running all of your
|
8
8
|
# migrations from scratch. Old migrations may fail to apply correctly if those
|
9
9
|
# migrations use external dependencies or application code.
|
@@ -11,8 +11,9 @@
|
|
11
11
|
# It's strongly recommended that you check this file into your version control system.
|
12
12
|
|
13
13
|
ActiveRecord::Schema.define(version: 1) do
|
14
|
+
connection.start_batch_ddl
|
14
15
|
|
15
|
-
create_table "entity_with_array_types", force: :cascade do |t|
|
16
|
+
create_table "entity_with_array_types", id: { limit: 8 }, force: :cascade do |t|
|
16
17
|
t.string "col_array_string"
|
17
18
|
t.integer "col_array_int64", limit: 8
|
18
19
|
t.float "col_array_float64"
|
@@ -23,4 +24,8 @@ ActiveRecord::Schema.define(version: 1) do
|
|
23
24
|
t.time "col_array_timestamp"
|
24
25
|
end
|
25
26
|
|
27
|
+
connection.run_batch
|
28
|
+
rescue
|
29
|
+
abort_batch
|
30
|
+
raise
|
26
31
|
end
|
@@ -2,8 +2,8 @@
|
|
2
2
|
# of editing this file, please use the migrations feature of Active Record to
|
3
3
|
# incrementally modify your database, and then regenerate this schema definition.
|
4
4
|
#
|
5
|
-
# This file is the source Rails uses to define your schema when running `rails
|
6
|
-
# db:schema:load`. When creating a new database, `rails db:schema:load` tends to
|
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
7
|
# be faster and is potentially less error prone than running all of your
|
8
8
|
# migrations from scratch. Old migrations may fail to apply correctly if those
|
9
9
|
# migrations use external dependencies or application code.
|
@@ -11,16 +11,21 @@
|
|
11
11
|
# It's strongly recommended that you check this file into your version control system.
|
12
12
|
|
13
13
|
ActiveRecord::Schema.define(version: 1) do
|
14
|
+
connection.start_batch_ddl
|
14
15
|
|
15
|
-
create_table "albums", force: :cascade do |t|
|
16
|
+
create_table "albums", id: { limit: 8 }, force: :cascade do |t|
|
16
17
|
t.string "title"
|
17
18
|
t.integer "singer_id", limit: 8
|
18
19
|
end
|
19
20
|
|
20
|
-
create_table "singers", force: :cascade do |t|
|
21
|
+
create_table "singers", id: { limit: 8 }, force: :cascade do |t|
|
21
22
|
t.string "first_name"
|
22
23
|
t.string "last_name"
|
23
24
|
end
|
24
25
|
|
25
26
|
add_foreign_key "albums", "singers"
|
27
|
+
connection.run_batch
|
28
|
+
rescue
|
29
|
+
abort_batch
|
30
|
+
raise
|
26
31
|
end
|
@@ -2,8 +2,8 @@
|
|
2
2
|
# of editing this file, please use the migrations feature of Active Record to
|
3
3
|
# incrementally modify your database, and then regenerate this schema definition.
|
4
4
|
#
|
5
|
-
# This file is the source Rails uses to define your schema when running `rails
|
6
|
-
# db:schema:load`. When creating a new database, `rails db:schema:load` tends to
|
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
7
|
# be faster and is potentially less error prone than running all of your
|
8
8
|
# migrations from scratch. Old migrations may fail to apply correctly if those
|
9
9
|
# migrations use external dependencies or application code.
|
@@ -11,19 +11,24 @@
|
|
11
11
|
# It's strongly recommended that you check this file into your version control system.
|
12
12
|
|
13
13
|
ActiveRecord::Schema.define(version: 1) do
|
14
|
+
connection.start_batch_ddl
|
14
15
|
|
15
|
-
create_table "albums", force: :cascade do |t|
|
16
|
+
create_table "albums", id: { limit: 8 }, force: :cascade do |t|
|
16
17
|
t.string "title"
|
17
18
|
t.decimal "marketing_budget"
|
18
19
|
t.integer "singer_id", limit: 8
|
19
|
-
t.time "last_updated"
|
20
|
+
t.time "last_updated", allow_commit_timestamp: true
|
20
21
|
end
|
21
22
|
|
22
|
-
create_table "singers", force: :cascade do |t|
|
23
|
+
create_table "singers", id: { limit: 8 }, force: :cascade do |t|
|
23
24
|
t.string "first_name"
|
24
25
|
t.string "last_name"
|
25
|
-
t.time "last_updated"
|
26
|
+
t.time "last_updated", allow_commit_timestamp: true
|
26
27
|
end
|
27
28
|
|
28
29
|
add_foreign_key "albums", "singers"
|
30
|
+
connection.run_batch
|
31
|
+
rescue
|
32
|
+
abort_batch
|
33
|
+
raise
|
29
34
|
end
|
@@ -2,8 +2,8 @@
|
|
2
2
|
# of editing this file, please use the migrations feature of Active Record to
|
3
3
|
# incrementally modify your database, and then regenerate this schema definition.
|
4
4
|
#
|
5
|
-
# This file is the source Rails uses to define your schema when running `rails
|
6
|
-
# db:schema:load`. When creating a new database, `rails db:schema:load` tends to
|
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
7
|
# be faster and is potentially less error prone than running all of your
|
8
8
|
# migrations from scratch. Old migrations may fail to apply correctly if those
|
9
9
|
# migrations use external dependencies or application code.
|
@@ -11,16 +11,21 @@
|
|
11
11
|
# It's strongly recommended that you check this file into your version control system.
|
12
12
|
|
13
13
|
ActiveRecord::Schema.define(version: 1) do
|
14
|
+
connection.start_batch_ddl
|
14
15
|
|
15
|
-
create_table "albums", force: :cascade do |t|
|
16
|
+
create_table "albums", id: { limit: 8 }, force: :cascade do |t|
|
16
17
|
t.string "title"
|
17
18
|
t.integer "singer_id", limit: 8
|
18
19
|
end
|
19
20
|
|
20
|
-
create_table "singers", force: :cascade do |t|
|
21
|
+
create_table "singers", id: { limit: 8 }, force: :cascade do |t|
|
21
22
|
t.string "first_name"
|
22
23
|
t.string "last_name"
|
23
24
|
end
|
24
25
|
|
25
26
|
add_foreign_key "albums", "singers"
|
27
|
+
connection.run_batch
|
28
|
+
rescue
|
29
|
+
abort_batch
|
30
|
+
raise
|
26
31
|
end
|
@@ -2,8 +2,8 @@
|
|
2
2
|
# of editing this file, please use the migrations feature of Active Record to
|
3
3
|
# incrementally modify your database, and then regenerate this schema definition.
|
4
4
|
#
|
5
|
-
# This file is the source Rails uses to define your schema when running `rails
|
6
|
-
# db:schema:load`. When creating a new database, `rails db:schema:load` tends to
|
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
7
|
# be faster and is potentially less error prone than running all of your
|
8
8
|
# migrations from scratch. Old migrations may fail to apply correctly if those
|
9
9
|
# migrations use external dependencies or application code.
|
@@ -11,11 +11,16 @@
|
|
11
11
|
# It's strongly recommended that you check this file into your version control system.
|
12
12
|
|
13
13
|
ActiveRecord::Schema.define(version: 1) do
|
14
|
+
connection.start_batch_ddl
|
14
15
|
|
15
|
-
create_table "singers", force: :cascade do |t|
|
16
|
+
create_table "singers", id: { limit: 8 }, force: :cascade do |t|
|
16
17
|
t.string "first_name"
|
17
18
|
t.string "last_name"
|
18
19
|
t.date "birth_date"
|
19
20
|
end
|
20
21
|
|
22
|
+
connection.run_batch
|
23
|
+
rescue
|
24
|
+
abort_batch
|
25
|
+
raise
|
21
26
|
end
|
@@ -11,11 +11,16 @@
|
|
11
11
|
# It's strongly recommended that you check this file into your version control system.
|
12
12
|
|
13
13
|
ActiveRecord::Schema.define(version: 1) do
|
14
|
+
connection.start_batch_ddl
|
14
15
|
|
15
16
|
create_table "singers", id: { limit: 8 }, force: :cascade do |t|
|
16
17
|
t.string "first_name", limit: 100
|
17
18
|
t.string "last_name", limit: 200, null: false
|
18
|
-
t.
|
19
|
+
t.virtual "full_name", type: :string, limit: 300, null: false, as: "COALESCE(first_name || ' ', '') || last_name", stored: true
|
19
20
|
end
|
20
21
|
|
22
|
+
connection.run_batch
|
23
|
+
rescue
|
24
|
+
abort_batch
|
25
|
+
raise
|
21
26
|
end
|
@@ -11,6 +11,7 @@
|
|
11
11
|
# It's strongly recommended that you check this file into your version control system.
|
12
12
|
|
13
13
|
ActiveRecord::Schema.define(version: 1) do
|
14
|
+
connection.start_batch_ddl
|
14
15
|
|
15
16
|
create_table "albums", id: { limit: 8 }, force: :cascade do |t|
|
16
17
|
t.string "title"
|
@@ -20,9 +21,13 @@ ActiveRecord::Schema.define(version: 1) do
|
|
20
21
|
create_table "singers", id: { limit: 8 }, force: :cascade do |t|
|
21
22
|
t.string "first_name", limit: 100
|
22
23
|
t.string "last_name", limit: 200, null: false
|
23
|
-
t.
|
24
|
+
t.virtual "full_name", type: :string, limit: 300, null: false, as: "COALESCE(first_name || ' ', '') || last_name", stored: true
|
24
25
|
t.index ["full_name"], name: "index_singers_on_full_name", order: { full_name: :asc }
|
25
26
|
end
|
26
27
|
|
27
28
|
add_foreign_key "albums", "singers"
|
29
|
+
connection.run_batch
|
30
|
+
rescue
|
31
|
+
abort_batch
|
32
|
+
raise
|
28
33
|
end
|
@@ -85,7 +85,7 @@ end
|
|
85
85
|
|
86
86
|
## Models for Interleaved Tables
|
87
87
|
The model definition for an interleaved table (a child table) must use the `primary_keys=col1, col2, ...`
|
88
|
-
function from the `
|
88
|
+
function from the `composite_primary_keys` gem.
|
89
89
|
|
90
90
|
An interleaved table parent/child relationship must be modelled as a `belongs_to`/`has_many` association in
|
91
91
|
ActiveRecord. As the columns that are used to reference a parent record use a custom column name, it is required to also
|
@@ -161,4 +161,4 @@ Run the application with the command
|
|
161
161
|
|
162
162
|
```bash
|
163
163
|
bundle exec rake run
|
164
|
-
```
|
164
|
+
```
|
@@ -11,6 +11,7 @@
|
|
11
11
|
# It's strongly recommended that you check this file into your version control system.
|
12
12
|
|
13
13
|
ActiveRecord::Schema.define(version: 1) do
|
14
|
+
connection.start_batch_ddl
|
14
15
|
|
15
16
|
create_table "albums", primary_key: "albumid", id: { limit: 8 }, force: :cascade do |t|
|
16
17
|
t.integer "singerid", limit: 8, null: false
|
@@ -29,4 +30,8 @@ ActiveRecord::Schema.define(version: 1) do
|
|
29
30
|
t.decimal "duration"
|
30
31
|
end
|
31
32
|
|
33
|
+
connection.run_batch
|
34
|
+
rescue
|
35
|
+
abort_batch
|
36
|
+
raise
|
32
37
|
end
|
@@ -2,8 +2,8 @@
|
|
2
2
|
# of editing this file, please use the migrations feature of Active Record to
|
3
3
|
# incrementally modify your database, and then regenerate this schema definition.
|
4
4
|
#
|
5
|
-
# This file is the source Rails uses to define your schema when running `rails
|
6
|
-
# db:schema:load`. When creating a new database, `rails db:schema:load` tends to
|
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
7
|
# be faster and is potentially less error prone than running all of your
|
8
8
|
# migrations from scratch. Old migrations may fail to apply correctly if those
|
9
9
|
# migrations use external dependencies or application code.
|
@@ -11,23 +11,28 @@
|
|
11
11
|
# It's strongly recommended that you check this file into your version control system.
|
12
12
|
|
13
13
|
ActiveRecord::Schema.define(version: 1) do
|
14
|
+
connection.start_batch_ddl
|
14
15
|
|
15
|
-
create_table "albums", force: :cascade do |t|
|
16
|
+
create_table "albums", id: { limit: 8 }, force: :cascade do |t|
|
16
17
|
t.string "title"
|
17
18
|
t.integer "singers_id", limit: 8
|
18
19
|
t.index ["singers_id"], name: "index_albums_on_singers_id", order: { singers_id: :asc }
|
19
20
|
end
|
20
21
|
|
21
|
-
create_table "singers", force: :cascade do |t|
|
22
|
+
create_table "singers", id: { limit: 8 }, force: :cascade do |t|
|
22
23
|
t.string "first_name"
|
23
24
|
t.string "last_name"
|
24
25
|
end
|
25
26
|
|
26
|
-
create_table "tracks", force: :cascade do |t|
|
27
|
+
create_table "tracks", id: { limit: 8 }, force: :cascade do |t|
|
27
28
|
t.string "title"
|
28
29
|
t.decimal "duration"
|
29
30
|
t.integer "albums_id", limit: 8
|
30
31
|
t.index ["albums_id"], name: "index_tracks_on_albums_id", order: { albums_id: :asc }
|
31
32
|
end
|
32
33
|
|
34
|
+
connection.run_batch
|
35
|
+
rescue
|
36
|
+
abort_batch
|
37
|
+
raise
|
33
38
|
end
|
@@ -2,8 +2,8 @@
|
|
2
2
|
# of editing this file, please use the migrations feature of Active Record to
|
3
3
|
# incrementally modify your database, and then regenerate this schema definition.
|
4
4
|
#
|
5
|
-
# This file is the source Rails uses to define your schema when running `rails
|
6
|
-
# db:schema:load`. When creating a new database, `rails db:schema:load` tends to
|
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
7
|
# be faster and is potentially less error prone than running all of your
|
8
8
|
# migrations from scratch. Old migrations may fail to apply correctly if those
|
9
9
|
# migrations use external dependencies or application code.
|
@@ -11,17 +11,22 @@
|
|
11
11
|
# It's strongly recommended that you check this file into your version control system.
|
12
12
|
|
13
13
|
ActiveRecord::Schema.define(version: 1) do
|
14
|
+
connection.start_batch_ddl
|
14
15
|
|
15
|
-
create_table "albums", force: :cascade do |t|
|
16
|
+
create_table "albums", id: { limit: 8 }, force: :cascade do |t|
|
16
17
|
t.string "title"
|
17
18
|
t.decimal "marketing_budget"
|
18
19
|
t.integer "singer_id", limit: 8
|
19
20
|
end
|
20
21
|
|
21
|
-
create_table "singers", force: :cascade do |t|
|
22
|
+
create_table "singers", id: { limit: 8 }, force: :cascade do |t|
|
22
23
|
t.string "first_name"
|
23
24
|
t.string "last_name"
|
24
25
|
end
|
25
26
|
|
26
27
|
add_foreign_key "albums", "singers"
|
28
|
+
connection.run_batch
|
29
|
+
rescue
|
30
|
+
abort_batch
|
31
|
+
raise
|
27
32
|
end
|