activerecord-oracle_enhanced-adapter 5.2.8 → 7.0.3

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 (56) hide show
  1. checksums.yaml +4 -4
  2. data/History.md +390 -21
  3. data/README.md +35 -8
  4. data/VERSION +1 -1
  5. data/lib/active_record/connection_adapters/emulation/oracle_adapter.rb +1 -1
  6. data/lib/active_record/connection_adapters/oracle_enhanced/column.rb +3 -3
  7. data/lib/active_record/connection_adapters/oracle_enhanced/connection.rb +42 -37
  8. data/lib/active_record/connection_adapters/oracle_enhanced/context_index.rb +59 -60
  9. data/lib/active_record/connection_adapters/oracle_enhanced/database_limits.rb +5 -10
  10. data/lib/active_record/connection_adapters/oracle_enhanced/database_statements.rb +86 -81
  11. data/lib/active_record/connection_adapters/oracle_enhanced/database_tasks.rb +9 -10
  12. data/lib/active_record/connection_adapters/oracle_enhanced/dbms_output.rb +1 -2
  13. data/lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb +37 -16
  14. data/lib/active_record/connection_adapters/oracle_enhanced/jdbc_quoting.rb +1 -1
  15. data/lib/active_record/connection_adapters/oracle_enhanced/lob.rb +5 -6
  16. data/lib/active_record/connection_adapters/oracle_enhanced/oci_connection.rb +58 -49
  17. data/lib/active_record/connection_adapters/oracle_enhanced/oci_quoting.rb +1 -1
  18. data/lib/active_record/connection_adapters/oracle_enhanced/procedures.rb +6 -7
  19. data/lib/active_record/connection_adapters/oracle_enhanced/quoting.rb +75 -51
  20. data/lib/active_record/connection_adapters/oracle_enhanced/schema_creation.rb +13 -14
  21. data/lib/active_record/connection_adapters/oracle_enhanced/schema_definitions.rb +14 -4
  22. data/lib/active_record/connection_adapters/oracle_enhanced/schema_dumper.rb +27 -24
  23. data/lib/active_record/connection_adapters/oracle_enhanced/schema_statements.rb +156 -155
  24. data/lib/active_record/connection_adapters/oracle_enhanced/structure_dump.rb +103 -90
  25. data/lib/active_record/connection_adapters/oracle_enhanced/type_metadata.rb +3 -2
  26. data/lib/active_record/connection_adapters/oracle_enhanced_adapter.rb +261 -161
  27. data/lib/active_record/type/oracle_enhanced/boolean.rb +0 -1
  28. data/lib/active_record/type/oracle_enhanced/character_string.rb +36 -0
  29. data/lib/active_record/type/oracle_enhanced/integer.rb +0 -1
  30. data/lib/arel/visitors/oracle.rb +221 -0
  31. data/lib/arel/visitors/oracle12.rb +128 -0
  32. data/spec/active_record/connection_adapters/emulation/oracle_adapter_spec.rb +0 -2
  33. data/spec/active_record/connection_adapters/oracle_enhanced/connection_spec.rb +78 -26
  34. data/spec/active_record/connection_adapters/oracle_enhanced/context_index_spec.rb +7 -15
  35. data/spec/active_record/connection_adapters/oracle_enhanced/database_tasks_spec.rb +5 -0
  36. data/spec/active_record/connection_adapters/oracle_enhanced/dbms_output_spec.rb +17 -17
  37. data/spec/active_record/connection_adapters/oracle_enhanced/procedures_spec.rb +7 -10
  38. data/spec/active_record/connection_adapters/oracle_enhanced/quoting_spec.rb +0 -15
  39. data/spec/active_record/connection_adapters/oracle_enhanced/schema_dumper_spec.rb +33 -36
  40. data/spec/active_record/connection_adapters/oracle_enhanced/schema_statements_spec.rb +77 -258
  41. data/spec/active_record/connection_adapters/oracle_enhanced/structure_dump_spec.rb +38 -39
  42. data/spec/active_record/connection_adapters/oracle_enhanced_adapter_spec.rb +273 -85
  43. data/spec/active_record/connection_adapters/oracle_enhanced_data_types_spec.rb +7 -8
  44. data/spec/active_record/oracle_enhanced/type/boolean_spec.rb +2 -4
  45. data/spec/active_record/oracle_enhanced/type/character_string_spec.rb +43 -0
  46. data/spec/active_record/oracle_enhanced/type/custom_spec.rb +90 -0
  47. data/spec/active_record/oracle_enhanced/type/decimal_spec.rb +56 -0
  48. data/spec/active_record/oracle_enhanced/type/dirty_spec.rb +1 -1
  49. data/spec/active_record/oracle_enhanced/type/integer_spec.rb +2 -2
  50. data/spec/active_record/oracle_enhanced/type/json_spec.rb +0 -1
  51. data/spec/active_record/oracle_enhanced/type/national_character_string_spec.rb +6 -5
  52. data/spec/active_record/oracle_enhanced/type/timestamp_spec.rb +2 -4
  53. data/spec/spec_config.yaml.template +2 -2
  54. data/spec/spec_helper.rb +13 -2
  55. metadata +52 -30
  56. data/lib/active_record/connection_adapters/oracle_enhanced/schema_statements_ext.rb +0 -28
