activerecord-oracle_enhanced-adapter 1.5.6 → 1.6.9

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.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/.travis/oracle/download.sh +14 -0
  3. data/.travis/oracle/install.sh +31 -0
  4. data/.travis/setup_accounts.sh +9 -0
  5. data/.travis.yml +39 -0
  6. data/Gemfile +8 -8
  7. data/History.md +189 -0
  8. data/README.md +388 -178
  9. data/RUNNING_TESTS.md +11 -6
  10. data/VERSION +1 -1
  11. data/activerecord-oracle_enhanced-adapter.gemspec +29 -26
  12. data/lib/active_record/connection_adapters/{oracle_enhanced_column.rb → oracle_enhanced/column.rb} +14 -63
  13. data/lib/active_record/connection_adapters/oracle_enhanced/column_dumper.rb +66 -0
  14. data/lib/active_record/connection_adapters/{oracle_enhanced_connection.rb → oracle_enhanced/connection.rb} +2 -2
  15. data/lib/active_record/connection_adapters/oracle_enhanced/context_index.rb +347 -0
  16. data/lib/active_record/connection_adapters/oracle_enhanced/database_statements.rb +260 -0
  17. data/lib/active_record/connection_adapters/oracle_enhanced/dirty.rb +40 -0
  18. data/lib/active_record/connection_adapters/{oracle_enhanced_jdbc_connection.rb → oracle_enhanced/jdbc_connection.rb} +13 -4
  19. data/lib/active_record/connection_adapters/{oracle_enhanced_oci_connection.rb → oracle_enhanced/oci_connection.rb} +11 -5
  20. data/lib/active_record/connection_adapters/{oracle_enhanced_procedures.rb → oracle_enhanced/procedures.rb} +1 -1
  21. data/lib/active_record/connection_adapters/{oracle_enhanced_schema_creation.rb → oracle_enhanced/schema_creation.rb} +34 -35
  22. data/lib/active_record/connection_adapters/oracle_enhanced/schema_definitions.rb +95 -0
  23. data/lib/active_record/connection_adapters/{oracle_enhanced_schema_dumper.rb → oracle_enhanced/schema_dumper.rb} +14 -37
  24. data/lib/active_record/connection_adapters/oracle_enhanced/schema_statements.rb +562 -0
  25. data/lib/active_record/connection_adapters/oracle_enhanced/schema_statements_ext.rb +65 -0
  26. data/lib/active_record/connection_adapters/{oracle_enhanced_structure_dump.rb → oracle_enhanced/structure_dump.rb} +63 -14
  27. data/lib/active_record/connection_adapters/oracle_enhanced/version.rb +1 -0
  28. data/lib/active_record/connection_adapters/oracle_enhanced_adapter.rb +171 -73
  29. data/lib/active_record/oracle_enhanced/type/integer.rb +13 -0
  30. data/lib/active_record/oracle_enhanced/type/raw.rb +13 -0
  31. data/lib/active_record/oracle_enhanced/type/timestamp.rb +11 -0
  32. data/lib/activerecord-oracle_enhanced-adapter.rb +1 -1
  33. data/spec/active_record/connection_adapters/oracle_enhanced_adapter_spec.rb +127 -49
  34. data/spec/active_record/connection_adapters/oracle_enhanced_connection_spec.rb +46 -5
  35. data/spec/active_record/connection_adapters/oracle_enhanced_context_index_spec.rb +11 -3
  36. data/spec/active_record/connection_adapters/oracle_enhanced_cpk_spec.rb +3 -3
  37. data/spec/active_record/connection_adapters/oracle_enhanced_data_types_spec.rb +151 -78
  38. data/spec/active_record/connection_adapters/oracle_enhanced_database_tasks_spec.rb +4 -4
  39. data/spec/active_record/connection_adapters/oracle_enhanced_dirty_spec.rb +10 -16
  40. data/spec/active_record/connection_adapters/oracle_enhanced_emulate_oracle_adapter_spec.rb +1 -1
  41. data/spec/active_record/connection_adapters/oracle_enhanced_procedures_spec.rb +5 -5
  42. data/spec/active_record/connection_adapters/oracle_enhanced_schema_dump_spec.rb +65 -181
  43. data/spec/active_record/connection_adapters/oracle_enhanced_schema_statements_spec.rb +114 -11
  44. data/spec/active_record/connection_adapters/oracle_enhanced_structure_dump_spec.rb +17 -1
  45. data/spec/spec_config.yaml.template +11 -0
  46. data/spec/spec_helper.rb +31 -12
  47. data/spec/support/alter_system_user_password.sql +2 -0
  48. data/spec/support/create_oracle_enhanced_users.sql +31 -0
  49. metadata +37 -27
  50. data/lib/active_record/connection_adapters/oracle_enhanced_column_dumper.rb +0 -77
  51. data/lib/active_record/connection_adapters/oracle_enhanced_context_index.rb +0 -350
  52. data/lib/active_record/connection_adapters/oracle_enhanced_database_statements.rb +0 -262
  53. data/lib/active_record/connection_adapters/oracle_enhanced_dirty.rb +0 -45
  54. data/lib/active_record/connection_adapters/oracle_enhanced_schema_definitions.rb +0 -197
  55. data/lib/active_record/connection_adapters/oracle_enhanced_schema_statements.rb +0 -450
  56. data/lib/active_record/connection_adapters/oracle_enhanced_schema_statements_ext.rb +0 -258
  57. data/lib/active_record/connection_adapters/oracle_enhanced_version.rb +0 -1
  58. /data/lib/active_record/connection_adapters/{oracle_enhanced_cpk.rb → oracle_enhanced/cpk.rb} +0 -0
  59. /data/lib/active_record/connection_adapters/{oracle_enhanced_database_tasks.rb → oracle_enhanced/database_tasks.rb} +0 -0
