oci8_simple 0.5.0 → 0.6.0
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.rdoc +22 -7
- data/VERSION +1 -1
- data/bin/show +5 -0
- data/lib/oci8_simple/cli.rb +3 -8
- data/lib/oci8_simple/command.rb +24 -0
- data/lib/oci8_simple/describe.rb +4 -9
- data/lib/oci8_simple/show.rb +49 -0
- data/lib/oci8_simple.rb +11 -3
- data/oci8_simple.gemspec +10 -5
- data/test/show_test.rb +124 -0
- metadata +10 -4
data/README.rdoc
CHANGED
@@ -8,7 +8,8 @@ This gem installs a few command-line scripts:
|
|
8
8
|
* a command to run arbitrary SQL
|
9
9
|
* <code>describe </code>
|
10
10
|
* a command to describe a table
|
11
|
-
|
11
|
+
* <code>show </code>
|
12
|
+
* a command to list things in the database (tables, views, etc.)
|
12
13
|
You can also use oci8_simple in your Ruby scripts by creating an instance of <code>Oci8Simple::Client</code>
|
13
14
|
(see more below).
|
14
15
|
|
@@ -37,8 +38,9 @@ an existing file into this directory if you already have one.
|
|
37
38
|
All logging is done to <code>~/.oci8_simple/oci8_simple.log</code>.
|
38
39
|
|
39
40
|
== Command-Line Examples
|
40
|
-
|
41
|
-
run single statements against an
|
41
|
+
=== oci8_simple
|
42
|
+
This script allows you to run single statements against an
|
43
|
+
arbitrary Oracle schema via the command line.
|
42
44
|
|
43
45
|
Run a query against development schema
|
44
46
|
oci8_simple "select id, name from flavors"
|
@@ -49,10 +51,10 @@ run single statements against an arbitrary Oracle schema via the command line.
|
|
49
51
|
Help
|
50
52
|
oci8_simple --help
|
51
53
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
54
|
+
=== describe
|
55
|
+
This script shows a description of a table, including the column names (sorted),
|
56
|
+
the type and size for each column, the nullable status of the column, and the default
|
57
|
+
value, if any.
|
56
58
|
|
57
59
|
Show column information for a table named "holidays"
|
58
60
|
describe holidays
|
@@ -60,6 +62,19 @@ each column, and the nullable status of the column.
|
|
60
62
|
Help
|
61
63
|
describe --help
|
62
64
|
|
65
|
+
=== show
|
66
|
+
This command can list the following items in the database:
|
67
|
+
functions, packages, procedures, sequences, synonyms, tables, types, and views.
|
68
|
+
|
69
|
+
Show a list of all tables in the database
|
70
|
+
show tables
|
71
|
+
|
72
|
+
Show a list of all views in the database
|
73
|
+
show views
|
74
|
+
|
75
|
+
Help
|
76
|
+
show --help
|
77
|
+
|
63
78
|
== Code Examples
|
64
79
|
* Initialize a client against the development schema
|
65
80
|
require 'rubygems'
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.6.0
|
data/bin/show
ADDED
data/lib/oci8_simple/cli.rb
CHANGED
@@ -6,6 +6,8 @@ module Oci8Simple
|
|
6
6
|
# cli = Oci8Simple::Cli.new
|
7
7
|
# cli.run "select id, name from foos" # "3, Bacon\n5, Cheese Puffs\n..."
|
8
8
|
class Cli
|
9
|
+
include Command
|
10
|
+
|
9
11
|
attr_accessor :env, :client
|
10
12
|
|
11
13
|
def initialize(env=nil)
|
@@ -29,14 +31,7 @@ module Oci8Simple
|
|
29
31
|
end
|
30
32
|
|
31
33
|
def self.run_from_argv
|
32
|
-
o =
|
33
|
-
opt.banner = usage
|
34
|
-
opt.on("-v", "--version", "Show version") do
|
35
|
-
puts "version #{File.read(File.join(File.dirname(__FILE__), '..', '..', 'VERSION'))}"
|
36
|
-
exit
|
37
|
-
end
|
38
|
-
end
|
39
|
-
o.parse!
|
34
|
+
o = parse_options(self.usage)
|
40
35
|
if(ARGV[0].nil?)
|
41
36
|
puts o
|
42
37
|
else
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Oci8Simple
|
2
|
+
module Command
|
3
|
+
def self.included(base)
|
4
|
+
base.extend ClassMethods
|
5
|
+
end
|
6
|
+
|
7
|
+
module ClassMethods
|
8
|
+
|
9
|
+
# Returns an OptionParser object.
|
10
|
+
def parse_options(banner)
|
11
|
+
o = OptionParser.new do |opt|
|
12
|
+
opt.banner = banner
|
13
|
+
opt.on("-v", "--version", "Show version") do
|
14
|
+
puts "#{self.to_s} #{Oci8Simple::VERSION}"
|
15
|
+
exit
|
16
|
+
end
|
17
|
+
end
|
18
|
+
o.parse!
|
19
|
+
o
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/oci8_simple/describe.rb
CHANGED
@@ -5,6 +5,8 @@ module Oci8Simple
|
|
5
5
|
# == Usage
|
6
6
|
# Oci8Simple::Describe.new("development").run("users")
|
7
7
|
class Describe
|
8
|
+
include Command
|
9
|
+
|
8
10
|
SPACE_BETWEEN=2
|
9
11
|
FIELDS=[
|
10
12
|
{:select => "NULLABLE", :header => "Required", :content => :format_nullable, :right => true},
|
@@ -35,18 +37,11 @@ module Oci8Simple
|
|
35
37
|
end
|
36
38
|
|
37
39
|
def self.usage
|
38
|
-
"Usage: #{0} TABLE_NAME [ENVIRONMENT]"
|
40
|
+
"Usage: #{$0} TABLE_NAME [ENVIRONMENT]"
|
39
41
|
end
|
40
42
|
|
41
43
|
def self.run_from_argv
|
42
|
-
o =
|
43
|
-
opt.banner = usage
|
44
|
-
opt.on("-v", "--version", "Show version") do
|
45
|
-
puts "version #{File.read(File.join(File.dirname(__FILE__), '..', '..', 'VERSION'))}"
|
46
|
-
exit
|
47
|
-
end
|
48
|
-
end
|
49
|
-
o.parse!
|
44
|
+
o = parse_options(self.usage)
|
50
45
|
if(ARGV[0].nil?)
|
51
46
|
puts o
|
52
47
|
else
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Oci8Simple
|
2
|
+
class Show
|
3
|
+
include Command
|
4
|
+
|
5
|
+
TYPES={
|
6
|
+
"functions" => "Function",
|
7
|
+
"packages" => "Package",
|
8
|
+
"procedures" => "Procedure",
|
9
|
+
"sequences" => "Sequence",
|
10
|
+
"synonyms" => "Synonym",
|
11
|
+
"tables" => "Table",
|
12
|
+
"types" => "Type",
|
13
|
+
"views" => "View"
|
14
|
+
}
|
15
|
+
|
16
|
+
def run(type)
|
17
|
+
clazz = eval("OCI8::Metadata::#{TYPES[type]}")
|
18
|
+
objects = client.send(:conn).describe_schema(client.config["username"]).all_objects.find_all{|f| f.class == clazz}
|
19
|
+
objects.map(&:obj_name).map(&:downcase).sort
|
20
|
+
end
|
21
|
+
|
22
|
+
def initialize(env=nil)
|
23
|
+
@env = env || "development"
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.run_from_argv
|
27
|
+
o = parse_options(self.usage)
|
28
|
+
if(ARGV[0].nil? || TYPES[ARGV[0]].nil?)
|
29
|
+
puts o
|
30
|
+
else
|
31
|
+
puts self.new(ARGV[1]).run(ARGV[0])
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.usage
|
36
|
+
<<-STR
|
37
|
+
Usage: #{$0} TYPE [ENVIRONMENT]
|
38
|
+
|
39
|
+
TYPE is one of: #{TYPES.keys.sort.join(", ")}
|
40
|
+
STR
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def client
|
46
|
+
@client ||= Oci8Simple::Client.new(@env)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/oci8_simple.rb
CHANGED
@@ -1,12 +1,20 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
|
2
|
+
|
3
|
+
require 'abbrev'
|
3
4
|
require 'bigdecimal'
|
4
|
-
require 'yaml'
|
5
5
|
require 'optparse'
|
6
|
+
require 'pp'
|
7
|
+
require 'yaml'
|
6
8
|
|
7
9
|
gem 'ruby-oci8'
|
8
10
|
require 'oci8'
|
9
11
|
|
12
|
+
require 'oci8_simple/command'
|
10
13
|
require 'oci8_simple/cli'
|
11
14
|
require 'oci8_simple/client'
|
12
|
-
require 'oci8_simple/describe'
|
15
|
+
require 'oci8_simple/describe'
|
16
|
+
require 'oci8_simple/show'
|
17
|
+
|
18
|
+
module Oci8Simple
|
19
|
+
VERSION = File.read(File.join(File.dirname(__FILE__), '..', 'VERSION'))
|
20
|
+
end
|
data/oci8_simple.gemspec
CHANGED
@@ -5,16 +5,16 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{oci8_simple}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.6.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Billy Reisinger"]
|
12
|
-
s.date = %q{2011-06
|
12
|
+
s.date = %q{2011-07-06}
|
13
13
|
s.description = %q{Command-line tools for interacting with an Oracle database. This client is intended to be used
|
14
14
|
to aid development and automation. This is *not* meant to replace an ORM such as ActiveRecord + OracleEnhancedAdapter.
|
15
15
|
The only prerequisite to running this code is that you have installed the ruby-oci8 gem on your machine.}
|
16
16
|
s.email = %q{billy.reisinger@gmail.com}
|
17
|
-
s.executables = ["oci8_simple", "describe"]
|
17
|
+
s.executables = ["show", "oci8_simple", "describe"]
|
18
18
|
s.extra_rdoc_files = [
|
19
19
|
"README.rdoc"
|
20
20
|
]
|
@@ -28,15 +28,19 @@ Gem::Specification.new do |s|
|
|
28
28
|
"VERSION",
|
29
29
|
"bin/describe",
|
30
30
|
"bin/oci8_simple",
|
31
|
+
"bin/show",
|
31
32
|
"lib/oci8_simple.rb",
|
32
33
|
"lib/oci8_simple/cli.rb",
|
33
34
|
"lib/oci8_simple/client.rb",
|
35
|
+
"lib/oci8_simple/command.rb",
|
34
36
|
"lib/oci8_simple/describe.rb",
|
37
|
+
"lib/oci8_simple/show.rb",
|
35
38
|
"oci8_simple.gemspec",
|
36
39
|
"test/cli_test.rb",
|
37
40
|
"test/client_test.rb",
|
38
41
|
"test/describe_test.rb",
|
39
|
-
"test/helper.rb"
|
42
|
+
"test/helper.rb",
|
43
|
+
"test/show_test.rb"
|
40
44
|
]
|
41
45
|
s.homepage = %q{http://github.com/unclebilly/oci8_simple}
|
42
46
|
s.licenses = ["MIT"]
|
@@ -47,7 +51,8 @@ Gem::Specification.new do |s|
|
|
47
51
|
"test/cli_test.rb",
|
48
52
|
"test/client_test.rb",
|
49
53
|
"test/describe_test.rb",
|
50
|
-
"test/helper.rb"
|
54
|
+
"test/helper.rb",
|
55
|
+
"test/show_test.rb"
|
51
56
|
]
|
52
57
|
|
53
58
|
if s.respond_to? :specification_version then
|
data/test/show_test.rb
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'helper')
|
2
|
+
class ShowTest < Test::Unit::TestCase
|
3
|
+
def setup
|
4
|
+
@client = Oci8Simple::Client.new("test")
|
5
|
+
@show = Oci8Simple::Show.new("test")
|
6
|
+
end
|
7
|
+
def teardown
|
8
|
+
|
9
|
+
end
|
10
|
+
context "Show tables" do
|
11
|
+
setup do
|
12
|
+
@client.run "drop table oci8_simple_test" rescue nil
|
13
|
+
@client.run "drop table oci8_simple_test_2" rescue nil
|
14
|
+
@client.run <<-SQL
|
15
|
+
CREATE TABLE "OCI8_SIMPLE_TEST" ("ID" NUMBER(38,0) DEFAULT 7 NOT NULL ENABLE)
|
16
|
+
SQL
|
17
|
+
@client.run <<-SQL
|
18
|
+
CREATE TABLE "OCI8_SIMPLE_TEST_2" ("ID" NUMBER(38,0) NOT NULL ENABLE)
|
19
|
+
SQL
|
20
|
+
end
|
21
|
+
should "list the tables" do
|
22
|
+
assert_equal ["oci8_simple_test","oci8_simple_test_2"], @show.run("tables")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
context "Show functions" do
|
27
|
+
setup do
|
28
|
+
@client.run "drop function oci8_simple_function" rescue nil
|
29
|
+
@client.run <<-SQL
|
30
|
+
CREATE FUNCTION oci8_simple_function
|
31
|
+
RETURN NUMBER
|
32
|
+
IS num NUMBER(1,0);
|
33
|
+
BEGIN
|
34
|
+
SELECT 1 INTO num FROM DUAL;
|
35
|
+
RETURN(num);
|
36
|
+
END
|
37
|
+
SQL
|
38
|
+
end
|
39
|
+
should "list the functions" do
|
40
|
+
assert_equal ["oci8_simple_function"], @show.run("functions")
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context "Show packages" do
|
45
|
+
setup do
|
46
|
+
@client.run "drop package oci8_simple_package" rescue nil
|
47
|
+
@client.run <<-SQL
|
48
|
+
CREATE OR REPLACE PACKAGE oci8_simple_package AS
|
49
|
+
FUNCTION something(id NUMBER, foo NUMBER)
|
50
|
+
RETURN NUMBER;
|
51
|
+
END oci8_simple_package
|
52
|
+
SQL
|
53
|
+
end
|
54
|
+
should "list the packages" do
|
55
|
+
assert_equal ["oci8_simple_package"], @show.run("packages")
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context "Show procedures" do
|
60
|
+
setup do
|
61
|
+
@client.run "drop procedure oci8_simple_procedure" rescue nil
|
62
|
+
@client.run <<-SQL
|
63
|
+
CREATE PROCEDURE oci8_simple_procedure AS
|
64
|
+
BEGIN
|
65
|
+
SELECT 1 FROM DUAL;
|
66
|
+
END
|
67
|
+
SQL
|
68
|
+
end
|
69
|
+
should "list the procedures" do
|
70
|
+
assert_equal ["oci8_simple_procedure"], @show.run("procedures")
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
context "Show sequences" do
|
75
|
+
setup do
|
76
|
+
@client.run "drop sequence oci8_simple_sequence" rescue nil
|
77
|
+
@client.run <<-SQL
|
78
|
+
CREATE SEQUENCE oci8_simple_sequence
|
79
|
+
SQL
|
80
|
+
end
|
81
|
+
should "list the sequences" do
|
82
|
+
assert_equal ["oci8_simple_sequence"], @show.run("sequences")
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
context "show synonyms" do
|
87
|
+
setup do
|
88
|
+
@client.run "drop synonym oci8_simple_synonym" rescue nil
|
89
|
+
@client.run <<-SQL
|
90
|
+
CREATE SYNONYM oci8_simple_synonym
|
91
|
+
FOR DUAL
|
92
|
+
SQL
|
93
|
+
end
|
94
|
+
should "list the synonyms" do
|
95
|
+
assert_equal ["oci8_simple_synonym"], @show.run("synonyms")
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
context "show types" do
|
100
|
+
setup do
|
101
|
+
@client.run "drop type oci8_simple_type" rescue nil
|
102
|
+
@client.run <<-SQL
|
103
|
+
CREATE TYPE oci8_simple_type AS OBJECT
|
104
|
+
( id NUMBER(6))
|
105
|
+
SQL
|
106
|
+
end
|
107
|
+
should "list the types" do
|
108
|
+
assert_equal ["oci8_simple_type"], @show.run("types")
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
context "show views" do
|
113
|
+
setup do
|
114
|
+
@client.run "drop view oci8_simple_view" rescue nil
|
115
|
+
@client.run <<-SQL
|
116
|
+
CREATE VIEW oci8_simple_view AS
|
117
|
+
SELECT sysdate AS dabba FROM DUAL
|
118
|
+
SQL
|
119
|
+
end
|
120
|
+
should "list the views" do
|
121
|
+
assert_equal ["oci8_simple_view"], @show.run("views")
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oci8_simple
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 7
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 6
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.6.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Billy Reisinger
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-06
|
18
|
+
date: 2011-07-06 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -116,6 +116,7 @@ description: |-
|
|
116
116
|
The only prerequisite to running this code is that you have installed the ruby-oci8 gem on your machine.
|
117
117
|
email: billy.reisinger@gmail.com
|
118
118
|
executables:
|
119
|
+
- show
|
119
120
|
- oci8_simple
|
120
121
|
- describe
|
121
122
|
extensions: []
|
@@ -132,15 +133,19 @@ files:
|
|
132
133
|
- VERSION
|
133
134
|
- bin/describe
|
134
135
|
- bin/oci8_simple
|
136
|
+
- bin/show
|
135
137
|
- lib/oci8_simple.rb
|
136
138
|
- lib/oci8_simple/cli.rb
|
137
139
|
- lib/oci8_simple/client.rb
|
140
|
+
- lib/oci8_simple/command.rb
|
138
141
|
- lib/oci8_simple/describe.rb
|
142
|
+
- lib/oci8_simple/show.rb
|
139
143
|
- oci8_simple.gemspec
|
140
144
|
- test/cli_test.rb
|
141
145
|
- test/client_test.rb
|
142
146
|
- test/describe_test.rb
|
143
147
|
- test/helper.rb
|
148
|
+
- test/show_test.rb
|
144
149
|
has_rdoc: true
|
145
150
|
homepage: http://github.com/unclebilly/oci8_simple
|
146
151
|
licenses:
|
@@ -180,3 +185,4 @@ test_files:
|
|
180
185
|
- test/client_test.rb
|
181
186
|
- test/describe_test.rb
|
182
187
|
- test/helper.rb
|
188
|
+
- test/show_test.rb
|