oci8-auto-binder 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/.gitignore +3 -0
- data/Gemfile +4 -0
- data/lib/oci8-auto-binder.rb +4 -0
- data/lib/oci8-auto-binder/base.rb +49 -0
- data/lib/oci8-auto-binder/version.rb +3 -0
- data/oci8-auto-binder.gemspec +26 -0
- metadata +120 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 24d5cdbeb9e402ac300d7f8b59635756456ed8a5
|
4
|
+
data.tar.gz: e02e9f71eaf85d06f5b61c5ac3bae24c0efa513e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 259d3f4ba9b7af441130620dbddd07ce18e79655e25fd463974e2c76fffcb47efe8819eec330787b475b9ea230c85b6e2d709f7d2d7cd04e322a177cedfdc8e2
|
7
|
+
data.tar.gz: 972cc18f9870d23ec42fde6e994bbd81d78ebcefb449ddb5960a8f47d06d2dd5cd57700e17714ba5f0f7c041a914e2e83b877015240fe3cedee23ec02ee3480f
|
data/.gitignore
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'oci8'
|
2
|
+
require 'oracle-sql-parser'
|
3
|
+
|
4
|
+
module OCI8AutoBinder
|
5
|
+
ORIGINAL_OCI8 = ::OCI8
|
6
|
+
@replace = false
|
7
|
+
def self.replace_original_class!
|
8
|
+
unless @replaced
|
9
|
+
Object.const_set(:OCI8, ::OCI8AutoBinder::OCI8)
|
10
|
+
@replaced = true
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class OCI8AutoBinder::OCI8 < ::OCI8
|
16
|
+
def parser
|
17
|
+
@parser ||= OracleSqlParser::Grammar::GrammarParser.new
|
18
|
+
end
|
19
|
+
|
20
|
+
def exec_with_auto_binder(sql, *bindvars, &block)
|
21
|
+
if bindvars.length != 0
|
22
|
+
return exec_without_auto_binder(sql, *bindvars, &block)
|
23
|
+
end
|
24
|
+
syntax_tree = parser.parse(sql)
|
25
|
+
unless syntax_tree
|
26
|
+
return exec_without_auto_binder(sql, *bindvars, &block)
|
27
|
+
end
|
28
|
+
p = syntax_tree.ast.to_parameternized
|
29
|
+
if p.params.size == 0
|
30
|
+
return exec_without_auto_binder(sql, *bindvars, &block)
|
31
|
+
end
|
32
|
+
|
33
|
+
values = p.params.values.map do |v|
|
34
|
+
case v
|
35
|
+
when OracleSqlParser::Ast::NumberLiteral
|
36
|
+
v.to_decimal
|
37
|
+
when OracleSqlParser::Ast::TextLiteral
|
38
|
+
v.to_s
|
39
|
+
else
|
40
|
+
raise 'unsupported type'
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
return exec_without_auto_binder(p.to_sql, *values, &block)
|
45
|
+
end
|
46
|
+
|
47
|
+
alias :exec_without_auto_binder :exec
|
48
|
+
alias :exec :exec_with_auto_binder
|
49
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'oci8-auto-binder/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "oci8-auto-binder"
|
8
|
+
spec.version = OCI8AutoBinder::VERSION
|
9
|
+
spec.authors = ["Junichiro Kasuya"]
|
10
|
+
spec.email = ["junichiro.kasuya@gmail.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{execute parameternized query for OCI8}
|
13
|
+
spec.description = %q{execute parameternized query for OCI8}
|
14
|
+
spec.homepage = "https://github.com/jksy/oci8-auto-binder"
|
15
|
+
spec.licenses = ["MIT"]
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test)/}) }
|
18
|
+
spec.require_paths = ["lib"]
|
19
|
+
|
20
|
+
spec.required_ruby_version = '>= 1.9.0'
|
21
|
+
spec.add_dependency "bundler", ">= 1.10"
|
22
|
+
spec.add_dependency "rake", ">= 10.0"
|
23
|
+
spec.add_dependency "test-unit", ">= 3.1"
|
24
|
+
spec.add_dependency "ruby-oci8", ">= 2.0"
|
25
|
+
spec.add_dependency "oracle-sql-parser", ">= 0.5.0"
|
26
|
+
end
|
metadata
ADDED
@@ -0,0 +1,120 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: oci8-auto-binder
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Junichiro Kasuya
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-12-28 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.10'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.10'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: test-unit
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.1'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.1'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: ruby-oci8
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: oracle-sql-parser
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.5.0
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.5.0
|
83
|
+
description: execute parameternized query for OCI8
|
84
|
+
email:
|
85
|
+
- junichiro.kasuya@gmail.com
|
86
|
+
executables: []
|
87
|
+
extensions: []
|
88
|
+
extra_rdoc_files: []
|
89
|
+
files:
|
90
|
+
- ".gitignore"
|
91
|
+
- Gemfile
|
92
|
+
- lib/oci8-auto-binder.rb
|
93
|
+
- lib/oci8-auto-binder/base.rb
|
94
|
+
- lib/oci8-auto-binder/version.rb
|
95
|
+
- oci8-auto-binder.gemspec
|
96
|
+
homepage: https://github.com/jksy/oci8-auto-binder
|
97
|
+
licenses:
|
98
|
+
- MIT
|
99
|
+
metadata: {}
|
100
|
+
post_install_message:
|
101
|
+
rdoc_options: []
|
102
|
+
require_paths:
|
103
|
+
- lib
|
104
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
106
|
+
- - ">="
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: 1.9.0
|
109
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
|
+
requirements:
|
111
|
+
- - ">="
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: '0'
|
114
|
+
requirements: []
|
115
|
+
rubyforge_project:
|
116
|
+
rubygems_version: 2.4.5
|
117
|
+
signing_key:
|
118
|
+
specification_version: 4
|
119
|
+
summary: execute parameternized query for OCI8
|
120
|
+
test_files: []
|