activerecord-oracle_enhanced-adapter-monky_patch_755 0.1.0 → 0.2.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1f52477ecfea60965cab665db9538b9ec3628e8a
4
- data.tar.gz: 233d34227e9b5f6862f632348e644c74dbd389b2
3
+ metadata.gz: 126a4ca05008abafa013f727d12b1e63d8cc93a1
4
+ data.tar.gz: 356e802ba546bf6aa21d9d9d26d5464a6010757d
5
5
  SHA512:
6
- metadata.gz: fee727e8ec1ee52b3279c61992463e6ee9cdbf3861879d52a6024293997dbdaefd21fc7538eced4b7a332a7037ce7de0dfc741b0f2012532a1a1845e53d56fdd
7
- data.tar.gz: 0a2d87e55362fd8afdb70d7a11eca11c5582c225f28add0763cb7e7df773ec75a33d6f6a4168dcad72829473c91e6a7ae89bd245ca0b3695e4b8ea12baf8e88b
6
+ metadata.gz: 67a203db760816d586498789b00a35a94dda46c007073266ee726b239413377c8514cccd2bfa87bc1a838f45707d432505b5f4a6c7a8055d9e6b6661c0f05e62
7
+ data.tar.gz: 8e143df1032a05f846c2fbbadfa0e93298e71f5d697acd5eab5789ece32f96f0ec93c9042d97ab51b75313961bc71749d4b7e149388db50e8cc9f5ee03c5acc8
data/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  A monkey patch for oracle-enhanced ISSUE [#755](https://github.com/rsim/oracle-enhanced/issues/755).
4
4
 
5
+ **ISSUE #755 has been resolved at activerecord-oracle_enhanced-adapter 1.7.3.**
6
+
5
7
  ## Installation
6
8
 
7
9
  Add these lines to your application's Gemfile:
@@ -24,7 +26,7 @@ $ gem install activerecord-oracle_enhanced-adapter-monky_patch_755
24
26
 
25
27
  ## Target
26
28
 
27
- * 'activerecord', '~>4.2.1'
29
+ * 'activerecord', '=> 4.2.1'
28
30
  * 'activerecord-oracle_enhanced-adapter', '~> 1.6.0'
29
31
 
30
32
  ## Motivation
@@ -1,4 +1,7 @@
1
- require 'activerecord/monkey_patch/rails4'
1
+ case Rails::VERSION::MAJOR
2
+ when 4; require 'activerecord/monkey_patch/rails4'
3
+ when 5; require 'activerecord/monkey_patch/rails5'
4
+ end
2
5
 
3
6
  #
4
7
  # This code is a monkey patch for oracle-enhanced ISSUE #755.
@@ -10,7 +13,8 @@ module ActiveRecord
10
13
  def adjust_timezone_offset(opts)
11
14
  if ActiveRecord::Base.connection_config[:adapter] != 'oracle_enhanced' ||
12
15
  ActiveRecord::VERSION::MAJOR != SUPPORTED_MAJOR_VERSION ||
13
- ActiveRecord.version < Gem::Version.create(MINIMUM_SUPPORTED_VERSION)
16
+ ActiveRecord.version < Gem::Version.create(MINIMUM_SUPPORTED_VERSION) ||
17
+ Gem::Version.create(ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter::VERSION ) > Gem::Version.create('1.7.3')
14
18
  return opts
15
19
  end
16
20
 
@@ -0,0 +1,187 @@
1
+ module ActiveRecord
2
+ module MonkeyPatch
3
+ SUPPORTED_MAJOR_VERSION = 5
4
+ MINIMUM_SUPPORTED_VERSION = '5.0.0'.freeze
5
+ end
6
+
7
+ #
8
+ # Original code is the following URL.
9
+ #
10
+ # https://github.com/rails/rails/blob/v5.0.0.1/activerecord/lib/active_record/internal_metadata.rb#L18
11
+ #
12
+ class InternalMetadata < ActiveRecord::Base
13
+ class << self
14
+ def []=(key, value)
15
+ find_or_initialize_by(key: key).update_attributes!(value: value.to_s)
16
+ end
17
+ end
18
+ end
19
+
20
+ module ConnectionAdapters
21
+ #
22
+ # Original code is the following URL.
23
+ #
24
+ # https://github.com/rsim/oracle-enhanced/blob/rails5/lib/active_record/connection_adapters/oracle_enhanced_adapter.rb#L938
25
+ #
26
+ class OracleEnhancedAdapter
27
+ def columns_without_cache(table_name, name = nil) #:nodoc:
28
+ table_name = table_name.to_s
29
+ # get ignored_columns by original table name
30
+ ignored_columns = ignored_table_columns(table_name)
31
+
32
+ (owner, desc_table_name, db_link) = @connection.describe(table_name)
33
+
34
+ # reset do_not_prefetch_primary_key cache for this table
35
+ @@do_not_prefetch_primary_key[table_name] = nil
36
+
37
+ table_cols = <<-SQL.strip.gsub(/\s+/, ' ')
38
+ SELECT cols.column_name AS name, cols.data_type AS sql_type,
39
+ cols.data_default, cols.nullable, cols.virtual_column, cols.hidden_column,
40
+ cols.data_type_owner AS sql_type_owner,
41
+ DECODE(cols.data_type, 'NUMBER', data_precision,
42
+ 'FLOAT', data_precision,
43
+ 'VARCHAR2', DECODE(char_used, 'C', char_length, data_length),
44
+ 'RAW', DECODE(char_used, 'C', char_length, data_length),
45
+ 'CHAR', DECODE(char_used, 'C', char_length, data_length),
46
+ NULL) AS limit,
47
+ DECODE(data_type, 'NUMBER', data_scale, NULL) AS scale,
48
+ comments.comments as column_comment
49
+ FROM all_tab_cols#{db_link} cols, all_col_comments#{db_link} comments
50
+ WHERE cols.owner = '#{owner}'
51
+ AND cols.table_name = '#{desc_table_name}'
52
+ AND cols.hidden_column = 'NO'
53
+ AND cols.owner = comments.owner
54
+ AND cols.table_name = comments.table_name
55
+ AND cols.column_name = comments.column_name
56
+ ORDER BY cols.column_id
57
+ SQL
58
+
59
+ # added deletion of ignored columns
60
+ select_all(table_cols, name).to_a.delete_if do |row|
61
+ ignored_columns && ignored_columns.include?(row['name'].downcase)
62
+ end.map do |row|
63
+ limit, scale = row['limit'], row['scale']
64
+ if limit || scale
65
+ row['sql_type'] += "(#{(limit || 38).to_i}" + ((scale = scale.to_i) > 0 ? ",#{scale})" : ")")
66
+ end
67
+
68
+ if row['sql_type_owner']
69
+ row['sql_type'] = row['sql_type_owner'] + '.' + row['sql_type']
70
+ end
71
+
72
+ is_virtual = row['virtual_column']=='YES'
73
+
74
+ # clean up odd default spacing from Oracle
75
+ if row['data_default'] && !is_virtual
76
+ row['data_default'].sub!(/^(.*?)\s*$/, '\1')
77
+
78
+ # If a default contains a newline these cleanup regexes need to
79
+ # match newlines.
80
+ row['data_default'].sub!(/^'(.*)'$/m, '\1')
81
+ row['data_default'] = nil if row['data_default'] =~ /^(null|empty_[bc]lob\(\))$/i
82
+ # TODO: Needs better fix to fallback "N" to false
83
+ row['data_default'] = false if (row['data_default'] == "N" && OracleEnhancedAdapter.emulate_booleans_from_strings)
84
+ end
85
+
86
+ type_metadata = fetch_type_metadata(row['sql_type'])
87
+
88
+ # *** Its a monkey patch paragraph. ***
89
+ if /date/i === type_metadata.sql_type
90
+ if type_metadata.type == :date
91
+ type_metadata.instance_eval('@sql_type = "DATETIME"')
92
+ end
93
+ end
94
+
95
+ new_column(oracle_downcase(row['name']),
96
+ row['data_default'],
97
+ type_metadata,
98
+ row['nullable'] == 'Y',
99
+ table_name,
100
+ is_virtual,
101
+ false,
102
+ row['column_comment']
103
+ )
104
+ end
105
+ end
106
+ end
107
+
108
+ module OracleEnhanced
109
+ #
110
+ # Original code is the following URL.
111
+ #
112
+ # https://github.com/rsim/oracle-enhanced/blob/rails5/lib/active_record/connection_adapters/oracle_enhanced/quoting.rb#L87
113
+ #
114
+ module Quoting
115
+ def quote(value, column = nil) #:nodoc:
116
+ case value
117
+ when ::Date, ::Time, ::DateTime # *** Its a monky patch condition. ***
118
+ if value.acts_like?(:time)
119
+ zone_conversion_method = ActiveRecord::Base.default_timezone == :utc ? :getutc : :getlocal
120
+
121
+ if value.respond_to?(zone_conversion_method)
122
+ value = value.send(zone_conversion_method)
123
+ end
124
+ end
125
+
126
+ "'#{value.to_s(:db)}'"
127
+ else
128
+ super
129
+ end
130
+ end
131
+ end
132
+ end
133
+ end
134
+
135
+ #
136
+ # Original code is the following URL.
137
+ #
138
+ # https://github.com/rails/rails/blob/v5.0.0/activerecord/lib/active_record/relation/where_clause_factory.rb#L9
139
+ #
140
+ class Relation
141
+ class WhereClauseFactory
142
+
143
+ def build(opts, other)
144
+ binds = []
145
+
146
+ case opts
147
+ when String, Array
148
+ parts = [klass.send(:sanitize_sql, other.empty? ? opts : ([opts] + other))]
149
+ when Hash
150
+ opts = ActiveRecord::MonkeyPatch.adjust_timezone_offset(opts)
151
+
152
+ attributes = predicate_builder.resolve_column_aliases(opts)
153
+ attributes = klass.send(:expand_hash_conditions_for_aggregates, attributes)
154
+ attributes.stringify_keys!
155
+
156
+ attributes, binds = predicate_builder.create_binds(attributes)
157
+
158
+ parts = predicate_builder.build_from_hash(attributes)
159
+ when Arel::Nodes::Node
160
+ parts = [opts]
161
+ binds = other
162
+ else
163
+ raise ArgumentError, "Unsupported argument type: #{opts} (#{opts.class})"
164
+ end
165
+
166
+ WhereClause.new(parts, binds)
167
+ end
168
+ end
169
+ end
170
+
171
+ #
172
+ # Original code is the following URL.
173
+ #
174
+ # https://github.com/rails/rails/blob/v5.0.0/activerecord/lib/active_record/statement_cache.rb#L83
175
+ #
176
+ class StatementCache # :nodoc:
177
+ class BindMap # :nodoc:
178
+ def bind(values)
179
+ values = ActiveRecord::MonkeyPatch.adjust_timezone_offset(values)
180
+
181
+ bas = @bound_attributes.dup
182
+ @indexes.each_with_index { |offset,i| bas[offset] = bas[offset].with_cast_value(values[i]) }
183
+ bas
184
+ end
185
+ end
186
+ end
187
+ end
@@ -1,5 +1,5 @@
1
1
  module OracleEnhanced
2
2
  module MonkeyPatch755
3
- VERSION = '0.1.0'.freeze
3
+ VERSION = '0.2.0'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,57 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-oracle_enhanced-adapter-monky_patch_755
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Koichi ITO
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-19 00:00:00.000000000 Z
11
+ date: 2016-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 4.2.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 4.2.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activerecord-oracle_enhanced-adapter
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 1.6.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 1.6.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: ruby-oci8
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: railties
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - "~>"
59
+ - - ">="
46
60
  - !ruby/object:Gem::Version
47
61
  version: 4.2.1
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - "~>"
66
+ - - ">="
53
67
  - !ruby/object:Gem::Version
54
68
  version: 4.2.1
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 3.0.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 3.0.0
55
83
  description: 'A monkey patch for oracle-enhanced ISSUE #755.'
56
84
  email: koic.ito@gmail.com
57
85
  executables: []
@@ -63,6 +91,7 @@ files:
63
91
  - lib/activerecord-oracle_enhanced-adapter-monky_patch_755.rb
64
92
  - lib/activerecord/monkey_patch.rb
65
93
  - lib/activerecord/monkey_patch/rails4.rb
94
+ - lib/activerecord/monkey_patch/rails5.rb
66
95
  - lib/oracle_enhanced/monkey_patch_755/hooks.rb
67
96
  - lib/oracle_enhanced/monkey_patch_755/railtie.rb
68
97
  - lib/oracle_enhanced/monkey_patch_755/version.rb
@@ -70,7 +99,10 @@ homepage: http://github.com/koic/oracle-enhanced-monky_patch_755
70
99
  licenses:
71
100
  - MIT
72
101
  metadata: {}
73
- post_install_message:
102
+ post_install_message: |
103
+ [activerecord-oracle_enhanced-adapter-monky_patch_755]
104
+ oracle-enhanced ISSUE #755 has been fixed at oracle-enhanced 1.7.3.
105
+ The best way is to use oracle-enhanced 1.7.3 or later. Thanks.
74
106
  rdoc_options: []
75
107
  require_paths:
76
108
  - lib
@@ -86,8 +118,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
86
118
  version: '0'
87
119
  requirements: []
88
120
  rubyforge_project:
89
- rubygems_version: 2.5.1
121
+ rubygems_version: 2.6.8
90
122
  signing_key:
91
123
  specification_version: 4
92
124
  summary: 'A monkey patch for oracle-enhanced ISSUE #755.'
93
125
  test_files: []
126
+ has_rdoc: