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.
@@ -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
@@ -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: []