activerecord-oracle_enhanced-adapter 5.2.8 → 6.0.0.beta1

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.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/History.md +79 -13
  3. data/README.md +1 -7
  4. data/VERSION +1 -1
  5. data/lib/active_record/connection_adapters/oracle_enhanced/connection.rb +10 -13
  6. data/lib/active_record/connection_adapters/oracle_enhanced/context_index.rb +7 -7
  7. data/lib/active_record/connection_adapters/oracle_enhanced/database_limits.rb +4 -0
  8. data/lib/active_record/connection_adapters/oracle_enhanced/database_statements.rb +7 -18
  9. data/lib/active_record/connection_adapters/oracle_enhanced/database_tasks.rb +1 -1
  10. data/lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb +17 -4
  11. data/lib/active_record/connection_adapters/oracle_enhanced/oci_connection.rb +32 -32
  12. data/lib/active_record/connection_adapters/oracle_enhanced/quoting.rb +17 -27
  13. data/lib/active_record/connection_adapters/oracle_enhanced/schema_creation.rb +4 -4
  14. data/lib/active_record/connection_adapters/oracle_enhanced/schema_definitions.rb +13 -3
  15. data/lib/active_record/connection_adapters/oracle_enhanced/schema_dumper.rb +1 -13
  16. data/lib/active_record/connection_adapters/oracle_enhanced/schema_statements.rb +55 -71
  17. data/lib/active_record/connection_adapters/oracle_enhanced/structure_dump.rb +27 -17
  18. data/lib/active_record/connection_adapters/oracle_enhanced_adapter.rb +87 -61
  19. data/lib/active_record/type/oracle_enhanced/character_string.rb +36 -0
  20. data/spec/active_record/connection_adapters/emulation/oracle_adapter_spec.rb +0 -2
  21. data/spec/active_record/connection_adapters/oracle_enhanced/connection_spec.rb +25 -50
  22. data/spec/active_record/connection_adapters/oracle_enhanced/context_index_spec.rb +5 -13
  23. data/spec/active_record/connection_adapters/oracle_enhanced/procedures_spec.rb +0 -2
  24. data/spec/active_record/connection_adapters/oracle_enhanced/quoting_spec.rb +0 -15
  25. data/spec/active_record/connection_adapters/oracle_enhanced/schema_dumper_spec.rb +1 -31
  26. data/spec/active_record/connection_adapters/oracle_enhanced/schema_statements_spec.rb +71 -253
  27. data/spec/active_record/connection_adapters/oracle_enhanced/structure_dump_spec.rb +2 -3
  28. data/spec/active_record/connection_adapters/oracle_enhanced_adapter_spec.rb +81 -81
  29. data/spec/active_record/connection_adapters/oracle_enhanced_data_types_spec.rb +0 -1
  30. data/spec/active_record/oracle_enhanced/type/boolean_spec.rb +0 -2
  31. data/spec/active_record/oracle_enhanced/type/character_string_spec.rb +43 -0
  32. data/spec/active_record/oracle_enhanced/type/decimal_spec.rb +56 -0
  33. data/spec/active_record/oracle_enhanced/type/dirty_spec.rb +1 -1
  34. data/spec/active_record/oracle_enhanced/type/json_spec.rb +0 -1
  35. data/spec/active_record/oracle_enhanced/type/national_character_string_spec.rb +1 -2
  36. data/spec/active_record/oracle_enhanced/type/timestamp_spec.rb +0 -2
  37. data/spec/spec_helper.rb +2 -0
  38. metadata +27 -23
  39. data/lib/active_record/connection_adapters/oracle_enhanced/schema_statements_ext.rb +0 -28
@@ -8,6 +8,8 @@ describe "OracleEnhancedAdapter schema definition" do
8
8
  ActiveRecord::Base.establish_connection(CONNECTION_PARAMS)
9
9
  @oracle11g_or_higher = !! !! ActiveRecord::Base.connection.select_value(
10
10
  "select * from product_component_version where product like 'Oracle%' and to_number(substr(version,1,2)) >= 11")
11
+ @oracle12cr2_or_higher = !! !! ActiveRecord::Base.connection.select_value(
12
+ "select * from product_component_version where product like 'Oracle%' and to_number(substr(version,1,4)) >= 12.2")
11
13
  end
12
14
 
13
15
  describe "option to create sequence when adding a column" do
@@ -30,7 +32,6 @@ describe "OracleEnhancedAdapter schema definition" do
30
32
  end
31
33
 
