ruby-oci8 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +569 -0
- data/Makefile +51 -0
- data/NEWS +322 -0
- data/README +415 -0
- data/VERSION +1 -0
- data/dist-files +70 -0
- data/doc/api.en.html +527 -0
- data/doc/api.en.rd +554 -0
- data/doc/api.ja.html +525 -0
- data/doc/api.ja.rd +557 -0
- data/doc/manual.css +35 -0
- data/ext/oci8/MANIFEST +22 -0
- data/ext/oci8/attr.c +415 -0
- data/ext/oci8/bind.c +194 -0
- data/ext/oci8/const.c +165 -0
- data/ext/oci8/define.c +53 -0
- data/ext/oci8/describe.c +81 -0
- data/ext/oci8/descriptor.c +39 -0
- data/ext/oci8/env.c +276 -0
- data/ext/oci8/error.c +234 -0
- data/ext/oci8/extconf.rb +118 -0
- data/ext/oci8/handle.c +262 -0
- data/ext/oci8/lob.c +386 -0
- data/ext/oci8/oci8.c +137 -0
- data/ext/oci8/oci8.h +345 -0
- data/ext/oci8/ocinumber.c +117 -0
- data/ext/oci8/oraconf.rb +1026 -0
- data/ext/oci8/oradate.c +426 -0
- data/ext/oci8/oranumber.c +445 -0
- data/ext/oci8/param.c +37 -0
- data/ext/oci8/post-config.rb +5 -0
- data/ext/oci8/server.c +182 -0
- data/ext/oci8/session.c +99 -0
- data/ext/oci8/stmt.c +624 -0
- data/ext/oci8/svcctx.c +229 -0
- data/lib/DBD/OCI8/OCI8.rb +549 -0
- data/lib/oci8.rb.in +1605 -0
- data/metaconfig +142 -0
- data/pre-distclean.rb +7 -0
- data/ruby-oci8.gemspec +54 -0
- data/ruby-oci8.spec +62 -0
- data/setup.rb +1331 -0
- data/support/README +4 -0
- data/support/runit/assert.rb +281 -0
- data/support/runit/cui/testrunner.rb +101 -0
- data/support/runit/error.rb +4 -0
- data/support/runit/method_mappable.rb +20 -0
- data/support/runit/robserver.rb +25 -0
- data/support/runit/setuppable.rb +15 -0
- data/support/runit/teardownable.rb +16 -0
- data/support/runit/testcase.rb +113 -0
- data/support/runit/testfailure.rb +25 -0
- data/support/runit/testresult.rb +121 -0
- data/support/runit/testsuite.rb +43 -0
- data/support/runit/version.rb +3 -0
- data/test/README +4 -0
- data/test/config.rb +129 -0
- data/test/test_all.rb +43 -0
- data/test/test_bind_raw.rb +53 -0
- data/test/test_bind_time.rb +191 -0
- data/test/test_break.rb +81 -0
- data/test/test_clob.rb +101 -0
- data/test/test_connstr.rb +80 -0
- data/test/test_dbi.rb +317 -0
- data/test/test_dbi_clob.rb +56 -0
- data/test/test_describe.rb +137 -0
- data/test/test_metadata.rb +243 -0
- data/test/test_oci8.rb +273 -0
- data/test/test_oradate.rb +263 -0
- data/test/test_oranumber.rb +149 -0
- metadata +118 -0
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'runit/method_mappable'
|
2
|
+
module RUNIT
|
3
|
+
module Teardownable
|
4
|
+
include MethodMappable
|
5
|
+
@@teardowns = {}
|
6
|
+
def attach_teardown(teardown_method, *methods)
|
7
|
+
attach_method(@@teardowns, teardown_method, *methods)
|
8
|
+
end
|
9
|
+
private :attach_teardown
|
10
|
+
def invoke_teardown(m)
|
11
|
+
invoke_method(@@teardowns, m)
|
12
|
+
end
|
13
|
+
private :invoke_teardown
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
@@ -0,0 +1,113 @@
|
|
1
|
+
require 'observer'
|
2
|
+
require 'runit/testsuite'
|
3
|
+
require 'runit/robserver'
|
4
|
+
require 'runit/error'
|
5
|
+
require 'runit/assert'
|
6
|
+
require 'runit/setuppable'
|
7
|
+
require 'runit/teardownable'
|
8
|
+
|
9
|
+
module RUNIT
|
10
|
+
class TestCase
|
11
|
+
alias_method :extend_test, :extend
|
12
|
+
|
13
|
+
include Assert
|
14
|
+
include Observable
|
15
|
+
|
16
|
+
include Setuppable
|
17
|
+
extend Setuppable
|
18
|
+
include Teardownable
|
19
|
+
extend Teardownable
|
20
|
+
|
21
|
+
@@test_classes = []
|
22
|
+
|
23
|
+
def initialize(method, name=self.class.name)
|
24
|
+
@method = method
|
25
|
+
@name = name
|
26
|
+
end
|
27
|
+
|
28
|
+
def setup
|
29
|
+
end
|
30
|
+
private :setup
|
31
|
+
|
32
|
+
def teardown
|
33
|
+
end
|
34
|
+
private :teardown
|
35
|
+
|
36
|
+
def name
|
37
|
+
@name + "#" + @method
|
38
|
+
end
|
39
|
+
|
40
|
+
def method_name
|
41
|
+
@method
|
42
|
+
end
|
43
|
+
|
44
|
+
def count_test_cases
|
45
|
+
1
|
46
|
+
end
|
47
|
+
|
48
|
+
def run(result)
|
49
|
+
result.start_test(self)
|
50
|
+
begin
|
51
|
+
run_bare
|
52
|
+
rescue AssertionFailedError
|
53
|
+
result.add_failure($@, $!, self.class)
|
54
|
+
rescue StandardError, ScriptError
|
55
|
+
result.add_error($@, $!, self.class)
|
56
|
+
end
|
57
|
+
result.end_test(self)
|
58
|
+
end
|
59
|
+
|
60
|
+
def run_bare
|
61
|
+
setup
|
62
|
+
invoke_setup(@method)
|
63
|
+
begin
|
64
|
+
send(@method)
|
65
|
+
ensure
|
66
|
+
begin
|
67
|
+
invoke_teardown(@method)
|
68
|
+
teardown
|
69
|
+
rescue
|
70
|
+
changed
|
71
|
+
notify_observers(RObserver::ADD_ERROR, $@, $!, self.class)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def ==(other)
|
77
|
+
other.class == self.class && other.method_name && self.method_name
|
78
|
+
end
|
79
|
+
|
80
|
+
def TestCase.suite
|
81
|
+
TestSuite.new(self_test_cases)
|
82
|
+
end
|
83
|
+
|
84
|
+
def TestCase.inherited(sub)
|
85
|
+
@@test_classes.push sub
|
86
|
+
end
|
87
|
+
|
88
|
+
def TestCase.self_test_cases
|
89
|
+
instance_methods(true).sort.collect {|m|
|
90
|
+
new(m, name) if /^test/ =~ m
|
91
|
+
}.compact
|
92
|
+
end
|
93
|
+
|
94
|
+
def TestCase.test_cases
|
95
|
+
if self == TestCase
|
96
|
+
TestSuite.new(*@@test_classes)
|
97
|
+
else
|
98
|
+
suite
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
|
103
|
+
class<<TestCase
|
104
|
+
alias test_methods test_cases
|
105
|
+
alias all_suite test_cases
|
106
|
+
private :self_test_cases
|
107
|
+
end
|
108
|
+
|
109
|
+
def TestCase.test_classes
|
110
|
+
@@test_classes
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module RUNIT
|
2
|
+
SKIP_FILES = $:.collect{|path| /#{path}\/runit\//}.push /\/rubyunit\.rb:/
|
3
|
+
|
4
|
+
class TestFailure
|
5
|
+
attr_reader :at, :err
|
6
|
+
def initialize(at, err, testclass)
|
7
|
+
skip_trace = at.reject{|i|
|
8
|
+
SKIP_FILES.find {|pat|
|
9
|
+
pat =~ i
|
10
|
+
}
|
11
|
+
}
|
12
|
+
@at = insert_class_name(skip_trace, testclass)
|
13
|
+
@err = err
|
14
|
+
end
|
15
|
+
def to_s
|
16
|
+
"#{@at[0]} #{@err}(#{@err.type})"
|
17
|
+
end
|
18
|
+
def insert_class_name(last_exception_backtrace, testclass)
|
19
|
+
tns = testclass.inspect.split("::")
|
20
|
+
last_exception_backtrace[0] += "(" + tns[tns.length-1] + ")"
|
21
|
+
last_exception_backtrace
|
22
|
+
end
|
23
|
+
private :insert_class_name
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,121 @@
|
|
1
|
+
require 'observer'
|
2
|
+
require 'runit/error'
|
3
|
+
require 'runit/robserver'
|
4
|
+
require 'runit/testfailure'
|
5
|
+
|
6
|
+
module RUNIT
|
7
|
+
class TestResultItem
|
8
|
+
attr_reader :name
|
9
|
+
attr_reader :failures
|
10
|
+
attr_reader :errors
|
11
|
+
attr_accessor :run_asserts
|
12
|
+
|
13
|
+
def initialize(name)
|
14
|
+
@failures = []
|
15
|
+
@errors = []
|
16
|
+
@name = name
|
17
|
+
@run_asserts = 0
|
18
|
+
end
|
19
|
+
|
20
|
+
def add_failure(failure)
|
21
|
+
@failures.push failure
|
22
|
+
end
|
23
|
+
|
24
|
+
def add_error(error)
|
25
|
+
@errors.push error
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class TestResult
|
30
|
+
include Observable
|
31
|
+
include RObserver
|
32
|
+
|
33
|
+
def initialize
|
34
|
+
@result = nil
|
35
|
+
@results = []
|
36
|
+
@test_start_time = nil
|
37
|
+
@test_end_time = nil
|
38
|
+
@start_assert_size = 0
|
39
|
+
end
|
40
|
+
|
41
|
+
def items
|
42
|
+
@results
|
43
|
+
end
|
44
|
+
|
45
|
+
def run_tests
|
46
|
+
@results.size
|
47
|
+
end
|
48
|
+
|
49
|
+
def add_failure(at, err, testclass)
|
50
|
+
fail = TestFailure.new(at, err, testclass)
|
51
|
+
@result.add_failure(fail)
|
52
|
+
changed
|
53
|
+
notify_observers(RObserver::ADD_FAILURE, at, err)
|
54
|
+
end
|
55
|
+
|
56
|
+
def add_error(at, err, testclass)
|
57
|
+
error = TestFailure.new(at, err, testclass)
|
58
|
+
@result.add_error(error)
|
59
|
+
changed
|
60
|
+
notify_observers(RObserver::ADD_ERROR, at, err)
|
61
|
+
end
|
62
|
+
|
63
|
+
def assert_size
|
64
|
+
size = 0
|
65
|
+
@results.each do |i|
|
66
|
+
size += i.run_asserts
|
67
|
+
end
|
68
|
+
size
|
69
|
+
end
|
70
|
+
alias run_asserts assert_size
|
71
|
+
|
72
|
+
def failure_size
|
73
|
+
failures.size
|
74
|
+
end
|
75
|
+
|
76
|
+
def error_size
|
77
|
+
errors.size
|
78
|
+
end
|
79
|
+
|
80
|
+
def failures
|
81
|
+
@results.collect{|r|
|
82
|
+
r.failures
|
83
|
+
}.flatten
|
84
|
+
end
|
85
|
+
|
86
|
+
def errors
|
87
|
+
@results.collect{|r|
|
88
|
+
r.errors
|
89
|
+
}.flatten
|
90
|
+
end
|
91
|
+
|
92
|
+
def succeed?
|
93
|
+
failure_size == 0 && error_size == 0
|
94
|
+
end
|
95
|
+
|
96
|
+
def running_time
|
97
|
+
if @test_end_time && @test_start_time
|
98
|
+
@test_end_time - @test_start_time
|
99
|
+
else
|
100
|
+
0
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def start_test(testcase)
|
105
|
+
testcase.add_observer(self)
|
106
|
+
@result = TestResultItem.new(testcase.name)
|
107
|
+
@results.push @result
|
108
|
+
@start_assert_size = Assert.run_asserts
|
109
|
+
@test_start_time = Time.now if !@test_start_time
|
110
|
+
changed
|
111
|
+
notify_observers(RObserver::START_TEST, testcase)
|
112
|
+
end
|
113
|
+
|
114
|
+
def end_test(testcase)
|
115
|
+
changed
|
116
|
+
notify_observers(RObserver::END_TEST, testcase)
|
117
|
+
@test_end_time = Time.now
|
118
|
+
@result.run_asserts = Assert.run_asserts - @start_assert_size
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module RUNIT
|
2
|
+
class TestSuite < Array
|
3
|
+
|
4
|
+
def initialize(*test_classes)
|
5
|
+
test_classes.each do |k|
|
6
|
+
if k.kind_of?(Array)
|
7
|
+
concat k
|
8
|
+
else
|
9
|
+
concat k.suite
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def run(result)
|
15
|
+
each do |t|
|
16
|
+
t.run(result)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def count_test_cases
|
21
|
+
sum = 0
|
22
|
+
each do |test|
|
23
|
+
sum += test.count_test_cases
|
24
|
+
end
|
25
|
+
sum
|
26
|
+
end
|
27
|
+
|
28
|
+
def add(test)
|
29
|
+
if test.kind_of?(Array)
|
30
|
+
concat test
|
31
|
+
else
|
32
|
+
push test
|
33
|
+
end
|
34
|
+
end
|
35
|
+
alias add_test add
|
36
|
+
|
37
|
+
def extend_test(*mod)
|
38
|
+
each do |t|
|
39
|
+
t.extend_test(*mod)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/test/README
ADDED
data/test/config.rb
ADDED
@@ -0,0 +1,129 @@
|
|
1
|
+
# $dbuser must have permission to run DBMS_LOCK.SLEEP
|
2
|
+
# connect as sys
|
3
|
+
# GRANT EXECUTE ON dbms_lock TO ruby;
|
4
|
+
$dbuser = "ruby"
|
5
|
+
$dbpass = "oci8"
|
6
|
+
$dbname = nil
|
7
|
+
|
8
|
+
# test_clob.rb
|
9
|
+
|
10
|
+
nls_lang = ENV['NLS_LANG']
|
11
|
+
nls_lang = nls_lang.split('.')[1] unless nls_lang.nil?
|
12
|
+
nls_lang = nls_lang.upcase unless nls_lang.nil?
|
13
|
+
case nls_lang
|
14
|
+
when 'JA16EUC'
|
15
|
+
$lobfile = File.dirname(__FILE__) + '/../doc/api.ja.rd' # EUC-JP file
|
16
|
+
else
|
17
|
+
$lobfile = File.dirname(__FILE__) + '/../doc/api.en.rd' # ASCII file
|
18
|
+
end
|
19
|
+
$lobreadnum = 256 # counts in charactors
|
20
|
+
|
21
|
+
# don't modify below.
|
22
|
+
|
23
|
+
# $oracle_server_version: database compatible level of the Oracle server.
|
24
|
+
# $oracle_client_version: Oracle client library version for which oci8 is compiled.
|
25
|
+
# $oracle_version: lower value of $oracle_server_version and $oracle_client_version.
|
26
|
+
conn = OCI8.new($dbuser, $dbpass, $dbname)
|
27
|
+
conn.exec('select value from database_compatible_level') do |row|
|
28
|
+
ver = row[0].split('.')
|
29
|
+
$oracle_server_version = (ver[0] + ver[1] + ver[2]).to_i
|
30
|
+
end
|
31
|
+
conn.logoff
|
32
|
+
$oracle_client_version = OCI8::CLIENT_VERSION.to_i
|
33
|
+
if $oracle_server_version < $oracle_client_version
|
34
|
+
$oracle_version = $oracle_server_version
|
35
|
+
else
|
36
|
+
$oracle_version = $oracle_client_version
|
37
|
+
end
|
38
|
+
|
39
|
+
if $oracle_version <= 805
|
40
|
+
$describe_need_object_mode = true
|
41
|
+
$test_clob = false
|
42
|
+
elsif $oracle_version < 810
|
43
|
+
$describe_need_object_mode = false
|
44
|
+
$test_clob = false
|
45
|
+
else
|
46
|
+
$describe_need_object_mode = false
|
47
|
+
$test_clob = true
|
48
|
+
end
|
49
|
+
|
50
|
+
def do_connect ()
|
51
|
+
begin
|
52
|
+
yield
|
53
|
+
rescue OCIError
|
54
|
+
raise if $!.code != 12516 && $!.code != 12520
|
55
|
+
# sleep a few seconds and try again if
|
56
|
+
# the error code is ORA-12516 or ORA-12520.
|
57
|
+
#
|
58
|
+
# ORA-12516 - TNS:listener could not find available handler with
|
59
|
+
# matching protocol stack
|
60
|
+
# ORA-12520 - TNS:listener could not find available handler for
|
61
|
+
# requested type of server
|
62
|
+
#
|
63
|
+
# Thanks to Christopher Jones.
|
64
|
+
#
|
65
|
+
# Ref: The Underground PHP and Oracle Manual (page 175 in vesion 1.4)
|
66
|
+
# http://www.oracle.com/technology/tech/php/pdf/underground-php-oracle-manual.pdf
|
67
|
+
#
|
68
|
+
sleep(5)
|
69
|
+
yield
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
$env_is_initialized = false
|
74
|
+
def setup_lowapi()
|
75
|
+
if ! $env_is_initialized
|
76
|
+
if $describe_need_object_mode
|
77
|
+
OCIEnv.initialise(OCI_OBJECT)
|
78
|
+
else
|
79
|
+
OCIEnv.initialise(OCI_DEFAULT)
|
80
|
+
end
|
81
|
+
$env_is_initialized = true
|
82
|
+
end
|
83
|
+
env = OCIEnv.init()
|
84
|
+
svc = do_connect { env.logon($dbuser, $dbpass, $dbname) }
|
85
|
+
stmt = env.alloc(OCIStmt)
|
86
|
+
return env, svc, stmt
|
87
|
+
end
|
88
|
+
|
89
|
+
def get_oci_connection()
|
90
|
+
do_connect { OCI8.new($dbuser, $dbpass, $dbname) }
|
91
|
+
end
|
92
|
+
|
93
|
+
def get_dbi_connection()
|
94
|
+
do_connect { DBI.connect("dbi:OCI8:#{$dbname}", $dbuser, $dbpass, 'AutoCommit' => false) }
|
95
|
+
end
|
96
|
+
|
97
|
+
module RUNIT
|
98
|
+
class TestCase
|
99
|
+
def drop_table(table_name)
|
100
|
+
if $oracle_server_version < 1000
|
101
|
+
# Oracle 8 - 9i
|
102
|
+
sql = "DROP TABLE #{table_name}"
|
103
|
+
else
|
104
|
+
# Oracle 10g -
|
105
|
+
sql = "DROP TABLE #{table_name} PURGE"
|
106
|
+
end
|
107
|
+
|
108
|
+
if defined? @conn
|
109
|
+
begin
|
110
|
+
@conn.exec(sql)
|
111
|
+
rescue OCIError
|
112
|
+
raise if $!.code != 942 # table or view does not exist
|
113
|
+
end
|
114
|
+
elsif defined? @dbh
|
115
|
+
begin
|
116
|
+
@dbh.do(sql)
|
117
|
+
rescue DBI::DatabaseError
|
118
|
+
raise if $!.err != 942 # table or view does not exist
|
119
|
+
end
|
120
|
+
elsif defined? @stmt
|
121
|
+
begin
|
122
|
+
@stmt.prepare(sql).execute(@svc)
|
123
|
+
rescue OCIError
|
124
|
+
raise if $!.code != 942 # table or view does not exist
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end # drop_table
|
128
|
+
end
|
129
|
+
end
|