pg_saurus 5.3.0 → 6.1.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/lib/core_ext/active_record/connection_adapters/postgresql/schema_statements.rb +42 -7
- 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 +20 -15
- data/lib/pg_saurus/version.rb +1 -1
- metadata +16 -29
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9875c3cdffb8f2d496539d99a81de258a72c820fc21c4e2941f288c2063d3470
|
|
4
|
+
data.tar.gz: acb8edcb2354ce71888d9367edfd981fd4d19ecb3fd347286c69fab82cf3dc1d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 915b2e091c2b4e696ccb3c1128b792729bc79090af93f2d053eb3aa96d04320774b24a18c6adc12e50fcd9a81295cc9f9bd95177317714acd27ea0a1e59ef8ed
|
|
7
|
+
data.tar.gz: 988ee22b6138d8b6151f2c5e1f078d88f20718ead4ab410ad1edba7a795988bf1afc24321e387abcc90c3a150147be40059984ac9af8562d8f21514140c24b8a
|
|
@@ -263,31 +263,53 @@ module ActiveRecord
|
|
|
263
263
|
private :expression_index_name
|
|
264
264
|
|
|
265
265
|
|
|
266
|
-
#
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
column_name, type, default, notnull, oid, fmod, collation, comment = field
|
|
266
|
+
# Overrides https://github.com/rails/rails/blob/v7.2.2.2/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb#L923
|
|
267
|
+
def new_column_from_field(table_name, field, ...)
|
|
268
|
+
column_name, type, default, notnull, oid, fmod, collation, comment, identity, attgenerated = field
|
|
270
269
|
type_metadata = fetch_type_metadata(column_name, type, oid.to_i, fmod.to_i)
|
|
271
270
|
default_value = extract_value_from_default(default)
|
|
272
|
-
|
|
271
|
+
|
|
272
|
+
if attgenerated.present?
|
|
273
|
+
default_function = default
|
|
274
|
+
else
|
|
275
|
+
default_function = extract_default_function(default_value, default)
|
|
276
|
+
end
|
|
273
277
|
|
|
274
278
|
if match = default_function&.match(/\Anextval\('"?(?<sequence_name>.+_(?<suffix>seq\d*))"?'::regclass\)\z/)
|
|
279
|
+
# Begin patch
|
|
280
|
+
# Remove schema name part from table name when sequence name doesn't include it.
|
|
275
281
|
sequence_name = match[:sequence_name]
|
|
276
282
|
is_schema_name_included = sequence_name.split(".").size > 1
|
|
277
283
|
_table_name = is_schema_name_included ? table_name : table_name.split(".").last
|
|
278
284
|
|
|
279
285
|
serial = sequence_name_from_parts(_table_name, column_name, match[:suffix]) == sequence_name
|
|
286
|
+
# End patch
|
|
280
287
|
end
|
|
281
288
|
|
|
282
|
-
|
|
289
|
+
column_args = [
|
|
283
290
|
column_name,
|
|
284
291
|
default_value,
|
|
285
292
|
type_metadata,
|
|
286
293
|
!notnull,
|
|
287
294
|
default_function,
|
|
295
|
+
]
|
|
296
|
+
|
|
297
|
+
if Rails.gem_version >= "8.1"
|
|
298
|
+
# https://github.com/rails/rails/pull/54333
|
|
299
|
+
# https://github.com/rails/rails/blob/v8.1.3/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb#L1020
|
|
300
|
+
column_args.insert(
|
|
301
|
+
1,
|
|
302
|
+
get_oid_type(oid.to_i, fmod.to_i, column_name, type),
|
|
303
|
+
)
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
PostgreSQL::Column.new(
|
|
307
|
+
*column_args,
|
|
288
308
|
collation: collation,
|
|
289
309
|
comment: comment.presence,
|
|
290
|
-
serial: serial
|
|
310
|
+
serial: serial,
|
|
311
|
+
identity: identity.presence,
|
|
312
|
+
generated: attgenerated
|
|
291
313
|
)
|
|
292
314
|
end
|
|
293
315
|
private :new_column_from_field
|
|
@@ -342,6 +364,19 @@ module ActiveRecord
|
|
|
342
364
|
column_with_type.sub(/\((\w+)\)::\w+/, '\1')
|
|
343
365
|
end
|
|
344
366
|
private :remove_type
|
|
367
|
+
|
|
368
|
+
# Override to only check table name, not schema and table name.
|
|
369
|
+
#
|
|
370
|
+
# https://github.com/rails/rails/blob/v7.2.2.2/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb#L1787
|
|
371
|
+
def validate_table_length!(table_name)
|
|
372
|
+
max_table_name_length = 64
|
|
373
|
+
if table_name.to_s.split(".").last.length > max_table_name_length
|
|
374
|
+
raise ArgumentError, <<~MSG.squish
|
|
375
|
+
Table name '#{table_name}' is too long (#{table_name.length} characters); the limit is
|
|
376
|
+
#{max_table_name_length} characters
|
|
377
|
+
MSG
|
|
378
|
+
end
|
|
379
|
+
end
|
|
345
380
|
end
|
|
346
381
|
end
|
|
347
382
|
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,32 @@
|
|
|
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_all_schemas(stream)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Remove per-schema dumping logic from https://github.com/rails/rails/pull/50020
|
|
12
|
+
# https://github.com/rails/rails/blob/v8.1.3/activerecord/lib/active_record/connection_adapters/postgresql/schema_dumper.rb#L142
|
|
13
|
+
def within_each_schema
|
|
14
|
+
yield
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Overrides https://github.com/rails/rails/blob/v7.2.2.2/activerecord/lib/active_record/connection_adapters/postgresql/schema_dumper.rb#L31
|
|
18
|
+
#
|
|
19
|
+
# We are already dumping the schemas through #header
|
|
20
|
+
def schemas(...)
|
|
9
21
|
end
|
|
10
22
|
|
|
11
23
|
# Generates code to create schemas.
|
|
12
|
-
def
|
|
24
|
+
private def dump_all_schemas(stream)
|
|
13
25
|
# Don't create "public" schema since it exists by default.
|
|
14
|
-
schema_names = PgSaurus::Tools.schemas - [
|
|
26
|
+
schema_names = PgSaurus::Tools.schemas - %w[public information_schema]
|
|
15
27
|
schema_names.each do |schema_name|
|
|
16
|
-
|
|
28
|
+
stream.puts %( create_schema_if_not_exists "#{schema_name}")
|
|
17
29
|
end
|
|
18
|
-
stream
|
|
19
|
-
end
|
|
20
|
-
private :schemas
|
|
21
|
-
|
|
22
|
-
# Generates code to create schema.
|
|
23
|
-
def schema(schema_name, stream)
|
|
24
|
-
stream << " create_schema_if_not_exists \"#{schema_name}\"\n"
|
|
30
|
+
stream.puts
|
|
25
31
|
end
|
|
26
|
-
private :schema
|
|
27
32
|
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.1.1
|
|
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: 2026-07-13 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.
|