pg_power 1.4.0 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/pg_power/connection_adapters/abstract_adapter/comment_methods.rb +18 -0
- data/lib/pg_power/connection_adapters/postgresql_adapter/comment_methods.rb +36 -1
- data/lib/pg_power/migration/command_recorder/comment_methods.rb +17 -1
- data/lib/pg_power/schema_dumper/comment_methods.rb +19 -1
- data/lib/pg_power/version.rb +1 -1
- metadata +131 -116
@@ -33,6 +33,15 @@ module PgPower::ConnectionAdapters::AbstractAdapter::CommentMethods
|
|
33
33
|
|
34
34
|
end
|
35
35
|
|
36
|
+
# Sets the comment on the given index
|
37
|
+
#
|
38
|
+
# ===== Example
|
39
|
+
# ====== Setting comment on the index_pets_on_breed_id index
|
40
|
+
# set_index_comment 'index_pets_on_breed_id', 'Index on breed_id'
|
41
|
+
def set_index_comment(index_name, comment)
|
42
|
+
|
43
|
+
end
|
44
|
+
|
36
45
|
# Removes any comment from the given table.
|
37
46
|
#
|
38
47
|
# ===== Example
|
@@ -59,4 +68,13 @@ module PgPower::ConnectionAdapters::AbstractAdapter::CommentMethods
|
|
59
68
|
def remove_column_comments(table_name, *column_names)
|
60
69
|
|
61
70
|
end
|
71
|
+
|
72
|
+
# Removes the comment from the given index
|
73
|
+
#
|
74
|
+
# ===== Example
|
75
|
+
# ====== Removing comment from the index_pets_on_breed_id index
|
76
|
+
# remove_index_comment :index_pets_on_breed_id
|
77
|
+
def remove_index_comment(index_name)
|
78
|
+
|
79
|
+
end
|
62
80
|
end
|
@@ -31,6 +31,14 @@ module PgPower::ConnectionAdapters::PostgreSQLAdapter::CommentMethods
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
+
# Sets the given comment on the given index
|
35
|
+
# @param [String, Symbol] index_name The name of the index
|
36
|
+
# @param [String, Symbol] comment The comment to set on the index
|
37
|
+
def set_index_comment(index_name, comment)
|
38
|
+
sql = "COMMENT ON INDEX #{quote_string(index_name)} IS $$#{comment}$$;"
|
39
|
+
execute sql
|
40
|
+
end
|
41
|
+
|
34
42
|
# Executes SQL to remove comment on passed table.
|
35
43
|
# @param [String, Symbol] table_name
|
36
44
|
def remove_table_comment(table_name)
|
@@ -53,6 +61,13 @@ module PgPower::ConnectionAdapters::PostgreSQLAdapter::CommentMethods
|
|
53
61
|
end
|
54
62
|
end
|
55
63
|
|
64
|
+
# Removes any comment from the given index
|
65
|
+
# @param [String, Symbol] index_name The name of the index
|
66
|
+
def remove_index_comment(index_name)
|
67
|
+
sql = "COMMENT ON INDEX #{quote_string(index_name)} IS NULL;"
|
68
|
+
execute sql
|
69
|
+
end
|
70
|
+
|
56
71
|
# Fetches all comments related to passed table.
|
57
72
|
# I returns table comment and column comments as well.
|
58
73
|
# ===Example
|
@@ -61,7 +76,7 @@ module PgPower::ConnectionAdapters::PostgreSQLAdapter::CommentMethods
|
|
61
76
|
# ["email", "Comment on email column"]]
|
62
77
|
def comments(table_name)
|
63
78
|
relation_name, schema_name = table_name.split(".", 2).reverse
|
64
|
-
schema_name ||=
|
79
|
+
schema_name ||= :public
|
65
80
|
|
66
81
|
com = select_all <<-SQL
|
67
82
|
SELECT a.attname AS column_name, d.description AS comment
|
@@ -76,4 +91,24 @@ module PgPower::ConnectionAdapters::PostgreSQLAdapter::CommentMethods
|
|
76
91
|
[ row['column_name'], row['comment'] ]
|
77
92
|
end
|
78
93
|
end
|
94
|
+
|
95
|
+
# Fetches index comments
|
96
|
+
# returns an Array of Arrays, each element representing a single index with comment as
|
97
|
+
# [ 'schema_name', 'index_name', 'comment' ]
|
98
|
+
def index_comments
|
99
|
+
query = <<-SQL
|
100
|
+
SELECT c.relname AS index_name, d.description AS comment, pg_namespace.nspname AS schema_name
|
101
|
+
FROM pg_description d
|
102
|
+
JOIN pg_class c ON c.oid = d.objoid
|
103
|
+
JOIN pg_namespace ON c.relnamespace = pg_namespace.oid
|
104
|
+
WHERE c.relkind = 'i'
|
105
|
+
ORDER BY schema_name, index_name
|
106
|
+
SQL
|
107
|
+
|
108
|
+
com = select_all(query)
|
109
|
+
|
110
|
+
com.map do |row|
|
111
|
+
[ row['schema_name'], row['index_name'], row['comment'] ]
|
112
|
+
end
|
113
|
+
end
|
79
114
|
end
|
@@ -8,7 +8,7 @@ module PgPower::Migration::CommandRecorder::CommentMethods
|
|
8
8
|
|
9
9
|
# :nodoc:
|
10
10
|
def remove_table_comment(*args)
|
11
|
-
record(:
|
11
|
+
record(:remove_table_comment, args)
|
12
12
|
end
|
13
13
|
|
14
14
|
# :nodoc:
|
@@ -31,6 +31,16 @@ module PgPower::Migration::CommandRecorder::CommentMethods
|
|
31
31
|
record(:remove_column_comments, args)
|
32
32
|
end
|
33
33
|
|
34
|
+
# :nodoc:
|
35
|
+
def set_index_comment(*args)
|
36
|
+
record(:set_index_comment, args)
|
37
|
+
end
|
38
|
+
|
39
|
+
# :nodoc:
|
40
|
+
def remove_index_comment(*args)
|
41
|
+
record(:remove_index_comment, args)
|
42
|
+
end
|
43
|
+
|
34
44
|
# :nodoc:
|
35
45
|
def invert_set_table_comment(args)
|
36
46
|
table_name = args.first
|
@@ -49,4 +59,10 @@ module PgPower::Migration::CommandRecorder::CommentMethods
|
|
49
59
|
i_args = [args[0]] + args[1].collect{|name, value| name }
|
50
60
|
[:remove_column_comments, i_args]
|
51
61
|
end
|
62
|
+
|
63
|
+
# :nodoc:
|
64
|
+
def invert_set_index_comment(args)
|
65
|
+
index_name = args.first
|
66
|
+
[:remove_index_comment, [index_name]]
|
67
|
+
end
|
52
68
|
end
|
@@ -8,9 +8,21 @@ module PgPower::SchemaDumper::CommentMethods
|
|
8
8
|
table_names = @connection.tables.sort
|
9
9
|
table_names += get_non_public_schema_table_names.sort
|
10
10
|
|
11
|
+
# Dump table and column comments
|
11
12
|
table_names.each do |table_name|
|
12
13
|
dump_comments(table_name, stream)
|
13
14
|
end
|
15
|
+
|
16
|
+
# Now dump index comments
|
17
|
+
unless (index_comments = @connection.index_comments).empty?
|
18
|
+
index_comments.each do |row|
|
19
|
+
schema_name = row[0]
|
20
|
+
index_name = schema_name == 'public' ? "'#{row[1]}'" : "'#{schema_name}.#{row[1]}'"
|
21
|
+
comment = format_comment(row[2])
|
22
|
+
stream.puts " set_index_comment #{index_name}, '#{comment}'"
|
23
|
+
end
|
24
|
+
stream.puts
|
25
|
+
end
|
14
26
|
end
|
15
27
|
|
16
28
|
# Finds all comments related to passed table and writes appropriated
|
@@ -19,7 +31,7 @@ module PgPower::SchemaDumper::CommentMethods
|
|
19
31
|
unless (comments = @connection.comments(table_name)).empty?
|
20
32
|
comment_statements = comments.map do |row|
|
21
33
|
column_name = row[0]
|
22
|
-
comment = row[1]
|
34
|
+
comment = format_comment(row[1])
|
23
35
|
if column_name
|
24
36
|
" set_column_comment '#{table_name}', '#{column_name}', '#{comment}'"
|
25
37
|
else
|
@@ -33,4 +45,10 @@ module PgPower::SchemaDumper::CommentMethods
|
|
33
45
|
end
|
34
46
|
end
|
35
47
|
private :dump_comments
|
48
|
+
|
49
|
+
# Escape out single quotes from comments
|
50
|
+
def format_comment(comment)
|
51
|
+
comment.gsub(/'/, "\\\\'")
|
52
|
+
end
|
53
|
+
private :format_comment
|
36
54
|
end
|
data/lib/pg_power/version.rb
CHANGED
metadata
CHANGED
@@ -1,10 +1,15 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: pg_power
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 3
|
5
5
|
prerelease:
|
6
|
+
segments:
|
7
|
+
- 1
|
8
|
+
- 5
|
9
|
+
- 0
|
10
|
+
version: 1.5.0
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
8
13
|
- Potapov Sergey
|
9
14
|
- Arthur Shagall
|
10
15
|
- Artem Ignatyev
|
@@ -12,129 +17,132 @@ authors:
|
|
12
17
|
autorequire:
|
13
18
|
bindir: bin
|
14
19
|
cert_chain: []
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
requirement: !ruby/object:Gem::Requirement
|
20
|
+
|
21
|
+
date: 2013-05-14 00:00:00 Z
|
22
|
+
dependencies:
|
23
|
+
- !ruby/object:Gem::Dependency
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
25
|
none: false
|
21
|
-
requirements:
|
22
|
-
- -
|
23
|
-
- !ruby/object:Gem::Version
|
24
|
-
|
25
|
-
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
version: "0"
|
33
|
+
version_requirements: *id001
|
34
|
+
name: pg
|
26
35
|
prerelease: false
|
27
|
-
|
36
|
+
type: :runtime
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
28
39
|
none: false
|
29
|
-
requirements:
|
30
|
-
- -
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
|
33
|
-
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
hash: 3
|
44
|
+
segments:
|
45
|
+
- 0
|
46
|
+
version: "0"
|
47
|
+
version_requirements: *id002
|
34
48
|
name: rspec-rails
|
35
|
-
requirement: !ruby/object:Gem::Requirement
|
36
|
-
none: false
|
37
|
-
requirements:
|
38
|
-
- - ! '>='
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
|
-
type: :runtime
|
42
49
|
prerelease: false
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
- - ! '>='
|
47
|
-
- !ruby/object:Gem::Version
|
48
|
-
version: '0'
|
49
|
-
- !ruby/object:Gem::Dependency
|
50
|
-
name: rails
|
51
|
-
requirement: !ruby/object:Gem::Requirement
|
50
|
+
type: :runtime
|
51
|
+
- !ruby/object:Gem::Dependency
|
52
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
52
53
|
none: false
|
53
|
-
requirements:
|
54
|
+
requirements:
|
54
55
|
- - ~>
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
hash: 5
|
58
|
+
segments:
|
59
|
+
- 3
|
60
|
+
- 1
|
61
|
+
version: "3.1"
|
62
|
+
version_requirements: *id003
|
63
|
+
name: rails
|
64
|
+
prerelease: false
|
57
65
|
type: :runtime
|
66
|
+
- !ruby/object:Gem::Dependency
|
67
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
68
|
+
none: false
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
hash: 3
|
73
|
+
segments:
|
74
|
+
- 0
|
75
|
+
version: "0"
|
76
|
+
version_requirements: *id004
|
77
|
+
name: rcov
|
58
78
|
prerelease: false
|
59
|
-
|
79
|
+
type: :development
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
60
82
|
none: false
|
61
|
-
requirements:
|
62
|
-
- -
|
63
|
-
- !ruby/object:Gem::Version
|
64
|
-
|
65
|
-
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
hash: 3
|
87
|
+
segments:
|
88
|
+
- 0
|
89
|
+
version: "0"
|
90
|
+
version_requirements: *id005
|
66
91
|
name: yard
|
67
|
-
requirement: !ruby/object:Gem::Requirement
|
68
|
-
none: false
|
69
|
-
requirements:
|
70
|
-
- - ! '>='
|
71
|
-
- !ruby/object:Gem::Version
|
72
|
-
version: '0'
|
73
|
-
type: :development
|
74
92
|
prerelease: false
|
75
|
-
|
93
|
+
type: :development
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
76
96
|
none: false
|
77
|
-
requirements:
|
78
|
-
- -
|
79
|
-
- !ruby/object:Gem::Version
|
80
|
-
|
81
|
-
|
97
|
+
requirements:
|
98
|
+
- - ">="
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
hash: 3
|
101
|
+
segments:
|
102
|
+
- 0
|
103
|
+
version: "0"
|
104
|
+
version_requirements: *id006
|
82
105
|
name: metrical
|
83
|
-
requirement: !ruby/object:Gem::Requirement
|
84
|
-
none: false
|
85
|
-
requirements:
|
86
|
-
- - ! '>='
|
87
|
-
- !ruby/object:Gem::Version
|
88
|
-
version: '0'
|
89
|
-
type: :development
|
90
106
|
prerelease: false
|
91
|
-
|
107
|
+
type: :development
|
108
|
+
- !ruby/object:Gem::Dependency
|
109
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
92
110
|
none: false
|
93
|
-
requirements:
|
94
|
-
- -
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
|
97
|
-
|
111
|
+
requirements:
|
112
|
+
- - ">="
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
hash: 3
|
115
|
+
segments:
|
116
|
+
- 0
|
117
|
+
version: "0"
|
118
|
+
version_requirements: *id007
|
98
119
|
name: jeweler
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
none: false
|
101
|
-
requirements:
|
102
|
-
- - ! '>='
|
103
|
-
- !ruby/object:Gem::Version
|
104
|
-
version: '0'
|
105
|
-
type: :development
|
106
120
|
prerelease: false
|
107
|
-
version_requirements: !ruby/object:Gem::Requirement
|
108
|
-
none: false
|
109
|
-
requirements:
|
110
|
-
- - ! '>='
|
111
|
-
- !ruby/object:Gem::Version
|
112
|
-
version: '0'
|
113
|
-
- !ruby/object:Gem::Dependency
|
114
|
-
name: ruby-debug19
|
115
|
-
requirement: !ruby/object:Gem::Requirement
|
116
|
-
none: false
|
117
|
-
requirements:
|
118
|
-
- - ! '>='
|
119
|
-
- !ruby/object:Gem::Version
|
120
|
-
version: '0'
|
121
121
|
type: :development
|
122
|
-
|
123
|
-
|
122
|
+
- !ruby/object:Gem::Dependency
|
123
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
124
124
|
none: false
|
125
|
-
requirements:
|
126
|
-
- -
|
127
|
-
- !ruby/object:Gem::Version
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
125
|
+
requirements:
|
126
|
+
- - ">="
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
hash: 3
|
129
|
+
segments:
|
130
|
+
- 0
|
131
|
+
version: "0"
|
132
|
+
version_requirements: *id008
|
133
|
+
name: ruby-debug
|
134
|
+
prerelease: false
|
135
|
+
type: :development
|
136
|
+
description: ActiveRecord extensions for PostgreSQL. Provides useful tools for schema, foreign_key, index, comment and extensios manipulations in migrations.
|
137
|
+
email:
|
132
138
|
- rubygems@tmxcredit.com
|
133
139
|
executables: []
|
140
|
+
|
134
141
|
extensions: []
|
135
|
-
|
142
|
+
|
143
|
+
extra_rdoc_files:
|
136
144
|
- README.markdown
|
137
|
-
files:
|
145
|
+
files:
|
138
146
|
- README.markdown
|
139
147
|
- lib/core_ext/active_record/connection_adapters/abstract/schema_statements.rb
|
140
148
|
- lib/core_ext/active_record/connection_adapters/postgresql_adapter.rb
|
@@ -178,29 +186,36 @@ files:
|
|
178
186
|
- lib/tasks/pg_power_tasks.rake
|
179
187
|
homepage: https://github.com/TMXCredit/pg_power
|
180
188
|
licenses: []
|
189
|
+
|
181
190
|
post_install_message:
|
182
191
|
rdoc_options: []
|
183
|
-
|
192
|
+
|
193
|
+
require_paths:
|
184
194
|
- lib
|
185
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
195
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
186
196
|
none: false
|
187
|
-
requirements:
|
188
|
-
- -
|
189
|
-
- !ruby/object:Gem::Version
|
190
|
-
|
191
|
-
segments:
|
197
|
+
requirements:
|
198
|
+
- - ">="
|
199
|
+
- !ruby/object:Gem::Version
|
200
|
+
hash: 3
|
201
|
+
segments:
|
192
202
|
- 0
|
193
|
-
|
194
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
203
|
+
version: "0"
|
204
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
195
205
|
none: false
|
196
|
-
requirements:
|
197
|
-
- -
|
198
|
-
- !ruby/object:Gem::Version
|
199
|
-
|
206
|
+
requirements:
|
207
|
+
- - ">="
|
208
|
+
- !ruby/object:Gem::Version
|
209
|
+
hash: 3
|
210
|
+
segments:
|
211
|
+
- 0
|
212
|
+
version: "0"
|
200
213
|
requirements: []
|
214
|
+
|
201
215
|
rubyforge_project:
|
202
216
|
rubygems_version: 1.8.24
|
203
217
|
signing_key:
|
204
218
|
specification_version: 3
|
205
219
|
summary: ActiveRecord extensions for PostgreSQL.
|
206
220
|
test_files: []
|
221
|
+
|