ruby-oci8 2.1.5.1-x64-mingw32

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 (64) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +17 -0
  3. data/COPYING +30 -0
  4. data/COPYING_old +64 -0
  5. data/ChangeLog +2779 -0
  6. data/Makefile +92 -0
  7. data/NEWS +660 -0
  8. data/README.md +43 -0
  9. data/VERSION +1 -0
  10. data/dist-files +91 -0
  11. data/docs/install-binary-package.md +40 -0
  12. data/docs/install-full-client.md +116 -0
  13. data/docs/install-instant-client.md +167 -0
  14. data/docs/platform-specific-issues.md +197 -0
  15. data/docs/report-installation-issue.md +50 -0
  16. data/lib/.document +1 -0
  17. data/lib/dbd/OCI8.rb +591 -0
  18. data/lib/oci8.rb +147 -0
  19. data/lib/oci8.rb.in +147 -0
  20. data/lib/oci8/.document +8 -0
  21. data/lib/oci8/bindtype.rb +350 -0
  22. data/lib/oci8/compat.rb +113 -0
  23. data/lib/oci8/connection_pool.rb +108 -0
  24. data/lib/oci8/cursor.rb +564 -0
  25. data/lib/oci8/datetime.rb +605 -0
  26. data/lib/oci8/encoding-init.rb +79 -0
  27. data/lib/oci8/encoding.yml +537 -0
  28. data/lib/oci8/metadata.rb +2092 -0
  29. data/lib/oci8/object.rb +605 -0
  30. data/lib/oci8/oci8.rb +560 -0
  31. data/lib/oci8/ocihandle.rb +607 -0
  32. data/lib/oci8/oracle_version.rb +143 -0
  33. data/lib/oci8/properties.rb +134 -0
  34. data/lib/oci8lib_200.so +0 -0
  35. data/metaconfig +142 -0
  36. data/pre-distclean.rb +7 -0
  37. data/ruby-oci8.gemspec +80 -0
  38. data/setup.rb +1333 -0
  39. data/test/README +42 -0
  40. data/test/config.rb +184 -0
  41. data/test/setup_test_object.sql +171 -0
  42. data/test/test_all.rb +54 -0
  43. data/test/test_appinfo.rb +63 -0
  44. data/test/test_array_dml.rb +333 -0
  45. data/test/test_bind_raw.rb +46 -0
  46. data/test/test_bind_string.rb +106 -0
  47. data/test/test_bind_time.rb +178 -0
  48. data/test/test_break.rb +124 -0
  49. data/test/test_clob.rb +98 -0
  50. data/test/test_connection_pool.rb +125 -0
  51. data/test/test_connstr.rb +81 -0
  52. data/test/test_datetime.rb +581 -0
  53. data/test/test_dbi.rb +366 -0
  54. data/test/test_dbi_clob.rb +53 -0
  55. data/test/test_encoding.rb +104 -0
  56. data/test/test_error.rb +88 -0
  57. data/test/test_metadata.rb +1485 -0
  58. data/test/test_object.rb +462 -0
  59. data/test/test_oci8.rb +489 -0
  60. data/test/test_oracle_version.rb +70 -0
  61. data/test/test_oradate.rb +256 -0
  62. data/test/test_oranumber.rb +787 -0
  63. data/test/test_rowid.rb +33 -0
  64. metadata +109 -0
