oci8-auto-binder 0.1.0 → 0.2.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 +4 -4
- data/.gitignore +2 -0
- data/README.md +45 -0
- data/Rakefile +17 -0
- data/lib/oci8-auto-binder/base.rb +34 -3
- data/lib/oci8-auto-binder/version.rb +1 -1
- data/oci8-auto-binder.gemspec +6 -6
- metadata +17 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7a732dcc2046abb7f0ed827822c59e0bbbd8c669
|
4
|
+
data.tar.gz: a2ec13df2972e2f67d2bd26894beac63512fc5cd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b5935ccb0d1a42d299c6c7ac666ff95f993cf5942ea4cc620bf3704102be11956bcb4b684da8971abb94595b9e58a62446a887fae40a18bf9f3512918852b486
|
7
|
+
data.tar.gz: 0943a9b0b9fafc40b7640ad4c3f0b8248e68994bf43c0edd798f7a2fa8a4d94eba5cfd9df98e9a11b48c83471bd29fc05b76029d7b63da5395a55e2c1f5df4f7
|
data/.gitignore
CHANGED
data/README.md
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
# OCI8 Auto binder
|
2
|
+
|
3
|
+
This library changes the query to parameterized query automatically.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
gem 'oci8-auto-binder'
|
11
|
+
```
|
12
|
+
|
13
|
+
And then execute:
|
14
|
+
|
15
|
+
$ bundle
|
16
|
+
|
17
|
+
Or install it yourself as:
|
18
|
+
|
19
|
+
$ gem install oci8-auto-binder
|
20
|
+
|
21
|
+
## Usage
|
22
|
+
|
23
|
+
```ruby
|
24
|
+
OCI8AutoBinder.replace_original_class!
|
25
|
+
conn = OCI8.new(username, password, ident)
|
26
|
+
conn.exec("select * from table1 where column1 = 1") do |r|
|
27
|
+
# change to prarameterized query atomatically in exec method
|
28
|
+
# query = "select * from table1 where column1 = :a0", params = {:a0 => 1}
|
29
|
+
puts r.join(',')
|
30
|
+
end
|
31
|
+
conn.logoff
|
32
|
+
```
|
33
|
+
|
34
|
+
## logging parameterized query and parameters
|
35
|
+
```ruby
|
36
|
+
OCI8AutoBinder.replace_original_class!
|
37
|
+
OCI8AutoBinder.logger = Logger.new(log_file_name)
|
38
|
+
OCI8AutoBinder.logger.level = Logger::INFO # save all log(FOUND_BINDVARS, PARSE_ERROR, NO_PARAMS, PARSE_SUCCESS)
|
39
|
+
OCI8AutoBinder.logger.level = Logger::ERROR # save parse error log(PARSE_ERROR)
|
40
|
+
```
|
41
|
+
|
42
|
+
|
43
|
+
## Contributing
|
44
|
+
|
45
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/jksy/oci8-auto-binder.
|
data/Rakefile
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
2
|
+
require 'rake'
|
3
|
+
require 'rake/testtask'
|
4
|
+
|
5
|
+
GRAMMAR_FILES = FileList['lib/oracle-sql-parser/grammar/*.treetop']
|
6
|
+
|
7
|
+
task :build_gem => [:gen_force] do
|
8
|
+
sh 'gem build oci8-auto-binder.gemspec'
|
9
|
+
end
|
10
|
+
|
11
|
+
Rake::TestTask.new do |t|
|
12
|
+
t.libs << "test"
|
13
|
+
t.test_files = FileList[
|
14
|
+
'test/oci8_test.rb',
|
15
|
+
]
|
16
|
+
t.verbose = true
|
17
|
+
end
|
@@ -4,29 +4,48 @@ require 'oracle-sql-parser'
|
|
4
4
|
module OCI8AutoBinder
|
5
5
|
ORIGINAL_OCI8 = ::OCI8
|
6
6
|
@replace = false
|
7
|
+
@logger = nil
|
8
|
+
|
9
|
+
# OCI8をOCI8AutoBinder::OCI8に置き換えます
|
10
|
+
# replace to OCI8AutoBinder::OCI8 from OCI8
|
7
11
|
def self.replace_original_class!
|
8
12
|
unless @replaced
|
9
13
|
Object.const_set(:OCI8, ::OCI8AutoBinder::OCI8)
|
10
14
|
@replaced = true
|
11
15
|
end
|
12
16
|
end
|
17
|
+
|
18
|
+
# パースした結果を保存するログファイルを渡します
|
19
|
+
# set Logger for the purpose of logging
|
20
|
+
def self.logger=(logger)
|
21
|
+
@logger = logger
|
22
|
+
end
|
23
|
+
|
24
|
+
# get logger
|
25
|
+
def self.logger
|
26
|
+
@logger
|
27
|
+
end
|
28
|
+
|
13
29
|
end
|
14
30
|
|
31
|
+
# OCI8#execを上書きし、OracleSqlParser::Grammar::GrammarParserで構文解析した結果をOCI8#execに渡します。
|
32
|
+
# Pass the result that was parsed by OracleSqlParser::Grammar::GrammarParser to OCI8#exec
|
15
33
|
class OCI8AutoBinder::OCI8 < ::OCI8
|
16
|
-
def parser
|
17
|
-
@parser ||= OracleSqlParser::Grammar::GrammarParser.new
|
18
|
-
end
|
19
34
|
|
35
|
+
# OracleSqlParser::Grammar::GrammarParserで構文解析し、NumberLiteralとTextLiteralをbinding変数としてOCI8#execに渡す
|
20
36
|
def exec_with_auto_binder(sql, *bindvars, &block)
|
21
37
|
if bindvars.length != 0
|
38
|
+
logger.info {"FOUND_BINDVARS:#{sql}, #{bindvars.inspect}"} if logger
|
22
39
|
return exec_without_auto_binder(sql, *bindvars, &block)
|
23
40
|
end
|
24
41
|
syntax_tree = parser.parse(sql)
|
25
42
|
unless syntax_tree
|
43
|
+
logger.error {"PARSE_ERROR:#{sql}, #{bindvars.inspect}"} if logger
|
26
44
|
return exec_without_auto_binder(sql, *bindvars, &block)
|
27
45
|
end
|
28
46
|
p = syntax_tree.ast.to_parameternized
|
29
47
|
if p.params.size == 0
|
48
|
+
logger.info {"NO_PARAMS:#{sql}, #{bindvars.inspect}"} if logger
|
30
49
|
return exec_without_auto_binder(sql, *bindvars, &block)
|
31
50
|
end
|
32
51
|
|
@@ -41,9 +60,21 @@ class OCI8AutoBinder::OCI8 < ::OCI8
|
|
41
60
|
end
|
42
61
|
end
|
43
62
|
|
63
|
+
logger.info {"PARSE_SUCCESS:#{sql}, #{p.to_sql}, #{values.inspect}"} if logger
|
44
64
|
return exec_without_auto_binder(p.to_sql, *values, &block)
|
45
65
|
end
|
46
66
|
|
47
67
|
alias :exec_without_auto_binder :exec
|
48
68
|
alias :exec :exec_with_auto_binder
|
69
|
+
|
70
|
+
def logger
|
71
|
+
OCI8AutoBinder.logger
|
72
|
+
end
|
73
|
+
|
74
|
+
private
|
75
|
+
# GrammerParserを取得する
|
76
|
+
# get GrammerParser
|
77
|
+
def parser
|
78
|
+
@parser ||= OracleSqlParser::Grammar::GrammarParser.new
|
79
|
+
end
|
49
80
|
end
|
data/oci8-auto-binder.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ["junichiro.kasuya@gmail.com"]
|
11
11
|
|
12
12
|
spec.summary = %q{execute parameternized query for OCI8}
|
13
|
-
spec.description = %q{
|
13
|
+
spec.description = %q{This library changes the query to parameterized query automatically.}
|
14
14
|
spec.homepage = "https://github.com/jksy/oci8-auto-binder"
|
15
15
|
spec.licenses = ["MIT"]
|
16
16
|
|
@@ -18,9 +18,9 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.require_paths = ["lib"]
|
19
19
|
|
20
20
|
spec.required_ruby_version = '>= 1.9.0'
|
21
|
-
spec.add_dependency "bundler", "
|
22
|
-
spec.add_dependency "rake", "
|
23
|
-
spec.add_dependency "test-unit", "
|
24
|
-
spec.add_dependency "ruby-oci8", "
|
25
|
-
spec.add_dependency "oracle-sql-parser", "
|
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"
|
26
26
|
end
|
metadata
CHANGED
@@ -1,86 +1,86 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oci8-auto-binder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Junichiro Kasuya
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-12-
|
11
|
+
date: 2015-12-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.10'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.10'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '10.0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: test-unit
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '3.1'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.1'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: ruby-oci8
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '2.0'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '2.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: oracle-sql-parser
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 0.5
|
75
|
+
version: '0.5'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 0.5
|
83
|
-
description:
|
82
|
+
version: '0.5'
|
83
|
+
description: This library changes the query to parameterized query automatically.
|
84
84
|
email:
|
85
85
|
- junichiro.kasuya@gmail.com
|
86
86
|
executables: []
|
@@ -89,6 +89,8 @@ extra_rdoc_files: []
|
|
89
89
|
files:
|
90
90
|
- ".gitignore"
|
91
91
|
- Gemfile
|
92
|
+
- README.md
|
93
|
+
- Rakefile
|
92
94
|
- lib/oci8-auto-binder.rb
|
93
95
|
- lib/oci8-auto-binder/base.rb
|
94
96
|
- lib/oci8-auto-binder/version.rb
|