pg_saurus 5.3.0 → 6.0.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/lib/core_ext/active_record/connection_adapters/postgresql/schema_statements.rb +26 -4
- data/lib/core_ext/active_record/migration/compatibility.rb +21 -0
- data/lib/pg_saurus/connection_adapters/postgresql_adapter/foreign_key_methods.rb +7 -3
- data/lib/pg_saurus/engine.rb +2 -1
- data/lib/pg_saurus/schema_dumper/extension_methods.rb +8 -12
- data/lib/pg_saurus/schema_dumper/schema_methods.rb +17 -11
- data/lib/pg_saurus/version.rb +1 -1
- metadata +24 -37
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5a8ddb3d62425c2f23a5fdf1b329d7a84be0129ab1be67bb87ca0a5150994720
|
|
4
|
+
data.tar.gz: 13cf5197c303baa0c95bf53d44d582e0c783ade8694329be03de7397cd53e46f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fb9565fa59ab7b6cbd3087e0d1a63b57f14832a2987e17ab010db47ff8ee46fa6b272d3e8b001c62b3ad699327b1a4151a1d5d64cc7552486129cb8e4cef2aca
|
|
7
|
+
data.tar.gz: 51ad1458b2cfebec850f8ef9144a4613a11598824b29e77a53dd06cacddd0c1e0bb3cb1dba7fcdbeb66c7ecbccbb6c16ca220bf8712aa8ba1944edfda9b50c0e
|
|
@@ -263,13 +263,20 @@ module ActiveRecord
|
|
|
263
263
|
private :expression_index_name
|
|
264
264
|
|
|
265
265
|
|
|
266
|
+
# Overrides https://github.com/rails/rails/blob/v7.2.2.2/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb#L923
|
|
267
|
+
#
|
|
266
268
|
# == Patch 1:
|
|
267
269
|
# Remove schema name part from table name when sequence name doesn't include it.
|
|
268
|
-
def new_column_from_field(table_name, field)
|
|
269
|
-
column_name, type, default, notnull, oid, fmod, collation, comment = field
|
|
270
|
+
def new_column_from_field(table_name, field, ...)
|
|
271
|
+
column_name, type, default, notnull, oid, fmod, collation, comment, identity, attgenerated = field
|
|
270
272
|
type_metadata = fetch_type_metadata(column_name, type, oid.to_i, fmod.to_i)
|
|
271
273
|
default_value = extract_value_from_default(default)
|
|
272
|
-
|
|
274
|
+
|
|
275
|
+
if attgenerated.present?
|
|
276
|
+
default_function = default
|
|
277
|
+
else
|
|
278
|
+
default_function = extract_default_function(default_value, default)
|
|
279
|
+
end
|
|
273
280
|
|
|
274
281
|
if match = default_function&.match(/\Anextval\('"?(?<sequence_name>.+_(?<suffix>seq\d*))"?'::regclass\)\z/)
|
|
275
282
|
sequence_name = match[:sequence_name]
|
|
@@ -287,7 +294,9 @@ module ActiveRecord
|
|
|
287
294
|
default_function,
|
|
288
295
|
collation: collation,
|
|
289
296
|
comment: comment.presence,
|
|
290
|
-
serial: serial
|
|
297
|
+
serial: serial,
|
|
298
|
+
identity: identity.presence,
|
|
299
|
+
generated: attgenerated
|
|
291
300
|
)
|
|
292
301
|
end
|
|
293
302
|
private :new_column_from_field
|
|
@@ -342,6 +351,19 @@ module ActiveRecord
|
|
|
342
351
|
column_with_type.sub(/\((\w+)\)::\w+/, '\1')
|
|
343
352
|
end
|
|
344
353
|
private :remove_type
|
|
354
|
+
|
|
355
|
+
# Override to only check table name, not schema and table name.
|
|
356
|
+
#
|
|
357
|
+
# https://github.com/rails/rails/blob/v7.2.2.2/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb#L1787
|
|
358
|
+
def validate_table_length!(table_name)
|
|
359
|
+
max_table_name_length = 64
|
|
360
|
+
if table_name.to_s.split(".").last.length > max_table_name_length
|
|
361
|
+
raise ArgumentError, <<~MSG.squish
|
|
362
|
+
Table name '#{table_name}' is too long (#{table_name.length} characters); the limit is
|
|
363
|
+
#{max_table_name_length} characters
|
|
364
|
+
MSG
|
|
365
|
+
end
|
|
366
|
+
end
|
|
345
367
|
end
|
|
346
368
|
end
|
|
347
369
|
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module ActiveRecord
|
|
4
|
+
class Migration
|
|
5
|
+
module Compatibility
|
|
6
|
+
# PgSaurus has been properly creating functional index names since Rails 4, so we don't want the old logic
|
|
7
|
+
class V7_0
|
|
8
|
+
module TableDefinition
|
|
9
|
+
# Override https://github.com/rails/rails/blob/v7.2.2.2/activerecord/lib/active_record/migration/compatibility.rb#L80
|
|
10
|
+
def index(...)
|
|
11
|
+
super
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
# Override https://github.com/rails/rails/blob/v7.2.2.2/activerecord/lib/active_record/migration/compatibility.rb#L102
|
|
15
|
+
def add_index(...)
|
|
16
|
+
super
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -24,7 +24,7 @@ module PgSaurus # :nodoc:
|
|
|
24
24
|
#
|
|
25
25
|
# Creates index on the FK column by default. Pass in the option exclude_index: true
|
|
26
26
|
# to disable this.
|
|
27
|
-
def add_foreign_key(from_table, to_table, options
|
|
27
|
+
def add_foreign_key(from_table, to_table, **options)
|
|
28
28
|
exclude_index = (options.has_key?(:exclude_index) ? options.delete(:exclude_index) : false)
|
|
29
29
|
column = options[:column] || foreign_key_column_for(to_table)
|
|
30
30
|
|
|
@@ -57,10 +57,14 @@ module PgSaurus # :nodoc:
|
|
|
57
57
|
# See: activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb
|
|
58
58
|
#
|
|
59
59
|
# Removes schema name from table name.
|
|
60
|
-
def foreign_key_column_for(table_name)
|
|
60
|
+
def foreign_key_column_for(table_name, column_name = "id")
|
|
61
61
|
table = table_name.to_s.split('.').last
|
|
62
62
|
|
|
63
|
-
|
|
63
|
+
if Rails.gem_version >= "7.2"
|
|
64
|
+
super table, column_name
|
|
65
|
+
else
|
|
66
|
+
super table
|
|
67
|
+
end
|
|
64
68
|
end
|
|
65
69
|
|
|
66
70
|
# See activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb
|
data/lib/pg_saurus/engine.rb
CHANGED
|
@@ -19,11 +19,12 @@ module PgSaurus
|
|
|
19
19
|
schema_dumper
|
|
20
20
|
errors
|
|
21
21
|
connection_adapters/postgresql/schema_statements
|
|
22
|
+
migration/compatibility
|
|
22
23
|
].each do |path|
|
|
23
24
|
require ::PgSaurus::Engine.root + "lib/core_ext/active_record/" + path
|
|
24
25
|
end
|
|
25
26
|
|
|
26
|
-
ActiveRecord::SchemaDumper.class_eval do
|
|
27
|
+
ActiveRecord::ConnectionAdapters::PostgreSQL::SchemaDumper.class_eval do
|
|
27
28
|
prepend ::PgSaurus::SchemaDumper::SchemaMethods
|
|
28
29
|
prepend ::PgSaurus::SchemaDumper::ExtensionMethods
|
|
29
30
|
prepend ::PgSaurus::SchemaDumper::ViewMethods
|
|
@@ -1,17 +1,11 @@
|
|
|
1
1
|
# Extends ActiveRecord::SchemaDumper class to dump comments on tables and columns.
|
|
2
2
|
module PgSaurus::SchemaDumper::ExtensionMethods
|
|
3
|
-
#
|
|
4
|
-
#
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
# Dump current database extensions recreation commands to the given stream.
|
|
12
|
-
#
|
|
13
|
-
# @param [#puts] stream Stream to write to
|
|
14
|
-
def dump_extensions(stream)
|
|
3
|
+
# Overrides https://github.com/rails/rails/blob/v7.2.2.2/activerecord/lib/active_record/connection_adapters/postgresql/schema_dumper.rb#L8
|
|
4
|
+
#
|
|
5
|
+
# Dump current database extensions recreation commands to the given stream.
|
|
6
|
+
#
|
|
7
|
+
# @param [#puts] stream Stream to write to
|
|
8
|
+
def extensions(stream)
|
|
15
9
|
extensions = @connection.pg_extensions
|
|
16
10
|
commands = extensions.map do |extension_name, options|
|
|
17
11
|
result = [%Q|create_extension "#{extension_name}"|]
|
|
@@ -25,5 +19,7 @@ module PgSaurus::SchemaDumper::ExtensionMethods
|
|
|
25
19
|
end
|
|
26
20
|
|
|
27
21
|
stream.puts
|
|
22
|
+
|
|
23
|
+
super
|
|
28
24
|
end
|
|
29
25
|
end
|
|
@@ -1,27 +1,33 @@
|
|
|
1
1
|
# Extends ActiveRecord::SchemaDumper class to dump schemas other than "public"
|
|
2
2
|
# and tables from those schemas.
|
|
3
3
|
module PgSaurus::SchemaDumper::SchemaMethods
|
|
4
|
-
|
|
4
|
+
|
|
5
|
+
# Overrides https://github.com/rails/rails/blob/v7.2.2.2/activerecord/lib/active_record/schema_dumper.rb#L95
|
|
5
6
|
def header(stream)
|
|
6
|
-
super
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
super
|
|
8
|
+
dump_schemas(stream)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Overrides https://github.com/rails/rails/blob/v7.2.2.2/activerecord/lib/active_record/connection_adapters/postgresql/schema_dumper.rb#L31
|
|
12
|
+
#
|
|
13
|
+
# We are already dumping the schemas through #header
|
|
14
|
+
def schemas(...)
|
|
9
15
|
end
|
|
10
16
|
|
|
11
17
|
# Generates code to create schemas.
|
|
12
|
-
def
|
|
18
|
+
def dump_schemas(stream)
|
|
13
19
|
# Don't create "public" schema since it exists by default.
|
|
14
20
|
schema_names = PgSaurus::Tools.schemas - ["public", "information_schema"]
|
|
15
21
|
schema_names.each do |schema_name|
|
|
16
|
-
|
|
22
|
+
dump_schema(schema_name, stream)
|
|
17
23
|
end
|
|
18
|
-
stream
|
|
24
|
+
stream.puts
|
|
19
25
|
end
|
|
20
|
-
private :
|
|
26
|
+
private :dump_schemas
|
|
21
27
|
|
|
22
28
|
# Generates code to create schema.
|
|
23
|
-
def
|
|
24
|
-
stream
|
|
29
|
+
def dump_schema(schema_name, stream)
|
|
30
|
+
stream.puts %( create_schema_if_not_exists "#{schema_name}")
|
|
25
31
|
end
|
|
26
|
-
private :
|
|
32
|
+
private :dump_schema
|
|
27
33
|
end
|
data/lib/pg_saurus/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: pg_saurus
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 6.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Potapov Sergey
|
|
@@ -13,7 +13,7 @@ authors:
|
|
|
13
13
|
autorequire:
|
|
14
14
|
bindir: bin
|
|
15
15
|
cert_chain: []
|
|
16
|
-
date:
|
|
16
|
+
date: 2025-10-29 00:00:00.000000000 Z
|
|
17
17
|
dependencies:
|
|
18
18
|
- !ruby/object:Gem::Dependency
|
|
19
19
|
name: pg
|
|
@@ -33,72 +33,72 @@ dependencies:
|
|
|
33
33
|
name: psych
|
|
34
34
|
requirement: !ruby/object:Gem::Requirement
|
|
35
35
|
requirements:
|
|
36
|
-
- - "
|
|
36
|
+
- - ">="
|
|
37
37
|
- !ruby/object:Gem::Version
|
|
38
|
-
version: '
|
|
38
|
+
version: '0'
|
|
39
39
|
type: :runtime
|
|
40
40
|
prerelease: false
|
|
41
41
|
version_requirements: !ruby/object:Gem::Requirement
|
|
42
42
|
requirements:
|
|
43
|
-
- - "
|
|
43
|
+
- - ">="
|
|
44
44
|
- !ruby/object:Gem::Version
|
|
45
|
-
version: '
|
|
45
|
+
version: '0'
|
|
46
46
|
- !ruby/object:Gem::Dependency
|
|
47
47
|
name: railties
|
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
|
49
49
|
requirements:
|
|
50
|
-
- - "
|
|
50
|
+
- - "<"
|
|
51
51
|
- !ruby/object:Gem::Version
|
|
52
|
-
version: '
|
|
52
|
+
version: '8'
|
|
53
53
|
type: :runtime
|
|
54
54
|
prerelease: false
|
|
55
55
|
version_requirements: !ruby/object:Gem::Requirement
|
|
56
56
|
requirements:
|
|
57
|
-
- - "
|
|
57
|
+
- - "<"
|
|
58
58
|
- !ruby/object:Gem::Version
|
|
59
|
-
version: '
|
|
59
|
+
version: '8'
|
|
60
60
|
- !ruby/object:Gem::Dependency
|
|
61
61
|
name: activemodel
|
|
62
62
|
requirement: !ruby/object:Gem::Requirement
|
|
63
63
|
requirements:
|
|
64
|
-
- - "
|
|
64
|
+
- - "<"
|
|
65
65
|
- !ruby/object:Gem::Version
|
|
66
|
-
version: '
|
|
66
|
+
version: '8'
|
|
67
67
|
type: :runtime
|
|
68
68
|
prerelease: false
|
|
69
69
|
version_requirements: !ruby/object:Gem::Requirement
|
|
70
70
|
requirements:
|
|
71
|
-
- - "
|
|
71
|
+
- - "<"
|
|
72
72
|
- !ruby/object:Gem::Version
|
|
73
|
-
version: '
|
|
73
|
+
version: '8'
|
|
74
74
|
- !ruby/object:Gem::Dependency
|
|
75
75
|
name: activerecord
|
|
76
76
|
requirement: !ruby/object:Gem::Requirement
|
|
77
77
|
requirements:
|
|
78
|
-
- - "
|
|
78
|
+
- - "<"
|
|
79
79
|
- !ruby/object:Gem::Version
|
|
80
|
-
version: '
|
|
80
|
+
version: '8'
|
|
81
81
|
type: :runtime
|
|
82
82
|
prerelease: false
|
|
83
83
|
version_requirements: !ruby/object:Gem::Requirement
|
|
84
84
|
requirements:
|
|
85
|
-
- - "
|
|
85
|
+
- - "<"
|
|
86
86
|
- !ruby/object:Gem::Version
|
|
87
|
-
version: '
|
|
87
|
+
version: '8'
|
|
88
88
|
- !ruby/object:Gem::Dependency
|
|
89
89
|
name: activesupport
|
|
90
90
|
requirement: !ruby/object:Gem::Requirement
|
|
91
91
|
requirements:
|
|
92
|
-
- - "
|
|
92
|
+
- - "<"
|
|
93
93
|
- !ruby/object:Gem::Version
|
|
94
|
-
version: '
|
|
94
|
+
version: '8'
|
|
95
95
|
type: :runtime
|
|
96
96
|
prerelease: false
|
|
97
97
|
version_requirements: !ruby/object:Gem::Requirement
|
|
98
98
|
requirements:
|
|
99
|
-
- - "
|
|
99
|
+
- - "<"
|
|
100
100
|
- !ruby/object:Gem::Version
|
|
101
|
-
version: '
|
|
101
|
+
version: '8'
|
|
102
102
|
- !ruby/object:Gem::Dependency
|
|
103
103
|
name: rspec-rails
|
|
104
104
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -155,20 +155,6 @@ dependencies:
|
|
|
155
155
|
- - ">="
|
|
156
156
|
- !ruby/object:Gem::Version
|
|
157
157
|
version: '0'
|
|
158
|
-
- !ruby/object:Gem::Dependency
|
|
159
|
-
name: byebug
|
|
160
|
-
requirement: !ruby/object:Gem::Requirement
|
|
161
|
-
requirements:
|
|
162
|
-
- - ">="
|
|
163
|
-
- !ruby/object:Gem::Version
|
|
164
|
-
version: '0'
|
|
165
|
-
type: :development
|
|
166
|
-
prerelease: false
|
|
167
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
168
|
-
requirements:
|
|
169
|
-
- - ">="
|
|
170
|
-
- !ruby/object:Gem::Version
|
|
171
|
-
version: '0'
|
|
172
158
|
- !ruby/object:Gem::Dependency
|
|
173
159
|
name: pry
|
|
174
160
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -228,6 +214,7 @@ files:
|
|
|
228
214
|
- lib/colorized_text.rb
|
|
229
215
|
- lib/core_ext/active_record/connection_adapters/postgresql/schema_statements.rb
|
|
230
216
|
- lib/core_ext/active_record/errors.rb
|
|
217
|
+
- lib/core_ext/active_record/migration/compatibility.rb
|
|
231
218
|
- lib/core_ext/active_record/schema_dumper.rb
|
|
232
219
|
- lib/generators/pg_saurus/install/install_generator.rb
|
|
233
220
|
- lib/generators/pg_saurus/install/templates/config/initializers/pg_saurus.rb
|
|
@@ -298,7 +285,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
298
285
|
- !ruby/object:Gem::Version
|
|
299
286
|
version: '0'
|
|
300
287
|
requirements: []
|
|
301
|
-
rubygems_version: 3.
|
|
288
|
+
rubygems_version: 3.5.22
|
|
302
289
|
signing_key:
|
|
303
290
|
specification_version: 4
|
|
304
291
|
summary: ActiveRecord extensions for PostgreSQL.
|