activerecord-oracle_enhanced-adapter 1.6.9 → 1.7.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.
- checksums.yaml +4 -4
- data/Gemfile +10 -11
- data/History.md +126 -14
- data/README.md +9 -6
- data/RUNNING_TESTS.md +1 -1
- data/Rakefile +1 -16
- data/VERSION +1 -1
- data/activerecord-oracle_enhanced-adapter.gemspec +15 -52
- data/lib/active_record/connection_adapters/oracle_enhanced/column.rb +8 -22
- data/lib/active_record/connection_adapters/oracle_enhanced/column_dumper.rb +53 -45
- data/lib/active_record/connection_adapters/oracle_enhanced/connection.rb +6 -1
- data/lib/active_record/connection_adapters/oracle_enhanced/database_statements.rb +23 -62
- data/lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb +46 -56
- data/lib/active_record/connection_adapters/oracle_enhanced/jdbc_quoting.rb +35 -0
- data/lib/active_record/connection_adapters/oracle_enhanced/oci_connection.rb +34 -21
- data/lib/active_record/connection_adapters/oracle_enhanced/oci_quoting.rb +36 -0
- data/lib/active_record/connection_adapters/oracle_enhanced/procedures.rb +1 -1
- data/lib/active_record/connection_adapters/oracle_enhanced/quoting.rb +174 -0
- data/lib/active_record/connection_adapters/oracle_enhanced/schema_creation.rb +17 -8
- data/lib/active_record/connection_adapters/oracle_enhanced/schema_definitions.rb +17 -11
- data/lib/active_record/connection_adapters/oracle_enhanced/schema_dumper.rb +160 -178
- data/lib/active_record/connection_adapters/oracle_enhanced/schema_statements.rb +42 -94
- data/lib/active_record/connection_adapters/oracle_enhanced/schema_statements_ext.rb +50 -54
- data/lib/active_record/connection_adapters/oracle_enhanced/structure_dump.rb +15 -11
- data/lib/active_record/connection_adapters/oracle_enhanced_adapter.rb +197 -301
- data/lib/active_record/oracle_enhanced/type/integer.rb +3 -2
- data/lib/active_record/oracle_enhanced/type/national_character_string.rb +25 -0
- data/lib/active_record/oracle_enhanced/type/raw.rb +14 -2
- data/lib/active_record/oracle_enhanced/type/string.rb +28 -0
- data/lib/active_record/oracle_enhanced/type/text.rb +32 -0
- data/lib/activerecord-oracle_enhanced-adapter.rb +12 -17
- data/spec/active_record/connection_adapters/oracle_enhanced_adapter_spec.rb +113 -135
- data/spec/active_record/connection_adapters/oracle_enhanced_connection_spec.rb +51 -59
- data/spec/active_record/connection_adapters/oracle_enhanced_context_index_spec.rb +40 -41
- data/spec/active_record/connection_adapters/oracle_enhanced_cpk_spec.rb +6 -6
- data/spec/active_record/connection_adapters/oracle_enhanced_data_types_spec.rb +281 -233
- data/spec/active_record/connection_adapters/oracle_enhanced_database_tasks_spec.rb +7 -7
- data/spec/active_record/connection_adapters/oracle_enhanced_dbms_output_spec.rb +10 -10
- data/spec/active_record/connection_adapters/oracle_enhanced_dirty_spec.rb +22 -22
- data/spec/active_record/connection_adapters/oracle_enhanced_emulate_oracle_adapter_spec.rb +2 -2
- data/spec/active_record/connection_adapters/oracle_enhanced_procedures_spec.rb +36 -37
- data/spec/active_record/connection_adapters/oracle_enhanced_schema_dump_spec.rb +86 -46
- data/spec/active_record/connection_adapters/oracle_enhanced_schema_statements_spec.rb +194 -294
- data/spec/active_record/connection_adapters/oracle_enhanced_structure_dump_spec.rb +53 -39
- data/spec/spec_helper.rb +0 -6
- metadata +42 -143
- data/.travis.yml +0 -39
- data/.travis/oracle/download.sh +0 -14
- data/.travis/oracle/install.sh +0 -31
- data/.travis/setup_accounts.sh +0 -9
- data/lib/active_record/connection_adapters/oracle_enhanced/dirty.rb +0 -40
- data/lib/active_record/oracle_enhanced/type/timestamp.rb +0 -11
- data/spec/spec_config.yaml.template +0 -11
- data/spec/support/alter_system_user_password.sql +0 -2
- data/spec/support/create_oracle_enhanced_users.sql +0 -31
@@ -15,7 +15,7 @@ describe "Oracle Enhanced adapter database tasks" do
|
|
15
15
|
end
|
16
16
|
it "creates user" do
|
17
17
|
query = "SELECT COUNT(*) FROM dba_users WHERE UPPER(username) = '#{new_user_config[:username].upcase}'"
|
18
|
-
ActiveRecord::Base.connection.select_value(query).
|
18
|
+
expect(ActiveRecord::Base.connection.select_value(query)).to eq(1)
|
19
19
|
end
|
20
20
|
after do
|
21
21
|
ActiveRecord::Base.connection.execute("DROP USER #{new_user_config[:username]}");
|
@@ -42,15 +42,15 @@ describe "Oracle Enhanced adapter database tasks" do
|
|
42
42
|
describe "drop" do
|
43
43
|
before { ActiveRecord::Tasks::DatabaseTasks.drop(config) }
|
44
44
|
it "drops all tables" do
|
45
|
-
ActiveRecord::Base.connection.table_exists?(:test_posts).
|
45
|
+
expect(ActiveRecord::Base.connection.table_exists?(:test_posts)).to be_falsey
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
49
|
describe "purge" do
|
50
50
|
before { ActiveRecord::Tasks::DatabaseTasks.purge(config) }
|
51
51
|
it "drops all tables" do
|
52
|
-
ActiveRecord::Base.connection.table_exists?(:test_posts).
|
53
|
-
ActiveRecord::Base.connection.select_value("SELECT COUNT(*) FROM RECYCLEBIN").
|
52
|
+
expect(ActiveRecord::Base.connection.table_exists?(:test_posts)).to be_falsey
|
53
|
+
expect(ActiveRecord::Base.connection.select_value("SELECT COUNT(*) FROM RECYCLEBIN")).to eq(0)
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
@@ -65,8 +65,8 @@ describe "Oracle Enhanced adapter database tasks" do
|
|
65
65
|
before { ActiveRecord::Tasks::DatabaseTasks.structure_dump(config, temp_file) }
|
66
66
|
it "dumps the database structure to a file without the schema information" do
|
67
67
|
contents = File.read(temp_file)
|
68
|
-
contents.
|
69
|
-
contents.
|
68
|
+
expect(contents).to include('CREATE TABLE "TEST_POSTS"')
|
69
|
+
expect(contents).not_to include('INSERT INTO schema_migrations')
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
@@ -77,7 +77,7 @@ describe "Oracle Enhanced adapter database tasks" do
|
|
77
77
|
ActiveRecord::Tasks::DatabaseTasks.structure_load(config, temp_file)
|
78
78
|
end
|
79
79
|
it "loads the database structure from a file" do
|
80
|
-
ActiveRecord::Base.connection.table_exists?(:test_posts).
|
80
|
+
expect(ActiveRecord::Base.connection.table_exists?(:test_posts)).to be_truthy
|
81
81
|
end
|
82
82
|
end
|
83
83
|
|
@@ -42,28 +42,28 @@ describe "OracleEnhancedAdapter logging dbms_output from plsql" do
|
|
42
42
|
it "should NOT log dbms output when dbms output is disabled" do
|
43
43
|
@conn.disable_dbms_output
|
44
44
|
|
45
|
-
@conn.select_all("select more_than_five_characters_long('hi there') is_it_long from dual").to_a.
|
45
|
+
expect(@conn.select_all("select more_than_five_characters_long('hi there') is_it_long from dual").to_a).to eq([{'is_it_long'=>1}])
|
46
46
|
|
47
|
-
@logger.output(:debug).
|
47
|
+
expect(@logger.output(:debug)).not_to match(/^DBMS_OUTPUT/)
|
48
48
|
end
|
49
49
|
|
50
50
|
it "should log dbms output lines to the rails log" do
|
51
51
|
@conn.enable_dbms_output
|
52
52
|
|
53
|
-
@conn.select_all("select more_than_five_characters_long('hi there') is_it_long from dual").to_a.
|
53
|
+
expect(@conn.select_all("select more_than_five_characters_long('hi there') is_it_long from dual").to_a).to eq([{'is_it_long'=>1}])
|
54
54
|
|
55
|
-
@logger.output(:debug).
|
56
|
-
@logger.output(:debug).
|
57
|
-
@logger.output(:debug).
|
55
|
+
expect(@logger.output(:debug)).to match(/^DBMS_OUTPUT: before the if -hi there-$/)
|
56
|
+
expect(@logger.output(:debug)).to match(/^DBMS_OUTPUT: it is longer than 5$/)
|
57
|
+
expect(@logger.output(:debug)).to match(/^DBMS_OUTPUT: about to return: 1$/)
|
58
58
|
end
|
59
59
|
|
60
60
|
it "should log dbms output lines to the rails log" do
|
61
61
|
@conn.enable_dbms_output
|
62
62
|
|
63
|
-
@conn.select_all("select more_than_five_characters_long('short') is_it_long from dual").to_a.
|
63
|
+
expect(@conn.select_all("select more_than_five_characters_long('short') is_it_long from dual").to_a).to eq([{'is_it_long'=>0}])
|
64
64
|
|
65
|
-
@logger.output(:debug).
|
66
|
-
@logger.output(:debug).
|
67
|
-
@logger.output(:debug).
|
65
|
+
expect(@logger.output(:debug)).to match(/^DBMS_OUTPUT: before the if -short-$/)
|
66
|
+
expect(@logger.output(:debug)).to match(/^DBMS_OUTPUT: it is 5 or shorter$/)
|
67
|
+
expect(@logger.output(:debug)).to match(/^DBMS_OUTPUT: about to return: 0$/)
|
68
68
|
end
|
69
69
|
end
|
@@ -38,99 +38,99 @@ if ActiveRecord::Base.method_defined?(:changed?)
|
|
38
38
|
it "should not mark empty string (stored as NULL) as changed when reassigning it" do
|
39
39
|
@employee = TestEmployee.create!(:first_name => '')
|
40
40
|
@employee.first_name = ''
|
41
|
-
@employee.
|
41
|
+
expect(@employee).not_to be_changed
|
42
42
|
@employee.reload
|
43
43
|
@employee.first_name = ''
|
44
|
-
@employee.
|
44
|
+
expect(@employee).not_to be_changed
|
45
45
|
end
|
46
46
|
|
47
47
|
it "should not mark empty integer (stored as NULL) as changed when reassigning it" do
|
48
48
|
@employee = TestEmployee.create!(:job_id => '')
|
49
49
|
@employee.job_id = ''
|
50
|
-
@employee.
|
50
|
+
expect(@employee).not_to be_changed
|
51
51
|
@employee.reload
|
52
52
|
@employee.job_id = ''
|
53
|
-
@employee.
|
53
|
+
expect(@employee).not_to be_changed
|
54
54
|
end
|
55
55
|
|
56
56
|
it "should not mark empty decimal (stored as NULL) as changed when reassigning it" do
|
57
57
|
@employee = TestEmployee.create!(:salary => '')
|
58
58
|
@employee.salary = ''
|
59
|
-
@employee.
|
59
|
+
expect(@employee).not_to be_changed
|
60
60
|
@employee.reload
|
61
61
|
@employee.salary = ''
|
62
|
-
@employee.
|
62
|
+
expect(@employee).not_to be_changed
|
63
63
|
end
|
64
64
|
|
65
65
|
it "should not mark empty text (stored as NULL) as changed when reassigning it" do
|
66
66
|
@employee = TestEmployee.create!(:comments => nil)
|
67
67
|
@employee.comments = nil
|
68
|
-
@employee.
|
68
|
+
expect(@employee).not_to be_changed
|
69
69
|
@employee.reload
|
70
70
|
@employee.comments = nil
|
71
|
-
@employee.
|
71
|
+
expect(@employee).not_to be_changed
|
72
72
|
end
|
73
73
|
|
74
74
|
it "should not mark empty text (stored as empty_clob()) as changed when reassigning it" do
|
75
75
|
@employee = TestEmployee.create!(:comments => '')
|
76
76
|
@employee.comments = ''
|
77
|
-
@employee.
|
77
|
+
expect(@employee).not_to be_changed
|
78
78
|
@employee.reload
|
79
79
|
@employee.comments = ''
|
80
|
-
@employee.
|
80
|
+
expect(@employee).not_to be_changed
|
81
81
|
end
|
82
82
|
|
83
83
|
it "should mark empty text (stored as empty_clob()) as changed when assigning nil to it" do
|
84
84
|
@employee = TestEmployee.create!(:comments => '')
|
85
85
|
@employee.comments = nil
|
86
|
-
@employee.
|
86
|
+
expect(@employee).to be_changed
|
87
87
|
@employee.reload
|
88
88
|
@employee.comments = nil
|
89
|
-
@employee.
|
89
|
+
expect(@employee).to be_changed
|
90
90
|
end
|
91
91
|
|
92
92
|
it "should mark empty text (stored as NULL) as changed when assigning '' to it" do
|
93
93
|
@employee = TestEmployee.create!(:comments => nil)
|
94
94
|
@employee.comments = ''
|
95
|
-
@employee.
|
95
|
+
expect(@employee).to be_changed
|
96
96
|
@employee.reload
|
97
97
|
@employee.comments = ''
|
98
|
-
@employee.
|
98
|
+
expect(@employee).to be_changed
|
99
99
|
end
|
100
100
|
|
101
101
|
it "should not mark empty date (stored as NULL) as changed when reassigning it" do
|
102
102
|
@employee = TestEmployee.create!(:hire_date => '')
|
103
103
|
@employee.hire_date = ''
|
104
|
-
@employee.
|
104
|
+
expect(@employee).not_to be_changed
|
105
105
|
@employee.reload
|
106
106
|
@employee.hire_date = ''
|
107
|
-
@employee.
|
107
|
+
expect(@employee).not_to be_changed
|
108
108
|
end
|
109
109
|
|
110
110
|
it "should not mark integer as changed when reassigning it" do
|
111
111
|
@employee = TestEmployee.new
|
112
112
|
@employee.job_id = 0
|
113
|
-
@employee.save.
|
113
|
+
expect(@employee.save!).to be_truthy
|
114
114
|
|
115
|
-
@employee.
|
115
|
+
expect(@employee).not_to be_changed
|
116
116
|
|
117
117
|
@employee.job_id = '0'
|
118
|
-
@employee.
|
118
|
+
expect(@employee).not_to be_changed
|
119
119
|
end
|
120
120
|
|
121
121
|
it "should not update unchanged CLOBs" do
|
122
122
|
@employee = TestEmployee.create!(
|
123
123
|
:comments => "initial"
|
124
124
|
)
|
125
|
-
@employee.save.
|
125
|
+
expect(@employee.save!).to be_truthy
|
126
126
|
@employee.reload
|
127
|
-
@employee.comments.
|
127
|
+
expect(@employee.comments).to eq('initial')
|
128
128
|
|
129
129
|
oci_conn = @conn.instance_variable_get('@connection')
|
130
130
|
class << oci_conn
|
131
131
|
def write_lob(lob, value, is_binary = false); raise "don't do this'"; end
|
132
132
|
end
|
133
|
-
expect
|
133
|
+
expect{@employee.save!}.not_to raise_exception(RuntimeError, "don't do this'")
|
134
134
|
class << oci_conn
|
135
135
|
remove_method :write_lob
|
136
136
|
end
|
@@ -11,8 +11,8 @@ describe "OracleEnhancedAdapter emulate OracleAdapter" do
|
|
11
11
|
|
12
12
|
it "should be an OracleAdapter" do
|
13
13
|
@conn = ActiveRecord::Base.establish_connection(CONNECTION_PARAMS.merge(:emulate_oracle_adapter => true))
|
14
|
-
ActiveRecord::Base.connection.
|
15
|
-
ActiveRecord::Base.connection.is_a?(ActiveRecord::ConnectionAdapters::OracleAdapter).
|
14
|
+
expect(ActiveRecord::Base.connection).not_to be_nil
|
15
|
+
expect(ActiveRecord::Base.connection.is_a?(ActiveRecord::ConnectionAdapters::OracleAdapter)).to be_truthy
|
16
16
|
end
|
17
17
|
|
18
18
|
after(:all) do
|
@@ -166,12 +166,12 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
|
|
166
166
|
:hire_date => @today
|
167
167
|
)
|
168
168
|
@employee.reload
|
169
|
-
@employee.first_name.
|
170
|
-
@employee.last_name.
|
171
|
-
@employee.hire_date.
|
172
|
-
@employee.description.
|
173
|
-
@employee.create_time.
|
174
|
-
@employee.update_time.
|
169
|
+
expect(@employee.first_name).to eq("First")
|
170
|
+
expect(@employee.last_name).to eq("Last")
|
171
|
+
expect(@employee.hire_date).to eq(@today)
|
172
|
+
expect(@employee.description).to eq("First Last")
|
173
|
+
expect(@employee.create_time).not_to be_nil
|
174
|
+
expect(@employee.update_time).not_to be_nil
|
175
175
|
end
|
176
176
|
|
177
177
|
it "should rollback record when exception is raised in after_create callback" do
|
@@ -183,11 +183,11 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
|
|
183
183
|
:hire_date => @today
|
184
184
|
)
|
185
185
|
employees_count = TestEmployee.count
|
186
|
-
|
186
|
+
expect {
|
187
187
|
@employee.save
|
188
|
-
}.
|
189
|
-
@employee.
|
190
|
-
TestEmployee.count.
|
188
|
+
}.to raise_error("Make the transaction rollback")
|
189
|
+
expect(@employee.id).to eq(nil)
|
190
|
+
expect(TestEmployee.count).to eq(employees_count)
|
191
191
|
end
|
192
192
|
|
193
193
|
it "should update record" do
|
@@ -201,7 +201,7 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
|
|
201
201
|
@employee.first_name = "Second"
|
202
202
|
@employee.save!
|
203
203
|
@employee.reload
|
204
|
-
@employee.description.
|
204
|
+
expect(@employee.description).to eq("Second Last")
|
205
205
|
end
|
206
206
|
|
207
207
|
it "should rollback record when exception is raised in after_update callback" do
|
@@ -216,11 +216,11 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
|
|
216
216
|
empl_id = @employee.id
|
217
217
|
@employee.reload
|
218
218
|
@employee.first_name = "Second"
|
219
|
-
|
219
|
+
expect {
|
220
220
|
@employee.save
|
221
|
-
}.
|
221
|
+
}.to raise_error("Make the transaction rollback")
|
222
222
|
@employee.reload
|
223
|
-
@employee.first_name.
|
223
|
+
expect(@employee.first_name).to eq("First")
|
224
224
|
end
|
225
225
|
|
226
226
|
it "should not update record if nothing is changed and partial writes are enabled" do
|
@@ -233,7 +233,7 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
|
|
233
233
|
@employee.reload
|
234
234
|
@employee.save!
|
235
235
|
@employee.reload
|
236
|
-
@employee.version.
|
236
|
+
expect(@employee.version).to eq(1)
|
237
237
|
end
|
238
238
|
|
239
239
|
it "should update record if nothing is changed and partial writes are disabled" do
|
@@ -246,7 +246,7 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
|
|
246
246
|
@employee.reload
|
247
247
|
@employee.save!
|
248
248
|
@employee.reload
|
249
|
-
@employee.version.
|
249
|
+
expect(@employee.version).to eq(2)
|
250
250
|
end
|
251
251
|
|
252
252
|
it "should delete record" do
|
@@ -258,8 +258,8 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
|
|
258
258
|
@employee.reload
|
259
259
|
empl_id = @employee.id
|
260
260
|
@employee.destroy
|
261
|
-
@employee.
|
262
|
-
TestEmployee.find_by_employee_id(empl_id).
|
261
|
+
expect(@employee).to be_frozen
|
262
|
+
expect(TestEmployee.find_by_employee_id(empl_id)).to be_nil
|
263
263
|
end
|
264
264
|
|
265
265
|
it "should delete record and set destroyed flag" do
|
@@ -270,7 +270,7 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
|
|
270
270
|
)
|
271
271
|
@employee.reload
|
272
272
|
@employee.destroy
|
273
|
-
@employee.
|
273
|
+
expect(@employee).to be_destroyed
|
274
274
|
end
|
275
275
|
|
276
276
|
it "should rollback record when exception is raised in after_destroy callback" do
|
@@ -284,11 +284,11 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
|
|
284
284
|
)
|
285
285
|
@employee.reload
|
286
286
|
empl_id = @employee.id
|
287
|
-
|
287
|
+
expect {
|
288
288
|
@employee.destroy
|
289
|
-
}.
|
290
|
-
@employee.id.
|
291
|
-
TestEmployee.find_by_employee_id(empl_id).
|
289
|
+
}.to raise_error("Make the transaction rollback")
|
290
|
+
expect(@employee.id).to eq(empl_id)
|
291
|
+
expect(TestEmployee.find_by_employee_id(empl_id)).not_to be_nil
|
292
292
|
clear_logger
|
293
293
|
end
|
294
294
|
|
@@ -298,8 +298,8 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
|
|
298
298
|
:last_name => "Last",
|
299
299
|
:hire_date => @today
|
300
300
|
)
|
301
|
-
@employee.created_at.
|
302
|
-
@employee.updated_at.
|
301
|
+
expect(@employee.created_at).not_to be_nil
|
302
|
+
expect(@employee.updated_at).not_to be_nil
|
303
303
|
end
|
304
304
|
|
305
305
|
it "should set timestamps when updating record" do
|
@@ -309,12 +309,12 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
|
|
309
309
|
:hire_date => @today
|
310
310
|
)
|
311
311
|
@employee.reload
|
312
|
-
@employee.created_at.
|
313
|
-
@employee.updated_at.
|
312
|
+
expect(@employee.created_at).to be_nil
|
313
|
+
expect(@employee.updated_at).to be_nil
|
314
314
|
@employee.first_name = "Second"
|
315
315
|
@employee.save!
|
316
|
-
@employee.created_at.
|
317
|
-
@employee.updated_at.
|
316
|
+
expect(@employee.created_at).to be_nil
|
317
|
+
expect(@employee.updated_at).not_to be_nil
|
318
318
|
end
|
319
319
|
|
320
320
|
it "should log create record" do
|
@@ -324,8 +324,7 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
|
|
324
324
|
:last_name => "Last",
|
325
325
|
:hire_date => @today
|
326
326
|
)
|
327
|
-
|
328
|
-
@logger.logged(:debug)[-2].should match(/^TestEmployee Create \(\d+\.\d+(ms)?\) custom create method$/)
|
327
|
+
expect(@logger.logged(:debug).last).to match(/^TestEmployee Create \(\d+\.\d+(ms)?\) custom create method$/)
|
329
328
|
clear_logger
|
330
329
|
end
|
331
330
|
|
@@ -338,7 +337,7 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
|
|
338
337
|
)
|
339
338
|
set_logger
|
340
339
|
@employee.save!
|
341
|
-
@logger.logged(:debug).last.
|
340
|
+
expect(@logger.logged(:debug).last).to match(/^TestEmployee Update \(\d+\.\d+(ms)?\) custom update method with employee_id=#{@employee.id}$/)
|
342
341
|
clear_logger
|
343
342
|
end
|
344
343
|
|
@@ -350,7 +349,7 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
|
|
350
349
|
)
|
351
350
|
set_logger
|
352
351
|
@employee.destroy
|
353
|
-
@logger.logged(:debug).last.
|
352
|
+
expect(@logger.logged(:debug).last).to match(/^TestEmployee Destroy \(\d+\.\d+(ms)?\) custom delete method with employee_id=#{@employee.id}$/)
|
354
353
|
clear_logger
|
355
354
|
end
|
356
355
|
|
@@ -359,8 +358,8 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
|
|
359
358
|
:last_name => "Last",
|
360
359
|
:hire_date => @today
|
361
360
|
)
|
362
|
-
@employee.save.
|
363
|
-
@employee.errors[:first_name].
|
361
|
+
expect(@employee.save).to be_falsey
|
362
|
+
expect(@employee.errors[:first_name]).not_to be_blank
|
364
363
|
end
|
365
364
|
|
366
365
|
it "should validate existing record before update" do
|
@@ -370,8 +369,8 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
|
|
370
369
|
:hire_date => @today
|
371
370
|
)
|
372
371
|
@employee.first_name = nil
|
373
|
-
@employee.save.
|
374
|
-
@employee.errors[:first_name].
|
372
|
+
expect(@employee.save).to be_falsey
|
373
|
+
expect(@employee.errors[:first_name]).not_to be_blank
|
375
374
|
end
|
376
375
|
|
377
376
|
end
|
@@ -43,12 +43,12 @@ describe "OracleEnhancedAdapter schema dump" do
|
|
43
43
|
|
44
44
|
it "should not include ignored table names in schema dump" do
|
45
45
|
create_test_posts_table
|
46
|
-
standard_dump(ignore_tables: %w(test_posts)).
|
46
|
+
expect(standard_dump(ignore_tables: %w(test_posts))).not_to match(/create_table "test_posts"/)
|
47
47
|
end
|
48
48
|
|
49
49
|
it "should not include ignored table regexes in schema dump" do
|
50
50
|
create_test_posts_table
|
51
|
-
standard_dump(ignore_tables: [ /test_posts/i ]).
|
51
|
+
expect(standard_dump(ignore_tables: [ /test_posts/i ])).not_to match(/create_table "test_posts"/)
|
52
52
|
end
|
53
53
|
|
54
54
|
end
|
@@ -70,7 +70,7 @@ describe "OracleEnhancedAdapter schema dump" do
|
|
70
70
|
end
|
71
71
|
|
72
72
|
it "should be able to dump default values using special characters" do
|
73
|
-
standard_dump.
|
73
|
+
expect(standard_dump).to match(/t.string \"special_c\", default: "\\n"/)
|
74
74
|
end
|
75
75
|
end
|
76
76
|
describe "table prefixes and suffixes" do
|
@@ -84,37 +84,37 @@ describe "OracleEnhancedAdapter schema dump" do
|
|
84
84
|
it "should remove table prefix in schema dump" do
|
85
85
|
ActiveRecord::Base.table_name_prefix = 'xxx_'
|
86
86
|
create_test_posts_table
|
87
|
-
standard_dump.
|
87
|
+
expect(standard_dump).to match(/create_table "test_posts".*add_index "test_posts"/m)
|
88
88
|
end
|
89
89
|
|
90
90
|
it "should remove table prefix with $ sign in schema dump" do
|
91
91
|
ActiveRecord::Base.table_name_prefix = 'xxx$'
|
92
92
|
create_test_posts_table
|
93
|
-
standard_dump.
|
93
|
+
expect(standard_dump).to match(/create_table "test_posts".*add_index "test_posts"/m)
|
94
94
|
end
|
95
95
|
|
96
96
|
it "should remove table suffix in schema dump" do
|
97
97
|
ActiveRecord::Base.table_name_suffix = '_xxx'
|
98
98
|
create_test_posts_table
|
99
|
-
standard_dump.
|
99
|
+
expect(standard_dump).to match(/create_table "test_posts".*add_index "test_posts"/m)
|
100
100
|
end
|
101
101
|
|
102
102
|
it "should remove table suffix with $ sign in schema dump" do
|
103
103
|
ActiveRecord::Base.table_name_suffix = '$xxx'
|
104
104
|
create_test_posts_table
|
105
|
-
standard_dump.
|
105
|
+
expect(standard_dump).to match(/create_table "test_posts".*add_index "test_posts"/m)
|
106
106
|
end
|
107
107
|
|
108
108
|
it "should not include schema_migrations table with prefix in schema dump" do
|
109
109
|
ActiveRecord::Base.table_name_prefix = 'xxx_'
|
110
110
|
@conn.initialize_schema_migrations_table
|
111
|
-
standard_dump.
|
111
|
+
expect(standard_dump).not_to match(/schema_migrations/)
|
112
112
|
end
|
113
113
|
|
114
114
|
it "should not include schema_migrations table with suffix in schema dump" do
|
115
115
|
ActiveRecord::Base.table_name_suffix = '_xxx'
|
116
116
|
@conn.initialize_schema_migrations_table
|
117
|
-
standard_dump.
|
117
|
+
expect(standard_dump).not_to match(/schema_migrations/)
|
118
118
|
end
|
119
119
|
|
120
120
|
end
|
@@ -126,7 +126,7 @@ describe "OracleEnhancedAdapter schema dump" do
|
|
126
126
|
|
127
127
|
it "should include non-default primary key in schema dump" do
|
128
128
|
create_test_posts_table(primary_key: 'post_id')
|
129
|
-
standard_dump.
|
129
|
+
expect(standard_dump).to match(/create_table "test_posts", primary_key: "post_id"/)
|
130
130
|
end
|
131
131
|
|
132
132
|
end
|
@@ -140,12 +140,12 @@ describe "OracleEnhancedAdapter schema dump" do
|
|
140
140
|
|
141
141
|
it "should include primary key trigger in schema dump" do
|
142
142
|
create_test_posts_table(primary_key_trigger: true)
|
143
|
-
standard_dump.
|
143
|
+
expect(standard_dump).to match(/create_table "test_posts".*add_primary_key_trigger "test_posts"/m)
|
144
144
|
end
|
145
145
|
|
146
146
|
it "should include primary key trigger with non-default primary key in schema dump" do
|
147
147
|
create_test_posts_table(primary_key_trigger: true, primary_key: 'post_id')
|
148
|
-
standard_dump.
|
148
|
+
expect(standard_dump).to match(/create_table "test_posts", primary_key: "post_id".*add_primary_key_trigger "test_posts", primary_key: "post_id"/m)
|
149
149
|
end
|
150
150
|
|
151
151
|
end
|
@@ -180,49 +180,49 @@ describe "OracleEnhancedAdapter schema dump" do
|
|
180
180
|
schema_define do
|
181
181
|
add_foreign_key :test_comments, :test_posts
|
182
182
|
end
|
183
|
-
standard_dump.
|
183
|
+
expect(standard_dump).to match(/add_foreign_key "test_comments", "test_posts"/)
|
184
184
|
end
|
185
185
|
|
186
186
|
it "should include foreign key with delete dependency in schema dump" do
|
187
187
|
schema_define do
|
188
188
|
add_foreign_key :test_comments, :test_posts, dependent: :delete
|
189
189
|
end
|
190
|
-
standard_dump.
|
190
|
+
expect(standard_dump).to match(/add_foreign_key "test_comments", "test_posts", on_delete: :cascade/)
|
191
191
|
end
|
192
192
|
|
193
193
|
it "should include foreign key with nullify dependency in schema dump" do
|
194
194
|
schema_define do
|
195
195
|
add_foreign_key :test_comments, :test_posts, dependent: :nullify
|
196
196
|
end
|
197
|
-
standard_dump.
|
197
|
+
expect(standard_dump).to match(/add_foreign_key "test_comments", "test_posts", on_delete: :nullify/)
|
198
198
|
end
|
199
199
|
|
200
200
|
it "should not include foreign keys on ignored table names in schema dump" do
|
201
201
|
schema_define do
|
202
202
|
add_foreign_key :test_comments, :test_posts
|
203
203
|
end
|
204
|
-
standard_dump(ignore_tables: %w(test_comments)).
|
204
|
+
expect(standard_dump(ignore_tables: %w(test_comments))).not_to match(/add_foreign_key "test_comments"/)
|
205
205
|
end
|
206
206
|
|
207
207
|
it "should not include foreign keys on ignored table regexes in schema dump" do
|
208
208
|
schema_define do
|
209
209
|
add_foreign_key :test_comments, :test_posts
|
210
210
|
end
|
211
|
-
standard_dump(ignore_tables: [ /test_comments/i ]).
|
211
|
+
expect(standard_dump(ignore_tables: [ /test_comments/i ])).not_to match(/add_foreign_key "test_comments"/)
|
212
212
|
end
|
213
213
|
|
214
214
|
it "should include foreign keys referencing ignored table names in schema dump" do
|
215
215
|
schema_define do
|
216
216
|
add_foreign_key :test_comments, :test_posts
|
217
217
|
end
|
218
|
-
standard_dump(ignore_tables: %w(test_posts)).
|
218
|
+
expect(standard_dump(ignore_tables: %w(test_posts))).to match(/add_foreign_key "test_comments"/)
|
219
219
|
end
|
220
220
|
|
221
221
|
it "should include foreign keys referencing ignored table regexes in schema dump" do
|
222
222
|
schema_define do
|
223
223
|
add_foreign_key :test_comments, :test_posts
|
224
224
|
end
|
225
|
-
standard_dump(ignore_tables: [ /test_posts/i ]).
|
225
|
+
expect(standard_dump(ignore_tables: [ /test_posts/i ])).to match(/add_foreign_key "test_comments"/)
|
226
226
|
end
|
227
227
|
|
228
228
|
it "should include composite foreign keys" do
|
@@ -241,7 +241,7 @@ describe "OracleEnhancedAdapter schema dump" do
|
|
241
241
|
|
242
242
|
add_foreign_key :test_comments, :test_posts, columns: ["baz_id", "fooz_id"], name: 'comments_posts_baz_fooz_fk'
|
243
243
|
end
|
244
|
-
standard_dump.
|
244
|
+
expect(standard_dump).to match(/add_foreign_key "test_comments", "test_posts", columns: \["baz_id", "fooz_id"\], name: "comments_posts_baz_fooz_fk"/)
|
245
245
|
end
|
246
246
|
it "should include foreign keys following all tables" do
|
247
247
|
# if foreign keys preceed declaration of all tables
|
@@ -250,7 +250,7 @@ describe "OracleEnhancedAdapter schema dump" do
|
|
250
250
|
add_foreign_key :test_comments, :test_posts
|
251
251
|
end
|
252
252
|
dump = standard_dump
|
253
|
-
dump.rindex("create_table").
|
253
|
+
expect(dump.rindex("create_table")).to be < dump.index("add_foreign_key")
|
254
254
|
end
|
255
255
|
|
256
256
|
it "should include primary_key when reference column name is not 'id'" do
|
@@ -269,7 +269,7 @@ describe "OracleEnhancedAdapter schema dump" do
|
|
269
269
|
ADD CONSTRAINT TEST_COMMENTS_BAZ_ID_FK FOREIGN KEY (baz_id) REFERENCES test_posts(baz_id)
|
270
270
|
SQL
|
271
271
|
|
272
|
-
standard_dump.
|
272
|
+
expect(standard_dump).to match(/add_foreign_key "test_comments", "test_posts", column: "baz_id", primary_key: "baz_id", name: "test_comments_baz_id_fk"/)
|
273
273
|
end
|
274
274
|
|
275
275
|
end
|
@@ -285,35 +285,35 @@ describe "OracleEnhancedAdapter schema dump" do
|
|
285
285
|
schema_define do
|
286
286
|
add_synonym :test_synonym, "schema_name.table_name", force: true
|
287
287
|
end
|
288
|
-
standard_dump.
|
288
|
+
expect(standard_dump).to match(/add_synonym "test_synonym", "schema_name.table_name", force: true/)
|
289
289
|
end
|
290
290
|
|
291
291
|
it "should include synonym to other database table in schema dump" do
|
292
292
|
schema_define do
|
293
293
|
add_synonym :test_synonym, "table_name@link_name", force: true
|
294
294
|
end
|
295
|
-
standard_dump.
|
295
|
+
expect(standard_dump).to match(/add_synonym "test_synonym", "table_name@link_name(\.[-A-Za-z0-9_]+)*", force: true/)
|
296
296
|
end
|
297
297
|
|
298
298
|
it "should not include ignored table names in schema dump" do
|
299
299
|
schema_define do
|
300
300
|
add_synonym :test_synonym, "schema_name.table_name", force: true
|
301
301
|
end
|
302
|
-
standard_dump(ignore_tables: %w(test_synonym)).
|
302
|
+
expect(standard_dump(ignore_tables: %w(test_synonym))).not_to match(/add_synonym "test_synonym"/)
|
303
303
|
end
|
304
304
|
|
305
305
|
it "should not include ignored table regexes in schema dump" do
|
306
306
|
schema_define do
|
307
307
|
add_synonym :test_synonym, "schema_name.table_name", force: true
|
308
308
|
end
|
309
|
-
standard_dump(ignore_tables: [ /test_synonym/i ]).
|
309
|
+
expect(standard_dump(ignore_tables: [ /test_synonym/i ])).not_to match(/add_synonym "test_synonym"/)
|
310
310
|
end
|
311
311
|
|
312
312
|
it "should include synonyms to ignored table regexes in schema dump" do
|
313
313
|
schema_define do
|
314
314
|
add_synonym :test_synonym, "schema_name.table_name", force: true
|
315
315
|
end
|
316
|
-
standard_dump(ignore_tables: [ /table_name/i ]).
|
316
|
+
expect(standard_dump(ignore_tables: [ /table_name/i ])).to match(/add_synonym "test_synonym"/)
|
317
317
|
end
|
318
318
|
|
319
319
|
end
|
@@ -325,7 +325,7 @@ describe "OracleEnhancedAdapter schema dump" do
|
|
325
325
|
|
326
326
|
it "should include temporary options" do
|
327
327
|
create_test_posts_table(temporary: true)
|
328
|
-
standard_dump.
|
328
|
+
expect(standard_dump).to match(/create_table "test_posts", temporary: true/)
|
329
329
|
end
|
330
330
|
end
|
331
331
|
|
@@ -336,20 +336,20 @@ describe "OracleEnhancedAdapter schema dump" do
|
|
336
336
|
|
337
337
|
it "should not specify default tablespace in add index" do
|
338
338
|
create_test_posts_table
|
339
|
-
standard_dump.
|
339
|
+
expect(standard_dump).to match(/add_index "test_posts", \["title"\], name: "index_test_posts_on_title"$/)
|
340
340
|
end
|
341
341
|
|
342
342
|
it "should specify non-default tablespace in add index" do
|
343
343
|
tablespace_name = @conn.default_tablespace
|
344
|
-
@conn.
|
344
|
+
allow(@conn).to receive(:default_tablespace).and_return('dummy')
|
345
345
|
create_test_posts_table
|
346
|
-
standard_dump.
|
346
|
+
expect(standard_dump).to match(/add_index "test_posts", \["title"\], name: "index_test_posts_on_title", tablespace: "#{tablespace_name}"$/)
|
347
347
|
end
|
348
348
|
|
349
349
|
it "should create and dump function-based indexes" do
|
350
350
|
create_test_posts_table
|
351
351
|
@conn.add_index :test_posts, "NVL(created_at, updated_at)", name: "index_test_posts_cr_upd_at"
|
352
|
-
standard_dump.
|
352
|
+
expect(standard_dump).to match(/add_index "test_posts", \["NVL\(\\"CREATED_AT\\",\\"UPDATED_AT\\"\)"\], name: "index_test_posts_cr_upd_at"$/)
|
353
353
|
end
|
354
354
|
|
355
355
|
end
|
@@ -363,7 +363,7 @@ describe "OracleEnhancedAdapter schema dump" do
|
|
363
363
|
it "should not include materialized views in schema dump" do
|
364
364
|
create_test_posts_table
|
365
365
|
@conn.execute "CREATE MATERIALIZED VIEW test_posts_mv AS SELECT * FROM test_posts"
|
366
|
-
standard_dump.
|
366
|
+
expect(standard_dump).not_to match(/create_table "test_posts_mv"/)
|
367
367
|
end
|
368
368
|
end
|
369
369
|
|
@@ -401,12 +401,12 @@ describe "OracleEnhancedAdapter schema dump" do
|
|
401
401
|
end
|
402
402
|
|
403
403
|
it 'should dump correctly' do
|
404
|
-
standard_dump.
|
405
|
-
standard_dump.
|
406
|
-
standard_dump.
|
407
|
-
standard_dump.
|
408
|
-
standard_dump.
|
409
|
-
standard_dump.
|
404
|
+
expect(standard_dump).to match(/t\.virtual "full_name",(\s*)limit: 512,(\s*)as: "\\"FIRST_NAME\\"\|\|', '\|\|\\"LAST_NAME\\"",(\s*)type: :string/)
|
405
|
+
expect(standard_dump).to match(/t\.virtual "short_name",(\s*)limit: 300,(\s*)as:(.*),(\s*)type: :string/)
|
406
|
+
expect(standard_dump).to match(/t\.virtual "full_name_length",(\s*)precision: 38,(\s*)as:(.*),(\s*)type: :integer/)
|
407
|
+
expect(standard_dump).to match(/t\.virtual "name_ratio",(\s*)as:(.*)\"$/) # no :type
|
408
|
+
expect(standard_dump).to match(/t\.virtual "abbrev_name",(\s*)limit: 100,(\s*)as:(.*),(\s*)type: :string/)
|
409
|
+
expect(standard_dump).to match(/t\.virtual "field_with_leading_space",(\s*)limit: 300,(\s*)as: "' '\|\|\\"FIRST_NAME\\"\|\|' '",(\s*)type: :string/)
|
410
410
|
end
|
411
411
|
|
412
412
|
context 'with column cache' do
|
@@ -419,14 +419,14 @@ describe "OracleEnhancedAdapter schema dump" do
|
|
419
419
|
end
|
420
420
|
it 'should not change column defaults after several dumps' do
|
421
421
|
col = TestName.columns.detect{|c| c.name == 'full_name'}
|
422
|
-
col.
|
423
|
-
col.virtual_column_data_default.
|
422
|
+
expect(col).not_to be_nil
|
423
|
+
expect(col.virtual_column_data_default).not_to match(/:as/)
|
424
424
|
|
425
425
|
standard_dump
|
426
|
-
col.virtual_column_data_default.
|
426
|
+
expect(col.virtual_column_data_default).not_to match(/:as/)
|
427
427
|
|
428
428
|
standard_dump
|
429
|
-
col.virtual_column_data_default.
|
429
|
+
expect(col.virtual_column_data_default).not_to match(/:as/)
|
430
430
|
end
|
431
431
|
end
|
432
432
|
|
@@ -446,8 +446,8 @@ describe "OracleEnhancedAdapter schema dump" do
|
|
446
446
|
end
|
447
447
|
end
|
448
448
|
it 'should dump correctly' do
|
449
|
-
standard_dump.
|
450
|
-
standard_dump.
|
449
|
+
expect(standard_dump).not_to match(/add_index "test_names".+FIRST_NAME.+$/)
|
450
|
+
expect(standard_dump).to match(/add_index "test_names".+field_with_leading_space.+$/)
|
451
451
|
end
|
452
452
|
end
|
453
453
|
end
|
@@ -468,7 +468,47 @@ describe "OracleEnhancedAdapter schema dump" do
|
|
468
468
|
end
|
469
469
|
|
470
470
|
it "should dump float type correctly" do
|
471
|
-
standard_dump.
|
471
|
+
expect(standard_dump).to match(/t\.float "hourly_rate"$/)
|
472
|
+
end
|
473
|
+
end
|
474
|
+
|
475
|
+
describe "table comments" do
|
476
|
+
before(:each) do
|
477
|
+
schema_define do
|
478
|
+
create_table :test_table_comments, :comment => "this is a \"table comment\"!", force: true do |t|
|
479
|
+
t.string :blah
|
480
|
+
end
|
481
|
+
end
|
482
|
+
end
|
483
|
+
|
484
|
+
after(:each) do
|
485
|
+
schema_define do
|
486
|
+
drop_table :test_table_comments
|
487
|
+
end
|
488
|
+
end
|
489
|
+
|
490
|
+
it "should dump table comments" do
|
491
|
+
standard_dump.should =~ /comment: "this is a \\"table comment\\"!"/
|
492
|
+
end
|
493
|
+
end
|
494
|
+
|
495
|
+
describe "column comments" do
|
496
|
+
before(:each) do
|
497
|
+
schema_define do
|
498
|
+
create_table :test_column_comments, force: true do |t|
|
499
|
+
t.string :blah, :comment => "this is a \"column comment\"!"
|
500
|
+
end
|
501
|
+
end
|
502
|
+
end
|
503
|
+
|
504
|
+
after(:each) do
|
505
|
+
schema_define do
|
506
|
+
drop_table :test_column_comments
|
507
|
+
end
|
508
|
+
end
|
509
|
+
|
510
|
+
it "should dump column comments" do
|
511
|
+
standard_dump.should =~ /comment: "this is a \\"column comment\\"!"/
|
472
512
|
end
|
473
513
|
end
|
474
514
|
|