ridgepole 1.0.2 → 1.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -1
- data/README.md +17 -0
- data/lib/ridgepole/diff.rb +9 -4
- data/lib/ridgepole/dumper.rb +1 -1
- data/lib/ridgepole/ext/postgresql_adapter/partitioning.rb +19 -13
- data/lib/ridgepole/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8fd50f2c89f1cffa71ee02cf208bfe4d9b41ffefba5c9a93b164975a08a71687
|
4
|
+
data.tar.gz: f9ff68ec24ad420cbe070d769671721ac71fd3acf13322b3b340db07d4141f57
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 286bff861331444fdef459dd5063d7dfbb4007dd1b15a96efd38af1f95e65bf30f520ed5e2d9c0e87295516ee586f2742df78923304345db245fdd595f9599a7
|
7
|
+
data.tar.gz: 6e42ba5e0a2de5cfc2ce8f72179ac4ec41ddbacc27000d8906010d199556accd1348fa0b9d75fd0e322d9cbc5e3c12f07fdc28c8ee12b0db3355127ee837c299
|
data/CHANGELOG.md
CHANGED
@@ -2,7 +2,19 @@
|
|
2
2
|
|
3
3
|
## 1.0
|
4
4
|
|
5
|
-
### 1.0.
|
5
|
+
### 1.0.5 (2022/06/05)
|
6
|
+
|
7
|
+
* Support DEFAULT partition for PostgreSQL [pull#386](https://github.com/ridgepole/ridgepole/pull/386)
|
8
|
+
|
9
|
+
### 1.0.4 (2022/03/28)
|
10
|
+
|
11
|
+
* Add warning for generated column [pull#382](https://github.com/ridgepole/ridgepole/pull/382)
|
12
|
+
|
13
|
+
### 1.0.3 (2022/02/12)
|
14
|
+
|
15
|
+
* Support Rails 7.0.2 [pull#380](https://github.com/ridgepole/ridgepole/pull/380)
|
16
|
+
|
17
|
+
### 1.0.2 (2022/02/06)
|
6
18
|
|
7
19
|
* Add support for partitioning ([pull#374](https://github.com/ridgepole/ridgepole/pull/374))
|
8
20
|
* Suppress warning of table option differences ([pull#378](https://github.com/ridgepole/ridgepole/pull/378))
|
data/README.md
CHANGED
@@ -11,6 +11,10 @@ It defines DB schema using [Rails DSL](http://guides.rubyonrails.org/migrations.
|
|
11
11
|
|
12
12
|
**Notice**
|
13
13
|
|
14
|
+
* ActiveRecord 7.x has some incompatible changes. If you get unintended differences in `datetime`, add `precision`.
|
15
|
+
* cf. https://github.com/ridgepole/ridgepole/issues/381
|
16
|
+
* For ActiveRecord 7.x series, please use AcriveRecord 7.0.2 or higher / Ridgepole 1.0.3 or higher.
|
17
|
+
* cf. https://github.com/ridgepole/ridgepole/pull/380
|
14
18
|
* ActiveRecord 6.1 is supported in ridgepole v0.9, but the ActiveRecord dump has been changed, so there is a difference between ActiveRecord 5.x/6.0 format.
|
15
19
|
* **If you use ActiveRecord 6.1, please modify Schemafile format**.
|
16
20
|
* cf. https://github.com/ridgepole/ridgepole/pull/323
|
@@ -210,6 +214,19 @@ activerecord 5.0.0 and activerecord-mysql-awesome dumps a collation rather than
|
|
210
214
|
|
211
215
|
See `mysql> show character set;` to find charset / collation pair for your system.
|
212
216
|
|
217
|
+
## Generated Column (MySQL)
|
218
|
+
|
219
|
+
There should be NO extra white spaces in the expression (such as after comma).
|
220
|
+
Quotes in expression may cause the operations failure with MySQL 8.0.
|
221
|
+
|
222
|
+
```ruby
|
223
|
+
create_table "users", force: :cascade do |t|
|
224
|
+
t.string "last_name"
|
225
|
+
t.string "first_name"
|
226
|
+
t.virtual "full_name", type: :string, as: "concat(`last_name`,' ',`first_name`)", stored: true
|
227
|
+
end
|
228
|
+
```
|
229
|
+
|
213
230
|
## Execute
|
214
231
|
```ruby
|
215
232
|
create_table "authors", force: :cascade do |t|
|
data/lib/ridgepole/diff.rb
CHANGED
@@ -422,9 +422,6 @@ module Ridgepole
|
|
422
422
|
opts[:limit] = 4_294_967_295
|
423
423
|
end
|
424
424
|
end
|
425
|
-
|
426
|
-
# Workaround for Active Record 7.0
|
427
|
-
opts.delete(:precision) if attrs[:type] == :datetime && opts[:precision].nil?
|
428
425
|
end
|
429
426
|
end
|
430
427
|
|
@@ -509,6 +506,14 @@ module Ridgepole
|
|
509
506
|
attrs2.fetch(:options).delete(:comment)
|
510
507
|
end
|
511
508
|
|
509
|
+
if attrs1[:options][:as] != attrs2[:options][:as] && attrs1[:options].fetch(:as, '').delete(' ') == attrs2[:options].fetch(:as, '').delete(' ')
|
510
|
+
@logger.warn(<<-MSG)
|
511
|
+
[WARNING] Same expressions but only differed by white spaces were detected. This operation may fail.
|
512
|
+
Before: '#{attrs1[:options][:as]}'
|
513
|
+
After : '#{attrs2[:options][:as]}'
|
514
|
+
MSG
|
515
|
+
end
|
516
|
+
|
512
517
|
attrs1 == attrs2
|
513
518
|
end
|
514
519
|
|
@@ -652,7 +657,7 @@ MSG
|
|
652
657
|
|
653
658
|
(from_partitions.keys - to_partitions.keys).each do |name|
|
654
659
|
partition_definitions_delta[:delete] ||= {}
|
655
|
-
partition_definitions_delta[:delete][name] = attrs.merge(
|
660
|
+
partition_definitions_delta[:delete][name] = attrs.merge(values: from_partitions[name][:values])
|
656
661
|
end
|
657
662
|
|
658
663
|
(to_partitions.keys - from_partitions.keys).each do |name|
|
data/lib/ridgepole/dumper.rb
CHANGED
@@ -51,20 +51,24 @@ module Ridgepole
|
|
51
51
|
ORDER BY p.relname
|
52
52
|
SQL
|
53
53
|
|
54
|
-
partition_definitions = partition_info.map do |
|
55
|
-
values =
|
56
|
-
|
57
|
-
values = row[1].match(/FOR VALUES IN \((?<csv>.+)\)$/)[:csv].split(',').map(&:strip).map { |value| cast_value(value) }
|
58
|
-
{ in: Array.wrap(values) }
|
59
|
-
when :range
|
60
|
-
match = row[1].match(/FOR VALUES FROM \((?<from>.+)\) TO \((?<to>.+)\)/)
|
61
|
-
from = match[:from].split(',').map(&:strip).map { |value| cast_value(value) }
|
62
|
-
to = match[:to].split(',').map(&:strip).map { |value| cast_value(value) }
|
63
|
-
{ from: from, to: to }
|
54
|
+
partition_definitions = partition_info.map do |name, val_str|
|
55
|
+
values = if val_str == 'DEFAULT'
|
56
|
+
{ default: true }
|
64
57
|
else
|
65
|
-
|
58
|
+
case options[:type]
|
59
|
+
when :list
|
60
|
+
values = val_str.match(/FOR VALUES IN \((?<csv>.+)\)$/)[:csv].split(',').map(&:strip).map { |value| cast_value(value) }
|
61
|
+
{ in: Array.wrap(values) }
|
62
|
+
when :range
|
63
|
+
match = val_str.match(/FOR VALUES FROM \((?<from>.+)\) TO \((?<to>.+)\)/)
|
64
|
+
from = match[:from].split(',').map(&:strip).map { |value| cast_value(value) }
|
65
|
+
to = match[:to].split(',').map(&:strip).map { |value| cast_value(value) }
|
66
|
+
{ from: from, to: to }
|
67
|
+
else
|
68
|
+
raise NotImplementedError
|
69
|
+
end
|
66
70
|
end
|
67
|
-
{ name:
|
71
|
+
{ name: name, values: values }
|
68
72
|
end
|
69
73
|
|
70
74
|
ActiveRecord::ConnectionAdapters::PartitionOptions.new(table_name, options[:type], options[:columns], partition_definitions: partition_definitions)
|
@@ -97,7 +101,9 @@ module Ridgepole
|
|
97
101
|
|
98
102
|
# SchemaStatements
|
99
103
|
def add_partition(table_name, name:, values:)
|
100
|
-
condition = if values.key?(:
|
104
|
+
condition = if values.key?(:default)
|
105
|
+
'DEFAULT'
|
106
|
+
elsif values.key?(:in)
|
101
107
|
"FOR VALUES IN (#{values[:in].map { |v| quote_value(v) }.join(',')})"
|
102
108
|
elsif values.key?(:to)
|
103
109
|
from = values[:from].map { |v| quote_value(v) }.join(',')
|
data/lib/ridgepole/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ridgepole
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Genki Sugawara
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-06-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -342,7 +342,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
342
342
|
- !ruby/object:Gem::Version
|
343
343
|
version: '0'
|
344
344
|
requirements: []
|
345
|
-
rubygems_version: 3.
|
345
|
+
rubygems_version: 3.3.7
|
346
346
|
signing_key:
|
347
347
|
specification_version: 4
|
348
348
|
summary: Ridgepole is a tool to manage DB schema.
|