ruby-plsql 0.2.0 → 0.2.1

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.
@@ -1,3 +1,12 @@
1
+ == 0.2.1 2008-07-22
2
+
3
+ * Improvements
4
+ * Implemented plsql.commit and plsql.rollback methods which call corresponding Connection methods.
5
+ In addition plsql.connection.autocommit= and plsql.connection.autocommit? methods are added.
6
+ * Bug fixes
7
+ * Fixed loading of ojdbc14.jar from PATH directory
8
+ * Workaround for slow SELECT from all_arguments in Oracle 10gR2
9
+
1
10
  == 0.2.0 2008-06-26
2
11
 
3
12
  * New features
data/README.txt CHANGED
@@ -4,7 +4,9 @@
4
4
 
5
5
  == DESCRIPTION:
6
6
 
7
- ruby-plsql gem provides simple Ruby API for calling Oracle PL/SQL procedures. Currently ruby-plsql requires ruby-oci8 for connection to Oracle database, it is planned to add JRuby/JDBC support in the future.
7
+ ruby-plsql gem provides simple Ruby API for calling Oracle PL/SQL procedures.
8
+ ruby-plsql support both MRI and JRuby runtime environments.
9
+ This gem requires ruby-oci8 library (if MRI is used) or Oracle JDBC driver (ojdbc14.jar) (if JRuby is used) for connection to Oracle database.
8
10
 
9
11
  See http://blog.rayapps.com for more information.
10
12
 
@@ -34,7 +36,10 @@ plsql.logoff
34
36
 
35
37
  == REQUIREMENTS:
36
38
 
39
+ MRI
37
40
  * Requires ruby-oci8 library to connect to Oracle
41
+ JRuby
42
+ * Requires Oracle JDBC driver (ojdbc14.jar should be somewhere in PATH) to connect to Oracle
38
43
 
39
44
  == INSTALL:
40
45
 
@@ -30,6 +30,22 @@ module PLSQL
30
30
  raise NoMethodError, "Not implemented for this raw driver"
31
31
  end
32
32
 
33
+ def commit
34
+ raise NoMethodError, "Not implemented for this raw driver"
35
+ end
36
+
37
+ def rollback
38
+ raise NoMethodError, "Not implemented for this raw driver"
39
+ end
40
+
41
+ def autocommit?
42
+ raise NoMethodError, "Not implemented for this raw driver"
43
+ end
44
+
45
+ def autocommit=(value)
46
+ raise NoMethodError, "Not implemented for this raw driver"
47
+ end
48
+
33
49
  def select_first(sql, *bindvars)
34
50
  raise NoMethodError, "Not implemented for this raw driver"
35
51
  end
@@ -53,7 +69,23 @@ module PLSQL
53
69
  def logoff
54
70
  raw_connection.logoff
55
71
  end
72
+
73
+ def commit
74
+ raw_connection.commit
75
+ end
76
+
77
+ def rollback
78
+ raw_connection.rollback
79
+ end
56
80
 
81
+ def autocommit?
82
+ raw_connection.autocommit?
83
+ end
84
+
85
+ def autocommit=(value)
86
+ raw_connection.autocommit = value
87
+ end
88
+
57
89
  def select_first(sql, *bindvars)
58
90
  cursor = raw_connection.exec(sql, *bindvars)
59
91
  result = cursor.fetch
@@ -185,6 +217,22 @@ module PLSQL
185
217
  false
186
218
  end
187
219
 
220
+ def commit
221
+ raw_connection.commit
222
+ end
223
+
224
+ def rollback
225
+ raw_connection.rollback
226
+ end
227
+
228
+ def autocommit?
229
+ raw_connection.getAutoCommit
230
+ end
231
+
232
+ def autocommit=(value)
233
+ raw_connection.setAutoCommit(value)
234
+ end
235
+
188
236
  def select_first(sql, *bindvars)
189
237
  stmt = prepare_statement(sql, *bindvars)
190
238
  rset = stmt.executeQuery
@@ -34,16 +34,22 @@ module PLSQL
34
34
  @out_list = {}
35
35
  @return = {}
36
36
  @overloaded = false
37
- num_rows = @schema.connection.select_all("
38
- SELECT a.argument_name, a.position, a.data_type, a.in_out, a.data_length, a.data_precision, a.data_scale, a.overload
39
- FROM all_arguments a, all_objects o
37
+ # RSI: due to 10gR2 all_arguments performance issue SELECT spllit into two statements
38
+ object_id = @schema.connection.select_first("
39
+ SELECT o.object_id
40
+ FROM all_objects o
40
41
  WHERE o.owner = :owner
41
42
  AND o.object_name = :object_name
42
- AND a.owner = o.owner
43
- AND a.object_id = o.object_id
43
+ ", @schema.schema_name, @package ? @package : @procedure
44
+ )[0] rescue nil
45
+ num_rows = @schema.connection.select_all("
46
+ SELECT a.argument_name, a.position, a.data_type, a.in_out, a.data_length, a.data_precision, a.data_scale, a.overload
47
+ FROM all_arguments a
48
+ WHERE a.object_id = :object_id
49
+ AND a.owner = :owner
44
50
  AND a.object_name = :procedure_name
45
51
  AND NVL(a.package_name,'nil') = :package
46
- ", @schema.schema_name, @package ? @package : @procedure, @procedure, @package ? @package : 'nil'
52
+ ", object_id, @schema.schema_name, @procedure, @package ? @package : 'nil'
47
53
  ) do |r|
48
54
 
49
55
  argument_name, position, data_type, in_out, data_length, data_precision, data_scale, overload = r
@@ -15,6 +15,10 @@ unless defined?(JRUBY_VERSION)
15
15
  else
16
16
  begin
17
17
  require "java"
18
+ require "jruby"
19
+ # Adds JRuby classloader to current thread classloader - as a result ojdbc14.jar should not be in $JRUBY_HOME/lib
20
+ java.lang.Thread.currentThread.setContextClassLoader(JRuby.runtime.jruby_class_loader)
21
+
18
22
  ojdbc_jar = "ojdbc14.jar"
19
23
  if ojdbc_jar_path = ENV["PATH"].split(":").find{|d| File.exists?(File.join(d,ojdbc_jar))}
20
24
  require File.join(ojdbc_jar_path,ojdbc_jar)
@@ -2,7 +2,7 @@ module RubyPlsql #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 2
5
- TINY = 0
5
+ TINY = 1
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
File without changes
File without changes
File without changes
@@ -68,4 +68,22 @@ describe "Named Schema" do
68
68
  lambda { plsql.hr.hr }.should raise_error(ArgumentError)
69
69
  end
70
70
 
71
+ end
72
+
73
+ describe "Schema commit and rollback" do
74
+ before(:all) do
75
+ plsql.connection = @conn = get_connection
76
+ end
77
+
78
+ after(:all) do
79
+ plsql.connection.logoff
80
+ end
81
+
82
+ it "should do commit" do
83
+ plsql.commit
84
+ end
85
+
86
+ it "should do rollback" do
87
+ plsql.rollback
88
+ end
71
89
  end
@@ -33,7 +33,7 @@
33
33
  <h1>Ruby API for PL/SQL</h1>
34
34
  <div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/ruby-plsql"; return false'>
35
35
  <p>Get Version</p>
36
- <a href="http://rubyforge.org/projects/ruby-plsql" class="numbers">0.2.0</a>
36
+ <a href="http://rubyforge.org/projects/ruby-plsql" class="numbers">0.2.1</a>
37
37
  </div>
38
38
  <h1>&#x2192; &#8216;ruby-plsql&#8217;</h1>
39
39
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-plsql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Raimonds Simanovskis
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-06-26 00:00:00 +03:00
12
+ date: 2008-07-22 00:00:00 +03:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -83,7 +83,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
83
83
  requirements: []
84
84
 
85
85
  rubyforge_project: ruby-plsql
86
- rubygems_version: 1.0.1
86
+ rubygems_version: 1.2.0
87
87
  signing_key:
88
88
  specification_version: 2
89
89
  summary: ruby-plsql gem provides simple Ruby API for calling Oracle PL/SQL procedures.