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.
@@ -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
@@ -0,0 +1,3 @@
1
+ module PLSQL # :nodoc:
2
+ VERSION = File.read(File.dirname(__FILE__) + "/../../VERSION").chomp
3
+ 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: []