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 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
@@ -0,0 +1,3 @@
1
+ /Gemfile.lock
2
+ *.sw?
3
+ *.gem
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in sql_parser.gemspec
4
+ gemspec
@@ -0,0 +1,4 @@
1
+ module OCI8AutoBinder
2
+ end
3
+ require 'oci8-auto-binder/base.rb'
4
+ require 'oci8-auto-binder/version.rb'
@@ -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,3 @@
1
+ module OCI8AutoBinder
2
+ VERSION = "0.1.0"
3
+ 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: []