activerecord-oracle_enhanced-adapter 1.6.2 → 1.6.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ddb7e8953228e3465f579ffe88d131c567000db2
4
- data.tar.gz: 031021ed605f3226d77d04f76157c2473ff35e9a
3
+ metadata.gz: eef5dc051a873b8dc75975b556a46a45427f32b0
4
+ data.tar.gz: b81fefccb9c78bebadde53adc41a5a45746b2637
5
5
  SHA512:
6
- metadata.gz: 694ae9892d14ccaea9ba755a41137eeceb193510fec5100333e0bf60ec7871fcd63ee8caac7ea073643fcdf473f25b6ba7e3768b4bf67b732dafd8ea067160d2
7
- data.tar.gz: eb6efb4b84ad103278ea97bffbfa9e65d58994d5047aa23bf1a4085ff324193d66191b8cee100da00b38bed8068417a09f7ca85c9640bdf4bcf8d1ea1337cbcd
6
+ metadata.gz: 94c87c4500eee69bd24870ebb1306866c85cb6351d38a44d18d1a67660ab022cd39bdcd3905ccd35b4567b6ec16bcb14efce849717a4284ac9117df9d1aa458f
7
+ data.tar.gz: 504cc8085f6ab6114b7bec94a4363ebdad91e557e601ef9ee9c5242bf674cc567674dea2bc604c0ced037066d6236776d42e69285aff7ece680e2f1e34af00ec
data/History.md CHANGED
@@ -1,3 +1,12 @@
1
+ ## 1.6.3 / 2015-08-14
2
+
3
+ * Changes and bug fixes since 1.6.2
4
+ * Set sequence name automatically when new table name is longer than 26 bytes[#676]
5
+ * Add minimal specs for ActiveRecord::Base.limit() and .order()[#679]
6
+ * Use type_casted_binds [#681]
7
+ * Use type_cast_for_database to serialize correctly [#688]
8
+ * Suppress deprecated message for serialized_attributes [#688, #548, #687]
9
+
1
10
  ## 1.6.2 / 2015-07-20
2
11
 
3
12
  * Changes and bug fixes since 1.6.1
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.6.2
1
+ 1.6.3
@@ -5,12 +5,12 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{activerecord-oracle_enhanced-adapter}
8
- s.version = "1.6.2"
8
+ s.version = "1.6.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.license = 'MIT'
12
12
  s.authors = [%q{Raimonds Simanovskis}]
13
- s.date = %q{2015-07-20}
13
+ s.date = %q{2015-08-14}
14
14
  s.description = %q{Oracle "enhanced" ActiveRecord adapter contains useful additional methods for working with new and legacy Oracle databases.
15
15
  This adapter is superset of original ActiveRecord Oracle adapter.
16
16
  }
@@ -32,9 +32,9 @@ module ActiveRecord
32
32
 
33
33
  cursor = @statements[sql]
34
34
 
35
- binds.each_with_index do |bind, i|
35
+ type_casted_binds.each_with_index do |bind, i|
36
36
  col, val = bind
37
- cursor.bind_param(i + 1, type_cast(val, col), col)
37
+ cursor.bind_param(i + 1, val, col)
38
38
  end
39
39
 
40
40
  cached = true
@@ -129,14 +129,14 @@ module ActiveRecord
129
129
 
130
130
  cursor = @statements[sql]
131
131
 
132
- binds.each_with_index do |bind, i|
132
+ type_casted_binds.each_with_index do |bind, i|
133
133
  col, val = bind
134
134
  if col.returning_id?
135
135
  returning_id_col = [col]
136
136
  returning_id_index = i + 1
137
137
  cursor.bind_returning_param(returning_id_index, Integer)
138
138
  else
139
- cursor.bind_param(i + 1, type_cast(val, col), col)
139
+ cursor.bind_param(i + 1, val, col)
140
140
  end
141
141
  end
142
142
  end
@@ -154,7 +154,10 @@ module ActiveRecord
154
154
 
155
155
  # New method in ActiveRecord 3.1
156
156
  def exec_update(sql, name, binds)
157
- log(sql, name, binds) do
157
+ type_casted_binds = binds.map { |col, val|
158
+ [col, type_cast(val, col)]
159
+ }
160
+ log(sql, name, type_casted_binds) do
158
161
  cached = false
159
162
  if without_prepared_statement?(binds)
160
163
  cursor = @connection.prepare(sql)
@@ -165,9 +168,9 @@ module ActiveRecord
165
168
  @statements[sql] = @connection.prepare(sql)
166
169
  end
167
170
 
168
- binds.each_with_index do |bind, i|
171
+ type_casted_binds.each_with_index do |bind, i|
169
172
  col, val = bind
170
- cursor.bind_param(i + 1, type_cast(val, col), col)
173
+ cursor.bind_param(i + 1, val, col)
171
174
  end
172
175
  cached = true
173
176
  end
@@ -103,11 +103,8 @@ module ActiveRecord
103
103
  if new_name.to_s.length > table_name_length
104
104
  raise ArgumentError, "New table name '#{new_name}' is too long; the limit is #{table_name_length} characters"
105
105
  end
106
- if "#{new_name}_seq".to_s.length > sequence_name_length
107
- raise ArgumentError, "New sequence name '#{new_name}_seq' is too long; the limit is #{sequence_name_length} characters"
108
- end
109
106
  execute "RENAME #{quote_table_name(table_name)} TO #{quote_table_name(new_name)}"
110
- execute "RENAME #{quote_table_name("#{table_name}_seq")} TO #{quote_table_name("#{new_name}_seq")}" rescue nil
107
+ execute "RENAME #{quote_table_name("#{table_name}_seq")} TO #{default_sequence_name(new_name)}" rescue nil
111
108
 
112
109
  rename_table_indexes(table_name, new_name)
113
110
  end
@@ -826,7 +826,7 @@ module ActiveRecord
826
826
  value = attributes[col.name]
827
827
  # changed sequence of next two lines - should check if value is nil before converting to yaml
828
828
  next if value.nil? || (value == '')
829
- value = value.to_yaml if klass.serialized_attributes[col.name]
829
+ value = col.cast_type.type_cast_for_database(value)
830
830
  uncached do
831
831
  sql = is_with_cpk ? "SELECT #{quote_column_name(col.name)} FROM #{quote_table_name(table_name)} WHERE #{klass.composite_where_clause(id)} FOR UPDATE" :
832
832
  "SELECT #{quote_column_name(col.name)} FROM #{quote_table_name(table_name)} WHERE #{quote_column_name(klass.primary_key)} = #{id} FOR UPDATE"
@@ -689,4 +689,60 @@ describe "OracleEnhancedAdapter" do
689
689
  explain.should include("INDEX UNIQUE SCAN")
690
690
  end
691
691
  end if ENV['RAILS_GEM_VERSION'] >= '3.2'
692
+
693
+ describe "using offset and limit" do
694
+ before(:all) do
695
+ @conn = ActiveRecord::Base.connection
696
+ @conn.execute "DROP TABLE test_employees" rescue nil
697
+ @conn.execute <<-SQL
698
+ CREATE TABLE test_employees (
699
+ id NUMBER PRIMARY KEY,
700
+ sort_order NUMBER(38,0),
701
+ first_name VARCHAR2(20),
702
+ last_name VARCHAR2(25),
703
+ updated_at DATE,
704
+ created_at DATE
705
+ )
706
+ SQL
707
+ @conn.execute "DROP SEQUENCE test_employees_seq" rescue nil
708
+ @conn.execute <<-SQL
709
+ CREATE SEQUENCE test_employees_seq MINVALUE 1
710
+ INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER NOCYCLE
711
+ SQL
712
+ @employee = Class.new(ActiveRecord::Base) do
713
+ self.table_name = :test_employees
714
+ end
715
+ i = 0
716
+ @employee.create!(sort_order: i+=1, first_name: 'Peter', last_name: 'Parker')
717
+ @employee.create!(sort_order: i+=1, first_name: 'Tony', last_name: 'Stark')
718
+ @employee.create!(sort_order: i+=1, first_name: 'Steven', last_name: 'Rogers')
719
+ @employee.create!(sort_order: i+=1, first_name: 'Bruce', last_name: 'Banner')
720
+ @employee.create!(sort_order: i+=1, first_name: 'Natasha', last_name: 'Romanova')
721
+ end
722
+
723
+ after(:all) do
724
+ @conn.execute "DROP TABLE test_employees"
725
+ @conn.execute "DROP SEQUENCE test_employees_seq"
726
+ end
727
+
728
+ after(:each) do
729
+ ActiveRecord::Base.connection.clear_ignored_table_columns
730
+ ActiveRecord::Base.clear_cache! if ActiveRecord::Base.respond_to?(:"clear_cache!")
731
+ end
732
+
733
+ it "should return n records with limit(n)" do
734
+ @employee.limit(3).to_a.size.should be(3)
735
+ end
736
+
737
+ it "should return less than n records with limit(n) if there exist less than n records" do
738
+ @employee.limit(10).to_a.size.should be(5)
739
+ end
740
+
741
+ it "should return the records starting from offset n with offset(n)" do
742
+ expect(@employee.order(:sort_order).first.first_name.should).to eq("Peter")
743
+ expect(@employee.order(:sort_order).offset(0).first.first_name.should).to eq("Peter")
744
+ expect(@employee.order(:sort_order).offset(1).first.first_name.should).to eq("Tony")
745
+ expect(@employee.order(:sort_order).offset(4).first.first_name.should).to eq("Natasha")
746
+ end
747
+ end
692
748
  end
@@ -1076,6 +1076,20 @@ describe "OracleEnhancedAdapter handling of CLOB columns" do
1076
1076
  @employee.comments.should == @char_data
1077
1077
  end
1078
1078
 
1079
+ it "should store serializable ruby data structures" do
1080
+ ruby_data1 = {"arbitrary1" => ["ruby", :data, 123]}
1081
+ ruby_data2 = {"arbitrary2" => ["ruby", :data, 123]}
1082
+ @employee = Test2Employee.create!(
1083
+ :comments => ruby_data1
1084
+ )
1085
+ @employee.reload
1086
+ @employee.comments.should == ruby_data1
1087
+ @employee.comments = ruby_data2
1088
+ @employee.save
1089
+ @employee.reload
1090
+ @employee.comments.should == ruby_data2
1091
+ end
1092
+
1079
1093
  it "should keep unchanged serialized data when other columns changed" do
1080
1094
  @employee = Test2Employee.create!(
1081
1095
  :first_name => "First",
@@ -438,10 +438,10 @@ describe "OracleEnhancedAdapter schema definition" do
438
438
  end.should raise_error
439
439
  end
440
440
 
441
- it "should raise error when new sequence name length is too long" do
441
+ it "should not raise error when new sequence name length is too long" do
442
442
  lambda do
443
443
  @conn.rename_table("test_employees","a"*27)
444
- end.should raise_error
444
+ end.should_not raise_error
445
445
  end
446
446
 
447
447
  it "should rename table when table has no primary key and sequence" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-oracle_enhanced-adapter
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.2
4
+ version: 1.6.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Raimonds Simanovskis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-20 00:00:00.000000000 Z
11
+ date: 2015-08-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jeweler