ruby-plsql 0.9.9-java
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.
- checksums.yaml +7 -0
- data/History.txt +282 -0
- data/License.txt +20 -0
- data/README.md +263 -0
- data/VERSION +1 -0
- data/lib/plsql/connection.rb +230 -0
- data/lib/plsql/helpers.rb +7 -0
- data/lib/plsql/jdbc_connection.rb +588 -0
- data/lib/plsql/oci_connection.rb +324 -0
- data/lib/plsql/package.rb +87 -0
- data/lib/plsql/procedure.rb +584 -0
- data/lib/plsql/procedure_call.rb +626 -0
- data/lib/plsql/schema.rb +296 -0
- data/lib/plsql/sequence.rb +46 -0
- data/lib/plsql/sql_statements.rb +85 -0
- data/lib/plsql/table.rb +345 -0
- data/lib/plsql/type.rb +270 -0
- data/lib/plsql/variable.rb +143 -0
- data/lib/plsql/version.rb +3 -0
- data/lib/plsql/view.rb +38 -0
- data/lib/ruby-plsql.rb +1 -0
- data/lib/ruby_plsql.rb +13 -0
- metadata +120 -0
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
module PLSQL
|
|
2
|
+
module VariableClassMethods # :nodoc:
|
|
3
|
+
def find(schema, variable, package, override_schema_name = nil)
|
|
4
|
+
variable_upcase = variable.to_s.upcase
|
|
5
|
+
schema.select_all(
|
|
6
|
+
"SELECT text FROM all_source
|
|
7
|
+
WHERE owner = :owner
|
|
8
|
+
AND name = :object_name
|
|
9
|
+
AND type = 'PACKAGE'
|
|
10
|
+
AND UPPER(text) LIKE :variable_name",
|
|
11
|
+
override_schema_name || schema.schema_name, package, "%#{variable_upcase}%").each do |row|
|
|
12
|
+
if row[0] =~ /^\s*#{variable_upcase}\s+(CONSTANT\s+)?([A-Z0-9_. %]+(\([\w\s,]+\))?)\s*(NOT\s+NULL)?\s*((:=|DEFAULT).*)?;\s*(--.*)?$/i ||
|
|
13
|
+
row[0] =~ /^\s*#{variable_upcase}\s+(CONSTANT\s+)?([A-Z0-9_. %]+(\([\w\s,]+\))?)\s*(NOT\s+NULL)?\s*(:=|DEFAULT)\s*$/i
|
|
14
|
+
return new(schema, variable, package, $2.strip, override_schema_name)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
nil
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
class Variable # :nodoc:
|
|
22
|
+
extend VariableClassMethods
|
|
23
|
+
|
|
24
|
+
attr_reader :schema_name, :package_name, :variable_name # :nodoc:
|
|
25
|
+
|
|
26
|
+
def initialize(schema, variable, package, variable_type, override_schema_name = nil)
|
|
27
|
+
@schema = schema
|
|
28
|
+
@schema_name = override_schema_name || schema.schema_name
|
|
29
|
+
@variable_name = variable.to_s.upcase
|
|
30
|
+
@package_name = package
|
|
31
|
+
@variable_type = variable_type.upcase
|
|
32
|
+
@metadata = metadata(@variable_type)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def value
|
|
36
|
+
@variable_get_proc ||= VariableProcedure.new(@schema, self, :get, @metadata)
|
|
37
|
+
ProcedureCall.new(@variable_get_proc).exec
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def value=(new_value)
|
|
41
|
+
@variable_set_proc ||= VariableProcedure.new(@schema, self, :set, @metadata)
|
|
42
|
+
ProcedureCall.new(@variable_set_proc, [new_value]).exec
|
|
43
|
+
new_value
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
private
|
|
47
|
+
|
|
48
|
+
def metadata(type_string)
|
|
49
|
+
case type_string
|
|
50
|
+
when /^(VARCHAR|VARCHAR2|CHAR|NVARCHAR2|NCHAR)(\((\d+)[\s\w]*\))?$/
|
|
51
|
+
{ data_type: $1, data_length: $3.to_i, in_out: "IN/OUT" }
|
|
52
|
+
when /^(CLOB|NCLOB|BLOB)$/,
|
|
53
|
+
/^(NUMBER)(\(.*\))?$/, /^(NATURAL|NATURALN|POSITIVE|POSITIVEN|SIGNTYPE|SIMPLE_INTEGER|PLS_INTEGER|BINARY_INTEGER)$/,
|
|
54
|
+
/^(DATE|TIMESTAMP|TIMESTAMP WITH TIME ZONE|TIMESTAMP WITH LOCAL TIME ZONE)$/,
|
|
55
|
+
/^(XMLTYPE)$/
|
|
56
|
+
{ data_type: $1, in_out: "IN/OUT" }
|
|
57
|
+
when /^INTEGER$/
|
|
58
|
+
{ data_type: "NUMBER", in_out: "IN/OUT" }
|
|
59
|
+
when /^BOOLEAN$/
|
|
60
|
+
{ data_type: "PL/SQL BOOLEAN", in_out: "IN/OUT" }
|
|
61
|
+
when /^(\w+\.)?(\w+)\.(\w+)%TYPE$/
|
|
62
|
+
schema = $1 ? plsql.send($1.chop) : plsql
|
|
63
|
+
table = schema.send($2.downcase.to_sym)
|
|
64
|
+
column = table.columns[$3.downcase.to_sym]
|
|
65
|
+
{ data_type: column[:data_type], data_length: column[:data_length], sql_type_name: column[:sql_type_name], in_out: "IN/OUT" }
|
|
66
|
+
when /^(\w+\.)?(\w+)$/
|
|
67
|
+
schema = $1 ? @schema.root_schema.send($1.chop) : @schema
|
|
68
|
+
begin
|
|
69
|
+
type = schema.send($2.downcase.to_sym)
|
|
70
|
+
raise ArgumentError unless type.is_a?(PLSQL::Type)
|
|
71
|
+
typecode = case type.typecode
|
|
72
|
+
when "COLLECTION" then "TABLE"
|
|
73
|
+
else "OBJECT"
|
|
74
|
+
end
|
|
75
|
+
{ data_type: typecode, data_length: nil, sql_type_name: "#{type.schema_name}.#{type.type_name}", in_out: "IN/OUT" }
|
|
76
|
+
rescue ArgumentError
|
|
77
|
+
raise ArgumentError, "Package variable data type #{type_string} is not object type defined in schema"
|
|
78
|
+
end
|
|
79
|
+
when /^(\w+\.)?(\w+)%ROWTYPE$/
|
|
80
|
+
schema = $1 ? plsql.send($1.chop) : plsql
|
|
81
|
+
table = schema.send($2.downcase.to_sym)
|
|
82
|
+
record_metadata = {
|
|
83
|
+
data_type: "PL/SQL RECORD",
|
|
84
|
+
in_out: "IN/OUT",
|
|
85
|
+
fields: {}
|
|
86
|
+
}
|
|
87
|
+
table.columns.each do |name, col|
|
|
88
|
+
record_metadata[:fields][name] =
|
|
89
|
+
{ data_type: col[:data_type], data_length: col[:data_length], sql_type_name: col[:sql_type_name],
|
|
90
|
+
position: col[:position], in_out: "IN/OUT" }
|
|
91
|
+
end
|
|
92
|
+
record_metadata
|
|
93
|
+
else
|
|
94
|
+
raise ArgumentError, "Package variable data type #{type_string} is not supported"
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# wrapper class to simulate Procedure class for ProcedureClass#exec
|
|
99
|
+
class VariableProcedure # :nodoc:
|
|
100
|
+
attr_reader :arguments, :argument_list, :return, :out_list, :schema
|
|
101
|
+
|
|
102
|
+
def initialize(schema, variable, operation, metadata)
|
|
103
|
+
@schema = schema
|
|
104
|
+
@variable = variable
|
|
105
|
+
@operation = operation
|
|
106
|
+
@metadata = metadata
|
|
107
|
+
|
|
108
|
+
@out_list = [[]]
|
|
109
|
+
|
|
110
|
+
case @operation
|
|
111
|
+
when :get
|
|
112
|
+
@argument_list = [[]]
|
|
113
|
+
@arguments = [{}]
|
|
114
|
+
@return = [@metadata]
|
|
115
|
+
when :set
|
|
116
|
+
@argument_list = [[:value]]
|
|
117
|
+
@arguments = [{ value: @metadata }]
|
|
118
|
+
@return = [nil]
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def overloaded?
|
|
123
|
+
false
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def procedure
|
|
127
|
+
nil
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def call_sql(params_string)
|
|
131
|
+
sql = (schema_name = @variable.schema_name) ? "#{schema_name}." : ""
|
|
132
|
+
sql << "#{@variable.package_name}.#{@variable.variable_name}"
|
|
133
|
+
case @operation
|
|
134
|
+
when :get
|
|
135
|
+
# params string contains assignment to return variable
|
|
136
|
+
"#{params_string} #{sql};\n"
|
|
137
|
+
when :set
|
|
138
|
+
"#{sql} := #{params_string};\n"
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
data/lib/plsql/view.rb
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
module PLSQL
|
|
2
|
+
module ViewClassMethods # :nodoc:
|
|
3
|
+
def find(schema, view)
|
|
4
|
+
if schema.select_first(
|
|
5
|
+
"SELECT view_name FROM all_views
|
|
6
|
+
WHERE owner = :owner
|
|
7
|
+
AND view_name = :view_name",
|
|
8
|
+
schema.schema_name, view.to_s.upcase)
|
|
9
|
+
new(schema, view)
|
|
10
|
+
# search for synonym
|
|
11
|
+
elsif (row = schema.select_first(
|
|
12
|
+
"SELECT v.owner, v.view_name
|
|
13
|
+
FROM all_synonyms s, all_views v
|
|
14
|
+
WHERE s.owner = :owner
|
|
15
|
+
AND s.synonym_name = :synonym_name
|
|
16
|
+
AND v.owner = s.table_owner
|
|
17
|
+
AND v.view_name = s.table_name
|
|
18
|
+
UNION ALL
|
|
19
|
+
SELECT v.owner, v.view_name
|
|
20
|
+
FROM all_synonyms s, all_views v
|
|
21
|
+
WHERE s.owner = 'PUBLIC'
|
|
22
|
+
AND s.synonym_name = :synonym_name
|
|
23
|
+
AND v.owner = s.table_owner
|
|
24
|
+
AND v.view_name = s.table_name",
|
|
25
|
+
schema.schema_name, view.to_s.upcase, view.to_s.upcase))
|
|
26
|
+
new(schema, row[1], row[0])
|
|
27
|
+
else
|
|
28
|
+
nil
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
class View < Table
|
|
34
|
+
extend ViewClassMethods
|
|
35
|
+
|
|
36
|
+
alias :view_name :table_name # :nodoc:
|
|
37
|
+
end
|
|
38
|
+
end
|
data/lib/ruby-plsql.rb
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require "ruby_plsql"
|
data/lib/ruby_plsql.rb
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require "time"
|
|
2
|
+
require "date"
|
|
3
|
+
require "bigdecimal"
|
|
4
|
+
|
|
5
|
+
%w(connection sql_statements schema procedure procedure_call package variable table view sequence type version helpers).each do |file|
|
|
6
|
+
require "plsql/#{file}"
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
unless defined?(JRUBY_VERSION)
|
|
10
|
+
require "plsql/oci_connection"
|
|
11
|
+
else
|
|
12
|
+
require "plsql/jdbc_connection"
|
|
13
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: ruby-plsql
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.9.9
|
|
5
|
+
platform: java
|
|
6
|
+
authors:
|
|
7
|
+
- Raimonds Simanovskis
|
|
8
|
+
bindir: bin
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: rake
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '10.0'
|
|
19
|
+
type: :development
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - ">="
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '10.0'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: rspec
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - "~>"
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '3.1'
|
|
33
|
+
type: :development
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - "~>"
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '3.1'
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: rspec_junit_formatter
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - ">="
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '0'
|
|
47
|
+
type: :development
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - ">="
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '0'
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: simplecov
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - ">="
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '0'
|
|
61
|
+
type: :development
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - ">="
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '0'
|
|
68
|
+
description: |-
|
|
69
|
+
ruby-plsql gem provides simple Ruby API for calling Oracle PL/SQL procedures.
|
|
70
|
+
It could be used both for accessing Oracle PL/SQL API procedures in legacy applications
|
|
71
|
+
as well as it could be used to create PL/SQL unit tests using Ruby testing libraries.
|
|
72
|
+
email: raimonds.simanovskis@gmail.com
|
|
73
|
+
executables: []
|
|
74
|
+
extensions: []
|
|
75
|
+
extra_rdoc_files:
|
|
76
|
+
- README.md
|
|
77
|
+
files:
|
|
78
|
+
- History.txt
|
|
79
|
+
- License.txt
|
|
80
|
+
- README.md
|
|
81
|
+
- VERSION
|
|
82
|
+
- lib/plsql/connection.rb
|
|
83
|
+
- lib/plsql/helpers.rb
|
|
84
|
+
- lib/plsql/jdbc_connection.rb
|
|
85
|
+
- lib/plsql/oci_connection.rb
|
|
86
|
+
- lib/plsql/package.rb
|
|
87
|
+
- lib/plsql/procedure.rb
|
|
88
|
+
- lib/plsql/procedure_call.rb
|
|
89
|
+
- lib/plsql/schema.rb
|
|
90
|
+
- lib/plsql/sequence.rb
|
|
91
|
+
- lib/plsql/sql_statements.rb
|
|
92
|
+
- lib/plsql/table.rb
|
|
93
|
+
- lib/plsql/type.rb
|
|
94
|
+
- lib/plsql/variable.rb
|
|
95
|
+
- lib/plsql/version.rb
|
|
96
|
+
- lib/plsql/view.rb
|
|
97
|
+
- lib/ruby-plsql.rb
|
|
98
|
+
- lib/ruby_plsql.rb
|
|
99
|
+
homepage: https://github.com/rsim/ruby-plsql
|
|
100
|
+
licenses:
|
|
101
|
+
- MIT
|
|
102
|
+
metadata: {}
|
|
103
|
+
rdoc_options: []
|
|
104
|
+
require_paths:
|
|
105
|
+
- lib
|
|
106
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
107
|
+
requirements:
|
|
108
|
+
- - ">="
|
|
109
|
+
- !ruby/object:Gem::Version
|
|
110
|
+
version: '0'
|
|
111
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
112
|
+
requirements:
|
|
113
|
+
- - ">="
|
|
114
|
+
- !ruby/object:Gem::Version
|
|
115
|
+
version: '0'
|
|
116
|
+
requirements: []
|
|
117
|
+
rubygems_version: 4.0.10
|
|
118
|
+
specification_version: 4
|
|
119
|
+
summary: Ruby API for calling Oracle PL/SQL procedures.
|
|
120
|
+
test_files: []
|