activerecord-postgresql-extensions 0.2.2 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/.gitignore +4 -0
- data/Gemfile +1 -0
- data/Guardfile +3 -3
- data/MIT-LICENSE +1 -1
- data/README.rdoc +10 -3
- data/lib/active_record/postgresql_extensions/adapter_extensions.rb +100 -60
- data/lib/active_record/postgresql_extensions/constraints.rb +13 -17
- data/lib/active_record/postgresql_extensions/event_triggers.rb +129 -0
- data/lib/active_record/postgresql_extensions/extensions.rb +14 -15
- data/lib/active_record/postgresql_extensions/features.rb +80 -41
- data/lib/active_record/postgresql_extensions/functions.rb +1 -1
- data/lib/active_record/postgresql_extensions/geometry.rb +6 -8
- data/lib/active_record/postgresql_extensions/indexes.rb +19 -11
- data/lib/active_record/postgresql_extensions/languages.rb +1 -1
- data/lib/active_record/postgresql_extensions/materialized_views.rb +272 -0
- data/lib/active_record/postgresql_extensions/permissions.rb +60 -22
- data/lib/active_record/postgresql_extensions/roles.rb +18 -7
- data/lib/active_record/postgresql_extensions/rules.rb +5 -0
- data/lib/active_record/postgresql_extensions/schemas.rb +39 -3
- data/lib/active_record/postgresql_extensions/sequences.rb +6 -3
- data/lib/active_record/postgresql_extensions/tables.rb +47 -19
- data/lib/active_record/postgresql_extensions/tablespaces.rb +1 -1
- data/lib/active_record/postgresql_extensions/text_search.rb +3 -3
- data/lib/active_record/postgresql_extensions/triggers.rb +3 -3
- data/lib/active_record/postgresql_extensions/types.rb +104 -1
- data/lib/active_record/postgresql_extensions/utils.rb +35 -13
- data/lib/active_record/postgresql_extensions/vacuum.rb +1 -1
- data/lib/active_record/postgresql_extensions/version.rb +1 -1
- data/lib/active_record/postgresql_extensions/views.rb +137 -6
- data/lib/activerecord-postgresql-extensions.rb +13 -11
- data/test/{adapter_tests.rb → adapter_extensions_tests.rb} +96 -3
- data/test/constraints_tests.rb +216 -104
- data/test/event_triggers_tests.rb +109 -0
- data/test/extensions_tests.rb +47 -39
- data/test/functions_tests.rb +47 -38
- data/test/geometry_tests.rb +268 -135
- data/test/{index_tests.rb → indexes_tests.rb} +16 -16
- data/test/languages_tests.rb +26 -9
- data/test/materialized_views_tests.rb +174 -0
- data/test/permissions_tests.rb +159 -45
- data/test/roles_tests.rb +17 -7
- data/test/rules_tests.rb +14 -6
- data/test/schemas_tests.rb +35 -9
- data/test/sequences_tests.rb +9 -11
- data/test/tables_tests.rb +132 -42
- data/test/tablespace_tests.rb +21 -15
- data/test/test_helper.rb +56 -10
- data/test/text_search_tests.rb +42 -44
- data/test/trigger_tests.rb +1 -3
- data/test/types_tests.rb +95 -0
- data/test/vacuum_tests.rb +1 -3
- data/test/views_tests.rb +203 -0
- metadata +22 -16
data/test/tablespace_tests.rb
CHANGED
@@ -2,9 +2,7 @@
|
|
2
2
|
$: << File.dirname(__FILE__)
|
3
3
|
require 'test_helper'
|
4
4
|
|
5
|
-
class TablespaceTests <
|
6
|
-
include PostgreSQLExtensionsTestHelper
|
7
|
-
|
5
|
+
class TablespaceTests < PostgreSQLExtensionsTestCase
|
8
6
|
def test_create_tablespace
|
9
7
|
Mig.create_tablespace('foo', '/tmp/foo')
|
10
8
|
Mig.create_tablespace('foo', '/tmp/foo', :owner => :bar)
|
@@ -41,23 +39,31 @@ class TablespaceTests < MiniTest::Unit::TestCase
|
|
41
39
|
], statements)
|
42
40
|
end
|
43
41
|
|
44
|
-
def
|
42
|
+
def test_alter_tablespace_parameters
|
45
43
|
Mig.alter_tablespace_parameters('foo', :seq_page_cost => 2.0, :random_page_cost => 5.0)
|
46
44
|
|
47
|
-
assert_equal([
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
);
|
45
|
+
assert_equal([ strip_heredoc(<<-SQL) ], statements)
|
46
|
+
ALTER TABLESPACE "foo" SET (
|
47
|
+
"seq_page_cost" = 2.0,
|
48
|
+
"random_page_cost" = 5.0
|
49
|
+
);
|
50
|
+
SQL
|
52
51
|
end
|
53
52
|
|
54
|
-
def
|
53
|
+
def test_reset_tablespace_parameters
|
55
54
|
Mig.reset_tablespace_parameters('foo', :seq_page_cost, :random_page_cost)
|
56
55
|
|
57
|
-
assert_equal([
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
);
|
56
|
+
assert_equal([ strip_heredoc(<<-SQL) ], statements)
|
57
|
+
ALTER TABLESPACE "foo" RESET (
|
58
|
+
"seq_page_cost",
|
59
|
+
"random_page_cost"
|
60
|
+
);
|
61
|
+
SQL
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_invalid_tablespace_parameters
|
65
|
+
assert_raises(ActiveRecord::InvalidTablespaceParameter) do
|
66
|
+
Mig.alter_tablespace_parameters('foo', :blart => 2.0)
|
67
|
+
end
|
62
68
|
end
|
63
69
|
end
|
data/test/test_helper.rb
CHANGED
@@ -1,9 +1,15 @@
|
|
1
1
|
|
2
|
-
ACTIVERECORD_GEM_VERSION = ENV['ACTIVERECORD_GEM_VERSION'] || '~> 3.2.0'
|
3
2
|
|
4
|
-
|
5
|
-
|
3
|
+
if RUBY_VERSION >= '1.9'
|
4
|
+
require 'simplecov'
|
5
|
+
|
6
|
+
SimpleCov.command_name('Unit Tests')
|
7
|
+
SimpleCov.start do
|
8
|
+
add_filter '/test/'
|
9
|
+
end
|
10
|
+
end
|
6
11
|
|
12
|
+
require 'rubygems'
|
7
13
|
require 'active_record'
|
8
14
|
require 'logger'
|
9
15
|
require 'minitest/autorun'
|
@@ -41,6 +47,7 @@ end
|
|
41
47
|
ActiveRecord::Base.establish_connection 'arunit'
|
42
48
|
ARBC = ActiveRecord::Base.connection
|
43
49
|
|
50
|
+
puts "Ruby version #{RUBY_VERSION}-p#{RUBY_PATCHLEVEL} - #{RbConfig::CONFIG['RUBY_INSTALL_NAME']}"
|
44
51
|
puts "Testing against ActiveRecord #{Gem.loaded_specs['activerecord'].version.to_s}"
|
45
52
|
if postgresql_version = ActiveRecord::PostgreSQLExtensions.SERVER_VERSION
|
46
53
|
puts "PostgreSQL info from pg_catalog.version(): #{postgresql_version}"
|
@@ -53,29 +60,45 @@ else
|
|
53
60
|
end
|
54
61
|
|
55
62
|
class ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
|
63
|
+
def real_execute
|
64
|
+
@real_execute = true
|
65
|
+
yield
|
66
|
+
ensure
|
67
|
+
@real_execute = false
|
68
|
+
end
|
69
|
+
|
56
70
|
def execute_with_statement_capture(*args)
|
57
71
|
PostgreSQLExtensionsTestHelper.add_statement(args.first)
|
58
72
|
|
59
|
-
if
|
60
|
-
|
61
|
-
|
73
|
+
if @real_execute
|
74
|
+
execute_without_statement_capture(*args)
|
75
|
+
else
|
76
|
+
if RUBY_PLATFORM == 'java'
|
77
|
+
if args.first =~ /pg_tables/
|
78
|
+
return execute_without_statement_capture(*args)
|
79
|
+
end
|
62
80
|
end
|
63
|
-
end
|
64
81
|
|
65
|
-
|
82
|
+
args.first
|
83
|
+
end
|
66
84
|
end
|
67
85
|
alias_method_chain :execute, :statement_capture
|
68
86
|
|
69
87
|
unless RUBY_PLATFORM == 'java'
|
70
88
|
def query_with_statement_capture(*args)
|
71
|
-
|
72
|
-
|
89
|
+
if @real_execute
|
90
|
+
query_without_statement_capture(*args)
|
91
|
+
else
|
92
|
+
PostgreSQLExtensionsTestHelper.add_statement(args.first)
|
93
|
+
end
|
73
94
|
end
|
74
95
|
alias_method_chain :query, :statement_capture
|
75
96
|
end
|
76
97
|
end
|
77
98
|
|
78
99
|
module PostgreSQLExtensionsTestHelper
|
100
|
+
include ActiveRecord::PostgreSQLExtensions::Utils
|
101
|
+
|
79
102
|
class << self
|
80
103
|
def statements
|
81
104
|
@statements ||= []
|
@@ -123,6 +146,29 @@ end
|
|
123
146
|
class Foo < ActiveRecord::Base
|
124
147
|
end
|
125
148
|
|
149
|
+
class PostgreSQLExtensionsTestCase < ActiveRecord::TestCase
|
150
|
+
include ActiveRecord::TestFixtures
|
151
|
+
include PostgreSQLExtensionsTestHelper
|
152
|
+
|
153
|
+
attr_writer :tagged_logger
|
154
|
+
|
155
|
+
def before_setup
|
156
|
+
if tagged_logger
|
157
|
+
heading = "#{self.class}: #{__name__}"
|
158
|
+
divider = '-' * heading.size
|
159
|
+
tagged_logger.info divider
|
160
|
+
tagged_logger.info heading
|
161
|
+
tagged_logger.info divider
|
162
|
+
end
|
163
|
+
super
|
164
|
+
end
|
165
|
+
|
166
|
+
private
|
167
|
+
def tagged_logger
|
168
|
+
@tagged_logger ||= (defined?(ActiveRecord::Base.logger) && ActiveRecord::Base.logger)
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
126
172
|
if RUBY_VERSION >= '1.9'
|
127
173
|
MiniTest::Reporters.use!(MiniTest::Reporters::SpecReporter.new)
|
128
174
|
end
|
data/test/text_search_tests.rb
CHANGED
@@ -2,18 +2,16 @@
|
|
2
2
|
$: << File.dirname(__FILE__)
|
3
3
|
require 'test_helper'
|
4
4
|
|
5
|
-
class TextSearchTests <
|
6
|
-
include PostgreSQLExtensionsTestHelper
|
7
|
-
|
5
|
+
class TextSearchTests < PostgreSQLExtensionsTestCase
|
8
6
|
def test_create_text_search_configuration
|
9
7
|
ARBC.create_text_search_configuration(:foo, :parser_name => 'bar')
|
10
8
|
ARBC.create_text_search_configuration(:foo, :source_config => 'bar')
|
11
9
|
ARBC.create_text_search_configuration(:foo, :source_config => { :pg_catalog => 'english' })
|
12
10
|
|
13
11
|
assert_equal([
|
14
|
-
|
15
|
-
|
16
|
-
|
12
|
+
%{CREATE TEXT SEARCH CONFIGURATION "foo" (PARSER = "bar");},
|
13
|
+
%{CREATE TEXT SEARCH CONFIGURATION "foo" (COPY = "bar");},
|
14
|
+
%{CREATE TEXT SEARCH CONFIGURATION "foo" (COPY = "pg_catalog"."english");}
|
17
15
|
], statements)
|
18
16
|
|
19
17
|
assert_raises(ArgumentError) do
|
@@ -30,8 +28,8 @@ class TextSearchTests < MiniTest::Unit::TestCase
|
|
30
28
|
ARBC.add_text_search_configuration_mapping(:foo, [ :asciiword, :word ], [ :bar, :up ])
|
31
29
|
|
32
30
|
assert_equal([
|
33
|
-
|
34
|
-
|
31
|
+
%{ALTER TEXT SEARCH CONFIGURATION "foo" ADD MAPPING FOR "asciiword" WITH "bar";},
|
32
|
+
%{ALTER TEXT SEARCH CONFIGURATION "foo" ADD MAPPING FOR "asciiword", "word" WITH "bar", "up";}
|
35
33
|
], statements)
|
36
34
|
end
|
37
35
|
|
@@ -40,8 +38,8 @@ class TextSearchTests < MiniTest::Unit::TestCase
|
|
40
38
|
ARBC.alter_text_search_configuration_mapping(:foo, [ :asciiword, :word ], [ :bar, :up ])
|
41
39
|
|
42
40
|
assert_equal([
|
43
|
-
|
44
|
-
|
41
|
+
%{ALTER TEXT SEARCH CONFIGURATION "foo" ALTER MAPPING FOR "asciiword" WITH "bar";},
|
42
|
+
%{ALTER TEXT SEARCH CONFIGURATION "foo" ALTER MAPPING FOR "asciiword", "word" WITH "bar", "up";}
|
45
43
|
], statements)
|
46
44
|
end
|
47
45
|
|
@@ -49,7 +47,7 @@ class TextSearchTests < MiniTest::Unit::TestCase
|
|
49
47
|
ARBC.replace_text_search_configuration_dictionary(:foo, :bar, :ometer)
|
50
48
|
|
51
49
|
assert_equal([
|
52
|
-
|
50
|
+
%{ALTER TEXT SEARCH CONFIGURATION "foo" ALTER MAPPING REPLACE "bar" WITH "ometer";}
|
53
51
|
], statements)
|
54
52
|
end
|
55
53
|
|
@@ -58,8 +56,8 @@ class TextSearchTests < MiniTest::Unit::TestCase
|
|
58
56
|
ARBC.alter_text_search_configuration_mapping_replace_dictionary(:foo, [ :hello, :world ], :old, :new)
|
59
57
|
|
60
58
|
assert_equal([
|
61
|
-
|
62
|
-
|
59
|
+
%{ALTER TEXT SEARCH CONFIGURATION "foo" ALTER MAPPING FOR "bar" REPLACE "old" WITH "new";},
|
60
|
+
%{ALTER TEXT SEARCH CONFIGURATION "foo" ALTER MAPPING FOR "hello", "world" REPLACE "old" WITH "new";}
|
63
61
|
], statements)
|
64
62
|
end
|
65
63
|
|
@@ -69,9 +67,9 @@ class TextSearchTests < MiniTest::Unit::TestCase
|
|
69
67
|
ARBC.drop_text_search_configuration_mapping(:foo, :bar, :if_exists => true)
|
70
68
|
|
71
69
|
assert_equal([
|
72
|
-
|
73
|
-
|
74
|
-
|
70
|
+
%{ALTER TEXT SEARCH CONFIGURATION "foo" DROP MAPPING FOR "bar";},
|
71
|
+
%{ALTER TEXT SEARCH CONFIGURATION "foo" DROP MAPPING FOR "bar", "blort";},
|
72
|
+
%{ALTER TEXT SEARCH CONFIGURATION "foo" DROP MAPPING IF EXISTS FOR "bar";}
|
75
73
|
], statements)
|
76
74
|
|
77
75
|
assert_raises(ArgumentError) do
|
@@ -87,7 +85,7 @@ class TextSearchTests < MiniTest::Unit::TestCase
|
|
87
85
|
ARBC.rename_text_search_configuration(:foo, :bar)
|
88
86
|
|
89
87
|
assert_equal([
|
90
|
-
|
88
|
+
%{ALTER TEXT SEARCH CONFIGURATION "foo" RENAME TO "bar";}
|
91
89
|
], statements)
|
92
90
|
end
|
93
91
|
|
@@ -95,7 +93,7 @@ class TextSearchTests < MiniTest::Unit::TestCase
|
|
95
93
|
ARBC.alter_text_search_configuration_owner(:foo, :bar)
|
96
94
|
|
97
95
|
assert_equal([
|
98
|
-
|
96
|
+
%{ALTER TEXT SEARCH CONFIGURATION "foo" OWNER TO "bar";}
|
99
97
|
], statements)
|
100
98
|
end
|
101
99
|
|
@@ -103,7 +101,7 @@ class TextSearchTests < MiniTest::Unit::TestCase
|
|
103
101
|
ARBC.alter_text_search_configuration_schema(:foo, :bar)
|
104
102
|
|
105
103
|
assert_equal([
|
106
|
-
|
104
|
+
%{ALTER TEXT SEARCH CONFIGURATION "foo" SET SCHEMA "bar";}
|
107
105
|
], statements)
|
108
106
|
end
|
109
107
|
|
@@ -113,9 +111,9 @@ class TextSearchTests < MiniTest::Unit::TestCase
|
|
113
111
|
ARBC.drop_text_search_configuration(:foo, :if_exists => true, :cascade => true)
|
114
112
|
|
115
113
|
assert_equal([
|
116
|
-
|
117
|
-
|
118
|
-
|
114
|
+
%{DROP TEXT SEARCH CONFIGURATION "foo";},
|
115
|
+
%{DROP TEXT SEARCH CONFIGURATION "foo"."bar";},
|
116
|
+
%{DROP TEXT SEARCH CONFIGURATION IF EXISTS "foo" CASCADE;}
|
119
117
|
], statements)
|
120
118
|
end
|
121
119
|
|
@@ -124,8 +122,8 @@ class TextSearchTests < MiniTest::Unit::TestCase
|
|
124
122
|
ARBC.create_text_search_dictionary(:foo, { :pg_catalog => :snowball }, { :language => 'english' })
|
125
123
|
|
126
124
|
assert_equal([
|
127
|
-
|
128
|
-
|
125
|
+
%{CREATE TEXT SEARCH DICTIONARY "foo" (TEMPLATE = "bar", "language" = 'english');},
|
126
|
+
%{CREATE TEXT SEARCH DICTIONARY "foo" (TEMPLATE = "pg_catalog"."snowball", "language" = 'english');}
|
129
127
|
], statements)
|
130
128
|
end
|
131
129
|
|
@@ -135,9 +133,9 @@ class TextSearchTests < MiniTest::Unit::TestCase
|
|
135
133
|
ARBC.drop_text_search_dictionary(:foo, :if_exists => true, :cascade => true)
|
136
134
|
|
137
135
|
assert_equal([
|
138
|
-
|
139
|
-
|
140
|
-
|
136
|
+
%{DROP TEXT SEARCH DICTIONARY "foo";},
|
137
|
+
%{DROP TEXT SEARCH DICTIONARY "foo"."bar";},
|
138
|
+
%{DROP TEXT SEARCH DICTIONARY IF EXISTS "foo" CASCADE;}
|
141
139
|
], statements)
|
142
140
|
end
|
143
141
|
|
@@ -145,7 +143,7 @@ class TextSearchTests < MiniTest::Unit::TestCase
|
|
145
143
|
ARBC.rename_text_search_dictionary(:foo, :bar)
|
146
144
|
|
147
145
|
assert_equal([
|
148
|
-
|
146
|
+
%{ALTER TEXT SEARCH DICTIONARY "foo" RENAME TO "bar";}
|
149
147
|
], statements)
|
150
148
|
end
|
151
149
|
|
@@ -153,7 +151,7 @@ class TextSearchTests < MiniTest::Unit::TestCase
|
|
153
151
|
ARBC.alter_text_search_dictionary_owner(:foo, :bar)
|
154
152
|
|
155
153
|
assert_equal([
|
156
|
-
|
154
|
+
%{ALTER TEXT SEARCH DICTIONARY "foo" OWNER TO "bar";}
|
157
155
|
], statements)
|
158
156
|
end
|
159
157
|
|
@@ -161,7 +159,7 @@ class TextSearchTests < MiniTest::Unit::TestCase
|
|
161
159
|
ARBC.alter_text_search_dictionary_schema(:foo, :bar)
|
162
160
|
|
163
161
|
assert_equal([
|
164
|
-
|
162
|
+
%{ALTER TEXT SEARCH DICTIONARY "foo" SET SCHEMA "bar";}
|
165
163
|
], statements)
|
166
164
|
end
|
167
165
|
|
@@ -170,8 +168,8 @@ class TextSearchTests < MiniTest::Unit::TestCase
|
|
170
168
|
ARBC.create_text_search_template(:foo, :lexize => 'bar', :init => 'lol')
|
171
169
|
|
172
170
|
assert_equal([
|
173
|
-
|
174
|
-
|
171
|
+
%{CREATE TEXT SEARCH TEMPLATE "foo" (LEXIZE = "bar");},
|
172
|
+
%{CREATE TEXT SEARCH TEMPLATE "foo" (INIT = "lol", LEXIZE = "bar");}
|
175
173
|
], statements)
|
176
174
|
|
177
175
|
assert_raises(ArgumentError) do
|
@@ -185,9 +183,9 @@ class TextSearchTests < MiniTest::Unit::TestCase
|
|
185
183
|
ARBC.drop_text_search_template(:foo, :if_exists => true, :cascade => true)
|
186
184
|
|
187
185
|
assert_equal([
|
188
|
-
|
189
|
-
|
190
|
-
|
186
|
+
%{DROP TEXT SEARCH TEMPLATE "foo";},
|
187
|
+
%{DROP TEXT SEARCH TEMPLATE "foo"."bar";},
|
188
|
+
%{DROP TEXT SEARCH TEMPLATE IF EXISTS "foo" CASCADE;}
|
191
189
|
], statements)
|
192
190
|
end
|
193
191
|
|
@@ -195,7 +193,7 @@ class TextSearchTests < MiniTest::Unit::TestCase
|
|
195
193
|
ARBC.rename_text_search_template(:foo, :bar)
|
196
194
|
|
197
195
|
assert_equal([
|
198
|
-
|
196
|
+
%{ALTER TEXT SEARCH TEMPLATE "foo" RENAME TO "bar";}
|
199
197
|
], statements)
|
200
198
|
end
|
201
199
|
|
@@ -203,7 +201,7 @@ class TextSearchTests < MiniTest::Unit::TestCase
|
|
203
201
|
ARBC.alter_text_search_template_schema(:foo, :bar)
|
204
202
|
|
205
203
|
assert_equal([
|
206
|
-
|
204
|
+
%{ALTER TEXT SEARCH TEMPLATE "foo" SET SCHEMA "bar";}
|
207
205
|
], statements)
|
208
206
|
end
|
209
207
|
|
@@ -224,8 +222,8 @@ class TextSearchTests < MiniTest::Unit::TestCase
|
|
224
222
|
})
|
225
223
|
|
226
224
|
assert_equal([
|
227
|
-
|
228
|
-
|
225
|
+
%{CREATE TEXT SEARCH PARSER "foo" (START = "start", GETTOKEN = "gettoken", END = "end", LEXTYPES = "lextypes");},
|
226
|
+
%{CREATE TEXT SEARCH PARSER "foo" (START = "start", GETTOKEN = "gettoken", END = "end", LEXTYPES = "lextypes", HEADLINE = "headline");}
|
229
227
|
], statements)
|
230
228
|
|
231
229
|
assert_raises(ArgumentError) do
|
@@ -239,9 +237,9 @@ class TextSearchTests < MiniTest::Unit::TestCase
|
|
239
237
|
ARBC.drop_text_search_parser(:foo, :if_exists => true, :cascade => true)
|
240
238
|
|
241
239
|
assert_equal([
|
242
|
-
|
243
|
-
|
244
|
-
|
240
|
+
%{DROP TEXT SEARCH PARSER "foo";},
|
241
|
+
%{DROP TEXT SEARCH PARSER "foo"."bar";},
|
242
|
+
%{DROP TEXT SEARCH PARSER IF EXISTS "foo" CASCADE;}
|
245
243
|
], statements)
|
246
244
|
end
|
247
245
|
|
@@ -249,7 +247,7 @@ class TextSearchTests < MiniTest::Unit::TestCase
|
|
249
247
|
ARBC.rename_text_search_parser(:foo, :bar)
|
250
248
|
|
251
249
|
assert_equal([
|
252
|
-
|
250
|
+
%{ALTER TEXT SEARCH PARSER "foo" RENAME TO "bar";}
|
253
251
|
], statements)
|
254
252
|
end
|
255
253
|
|
@@ -257,7 +255,7 @@ class TextSearchTests < MiniTest::Unit::TestCase
|
|
257
255
|
ARBC.alter_text_search_parser_schema(:foo, :bar)
|
258
256
|
|
259
257
|
assert_equal([
|
260
|
-
|
258
|
+
%{ALTER TEXT SEARCH PARSER "foo" SET SCHEMA "bar";}
|
261
259
|
], statements)
|
262
260
|
end
|
263
261
|
end
|
data/test/trigger_tests.rb
CHANGED
@@ -2,9 +2,7 @@
|
|
2
2
|
$: << File.dirname(__FILE__)
|
3
3
|
require 'test_helper'
|
4
4
|
|
5
|
-
class TriggerTests <
|
6
|
-
include PostgreSQLExtensionsTestHelper
|
7
|
-
|
5
|
+
class TriggerTests < PostgreSQLExtensionsTestCase
|
8
6
|
def test_enable_triggers
|
9
7
|
Foo.enable_triggers
|
10
8
|
Foo.enable_triggers(:bar)
|
data/test/types_tests.rb
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
|
2
|
+
$: << File.dirname(__FILE__)
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
class TypesTests < PostgreSQLExtensionsTestCase
|
6
|
+
def test_types
|
7
|
+
types = ARBC.real_execute do
|
8
|
+
ARBC.types
|
9
|
+
end
|
10
|
+
|
11
|
+
assert_kind_of(Array, types)
|
12
|
+
assert_includes(types, 'oid')
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_type_exists
|
16
|
+
ARBC.real_execute do
|
17
|
+
assert(ARBC.type_exists?(:oid))
|
18
|
+
assert(ARBC.type_exists?('oid'))
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class EnumTests < PostgreSQLExtensionsTestCase
|
23
|
+
def setup
|
24
|
+
ARBC.real_execute do
|
25
|
+
Mig.drop_type(:foo_enum, :if_exists => true)
|
26
|
+
end
|
27
|
+
|
28
|
+
super
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_create_enum
|
32
|
+
Mig.create_enum(:foo_enum)
|
33
|
+
Mig.create_enum(:foo_enum, %w{ one two three })
|
34
|
+
Mig.create_enum(:foo_enum, :one, :two, :three)
|
35
|
+
|
36
|
+
assert_equal([
|
37
|
+
%{CREATE TYPE "foo_enum" AS ENUM ();},
|
38
|
+
%{CREATE TYPE "foo_enum" AS ENUM ('one', 'two', 'three');},
|
39
|
+
%{CREATE TYPE "foo_enum" AS ENUM ('one', 'two', 'three');}
|
40
|
+
], statements)
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_add_enum_value
|
44
|
+
Mig.create_enum(:foo_enum)
|
45
|
+
Mig.add_enum_value(:foo_enum, :foo)
|
46
|
+
Mig.add_enum_value(:foo_enum, :bar, :before => :foo)
|
47
|
+
Mig.add_enum_value(:foo_enum, :blort, :after => :foo)
|
48
|
+
|
49
|
+
assert_equal([
|
50
|
+
%{CREATE TYPE "foo_enum" AS ENUM ();},
|
51
|
+
%{ALTER TYPE "foo_enum" ADD VALUE 'foo';},
|
52
|
+
%{ALTER TYPE "foo_enum" ADD VALUE 'bar' BEFORE 'foo';},
|
53
|
+
%{ALTER TYPE "foo_enum" ADD VALUE 'blort' AFTER 'foo';}
|
54
|
+
], statements)
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_add_enum_value_if_not_exists
|
58
|
+
skip unless ActiveRecord::PostgreSQLExtensions.SERVER_VERSION >= '9.3'
|
59
|
+
|
60
|
+
Mig.add_enum_value(:foo_enum, :baz, :if_not_exists => true)
|
61
|
+
|
62
|
+
assert_equal([
|
63
|
+
%{ALTER TYPE "foo_enum" ADD VALUE IF NOT EXISTS 'baz';}
|
64
|
+
], statements)
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_drop_type
|
68
|
+
Mig.drop_type(:foo_enum)
|
69
|
+
Mig.drop_type(:foo_enum, :if_exists => true)
|
70
|
+
Mig.drop_type(:foo_enum, :cascade => true)
|
71
|
+
Mig.drop_type(:foo_enum, :bar_enum)
|
72
|
+
|
73
|
+
assert_equal([
|
74
|
+
%{DROP TYPE "foo_enum";},
|
75
|
+
%{DROP TYPE IF EXISTS "foo_enum";},
|
76
|
+
%{DROP TYPE "foo_enum" CASCADE;},
|
77
|
+
%{DROP TYPE "foo_enum", "bar_enum";}
|
78
|
+
], statements)
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_enum_values
|
82
|
+
ARBC.real_execute do
|
83
|
+
Mig.create_enum(:foo_enum, :one, :two, :three)
|
84
|
+
|
85
|
+
assert_equal(%w{ one two three }, ARBC.enum_values(:foo_enum))
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_both_before_and_after_add_enum_value
|
90
|
+
assert_raises(ActiveRecord::InvalidAddEnumValueOptions) do
|
91
|
+
Mig.add_enum_value(:foo_enum, :blort, :after => :foo, :before => :bar)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|