fluent-plugin-filter_where 1.0.2 → 1.0.3
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/CHANGELOG.md +6 -0
- data/README.md +18 -15
- data/fluent-plugin-filter_where.gemspec +1 -1
- data/lib/fluent/plugin/filter_where/parser.rex +2 -1
- data/lib/fluent/plugin/filter_where/parser.rex.rb +2 -1
- data/test/test_where_parser.rb +11 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 755d2162c27bded3c029e34aecdb63f931f4e00f
|
4
|
+
data.tar.gz: 28bc4cb1e1ae126f3ae0a7b47662b145c3dcc6d4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eef617fe16e6981af9d8853b9c5fdaca3f78b5aad81f70f01473291bae16cd3fdd994fe04f6a6bafc653181b4337a8ee51370607ad779a417ea0ddf4cb8bc58d
|
7
|
+
data.tar.gz: 787fda5c049763e1eedd4dd6f18dccb18127c5d8e8447382136b9e9037771b3b36c36197f895a8d5dfc50f62b0378b3133eaea4cf0ebcbdac3f6d099d7573ab4
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -36,7 +36,7 @@ Use RubyGems:
|
|
36
36
|
Example:
|
37
37
|
|
38
38
|
```sql
|
39
|
-
where (string_key START_WITH 'str' AND number_key > 1.0) OR ("true_key" = true AND string_key REGEXP '^reg')
|
39
|
+
where (string_key START_WITH 'str' AND number_key > 1.0) OR ("true_key" = true AND NOT (string_key REGEXP '^reg'))
|
40
40
|
```
|
41
41
|
|
42
42
|
## Literals
|
@@ -65,22 +65,22 @@ Characters matching with a regular expression `[a-zA-Z_][a-zA-z0-9_]*` such as `
|
|
65
65
|
|
66
66
|
### Boolean Operator
|
67
67
|
|
68
|
-
*
|
69
|
-
*
|
68
|
+
* `=`: Equal operator
|
69
|
+
* `!=`, `<>`: Not equal operator
|
70
70
|
|
71
71
|
### Number Operator (Long and Double)
|
72
72
|
|
73
|
-
*
|
74
|
-
*
|
75
|
-
*
|
76
|
-
*
|
77
|
-
*
|
78
|
-
*
|
73
|
+
* `=`: Equal operator
|
74
|
+
* `!=`, `<>`: Not equal operator
|
75
|
+
* `>`: Greater than operator
|
76
|
+
* `>=`: Greater than or equal operator
|
77
|
+
* `<=`: Less than or equal operator
|
78
|
+
* `<`: Less than operator
|
79
79
|
|
80
80
|
### String Operator
|
81
81
|
|
82
|
-
*
|
83
|
-
*
|
82
|
+
* `=`: Equal operator
|
83
|
+
* `!=`, `<>`: Not equal operator
|
84
84
|
* `START_WITH`
|
85
85
|
* `END_WITH`
|
86
86
|
* `INCLUDE`
|
@@ -90,11 +90,14 @@ Characters matching with a regular expression `[a-zA-Z_][a-zA-z0-9_]*` such as `
|
|
90
90
|
|
91
91
|
Not supported yet
|
92
92
|
|
93
|
-
###
|
93
|
+
### Negate Operator
|
94
94
|
|
95
|
-
*
|
96
|
-
|
97
|
-
|
95
|
+
* `NOT xxx`
|
96
|
+
|
97
|
+
### NULL Operator
|
98
|
+
|
99
|
+
* `IS NULL`
|
100
|
+
* `IS NOT NULL`
|
98
101
|
|
99
102
|
## ChangeLog
|
100
103
|
|
@@ -3,7 +3,7 @@ $:.push File.expand_path('../lib', __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
5
|
gem.name = "fluent-plugin-filter_where"
|
6
|
-
gem.version = "1.0.
|
6
|
+
gem.version = "1.0.3"
|
7
7
|
gem.authors = ["Naotoshi Seo"]
|
8
8
|
gem.email = "sonots@gmail.com"
|
9
9
|
gem.homepage = "https://github.com/sonots/fluent-plugin-filter_where"
|
@@ -86,6 +86,7 @@ rule
|
|
86
86
|
:STRING \\ { @string << "\\"; nil }
|
87
87
|
|
88
88
|
inner
|
89
|
+
require 'logger'
|
89
90
|
attr_reader :log
|
90
91
|
def initialize(log: nil)
|
91
92
|
@log = log || ::Logger.new(nil)
|
@@ -93,6 +94,6 @@ inner
|
|
93
94
|
end
|
94
95
|
|
95
96
|
def on_error(error_token_id, error_value, value_stack)
|
96
|
-
raise Fluent::ConfigError.new("filter_where: failed to parse where value_stack:#{value_stack} error_value:#{error_value.inspect}")
|
97
|
+
raise Fluent::ConfigError.new("filter_where: failed to parse \"where\" value_stack:#{value_stack} error_value:#{error_value.inspect}")
|
97
98
|
end
|
98
99
|
end
|
@@ -200,12 +200,13 @@ class Fluent::FilterWhere::Parser < Racc::Parser
|
|
200
200
|
token
|
201
201
|
end # def _next_token
|
202
202
|
|
203
|
+
require 'logger'
|
203
204
|
attr_reader :log
|
204
205
|
def initialize(log: nil)
|
205
206
|
@log = log || ::Logger.new(nil)
|
206
207
|
super()
|
207
208
|
end
|
208
209
|
def on_error(error_token_id, error_value, value_stack)
|
209
|
-
raise Fluent::ConfigError.new("filter_where: failed to parse where value_stack:#{value_stack} error_value:#{error_value.inspect}")
|
210
|
+
raise Fluent::ConfigError.new("filter_where: failed to parse \"where\" value_stack:#{value_stack} error_value:#{error_value.inspect}")
|
210
211
|
end
|
211
212
|
end # class
|
data/test/test_where_parser.rb
CHANGED
@@ -53,6 +53,8 @@ class WhereParserTest < Test::Unit::TestCase
|
|
53
53
|
assert_true(result.eval(record))
|
54
54
|
result = parser.scan(%q[boolean != false])
|
55
55
|
assert_true(result.eval(record))
|
56
|
+
result = parser.scan(%q[boolean <> false])
|
57
|
+
assert_true(result.eval(record))
|
56
58
|
assert_raise(Fluent::ConfigError) { parser.scan(%q[boolean > false]) }
|
57
59
|
end
|
58
60
|
|
@@ -61,6 +63,8 @@ class WhereParserTest < Test::Unit::TestCase
|
|
61
63
|
assert_true(result.eval(record))
|
62
64
|
result = parser.scan(%q[integer != 0])
|
63
65
|
assert_true(result.eval(record))
|
66
|
+
result = parser.scan(%q[integer <> 0])
|
67
|
+
assert_true(result.eval(record))
|
64
68
|
result = parser.scan(%q[integer > 0])
|
65
69
|
assert_true(result.eval(record))
|
66
70
|
result = parser.scan(%q[integer >= 0])
|
@@ -76,6 +80,8 @@ class WhereParserTest < Test::Unit::TestCase
|
|
76
80
|
assert_true(result.eval(record))
|
77
81
|
result = parser.scan(%q[string != 'foobar'])
|
78
82
|
assert_true(result.eval(record))
|
83
|
+
result = parser.scan(%q[string <> 'foobar'])
|
84
|
+
assert_true(result.eval(record))
|
79
85
|
result = parser.scan(%q[string start_with'str'])
|
80
86
|
assert_true(result.eval(record))
|
81
87
|
result = parser.scan(%q[string end_with 'ing'])
|
@@ -100,4 +106,9 @@ class WhereParserTest < Test::Unit::TestCase
|
|
100
106
|
result = parser.scan(%q[boolean = true OR string = 'foobar'])
|
101
107
|
assert_true(result.eval(record))
|
102
108
|
end
|
109
|
+
|
110
|
+
def test_negate_op
|
111
|
+
result = parser.scan(%q[NOT boolean = true])
|
112
|
+
assert_false(result.eval(record))
|
113
|
+
end
|
103
114
|
end
|