@@ -47,13 +47,13 @@ describe "OracleEnhancedAdapter structure dump" do
47
47
  end
48
48
 
49
49
  it "should dump composite primary keys" do
50
- pk = @conn.send(:select_one, <<-SQL)
50
+ pk = @conn.send(:select_one, <<~SQL)
51
51
  select constraint_name from user_constraints where table_name = 'TEST_POSTS' and constraint_type='P'
52
52
  SQL
53
- @conn.execute <<-SQL
53
+ @conn.execute <<~SQL
54
54
  alter table test_posts drop constraint #{pk["constraint_name"]}
55
55
  SQL
56
- @conn.execute <<-SQL
56
+ @conn.execute <<~SQL
57
57
  ALTER TABLE TEST_POSTS
58
58
  add CONSTRAINT pk_id_title PRIMARY KEY (id, title)
59
59
  SQL
@@ -62,33 +62,33 @@ describe "OracleEnhancedAdapter structure dump" do
62
62
  end
63
63
 
64
64
  it "should dump foreign keys" do
65
- @conn.execute <<-SQL
65
+ @conn.execute <<~SQL
66
66
  ALTER TABLE TEST_POSTS
67
67
  ADD CONSTRAINT fk_test_post_foo FOREIGN KEY (foo_id) REFERENCES foos(id)
68
68
  SQL
69
- dump = ActiveRecord::Base.connection.structure_dump_fk_constraints
69
+ dump = ActiveRecord::Base.connection.structure_dump
70
70
  expect(dump.split('\n').length).to eq(1)
71
- expect(dump).to match(/ALTER TABLE \"?TEST_POSTS\"? ADD CONSTRAINT \"?FK_TEST_POST_FOO\"? FOREIGN KEY \(\"?FOO_ID\"?\) REFERENCES \"?FOOS\"?\(\"?ID\"?\)/i)
71
+ expect(dump).to match(/ALTER TABLE "?TEST_POSTS"? ADD CONSTRAINT "?FK_TEST_POST_FOO"? FOREIGN KEY \("?FOO_ID"?\) REFERENCES "?FOOS"?\("?ID"?\)/i)
72
72
  end
73
73
 
74
74
  it "should dump foreign keys when reference column name is not 'id'" do
75
75
  @conn.add_column :foos, :baz_id, :integer
76
76
 
77
- @conn.execute <<-SQL
77
+ @conn.execute <<~SQL
78
78
  ALTER TABLE FOOS
79
79
  ADD CONSTRAINT UK_BAZ UNIQUE (BAZ_ID)
80
80
  SQL
81
81
 
82
82
  @conn.add_column :test_posts, :baz_id, :integer
83
83
 
84
- @conn.execute <<-SQL
84
+ @conn.execute <<~SQL
85
85
  ALTER TABLE TEST_POSTS
86
86
  ADD CONSTRAINT fk_test_post_baz FOREIGN KEY (baz_id) REFERENCES foos(baz_id)
87
87
  SQL
88
88
 
89
- dump = ActiveRecord::Base.connection.structure_dump_fk_constraints
89
+ dump = ActiveRecord::Base.connection.structure_dump
90
90
  expect(dump.split('\n').length).to eq(1)
91
- expect(dump).to match(/ALTER TABLE \"?TEST_POSTS\"? ADD CONSTRAINT \"?FK_TEST_POST_BAZ\"? FOREIGN KEY \(\"?BAZ_ID\"?\) REFERENCES \"?FOOS\"?\(\"?BAZ_ID\"?\)/i)
91
+ expect(dump).to match(/ALTER TABLE "?TEST_POSTS"? ADD CONSTRAINT "?FK_TEST_POST_BAZ"? FOREIGN KEY \("?BAZ_ID"?\) REFERENCES "?FOOS"?\("?BAZ_ID"?\)/i)
92
92
  end
93
93
 
94
94
  it "should not error when no foreign keys are present" do
@@ -98,7 +98,7 @@ describe "OracleEnhancedAdapter structure dump" do
98
98
  end
99
99
 
100
100
  it "should dump triggers" do
101
- @conn.execute <<-SQL
101
+ @conn.execute <<~SQL
102
102
  create or replace TRIGGER TEST_POST_TRIGGER
103
103
  BEFORE INSERT
104
104
  ON TEST_POSTS
@@ -112,7 +112,7 @@ describe "OracleEnhancedAdapter structure dump" do
112
112
  end
113
113
 
114
114
  it "should dump types" do
115
- @conn.execute <<-SQL
115
+ @conn.execute <<~SQL
116
116
  create or replace TYPE TEST_TYPE AS TABLE OF VARCHAR2(10);
117
117
  SQL
118
118
  dump = ActiveRecord::Base.connection.structure_dump_db_stored_code.gsub(/\n|\s+/, " ")
@@ -122,13 +122,13 @@ describe "OracleEnhancedAdapter structure dump" do
122
122
  it "should dump views" do
123
123
  @conn.execute "create or replace VIEW test_posts_view_z as select * from test_posts"
124
124
  @conn.execute "create or replace VIEW test_posts_view_a as select * from test_posts_view_z"
125
- dump = ActiveRecord::Base.connection.structure_dump_db_stored_code.gsub(/\n|\s+/, " ")
125
+ dump = ActiveRecord::Base.connection.structure_dump.gsub(/\n|\s+/, " ")
126
126
  expect(dump).to match(/CREATE OR REPLACE FORCE VIEW TEST_POSTS_VIEW_A.*CREATE OR REPLACE FORCE VIEW TEST_POSTS_VIEW_Z/)
127
127
  end
128
128
 
129
129
  it "should dump virtual columns" do
130
130
  skip "Not supported in this database version" unless @oracle11g_or_higher
131
- @conn.execute <<-SQL
131
+ @conn.execute <<~SQL
132
132
  CREATE TABLE bars (
133
133
  id NUMBER(38,0) NOT NULL,
134
134
  id_plus NUMBER GENERATED ALWAYS AS(id + 2) VIRTUAL,
@@ -136,12 +136,12 @@ describe "OracleEnhancedAdapter structure dump" do
136
136
  )
137
137
  SQL
138
138
  dump = ActiveRecord::Base.connection.structure_dump
139
- expect(dump).to match(/\"?ID_PLUS\"? NUMBER GENERATED ALWAYS AS \(ID\+2\) VIRTUAL/)
139
+ expect(dump).to match(/"?ID_PLUS"? NUMBER GENERATED ALWAYS AS \(ID\+2\) VIRTUAL/)
140
140
  end
141
141
 
142
142
  it "should dump RAW virtual columns" do
143
143
  skip "Not supported in this database version" unless @oracle11g_or_higher
144
- @conn.execute <<-SQL
144
+ @conn.execute <<~SQL
145
145
  CREATE TABLE bars (
146
146
  id NUMBER(38,0) NOT NULL,
147
147
  super RAW(255) GENERATED ALWAYS AS \( HEXTORAW\(ID\) \) VIRTUAL,
@@ -149,11 +149,11 @@ describe "OracleEnhancedAdapter structure dump" do
149
149
  )
150
150
  SQL
151
151
  dump = ActiveRecord::Base.connection.structure_dump
152
- expect(dump).to match(/CREATE TABLE \"BARS\" \(\n \"ID\" NUMBER\(38,0\) NOT NULL,\n \"SUPER\" RAW\(255\) GENERATED ALWAYS AS \(HEXTORAW\(TO_CHAR\(ID\)\)\) VIRTUAL/)
152
+ expect(dump).to match(/CREATE TABLE "BARS" \(\n "ID" NUMBER\(38,0\) NOT NULL,\n "SUPER" RAW\(255\) GENERATED ALWAYS AS \(HEXTORAW\(TO_CHAR\(ID\)\)\) VIRTUAL/)
153
153
  end
154
154
 
155
155
  it "should dump NCLOB columns" do
156
- @conn.execute <<-SQL
156
+ @conn.execute <<~SQL
157
157
  CREATE TABLE bars (
158
158
  id NUMBER(38,0) NOT NULL,
159
159
  nclob_text NCLOB,
@@ -161,11 +161,11 @@ describe "OracleEnhancedAdapter structure dump" do
161
161
  )
162
162
  SQL
163
163
  dump = ActiveRecord::Base.connection.structure_dump
164
- expect(dump).to match(/CREATE TABLE \"BARS\" \(\n \"ID\" NUMBER\(38,0\) NOT NULL,\n \"NCLOB_TEXT\" NCLOB/)
164
+ expect(dump).to match(/CREATE TABLE "BARS" \(\n "ID" NUMBER\(38,0\) NOT NULL,\n "NCLOB_TEXT" NCLOB/)
165
165
  end
166
166
 
167
167
  it "should dump unique keys" do
168
- @conn.execute <<-SQL
168
+ @conn.execute <<~SQL
169
169
  ALTER TABLE test_posts
170
170
  add CONSTRAINT uk_foo_foo_id UNIQUE (foo, foo_id)
171
171
  SQL
@@ -180,31 +180,31 @@ describe "OracleEnhancedAdapter structure dump" do
180
180
  ActiveRecord::Base.connection.add_index(:test_posts, :foo, name: :ix_test_posts_foo)
181
181
  ActiveRecord::Base.connection.add_index(:test_posts, :foo_id, name: :ix_test_posts_foo_id, unique: true)
182
182
 
183
- @conn.execute <<-SQL
183
+ @conn.execute <<~SQL
184
184
  ALTER TABLE test_posts
185
185
  add CONSTRAINT uk_foo_foo_id UNIQUE (foo, foo_id)
186
186
  SQL
187
187
 
188
188
  dump = ActiveRecord::Base.connection.structure_dump
189
189
  expect(dump).to match(/CREATE UNIQUE INDEX "?IX_TEST_POSTS_FOO_ID"? ON "?TEST_POSTS"? \("?FOO_ID"?\)/i)
190
- expect(dump).to match(/CREATE INDEX "?IX_TEST_POSTS_FOO\"? ON "?TEST_POSTS"? \("?FOO"?\)/i)
190
+ expect(dump).to match(/CREATE INDEX "?IX_TEST_POSTS_FOO"? ON "?TEST_POSTS"? \("?FOO"?\)/i)
191
191
  expect(dump).not_to match(/CREATE UNIQUE INDEX "?UK_TEST_POSTS_/i)
192
192
  end
193
193
 
194
194
  it "should dump multi-value and function value indexes" do
195
195
  ActiveRecord::Base.connection.add_index(:test_posts, [:foo, :foo_id], name: :ix_test_posts_foo_foo_id)
196
196
 
197
- @conn.execute <<-SQL
197
+ @conn.execute <<~SQL
198
198
  CREATE INDEX "IX_TEST_POSTS_FUNCTION" ON "TEST_POSTS" (TO_CHAR(LENGTH("FOO"))||"FOO")
199
199
  SQL
200
200
 
201
201
  dump = ActiveRecord::Base.connection.structure_dump
202
- expect(dump).to match(/CREATE INDEX "?IX_TEST_POSTS_FOO_FOO_ID\"? ON "?TEST_POSTS"? \("?FOO"?, "?FOO_ID"?\)/i)
203
- expect(dump).to match(/CREATE INDEX "?IX_TEST_POSTS_FUNCTION\"? ON "?TEST_POSTS"? \(TO_CHAR\(LENGTH\("?FOO"?\)\)\|\|"?FOO"?\)/i)
202
+ expect(dump).to match(/CREATE INDEX "?IX_TEST_POSTS_FOO_FOO_ID"? ON "?TEST_POSTS"? \("?FOO"?, "?FOO_ID"?\)/i)
203
+ expect(dump).to match(/CREATE INDEX "?IX_TEST_POSTS_FUNCTION"? ON "?TEST_POSTS"? \(TO_CHAR\(LENGTH\("?FOO"?\)\)\|\|"?FOO"?\)/i)
204
204
  end
205
205
 
206
206
  it "should dump RAW columns" do
207
- @conn.execute <<-SQL
207
+ @conn.execute <<~SQL
208
208
  CREATE TABLE bars (
209
209
  id NUMBER(38,0) NOT NULL,
210
210
  super RAW(255),
@@ -212,7 +212,7 @@ describe "OracleEnhancedAdapter structure dump" do
212
212
  )
213
213
  SQL
214
214
  dump = ActiveRecord::Base.connection.structure_dump
215
- expect(dump).to match(/CREATE TABLE \"BARS\" \(\n \"ID\" NUMBER\(38,0\) NOT NULL,\n \"SUPER\" RAW\(255\)/)
215
+ expect(dump).to match(/CREATE TABLE "BARS" \(\n "ID" NUMBER\(38,0\) NOT NULL,\n "SUPER" RAW\(255\)/)
216
216
  end
217
217
 
218
218
  it "should dump table comments" do
@@ -242,7 +242,6 @@ describe "OracleEnhancedAdapter structure dump" do
242
242
  dump = ActiveRecord::Base.connection.structure_dump
243
243
  expect(dump).to match(/#{comment_sql}/)
244
244
  end
245
-
246
245
  end
247
246
  describe "temporary tables" do
248
247
  after(:all) do
@@ -270,7 +269,7 @@ describe "OracleEnhancedAdapter structure dump" do
270
269
  end
271
270
  context "default sequence" do
272
271
  let(:sql) { "CREATE SEQUENCE \"#{sequence_name}\"" }
273
- it { is_expected.to_not match(%r{CREATE SEQUENCE \"#{sequence_name}" MAXVALUE \d+ MINVALUE \d+ NOORDER NOCYCLE}) }
272
+ it { is_expected.to_not match(%r{CREATE SEQUENCE "#{sequence_name}" MAXVALUE \d+ MINVALUE \d+ NOORDER NOCYCLE}) }
274
273
  end
275
274
  context "noorder" do
276
275
  let(:sql) { "CREATE SEQUENCE \"#{sequence_name}\" NOORDER" }
@@ -291,7 +290,7 @@ describe "OracleEnhancedAdapter structure dump" do
291
290
 
292
291
  describe "database structure dump extensions" do
293
292
  before(:all) do
294
- @conn.execute <<-SQL
293
+ @conn.execute <<~SQL
295
294
  CREATE TABLE nvarchartable (
296
295
  unq_nvarchar NVARCHAR2(255) DEFAULT NULL
297
296
  )
@@ -350,7 +349,7 @@ describe "OracleEnhancedAdapter structure dump" do
350
349
  it "should dump schema migrations using multi inserts" do
351
350
  skip "Not supported in this database version" unless ActiveRecord::Base.connection.supports_multi_insert?
352
351
 
353
- expect(dump).to eq <<-SQL.strip_heredoc
352
+ expect(dump).to eq <<~SQL
354
353
  INSERT ALL
355
354
  INTO "SCHEMA_MIGRATIONS" (version) VALUES ('20160101000000')
356
355
  INTO "SCHEMA_MIGRATIONS" (version) VALUES ('20160102000000')
@@ -395,20 +394,20 @@ describe "OracleEnhancedAdapter structure dump" do
395
394
  t.string :foo
396
395
  end
397
396
  # view
398
- @conn.execute <<-SQL
397
+ @conn.execute <<~SQL
399
398
  create or replace view full_drop_test_view (foo) as select id as "foo" from full_drop_test
400
399
  SQL
401
400
  # materialized view
402
- @conn.execute <<-SQL
401
+ @conn.execute <<~SQL
403
402
  create materialized view full_drop_test_mview (foo) as select id as "foo" from full_drop_test
404
403
  SQL
405
404
  # package
406
- @conn.execute <<-SQL
405
+ @conn.execute <<~SQL
407
406
  create or replace package full_drop_test_package as
408
407
  function test_func return varchar2;
409
408
  end test_package;
410
409
  SQL
411
- @conn.execute <<-SQL
410
+ @conn.execute <<~SQL
412
411
  create or replace package body full_drop_test_package as
413
412
  function test_func return varchar2 is
414
413
  begin
@@ -417,7 +416,7 @@ describe "OracleEnhancedAdapter structure dump" do
417
416
  end test_package;
418
417
  SQL
419
418
  # function
420
- @conn.execute <<-SQL
419
+ @conn.execute <<~SQL
421
420
  create or replace function full_drop_test_function
422
421
  return varchar2
423
422
  is
@@ -427,7 +426,7 @@ describe "OracleEnhancedAdapter structure dump" do
427
426
  end;
428
427
  SQL
429
428
  # procedure
430
- @conn.execute <<-SQL
429
+ @conn.execute <<~SQL
431
430
  create or replace procedure full_drop_test_procedure
432
431
  begin
433
432
  delete from full_drop_test where id=1231231231
@@ -437,11 +436,11 @@ describe "OracleEnhancedAdapter structure dump" do
437
436
  end;
438
437
  SQL
439
438
  # synonym
440
- @conn.execute <<-SQL
439
+ @conn.execute <<~SQL
441
440
  create or replace synonym full_drop_test_synonym for full_drop_test
442
441
  SQL
443
442
  # type
444
- @conn.execute <<-SQL
443
+ @conn.execute <<~SQL
445
444
  create or replace type full_drop_test_type as table of number
446
445
  SQL
447
446
  end