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.
- checksums.yaml +4 -4
- data/History.md +390 -21
- data/README.md +35 -8
- data/VERSION +1 -1
- data/lib/active_record/connection_adapters/emulation/oracle_adapter.rb +1 -1
- data/lib/active_record/connection_adapters/oracle_enhanced/column.rb +3 -3
- data/lib/active_record/connection_adapters/oracle_enhanced/connection.rb +42 -37
- data/lib/active_record/connection_adapters/oracle_enhanced/context_index.rb +59 -60
- data/lib/active_record/connection_adapters/oracle_enhanced/database_limits.rb +5 -10
- data/lib/active_record/connection_adapters/oracle_enhanced/database_statements.rb +86 -81
- data/lib/active_record/connection_adapters/oracle_enhanced/database_tasks.rb +9 -10
- data/lib/active_record/connection_adapters/oracle_enhanced/dbms_output.rb +1 -2
- data/lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb +37 -16
- data/lib/active_record/connection_adapters/oracle_enhanced/jdbc_quoting.rb +1 -1
- data/lib/active_record/connection_adapters/oracle_enhanced/lob.rb +5 -6
- data/lib/active_record/connection_adapters/oracle_enhanced/oci_connection.rb +58 -49
- data/lib/active_record/connection_adapters/oracle_enhanced/oci_quoting.rb +1 -1
- data/lib/active_record/connection_adapters/oracle_enhanced/procedures.rb +6 -7
- data/lib/active_record/connection_adapters/oracle_enhanced/quoting.rb +75 -51
- data/lib/active_record/connection_adapters/oracle_enhanced/schema_creation.rb +13 -14
- data/lib/active_record/connection_adapters/oracle_enhanced/schema_definitions.rb +14 -4
- data/lib/active_record/connection_adapters/oracle_enhanced/schema_dumper.rb +27 -24
- data/lib/active_record/connection_adapters/oracle_enhanced/schema_statements.rb +156 -155
- data/lib/active_record/connection_adapters/oracle_enhanced/structure_dump.rb +103 -90
- data/lib/active_record/connection_adapters/oracle_enhanced/type_metadata.rb +3 -2
- data/lib/active_record/connection_adapters/oracle_enhanced_adapter.rb +261 -161
- data/lib/active_record/type/oracle_enhanced/boolean.rb +0 -1
- data/lib/active_record/type/oracle_enhanced/character_string.rb +36 -0
- data/lib/active_record/type/oracle_enhanced/integer.rb +0 -1
- data/lib/arel/visitors/oracle.rb +221 -0
- data/lib/arel/visitors/oracle12.rb +128 -0
- data/spec/active_record/connection_adapters/emulation/oracle_adapter_spec.rb +0 -2
- data/spec/active_record/connection_adapters/oracle_enhanced/connection_spec.rb +78 -26
- data/spec/active_record/connection_adapters/oracle_enhanced/context_index_spec.rb +7 -15
- data/spec/active_record/connection_adapters/oracle_enhanced/database_tasks_spec.rb +5 -0
- data/spec/active_record/connection_adapters/oracle_enhanced/dbms_output_spec.rb +17 -17
- data/spec/active_record/connection_adapters/oracle_enhanced/procedures_spec.rb +7 -10
- data/spec/active_record/connection_adapters/oracle_enhanced/quoting_spec.rb +0 -15
- data/spec/active_record/connection_adapters/oracle_enhanced/schema_dumper_spec.rb +33 -36
- data/spec/active_record/connection_adapters/oracle_enhanced/schema_statements_spec.rb +77 -258
- data/spec/active_record/connection_adapters/oracle_enhanced/structure_dump_spec.rb +38 -39
- data/spec/active_record/connection_adapters/oracle_enhanced_adapter_spec.rb +273 -85
- data/spec/active_record/connection_adapters/oracle_enhanced_data_types_spec.rb +7 -8
- data/spec/active_record/oracle_enhanced/type/boolean_spec.rb +2 -4
- data/spec/active_record/oracle_enhanced/type/character_string_spec.rb +43 -0
- data/spec/active_record/oracle_enhanced/type/custom_spec.rb +90 -0
- data/spec/active_record/oracle_enhanced/type/decimal_spec.rb +56 -0
- data/spec/active_record/oracle_enhanced/type/dirty_spec.rb +1 -1
- data/spec/active_record/oracle_enhanced/type/integer_spec.rb +2 -2
- data/spec/active_record/oracle_enhanced/type/json_spec.rb +0 -1
- data/spec/active_record/oracle_enhanced/type/national_character_string_spec.rb +6 -5
- data/spec/active_record/oracle_enhanced/type/timestamp_spec.rb +2 -4
- data/spec/spec_config.yaml.template +2 -2
- data/spec/spec_helper.rb +13 -2
- metadata +52 -30
- 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,
|
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
|
53
|
+
@conn.execute <<~SQL
|
54
54
|
alter table test_posts drop constraint #{pk["constraint_name"]}
|
55
55
|
SQL
|
56
|
-
@conn.execute
|
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
|
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.
|
69
|
+
dump = ActiveRecord::Base.connection.structure_dump
|
70
70
|
expect(dump.split('\n').length).to eq(1)
|
71
|
-
expect(dump).to match(/ALTER TABLE
|
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
|
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
|
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.
|
89
|
+
dump = ActiveRecord::Base.connection.structure_dump
|
90
90
|
expect(dump.split('\n').length).to eq(1)
|
91
|
-
expect(dump).to match(/ALTER TABLE
|
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
|
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
|
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.
|
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
|
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(
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
203
|
-
expect(dump).to match(/CREATE INDEX "?IX_TEST_POSTS_FUNCTION
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
443
|
+
@conn.execute <<~SQL
|
445
444
|
create or replace type full_drop_test_type as table of number
|
446
445
|
SQL
|
447
446
|
end
|