activerecord-oracle_enhanced-adapter-monky_patch_755 0.1.0 → 0.2.0

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: 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: