ruby-plsql 0.5.3 → 0.6.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.
@@ -68,14 +68,17 @@ module PLSQL
68
68
  class Cursor #:nodoc:
69
69
  include Connection::CursorCommon
70
70
 
71
- # stack of open cursors
72
- @@open_cursors = []
73
71
  attr_reader :raw_cursor
74
72
 
73
+ # stack of open cursors per thread
74
+ def self.open_cursors
75
+ Thread.current[:plsql_oci_cursor_stack] ||= []
76
+ end
77
+
75
78
  def initialize(conn, raw_cursor)
76
79
  @connection = conn
77
80
  @raw_cursor = raw_cursor
78
- @@open_cursors.push self
81
+ self.class.open_cursors.push self
79
82
  end
80
83
 
81
84
  def self.new_from_parse(conn, sql)
@@ -125,7 +128,7 @@ module PLSQL
125
128
 
126
129
  def close
127
130
  # close all cursors that were created after this one
128
- while (open_cursor = @@open_cursors.pop) && !open_cursor.equal?(self)
131
+ while (open_cursor = self.class.open_cursors.pop) && !open_cursor.equal?(self)
129
132
  open_cursor.close_raw_cursor
130
133
  end
131
134
  close_raw_cursor
@@ -144,19 +147,19 @@ module PLSQL
144
147
  def plsql_to_ruby_data_type(metadata)
145
148
  data_type, data_length = metadata[:data_type], metadata[:data_length]
146
149
  case data_type
147
- when "VARCHAR2", "CHAR", "NVARCHAR2", "NCHAR"
150
+ when "VARCHAR", "VARCHAR2", "CHAR", "NVARCHAR2", "NCHAR"
148
151
  [String, data_length || 32767]
149
152
  when "CLOB", "NCLOB"
150
153
  [OCI8::CLOB, nil]
151
154
  when "BLOB"
152
155
  [OCI8::BLOB, nil]
153
- when "NUMBER", "PLS_INTEGER", "BINARY_INTEGER"
156
+ when "NUMBER", "NATURAL", "NATURALN", "POSITIVE", "POSITIVEN", "SIGNTYPE", "SIMPLE_INTEGER", "PLS_INTEGER", "BINARY_INTEGER"
154
157
  [OraNumber, nil]
155
158
  when "DATE"
156
159
  [DateTime, nil]
157
160
  when "TIMESTAMP", "TIMESTAMP WITH TIME ZONE", "TIMESTAMP WITH LOCAL TIME ZONE"
158
161
  [Time, nil]
159
- when "TABLE", "VARRAY", "OBJECT"
162
+ when "TABLE", "VARRAY", "OBJECT", "XMLTYPE"
160
163
  # create Ruby class for collection
161
164
  klass = OCI8::Object::Base.get_class_by_typename(metadata[:sql_type_name])
162
165
  unless klass
@@ -336,4 +339,4 @@ module PLSQL
336
339
 
337
340
  end
338
341
 
339
- end
342
+ end
@@ -2,28 +2,34 @@ module PLSQL
2
2
 
3
3
  module PackageClassMethods #:nodoc:
4
4
  def find(schema, package)
5
- if schema.select_first(
6
- "SELECT object_name FROM all_objects
7
- WHERE owner = :owner
8
- AND object_name = :package
9
- AND object_type = 'PACKAGE'",
10
- schema.schema_name, package.to_s.upcase)
11
- new(schema, package)
12
- # search for synonym
13
- elsif (row = schema.select_first(
14
- "SELECT o.owner, o.object_name
15
- FROM all_synonyms s, all_objects o
16
- WHERE s.owner IN (:owner, 'PUBLIC')
17
- AND s.synonym_name = :synonym_name
18
- AND o.owner = s.table_owner
19
- AND o.object_name = s.table_name
20
- AND o.object_type = 'PACKAGE'
21
- ORDER BY DECODE(s.owner, 'PUBLIC', 1, 0)",
22
- schema.schema_name, package.to_s.upcase))
23
- new(schema, row[1], row[0])
24
- else
25
- nil
26
- end
5
+ package_name = package.to_s.upcase
6
+ find_in_schema(schema, package_name) || find_by_synonym(schema, package_name)
7
+ end
8
+
9
+ def find_in_schema(schema, package_name)
10
+ row = schema.select_first(<<-SQL, schema.schema_name, package_name)
11
+ SELECT object_name
12
+ FROM all_objects
13
+ WHERE owner = :owner
14
+ AND object_name = :package
15
+ AND object_type = 'PACKAGE'
16
+ SQL
17
+ new(schema, package_name) if row
18
+ end
19
+
20
+ def find_by_synonym(schema, package_name)
21
+ row = schema.select_first(<<-SQL, schema.schema_name, package_name)
22
+ SELECT o.object_name, o.owner
23
+ FROM all_synonyms s,
24
+ all_objects o
25
+ WHERE s.owner IN (:owner, 'PUBLIC')
26
+ AND s.synonym_name = :synonym_name
27
+ AND o.owner = s.table_owner
28
+ AND o.object_name = s.table_name
29
+ AND o.object_type = 'PACKAGE'
30
+ ORDER BY DECODE(s.owner, 'PUBLIC', 1, 0)
31
+ SQL
32
+ new(schema, row[0], row[1]) if row
27
33
  end
28
34
  end
29
35
 
@@ -41,29 +47,41 @@ module PLSQL
41
47
  PLSQL::Procedure.find(@schema, name, @package) ? true : false
42
48
  end
43
49
 
50
+ def [](object_name)
51
+ object_name = object_name.to_s.downcase
52
+ @package_objects[object_name] ||= [Procedure, Variable].inject(nil) do |res, object_type|
53
+ res || object_type.find(@schema, object_name, @package, @override_schema_name)
54
+ end
55
+ end
56
+
44
57
  private
45
-
58
+
46
59
  def method_missing(method, *args, &block)
47
- if assignment = (method.to_s[-1,1] == '=')
48
- method = method.to_s.chop.to_sym
49
- end
50
- object = (@package_objects[method] ||=
51
- Procedure.find(@schema, method, @package, @override_schema_name) ||
52
- Variable.find(@schema, method, @package, @override_schema_name))
53
- case object
54
- when Procedure
55
- raise ArgumentError, "Cannot assign value to package procedure '#{method.to_s.upcase}'" if assignment
56
- object.exec(*args, &block)
57
- when Variable
58
- if assignment
59
- raise ArgumentError, "Just one value can be assigned to package variable '#{method.to_s.upcase}'" unless args.size == 1 && block == nil
60
- object.value = args[0]
60
+ method = method.to_s
61
+ method.chop! if (assignment = method[/=$/])
62
+
63
+ case (object = self[method])
64
+ when Procedure
65
+ if assignment
66
+ raise ArgumentError, "Cannot assign value to package procedure '#{method.upcase}'"
67
+ end
68
+ object.exec(*args, &block)
69
+ when Variable
70
+ if assignment
71
+ unless args.size == 1 && block.nil?
72
+ raise ArgumentError, "Just one value can be assigned " \
73
+ "to package variable '#{method.upcase}'"
74
+ end
75
+ object.value = args[0]
76
+ else
77
+ unless args.size == 0 && block.nil?
78
+ raise ArgumentError, "Cannot pass arguments when getting " \
79
+ "package variable '#{method.upcase}' value"
80
+ end
81
+ object.value
82
+ end
61
83
  else
62
- raise ArgumentError, "Cannot pass arguments when getting package variable '#{method.to_s.upcase}' value" unless args.size == 0 && block == nil
63
- object.value
64
- end
65
- else
66
- raise ArgumentError, "No PL/SQL procedure or variable '#{method.to_s.upcase}' found"
84
+ raise ArgumentError, "No PL/SQL procedure or variable '#{method.upcase}' found"
67
85
  end
68
86
  end
69
87
 
@@ -64,7 +64,7 @@ module PLSQL
64
64
  when 'NUMBER'
65
65
  precision, scale = metadata[:data_precision], metadata[:data_scale]
66
66
  "NUMBER#{precision ? "(#{precision}#{scale ? ",#{scale}": ""})" : ""}"
67
- when 'VARCHAR2', 'CHAR'
67
+ when 'VARCHAR', 'VARCHAR2', 'CHAR'
68
68
  length = case metadata[:char_used]
69
69
  when 'C' then "#{metadata[:char_length]} CHAR"
70
70
  when 'B' then "#{metadata[:data_length]} BYTE"
@@ -75,7 +75,7 @@ module PLSQL
75
75
  when 'NVARCHAR2', 'NCHAR'
76
76
  length = metadata[:char_length]
77
77
  "#{metadata[:data_type]}#{length && "(#{length})"}"
78
- when 'PL/SQL TABLE', 'TABLE', 'VARRAY', 'OBJECT'
78
+ when 'PL/SQL TABLE', 'TABLE', 'VARRAY', 'OBJECT', 'XMLTYPE'
79
79
  metadata[:sql_type_name]
80
80
  else
81
81
  metadata[:data_type]
@@ -100,11 +100,13 @@ module PLSQL
100
100
 
101
101
  # subprogram_id column is available just from version 10g
102
102
  subprogram_id_column = (@schema.connection.database_version <=> [10, 2, 0, 2]) >= 0 ? 'subprogram_id' : 'NULL'
103
+ # defaulted is available just from version 11g
104
+ defaulted_column = (@schema.connection.database_version <=> [11, 0, 0, 0]) >= 0 ? 'defaulted' : 'NULL'
103
105
 
104
106
  @schema.select_all(
105
107
  "SELECT #{subprogram_id_column}, object_name, TO_NUMBER(overload), argument_name, position, data_level,
106
108
  data_type, in_out, data_length, data_precision, data_scale, char_used,
107
- char_length, type_owner, type_name, type_subname
109
+ char_length, type_owner, type_name, type_subname, #{defaulted_column}
108
110
  FROM all_arguments
109
111
  WHERE object_id = :object_id
110
112
  AND owner = :owner
@@ -115,7 +117,7 @@ module PLSQL
115
117
 
116
118
  subprogram_id, object_name, overload, argument_name, position, data_level,
117
119
  data_type, in_out, data_length, data_precision, data_scale, char_used,
118
- char_length, type_owner, type_name, type_subname = r
120
+ char_length, type_owner, type_name, type_subname, defaulted = r
119
121
 
120
122
  @overloaded ||= !overload.nil?
121
123
  # if not overloaded then store arguments at key 0
@@ -155,7 +157,8 @@ module PLSQL
155
157
  :type_owner => type_owner,
156
158
  :type_name => type_name,
157
159
  :type_subname => type_subname,
158
- :sql_type_name => sql_type_name
160
+ :sql_type_name => sql_type_name,
161
+ :defaulted => defaulted
159
162
  }
160
163
  if tmp_table_name
161
164
  @tmp_table_names[overload] << [(argument_metadata[:tmp_table_name] = tmp_table_name), argument_metadata]
@@ -109,9 +109,9 @@ module PLSQL
109
109
  end
110
110
 
111
111
  MATCHING_TYPES = {
112
- :integer => ['NUMBER', 'PLS_INTEGER', 'BINARY_INTEGER'],
112
+ :integer => ['NUMBER', 'NATURAL', 'NATURALN', 'POSITIVE', 'POSITIVEN', 'SIGNTYPE', 'SIMPLE_INTEGER', 'PLS_INTEGER', 'BINARY_INTEGER'],
113
113
  :decimal => ['NUMBER', 'BINARY_FLOAT', 'BINARY_DOUBLE'],
114
- :string => ['VARCHAR2', 'NVARCHAR2', 'CHAR', 'NCHAR', 'CLOB', 'BLOB'],
114
+ :string => ['VARCHAR', 'VARCHAR2', 'NVARCHAR2', 'CHAR', 'NCHAR', 'CLOB', 'BLOB', 'XMLTYPE'],
115
115
  :date => ['DATE'],
116
116
  :time => ['DATE', 'TIMESTAMP', 'TIMESTAMP WITH TIME ZONE', 'TIMESTAMP WITH LOCAL TIME ZONE'],
117
117
  :boolean => ['PL/SQL BOOLEAN'],
@@ -236,6 +236,14 @@ module PLSQL
236
236
  @bind_values[argument] = value.nil? ? nil : (value ? 1 : 0)
237
237
  @bind_metadata[argument] = argument_metadata.merge(:data_type => "NUMBER", :data_precision => 1)
238
238
  "l_#{argument}"
239
+ when 'UNDEFINED'
240
+ if argument_metadata[:type_name] == 'XMLTYPE'
241
+ @declare_sql << "l_#{argument} XMLTYPE;\n"
242
+ @assignment_sql << "l_#{argument} := XMLTYPE(:#{argument});\n" if not value.nil?
243
+ @bind_values[argument] = value if not value.nil?
244
+ @bind_metadata[argument] = argument_metadata.merge(:data_type => "CLOB")
245
+ "l_#{argument}"
246
+ end
239
247
  else
240
248
  # TABLE or PL/SQL TABLE type defined inside package
241
249
  if argument_metadata[:tmp_table_name]
@@ -337,9 +345,16 @@ module PLSQL
337
345
  metadata = argument_metadata[:fields][field]
338
346
  raise ArgumentError, "Wrong field name #{key.inspect} passed to PL/SQL record argument #{argument.inspect}" unless metadata
339
347
  bind_variable = :"#{argument}_f#{metadata[:position]}"
340
- sql << "l_#{argument}.#{field} := :#{bind_variable};\n"
341
- bind_values[bind_variable] = value
342
- bind_metadata[bind_variable] = metadata
348
+ case metadata[:data_type]
349
+ when 'PL/SQL BOOLEAN'
350
+ sql << "l_#{argument}.#{field} := (:#{bind_variable} = 1);\n"
351
+ bind_values[bind_variable] = value.nil? ? nil : (value ? 1 : 0)
352
+ bind_metadata[bind_variable] = metadata.merge(:data_type => "NUMBER", :data_precision => 1)
353
+ else
354
+ sql << "l_#{argument}.#{field} := :#{bind_variable};\n"
355
+ bind_values[bind_variable] = value
356
+ bind_metadata[bind_variable] = metadata
357
+ end
343
358
  end
344
359
  [sql, bind_values, bind_metadata]
345
360
  end
@@ -362,11 +377,29 @@ module PLSQL
362
377
  # should use different output bind variable as JDBC does not support
363
378
  # if output bind variable appears in several places
364
379
  bind_variable = :"#{argument}_o#{metadata[:position]}"
365
- @return_vars << bind_variable
366
- @return_vars_metadata[bind_variable] = metadata
367
- @return_sql << ":#{bind_variable} := l_#{argument}.#{field};\n"
380
+ case metadata[:data_type]
381
+ when 'PL/SQL BOOLEAN'
382
+ @return_vars << bind_variable
383
+ @return_vars_metadata[bind_variable] = metadata.merge(:data_type => "NUMBER", :data_precision => 1)
384
+ arg_field = "l_#{argument}.#{field}"
385
+ @return_sql << ":#{bind_variable} := " << "CASE WHEN #{arg_field} = true THEN 1 " <<
386
+ "WHEN #{arg_field} = false THEN 0 ELSE NULL END;\n"
387
+ else
388
+ @return_vars << bind_variable
389
+ @return_vars_metadata[bind_variable] = metadata
390
+ @return_sql << ":#{bind_variable} := l_#{argument}.#{field};\n"
391
+ end
368
392
  end
369
393
  "l_#{argument} := " if is_return_value
394
+ when 'UNDEFINED'
395
+ if argument_metadata[:type_name] == 'XMLTYPE'
396
+ @declare_sql << "l_#{argument} XMLTYPE;\n" if is_return_value
397
+ bind_variable = :"o_#{argument}"
398
+ @return_vars << bind_variable
399
+ @return_vars_metadata[bind_variable] = argument_metadata.merge(:data_type => "CLOB")
400
+ @return_sql << ":#{bind_variable} := CASE WHEN l_#{argument} IS NOT NULL THEN l_#{argument}.getclobval() END;\n"
401
+ "l_#{argument} := " if is_return_value
402
+ end
370
403
  when 'PL/SQL BOOLEAN'
371
404
  @declare_sql << "l_#{argument} BOOLEAN;\n" if is_return_value
372
405
  @declare_sql << "o_#{argument} NUMBER(1);\n"
@@ -468,12 +501,22 @@ module PLSQL
468
501
  when 'PL/SQL RECORD'
469
502
  return_value = {}
470
503
  argument_metadata[:fields].each do |field, metadata|
471
- return_value[field] = @cursor[":#{argument}_o#{metadata[:position]}"]
504
+ field_value = @cursor[":#{argument}_o#{metadata[:position]}"]
505
+ case metadata[:data_type]
506
+ when 'PL/SQL BOOLEAN'
507
+ return_value[field] = field_value.nil? ? nil : field_value == 1
508
+ else
509
+ return_value[field] = field_value
510
+ end
472
511
  end
473
512
  return_value
474
513
  when 'PL/SQL BOOLEAN'
475
514
  numeric_value = @cursor[":o_#{argument}"]
476
515
  numeric_value.nil? ? nil : numeric_value == 1
516
+ when 'UNDEFINED'
517
+ if argument_metadata[:type_name] == 'XMLTYPE'
518
+ @cursor[":o_#{argument}"]
519
+ end
477
520
  else
478
521
  if argument_metadata[:tmp_table_name]
479
522
  is_index_by_table = argument_metadata[:data_type] == 'PL/SQL TABLE'
@@ -90,7 +90,7 @@ module PLSQL
90
90
  # Current Oracle schema name
91
91
  def schema_name
92
92
  return nil unless connection
93
- @schema_name ||= select_first("SELECT SYS_CONTEXT('userenv','session_user') FROM dual")[0]
93
+ @schema_name ||= select_first("SELECT SYS_CONTEXT('userenv','current_schema') FROM dual")[0]
94
94
  end
95
95
 
96
96
  # Default timezone to which database values will be converted - :utc or :local
@@ -47,11 +47,12 @@ module PLSQL
47
47
 
48
48
  def metadata(type_string)
49
49
  case type_string
50
- when /^(VARCHAR2|CHAR|NVARCHAR2|NCHAR)(\((\d+)[\s\w]*\))?$/
50
+ when /^(VARCHAR|VARCHAR2|CHAR|NVARCHAR2|NCHAR)(\((\d+)[\s\w]*\))?$/
51
51
  {:data_type => $1, :data_length => $3.to_i, :in_out => 'IN/OUT'}
52
52
  when /^(CLOB|NCLOB|BLOB)$/,
53
- /^(NUMBER)(\(.*\))?$/, /^(PLS_INTEGER|BINARY_INTEGER)$/,
54
- /^(DATE|TIMESTAMP|TIMESTAMP WITH TIME ZONE|TIMESTAMP WITH LOCAL TIME ZONE)$/
53
+ /^(NUMBER)(\(.*\))?$/, /^(NATURAL|NATURALN|POSITIVE|POSITIVEN|SIGNTYPE|SIMPLE_INTEGER|PLS_INTEGER|BINARY_INTEGER)$/,
54
+ /^(DATE|TIMESTAMP|TIMESTAMP WITH TIME ZONE|TIMESTAMP WITH LOCAL TIME ZONE)$/,
55
+ /^(XMLTYPE)$/
55
56
  {:data_type => $1, :in_out => 'IN/OUT'}
56
57
  when /^INTEGER$/
57
58
  {:data_type => 'NUMBER', :in_out => 'IN/OUT'}
@@ -143,4 +144,4 @@ module PLSQL
143
144
 
144
145
  end
145
146
 
146
- end
147
+ end
@@ -2,22 +2,29 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: ruby-plsql 0.5.3 ruby lib
5
+ # stub: ruby-plsql 0.6.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "ruby-plsql"
9
- s.version = "0.5.3"
9
+ s.version = "0.6.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Raimonds Simanovskis"]
14
- s.date = "2015-05-07"
14
+ s.date = "2016-03-13"
15
15
  s.description = "ruby-plsql gem provides simple Ruby API for calling Oracle PL/SQL procedures.\nIt could be used both for accessing Oracle PL/SQL API procedures in legacy applications\nas well as it could be used to create PL/SQL unit tests using Ruby testing libraries.\n"
16
16
  s.email = "raimonds.simanovskis@gmail.com"
17
17
  s.extra_rdoc_files = [
18
18
  "README.md"
19
19
  ]
20
20
  s.files = [
21
+ ".travis.yml",
22
+ ".travis/oracle/LICENSE",
23
+ ".travis/oracle/README.md",
24
+ ".travis/oracle/download.js",
25
+ ".travis/oracle/download.sh",
26
+ ".travis/oracle/install.sh",
27
+ ".travis/setup_accounts.sh",
21
28
  "Gemfile",
22
29
  "History.txt",
23
30
  "License.txt",
@@ -57,11 +64,14 @@ Gem::Specification.new do |s|
57
64
  "spec/plsql/view_spec.rb",
58
65
  "spec/spec.opts",
59
66
  "spec/spec_helper.rb",
67
+ "spec/support/create_arunit_user.sql",
68
+ "spec/support/custom_config.rb.sample",
60
69
  "spec/support/file_check_script.sh",
61
- "spec/support/test_db.rb"
70
+ "spec/support/test_db.rb",
71
+ "spec/support/unlock_and_setup_hr_user.sql"
62
72
  ]
63
73
  s.homepage = "http://github.com/rsim/ruby-plsql"
64
- s.rubygems_version = "2.4.6"
74
+ s.rubygems_version = "2.5.1"
65
75
  s.summary = "Ruby API for calling Oracle PL/SQL procedures."
66
76
 
67
77
  if s.respond_to? :specification_version then
@@ -70,25 +80,28 @@ Gem::Specification.new do |s|
70
80
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
71
81
  s.add_development_dependency(%q<jeweler>, ["~> 2.0.1"])
72
82
  s.add_development_dependency(%q<rspec>, ["~> 3.1"])
83
+ s.add_development_dependency(%q<rspec_junit_formatter>, [">= 0"])
73
84
  s.add_development_dependency(%q<activerecord>, ["< 4.3.0", ">= 3.2.3"])
74
- s.add_development_dependency(%q<activerecord-oracle_enhanced-adapter>, ["< 1.6.0", ">= 1.4.1"])
85
+ s.add_development_dependency(%q<activerecord-oracle_enhanced-adapter>, ["< 1.7.0", ">= 1.4.1"])
75
86
  s.add_development_dependency(%q<simplecov>, [">= 0"])
76
- s.add_development_dependency(%q<ruby-oci8>, ["~> 2.1.2"])
87
+ s.add_development_dependency(%q<ruby-oci8>, ["~> 2.1"])
77
88
  else
78
89
  s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
79
90
  s.add_dependency(%q<rspec>, ["~> 3.1"])
91
+ s.add_dependency(%q<rspec_junit_formatter>, [">= 0"])
80
92
  s.add_dependency(%q<activerecord>, ["< 4.3.0", ">= 3.2.3"])
81
- s.add_dependency(%q<activerecord-oracle_enhanced-adapter>, ["< 1.6.0", ">= 1.4.1"])
93
+ s.add_dependency(%q<activerecord-oracle_enhanced-adapter>, ["< 1.7.0", ">= 1.4.1"])
82
94
  s.add_dependency(%q<simplecov>, [">= 0"])
83
- s.add_dependency(%q<ruby-oci8>, ["~> 2.1.2"])
95
+ s.add_dependency(%q<ruby-oci8>, ["~> 2.1"])
84
96
  end
85
97
  else
86
98
  s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
87
99
  s.add_dependency(%q<rspec>, ["~> 3.1"])
100
+ s.add_dependency(%q<rspec_junit_formatter>, [">= 0"])
88
101
  s.add_dependency(%q<activerecord>, ["< 4.3.0", ">= 3.2.3"])
89
- s.add_dependency(%q<activerecord-oracle_enhanced-adapter>, ["< 1.6.0", ">= 1.4.1"])
102
+ s.add_dependency(%q<activerecord-oracle_enhanced-adapter>, ["< 1.7.0", ">= 1.4.1"])
90
103
  s.add_dependency(%q<simplecov>, [">= 0"])
91
- s.add_dependency(%q<ruby-oci8>, ["~> 2.1.2"])
104
+ s.add_dependency(%q<ruby-oci8>, ["~> 2.1"])
92
105
  end
93
106
  end
94
107
 
@@ -7,7 +7,6 @@ describe "Connection" do
7
7
  before(:all) do
8
8
  @raw_conn = get_connection
9
9
  @conn = PLSQL::Connection.create( @raw_conn )
10
- @conn.set_time_zone
11
10
  end
12
11
 
13
12
  after(:all) do
@@ -25,7 +24,6 @@ describe "Connection" do
25
24
 
26
25
  before(:each) do
27
26
  @conn1 = PLSQL::Connection.create( @raw_conn1 )
28
- @conn1.set_time_zone
29
27
  end
30
28
 
31
29
  it "should create connection" do
@@ -53,6 +51,11 @@ describe "Connection" do
53
51
  # Ruby 1.8 and 1.9
54
52
  unless defined?(JRuby)
55
53
  describe "OCI data type conversions" do
54
+ it "should translate PL/SQL VARCHAR to Ruby String" do
55
+ expect(@conn.plsql_to_ruby_data_type(:data_type => "VARCHAR", :data_length => 100)).to eq [String, 100]
56
+ expect(@conn.plsql_to_ruby_data_type(:data_type => "VARCHAR", :data_length => nil)).to eq [String, 32767]
57
+ end
58
+
56
59
  it "should translate PL/SQL VARCHAR2 to Ruby String" do
57
60
  expect(@conn.plsql_to_ruby_data_type(:data_type => "VARCHAR2", :data_length => 100)).to eq [String, 100]
58
61
  expect(@conn.plsql_to_ruby_data_type(:data_type => "VARCHAR2", :data_length => nil)).to eq [String, 32767]
@@ -124,6 +127,10 @@ describe "Connection" do
124
127
  else
125
128
 
126
129
  describe "JDBC data type conversions" do
130
+ it "should translate PL/SQL VARCHAR to Ruby String" do
131
+ expect(@conn.plsql_to_ruby_data_type(:data_type => "VARCHAR", :data_length => 100)).to eq [String, 100]
132
+ expect(@conn.plsql_to_ruby_data_type(:data_type => "VARCHAR", :data_length => nil)).to eq [String, 32767]
133
+ end
127
134
  it "should translate PL/SQL VARCHAR2 to Ruby String" do
128
135
  expect(@conn.plsql_to_ruby_data_type(:data_type => "VARCHAR2", :data_length => 100)).to eq [String, 100]
129
136
  expect(@conn.plsql_to_ruby_data_type(:data_type => "VARCHAR2", :data_length => nil)).to eq [String, 32767]
@@ -468,7 +475,6 @@ describe "Connection" do
468
475
  def reconnect_connection
469
476
  @raw_conn = get_connection
470
477
  @conn = PLSQL::Connection.create( @raw_conn )
471
- @conn.set_time_zone
472
478
  end
473
479
 
474
480
  it "should drop current session ruby temporary tables" do