32
34
  describe "table and sequence creation with non-default primary key" do
33
-
34
35
  before(:all) do
35
36
  @conn = ActiveRecord::Base.connection
36
37
  schema_define do
@@ -69,7 +70,6 @@ describe "OracleEnhancedAdapter schema definition" do
69
70
  end
70
71
 
71
72
  describe "default sequence name" do
72
-
73
73
  it "should return sequence name without truncating too much" do
74
74
  seq_name_length = ActiveRecord::Base.connection.sequence_name_length
75
75
  tname = "#{DATABASE_USER}" + "." + "a" * (seq_name_length - DATABASE_USER.length) + "z" * (DATABASE_USER).length
@@ -78,7 +78,6 @@ describe "OracleEnhancedAdapter schema definition" do
78
78
  end
79
79
 
80
80
  describe "sequence creation parameters" do
81
-
82
81
  def create_test_employees_table(sequence_start_value = nil)
83
82
  schema_define do
84
83
  create_table :test_employees, sequence_start_value ? { sequence_start_value: sequence_start_value } : {} do |t|
@@ -113,24 +112,24 @@ describe "OracleEnhancedAdapter schema definition" do
113
112
  ActiveRecord::Base.clear_cache!
114
113
  end
115
114
 
116
- it "should use default sequence start value 10000" do
117
- expect(ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.default_sequence_start_value).to eq(10000)
115
+ it "should use default sequence start value 1" do
116
+ expect(ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.default_sequence_start_value).to eq(1)
118
117
 
119
118
  create_test_employees_table
120
119
  class ::TestEmployee < ActiveRecord::Base; end
121
120
 
122
121
  employee = TestEmployee.create!
123
- expect(employee.id).to eq(10000)
122
+ expect(employee.id).to eq(1)
124
123
  end
125
124
 
126
125
  it "should use specified default sequence start value" do
127
- ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.default_sequence_start_value = 1
126
+ ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.default_sequence_start_value = 10000
128
127
 
129
128
  create_test_employees_table
130
129
  class ::TestEmployee < ActiveRecord::Base; end
131
130
 
132
131
  employee = TestEmployee.create!
133
- expect(employee.id).to eq(1)
132
+ expect(employee.id).to eq(10000)
134
133
  end
135
134
 
136
135
  it "should use sequence start value from table definition" do
@@ -150,177 +149,9 @@ describe "OracleEnhancedAdapter schema definition" do
150
149
  employee = TestEmployee.create!
151
150
  expect(employee.id).to eq(110)
152
151
  end
