pmacs-activerecord-oracle_enhanced-adapter 1.4.2.rc1 → 1.5.5.1
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 +7 -0
- data/Gemfile +11 -40
- data/History.md +170 -0
- data/README.md +61 -5
- data/Rakefile +1 -0
- data/VERSION +1 -1
- data/lib/active_record/connection_adapters/oracle_enhanced_adapter.rb +330 -161
- data/lib/active_record/connection_adapters/oracle_enhanced_column.rb +48 -8
- data/lib/active_record/connection_adapters/oracle_enhanced_column_dumper.rb +77 -0
- data/lib/active_record/connection_adapters/oracle_enhanced_connection.rb +8 -24
- data/lib/active_record/connection_adapters/oracle_enhanced_context_index.rb +4 -13
- data/lib/active_record/connection_adapters/oracle_enhanced_database_tasks.rb +61 -0
- data/lib/active_record/connection_adapters/oracle_enhanced_dirty.rb +13 -12
- data/lib/active_record/connection_adapters/oracle_enhanced_jdbc_connection.rb +42 -19
- data/lib/active_record/connection_adapters/oracle_enhanced_oci_connection.rb +28 -74
- data/lib/active_record/connection_adapters/oracle_enhanced_procedures.rb +165 -231
- data/lib/active_record/connection_adapters/oracle_enhanced_schema_creation.rb +89 -0
- data/lib/active_record/connection_adapters/oracle_enhanced_schema_definitions.rb +16 -24
- data/lib/active_record/connection_adapters/oracle_enhanced_schema_dumper.rb +29 -38
- data/lib/active_record/connection_adapters/oracle_enhanced_schema_statements.rb +93 -42
- data/lib/active_record/connection_adapters/oracle_enhanced_schema_statements_ext.rb +5 -3
- data/lib/active_record/connection_adapters/oracle_enhanced_structure_dump.rb +7 -7
- data/lib/active_record/connection_adapters/oracle_enhanced_version.rb +1 -1
- data/lib/pmacs-activerecord-oracle_enhanced-adapter.rb +2 -2
- data/pmacs-activerecord-oracle_enhanced-adapter.gemspec +19 -17
- data/spec/active_record/connection_adapters/oracle_enhanced_adapter_spec.rb +35 -99
- data/spec/active_record/connection_adapters/oracle_enhanced_connection_spec.rb +17 -3
- data/spec/active_record/connection_adapters/oracle_enhanced_context_index_spec.rb +105 -98
- data/spec/active_record/connection_adapters/oracle_enhanced_data_types_spec.rb +74 -44
- data/spec/active_record/connection_adapters/oracle_enhanced_database_tasks_spec.rb +89 -0
- data/spec/active_record/connection_adapters/oracle_enhanced_dbms_output_spec.rb +3 -3
- data/spec/active_record/connection_adapters/oracle_enhanced_dirty_spec.rb +13 -2
- data/spec/active_record/connection_adapters/oracle_enhanced_procedures_spec.rb +11 -12
- data/spec/active_record/connection_adapters/oracle_enhanced_schema_dump_spec.rb +252 -60
- data/spec/active_record/connection_adapters/oracle_enhanced_schema_statements_spec.rb +170 -40
- data/spec/active_record/connection_adapters/oracle_enhanced_structure_dump_spec.rb +14 -8
- data/spec/spec_helper.rb +25 -54
- metadata +41 -72
- data/lib/active_record/connection_adapters/oracle_enhanced.rake +0 -105
- data/lib/active_record/connection_adapters/oracle_enhanced_activerecord_patches.rb +0 -41
- data/lib/active_record/connection_adapters/oracle_enhanced_base_ext.rb +0 -118
- data/lib/active_record/connection_adapters/oracle_enhanced_core_ext.rb +0 -25
- data/lib/active_record/connection_adapters/oracle_enhanced_tasks.rb +0 -17
- data/spec/active_record/connection_adapters/oracle_enhanced_core_ext_spec.rb +0 -19
@@ -89,11 +89,7 @@ describe "OracleEnhancedAdapter date type detection based on column names" do
|
|
89
89
|
ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.emulate_dates_by_column_name = false
|
90
90
|
ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.emulate_dates = false
|
91
91
|
class ::TestEmployee < ActiveRecord::Base
|
92
|
-
|
93
|
-
self.primary_key = "employee_id"
|
94
|
-
else
|
95
|
-
set_primary_key "employee_id"
|
96
|
-
end
|
92
|
+
self.primary_key = "employee_id"
|
97
93
|
end
|
98
94
|
end
|
99
95
|
|
@@ -210,6 +206,7 @@ describe "OracleEnhancedAdapter integer type detection based on column names" do
|
|
210
206
|
job_id NUMBER,
|
211
207
|
salary NUMBER,
|
212
208
|
commission_pct NUMBER(2,2),
|
209
|
+
unwise_name_id NUMBER(2,2),
|
213
210
|
manager_id NUMBER(6),
|
214
211
|
is_manager NUMBER(1),
|
215
212
|
department_id NUMBER(4,0),
|
@@ -222,17 +219,46 @@ describe "OracleEnhancedAdapter integer type detection based on column names" do
|
|
222
219
|
INCREMENT BY 1 START WITH 10040 CACHE 20 NOORDER NOCYCLE
|
223
220
|
SQL
|
224
221
|
end
|
225
|
-
|
222
|
+
|
226
223
|
after(:all) do
|
227
224
|
@conn.execute "DROP TABLE test2_employees"
|
228
225
|
@conn.execute "DROP SEQUENCE test2_employees_seq"
|
229
226
|
end
|
230
227
|
|
231
|
-
|
232
|
-
ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.
|
233
|
-
|
234
|
-
column
|
235
|
-
|
228
|
+
context "when number_datatype_coercion is :decimal" do
|
229
|
+
before { ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.stub(:number_datatype_coercion).and_return(:decimal) }
|
230
|
+
|
231
|
+
it "should set NUMBER column type as decimal if emulate_integers_by_column_name is false" do
|
232
|
+
ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.emulate_integers_by_column_name = false
|
233
|
+
columns = @conn.columns('test2_employees')
|
234
|
+
column = columns.detect{|c| c.name == "job_id"}
|
235
|
+
column.type.should == :decimal
|
236
|
+
end
|
237
|
+
|
238
|
+
it "should set NUMBER column type as decimal if column name is not 'id' and does not ends with '_id' and emulate_integers_by_column_name is true" do
|
239
|
+
ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.emulate_integers_by_column_name = true
|
240
|
+
columns = @conn.columns('test2_employees')
|
241
|
+
column = columns.detect{|c| c.name == "salary"}
|
242
|
+
column.type.should == :decimal
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
context "when number_datatype_coercion is :float" do
|
247
|
+
before { ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.stub(:number_datatype_coercion).and_return(:float) }
|
248
|
+
|
249
|
+
it "should set NUMBER column type as float if emulate_integers_by_column_name is false" do
|
250
|
+
ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.emulate_integers_by_column_name = false
|
251
|
+
columns = @conn.columns('test2_employees')
|
252
|
+
column = columns.detect{|c| c.name == "job_id"}
|
253
|
+
column.type.should == :float
|
254
|
+
end
|
255
|
+
|
256
|
+
it "should set NUMBER column type as float if column name is not 'id' and does not ends with '_id' and emulate_integers_by_column_name is true" do
|
257
|
+
ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.emulate_integers_by_column_name = true
|
258
|
+
columns = @conn.columns('test2_employees')
|
259
|
+
column = columns.detect{|c| c.name == "salary"}
|
260
|
+
column.type.should == :float
|
261
|
+
end
|
236
262
|
end
|
237
263
|
|
238
264
|
it "should set NUMBER column type as integer if emulate_integers_by_column_name is true" do
|
@@ -244,10 +270,24 @@ describe "OracleEnhancedAdapter integer type detection based on column names" do
|
|
244
270
|
column.type.should == :integer
|
245
271
|
end
|
246
272
|
|
247
|
-
it "should set NUMBER column type as
|
273
|
+
it "should set NUMBER(p,0) column type as integer" do
|
248
274
|
ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.emulate_integers_by_column_name = true
|
249
275
|
columns = @conn.columns('test2_employees')
|
250
|
-
column = columns.detect{|c| c.name == "
|
276
|
+
column = columns.detect{|c| c.name == "department_id"}
|
277
|
+
column.type.should == :integer
|
278
|
+
end
|
279
|
+
|
280
|
+
it "should set NUMBER(p,s) column type as integer if column name ends with '_id' and emulate_integers_by_column_name is true" do
|
281
|
+
ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.emulate_integers_by_column_name = true
|
282
|
+
columns = @conn.columns('test2_employees')
|
283
|
+
column = columns.detect{|c| c.name == "unwise_name_id"}
|
284
|
+
column.type.should == :integer
|
285
|
+
end
|
286
|
+
|
287
|
+
it "should set NUMBER(p,s) column type as decimal if column name ends with '_id' and emulate_integers_by_column_name is false" do
|
288
|
+
ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.emulate_integers_by_column_name = false
|
289
|
+
columns = @conn.columns('test2_employees')
|
290
|
+
column = columns.detect{|c| c.name == "unwise_name_id"}
|
251
291
|
column.type.should == :decimal
|
252
292
|
end
|
253
293
|
|
@@ -258,7 +298,7 @@ describe "OracleEnhancedAdapter integer type detection based on column names" do
|
|
258
298
|
column.type_cast(1.0).class.should == BigDecimal
|
259
299
|
end
|
260
300
|
|
261
|
-
it "should return Fixnum value from NUMBER column if column name
|
301
|
+
it "should return Fixnum value from NUMBER column if column name ends with '_id' and emulate_integers_by_column_name is true" do
|
262
302
|
ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.emulate_integers_by_column_name = true
|
263
303
|
columns = @conn.columns('test2_employees')
|
264
304
|
column = columns.detect{|c| c.name == "job_id"}
|
@@ -270,7 +310,7 @@ describe "OracleEnhancedAdapter integer type detection based on column names" do
|
|
270
310
|
class ::Test2Employee < ActiveRecord::Base
|
271
311
|
end
|
272
312
|
end
|
273
|
-
|
313
|
+
|
274
314
|
after(:each) do
|
275
315
|
Object.send(:remove_const, "Test2Employee")
|
276
316
|
@conn.clear_types_for_columns
|
@@ -569,11 +609,7 @@ describe "OracleEnhancedAdapter timestamp with timezone support" do
|
|
569
609
|
describe "/ TIMESTAMP WITH TIME ZONE values from ActiveRecord model" do
|
570
610
|
before(:all) do
|
571
611
|
class ::TestEmployee < ActiveRecord::Base
|
572
|
-
|
573
|
-
self.primary_key = "employee_id"
|
574
|
-
else
|
575
|
-
set_primary_key "employee_id"
|
576
|
-
end
|
612
|
+
self.primary_key = "employee_id"
|
577
613
|
end
|
578
614
|
end
|
579
615
|
|
@@ -614,7 +650,6 @@ describe "OracleEnhancedAdapter timestamp with timezone support" do
|
|
614
650
|
|
615
651
|
end
|
616
652
|
|
617
|
-
|
618
653
|
describe "OracleEnhancedAdapter date and timestamp with different NLS date formats" do
|
619
654
|
before(:all) do
|
620
655
|
ActiveRecord::Base.establish_connection(CONNECTION_PARAMS)
|
@@ -655,11 +690,7 @@ describe "OracleEnhancedAdapter date and timestamp with different NLS date forma
|
|
655
690
|
ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.emulate_dates = false
|
656
691
|
ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.emulate_dates_by_column_name = false
|
657
692
|
class ::TestEmployee < ActiveRecord::Base
|
658
|
-
|
659
|
-
self.primary_key = "employee_id"
|
660
|
-
else
|
661
|
-
set_primary_key "employee_id"
|
662
|
-
end
|
693
|
+
self.primary_key = "employee_id"
|
663
694
|
end
|
664
695
|
@today = Date.new(2008,6,28)
|
665
696
|
@now = Time.local(2008,6,28,13,34,33)
|
@@ -744,11 +775,7 @@ describe "OracleEnhancedAdapter assign string to :date and :datetime columns" do
|
|
744
775
|
INCREMENT BY 1 CACHE 20 NOORDER NOCYCLE
|
745
776
|
SQL
|
746
777
|
class ::TestEmployee < ActiveRecord::Base
|
747
|
-
|
748
|
-
self.primary_key = "employee_id"
|
749
|
-
else
|
750
|
-
set_primary_key "employee_id"
|
751
|
-
end
|
778
|
+
self.primary_key = "employee_id"
|
752
779
|
end
|
753
780
|
@today = Date.new(2008,6,28)
|
754
781
|
@today_iso = "2008-06-28"
|
@@ -879,7 +906,7 @@ describe "OracleEnhancedAdapter assign string to :date and :datetime columns" do
|
|
879
906
|
@employee.reload
|
880
907
|
@employee.last_login_at.should == @today.to_time
|
881
908
|
end
|
882
|
-
|
909
|
+
|
883
910
|
end
|
884
911
|
|
885
912
|
describe "OracleEnhancedAdapter handling of CLOB columns" do
|
@@ -918,7 +945,7 @@ describe "OracleEnhancedAdapter handling of CLOB columns" do
|
|
918
945
|
serialize :comments
|
919
946
|
end
|
920
947
|
class ::TestEmployeeReadOnlyClob < ActiveRecord::Base
|
921
|
-
|
948
|
+
self.table_name = "test_employees"
|
922
949
|
attr_readonly :comments
|
923
950
|
end
|
924
951
|
end
|
@@ -1052,6 +1079,18 @@ describe "OracleEnhancedAdapter handling of CLOB columns" do
|
|
1052
1079
|
@employee.reload
|
1053
1080
|
@employee.comments.should == @char_data
|
1054
1081
|
end
|
1082
|
+
|
1083
|
+
it "should keep unchanged serialized data when other columns changed" do
|
1084
|
+
@employee = Test2Employee.create!(
|
1085
|
+
:first_name => "First",
|
1086
|
+
:last_name => "Last",
|
1087
|
+
:comments => "initial serialized data"
|
1088
|
+
)
|
1089
|
+
@employee.first_name = "Steve"
|
1090
|
+
@employee.save
|
1091
|
+
@employee.reload
|
1092
|
+
@employee.comments.should == "initial serialized data"
|
1093
|
+
end
|
1055
1094
|
end
|
1056
1095
|
|
1057
1096
|
describe "OracleEnhancedAdapter handling of BLOB columns" do
|
@@ -1081,11 +1120,7 @@ describe "OracleEnhancedAdapter handling of BLOB columns" do
|
|
1081
1120
|
|
1082
1121
|
before(:each) do
|
1083
1122
|
class ::TestEmployee < ActiveRecord::Base
|
1084
|
-
|
1085
|
-
self.primary_key = "employee_id"
|
1086
|
-
else
|
1087
|
-
set_primary_key "employee_id"
|
1088
|
-
end
|
1123
|
+
self.primary_key = "employee_id"
|
1089
1124
|
end
|
1090
1125
|
end
|
1091
1126
|
|
@@ -1211,11 +1246,7 @@ describe "OracleEnhancedAdapter handling of RAW columns" do
|
|
1211
1246
|
|
1212
1247
|
before(:each) do
|
1213
1248
|
class ::TestEmployee < ActiveRecord::Base
|
1214
|
-
|
1215
|
-
self.primary_key = "employee_id"
|
1216
|
-
else
|
1217
|
-
set_primary_key "employee_id"
|
1218
|
-
end
|
1249
|
+
self.primary_key = "employee_id"
|
1219
1250
|
end
|
1220
1251
|
end
|
1221
1252
|
|
@@ -1313,7 +1344,6 @@ describe "OracleEnhancedAdapter handling of RAW columns" do
|
|
1313
1344
|
end
|
1314
1345
|
end
|
1315
1346
|
|
1316
|
-
|
1317
1347
|
describe "OracleEnhancedAdapter quoting of NCHAR and NVARCHAR2 columns" do
|
1318
1348
|
before(:all) do
|
1319
1349
|
ActiveRecord::Base.establish_connection(CONNECTION_PARAMS)
|
@@ -0,0 +1,89 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'active_record/connection_adapters/oracle_enhanced_database_tasks'
|
3
|
+
require 'stringio'
|
4
|
+
require 'tempfile'
|
5
|
+
|
6
|
+
describe "Oracle Enhanced adapter database tasks" do
|
7
|
+
let(:config) { CONNECTION_PARAMS.with_indifferent_access }
|
8
|
+
|
9
|
+
describe "create" do
|
10
|
+
let(:new_user_config) { config.merge({username: "oracle_enhanced_test_user"}) }
|
11
|
+
before do
|
12
|
+
fake_terminal(SYSTEM_CONNECTION_PARAMS[:password]) do
|
13
|
+
ActiveRecord::Tasks::DatabaseTasks.create(new_user_config)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
it "creates user" do
|
17
|
+
query = "SELECT COUNT(*) FROM dba_users WHERE UPPER(username) = '#{new_user_config[:username].upcase}'"
|
18
|
+
ActiveRecord::Base.connection.select_value(query).should == 1
|
19
|
+
end
|
20
|
+
after do
|
21
|
+
ActiveRecord::Base.connection.execute("DROP USER #{new_user_config[:username]}");
|
22
|
+
end
|
23
|
+
|
24
|
+
def fake_terminal(input)
|
25
|
+
$stdin = StringIO.new
|
26
|
+
$stdout = StringIO.new
|
27
|
+
$stdin.puts(input)
|
28
|
+
$stdin.rewind
|
29
|
+
yield
|
30
|
+
ensure
|
31
|
+
$stdin = STDIN
|
32
|
+
$stdout = STDOUT
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context "with test table" do
|
37
|
+
before do
|
38
|
+
ActiveRecord::Base.establish_connection(CONNECTION_PARAMS)
|
39
|
+
ActiveRecord::Base.connection.execute "CREATE TABLE test_posts (name VARCHAR2(20))"
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "drop" do
|
43
|
+
before { ActiveRecord::Tasks::DatabaseTasks.drop(config) }
|
44
|
+
it "drops all tables" do
|
45
|
+
ActiveRecord::Base.connection.table_exists?(:test_posts).should be_false
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "purge" do
|
50
|
+
before { ActiveRecord::Tasks::DatabaseTasks.purge(config) }
|
51
|
+
it "drops all tables" do
|
52
|
+
ActiveRecord::Base.connection.table_exists?(:test_posts).should be_false
|
53
|
+
ActiveRecord::Base.connection.select_value("SELECT COUNT(*) FROM RECYCLEBIN").should == 0
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "structure" do
|
58
|
+
let(:temp_file) { Tempfile.new(["oracle_enhanced", ".sql"]).path }
|
59
|
+
before { ActiveRecord::SchemaMigration.create_table }
|
60
|
+
|
61
|
+
describe "structure_dump" do
|
62
|
+
before { ActiveRecord::Tasks::DatabaseTasks.structure_dump(config, temp_file) }
|
63
|
+
it "dumps the database structure to a file" do
|
64
|
+
contents = File.read(temp_file)
|
65
|
+
contents.should include('CREATE TABLE "TEST_POSTS"')
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe "structure_load" do
|
70
|
+
before do
|
71
|
+
ActiveRecord::Tasks::DatabaseTasks.structure_dump(config, temp_file)
|
72
|
+
ActiveRecord::Tasks::DatabaseTasks.drop(config)
|
73
|
+
ActiveRecord::Tasks::DatabaseTasks.structure_load(config, temp_file)
|
74
|
+
end
|
75
|
+
it "loads the database structure from a file" do
|
76
|
+
ActiveRecord::Base.connection.table_exists?(:test_posts).should be_true
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
after do
|
81
|
+
File.delete(temp_file)
|
82
|
+
ActiveRecord::SchemaMigration.drop_table
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
after { ActiveRecord::Base.connection.execute "DROP TABLE test_posts" rescue nil }
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
@@ -42,7 +42,7 @@ 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").should == [{'is_it_long'=>1}]
|
45
|
+
@conn.select_all("select more_than_five_characters_long('hi there') is_it_long from dual").to_a.should == [{'is_it_long'=>1}]
|
46
46
|
|
47
47
|
@logger.output(:debug).should_not match(/^DBMS_OUTPUT/)
|
48
48
|
end
|
@@ -50,7 +50,7 @@ describe "OracleEnhancedAdapter logging dbms_output from plsql" do
|
|
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").should == [{'is_it_long'=>1}]
|
53
|
+
@conn.select_all("select more_than_five_characters_long('hi there') is_it_long from dual").to_a.should == [{'is_it_long'=>1}]
|
54
54
|
|
55
55
|
@logger.output(:debug).should match(/^DBMS_OUTPUT: before the if -hi there-$/)
|
56
56
|
@logger.output(:debug).should match(/^DBMS_OUTPUT: it is longer than 5$/)
|
@@ -60,7 +60,7 @@ describe "OracleEnhancedAdapter logging dbms_output from plsql" do
|
|
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").should == [{'is_it_long'=>0}]
|
63
|
+
@conn.select_all("select more_than_five_characters_long('short') is_it_long from dual").to_a.should == [{'is_it_long'=>0}]
|
64
64
|
|
65
65
|
@logger.output(:debug).should match(/^DBMS_OUTPUT: before the if -short-$/)
|
66
66
|
@logger.output(:debug).should match(/^DBMS_OUTPUT: it is 5 or shorter$/)
|
@@ -16,6 +16,7 @@ if ActiveRecord::Base.method_defined?(:changed?)
|
|
16
16
|
last_name VARCHAR2(25),
|
17
17
|
job_id NUMBER(6,0) NULL,
|
18
18
|
salary NUMBER(8,2),
|
19
|
+
pto_per_hour NUMBER,
|
19
20
|
comments CLOB,
|
20
21
|
hire_date DATE
|
21
22
|
)
|
@@ -27,7 +28,7 @@ if ActiveRecord::Base.method_defined?(:changed?)
|
|
27
28
|
class TestEmployee < ActiveRecord::Base
|
28
29
|
end
|
29
30
|
end
|
30
|
-
|
31
|
+
|
31
32
|
after(:all) do
|
32
33
|
Object.send(:remove_const, "TestEmployee")
|
33
34
|
@conn.execute "DROP TABLE test_employees"
|
@@ -62,6 +63,16 @@ if ActiveRecord::Base.method_defined?(:changed?)
|
|
62
63
|
@employee.should_not be_changed
|
63
64
|
end
|
64
65
|
|
66
|
+
it "should not mark empty float (stored as NULL) as changed when reassigning it" do
|
67
|
+
ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.stub(:number_datatype_coercion) { :float }
|
68
|
+
@employee = TestEmployee.create!(:pto_per_hour => '')
|
69
|
+
@employee.pto_per_hour = ''
|
70
|
+
@employee.should_not be_changed
|
71
|
+
@employee.reload
|
72
|
+
@employee.pto_per_hour = ''
|
73
|
+
@employee.should_not be_changed
|
74
|
+
end
|
75
|
+
|
65
76
|
it "should not mark empty text (stored as NULL) as changed when reassigning it" do
|
66
77
|
@employee = TestEmployee.create!(:comments => nil)
|
67
78
|
@employee.comments = nil
|
@@ -111,7 +122,7 @@ if ActiveRecord::Base.method_defined?(:changed?)
|
|
111
122
|
@employee = TestEmployee.new
|
112
123
|
@employee.job_id = 0
|
113
124
|
@employee.save!.should be_true
|
114
|
-
|
125
|
+
|
115
126
|
@employee.should_not be_changed
|
116
127
|
|
117
128
|
@employee.job_id = '0'
|
@@ -107,11 +107,8 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
|
|
107
107
|
|
108
108
|
before(:each) do
|
109
109
|
class ::TestEmployee < ActiveRecord::Base
|
110
|
-
|
111
|
-
|
112
|
-
else
|
113
|
-
set_primary_key :employee_id
|
114
|
-
end
|
110
|
+
include ActiveRecord::OracleEnhancedProcedures
|
111
|
+
self.primary_key = :employee_id
|
115
112
|
|
116
113
|
validates_presence_of :first_name, :last_name, :hire_date
|
117
114
|
|
@@ -226,9 +223,8 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
|
|
226
223
|
@employee.first_name.should == "First"
|
227
224
|
end
|
228
225
|
|
229
|
-
it "should not update record if nothing is changed and partial
|
230
|
-
|
231
|
-
TestEmployee.partial_updates = true
|
226
|
+
it "should not update record if nothing is changed and partial writes are enabled" do
|
227
|
+
TestEmployee.partial_writes = true
|
232
228
|
@employee = TestEmployee.create(
|
233
229
|
:first_name => "First",
|
234
230
|
:last_name => "Last",
|
@@ -240,9 +236,8 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
|
|
240
236
|
@employee.version.should == 1
|
241
237
|
end
|
242
238
|
|
243
|
-
it "should update record if nothing is changed and partial
|
244
|
-
|
245
|
-
TestEmployee.partial_updates = false
|
239
|
+
it "should update record if nothing is changed and partial writes are disabled" do
|
240
|
+
TestEmployee.partial_writes = false
|
246
241
|
@employee = TestEmployee.create(
|
247
242
|
:first_name => "First",
|
248
243
|
:last_name => "Last",
|
@@ -295,6 +290,7 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
|
|
295
290
|
}.should raise_error("Make the transaction rollback")
|
296
291
|
@employee.id.should == empl_id
|
297
292
|
TestEmployee.find_by_employee_id(empl_id).should_not be_nil
|
293
|
+
clear_logger
|
298
294
|
end
|
299
295
|
|
300
296
|
it "should set timestamps when creating record" do
|
@@ -330,10 +326,11 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
|
|
330
326
|
:hire_date => @today
|
331
327
|
)
|
332
328
|
@logger.logged(:debug).last.should match(/^TestEmployee Create \(\d+\.\d+(ms)?\) custom create method$/)
|
329
|
+
clear_logger
|
333
330
|
end
|
334
331
|
|
335
332
|
it "should log update record" do
|
336
|
-
(TestEmployee.
|
333
|
+
(TestEmployee.partial_writes = false) rescue nil
|
337
334
|
@employee = TestEmployee.create(
|
338
335
|
:first_name => "First",
|
339
336
|
:last_name => "Last",
|
@@ -342,6 +339,7 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
|
|
342
339
|
set_logger
|
343
340
|
@employee.save!
|
344
341
|
@logger.logged(:debug).last.should match(/^TestEmployee Update \(\d+\.\d+(ms)?\) custom update method with employee_id=#{@employee.id}$/)
|
342
|
+
clear_logger
|
345
343
|
end
|
346
344
|
|
347
345
|
it "should log delete record" do
|
@@ -353,6 +351,7 @@ describe "OracleEnhancedAdapter custom methods for create, update and destroy" d
|
|
353
351
|
set_logger
|
354
352
|
@employee.destroy
|
355
353
|
@logger.logged(:debug).last.should match(/^TestEmployee Destroy \(\d+\.\d+(ms)?\) custom delete method with employee_id=#{@employee.id}$/)
|
354
|
+
clear_logger
|
356
355
|
end
|
357
356
|
|
358
357
|
it "should validate new record before creation" do
|