oci8-auto-binder 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 24d5cdbeb9e402ac300d7f8b59635756456ed8a5
4
- data.tar.gz: e02e9f71eaf85d06f5b61c5ac3bae24c0efa513e
3
+ metadata.gz: 7a732dcc2046abb7f0ed827822c59e0bbbd8c669
4
+ data.tar.gz: a2ec13df2972e2f67d2bd26894beac63512fc5cd
5
5
  SHA512:
6
- metadata.gz: 259d3f4ba9b7af441130620dbddd07ce18e79655e25fd463974e2c76fffcb47efe8819eec330787b475b9ea230c85b6e2d709f7d2d7cd04e322a177cedfdc8e2
7
- data.tar.gz: 972cc18f9870d23ec42fde6e994bbd81d78ebcefb449ddb5960a8f47d06d2dd5cd57700e17714ba5f0f7c041a914e2e83b877015240fe3cedee23ec02ee3480f
6
+ metadata.gz: b5935ccb0d1a42d299c6c7ac666ff95f993cf5942ea4cc620bf3704102be11956bcb4b684da8971abb94595b9e58a62446a887fae40a18bf9f3512918852b486
7
+ data.tar.gz: 0943a9b0b9fafc40b7640ad4c3f0b8248e68994bf43c0edd798f7a2fa8a4d94eba5cfd9df98e9a11b48c83471bd29fc05b76029d7b63da5395a55e2c1f5df4f7
data/.gitignore CHANGED
@@ -1,3 +1,5 @@
1
1
  /Gemfile.lock
2
2
  *.sw?
3
3
  *.gem
4
+ /test/db_config.yml
5
+ /test/test.log
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
@@ -1,3 +1,3 @@
1
1
  module OCI8AutoBinder
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -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{execute parameternized query for OCI8}
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", ">= 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"
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.1.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-28 00:00:00.000000000 Z
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.0
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.0
83
- description: execute parameternized query for OCI8
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