153
-
154
- end
155
-
156
- describe "create table with primary key trigger" do
157
- def create_table_with_trigger(options = {})
158
- options.merge! primary_key_trigger: true, force: true
159
- schema_define do
160
- create_table :test_employees, options do |t|
161
- t.string :first_name
162
- t.string :last_name
163
- end
164
- end
165
- end
166
-
167
- def create_table_and_separately_trigger(options = {})
168
- options.merge! force: true
169
- schema_define do
170
- create_table :test_employees, options do |t|
171
- t.string :first_name
172
- t.string :last_name
173
- end
174
- add_primary_key_trigger :test_employees, options
175
- end
176
- end
177
-
178
- def drop_table_with_trigger(options = {})
179
- seq_name = options[:sequence_name]
180
- schema_define do
181
- drop_table :test_employees, (seq_name ? { sequence_name: seq_name } : {})
182
- end
183
- Object.send(:remove_const, "TestEmployee")
184
- ActiveRecord::Base.clear_cache!
185
- end
186
-
187
- describe "with default primary key" do
188
- before(:all) do
189
- @conn = ActiveRecord::Base.connection
190
- create_table_with_trigger
191
- class ::TestEmployee < ActiveRecord::Base
192
- end
193
- end
194
-
195
- after(:all) do
196
- drop_table_with_trigger
197
- end
198
-
199
- it "should populate primary key using trigger" do
200
- expect do
201
- @conn.execute "INSERT INTO test_employees (first_name) VALUES ('Raimonds')"
202
- end.not_to raise_error
203
- end
204
-
205
- it "should return new key value using connection insert method" do
206
- insert_id = @conn.insert("INSERT INTO test_employees (first_name) VALUES ('Raimonds')", nil, "id")
207
- expect(@conn.select_value("SELECT test_employees_seq.currval FROM dual")).to eq(insert_id)
208
- end
209
-
210
- it "should create new record for model" do
211
- e = TestEmployee.create!(first_name: "Raimonds")
212
- expect(@conn.select_value("SELECT test_employees_seq.currval FROM dual")).to eq(e.id)
213
- end
214
-
215
- it "should not generate NoMethodError for :returning_id:Symbol" do
216
- set_logger
217
- @conn.reconnect! unless @conn.active?
218
- @conn.insert("INSERT INTO test_employees (first_name) VALUES ('Yasuo')", nil, "id")
219
- expect(@logger.output(:error)).not_to match(/^Could not log "sql.active_record" event. NoMethodError: undefined method `name' for :returning_id:Symbol/)
220
- clear_logger
221
- end
222
-
223
- end
224
-
225
- describe "with separate creation of primary key trigger" do
226
- before(:all) do
227
- ActiveRecord::Base.establish_connection(CONNECTION_PARAMS)
228
- @conn = ActiveRecord::Base.connection
229
- create_table_and_separately_trigger
230
- class ::TestEmployee < ActiveRecord::Base
231
- end
232
- end
233
-
234
- after(:all) do
235
- drop_table_with_trigger
236
- end
237
-
238
- it "should populate primary key using trigger" do
239
- expect do
240
- @conn.execute "INSERT INTO test_employees (first_name) VALUES ('Raimonds')"
241
- end.not_to raise_error
242
- end
243
-
244
- it "should return new key value using connection insert method" do
245
- insert_id = @conn.insert("INSERT INTO test_employees (first_name) VALUES ('Raimonds')", nil, "id")
246
- expect(@conn.select_value("SELECT test_employees_seq.currval FROM dual")).to eq(insert_id)
247
- end
248
-
249
- it "should create new record for model" do
250
- e = TestEmployee.create!(first_name: "Raimonds")
251
- expect(@conn.select_value("SELECT test_employees_seq.currval FROM dual")).to eq(e.id)
252
- end
253
- end
254
-
255
- describe "with non-default primary key and non-default sequence name" do
256
- before(:all) do
257
- ActiveRecord::Base.establish_connection(CONNECTION_PARAMS)
258
- @conn = ActiveRecord::Base.connection
259
- @primary_key = "employee_id"
260
- @sequence_name = "test_employees_s"
261
- create_table_with_trigger(primary_key: @primary_key, sequence_name: @sequence_name)
262
- class ::TestEmployee < ActiveRecord::Base
263
- self.primary_key = "employee_id"
264
- end
265
- end
266
-
267
- after(:all) do
268
- drop_table_with_trigger(sequence_name: @sequence_name)
269
- end
270
-
271
- it "should populate primary key using trigger" do
272
- expect do
273
- @conn.execute "INSERT INTO test_employees (first_name) VALUES ('Raimonds')"
274
- end.not_to raise_error
275
- end
276
-
277
- it "should return new key value using connection insert method" do
278
- insert_id = @conn.insert("INSERT INTO test_employees (first_name) VALUES ('Raimonds')", nil, @primary_key)
279
- expect(@conn.select_value("SELECT #{@sequence_name}.currval FROM dual")).to eq(insert_id)
280
- end
281
-
282
- it "should create new record for model with autogenerated sequence option" do
283
- e = TestEmployee.create!(first_name: "Raimonds")
284
- expect(@conn.select_value("SELECT #{@sequence_name}.currval FROM dual")).to eq(e.id)
285
- end
286
- end
287
-
288
- describe "with non-default sequence name and non-default trigger name" do
289
- before(:all) do
290
- ActiveRecord::Base.establish_connection(CONNECTION_PARAMS)
291
- @conn = ActiveRecord::Base.connection
292
- @sequence_name = "test_employees_s"
293
- create_table_with_trigger(sequence_name: @sequence_name, trigger_name: "test_employees_t1")
294
- class ::TestEmployee < ActiveRecord::Base
295
- self.sequence_name = :autogenerated
296
- end
297
- end
298
-
299
- after(:all) do
300
- drop_table_with_trigger(sequence_name: @sequence_name)
301
- end
302
-
303
- it "should populate primary key using trigger" do
304
- expect do
305
- @conn.execute "INSERT INTO test_employees (first_name) VALUES ('Raimonds')"
306
- end.not_to raise_error
307
- end
308
-
309
- it "should return new key value using connection insert method" do
310
- insert_id = @conn.insert("INSERT INTO test_employees (first_name) VALUES ('Raimonds')", nil, "id")
311
- expect(@conn.select_value("SELECT #{@sequence_name}.currval FROM dual")).to eq(insert_id)
312
- end
313
-
314
- it "should create new record for model with autogenerated sequence option" do
315
- e = TestEmployee.create!(first_name: "Raimonds")
316
- expect(@conn.select_value("SELECT #{@sequence_name}.currval FROM dual")).to eq(e.id)
317
- end
318
- end
319
-
320
152
  end
321
153
 
322
154
  describe "table and column comments" do
323
-
324
155
  def create_test_employees_table(table_comment = nil, column_comments = {})
325
156
  schema_define do
326
157
  create_table :test_employees, comment: table_comment do |t|
@@ -390,9 +221,8 @@ describe "OracleEnhancedAdapter schema definition" do
390
221
  create_test_employees_table(table_comment)
391
222
  class ::TestEmployee < ActiveRecord::Base; end
392
223
  expect(@conn.table_comment(TestEmployee.table_name)).to eq(table_comment)
393
- expect(@logger.logged(:debug).last).to match(/:owner/)
394
224
  expect(@logger.logged(:debug).last).to match(/:table_name/)
395
- expect(@logger.logged(:debug).last).to match(/\[\["owner", "#{DATABASE_USER.upcase}"\], \["table_name", "TEST_EMPLOYEES"\]\]/)
225
+ expect(@logger.logged(:debug).last).to match(/\["table_name", "TEST_EMPLOYEES"\]\]/)
396
226
  end
397
227
 
398
228
  it "should query column_comment using bind variables" do
@@ -401,12 +231,10 @@ describe "OracleEnhancedAdapter schema definition" do
401
231
  create_test_employees_table(table_comment, column_comment)
402
232
  class ::TestEmployee < ActiveRecord::Base; end
403
233
  expect(@conn.column_comment(TestEmployee.table_name, :first_name)).to eq(column_comment[:first_name])
404
- expect(@logger.logged(:debug).last).to match(/:owner/)
405
234
  expect(@logger.logged(:debug).last).to match(/:table_name/)
406
235
  expect(@logger.logged(:debug).last).to match(/:column_name/)
407
- expect(@logger.logged(:debug).last).to match(/\[\["owner", "#{DATABASE_USER.upcase}"\], \["table_name", "TEST_EMPLOYEES"\], \["column_name", "FIRST_NAME"\]\]/)
236
+ expect(@logger.logged(:debug).last).to match(/\["table_name", "TEST_EMPLOYEES"\], \["column_name", "FIRST_NAME"\]\]/)
408
237
  end
409
-
410
238
  end
411
239
 
412
240
  describe "drop tables" do
@@ -471,45 +299,6 @@ describe "OracleEnhancedAdapter schema definition" do
471
299
  @conn.rename_table("test_employees_no_pkey", "new_test_employees_no_pkey")
472
300
  end.not_to raise_error
473
301
  end
474
-
475
- end
476
-
477
- describe "create triggers" do
478
-
479
- before(:all) do
480
- @conn = ActiveRecord::Base.connection
481
- schema_define do
482
- create_table :test_employees do |t|
483
- t.string :first_name
484
- t.string :last_name
485
- end
486
- end
487
- class ::TestEmployee < ActiveRecord::Base; end
488
- end
489
-
490
- after(:all) do
491
- schema_define do
492
- drop_table :test_employees
493
- end
494
- Object.send(:remove_const, "TestEmployee")
495
- ActiveRecord::Base.clear_cache!
496
- end
497
-
498
- it "should create table trigger with :new reference" do
499
- expect do
500
- @conn.execute <<-SQL
501
- CREATE OR REPLACE TRIGGER test_employees_pkt
502
- BEFORE INSERT ON test_employees FOR EACH ROW
503
- BEGIN
504
- IF inserting THEN
505
- IF :new.id IS NULL THEN
506
- SELECT test_employees_seq.NEXTVAL INTO :new.id FROM dual;
507
- END IF;
508
- END IF;
509
- END;
510
- SQL
511
- end.not_to raise_error
512
- end
513
302
  end
514
303
 
515
304
  describe "add index" do
@@ -522,19 +311,31 @@ describe "OracleEnhancedAdapter schema definition" do
522
311
  end
523
312
 
524
313
  it "should return shortened index name by removing 'index', 'on' and 'and' keywords" do
525
- expect(@conn.index_name("employees", column: ["first_name", "email"])).to eq("i_employees_first_name_email")
314
+ if @oracle12cr2_or_higher
315
+ expect(@conn.index_name("employees", column: ["first_name", "email"])).to eq("index_employees_on_first_name_and_email")
316
+ else
317
+ expect(@conn.index_name("employees", column: ["first_name", "email"])).to eq("i_employees_first_name_email")
318
+ end
526
319
  end
527
320
 
528
321
  it "should return shortened index name by shortening table and column names" do
529
- expect(@conn.index_name("employees", column: ["first_name", "last_name"])).to eq("i_emp_fir_nam_las_nam")
322
+ if @oracle12cr2_or_higher
323
+ expect(@conn.index_name("employees", column: ["first_name", "last_name"])).to eq("index_employees_on_first_name_and_last_name")
324
+ else
325
+ expect(@conn.index_name("employees", column: ["first_name", "last_name"])).to eq("i_emp_fir_nam_las_nam")
326
+ end
530
327
  end
531
328
 
532
329
  it "should raise error if too large index name cannot be shortened" do
533
- expect(@conn.index_name("test_employees", column: ["first_name", "middle_name", "last_name"])).to eq(
534
- "i" + Digest::SHA1.hexdigest("index_test_employees_on_first_name_and_middle_name_and_last_name")[0, 29]
535
- )
330
+ if @oracle12cr2_or_higher
331
+ expect(@conn.index_name("test_employees", column: ["first_name", "middle_name", "last_name"])).to eq(
332
+ ("index_test_employees_on_first_name_and_middle_name_and_last_name"))
333
+ else
334
+ expect(@conn.index_name("test_employees", column: ["first_name", "middle_name", "last_name"])).to eq(
335
+ "i" + Digest::SHA1.hexdigest("index_test_employees_on_first_name_and_middle_name_and_last_name")[0, 29]
336
+ )
337
+ end
536
338
  end
537
-
538
339
  end
539
340
 
540
341
  describe "rename index" do
@@ -565,6 +366,7 @@ describe "OracleEnhancedAdapter schema definition" do
565
366
  end
566
367
 
567
368
  it "should raise error when new index name length is too long" do
369
+ skip if @oracle12cr2_or_higher
568
370
  expect do
569
371
  @conn.rename_index("test_employees", "i_test_employees_first_name", "a" * 31)
570
372
  end.to raise_error(ArgumentError)
@@ -577,6 +379,7 @@ describe "OracleEnhancedAdapter schema definition" do
577
379
  end
578
380
 
579
381
  it "should rename index name with new one" do
382
+ skip if @oracle12cr2_or_higher
580
383
  expect do
581
384
  @conn.rename_index("test_employees", "i_test_employees_first_name", "new_index_name")
582
385
  end.not_to raise_error
@@ -609,7 +412,6 @@ end
609
412
  end
610
413
  end.not_to raise_error
611
414
  end
612
-
613
415
  end
614
416
 
615
417
  describe "foreign key constraints" do
@@ -737,11 +539,9 @@ end
737
539
  add_foreign_key :test_comments, :test_posts
738
540
  end
739
541
  ActiveRecord::Base.connection.foreign_keys(:test_comments)
740
- expect(@logger.logged(:debug).last).to match(/:owner/)
741
542
  expect(@logger.logged(:debug).last).to match(/:desc_table_name/)
742
- expect(@logger.logged(:debug).last).to match(/\[\["owner", "#{DATABASE_USER.upcase}"\], \["desc_table_name", "TEST_COMMENTS"\]\]/)
543
+ expect(@logger.logged(:debug).last).to match(/\["desc_table_name", "TEST_COMMENTS"\]\]/)
743
544
  end
744
-
745
545
  end
746
546
 
747
547
  describe "lob in table definition" do
@@ -930,7 +730,6 @@ end
930
730
  TestComment.create(body: "test", test_post_id: 1)
931
731
  end.to raise_error() { |e| expect(e.message).to match(/ORA-02291/) }
932
732
  end
933
-
934
733
  end
935
734
 
936
735
  describe "disable referential integrity" do
@@ -977,18 +776,12 @@ end
977
776
  @conn.execute "INSERT INTO test_comments (id, body, test_post_id) VALUES (3, 'test', 3)"
978
777
  end.to raise_error(ActiveRecord::InvalidForeignKey)
979
778
  end
980
-
981
779
  end
982
780
 
983
781
  describe "synonyms" do
984
782
  before(:all) do
985
783
  @conn = ActiveRecord::Base.connection
986
- @db_link = "db_link"
987
- @username = @db_link_username = CONNECTION_PARAMS[:username]
988
- @db_link_password = CONNECTION_PARAMS[:password]
989
- @db_link_database = CONNECTION_PARAMS[:database]
990
- @conn.execute "DROP DATABASE LINK #{@db_link}" rescue nil
991
- @conn.execute "CREATE DATABASE LINK #{@db_link} CONNECT TO #{@db_link_username} IDENTIFIED BY \"#{@db_link_password}\" USING '#{@db_link_database}'"
784
+ @username = CONNECTION_PARAMS[:username]
992
785
  schema_define do
993
786
  create_table :test_posts, force: true do |t|
994
787
  t.string :title
@@ -1000,7 +793,6 @@ end
1000
793
  schema_define do
1001
794
  drop_table :test_posts
1002
795
  end
1003
- @conn.execute "DROP DATABASE LINK #{@db_link}" rescue nil
1004
796
  end
1005
797
 
1006
798
  before(:each) do
@@ -1028,18 +820,6 @@ end
1028
820
  TestPost.create(title: "test")
1029
821
  end.not_to raise_error
1030
822
  end
1031
-
1032
- it "should create synonym to table over database link" do
1033
- db_link = @db_link
1034
- schema_define do
1035
- add_synonym :synonym_to_posts, "test_posts@#{db_link}", force: true
1036
- add_synonym :synonym_to_posts_seq, "test_posts_seq@#{db_link}", force: true
1037
- end
1038
- expect do
1039
- TestPost.create(title: "test")
1040
- end.not_to raise_error
1041
- end
1042
-
1043
823
  end
1044
824
 
1045
825
  describe "alter columns with column cache" do
@@ -1090,6 +870,15 @@ end
1090
870
  expect(TestPost.columns_hash["body"]).not_to be_nil
1091
871
  end
1092
872
 
873
+ it "should add longer column" do
874
+ skip unless @oracle12cr2_or_higher
875
+ schema_define do
876
+ add_column :test_posts, "a" * 128, :string
877
+ end
878
+ TestPost.reset_column_information
879
+ expect(TestPost.columns_hash["a" * 128]).not_to be_nil
880
+ end
881
+
1093
882
  it "should add lob column with non_default tablespace" do
1094
883
  ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.default_tablespaces[:clob] = DATABASE_NON_DEFAULT_TABLESPACE
1095
884
  schema_define do
@@ -1295,13 +1084,43 @@ end
1295
1084
  end
1296
1085
  end
1297
1086
 
1087
+ describe "materialized views" do
1088
+ before(:all) do
1089
+ @conn = ActiveRecord::Base.connection
1090
+ schema_define do
1091
+ create_table :test_employees, force: true do |t|
1092
+ t.string :first_name
1093
+ t.string :last_name
1094
+ end
1095
+ end
1096
+ @conn.execute("create materialized view sum_test_employees as select first_name, count(*) from test_employees group by first_name")
1097
+ class ::TestEmployee < ActiveRecord::Base; end
1098
+ end
1099
+
1100
+ after(:all) do
1101
+ @conn.execute("drop materialized view sum_test_employees") rescue nil
1102
+ schema_define do
1103
+ drop_table :sum_test_employees, if_exists: true
1104
+ drop_table :test_employees, if_exists: true
1105
+ end
1106
+ end
1107
+
1108
+ it "tables should not return materialized views" do
1109
+ expect(@conn.tables).not_to include("sum_test_employees")
1110
+ end
1111
+
1112
+ it "materialized_views should return materialized views" do
1113
+ expect(@conn.materialized_views).to include("sum_test_employees")
1114
+ end
1115
+ end
1116
+
1298
1117
  describe "miscellaneous options" do
1299
1118
  before(:all) do
1300
1119
  @conn = ActiveRecord::Base.connection
1301
1120
  end
1302
1121
 
1303
1122
  before(:each) do
1304
- @conn.instance_variable_set :@would_execute_sql, @would_execute_sql = "".dup
1123
+ @conn.instance_variable_set :@would_execute_sql, @would_execute_sql = +""
1305
1124
  class <<@conn
1306
1125
  def execute(sql, name = nil); @would_execute_sql << sql << ";\n"; end
1307
1126
  end
@@ -1388,7 +1207,6 @@ end
1388
1207
  end
1389
1208
  expect(@would_execute_sql).not_to match(/ALTER +TABLE .* ADD CONSTRAINT .* UNIQUE \(.*\(.*\)\)/)
1390
1209
  end
1391
-
1392
1210
  end
1393
1211
 
1394
1212
  describe "load schema" do