activerecord-oracle_enhanced-adapter 1.5.6 → 1.6.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 +2 -2
- data/History.md +87 -0
- data/README.md +271 -174
- data/VERSION +1 -1
- data/activerecord-oracle_enhanced-adapter.gemspec +26 -22
- data/lib/active_record/connection_adapters/{oracle_enhanced_column.rb → oracle_enhanced/column.rb} +14 -63
- data/lib/active_record/connection_adapters/oracle_enhanced/column_dumper.rb +65 -0
- data/lib/active_record/connection_adapters/{oracle_enhanced_connection.rb → oracle_enhanced/connection.rb} +2 -2
- data/lib/active_record/connection_adapters/oracle_enhanced/context_index.rb +347 -0
- data/lib/active_record/connection_adapters/{oracle_enhanced_cpk.rb → oracle_enhanced/cpk.rb} +0 -0
- data/lib/active_record/connection_adapters/oracle_enhanced/database_statements.rb +257 -0
- data/lib/active_record/connection_adapters/{oracle_enhanced_database_tasks.rb → oracle_enhanced/database_tasks.rb} +0 -0
- data/lib/active_record/connection_adapters/oracle_enhanced/dirty.rb +40 -0
- data/lib/active_record/connection_adapters/{oracle_enhanced_jdbc_connection.rb → oracle_enhanced/jdbc_connection.rb} +0 -0
- data/lib/active_record/connection_adapters/{oracle_enhanced_oci_connection.rb → oracle_enhanced/oci_connection.rb} +0 -0
- data/lib/active_record/connection_adapters/{oracle_enhanced_procedures.rb → oracle_enhanced/procedures.rb} +0 -0
- data/lib/active_record/connection_adapters/{oracle_enhanced_schema_creation.rb → oracle_enhanced/schema_creation.rb} +17 -16
- data/lib/active_record/connection_adapters/oracle_enhanced/schema_definitions.rb +92 -0
- data/lib/active_record/connection_adapters/{oracle_enhanced_schema_dumper.rb → oracle_enhanced/schema_dumper.rb} +4 -32
- data/lib/active_record/connection_adapters/oracle_enhanced/schema_statements.rb +543 -0
- data/lib/active_record/connection_adapters/oracle_enhanced/schema_statements_ext.rb +65 -0
- data/lib/active_record/connection_adapters/{oracle_enhanced_structure_dump.rb → oracle_enhanced/structure_dump.rb} +26 -4
- data/lib/active_record/connection_adapters/oracle_enhanced/version.rb +1 -0
- data/lib/active_record/connection_adapters/oracle_enhanced_adapter.rb +159 -66
- data/lib/active_record/oracle_enhanced/type/integer.rb +13 -0
- data/lib/active_record/oracle_enhanced/type/raw.rb +13 -0
- data/lib/active_record/oracle_enhanced/type/timestamp.rb +11 -0
- data/lib/activerecord-oracle_enhanced-adapter.rb +1 -1
- data/spec/active_record/connection_adapters/oracle_enhanced_adapter_spec.rb +6 -31
- data/spec/active_record/connection_adapters/oracle_enhanced_connection_spec.rb +1 -1
- data/spec/active_record/connection_adapters/oracle_enhanced_context_index_spec.rb +2 -2
- data/spec/active_record/connection_adapters/oracle_enhanced_cpk_spec.rb +2 -2
- data/spec/active_record/connection_adapters/oracle_enhanced_data_types_spec.rb +63 -63
- data/spec/active_record/connection_adapters/oracle_enhanced_database_tasks_spec.rb +1 -1
- data/spec/active_record/connection_adapters/oracle_enhanced_dirty_spec.rb +7 -13
- data/spec/active_record/connection_adapters/oracle_enhanced_schema_dump_spec.rb +21 -175
- data/spec/spec_config.yaml.template +10 -0
- data/spec/spec_helper.rb +21 -10
- metadata +29 -25
- data/lib/active_record/connection_adapters/oracle_enhanced_column_dumper.rb +0 -77
- data/lib/active_record/connection_adapters/oracle_enhanced_context_index.rb +0 -350
- data/lib/active_record/connection_adapters/oracle_enhanced_database_statements.rb +0 -262
- data/lib/active_record/connection_adapters/oracle_enhanced_dirty.rb +0 -45
- data/lib/active_record/connection_adapters/oracle_enhanced_schema_definitions.rb +0 -197
- data/lib/active_record/connection_adapters/oracle_enhanced_schema_statements.rb +0 -450
- data/lib/active_record/connection_adapters/oracle_enhanced_schema_statements_ext.rb +0 -258
- data/lib/active_record/connection_adapters/oracle_enhanced_version.rb +0 -1
@@ -5,7 +5,7 @@ if defined?(::Rails::Railtie)
|
|
5
5
|
module ConnectionAdapters
|
6
6
|
class OracleEnhancedRailtie < ::Rails::Railtie
|
7
7
|
rake_tasks do
|
8
|
-
load 'active_record/connection_adapters/
|
8
|
+
load 'active_record/connection_adapters/oracle_enhanced/database_tasks.rb'
|
9
9
|
end
|
10
10
|
|
11
11
|
ActiveSupport.on_load(:active_record) do
|
@@ -476,7 +476,7 @@ describe "OracleEnhancedAdapter" do
|
|
476
476
|
t.string :title
|
477
477
|
# cannot update LOBs over database link
|
478
478
|
t.string :body
|
479
|
-
t.timestamps
|
479
|
+
t.timestamps null: true
|
480
480
|
end
|
481
481
|
@db_link_username = SYSTEM_CONNECTION_PARAMS[:username]
|
482
482
|
@db_link_password = SYSTEM_CONNECTION_PARAMS[:password]
|
@@ -628,8 +628,8 @@ describe "OracleEnhancedAdapter" do
|
|
628
628
|
end
|
629
629
|
|
630
630
|
it "should clear older cursors when statement limit is reached" do
|
631
|
-
pk = TestPost.
|
632
|
-
sub = @conn.substitute_at(pk, 0)
|
631
|
+
pk = TestPost.columns_hash[TestPost.primary_key]
|
632
|
+
sub = @conn.substitute_at(pk, 0).to_sql
|
633
633
|
binds = [[pk, 1]]
|
634
634
|
|
635
635
|
lambda {
|
@@ -641,8 +641,8 @@ describe "OracleEnhancedAdapter" do
|
|
641
641
|
|
642
642
|
it "should cache UPDATE statements with bind variables" do
|
643
643
|
lambda {
|
644
|
-
pk = TestPost.
|
645
|
-
sub = @conn.substitute_at(pk, 0)
|
644
|
+
pk = TestPost.columns_hash[TestPost.primary_key]
|
645
|
+
sub = @conn.substitute_at(pk, 0).to_sql
|
646
646
|
binds = [[pk, 1]]
|
647
647
|
@conn.exec_update("UPDATE test_posts SET id = #{sub}", "SQL", binds)
|
648
648
|
}.should change(@statements, :length).by(+1)
|
@@ -682,36 +682,11 @@ describe "OracleEnhancedAdapter" do
|
|
682
682
|
end
|
683
683
|
|
684
684
|
it "should explain query with binds" do
|
685
|
-
pk = TestPost.
|
685
|
+
pk = TestPost.columns_hash[TestPost.primary_key]
|
686
686
|
sub = @conn.substitute_at(pk, 0)
|
687
687
|
explain = TestPost.where(TestPost.arel_table[pk.name].eq(sub)).bind([pk, 1]).explain
|
688
688
|
explain.should include("Cost")
|
689
689
|
explain.should include("INDEX UNIQUE SCAN")
|
690
690
|
end
|
691
691
|
end if ENV['RAILS_GEM_VERSION'] >= '3.2'
|
692
|
-
|
693
|
-
describe ".is_integer_column?" do
|
694
|
-
before(:all) do
|
695
|
-
@adapter = ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter
|
696
|
-
end
|
697
|
-
|
698
|
-
it "should return TrueClass or FalseClass" do
|
699
|
-
@adapter.is_integer_column?("adapter_id").should be_a TrueClass
|
700
|
-
@adapter.is_integer_column?("").should be_a FalseClass
|
701
|
-
end
|
702
|
-
|
703
|
-
it "should return true if name is 'id'" do
|
704
|
-
@adapter.is_integer_column?("id").should be_true
|
705
|
-
end
|
706
|
-
|
707
|
-
it "should return true if name ends with '_id'" do
|
708
|
-
@adapter.is_integer_column?("_id").should be_true
|
709
|
-
@adapter.is_integer_column?("foo_id").should be_true
|
710
|
-
end
|
711
|
-
|
712
|
-
it "should return false if name is 'something_else'" do
|
713
|
-
@adapter.is_integer_column?("something_else").should be_false
|
714
|
-
end
|
715
|
-
end
|
716
|
-
|
717
692
|
end
|
@@ -227,7 +227,7 @@ describe "OracleEnhancedConnection" do
|
|
227
227
|
|
228
228
|
it "should execute prepared statement with decimal bind parameter " do
|
229
229
|
cursor = @conn.prepare("INSERT INTO test_employees VALUES(:1)")
|
230
|
-
column = ActiveRecord::ConnectionAdapters::OracleEnhancedColumn.new('age', nil, 'NUMBER(10,2)')
|
230
|
+
column = ActiveRecord::ConnectionAdapters::OracleEnhancedColumn.new('age', nil, ActiveRecord::Type::Decimal.new, 'NUMBER(10,2)')
|
231
231
|
column.type.should == :decimal
|
232
232
|
cursor.bind_param(1, "1.5", column)
|
233
233
|
cursor.exec
|
@@ -11,7 +11,7 @@ describe "OracleEnhancedAdapter context index" do
|
|
11
11
|
t.string :title
|
12
12
|
t.text :body
|
13
13
|
t.integer :comments_count
|
14
|
-
t.timestamps
|
14
|
+
t.timestamps null: true
|
15
15
|
t.string :all_text, limit: 2 # will be used for multi-column index
|
16
16
|
end
|
17
17
|
end
|
@@ -23,7 +23,7 @@ describe "OracleEnhancedAdapter context index" do
|
|
23
23
|
t.integer :post_id
|
24
24
|
t.string :author
|
25
25
|
t.text :body
|
26
|
-
t.timestamps
|
26
|
+
t.timestamps null: true
|
27
27
|
end
|
28
28
|
end
|
29
29
|
end
|
@@ -67,12 +67,12 @@ describe "OracleEnhancedAdapter composite_primary_keys support" do
|
|
67
67
|
t.string :type_category, :limit => 15, :null => false
|
68
68
|
t.date :date_value, :null => false
|
69
69
|
t.text :results, :null => false
|
70
|
-
t.timestamps
|
70
|
+
t.timestamps null: true
|
71
71
|
end
|
72
72
|
create_table :non_cpk_write_lobs_test, :force => true do |t|
|
73
73
|
t.date :date_value, :null => false
|
74
74
|
t.text :results, :null => false
|
75
|
-
t.timestamps
|
75
|
+
t.timestamps null: true
|
76
76
|
end
|
77
77
|
end
|
78
78
|
class ::CpkWriteLobsTest < ActiveRecord::Base
|
@@ -67,21 +67,21 @@ describe "OracleEnhancedAdapter date type detection based on column names" do
|
|
67
67
|
ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.emulate_dates_by_column_name = false
|
68
68
|
columns = @conn.columns('test_employees')
|
69
69
|
column = columns.detect{|c| c.name == "hire_date"}
|
70
|
-
column.
|
70
|
+
column.type_cast_from_database(Time.now).class.should == Time
|
71
71
|
end
|
72
72
|
|
73
73
|
it "should return Date value from DATE column if column name contains 'date' and emulate_dates_by_column_name is true" do
|
74
74
|
ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.emulate_dates_by_column_name = true
|
75
75
|
columns = @conn.columns('test_employees')
|
76
76
|
column = columns.detect{|c| c.name == "hire_date"}
|
77
|
-
column.
|
77
|
+
column.type_cast_from_database(Time.now).class.should == Date
|
78
78
|
end
|
79
79
|
|
80
80
|
it "should typecast DateTime value to Date value from DATE column if column name contains 'date' and emulate_dates_by_column_name is true" do
|
81
81
|
ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.emulate_dates_by_column_name = true
|
82
82
|
columns = @conn.columns('test_employees')
|
83
83
|
column = columns.detect{|c| c.name == "hire_date"}
|
84
|
-
column.
|
84
|
+
column.type_cast_from_database(DateTime.new(1900,1,1)).class.should == Date
|
85
85
|
end
|
86
86
|
|
87
87
|
describe "/ DATE values from ActiveRecord model" do
|
@@ -206,7 +206,6 @@ describe "OracleEnhancedAdapter integer type detection based on column names" do
|
|
206
206
|
job_id NUMBER,
|
207
207
|
salary NUMBER,
|
208
208
|
commission_pct NUMBER(2,2),
|
209
|
-
unwise_name_id NUMBER(2,2),
|
210
209
|
manager_id NUMBER(6),
|
211
210
|
is_manager NUMBER(1),
|
212
211
|
department_id NUMBER(4,0),
|
@@ -219,46 +218,17 @@ describe "OracleEnhancedAdapter integer type detection based on column names" do
|
|
219
218
|
INCREMENT BY 1 START WITH 10040 CACHE 20 NOORDER NOCYCLE
|
220
219
|
SQL
|
221
220
|
end
|
222
|
-
|
221
|
+
|
223
222
|
after(:all) do
|
224
223
|
@conn.execute "DROP TABLE test2_employees"
|
225
224
|
@conn.execute "DROP SEQUENCE test2_employees_seq"
|
226
225
|
end
|
227
226
|
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
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
|
227
|
+
it "should set NUMBER column type as decimal if emulate_integers_by_column_name is false" do
|
228
|
+
ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.emulate_integers_by_column_name = false
|
229
|
+
columns = @conn.columns('test2_employees')
|
230
|
+
column = columns.detect{|c| c.name == "job_id"}
|
231
|
+
column.type.should == :decimal
|
262
232
|
end
|
263
233
|
|
264
234
|
it "should set NUMBER column type as integer if emulate_integers_by_column_name is true" do
|
@@ -270,24 +240,10 @@ describe "OracleEnhancedAdapter integer type detection based on column names" do
|
|
270
240
|
column.type.should == :integer
|
271
241
|
end
|
272
242
|
|
273
|
-
it "should set NUMBER
|
243
|
+
it "should set NUMBER column type as decimal if column name does not contain 'id' and emulate_integers_by_column_name is true" do
|
274
244
|
ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.emulate_integers_by_column_name = true
|
275
245
|
columns = @conn.columns('test2_employees')
|
276
|
-
column = columns.detect{|c| c.name == "
|
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"}
|
246
|
+
column = columns.detect{|c| c.name == "salary"}
|
291
247
|
column.type.should == :decimal
|
292
248
|
end
|
293
249
|
|
@@ -295,14 +251,14 @@ describe "OracleEnhancedAdapter integer type detection based on column names" do
|
|
295
251
|
ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.emulate_integers_by_column_name = false
|
296
252
|
columns = @conn.columns('test2_employees')
|
297
253
|
column = columns.detect{|c| c.name == "job_id"}
|
298
|
-
column.
|
254
|
+
column.type_cast_from_database(1.0).class.should == BigDecimal
|
299
255
|
end
|
300
256
|
|
301
|
-
it "should return Fixnum value from NUMBER column if column name
|
257
|
+
it "should return Fixnum value from NUMBER column if column name contains 'id' and emulate_integers_by_column_name is true" do
|
302
258
|
ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.emulate_integers_by_column_name = true
|
303
259
|
columns = @conn.columns('test2_employees')
|
304
260
|
column = columns.detect{|c| c.name == "job_id"}
|
305
|
-
column.
|
261
|
+
column.type_cast_from_database(1.0).class.should == Fixnum
|
306
262
|
end
|
307
263
|
|
308
264
|
describe "/ NUMBER values from ActiveRecord model" do
|
@@ -310,7 +266,7 @@ describe "OracleEnhancedAdapter integer type detection based on column names" do
|
|
310
266
|
class ::Test2Employee < ActiveRecord::Base
|
311
267
|
end
|
312
268
|
end
|
313
|
-
|
269
|
+
|
314
270
|
after(:each) do
|
315
271
|
Object.send(:remove_const, "Test2Employee")
|
316
272
|
@conn.clear_types_for_columns
|
@@ -452,7 +408,7 @@ describe "OracleEnhancedAdapter boolean type detection based on string column ty
|
|
452
408
|
columns = @conn.columns('test3_employees')
|
453
409
|
%w(has_email has_phone active_flag manager_yn).each do |col|
|
454
410
|
column = columns.detect{|c| c.name == col}
|
455
|
-
column.
|
411
|
+
column.type_cast_from_database("Y").class.should == String
|
456
412
|
end
|
457
413
|
end
|
458
414
|
|
@@ -461,8 +417,8 @@ describe "OracleEnhancedAdapter boolean type detection based on string column ty
|
|
461
417
|
columns = @conn.columns('test3_employees')
|
462
418
|
%w(has_email has_phone active_flag manager_yn).each do |col|
|
463
419
|
column = columns.detect{|c| c.name == col}
|
464
|
-
column.
|
465
|
-
column.
|
420
|
+
column.type_cast_from_database("Y").class.should == TrueClass
|
421
|
+
column.type_cast_from_database("N").class.should == FalseClass
|
466
422
|
end
|
467
423
|
end
|
468
424
|
|
@@ -650,6 +606,7 @@ describe "OracleEnhancedAdapter timestamp with timezone support" do
|
|
650
606
|
|
651
607
|
end
|
652
608
|
|
609
|
+
|
653
610
|
describe "OracleEnhancedAdapter date and timestamp with different NLS date formats" do
|
654
611
|
before(:all) do
|
655
612
|
ActiveRecord::Base.establish_connection(CONNECTION_PARAMS)
|
@@ -906,7 +863,7 @@ describe "OracleEnhancedAdapter assign string to :date and :datetime columns" do
|
|
906
863
|
@employee.reload
|
907
864
|
@employee.last_login_at.should == @today.to_time
|
908
865
|
end
|
909
|
-
|
866
|
+
|
910
867
|
end
|
911
868
|
|
912
869
|
describe "OracleEnhancedAdapter handling of CLOB columns" do
|
@@ -1383,6 +1340,7 @@ describe "OracleEnhancedAdapter handling of RAW columns" do
|
|
1383
1340
|
end
|
1384
1341
|
end
|
1385
1342
|
|
1343
|
+
|
1386
1344
|
describe "OracleEnhancedAdapter quoting of NCHAR and NVARCHAR2 columns" do
|
1387
1345
|
before(:all) do
|
1388
1346
|
ActiveRecord::Base.establish_connection(CONNECTION_PARAMS)
|
@@ -1443,3 +1401,45 @@ describe "OracleEnhancedAdapter quoting of NCHAR and NVARCHAR2 columns" do
|
|
1443
1401
|
end
|
1444
1402
|
|
1445
1403
|
end
|
1404
|
+
|
1405
|
+
describe "OracleEnhancedAdapter handling of BINARY_FLOAT columns" do
|
1406
|
+
before(:all) do
|
1407
|
+
ActiveRecord::Base.establish_connection(CONNECTION_PARAMS)
|
1408
|
+
@conn = ActiveRecord::Base.connection
|
1409
|
+
@conn.execute "DROP TABLE test2_employees" rescue nil
|
1410
|
+
@conn.execute <<-SQL
|
1411
|
+
CREATE TABLE test2_employees (
|
1412
|
+
id NUMBER PRIMARY KEY,
|
1413
|
+
first_name VARCHAR2(20),
|
1414
|
+
last_name VARCHAR2(25),
|
1415
|
+
email VARCHAR2(25),
|
1416
|
+
phone_number VARCHAR2(20),
|
1417
|
+
hire_date DATE,
|
1418
|
+
job_id NUMBER,
|
1419
|
+
salary NUMBER,
|
1420
|
+
commission_pct NUMBER(2,2),
|
1421
|
+
hourly_rate BINARY_FLOAT,
|
1422
|
+
manager_id NUMBER(6),
|
1423
|
+
is_manager NUMBER(1),
|
1424
|
+
department_id NUMBER(4,0),
|
1425
|
+
created_at DATE
|
1426
|
+
)
|
1427
|
+
SQL
|
1428
|
+
@conn.execute "DROP SEQUENCE test2_employees_seq" rescue nil
|
1429
|
+
@conn.execute <<-SQL
|
1430
|
+
CREATE SEQUENCE test2_employees_seq MINVALUE 1
|
1431
|
+
INCREMENT BY 1 START WITH 10040 CACHE 20 NOORDER NOCYCLE
|
1432
|
+
SQL
|
1433
|
+
end
|
1434
|
+
|
1435
|
+
after(:all) do
|
1436
|
+
@conn.execute "DROP TABLE test2_employees"
|
1437
|
+
@conn.execute "DROP SEQUENCE test2_employees_seq"
|
1438
|
+
end
|
1439
|
+
|
1440
|
+
it "should set BINARY_FLOAT column type as float" do
|
1441
|
+
columns = @conn.columns('test2_employees')
|
1442
|
+
column = columns.detect{|c| c.name == "hourly_rate"}
|
1443
|
+
column.type.should == :float
|
1444
|
+
end
|
1445
|
+
end
|
@@ -16,7 +16,6 @@ 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,
|
20
19
|
comments CLOB,
|
21
20
|
hire_date DATE
|
22
21
|
)
|
@@ -28,7 +27,7 @@ if ActiveRecord::Base.method_defined?(:changed?)
|
|
28
27
|
class TestEmployee < ActiveRecord::Base
|
29
28
|
end
|
30
29
|
end
|
31
|
-
|
30
|
+
|
32
31
|
after(:all) do
|
33
32
|
Object.send(:remove_const, "TestEmployee")
|
34
33
|
@conn.execute "DROP TABLE test_employees"
|
@@ -63,16 +62,6 @@ if ActiveRecord::Base.method_defined?(:changed?)
|
|
63
62
|
@employee.should_not be_changed
|
64
63
|
end
|
65
64
|
|
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
|
-
|
76
65
|
it "should not mark empty text (stored as NULL) as changed when reassigning it" do
|
77
66
|
@employee = TestEmployee.create!(:comments => nil)
|
78
67
|
@employee.comments = nil
|
@@ -122,7 +111,7 @@ if ActiveRecord::Base.method_defined?(:changed?)
|
|
122
111
|
@employee = TestEmployee.new
|
123
112
|
@employee.job_id = 0
|
124
113
|
@employee.save!.should be_true
|
125
|
-
|
114
|
+
|
126
115
|
@employee.should_not be_changed
|
127
116
|
|
128
117
|
@employee.job_id = '0'
|
@@ -147,6 +136,11 @@ if ActiveRecord::Base.method_defined?(:changed?)
|
|
147
136
|
end
|
148
137
|
end
|
149
138
|
|
139
|
+
it "should be able to handle attributes which are not backed by a column" do
|
140
|
+
TestEmployee.create!(:comments => "initial")
|
141
|
+
@employee = TestEmployee.select("#{TestEmployee.quoted_table_name}.*, 24 ranking").first
|
142
|
+
expect { @employee.ranking = 25 }.to_not raise_error
|
143
|
+
end
|
150
144
|
end
|
151
145
|
|
152
146
|
end
|