avm-oracle 0.1.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.
- checksums.yaml +7 -0
- data/lib/avm/oracle/connection/cursor.rb +24 -0
- data/lib/avm/oracle/connection.rb +61 -0
- data/lib/avm/oracle/connection_string_builder.rb +43 -0
- data/lib/avm/oracle/instances/base.rb +28 -0
- data/lib/avm/oracle/query_builder.rb +23 -0
- data/lib/avm/oracle/version.rb +7 -0
- data/lib/avm/oracle.rb +9 -0
- metadata +96 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 2f513d5b36afa884c20e99b02b53c422074007838b7ebd5fed34adada19105e2
|
4
|
+
data.tar.gz: 9c197d66a729454b652f5e66a8b594050a368fc09f751b29429a1b40dc4fa467
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 847b3d4375508af211ee279346749064eb4fe4c08c1139895357b3a5ac2c31b78cb677a6514b9b66d1f506c4f53cc0866f6f0e4d0fa3cd3602ab52bdddb43043
|
7
|
+
data.tar.gz: c6d66f355ca37810860db5bf1cf503f37d6442a74799b264cdc5b0a3fe98c7f4e4cca848c926d8aed8d0d3fdf715d8ed75209bba8b5af071725b8b406924eb0c
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Avm
|
4
|
+
module Oracle
|
5
|
+
class Connection
|
6
|
+
class Cursor < ::SimpleDelegator
|
7
|
+
def fetch_hash
|
8
|
+
sanitized_fetch_hash
|
9
|
+
end
|
10
|
+
|
11
|
+
def sanitized_fetch_hash
|
12
|
+
r = super_fetch_hash
|
13
|
+
return nil if r.nil?
|
14
|
+
|
15
|
+
r.map { |k, v| [k.downcase.to_sym, v] }.to_h
|
16
|
+
end
|
17
|
+
|
18
|
+
def super_fetch_hash
|
19
|
+
__getobj__.fetch_hash
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avm/oracle/query_builder'
|
4
|
+
require 'oci8'
|
5
|
+
|
6
|
+
module Avm
|
7
|
+
module Oracle
|
8
|
+
class Connection
|
9
|
+
require_sub __FILE__
|
10
|
+
delegate :exec, to: :connection
|
11
|
+
|
12
|
+
def initialize(connection_string)
|
13
|
+
@connection = ::OCI8.new(connection_string)
|
14
|
+
end
|
15
|
+
|
16
|
+
def first_row(query_sql, query_args = {})
|
17
|
+
query(query_sql, query_args) { |row| return row }
|
18
|
+
nil
|
19
|
+
end
|
20
|
+
|
21
|
+
def first_value(query_sql, query_args = {})
|
22
|
+
first_row(query_sql, query_args).if_present(&:first)
|
23
|
+
end
|
24
|
+
|
25
|
+
def query(query_sql, query_args = {}, &block)
|
26
|
+
if block
|
27
|
+
query_with_block(query_sql, query_args, block)
|
28
|
+
else
|
29
|
+
query_without_block(query_sql, query_args)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def objects
|
34
|
+
@objects ||= ::Avm::Oracle::Objects.new(self)
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
attr_reader :connection
|
40
|
+
|
41
|
+
# @return [Avm::Oracle::Connection::Cursor]
|
42
|
+
def query_without_block(query_sql, query_args)
|
43
|
+
query_builder = ::Avm::Oracle::QueryBuilder.new(query_sql, query_args)
|
44
|
+
Avm::Oracle::Connection::Cursor.new(
|
45
|
+
connection.exec(query_builder.oci8_exec_sql, *query_builder.oci8_exec_bind_vars)
|
46
|
+
)
|
47
|
+
end
|
48
|
+
|
49
|
+
def query_with_block(query_sql, query_args, block)
|
50
|
+
cursor = query_without_block(query_sql, query_args)
|
51
|
+
begin
|
52
|
+
while (row = cursor.fetch_hash)
|
53
|
+
block.call(row)
|
54
|
+
end
|
55
|
+
ensure
|
56
|
+
cursor.close
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Avm
|
4
|
+
module Oracle
|
5
|
+
class ConnectionStringBuilder
|
6
|
+
DEFAULT_PORT = 1521
|
7
|
+
|
8
|
+
FIELDS = %w[user password host port service_name].freeze
|
9
|
+
|
10
|
+
attr_accessor(*FIELDS)
|
11
|
+
attr_accessor :string
|
12
|
+
|
13
|
+
def initialize(options = nil)
|
14
|
+
if options.is_a?(String)
|
15
|
+
self.string = options
|
16
|
+
elsif options.is_a?(Hash)
|
17
|
+
options.each do |k, v|
|
18
|
+
send("#{k}=", v)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def port
|
24
|
+
@port || DEFAULT_PORT
|
25
|
+
end
|
26
|
+
|
27
|
+
def build
|
28
|
+
if string
|
29
|
+
string
|
30
|
+
else
|
31
|
+
validate_fields
|
32
|
+
"#{user}/#{password}@//#{host}:#{port}/#{service_name}"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def validate_fields
|
39
|
+
FIELDS.each { |f| raise "\"#{f}\" is blank" if send(f).blank? }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'avm/instances/base'
|
4
|
+
require 'avm/oracle/connection'
|
5
|
+
require 'avm/oracle/connection_string_builder'
|
6
|
+
require 'eac_ruby_utils/core_ext'
|
7
|
+
|
8
|
+
module Avm
|
9
|
+
module Oracle
|
10
|
+
module Instances
|
11
|
+
class Base < ::Avm::Instances::Base
|
12
|
+
def database_connection
|
13
|
+
::Avm::Oracle::Connection.new(database_connection_string)
|
14
|
+
end
|
15
|
+
|
16
|
+
def database_connection_string
|
17
|
+
::Avm::Oracle::ConnectionStringBuilder.new(
|
18
|
+
host: database_hostname,
|
19
|
+
port: database_port,
|
20
|
+
user: database_username,
|
21
|
+
password: database_password,
|
22
|
+
service_name: database_name
|
23
|
+
).build
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Avm
|
4
|
+
module Oracle
|
5
|
+
class QueryBuilder
|
6
|
+
common_constructor :sql, :bind_vars, default: [{}] do
|
7
|
+
self.bind_vars = bind_vars.with_indifferent_access
|
8
|
+
end
|
9
|
+
|
10
|
+
def oci8_exec_sql
|
11
|
+
sql
|
12
|
+
end
|
13
|
+
|
14
|
+
def oci8_exec_bind_vars
|
15
|
+
bind_vars_in_sql.map { |key| bind_vars.fetch(key) }
|
16
|
+
end
|
17
|
+
|
18
|
+
def bind_vars_in_sql
|
19
|
+
sql.scan(/:([a-z][a-z0-9_]*)/i).map(&:first)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/avm/oracle.rb
ADDED
metadata
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: avm-oracle
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Put here the authors
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-05-21 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: eac_ruby_utils
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.93'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.93'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: ruby-oci8
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '2.2'
|
34
|
+
- - ">="
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 2.2.11
|
37
|
+
type: :runtime
|
38
|
+
prerelease: false
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - "~>"
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '2.2'
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 2.2.11
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: eac_ruby_gem_support
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0.5'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0.5'
|
61
|
+
description:
|
62
|
+
email:
|
63
|
+
executables: []
|
64
|
+
extensions: []
|
65
|
+
extra_rdoc_files: []
|
66
|
+
files:
|
67
|
+
- lib/avm/oracle.rb
|
68
|
+
- lib/avm/oracle/connection.rb
|
69
|
+
- lib/avm/oracle/connection/cursor.rb
|
70
|
+
- lib/avm/oracle/connection_string_builder.rb
|
71
|
+
- lib/avm/oracle/instances/base.rb
|
72
|
+
- lib/avm/oracle/query_builder.rb
|
73
|
+
- lib/avm/oracle/version.rb
|
74
|
+
homepage:
|
75
|
+
licenses: []
|
76
|
+
metadata: {}
|
77
|
+
post_install_message:
|
78
|
+
rdoc_options: []
|
79
|
+
require_paths:
|
80
|
+
- lib
|
81
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
82
|
+
requirements:
|
83
|
+
- - ">="
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
requirements: []
|
92
|
+
rubygems_version: 3.1.6
|
93
|
+
signing_key:
|
94
|
+
specification_version: 4
|
95
|
+
summary: Put here de description.
|
96
|
+
test_files: []
|