simpleOracleJDBC 0.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.
- data/README.md +65 -0
- data/Rakefile.rb +30 -0
- data/lib/simple_oracle_jdbc.rb +19 -0
- data/lib/simple_oracle_jdbc/bindings.rb +214 -0
- data/lib/simple_oracle_jdbc/db_call.rb +105 -0
- data/lib/simple_oracle_jdbc/interface.rb +120 -0
- data/lib/simple_oracle_jdbc/result_set.rb +155 -0
- data/lib/simple_oracle_jdbc/sql.rb +95 -0
- data/test/binding_test.rb +224 -0
- data/test/db_call_test.rb +91 -0
- data/test/helper.rb +20 -0
- data/test/interface_test.rb +76 -0
- data/test/result_set_test.rb +128 -0
- data/test/sql_test.rb +73 -0
- data/test/test_runner.rb +14 -0
- metadata +61 -0
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class DBCallTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
include TestHelper
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@interface = @@interface
|
9
|
+
end
|
10
|
+
|
11
|
+
def teardown
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_class_method_prepare_returns_correct_object
|
15
|
+
call_obj = SimpleOracleJDBC::DBCall.prepare(@interface.connection, 'begin :out := :in; end;')
|
16
|
+
assert(call_obj.is_a? SimpleOracleJDBC::DBCall)
|
17
|
+
call_obj.close
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_class_method_execute_returns_correct_object
|
21
|
+
call_obj = SimpleOracleJDBC::DBCall.execute(@interface.connection,
|
22
|
+
'begin :out := :in; end;',
|
23
|
+
[String, nil, :out], 'ABC')
|
24
|
+
assert(call_obj.is_a? SimpleOracleJDBC::DBCall)
|
25
|
+
assert_equal(call_obj[1], 'ABC')
|
26
|
+
call_obj.close
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_class_method_execute_works_with_jdbc_type_calls
|
30
|
+
call_obj = SimpleOracleJDBC::DBCall.execute(@interface.connection,
|
31
|
+
'{ call ? := ? }',
|
32
|
+
[String, nil, :out], 'ABC')
|
33
|
+
assert(call_obj.is_a? SimpleOracleJDBC::DBCall)
|
34
|
+
assert_equal(call_obj[1], 'ABC')
|
35
|
+
call_obj.close
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_prepared_call_can_be_executed_and_returns_self
|
39
|
+
call_obj = SimpleOracleJDBC::DBCall.prepare(@interface.connection, 'begin :out := :in; end;')
|
40
|
+
results = nil
|
41
|
+
assert_nothing_raised do
|
42
|
+
results = call_obj.execute([String, nil, :out], 'ABC')
|
43
|
+
end
|
44
|
+
assert_equal(results, call_obj)
|
45
|
+
call_obj.close
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_accessing_bind_out_of_range_raises_exception
|
49
|
+
call_obj = SimpleOracleJDBC::DBCall.execute(@interface.connection,
|
50
|
+
'{ call ? := ? }',
|
51
|
+
[String, nil, :out], 'ABC')
|
52
|
+
assert_raises SimpleOracleJDBC::BindIndexOutOfRange do
|
53
|
+
call_obj[0]
|
54
|
+
end
|
55
|
+
call_obj.close
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_in_binds_can_be_retrieved
|
59
|
+
call_obj = SimpleOracleJDBC::DBCall.execute(@interface.connection,
|
60
|
+
"begin :out := :in||'DEF'; end;",
|
61
|
+
[String, nil, :out], 'ABC')
|
62
|
+
assert_equal(call_obj[2], 'ABC')
|
63
|
+
call_obj.close
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_out_bind_can_be_retrieved
|
67
|
+
call_obj = SimpleOracleJDBC::DBCall.execute(@interface.connection,
|
68
|
+
"begin :out := :in||'DEF'; end;",
|
69
|
+
[String, nil, :out], 'ABC')
|
70
|
+
assert_equal(call_obj[1], 'ABCDEF')
|
71
|
+
call_obj.close
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_close_method_closes_statment
|
75
|
+
call_obj = SimpleOracleJDBC::DBCall.execute(@interface.connection,
|
76
|
+
"begin :out := :in||'DEF'; end;",
|
77
|
+
[String, nil, :out], 'ABC')
|
78
|
+
assert_not_nil(call_obj.call)
|
79
|
+
call_obj.close
|
80
|
+
assert_nil(call_obj.call)
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_raw_jdbc_call_object_can_be_retrieved
|
84
|
+
call_obj = SimpleOracleJDBC::DBCall.execute(@interface.connection,
|
85
|
+
"begin :out := :in||'DEF'; end;",
|
86
|
+
[String, nil, :out], 'ABC')
|
87
|
+
assert_not_nil(call_obj.call)
|
88
|
+
end
|
89
|
+
|
90
|
+
|
91
|
+
end
|
data/test/helper.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
$:.unshift File.expand_path(File.join(File.dirname(__FILE__), "..", "lib"))
|
2
|
+
$:.unshift File.expand_path(File.dirname(__FILE__))
|
3
|
+
|
4
|
+
require 'simple_oracle_jdbc'
|
5
|
+
require 'test/unit'
|
6
|
+
|
7
|
+
module TestHelper
|
8
|
+
|
9
|
+
DB_USER = 'sodonnel'
|
10
|
+
DB_PASSWORD = 'sodonnel'
|
11
|
+
DB_SERVICE = 'local11gr2.world'
|
12
|
+
DB_HOST = 'localhost'
|
13
|
+
DB_PORT = '1521'
|
14
|
+
|
15
|
+
@@interface ||= SimpleOracleJDBC::Interface.create(DB_USER,
|
16
|
+
DB_PASSWORD,
|
17
|
+
DB_SERVICE,
|
18
|
+
DB_HOST,
|
19
|
+
DB_PORT)
|
20
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class InterfaceTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
include TestHelper
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@interface = SimpleOracleJDBC::Interface.create(DB_USER,
|
9
|
+
DB_PASSWORD,
|
10
|
+
DB_SERVICE,
|
11
|
+
DB_HOST,
|
12
|
+
DB_PORT)
|
13
|
+
end
|
14
|
+
|
15
|
+
def teardown
|
16
|
+
@interface.disconnect
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_interface_can_be_created_with_connection_details
|
20
|
+
# the interface is created in setup
|
21
|
+
assert_not_nil(@interface)
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_raw_database_connection_accessible
|
25
|
+
connection = @interface.connection
|
26
|
+
# should return a JDBC connection object - test to see if it responds
|
27
|
+
# to a JDBC method
|
28
|
+
assert(connection.respond_to? :prepare_statement)
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_disconnect_method_closes_db_connection
|
32
|
+
@interface.disconnect
|
33
|
+
assert_nil(@interface.connection)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_commit_method_available
|
37
|
+
assert_nothing_raised do
|
38
|
+
@interface.commit
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_rollback_method_available
|
43
|
+
assert_nothing_raised do
|
44
|
+
@interface.rollback
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_prepare_sql_query_returns_sql_object
|
49
|
+
sql = @interface.prepare_sql("select * from dual")
|
50
|
+
assert(sql.is_a? SimpleOracleJDBC::Sql)
|
51
|
+
sql.close
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_execute_sql_query_returns_sql_object
|
55
|
+
sql = @interface.execute_sql("select * from dual")
|
56
|
+
assert(sql.is_a? SimpleOracleJDBC::Sql)
|
57
|
+
sql.close
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_prepare_call_returns_db_call_object
|
61
|
+
call = @interface.prepare_proc("begin
|
62
|
+
:l_date := :i_date;
|
63
|
+
end;")
|
64
|
+
assert(call.is_a? SimpleOracleJDBC::DBCall)
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_execute_call_returns_an_executed_db_call_object
|
68
|
+
call = @interface.execute_proc("begin
|
69
|
+
:l_date := :i_date;
|
70
|
+
end;", [Time, nil, :out], Time.now)
|
71
|
+
assert(call.is_a? SimpleOracleJDBC::DBCall)
|
72
|
+
end
|
73
|
+
|
74
|
+
|
75
|
+
end
|
76
|
+
|
@@ -0,0 +1,128 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class ResultSetTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
include TestHelper
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@@interface ||= SimpleOracleJDBC::Interface.create('sodonnel',
|
9
|
+
'sodonnel',
|
10
|
+
'local11gr2.world',
|
11
|
+
'localhost',
|
12
|
+
'1521'
|
13
|
+
)
|
14
|
+
@interface = @@interface
|
15
|
+
|
16
|
+
|
17
|
+
@sql = SimpleOracleJDBC::Sql.execute(@interface.connection,
|
18
|
+
"select 'a' a_val,
|
19
|
+
1 b_val
|
20
|
+
from dual
|
21
|
+
union all
|
22
|
+
select 'aa' a_val,
|
23
|
+
2 b_val
|
24
|
+
from dual")
|
25
|
+
end
|
26
|
+
|
27
|
+
def teardown
|
28
|
+
@sql.close
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
def test_each_array_returns_array_per_row
|
33
|
+
rows = 0
|
34
|
+
@sql.each_array do |r|
|
35
|
+
assert(r.is_a? Array)
|
36
|
+
rows += 1
|
37
|
+
end
|
38
|
+
assert_equal(2, rows)
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_next_array_returns_a_row_per_call
|
42
|
+
row = @sql.next_array
|
43
|
+
assert_equal(row[0], 'a')
|
44
|
+
assert_equal(row[1], 1)
|
45
|
+
row = @sql.next_array
|
46
|
+
assert_equal(row[0], 'aa')
|
47
|
+
assert_equal(row[1], 2)
|
48
|
+
row = @sql.next_array
|
49
|
+
assert_nil(row)
|
50
|
+
# After getting a nil row, it indicates the end of the result set
|
51
|
+
# another fetch will raise an exception as the result set will have
|
52
|
+
# been closed
|
53
|
+
assert_raises SimpleOracleJDBC::NoResultSet do
|
54
|
+
row = @sql.next_array
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_all_array_returns_all_rows_as_array_or_arrays
|
59
|
+
rows = @sql.all_array
|
60
|
+
assert_equal(rows.length, 2)
|
61
|
+
assert_equal(rows[0][0], 'a')
|
62
|
+
assert_equal(rows[0][1], 1)
|
63
|
+
assert_equal(rows[1][0], 'aa')
|
64
|
+
assert_equal(rows[1][1], 2)
|
65
|
+
# A second call to all_array will error
|
66
|
+
assert_raises SimpleOracleJDBC::NoResultSet do
|
67
|
+
row = @sql.all_array
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_each_hash_returns_hash_per_row
|
72
|
+
rows = 0
|
73
|
+
@sql.each_hash do |r|
|
74
|
+
assert(r.is_a? Hash)
|
75
|
+
assert(r.has_key? 'A_VAL')
|
76
|
+
assert(r.has_key? 'B_VAL')
|
77
|
+
rows += 1
|
78
|
+
end
|
79
|
+
assert_equal(2, rows)
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_next_hash_returns_a_hash_per_call
|
83
|
+
row = @sql.next_hash
|
84
|
+
assert_equal(row['A_VAL'], 'a')
|
85
|
+
assert_equal(row['B_VAL'], 1)
|
86
|
+
row = @sql.next_hash
|
87
|
+
assert_equal(row['A_VAL'], 'aa')
|
88
|
+
assert_equal(row['B_VAL'], 2)
|
89
|
+
row = @sql.next_hash
|
90
|
+
assert_nil(row)
|
91
|
+
# After getting a nil row, it indicates the end of the result set
|
92
|
+
# another fetch will raise an exception as the result set will have
|
93
|
+
# been closed
|
94
|
+
assert_raises SimpleOracleJDBC::NoResultSet do
|
95
|
+
row = @sql.next_hash
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def test_all_hash_returns_all_rows_as_array_of_hashes
|
100
|
+
rows = @sql.all_hash
|
101
|
+
assert_equal(rows.length, 2)
|
102
|
+
assert_equal(rows[0]['A_VAL'], 'a')
|
103
|
+
assert_equal(rows[0]['B_VAL'], 1)
|
104
|
+
assert_equal(rows[1]['A_VAL'], 'aa')
|
105
|
+
assert_equal(rows[1]['B_VAL'], 2)
|
106
|
+
# A second call to all_hash will error
|
107
|
+
assert_raises SimpleOracleJDBC::NoResultSet do
|
108
|
+
row = @sql.all_hash
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def test_close_result_set
|
113
|
+
assert_nothing_raised do
|
114
|
+
@sql.close_result_set
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
def test_all_retrieves_fail_when_no_or_closed_result_set
|
119
|
+
calls = [:all_array, :each_array, :next_array, :all_hash, :each_hash, :next_hash]
|
120
|
+
@sql.close_result_set
|
121
|
+
calls.each do |c|
|
122
|
+
assert_raises SimpleOracleJDBC::NoResultSet do
|
123
|
+
@sql.send(c)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
end
|
data/test/sql_test.rb
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class SqlTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
include TestHelper
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@interface = @@interface
|
9
|
+
@sql = SimpleOracleJDBC::Sql.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def teardown
|
13
|
+
@sql.close
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_class_method_prepare_returns_correct_object
|
17
|
+
sql_obj = SimpleOracleJDBC::Sql.prepare(@interface.connection, 'select * from dual')
|
18
|
+
assert(sql_obj.is_a? SimpleOracleJDBC::Sql)
|
19
|
+
results = sql_obj.execute.all_array
|
20
|
+
assert_equal(results.length, 1)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_class_method_execute_returns_correct_object
|
24
|
+
sql_obj = SimpleOracleJDBC::Sql.execute(@interface.connection, 'select * from dual')
|
25
|
+
assert(sql_obj.is_a? SimpleOracleJDBC::Sql)
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_class_method_execute_allows_binds_to_be_set
|
29
|
+
sql_obj = SimpleOracleJDBC::Sql.execute(@interface.connection,
|
30
|
+
'select * from dual where 1 = ? and 2 = ?',
|
31
|
+
1, 2)
|
32
|
+
results = sql_obj.all_array
|
33
|
+
assert_equal(results.length, 1)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_prepare_method_available_and_returns_self
|
37
|
+
sql_obj = SimpleOracleJDBC::Sql.new
|
38
|
+
prepared = sql_obj.prepare(@interface.connection, 'select * from dual')
|
39
|
+
assert_equal(prepared, sql_obj)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_execute_method_avaliable_and_returns_self
|
43
|
+
sql_obj = SimpleOracleJDBC::Sql.prepare(@interface.connection, 'select * from dual')
|
44
|
+
executed = sql_obj.execute
|
45
|
+
assert_equal(executed, sql_obj)
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_execute_method_accepts_binds_correctly_and_returns_self
|
49
|
+
sql_obj = SimpleOracleJDBC::Sql.prepare(@interface.connection,
|
50
|
+
"select * from dual where 1 = ? and 'a' = ? and 1.234 = ?")
|
51
|
+
#"
|
52
|
+
executed = sql_obj.execute(1, 'a', 1.234)
|
53
|
+
assert_equal(executed, sql_obj)
|
54
|
+
results = sql_obj.all_array
|
55
|
+
assert_equal(results.length, 1)
|
56
|
+
assert_equal(results[0][0], 'X')
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_close_does_not_error_when_no_statement
|
60
|
+
sql_obj = SimpleOracleJDBC::Sql.new
|
61
|
+
assert_nothing_raised do
|
62
|
+
sql_obj.close
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_close_does_not_error_when_statement_exists
|
67
|
+
sql_obj = SimpleOracleJDBC::Sql.prepare(@interface.connection, 'select * from dual')
|
68
|
+
assert_nothing_raised do
|
69
|
+
sql_obj.close
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
data/test/test_runner.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
$:.unshift File.expand_path(File.join(File.dirname(__FILE__), "..", "lib"))
|
2
|
+
|
3
|
+
current_dir = File.expand_path(File.dirname(__FILE__))
|
4
|
+
|
5
|
+
require "simple_oracle_jdbc"
|
6
|
+
require 'test/unit'
|
7
|
+
|
8
|
+
|
9
|
+
|
10
|
+
# Find all files that end in _test.rb and require them ...
|
11
|
+
files = Dir.entries(current_dir).grep(/^[^#].+_test\.rb$/).sort
|
12
|
+
files.each do |f|
|
13
|
+
require File.join(current_dir, f)
|
14
|
+
end
|
metadata
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: simpleOracleJDBC
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.1'
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Stephen O'Donnell
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-02-05 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: A lightweight wrapper around the JDBC interface to make it easier to
|
15
|
+
make SQL and stored procedure calls.
|
16
|
+
email: stephen@betteratoracle.com
|
17
|
+
executables: []
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files:
|
20
|
+
- README.md
|
21
|
+
files:
|
22
|
+
- test/binding_test.rb
|
23
|
+
- test/db_call_test.rb
|
24
|
+
- test/helper.rb
|
25
|
+
- test/interface_test.rb
|
26
|
+
- test/result_set_test.rb
|
27
|
+
- test/sql_test.rb
|
28
|
+
- test/test_runner.rb
|
29
|
+
- lib/simple_oracle_jdbc/bindings.rb
|
30
|
+
- lib/simple_oracle_jdbc/db_call.rb
|
31
|
+
- lib/simple_oracle_jdbc/interface.rb
|
32
|
+
- lib/simple_oracle_jdbc/result_set.rb
|
33
|
+
- lib/simple_oracle_jdbc/sql.rb
|
34
|
+
- lib/simple_oracle_jdbc.rb
|
35
|
+
- Rakefile.rb
|
36
|
+
- README.md
|
37
|
+
homepage: http://betteratoracle.com
|
38
|
+
licenses: []
|
39
|
+
post_install_message:
|
40
|
+
rdoc_options: []
|
41
|
+
require_paths:
|
42
|
+
- lib
|
43
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
44
|
+
none: false
|
45
|
+
requirements:
|
46
|
+
- - ! '>='
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
requirements: []
|
56
|
+
rubyforge_project:
|
57
|
+
rubygems_version: 1.8.24
|
58
|
+
signing_key:
|
59
|
+
specification_version: 3
|
60
|
+
summary: A gem to simplify JDBC database access to Oracle when using JRuby
|
61
|
+
test_files: []
|