fluent-plugin-mysql 0.0.1 → 0.0.2

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.
data/.gitignore CHANGED
@@ -15,3 +15,4 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ test.conf
@@ -1,7 +1,7 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  Gem::Specification.new do |gem|
3
3
  gem.name = "fluent-plugin-mysql"
4
- gem.version = "0.0.1"
4
+ gem.version = "0.0.2"
5
5
  gem.authors = ["TAGOMORI Satoshi"]
6
6
  gem.email = ["tagomoris@gmail.com"]
7
7
  gem.description = %q{fluent plugin to insert mysql as json(single column) or insert statement}
@@ -14,7 +14,7 @@ Gem::Specification.new do |gem|
14
14
  gem.require_paths = ["lib"]
15
15
 
16
16
  gem.add_development_dependency "fluentd"
17
- gem.add_development_dependency "mysql2"
17
+ gem.add_development_dependency "mysql2-cs-bind"
18
18
  gem.add_runtime_dependency "fluentd"
19
- gem.add_runtime_dependency "mysql2"
19
+ gem.add_runtime_dependency "mysql2-cs-bind"
20
20
  end
@@ -18,7 +18,7 @@ class Fluent::MysqlOutput < Fluent::BufferedOutput
18
18
 
19
19
  def initialize
20
20
  super
21
- require 'mysql2'
21
+ require 'mysql2-cs-bind'
22
22
  end
23
23
 
24
24
  def configure(conf)
@@ -44,11 +44,10 @@ class Fluent::MysqlOutput < Fluent::BufferedOutput
44
44
 
45
45
  if @sql
46
46
  begin
47
- # using nil to pass call of @handler.escape (@handler is set in #start)
48
47
  if @format == 'json'
49
- pseudo_bind(@sql, [nil])
48
+ Mysql2::Client.pseudo_bind(@sql, [nil])
50
49
  else
51
- pseudo_bind(@sql, @key_names.map{|n| nil})
50
+ Mysql2::Client.pseudo_bind(@sql, @key_names.map{|n| nil})
52
51
  end
53
52
  rescue ArgumentError => e
54
53
  raise Fluent::ConfigError, "mismatch between sql placeholders and key_names"
@@ -68,47 +67,10 @@ class Fluent::MysqlOutput < Fluent::BufferedOutput
68
67
 
69
68
  def start
70
69
  super
71
- @handler ||= Mysql2::Client.new({:host => @host, :port => @port,
72
- :username => @username, :password => @password,
73
- :database => @database})
74
70
  end
75
71
 
76
72
  def shutdown
77
73
  super
78
- @handler.close
79
- end
80
-
81
- def pseudo_bind(sql, values)
82
- sql = sql.dup
83
-
84
- placeholders = []
85
- search_pos = 0
86
- while pos = sql.index('?', search_pos)
87
- placeholders.push(pos)
88
- search_pos = pos + 1
89
- end
90
- raise ArgumentError, "mismatch between placeholders number and values arguments" if placeholders.length != values.length
91
-
92
- while pos = placeholders.pop()
93
- rawvalue = values.pop()
94
- if rawvalue.nil?
95
- sql[pos] = 'NULL'
96
- elsif rawvalue.is_a?(Time)
97
- val = rawvalue.strftime('%Y-%m-%d %H:%M:%S')
98
- sql[pos] = "'" + val + "'"
99
- else
100
- val = @handler.escape(rawvalue.to_s)
101
- sql[pos] = "'" + val + "'"
102
- end
103
- end
104
- sql
105
- end
106
-
107
- def query(sql, *values)
108
- values = values.flatten
109
- # pseudo prepared statements
110
- return @handler.query(sql) if values.length < 1
111
- @handler.query(self.pseudo_bind(sql, values))
112
74
  end
113
75
 
114
76
  def format(tag, time, record)
@@ -116,8 +78,12 @@ class Fluent::MysqlOutput < Fluent::BufferedOutput
116
78
  end
117
79
 
118
80
  def write(chunk)
81
+ handler = Mysql2::Client.new({:host => @host, :port => @port,
82
+ :username => @username, :password => @password,
83
+ :database => @database})
119
84
  chunk.msgpack_each { |tag, time, data|
120
- query(@sql, data)
85
+ handler.xquery(@sql, data)
121
86
  }
87
+ handler.close
122
88
  end
123
89
  end
@@ -66,17 +66,6 @@ sql INSERT INTO baz (col1,col2,col3,col4) VALUES (?,?,?,?)
66
66
  }
67
67
  end
68
68
 
69
- def test_pseudo_bind
70
- d = create_driver
71
- sql = 'INSERT INTO baz SET col1=?'
72
- # assert_equal "INSERT INTO baz SET col1='HOGE'", d.instance.pseudo_bind(sql, ['HOGE'])
73
- assert_equal "INSERT INTO baz SET col1=NULL", d.instance.pseudo_bind(sql, [nil])
74
- assert_equal "INSERT INTO baz SET col1='2012-04-16 17:38:00'", d.instance.pseudo_bind(sql, [Time.local(2012, 4, 16, 17, 38, 0)])
75
- end
76
-
77
- def test_query
78
- end
79
-
80
69
  def test_format
81
70
  d = create_driver
82
71
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-mysql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-19 00:00:00.000000000 Z
12
+ date: 2012-04-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fluentd
@@ -28,7 +28,7 @@ dependencies:
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0'
30
30
  - !ruby/object:Gem::Dependency
31
- name: mysql2
31
+ name: mysql2-cs-bind
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  none: false
34
34
  requirements:
@@ -60,7 +60,7 @@ dependencies:
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  - !ruby/object:Gem::Dependency
63
- name: mysql2
63
+ name: mysql2-cs-bind
64
64
  requirement: !ruby/object:Gem::Requirement
65
65
  none: false
66
66
  requirements: