oci8_simple 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ gem "ruby-oci8", "~>2.0.4"
2
+
3
+ group :development do
4
+ gem "shoulda", ">= 0"
5
+ gem "bundler", "~> 1.0.0"
6
+ gem "jeweler", "~> 1.5.2"
7
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,19 @@
1
+ GEM
2
+ specs:
3
+ git (1.2.5)
4
+ jeweler (1.5.2)
5
+ bundler (~> 1.0.0)
6
+ git (>= 1.2.5)
7
+ rake
8
+ rake (0.8.7)
9
+ ruby-oci8 (2.0.4)
10
+ shoulda (2.10.1)
11
+
12
+ PLATFORMS
13
+ ruby
14
+
15
+ DEPENDENCIES
16
+ bundler (~> 1.0.0)
17
+ jeweler (~> 1.5.2)
18
+ ruby-oci8 (~> 2.0.4)
19
+ shoulda
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Billy Reisinger
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,67 @@
1
+ = oci8_simple
2
+
3
+ Run single statements against an arbitrary Oracle schema. This client is intended to be used by simple
4
+ command-line scripts to aid automation. This is *not* meant to replace an ORM such as ActiveRecord + OracleEnhancedAdapter.
5
+ The only prerequisite to running this code is that you have installed the ruby-oci8 gem on your machine.
6
+
7
+ == Installation
8
+ [sudo] gem install oci8-simple
9
+
10
+ == Configuration
11
+ To configure environments and schema settings, edit the
12
+ database.yml file in ~/.oci8_simple/
13
+ development:
14
+ database: oracle.hostname:1521/sid
15
+ username: foo_dev
16
+ password: OMG333
17
+ test:
18
+ database: oracle.hostname:1521/sid
19
+ username: foo_test
20
+ password: OMG333
21
+
22
+ == Logging
23
+ All logging is done to ~/.oci8_simple/oci8_simple.log
24
+
25
+ == Examples
26
+ * Initialize a client against the development schema
27
+ client = Oci8Simple.new
28
+ * Run a simple select query against development schema
29
+ client.run('select id, name from foos') => [[2, "lol"], [3, "hey"], ...]
30
+ * Run a simple select query against stage schema
31
+ Oci8Simple.new("stage").run('select id, name from foos') => [[2, "lol"], [3, "hey"], ...]
32
+ * Update something
33
+ client.run <<-SQL
34
+ UPDATE foos SET bar='baz' WHERE id=1233
35
+ SQL
36
+ * Run some DDL
37
+ client.run <<-SQL
38
+ CREATE TABLE foos (
39
+ ID NUMBER(38) NOT NULL
40
+ )
41
+ SQL
42
+ * Run some PL/SQL
43
+ client.run <<-SQL
44
+ DECLARE
45
+ a NUMBER;
46
+ b NUMBER;
47
+ BEGIN
48
+ SELECT e,f INTO a,b FROM T1 WHERE e>1;
49
+ INSERT INTO T1 VALUES(b,a);
50
+ END;
51
+ SQL
52
+
53
+ == Contributing to oci8_simple
54
+
55
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
56
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
57
+ * Fork the project
58
+ * Start a feature/bugfix branch
59
+ * Commit and push until you are happy with your contribution
60
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
61
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
62
+
63
+ == Copyright
64
+
65
+ Copyright (c) 2011 Billy Reisinger. See LICENSE.txt for
66
+ further details.
67
+
data/Rakefile ADDED
@@ -0,0 +1,46 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'rake'
11
+
12
+ require 'jeweler'
13
+ Jeweler::Tasks.new do |gem|
14
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
15
+ gem.name = "oci8_simple"
16
+ gem.homepage = "http://github.com/unclebilly/oci8_simple"
17
+ gem.license = "MIT"
18
+ gem.summary = %Q{Run single statements against an arbitrary Oracle schema.}
19
+ gem.description = %Q{Run single statements against an arbitrary Oracle schema. This client is intended to be used by simple
20
+ command-line scripts to aid automation. This is *not* meant to replace an ORM such as ActiveRecord + OracleEnhancedAdapter.
21
+ The only prerequisite to running this code is that you have installed the ruby-oci8 gem on your machine.}
22
+ gem.email = "billy.reisinger@gmail.com"
23
+ gem.authors = ["Billy Reisinger"]
24
+ gem.add_dependency "ruby-oci8", "~> 2.0.4"
25
+ gem.extra_rdoc_files = ['README.rdoc']
26
+ end
27
+ Jeweler::RubygemsDotOrgTasks.new
28
+
29
+ require 'rake/testtask'
30
+ Rake::TestTask.new(:test) do |test|
31
+ test.libs << 'lib' << 'test'
32
+ test.pattern = 'test/**/test_*.rb'
33
+ test.verbose = true
34
+ end
35
+
36
+ task :default => :test
37
+
38
+ require 'rake/rdoctask'
39
+ Rake::RDocTask.new do |rdoc|
40
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
41
+
42
+ rdoc.rdoc_dir = 'rdoc'
43
+ rdoc.title = "oci8_simple #{version}"
44
+ rdoc.rdoc_files.include('README*')
45
+ rdoc.rdoc_files.include('lib/**/*.rb')
46
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,143 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ gem 'ruby-oci8'
5
+ require 'oci8'
6
+ require 'pp'
7
+ require 'bigdecimal'
8
+ require 'yaml'
9
+
10
+ # Run single statements against an arbitrary Oracle schema. This client is intended to be used by simple
11
+ # command-line scripts to aid automation. This is *not* meant to replace an ORM such as ActiveRecord + OracleEnhancedAdapter.
12
+ # The only prerequisite to running this code is that you have installed the ruby-oci8 gem on your machine.
13
+ #
14
+ # == Installation
15
+ # [sudo] gem install oci8-simple
16
+ #
17
+ # == Configuration
18
+ # To configure environments and schema settings, edit the
19
+ # database.yml file in ~/.oci8_simple/
20
+ # development:
21
+ # database: oracle.hostname:1521/sid
22
+ # username: foo_dev
23
+ # password: OMG333
24
+ # test:
25
+ # database: oracle.hostname:1521/sid
26
+ # username: foo_test
27
+ # password: OMG333
28
+ #
29
+ # == Logging
30
+ # All logging is done to ~/.oci8_simple/oci8_simple.log
31
+ #
32
+ # == Examples
33
+ # * Initialize a client against the development schema
34
+ # client = Oci8Simple.new
35
+ # * Run a simple select query against development schema
36
+ # client.run('select id, name from foos') => [[2, "lol"], [3, "hey"], ...]
37
+ # * Run a simple select query against stage schema
38
+ # Oci8Simple.new("stage").run('select id, name from foos') => [[2, "lol"], [3, "hey"], ...]
39
+ # * Update something
40
+ # client.run <<-SQL
41
+ # UPDATE foos SET bar='baz' WHERE id=1233
42
+ # SQL
43
+ # * Run some DDL
44
+ # client.run <<-SQL
45
+ # CREATE TABLE foos (
46
+ # ID NUMBER(38) NOT NULL
47
+ # )
48
+ # SQL
49
+ # * Run some PL/SQL
50
+ # client.run <<-SQL
51
+ # DECLARE
52
+ # a NUMBER;
53
+ # b NUMBER;
54
+ # BEGIN
55
+ # SELECT e,f INTO a,b FROM T1 WHERE e>1;
56
+ # INSERT INTO T1 VALUES(b,a);
57
+ # END;
58
+ # SQL
59
+ class Oci8Simple
60
+ USER_DIR = File.join(ENV["HOME"], ".oci8_simple")
61
+ CONFIG_FILE = File.join(USER_DIR, "database.yml")
62
+ LOG_FILE = File.join(USER_DIR, "oci8_simple.log")
63
+
64
+ attr_accessor :log_file, :puts_mode
65
+
66
+ # * env is the environment heading in your database.yml file
67
+ # * uname is the username you want to use (defaults to config["username"])
68
+ # * puts_mode is whether you want to format the result for printing to a terminal (defaults to false)
69
+ def initialize(env, uname=nil, puts_mode=false)
70
+ @env = env
71
+ @uname = uname
72
+ @puts_mode = puts_mode
73
+ conn.autocommit = true
74
+ end
75
+
76
+ def log_file
77
+ @log_file ||= File.open(LOG_FILE, 'a')
78
+ end
79
+
80
+ def run(sql)
81
+ log(sql)
82
+ result = []
83
+ conn.exec(sql) do |r|
84
+ row = []
85
+ r.map do |col|
86
+ if col.class == BigDecimal
87
+ row << col.to_i
88
+ elsif col.class == OCI8::CLOB
89
+ row << col.read
90
+ else
91
+ row << col.to_s
92
+ end
93
+ end
94
+ result << row
95
+ end
96
+
97
+ if @puts_mode
98
+ result.map{|row| row.join(", ")}.join("\n")
99
+ else
100
+ if(result.length == 1 && result[0].length == 1)
101
+ result[0][0]
102
+ else
103
+ result
104
+ end
105
+ end
106
+ end
107
+
108
+ def config
109
+ @config ||= YAML.load_file(CONFIG_FILE)[@env]
110
+ end
111
+
112
+ private
113
+ def conn
114
+ @o ||= OCI8.new(@uname || config["username"], config["password"], config["database"])
115
+ end
116
+
117
+ def log(str)
118
+ log_file.puts "#{Time.now} - #{@env} - #{str}"
119
+ end
120
+
121
+ def self.help
122
+ <<-HELP
123
+ Run arbitrary SQL against an Oracle schema. The default schema is the one defined
124
+ in the development section of your ~/.oci8_simple/database.yml file.
125
+
126
+ You do not need to include a semicolon to end a statement. The statement should be enclosed in single
127
+ or double quotes.
128
+
129
+ Usage: #{$0} SQL [ENV]
130
+ Example: #{$0} 'select id from users' stage
131
+ HELP
132
+ end
133
+ end
134
+
135
+ if __FILE__ == $0
136
+ if(["-h", "--help"].include?(ARGV[0]) || ARGV.empty?)
137
+ Oci8Simple.help
138
+ else
139
+ sql = ARGV[0] || ""
140
+ env = ARGV[1] || "development"
141
+ Oci8Simple.new(env).run(sql)
142
+ end
143
+ end
@@ -0,0 +1,67 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{oci8_simple}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Billy Reisinger"]
12
+ s.date = %q{2011-05-12}
13
+ s.description = %q{Run single statements against an arbitrary Oracle schema. This client is intended to be used by simple
14
+ command-line scripts to aid automation. This is *not* meant to replace an ORM such as ActiveRecord + OracleEnhancedAdapter.
15
+ The only prerequisite to running this code is that you have installed the ruby-oci8 gem on your machine.}
16
+ s.email = %q{billy.reisinger@gmail.com}
17
+ s.extra_rdoc_files = [
18
+ "README.rdoc"
19
+ ]
20
+ s.files = [
21
+ ".document",
22
+ "Gemfile",
23
+ "Gemfile.lock",
24
+ "LICENSE.txt",
25
+ "README.rdoc",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "lib/oci8_simple.rb",
29
+ "oci8_simple.gemspec",
30
+ "test/helper.rb",
31
+ "test/test_oci8_simple.rb"
32
+ ]
33
+ s.homepage = %q{http://github.com/unclebilly/oci8_simple}
34
+ s.licenses = ["MIT"]
35
+ s.require_paths = ["lib"]
36
+ s.rubygems_version = %q{1.5.2}
37
+ s.summary = %q{Run single statements against an arbitrary Oracle schema.}
38
+ s.test_files = [
39
+ "test/helper.rb",
40
+ "test/test_oci8_simple.rb"
41
+ ]
42
+
43
+ if s.respond_to? :specification_version then
44
+ s.specification_version = 3
45
+
46
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
47
+ s.add_runtime_dependency(%q<ruby-oci8>, ["~> 2.0.4"])
48
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
49
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
50
+ s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
51
+ s.add_runtime_dependency(%q<ruby-oci8>, ["~> 2.0.4"])
52
+ else
53
+ s.add_dependency(%q<ruby-oci8>, ["~> 2.0.4"])
54
+ s.add_dependency(%q<shoulda>, [">= 0"])
55
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
56
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
57
+ s.add_dependency(%q<ruby-oci8>, ["~> 2.0.4"])
58
+ end
59
+ else
60
+ s.add_dependency(%q<ruby-oci8>, ["~> 2.0.4"])
61
+ s.add_dependency(%q<shoulda>, [">= 0"])
62
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
63
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
64
+ s.add_dependency(%q<ruby-oci8>, ["~> 2.0.4"])
65
+ end
66
+ end
67
+
data/test/helper.rb ADDED
@@ -0,0 +1,18 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'test/unit'
11
+ require 'shoulda'
12
+
13
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
15
+ require 'oci8_simple'
16
+
17
+ class Test::Unit::TestCase
18
+ end
@@ -0,0 +1,53 @@
1
+ require 'helper'
2
+
3
+ class TestOci8Simple < Test::Unit::TestCase
4
+ context "Given a table" do
5
+ setup do
6
+ @client = Oci8Simple.new("test", nil, false)
7
+ @client.run "DROP TABLE OCI8_SIMPLE_TEST CASCADE CONSTRAINTS" rescue nil
8
+ @client.run <<-SQL
9
+ CREATE TABLE "OCI8_SIMPLE_TEST"
10
+ (
11
+ "ID" NUMBER(38,0) NOT NULL ENABLE,
12
+ "NAME" VARCHAR2(400 CHAR) NOT NULL ENABLE,
13
+ "TEXTS" CLOB
14
+ )
15
+ SQL
16
+ @client.run <<-SQL
17
+ INSERT INTO OCI8_SIMPLE_TEST (ID, NAME, TEXTS) VALUES (1, 'Johnny', 'OMG')
18
+ SQL
19
+ @client.run <<-SQL
20
+ INSERT INTO OCI8_SIMPLE_TEST (ID, NAME, TEXTS) VALUES (2, 'Jenny', 'OMG')
21
+ SQL
22
+ end
23
+ context "when puts mode is false the client" do
24
+ setup do
25
+ end
26
+ should "be able to run a simple query with a single result" do
27
+ assert_equal 2, @client.run("select count(*) from OCI8_SIMPLE_TEST")
28
+ end
29
+ should "be able to run a simple query with multiple results and multiple columns" do
30
+ assert_equal [["1", "Johnny", "OMG"], ["2", "Jenny", "OMG"]], @client.run("select * from OCI8_SIMPLE_TEST")
31
+ end
32
+
33
+ should "have logged something" do
34
+ File.unlink(Oci8Simple::LOG_FILE)
35
+ assert(!File.exists?(Oci8Simple::LOG_FILE))
36
+ @client = Oci8Simple.new("test", nil, false)
37
+ @client.run "select NULL from dual"
38
+ @client.log_file.close
39
+ assert(File.exists?(Oci8Simple::LOG_FILE))
40
+ assert(!(0 == File.size(Oci8Simple::LOG_FILE)))
41
+ end
42
+ end
43
+ context "when puts mode is true the client" do
44
+ setup do
45
+ @client.puts_mode = true
46
+ end
47
+ should "format result" do
48
+ result = @client.run("select * from OCI8_SIMPLE_TEST")
49
+ assert_equal "1, Johnny, OMG\n2, Jenny, OMG", result
50
+ end
51
+ end
52
+ end
53
+ end
metadata ADDED
@@ -0,0 +1,158 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: oci8_simple
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Billy Reisinger
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-05-12 00:00:00 -05:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: ruby-oci8
23
+ version_requirements: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ~>
27
+ - !ruby/object:Gem::Version
28
+ hash: 7
29
+ segments:
30
+ - 2
31
+ - 0
32
+ - 4
33
+ version: 2.0.4
34
+ prerelease: false
35
+ type: :runtime
36
+ requirement: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: shoulda
39
+ version_requirements: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ hash: 3
45
+ segments:
46
+ - 0
47
+ version: "0"
48
+ prerelease: false
49
+ type: :development
50
+ requirement: *id002
51
+ - !ruby/object:Gem::Dependency
52
+ name: bundler
53
+ version_requirements: &id003 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ~>
57
+ - !ruby/object:Gem::Version
58
+ hash: 23
59
+ segments:
60
+ - 1
61
+ - 0
62
+ - 0
63
+ version: 1.0.0
64
+ prerelease: false
65
+ type: :development
66
+ requirement: *id003
67
+ - !ruby/object:Gem::Dependency
68
+ name: jeweler
69
+ version_requirements: &id004 !ruby/object:Gem::Requirement
70
+ none: false
71
+ requirements:
72
+ - - ~>
73
+ - !ruby/object:Gem::Version
74
+ hash: 7
75
+ segments:
76
+ - 1
77
+ - 5
78
+ - 2
79
+ version: 1.5.2
80
+ prerelease: false
81
+ type: :development
82
+ requirement: *id004
83
+ - !ruby/object:Gem::Dependency
84
+ name: ruby-oci8
85
+ version_requirements: &id005 !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ~>
89
+ - !ruby/object:Gem::Version
90
+ hash: 7
91
+ segments:
92
+ - 2
93
+ - 0
94
+ - 4
95
+ version: 2.0.4
96
+ prerelease: false
97
+ type: :runtime
98
+ requirement: *id005
99
+ description: |-
100
+ Run single statements against an arbitrary Oracle schema. This client is intended to be used by simple
101
+ command-line scripts to aid automation. This is *not* meant to replace an ORM such as ActiveRecord + OracleEnhancedAdapter.
102
+ The only prerequisite to running this code is that you have installed the ruby-oci8 gem on your machine.
103
+ email: billy.reisinger@gmail.com
104
+ executables: []
105
+
106
+ extensions: []
107
+
108
+ extra_rdoc_files:
109
+ - README.rdoc
110
+ files:
111
+ - .document
112
+ - Gemfile
113
+ - Gemfile.lock
114
+ - LICENSE.txt
115
+ - README.rdoc
116
+ - Rakefile
117
+ - VERSION
118
+ - lib/oci8_simple.rb
119
+ - oci8_simple.gemspec
120
+ - test/helper.rb
121
+ - test/test_oci8_simple.rb
122
+ has_rdoc: true
123
+ homepage: http://github.com/unclebilly/oci8_simple
124
+ licenses:
125
+ - MIT
126
+ post_install_message:
127
+ rdoc_options: []
128
+
129
+ require_paths:
130
+ - lib
131
+ required_ruby_version: !ruby/object:Gem::Requirement
132
+ none: false
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ hash: 3
137
+ segments:
138
+ - 0
139
+ version: "0"
140
+ required_rubygems_version: !ruby/object:Gem::Requirement
141
+ none: false
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ hash: 3
146
+ segments:
147
+ - 0
148
+ version: "0"
149
+ requirements: []
150
+
151
+ rubyforge_project:
152
+ rubygems_version: 1.5.2
153
+ signing_key:
154
+ specification_version: 3
155
+ summary: Run single statements against an arbitrary Oracle schema.
156
+ test_files:
157
+ - test/helper.rb
158
+ - test/test_oci8_simple.rb