data/RUNNING_TESTS.md CHANGED
@@ -16,7 +16,9 @@ to increase process limit and then restart the database (this will be necessary
16
16
  Ruby versions
17
17
  -------------
18
18
 
19
- It is recommended to use [RVM](http://rvm.beginrescueend.com) to run tests with different Ruby implementations. oracle_enhanced is mainly tested with MRI 1.8.7 (all Rails versions) and 1.9.2 (Rails 3) and JRuby 1.6.
19
+ oracle_enhanced is tested with MRI 2.1.x and 2.2.x, and JRuby 1.7.x and 9.0.x.x.
20
+
21
+ It is recommended to use [RVM](http://rvm.beginrescueend.com) to run tests with different Ruby implementations.
20
22
 
21
23
  Running tests
22
24
  -------------
@@ -26,19 +28,22 @@ Running tests
26
28
  SQL> CREATE USER oracle_enhanced IDENTIFIED BY oracle_enhanced;
27
29
  SQL> GRANT unlimited tablespace, create session, create table, create sequence, create procedure, create trigger, create view, create materialized view, create database link, create synonym, create type, ctxapp TO oracle_enhanced;
28
30
 
29
- * If you use RVM then switch to corresponding Ruby (1.8.7, 1.9.2 or JRuby) and it is recommended to create isolated gemset for test purposes (e.g. rvm create gemset oracle_enhanced)
31
+ SQL> CREATE USER oracle_enhanced_schema IDENTIFIED BY oracle_enhanced_schema;
32
+ SQL> GRANT unlimited tablespace, create session, create table, create sequence, create procedure, create trigger, create view, create materialized view, create database link, create synonym, create type, ctxapp TO oracle_enhanced_schema;
33
+
34
+ * If you use RVM then switch to corresponding Ruby. It is recommended to create isolated gemsets for test purposes (e.g. rvm create gemset oracle_enhanced)
30
35
 
31
36
  * Install bundler with
32
37
 
33
38
  gem install bundler
34
39
 
35
- * Set RAILS_GEM_VERSION to Rails version that you would like to use in oracle_enhanced tests, e.g.
36
-
37
- export RAILS_GEM_VERSION=3.0.3
38
-
39
40
  * Install necessary gems with
40
41
 
41
42
  bundle install
43
+
44
+ * Configure database credentials in one of two ways:
45
+ * copy spec/spec_config.yaml.template to spec/spec_config.yaml and modify as needed
46
+ * set required environment variables (see DATABASE_NAME in spec_helper.rb)
42
47
 
43
48
  * Run tests with
44
49
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.5.6
1
+ 1.6.9
@@ -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.5.6"
8
+ s.version = "1.6.9"
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-03-30}
13
+ s.date = %q{2017-03-29}
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
  }
@@ -30,23 +30,27 @@ This adapter is superset of original ActiveRecord Oracle adapter.
30
30
  "activerecord-oracle_enhanced-adapter.gemspec",
31
31
  "lib/active_record/connection_adapters/emulation/oracle_adapter.rb",
32
32
  "lib/active_record/connection_adapters/oracle_enhanced_adapter.rb",
33
- "lib/active_record/connection_adapters/oracle_enhanced_column.rb",
34
- "lib/active_record/connection_adapters/oracle_enhanced_column_dumper.rb",
35
- "lib/active_record/connection_adapters/oracle_enhanced_connection.rb",
36
- "lib/active_record/connection_adapters/oracle_enhanced_context_index.rb",
37
- "lib/active_record/connection_adapters/oracle_enhanced_cpk.rb",
38
- "lib/active_record/connection_adapters/oracle_enhanced_database_statements.rb",
39
- "lib/active_record/connection_adapters/oracle_enhanced_dirty.rb",
40
- "lib/active_record/connection_adapters/oracle_enhanced_jdbc_connection.rb",
41
- "lib/active_record/connection_adapters/oracle_enhanced_oci_connection.rb",
42
- "lib/active_record/connection_adapters/oracle_enhanced_procedures.rb",
43
- "lib/active_record/connection_adapters/oracle_enhanced_schema_creation.rb",
44
- "lib/active_record/connection_adapters/oracle_enhanced_schema_definitions.rb",
45
- "lib/active_record/connection_adapters/oracle_enhanced_schema_dumper.rb",
46
- "lib/active_record/connection_adapters/oracle_enhanced_schema_statements.rb",
47
- "lib/active_record/connection_adapters/oracle_enhanced_schema_statements_ext.rb",
48
- "lib/active_record/connection_adapters/oracle_enhanced_structure_dump.rb",
49
- "lib/active_record/connection_adapters/oracle_enhanced_version.rb",
33
+ "lib/active_record/connection_adapters/oracle_enhanced/column.rb",
34
+ "lib/active_record/connection_adapters/oracle_enhanced/column_dumper.rb",
35
+ "lib/active_record/connection_adapters/oracle_enhanced/connection.rb",
36
+ "lib/active_record/connection_adapters/oracle_enhanced/context_index.rb",
37
+ "lib/active_record/connection_adapters/oracle_enhanced/cpk.rb",
38
+ "lib/active_record/connection_adapters/oracle_enhanced/database_statements.rb",
39
+ "lib/active_record/connection_adapters/oracle_enhanced/dirty.rb",
40
+ "lib/active_record/connection_adapters/oracle_enhanced/database_tasks.rb",
41
+ "lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb",
42
+ "lib/active_record/connection_adapters/oracle_enhanced/oci_connection.rb",
43
+ "lib/active_record/connection_adapters/oracle_enhanced/procedures.rb",
44
+ "lib/active_record/connection_adapters/oracle_enhanced/schema_creation.rb",
45
+ "lib/active_record/connection_adapters/oracle_enhanced/schema_definitions.rb",
46
+ "lib/active_record/connection_adapters/oracle_enhanced/schema_dumper.rb",
47
+ "lib/active_record/connection_adapters/oracle_enhanced/schema_statements.rb",
48
+ "lib/active_record/connection_adapters/oracle_enhanced/schema_statements_ext.rb",
49
+ "lib/active_record/connection_adapters/oracle_enhanced/structure_dump.rb",
50
+ "lib/active_record/connection_adapters/oracle_enhanced/version.rb",
51
+ "lib/active_record/oracle_enhanced/type/integer.rb",
52
+ "lib/active_record/oracle_enhanced/type/timestamp.rb",
53
+ "lib/active_record/oracle_enhanced/type/raw.rb",
50
54
  "lib/activerecord-oracle_enhanced-adapter.rb",
51
55
  "spec/active_record/connection_adapters/oracle_enhanced_adapter_spec.rb",
52
56
  "spec/active_record/connection_adapters/oracle_enhanced_connection_spec.rb",
@@ -88,9 +92,9 @@ This adapter is superset of original ActiveRecord Oracle adapter.
88
92
  s.specification_version = 3
89
93
 
90
94
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
91
- s.add_development_dependency(%q<jeweler>, ["~> 1.8"])
95
+ s.add_development_dependency(%q<jeweler>, ["~> 2.0"])
92
96
  s.add_development_dependency(%q<rspec>, ["~> 2.4"])
93
- s.add_development_dependency(%q<activerecord>, [">= 0"])
97
+ s.add_development_dependency(%q<activerecord>, ["~> 4.2.1"])
94
98
  s.add_development_dependency(%q<activemodel>, [">= 0"])
95
99
  s.add_development_dependency(%q<activesupport>, [">= 0"])
96
100
  s.add_development_dependency(%q<actionpack>, [">= 0"])
@@ -100,9 +104,9 @@ This adapter is superset of original ActiveRecord Oracle adapter.
100
104
  s.add_development_dependency(%q<ruby-plsql>, [">= 0.4.4"])
101
105
  s.add_development_dependency(%q<ruby-oci8>, [">= 2.0.4"])
102
106
  else
103
- s.add_dependency(%q<jeweler>, ["~> 1.8"])
107
+ s.add_dependency(%q<jeweler>, ["~> 2.0"])
104
108
  s.add_dependency(%q<rspec>, ["~> 2.4"])
105
- s.add_dependency(%q<activerecord>, [">= 0"])
109
+ s.add_dependency(%q<activerecord>, ["~> 4.2.1"])
106
110
  s.add_dependency(%q<activemodel>, [">= 0"])
107
111
  s.add_dependency(%q<activesupport>, [">= 0"])
108
112
  s.add_dependency(%q<actionpack>, [">= 0"])
@@ -113,9 +117,9 @@ This adapter is superset of original ActiveRecord Oracle adapter.
113
117
  s.add_dependency(%q<ruby-oci8>, [">= 2.0.4"])
114
118
  end
115
119
  else
116
- s.add_dependency(%q<jeweler>, ["~> 1.8"])
120
+ s.add_dependency(%q<jeweler>, ["~> 2.0"])
117
121
  s.add_dependency(%q<rspec>, ["~> 2.4"])
118
- s.add_dependency(%q<activerecord>, [">= 0"])
122
+ s.add_dependency(%q<activerecord>, ["~> 4.2.1"])
119
123
  s.add_dependency(%q<activemodel>, [">= 0"])
120
124
  s.add_dependency(%q<activesupport>, [">= 0"])
121
125
  s.add_dependency(%q<actionpack>, [">= 0"])
@@ -126,4 +130,3 @@ This adapter is superset of original ActiveRecord Oracle adapter.
126
130
  s.add_dependency(%q<ruby-oci8>, [">= 2.0.4"])
127
131
  end
128
132
  end
129
-
@@ -2,11 +2,13 @@ module ActiveRecord
2
2
  module ConnectionAdapters #:nodoc:
3
3
  class OracleEnhancedColumn < Column
4
4
 
5
- attr_reader :table_name, :forced_column_type, :nchar, :virtual_column_data_default, :returning_id #:nodoc:
5
+ attr_reader :table_name, :nchar, :virtual_column_data_default, :returning_id #:nodoc:
6
6
 
7
- def initialize(name, default, sql_type = nil, null = true, table_name = nil, forced_column_type = nil, virtual=false, returning_id=false) #:nodoc:
7
+ FALSE_VALUES << 'N'
8
+ TRUE_VALUES << 'Y'
9
+
10
+ def initialize(name, default, cast_type, sql_type = nil, null = true, table_name = nil, virtual=false, returning_id=false) #:nodoc:
8
11
  @table_name = table_name
9
- @forced_column_type = forced_column_type
10
12
  @virtual = virtual
11
13
  @virtual_column_data_default = default.inspect if virtual
12
14
  @returning_id = returning_id
@@ -15,32 +17,20 @@ module ActiveRecord
15
17
  else
16
18
  default_value = self.class.extract_value_from_default(default)
17
19
  end
18
- super(name, default_value, sql_type, null)
20
+ super(name, default_value, cast_type, sql_type, null)
19
21
  # Is column NCHAR or NVARCHAR2 (will need to use N'...' value quoting for these data types)?
20
22
  # Define only when needed as adapter "quote" method will check at first if instance variable is defined.
21
- @nchar = true if @type == :string && sql_type[0,1] == 'N'
22
- @object_type = sql_type.include? '.'
23
- end
24
-
25
- def type_cast(value) #:nodoc:
26
- case type
27
- when :raw
28
- OracleEnhancedColumn.string_to_raw(value)
29
- when :datetime
30
- OracleEnhancedAdapter.emulate_dates ? guess_date_or_time(value) : super
31
- when :float
32
- !value.nil? ? self.class.value_to_decimal(value) : super
33
- else
34
- super
23
+ if sql_type
24
+ @nchar = true if cast_type.class == ActiveRecord::Type::String && sql_type[0,1] == 'N'
25
+ @object_type = sql_type.include? '.'
35
26
  end
27
+ # TODO: Need to investigate when `sql_type` becomes nil
36
28
  end
37
29
 
38
- def type_cast_code(var_name)
39
- type == :float ? "#{self.class.name}.value_to_decimal(#{var_name})" : super
40
- end
41
-
42
- def klass
43
- type == :float ? BigDecimal : super
30
+ def type_cast(value) #:nodoc:
31
+ return OracleEnhancedColumn::string_to_raw(value) if type == :raw
32
+ return guess_date_or_time(value) if type == :datetime && OracleEnhancedAdapter.emulate_dates
33
+ super
44
34
  end
45
35
 
46
36
  def virtual?
@@ -96,45 +86,6 @@ module ActiveRecord
96
86
 
97
87
  private
98
88
 
99
- def simplified_type(field_type)
100
- forced_column_type ||
101
- case field_type
102
- when /decimal|numeric|number/i
103
- if OracleEnhancedAdapter.emulate_booleans && field_type.upcase == "NUMBER(1)"
104
- :boolean
105
- elsif extract_scale(field_type) == 0 ||
106
- # if column name is ID or ends with _ID
107
- OracleEnhancedAdapter.emulate_integers_by_column_name && OracleEnhancedAdapter.is_integer_column?(name, table_name)
108
- :integer
109
- elsif field_type.upcase == "NUMBER"
110
- OracleEnhancedAdapter.number_datatype_coercion
111
- else
112
- :decimal
113
- end
114
- when /raw/i
115
- :raw
116
- when /char/i
117
- if OracleEnhancedAdapter.emulate_booleans_from_strings &&
118
- OracleEnhancedAdapter.is_boolean_column?(name, field_type, table_name)
119
- :boolean
120
- else
121
- :string
122
- end
123
- when /date/i
124
- if OracleEnhancedAdapter.emulate_dates_by_column_name && OracleEnhancedAdapter.is_date_column?(name, table_name)
125
- :date
126
- else
127
- :datetime
128
- end
129
- when /timestamp/i
130
- :timestamp
131
- when /time/i
132
- :datetime
133
- else
134
- super
135
- end
136
- end
137
-
138
89
  def self.extract_value_from_default(default)
139
90
  case default
140
91
  when String
@@ -0,0 +1,66 @@
1
+ module ActiveRecord #:nodoc:
2
+ module ConnectionAdapters #:nodoc:
3
+ module OracleEnhanced #:nodoc:
4
+ module ColumnDumper #:nodoc:
5
+ def self.included(base) #:nodoc:
6
+ base.class_eval do
7
+ private
8
+ alias_method_chain :column_spec, :oracle_enhanced
9
+ alias_method_chain :prepare_column_options, :oracle_enhanced
10
+ alias_method_chain :migration_keys, :oracle_enhanced
11
+
12
+ def oracle_enhanced_adapter?
13
+ # return original method if not using 'OracleEnhanced'
14
+ if (rails_env = defined?(Rails.env) ? Rails.env : (defined?(RAILS_ENV) ? RAILS_ENV : nil)) &&
15
+ ActiveRecord::Base.configurations[rails_env] &&
16
+ ActiveRecord::Base.configurations[rails_env]['adapter'] != 'oracle_enhanced'
17
+ return false
18
+ else
19
+ return true
20
+ end
21
+ end
22
+ end
23
+ end
24
+
25
+ def column_spec_with_oracle_enhanced(column, types)
26
+ # return original method if not using 'OracleEnhanced'
27
+ return column_spec_without_oracle_enhanced(column, types) unless oracle_enhanced_adapter?
28
+
29
+ spec = prepare_column_options(column, types)
30
+ (spec.keys - [:name, :type]).each do |k|
31
+ key_s = (k == :virtual_type ? "type: " : "#{k.to_s}: ")
32
+ spec[k] = key_s + spec[k]
33
+ end
34
+ spec
35
+ end
36
+
37
+ def prepare_column_options_with_oracle_enhanced(column, types)
38
+ # return original method if not using 'OracleEnhanced'
39
+ return prepare_column_options_without_oracle_enhanced(column, types) unless oracle_enhanced_adapter?
40
+
41
+ spec = {}
42
+ spec[:name] = column.name.inspect
43
+ spec[:type] = column.virtual? ? 'virtual' : column.type.to_s
44
+ spec[:virtual_type] = column.type.inspect if column.virtual? && column.sql_type != 'NUMBER'
45
+ spec[:limit] = column.limit.inspect if column.limit != types[column.type][:limit] && column.type != :decimal
46
+ spec[:precision] = column.precision.inspect if !column.precision.nil?
47
+ spec[:scale] = column.scale.inspect if !column.scale.nil?
48
+ spec[:null] = 'false' if !column.null
49
+ spec[:as] = column.virtual_column_data_default if column.virtual?
50
+ spec[:default] = schema_default(column) if column.has_default? && !column.virtual?
51
+ spec[:comment] = column.comment.inspect unless column.comment.nil?
52
+ spec.delete(:default) if spec[:default].nil?
53
+ spec
54
+ end
55
+
56
+ def migration_keys_with_oracle_enhanced
57
+ # TODO `& column_specs.map(&:keys).flatten` should be exetuted here
58
+ # return original method if not using 'OracleEnhanced'
59
+ return migration_keys_without_oracle_enhanced unless oracle_enhanced_adapter?
60
+
61
+ [:name, :limit, :precision, :scale, :default, :null, :as, :virtual_type, :comment]
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -109,11 +109,11 @@ end
109
109
  # if MRI or YARV
110
110
  if !defined?(RUBY_ENGINE) || RUBY_ENGINE == 'ruby'
111
111
  ORACLE_ENHANCED_CONNECTION = :oci
112
- require 'active_record/connection_adapters/oracle_enhanced_oci_connection'
112
+ require 'active_record/connection_adapters/oracle_enhanced/oci_connection'
113
113
  # if JRuby
114
114
  elsif RUBY_ENGINE == 'jruby'
115
115
  ORACLE_ENHANCED_CONNECTION = :jdbc
116
- require 'active_record/connection_adapters/oracle_enhanced_jdbc_connection'
116
+ require 'active_record/connection_adapters/oracle_enhanced/jdbc_connection'
117
117
  else
118
118
  raise "Unsupported Ruby engine #{RUBY_ENGINE}"
119
119
  end