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 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