data/lib/oci8.rb ADDED
@@ -0,0 +1,147 @@
1
+
2
+ # --*- ruby -*--
3
+ # This is based on yoshidam's oracle.rb.
4
+ #
5
+ # sample one liner:
6
+ # ruby -r oci8 -e 'OCI8.new("scott", "tiger", nil).exec("select * from emp") do |r| puts r.join(","); end'
7
+ # # select all data from emp and print them as CVS format.
8
+
9
+ ENV['ORA_SDTZ'] = ENV['TZ'] unless ENV['ORA_SDTZ']
10
+
11
+ if RUBY_PLATFORM =~ /cygwin/
12
+ # Cygwin manages environment variables by itself.
13
+ # They don't synchroize with Win32's ones.
14
+ # This set some Oracle's environment variables to win32's enviroment.
15
+ require 'Win32API'
16
+ win32setenv = Win32API.new('Kernel32.dll', 'SetEnvironmentVariableA', 'PP', 'I')
17
+ ['NLS_LANG', 'TNS_ADMIN', 'LOCAL'].each do |name|
18
+ val = ENV[name]
19
+ win32setenv.call(name, val && val.dup)
20
+ end
21
+ ENV.each do |name, val|
22
+ win32setenv.call(name, val && val.dup) if name =~ /^ORA/
23
+ end
24
+ end
25
+
26
+ ruby_engine = (defined? RUBY_ENGINE) ? RUBY_ENGINE : 'ruby'
27
+
28
+ so_basename = 'oci8lib_'
29
+ case ruby_engine
30
+ when 'ruby'
31
+ # The extension library name includes the ruby ABI (application binary interface)
32
+ # version. It is for binary gems which contain more than one extension library
33
+ # and use correct one depending on the ABI version.
34
+ #
35
+ # ruby version | ABI version
36
+ # --------------+--------------
37
+ # 1.8.6 | 1.8
38
+ # 1.8.7 | 1.8
39
+ # --------------+--------------
40
+ # 1.9.0 | 1.9.0
41
+ # 1.9.1 | 1.9.1
42
+ # 1.9.2 | 1.9.1
43
+ # 1.9.3 | 1.9.1
44
+ # --------------+--------------
45
+ # 2.0.0 | 2.0.0
46
+ # 2.0.1 | 2.0.1 (See: [ruby-core:49578])
47
+ # ... | ...
48
+ #
49
+ # Note: The ruby ABI version is same with RbConfig::CONFIG['ruby_version']
50
+ # if it wasn't explicitly changed by the configure option --with-ruby-version.
51
+ #
52
+ case RUBY_VERSION
53
+ when /^2\.0/
54
+ so_basename += RUBY_VERSION.gsub(/\W/, '')
55
+ when /^1\.9\.0/
56
+ raise 'unsupported ruby version: 1.9.0'
57
+ when /^1\.9/
58
+ so_basename += '191'
59
+ when /^1\.8/
60
+ so_basename += '18'
61
+ else
62
+ raise 'unsupported ruby version: ' + RUBY_VERSION
63
+ end
64
+ when 'rbx'
65
+ # "rbx -X18" and "rbx -X19" use different C header files.
66
+ case RUBY_VERSION
67
+ when /^2\.0/
68
+ so_basename += 'rbx20'
69
+ when /^1\.9/
70
+ so_basename += 'rbx19'
71
+ when /^1\.8/
72
+ so_basename += 'rbx18'
73
+ else
74
+ raise 'unsupported language mode: ' + RUBY_VERSION
75
+ end
76
+ when 'jruby'
77
+ raise "Ruby-oci8 doesn't support jruby because its C extension support is in development in jruby 1.6 and deprecated in jruby 1.7."
78
+ else
79
+ raise 'unsupported ruby engine: ' + RUBY_ENGINE
80
+ end
81
+ require so_basename
82
+
83
+ if OCI8::VERSION != '2.1.5'
84
+ require 'rbconfig'
85
+ so_name = so_basename + "." + RbConfig::CONFIG['DLEXT']
86
+ raise "VERSION MISMATCH! #{so_name} version is #{OCI8::VERSION}, but oci8.rb version is 2.1.5."
87
+ end
88
+
89
+ require 'oci8/encoding-init.rb'
90
+ require 'oci8/oracle_version.rb'
91
+
92
+ class OCI8
93
+ # @private
94
+ ORAVER_8_0 = OCI8::OracleVersion.new(8, 0)
95
+ # @private
96
+ ORAVER_8_1 = OCI8::OracleVersion.new(8, 1)
97
+ # @private
98
+ ORAVER_9_0 = OCI8::OracleVersion.new(9, 0)
99
+ # @private
100
+ ORAVER_9_2 = OCI8::OracleVersion.new(9, 2)
101
+ # @private
102
+ ORAVER_10_1 = OCI8::OracleVersion.new(10, 1)
103
+ # @private
104
+ ORAVER_10_2 = OCI8::OracleVersion.new(10, 2)
105
+ # @private
106
+ ORAVER_11_1 = OCI8::OracleVersion.new(11, 1)
107
+
108
+ # @private
109
+ @@oracle_client_version = OCI8::OracleVersion.new(self.oracle_client_vernum)
110
+
111
+ # Returns an OCI8::OracleVersion of the Oracle client version.
112
+ #
113
+ # If this library is configured without '--with-runtime-check',
114
+ # and compiled for Oracle 10.1 or lower, the major and minor
115
+ # numbers are determined at compile-time. The rests are zeros.
116
+ #
117
+ # If this library is configured with '--with-runtime-check'
118
+ # and the runtime Oracle library is Oracle 10.1 or lower, the
119
+ # major and minor numbers are determined at run-time. The
120
+ # rests are zeros.
121
+ #
122
+ # Otherwise, it is the version retrieved from an OCI function
123
+ # OCIClientVersion().
124
+ #
125
+ # @return [OCI8::OracleVersion] Oracle client version
126
+ # @see OCI8#oracle_server_version
127
+ def self.oracle_client_version
128
+ @@oracle_client_version
129
+ end
130
+
131
+ # defined for backward compatibility.
132
+ # @private
133
+ CLIENT_VERSION = @@oracle_client_version.major.to_s +
134
+ @@oracle_client_version.minor.to_s +
135
+ @@oracle_client_version.update.to_s
136
+ end
137
+
138
+ require 'oci8/ocihandle.rb'
139
+ require 'oci8/datetime.rb'
140
+ require 'oci8/oci8.rb'
141
+ require 'oci8/cursor.rb'
142
+ require 'oci8/bindtype.rb'
143
+ require 'oci8/metadata.rb'
144
+ require 'oci8/compat.rb'
145
+ require 'oci8/object.rb'
146
+ require 'oci8/connection_pool.rb'
147
+ require 'oci8/properties.rb'
data/lib/oci8.rb.in ADDED
@@ -0,0 +1,147 @@
1
+
2
+ # --*- ruby -*--
3
+ # This is based on yoshidam's oracle.rb.
4
+ #
5
+ # sample one liner:
6
+ # ruby -r oci8 -e 'OCI8.new("scott", "tiger", nil).exec("select * from emp") do |r| puts r.join(","); end'
7
+ # # select all data from emp and print them as CVS format.
8
+
9
+ ENV['ORA_SDTZ'] = ENV['TZ'] unless ENV['ORA_SDTZ']
10
+
11
+ if RUBY_PLATFORM =~ /cygwin/
12
+ # Cygwin manages environment variables by itself.
13
+ # They don't synchroize with Win32's ones.
14
+ # This set some Oracle's environment variables to win32's enviroment.
15
+ require 'Win32API'
16
+ win32setenv = Win32API.new('Kernel32.dll', 'SetEnvironmentVariableA', 'PP', 'I')
17
+ ['NLS_LANG', 'TNS_ADMIN', 'LOCAL'].each do |name|
18
+ val = ENV[name]
19
+ win32setenv.call(name, val && val.dup)
20
+ end
21
+ ENV.each do |name, val|
22
+ win32setenv.call(name, val && val.dup) if name =~ /^ORA/
23
+ end
24
+ end
25
+
26
+ ruby_engine = (defined? RUBY_ENGINE) ? RUBY_ENGINE : 'ruby'
27
+
28
+ so_basename = 'oci8lib_'
29
+ case ruby_engine
30
+ when 'ruby'
31
+ # The extension library name includes the ruby ABI (application binary interface)
32
+ # version. It is for binary gems which contain more than one extension library
33
+ # and use correct one depending on the ABI version.
34
+ #
35
+ # ruby version | ABI version
36
+ # --------------+--------------
37
+ # 1.8.6 | 1.8
38
+ # 1.8.7 | 1.8
39
+ # --------------+--------------
40
+ # 1.9.0 | 1.9.0
41
+ # 1.9.1 | 1.9.1
42
+ # 1.9.2 | 1.9.1
43
+ # 1.9.3 | 1.9.1
44
+ # --------------+--------------
45
+ # 2.0.0 | 2.0.0
46
+ # 2.0.1 | 2.0.1 (See: [ruby-core:49578])
47
+ # ... | ...
48
+ #
49
+ # Note: The ruby ABI version is same with RbConfig::CONFIG['ruby_version']
50
+ # if it wasn't explicitly changed by the configure option --with-ruby-version.
51
+ #
52
+ case RUBY_VERSION
53
+ when /^2\.0/
54
+ so_basename += RUBY_VERSION.gsub(/\W/, '')
55
+ when /^1\.9\.0/
56
+ raise 'unsupported ruby version: 1.9.0'
57
+ when /^1\.9/
58
+ so_basename += '191'
59
+ when /^1\.8/
60
+ so_basename += '18'
61
+ else
62
+ raise 'unsupported ruby version: ' + RUBY_VERSION
63
+ end
64
+ when 'rbx'
65
+ # "rbx -X18" and "rbx -X19" use different C header files.
66
+ case RUBY_VERSION
67
+ when /^2\.0/
68
+ so_basename += 'rbx20'
69
+ when /^1\.9/
70
+ so_basename += 'rbx19'
71
+ when /^1\.8/
72
+ so_basename += 'rbx18'
73
+ else
74
+ raise 'unsupported language mode: ' + RUBY_VERSION
75
+ end
76
+ when 'jruby'
77
+ raise "Ruby-oci8 doesn't support jruby because its C extension support is in development in jruby 1.6 and deprecated in jruby 1.7."
78
+ else
79
+ raise 'unsupported ruby engine: ' + RUBY_ENGINE
80
+ end
81
+ require so_basename
82
+
83
+ if OCI8::VERSION != '@@OCI8_MODULE_VERSION@@'
84
+ require 'rbconfig'
85
+ so_name = so_basename + "." + RbConfig::CONFIG['DLEXT']
86
+ raise "VERSION MISMATCH! #{so_name} version is #{OCI8::VERSION}, but oci8.rb version is @@OCI8_MODULE_VERSION@@."
87
+ end
88
+
89
+ require 'oci8/encoding-init.rb'
90
+ require 'oci8/oracle_version.rb'
91
+
92
+ class OCI8
93
+ # @private
94
+ ORAVER_8_0 = OCI8::OracleVersion.new(8, 0)
95
+ # @private
96
+ ORAVER_8_1 = OCI8::OracleVersion.new(8, 1)
97
+ # @private
98
+ ORAVER_9_0 = OCI8::OracleVersion.new(9, 0)
99
+ # @private
100
+ ORAVER_9_2 = OCI8::OracleVersion.new(9, 2)
101
+ # @private
102
+ ORAVER_10_1 = OCI8::OracleVersion.new(10, 1)
103
+ # @private
104
+ ORAVER_10_2 = OCI8::OracleVersion.new(10, 2)
105
+ # @private
106
+ ORAVER_11_1 = OCI8::OracleVersion.new(11, 1)
107
+
108
+ # @private
109
+ @@oracle_client_version = OCI8::OracleVersion.new(self.oracle_client_vernum)
110
+
111
+ # Returns an OCI8::OracleVersion of the Oracle client version.
112
+ #
113
+ # If this library is configured without '--with-runtime-check',
114
+ # and compiled for Oracle 10.1 or lower, the major and minor
115
+ # numbers are determined at compile-time. The rests are zeros.
116
+ #
117
+ # If this library is configured with '--with-runtime-check'
118
+ # and the runtime Oracle library is Oracle 10.1 or lower, the
119
+ # major and minor numbers are determined at run-time. The
120
+ # rests are zeros.
121
+ #
122
+ # Otherwise, it is the version retrieved from an OCI function
123
+ # OCIClientVersion().
124
+ #
125
+ # @return [OCI8::OracleVersion] Oracle client version
126
+ # @see OCI8#oracle_server_version
127
+ def self.oracle_client_version
128
+ @@oracle_client_version
129
+ end
130
+
131
+ # defined for backward compatibility.
132
+ # @private
133
+ CLIENT_VERSION = @@oracle_client_version.major.to_s +
134
+ @@oracle_client_version.minor.to_s +
135
+ @@oracle_client_version.update.to_s
136
+ end
137
+
138
+ require 'oci8/ocihandle.rb'
139
+ require 'oci8/datetime.rb'
140
+ require 'oci8/oci8.rb'
141
+ require 'oci8/cursor.rb'
142
+ require 'oci8/bindtype.rb'
143
+ require 'oci8/metadata.rb'
144
+ require 'oci8/compat.rb'
145
+ require 'oci8/object.rb'
146
+ require 'oci8/connection_pool.rb'
147
+ require 'oci8/properties.rb'
@@ -0,0 +1,8 @@
1
+ datetime.rb
2
+ object.rb
3
+ metadata.rb
4
+ oracle_version.rb
5
+ oci8.rb
6
+ ocihandle.rb
7
+ connection_pool.rb
8
+ properties.rb
@@ -0,0 +1,350 @@
1
+ #--
2
+ # bindtype.rb -- OCI8::BindType
3
+ #
4
+ # Copyright (C) 2009-2011 KUBO Takehiro <kubo@jiubao.org>
5
+ #++
6
+
7
+ #
8
+ class OCI8
9
+ module BindType
10
+ Mapping = {}
11
+
12
+ class Base
13
+ def self.create(con, val, param, max_array_size)
14
+ self.new(con, val, param, max_array_size)
15
+ end
16
+ end
17
+
18
+ # get/set Date
19
+ class Date < OCI8::BindType::OraDate
20
+ def set(val)
21
+ super(val && ::OraDate.new(val.year, val.mon, val.mday))
22
+ end
23
+ def get()
24
+ (val = super()) && val.to_date
25
+ end
26
+ end
27
+
28
+ class BigDecimal < OCI8::BindType::OraNumber
29
+ @@bigdecimal_is_required = false
30
+ def get()
31
+ unless @@bigdecimal_is_required
32
+ require 'bigdecimal'
33
+ @@bigdecimal_is_required = true
34
+ end
35
+ (val = super()) && val.to_d
36
+ end
37
+ end
38
+
39
+ class Rational < OCI8::BindType::OraNumber
40
+ @@rational_is_required = false
41
+ def get()
42
+ unless @@rational_is_required
43
+ require 'rational'
44
+ @@rational_is_required = true
45
+ end
46
+ (val = super()) && val.to_r
47
+ end
48
+ end
49
+
50
+ class BasicNumberType < OCI8::BindType::OraNumber
51
+ def get()
52
+ (val = super()) && (val.has_decimal_part? ? val.to_f : val.to_i)
53
+ end
54
+ end
55
+
56
+ # get/set Number (for OCI8::SQLT_NUM)
57
+ class Number
58
+ def self.create(con, val, param, max_array_size)
59
+ if param.is_a? OCI8::Metadata::Base
60
+ precision = param.precision
61
+ scale = param.scale
62
+ end
63
+ if scale == -127
64
+ if precision == 0
65
+ # NUMBER declared without its scale and precision. (Oracle 9.2.0.3 or above)
66
+ klass = OCI8::BindType::Mapping[:number_no_prec_setting]
67
+ else
68
+ # FLOAT or FLOAT(p)
69
+ klass = OCI8::BindType::Float
70
+ end
71
+ elsif scale == 0
72
+ if precision == 0
73
+ # NUMBER whose scale and precision is unknown
74
+ # or
75
+ # NUMBER declared without its scale and precision. (Oracle 9.2.0.2 or below)
76
+ klass = OCI8::BindType::Mapping[:number_unknown_prec]
77
+ else
78
+ # NUMBER(p, 0)
79
+ klass = OCI8::BindType::Integer
80
+ end
81
+ else
82
+ # NUMBER(p, s)
83
+ if precision < 15 # the precision of double.
84
+ klass = OCI8::BindType::Float
85
+ else
86
+ # use BigDecimal instead
87
+ klass = OCI8::BindType::BigDecimal
88
+ end
89
+ end
90
+ klass.new(con, val, nil, max_array_size)
91
+ end
92
+ end
93
+
94
+ class String
95
+ # 1333 <= ceil(4000 / 3). 4000 is max size of char. 3 is NLS ratio of UTF-8.
96
+ @@minimum_bind_length = 1333
97
+
98
+ def self.minimum_bind_length
99
+ @@minimum_bind_length
100
+ end
101
+
102
+ def self.minimum_bind_length=(val)
103
+ @@minimum_bind_length = val
104
+ end
105
+
106
+ def self.create(con, val, param, max_array_size)
107
+ case param
108
+ when Hash
109
+ param[:length_semantics] = OCI8::properties[:length_semantics] unless param.has_key? :length_semantics
110
+ unless param[:length]
111
+ if val.respond_to? :to_str
112
+ val = val.to_str
113
+ if param[:length_semantics] == :char
114
+ # character semantics
115
+ param[:length] = val.size
116
+ else
117
+ # byte semantics
118
+ if OCI8.respond_to? :encoding and OCI8.encoding != val.encoding
119
+ # If the string encoding is different with NLS_LANG character set,
120
+ # convert it to get the length.
121
+ val = val.encode(OCI8.encoding)
122
+ end
123
+ if val.respond_to? :bytesize
124
+ # ruby 1.8.7 or upper
125
+ param[:length] = val.bytesize
126
+ else
127
+ # ruby 1.8.6 or lower
128
+ param[:length] = val.size
129
+ end
130
+ end
131
+ else
132
+ param[:length] = @@minimum_bind_length
133
+ end
134
+ end
135
+ # use the default value when :nchar is not set explicitly.
136
+ param[:nchar] = OCI8.properties[:bind_string_as_nchar] unless param.has_key?(:nchar)
137
+ when OCI8::Metadata::Base
138
+ case param.data_type
139
+ when :char, :varchar2
140
+ length_semantics = OCI8.properties[:length_semantics]
141
+ if length_semantics == :char
142
+ length = param.char_size
143
+ else
144
+ length = param.data_size * OCI8.nls_ratio
145
+ end
146
+ param = {
147
+ :length => length,
148
+ :length_semantics => length_semantics,
149
+ :nchar => (param.charset_form == :nchar),
150
+ }
151
+ when :raw
152
+ # HEX needs twice space.
153
+ param = {:length => param.data_size * 2}
154
+ else
155
+ param = {:length => @@minimum_bind_length}
156
+ end
157
+ end
158
+ self.new(con, val, param, max_array_size)
159
+ end
160
+ end
161
+
162
+ class RAW
163
+ def self.create(con, val, param, max_array_size)
164
+ case param
165
+ when Hash
166
+ unless param[:length]
167
+ if val.respond_to? :to_str
168
+ val = val.to_str
169
+ if val.respond_to? :bytesize
170
+ param[:length] = val.bytesize
171
+ else
172
+ param[:length] = val.size
173
+ end
174
+ else
175
+ param[:length] = 400
176
+ end
177
+ end
178
+ when OCI8::Metadata::Base
179
+ param = {:length => param.data_size}
180
+ end
181
+ self.new(con, val, param, max_array_size)
182
+ end
183
+ end
184
+
185
+ class Long < OCI8::BindType::String
186
+ def self.create(con, val, param, max_array_size)
187
+ param = {:length => con.long_read_len, :char_semantics => true}
188
+ super(con, val, param, max_array_size)
189
+ end
190
+ end
191
+
192
+ class LongRaw < OCI8::BindType::RAW
193
+ def self.create(con, val, param, max_array_size)
194
+ param = {:length => con.long_read_len, :char_semantics => false}
195
+ self.new(con, val, param, max_array_size)
196
+ end
197
+ end
198
+
199
+ class CLOB
200
+ def self.create(con, val, param, max_array_size)
201
+ if param.is_a? OCI8::Metadata::Base and param.charset_form == :nchar
202
+ OCI8::BindType::NCLOB.new(con, val, nil, max_array_size)
203
+ else
204
+ OCI8::BindType::CLOB.new(con, val, nil, max_array_size)
205
+ end
206
+ end
207
+ end
208
+ end # BindType
209
+ end
210
+
211
+ # bind or explicitly define
212
+ OCI8::BindType::Mapping[String] = OCI8::BindType::String
213
+ OCI8::BindType::Mapping[OraNumber] = OCI8::BindType::OraNumber
214
+ OCI8::BindType::Mapping['BigDecimal'] = OCI8::BindType::BigDecimal
215
+ OCI8::BindType::Mapping['Rational'] = OCI8::BindType::Rational
216
+ OCI8::BindType::Mapping[Fixnum] = OCI8::BindType::Integer
217
+ OCI8::BindType::Mapping[Float] = OCI8::BindType::Float
218
+ OCI8::BindType::Mapping[Integer] = OCI8::BindType::Integer
219
+ OCI8::BindType::Mapping[Bignum] = OCI8::BindType::Integer
220
+ OCI8::BindType::Mapping[OraDate] = OCI8::BindType::OraDate
221
+ OCI8::BindType::Mapping[Time] = OCI8::BindType::Time
222
+ OCI8::BindType::Mapping[Date] = OCI8::BindType::Date
223
+ OCI8::BindType::Mapping[DateTime] = OCI8::BindType::DateTime
224
+ OCI8::BindType::Mapping[OCI8::CLOB] = OCI8::BindType::CLOB
225
+ OCI8::BindType::Mapping[OCI8::NCLOB] = OCI8::BindType::NCLOB
226
+ OCI8::BindType::Mapping[OCI8::BLOB] = OCI8::BindType::BLOB
227
+ OCI8::BindType::Mapping[OCI8::BFILE] = OCI8::BindType::BFILE
228
+ OCI8::BindType::Mapping[OCI8::Cursor] = OCI8::BindType::Cursor
229
+
230
+ # implicitly define
231
+
232
+ # datatype type size prec scale
233
+ # -------------------------------------------------
234
+ # CHAR(1) SQLT_AFC 1 0 0
235
+ # CHAR(10) SQLT_AFC 10 0 0
236
+ OCI8::BindType::Mapping[:char] = OCI8::BindType::String
237
+
238
+ # datatype type size prec scale
239
+ # -------------------------------------------------
240
+ # VARCHAR(1) SQLT_CHR 1 0 0
241
+ # VARCHAR(10) SQLT_CHR 10 0 0
242
+ # VARCHAR2(1) SQLT_CHR 1 0 0
243
+ # VARCHAR2(10) SQLT_CHR 10 0 0
244
+ OCI8::BindType::Mapping[:varchar2] = OCI8::BindType::String
245
+
246
+ # datatype type size prec scale
247
+ # -------------------------------------------------
248
+ # RAW(1) SQLT_BIN 1 0 0
249
+ # RAW(10) SQLT_BIN 10 0 0
250
+ OCI8::BindType::Mapping[:raw] = OCI8::BindType::RAW
251
+
252
+ # datatype type size prec scale
253
+ # -------------------------------------------------
254
+ # LONG SQLT_LNG 0 0 0
255
+ OCI8::BindType::Mapping[:long] = OCI8::BindType::Long
256
+
257
+ # datatype type size prec scale
258
+ # -------------------------------------------------
259
+ # LONG RAW SQLT_LBI 0 0 0
260
+ OCI8::BindType::Mapping[:long_raw] = OCI8::BindType::LongRaw
261
+
262
+ # datatype type size prec scale
263
+ # -------------------------------------------------
264
+ # CLOB SQLT_CLOB 4000 0 0
265
+ OCI8::BindType::Mapping[:clob] = OCI8::BindType::CLOB
266
+ OCI8::BindType::Mapping[:nclob] = OCI8::BindType::NCLOB
267
+
268
+ # datatype type size prec scale
269
+ # -------------------------------------------------
270
+ # BLOB SQLT_BLOB 4000 0 0
271
+ OCI8::BindType::Mapping[:blob] = OCI8::BindType::BLOB
272
+
273
+ # datatype type size prec scale
274
+ # -------------------------------------------------
275
+ # BFILE SQLT_BFILE 4000 0 0
276
+ OCI8::BindType::Mapping[:bfile] = OCI8::BindType::BFILE
277
+
278
+ # datatype type size prec scale
279
+ # -------------------------------------------------
280
+ # DATE SQLT_DAT 7 0 0
281
+ OCI8::BindType::Mapping[:date] = OCI8::BindType::Time
282
+
283
+ OCI8::BindType::Mapping[:timestamp] = OCI8::BindType::Time
284
+ OCI8::BindType::Mapping[:timestamp_tz] = OCI8::BindType::Time
285
+ OCI8::BindType::Mapping[:timestamp_ltz] = OCI8::BindType::Time
286
+ OCI8::BindType::Mapping[:interval_ym] = OCI8::BindType::IntervalYM
287
+ OCI8::BindType::Mapping[:interval_ds] = OCI8::BindType::IntervalDS
288
+
289
+ # datatype type size prec scale
290
+ # -------------------------------------------------
291
+ # ROWID SQLT_RDD 4 0 0
292
+ OCI8::BindType::Mapping[:rowid] = OCI8::BindType::String
293
+
294
+ # datatype type size prec scale
295
+ # -----------------------------------------------------
296
+ # FLOAT SQLT_NUM 22 126 -127
297
+ # FLOAT(1) SQLT_NUM 22 1 -127
298
+ # FLOAT(126) SQLT_NUM 22 126 -127
299
+ # DOUBLE PRECISION SQLT_NUM 22 126 -127
300
+ # REAL SQLT_NUM 22 63 -127
301
+ # NUMBER SQLT_NUM 22 0 0
302
+ # NUMBER(1) SQLT_NUM 22 1 0
303
+ # NUMBER(38) SQLT_NUM 22 38 0
304
+ # NUMBER(1, 0) SQLT_NUM 22 1 0
305
+ # NUMBER(38, 0) SQLT_NUM 22 38 0
306
+ # NUMERIC SQLT_NUM 22 38 0
307
+ # INT SQLT_NUM 22 38 0
308
+ # INTEGER SQLT_NUM 22 38 0
309
+ # SMALLINT SQLT_NUM 22 38 0
310
+ OCI8::BindType::Mapping[:number] = OCI8::BindType::Number
311
+
312
+ # mapping for calculated number values.
313
+ #
314
+ # for example:
315
+ # select col1 * 1.1 from tab1;
316
+ #
317
+ # For Oracle 9.2.0.2 or below, this is also used for NUMBER
318
+ # datatypes that have no explicit setting of their precision
319
+ # and scale.
320
+ #
321
+ # The default mapping is Float for ruby-oci8 1.0, OraNumber for 2.0.0 ~ 2.0.2,
322
+ # BigDecimal for 2.0.3 ~.
323
+ OCI8::BindType::Mapping[:number_unknown_prec] = OCI8::BindType::BigDecimal
324
+
325
+ # mapping for number without precision and scale.
326
+ #
327
+ # for example:
328
+ # create table tab1 (col1 number);
329
+ # select col1 from tab1;
330
+ #
331
+ # note: This is available only on Oracle 9.2.0.3 or above.
332
+ # see: Oracle 9.2.0.x Patch Set Notes.
333
+ #
334
+ # The default mapping is Float for ruby-oci8 1.0, OraNumber for 2.0.0 ~ 2.0.2,
335
+ # BigDecimal for 2.0.3 ~.
336
+ OCI8::BindType::Mapping[:number_no_prec_setting] = OCI8::BindType::BigDecimal
337
+
338
+ if defined? OCI8::BindType::BinaryDouble
339
+ OCI8::BindType::Mapping[:binary_float] = OCI8::BindType::BinaryDouble
340
+ OCI8::BindType::Mapping[:binary_double] = OCI8::BindType::BinaryDouble
341
+ else
342
+ OCI8::BindType::Mapping[:binary_float] = OCI8::BindType::Float
343
+ OCI8::BindType::Mapping[:binary_double] = OCI8::BindType::Float
344
+ end
345
+
346
+ # Cursor
347
+ OCI8::BindType::Mapping[:cursor] = OCI8::BindType::Cursor
348
+
349
+ # XMLType (This mapping will be changed before release.)
350
+ OCI8::BindType::Mapping[:xmltype] = OCI8::BindType::Long