activerecord_bulkoperation 0.0.7 → 0.0.8

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: 2fd7b2c2456f8bf5d1522669b3169a97609ede57
4
- data.tar.gz: 650d94dc039ec2a30509d64f59e98c44cafd0830
3
+ metadata.gz: 17592890c6cddecfc0574cfbc0b2646ddc753cc9
4
+ data.tar.gz: 6796ddbfd955454f12bc5404e44210f497967263
5
5
  SHA512:
6
- metadata.gz: b7a552c53ab19e865cd000b3182c86b628f73e391e2c512202aaea2d861309ecdcb07576728c78202a757739ace52e15a8f3ae18f91af66d7fbbf99a4133b557
7
- data.tar.gz: b49271ed11969fb47cb60c614df7d7fa5fde3b93e5313b356a4f337ff891e35e11720d51575bd51fcf95bfdda6478f54c2e5b92002e21a9a42adfef8bce79744
6
+ metadata.gz: 1aa53b84368fe12513710f1ab441fb75c47d5457960a827e7f7dac6082162502c798bca0f70d2bdf8e2d2b7b9f856b08ce661c52edcd0dd13306fab4f0ef7eb2
7
+ data.tar.gz: d1b4f8b3f2249ada5035e6dc7e2f8f84837619789a67aa42a3f4d8efcfa0fb4f746bdc3725d444594ea3a92e9f12fa0d44b9089fcdefd9493ff449ad83a85c9a
@@ -1,3 +1,5 @@
1
+ require_relative '../../monkey_patch/bindtype'
2
+
1
3
  module ActiveRecord
2
4
  module Bulkoperation
3
5
  module BatchUpdate
@@ -172,7 +174,7 @@ module ActiveRecord
172
174
 
173
175
  def bind_column(cursor, index, type, column)
174
176
  if type == :string
175
- cursor.bind_param_array(":#{index}", column, String, get_max_string_length(column))
177
+ cursor.bind_param_array(":#{index}", column, String)
176
178
 
177
179
  elsif type == :integer
178
180
  cursor.bind_param_array(":#{index}", column, Fixnum)
@@ -189,19 +191,6 @@ module ActiveRecord
189
191
  end
190
192
  end
191
193
 
192
- def get_max_string_length(column)
193
- return nil if column.nil?
194
-
195
- max_length = 0
196
-
197
- column.each do |value|
198
- next if value.nil?
199
- max_length = value.length if value.length > max_length
200
- end
201
-
202
- return max_length > 0 ? max_length : nil
203
- end
204
-
205
194
  def get_date_type(value)
206
195
  return Date if value.nil?
207
196
 
@@ -0,0 +1,92 @@
1
+ require 'oci8'
2
+
3
+ #--
4
+ # bindtype.rb -- OCI8::BindType
5
+ #
6
+ # Copyright (C) 2009-2011 KUBO Takehiro <kubo@jiubao.org>
7
+ #++
8
+
9
+ #
10
+ class OCI8
11
+ module BindType
12
+
13
+ class String
14
+ # 1333 <= ceil(4000 / 3). 4000 is max size of char. 3 is NLS ratio of UTF-8.
15
+ @@minimum_bind_length = 1333
16
+
17
+ def self.minimum_bind_length
18
+ @@minimum_bind_length
19
+ end
20
+
21
+ def self.minimum_bind_length=(val)
22
+ @@minimum_bind_length = val
23
+ end
24
+
25
+ def self.create(con, val, param, max_array_size)
26
+ case param
27
+ when Hash
28
+ param[:length_semantics] = OCI8::properties[:length_semantics] unless param.has_key? :length_semantics
29
+ unless param[:length]
30
+ if val.is_a?(Array) && val.any?
31
+ max = 0
32
+ val.each do |elem|
33
+ length = self.get_length(elem, param)
34
+ max = length if max < length
35
+ end
36
+ param[:length] = max
37
+ else
38
+ param[:length] = self.get_length(val, param)
39
+ end
40
+ end
41
+ # use the default value when :nchar is not set explicitly.
42
+ param[:nchar] = OCI8.properties[:bind_string_as_nchar] unless param.has_key?(:nchar)
43
+ when OCI8::Metadata::Base
44
+ case param.data_type
45
+ when :char, :varchar2
46
+ length_semantics = OCI8.properties[:length_semantics]
47
+ if length_semantics == :char
48
+ length = param.char_size
49
+ else
50
+ length = param.data_size * OCI8.nls_ratio
51
+ end
52
+ param = {
53
+ :length => length,
54
+ :length_semantics => length_semantics,
55
+ :nchar => (param.charset_form == :nchar),
56
+ }
57
+ when :raw
58
+ # HEX needs twice space.
59
+ param = {:length => param.data_size * 2}
60
+ else
61
+ param = {:length => @@minimum_bind_length}
62
+ end
63
+ end
64
+ self.new(con, val, param, max_array_size)
65
+ end
66
+
67
+ private
68
+
69
+ def self.get_length(val, param)
70
+ if val.respond_to? :to_str
71
+ val = val.to_str
72
+ if param[:length_semantics] == :char
73
+ # character semantics
74
+ return val.size
75
+ else
76
+ # byte semantics
77
+ if OCI8.encoding != val.encoding
78
+ # If the string encoding is different with NLS_LANG character set,
79
+ # convert it to get the length.
80
+ val = val.encode(OCI8.encoding)
81
+ end
82
+ return val.bytesize
83
+ end
84
+ else
85
+ return @@minimum_bind_length
86
+ end
87
+ end
88
+ end
89
+
90
+ end
91
+
92
+ end
@@ -1,5 +1,5 @@
1
1
  module ActiveRecord
2
2
  module Bulkoperation
3
- VERSION = "0.0.7"
3
+ VERSION = "0.0.8"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord_bulkoperation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - OSP
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-01 00:00:00.000000000 Z
11
+ date: 2019-07-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -64,6 +64,7 @@ files:
64
64
  - lib/activerecord_bulkoperation/connection_adapters/oracle_enhanced/oci_connection.rb
65
65
  - lib/activerecord_bulkoperation/group_operations.rb
66
66
  - lib/activerecord_bulkoperation/group_operations_select.rb
67
+ - lib/activerecord_bulkoperation/monkey_patch/bindtype.rb
67
68
  - lib/activerecord_bulkoperation/util/connection_object.rb
68
69
  - lib/activerecord_bulkoperation/util/entity_hash.rb
69
70
  - lib/activerecord_bulkoperation/util/flush_dirty_objects.rb