activerecord-oracle_enhanced-adapter 1.6.1 → 1.6.2

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: 7711c73f40b2ea4312ff8e5efe5ecdbc1e30521e
4
- data.tar.gz: 42cb1cf7bf713ec2ad67818c78b8c07d24ea5f6f
3
+ metadata.gz: ddb7e8953228e3465f579ffe88d131c567000db2
4
+ data.tar.gz: 031021ed605f3226d77d04f76157c2473ff35e9a
5
5
  SHA512:
6
- metadata.gz: acbc9ace54d4da1b4d4ad53b4d989390539d6de99057aaf386880ad5f14df672d0e148e0779ab5285dde5849068b0a74b0b133e420123c2fc3fc6a43765cda3c
7
- data.tar.gz: b4d28e7db4ba6cdb92fe8b65471027039157a96d80cb991554dbdcf7a1578ebc7e0a56db065351099a9696bac7f69c1f9747f7c75af52b721a7fd331dbb0740c
6
+ metadata.gz: 694ae9892d14ccaea9ba755a41137eeceb193510fec5100333e0bf60ec7871fcd63ee8caac7ea073643fcdf473f25b6ba7e3768b4bf67b732dafd8ea067160d2
7
+ data.tar.gz: eb6efb4b84ad103278ea97bffbfa9e65d58994d5047aa23bf1a4085ff324193d66191b8cee100da00b38bed8068417a09f7ca85c9640bdf4bcf8d1ea1337cbcd
data/History.md CHANGED
@@ -1,3 +1,12 @@
1
+ ## 1.6.2 / 2015-07-20
2
+
3
+ * Changes and bug fixes since 1.6.1
4
+
5
+ * Oracle enhanced adapter v1.6 requires ActiveRecord 4.2.1 or higher,
6
+ ActiveRecord 4.2.0 is not supported.[#672]
7
+ * Unique constraints not created when function unique index created [#662, #663]
8
+ * create_table should use default tablespace values for lobs [#668]
9
+
1
10
  ## 1.6.1 / 2015-07-01
2
11
 
3
12
  * Changes and bug fixes since 1.6.0
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.6.1
1
+ 1.6.2
@@ -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.1"
8
+ s.version = "1.6.2"
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-01}
13
+ s.date = %q{2015-07-20}
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
  }
@@ -119,8 +119,8 @@ This adapter is superset of original ActiveRecord Oracle adapter.
119
119
  else
120
120
  s.add_dependency(%q<jeweler>, ["~> 2.0"])
121
121
  s.add_dependency(%q<rspec>, ["~> 2.4"])
122
- s.add_dependency(%q<activerecord>, [">= 0"])
123
- s.add_dependency(%q<activemodel>, ["~> 4.2.1"])
122
+ s.add_dependency(%q<activerecord>, ["~> 4.2.1"])
123
+ s.add_dependency(%q<activemodel>, [">= 0"])
124
124
  s.add_dependency(%q<activesupport>, [">= 0"])
125
125
  s.add_dependency(%q<actionpack>, [">= 0"])
126
126
  s.add_dependency(%q<railties>, [">= 0"])
@@ -5,40 +5,38 @@ module ActiveRecord
5
5
  private
6
6
 
7
7
  def visit_ColumnDefinition(o)
8
- if o.type.to_sym == :virtual
9
- sql_type = type_to_sql(o.default[:type], o.limit, o.precision, o.scale) if o.default[:type]
10
- "#{quote_column_name(o.name)} #{sql_type} AS (#{o.default[:as]})"
11
- else
12
- super
8
+ case
9
+ when o.type.to_sym == :virtual
10
+ sql_type = type_to_sql(o.default[:type], o.limit, o.precision, o.scale) if o.default[:type]
11
+ return "#{quote_column_name(o.name)} #{sql_type} AS (#{o.default[:as]})"
12
+ when [:blob, :clob].include?(sql_type = type_to_sql(o.type.to_sym, o.limit, o.precision, o.scale).downcase.to_sym)
13
+ if (tablespace = default_tablespace_for(sql_type))
14
+ @lob_tablespaces ||= {}
15
+ @lob_tablespaces[o.name] = tablespace
16
+ end
13
17
  end
18
+ super
14
19
  end
15
20
 
16
21
  def visit_TableDefinition(o)
17
- tablespace = tablespace_for(:table, o.options[:tablespace])
18
22
  create_sql = "CREATE#{' GLOBAL TEMPORARY' if o.temporary} TABLE "
19
23
  create_sql << "#{quote_table_name(o.name)} ("
20
24
  create_sql << o.columns.map { |c| accept c }.join(', ')
21
25
  create_sql << ")"
26
+
22
27
  unless o.temporary
28
+ @lob_tablespaces.each do |lob_column, tablespace|
29
+ create_sql << " LOB (#{quote_column_name(lob_column)}) STORE AS (TABLESPACE #{tablespace}) \n"
30
+ end if defined?(@lob_tablespaces)
23
31
  create_sql << " ORGANIZATION #{o.options[:organization]}" if o.options[:organization]
24
- create_sql << "#{tablespace}"
32
+ if (tablespace = o.options[:tablespace] || default_tablespace_for(:table))
33
+ create_sql << " TABLESPACE #{tablespace}"
34
+ end
25
35
  end
26
36
  create_sql << " #{o.options[:options]}"
27
37
  create_sql
28
38
  end
29
39
 
30
- def tablespace_for(obj_type, tablespace_option, table_name=nil, column_name=nil)
31
- tablespace_sql = ''
32
- if tablespace = (tablespace_option || default_tablespace_for(obj_type))
33
- tablespace_sql << if [:blob, :clob].include?(obj_type.to_sym)
34
- " LOB (#{quote_column_name(column_name)}) STORE AS #{column_name.to_s[0..10]}_#{table_name.to_s[0..14]}_ls (TABLESPACE #{tablespace})"
35
- else
36
- " TABLESPACE #{tablespace}"
37
- end
38
- end
39
- tablespace_sql
40
- end
41
-
42
40
  def default_tablespace_for(type)
43
41
  (ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.default_tablespaces[type] ||
44
42
  ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.default_tablespaces[native_database_types[type][:name]]) rescue nil
@@ -166,7 +166,9 @@ module ActiveRecord
166
166
  index_name, index_type, quoted_column_names, tablespace, index_options = add_index_options(table_name, column_name, options)
167
167
  execute "CREATE #{index_type} INDEX #{quote_column_name(index_name)} ON #{quote_table_name(table_name)} (#{quoted_column_names})#{tablespace} #{index_options}"
168
168
  if index_type == 'UNIQUE'
169
- execute "ALTER TABLE #{quote_table_name(table_name)} ADD CONSTRAINT #{quote_column_name(index_name)} #{index_type} (#{quoted_column_names})"
169
+ unless quoted_column_names =~ /\(.*\)/
170
+ execute "ALTER TABLE #{quote_table_name(table_name)} ADD CONSTRAINT #{quote_column_name(index_name)} #{index_type} (#{quoted_column_names})"
171
+ end
170
172
  end
171
173
  ensure
172
174
  self.all_schema_indexes = nil
@@ -804,6 +804,45 @@ end
804
804
 
805
805
  end
806
806
 
807
+ describe "lob in table definition" do
808
+ before do
809
+ class ::TestPost < ActiveRecord::Base
810
+ end
811
+ end
812
+ it 'should use default tablespace for clobs' do
813
+ ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.default_tablespaces[:clob] = DATABASE_NON_DEFAULT_TABLESPACE
814
+ ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.default_tablespaces[:blob] = nil
815
+ schema_define do
816
+ create_table :test_posts, :force => true do |t|
817
+ t.text :test_clob
818
+ t.binary :test_blob
819
+ end
820
+ end
821
+ TestPost.connection.select_value("SELECT tablespace_name FROM user_lobs WHERE table_name='TEST_POSTS' and column_name = 'TEST_CLOB'").should == DATABASE_NON_DEFAULT_TABLESPACE
822
+ TestPost.connection.select_value("SELECT tablespace_name FROM user_lobs WHERE table_name='TEST_POSTS' and column_name = 'TEST_BLOB'").should_not == DATABASE_NON_DEFAULT_TABLESPACE
823
+ end
824
+
825
+ it 'should use default tablespace for blobs' do
826
+ ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.default_tablespaces[:blob] = DATABASE_NON_DEFAULT_TABLESPACE
827
+ ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.default_tablespaces[:clob] = nil
828
+ schema_define do
829
+ create_table :test_posts, :force => true do |t|
830
+ t.text :test_clob
831
+ t.binary :test_blob
832
+ end
833
+ end
834
+ TestPost.connection.select_value("SELECT tablespace_name FROM user_lobs WHERE table_name='TEST_POSTS' and column_name = 'TEST_BLOB'").should == DATABASE_NON_DEFAULT_TABLESPACE
835
+ TestPost.connection.select_value("SELECT tablespace_name FROM user_lobs WHERE table_name='TEST_POSTS' and column_name = 'TEST_CLOB'").should_not == DATABASE_NON_DEFAULT_TABLESPACE
836
+ end
837
+
838
+ after do
839
+ Object.send(:remove_const, "TestPost")
840
+ schema_define do
841
+ drop_table :test_posts rescue nil
842
+ end
843
+ end
844
+ end
845
+
807
846
  describe "foreign key in table definition" do
808
847
  before(:each) do
809
848
  schema_define do
@@ -1368,6 +1407,13 @@ end
1368
1407
  @would_execute_sql.should =~ /CREATE +INDEX .* ON .* \(.*\) TABLESPACE #{DATABASE_NON_DEFAULT_TABLESPACE}/
1369
1408
  end
1370
1409
 
1410
+ it "should create unique function index but not create unique constraints" do
1411
+ schema_define do
1412
+ add_index :keyboards, 'lower(name)', unique: true, name: :index_keyboards_on_lower_name
1413
+ end
1414
+ @would_execute_sql.should_not =~ /ALTER +TABLE .* ADD CONSTRAINT .* UNIQUE \(.*\(.*\)\)/
1415
+ end
1416
+
1371
1417
  describe "#initialize_schema_migrations_table" do
1372
1418
  # In Rails 2.3 to 3.2.x the index name for the migrations
1373
1419
  # table is hard-coded. We can modify the index name here
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.1
4
+ version: 1.6.2
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-01 00:00:00.000000000 Z
11
+ date: 2015-07-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jeweler