rgviz 0.36 → 0.37
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/lib/rgviz/lexer.rb +7 -4
- data/lib/rgviz/parser.rb +4 -4
- data/spec/rgviz/lexer_spec.rb +6 -4
- data/spec/rgviz/parser_spec.rb +7 -7
- metadata +3 -3
data/lib/rgviz/lexer.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
module Rgviz
|
2
2
|
class Lexer
|
3
|
-
def initialize(str)
|
3
|
+
def initialize(str, options = {})
|
4
4
|
@str = (str || '').scan(/./)
|
5
5
|
@len = @str.length
|
6
6
|
@token = Token.new
|
7
|
+
@extensions = options[:extensions]
|
7
8
|
@p = 0
|
8
9
|
end
|
9
10
|
|
@@ -120,9 +121,11 @@ module Rgviz
|
|
120
121
|
when 'n', 'N'
|
121
122
|
case c!
|
122
123
|
when 'c', 'C'
|
123
|
-
|
124
|
-
case c! when '
|
125
|
-
|
124
|
+
if @extensions
|
125
|
+
case c! when 'a', 'A'
|
126
|
+
case c! when 't', 'T'
|
127
|
+
return keyword(Token::Concat) if end_of_identifier!
|
128
|
+
end
|
126
129
|
end
|
127
130
|
end
|
128
131
|
when 't', 'T'
|
data/lib/rgviz/parser.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
module Rgviz
|
2
2
|
class Parser < Lexer
|
3
|
-
def initialize(string)
|
3
|
+
def initialize(string, options = {})
|
4
4
|
super
|
5
5
|
@query = Query.new
|
6
6
|
next_token
|
7
7
|
end
|
8
8
|
|
9
|
-
def self.parse(string)
|
10
|
-
Parser.new(string).parse
|
9
|
+
def self.parse(string, options = {})
|
10
|
+
Parser.new(string, options).parse
|
11
11
|
end
|
12
12
|
|
13
13
|
def parse
|
@@ -22,7 +22,7 @@ module Rgviz
|
|
22
22
|
parse_format
|
23
23
|
parse_options
|
24
24
|
|
25
|
-
raise ParseException.new("Expecting end of query") if @token.value != Token::EOF
|
25
|
+
raise ParseException.new("Expecting end of query, got: #{@token.string}") if @token.value != Token::EOF
|
26
26
|
@query
|
27
27
|
end
|
28
28
|
|
data/spec/rgviz/lexer_spec.rb
CHANGED
@@ -3,15 +3,15 @@ require 'rgviz'
|
|
3
3
|
include Rgviz
|
4
4
|
|
5
5
|
describe Lexer do
|
6
|
-
def self.it_lexes_keyword(str, token_value)
|
6
|
+
def self.it_lexes_keyword(str, token_value, options = {})
|
7
7
|
it "lexes #{str}" do
|
8
|
-
lex = Lexer.new str
|
8
|
+
lex = Lexer.new str, options
|
9
9
|
tok = lex.next_token
|
10
10
|
tok.value.should == token_value
|
11
11
|
end
|
12
12
|
|
13
13
|
it "lexes #{str} upcase" do
|
14
|
-
lex = Lexer.new str.upcase
|
14
|
+
lex = Lexer.new str.upcase, options
|
15
15
|
tok = lex.next_token
|
16
16
|
tok.value.should == token_value
|
17
17
|
end
|
@@ -83,7 +83,6 @@ describe Lexer do
|
|
83
83
|
it_lexes_keyword 'asc', Token::Asc
|
84
84
|
it_lexes_keyword 'avg', Token::Avg
|
85
85
|
it_lexes_keyword 'by', Token::By
|
86
|
-
it_lexes_keyword 'concat', Token::Concat
|
87
86
|
it_lexes_keyword 'contains', Token::Contains
|
88
87
|
it_lexes_keyword 'count', Token::Count
|
89
88
|
it_lexes_keyword 'date', Token::Date
|
@@ -169,4 +168,7 @@ describe Lexer do
|
|
169
168
|
it_lexes_error '!'
|
170
169
|
it_lexes_error '?'
|
171
170
|
it_lexes_error ':'
|
171
|
+
|
172
|
+
it_lexes_id 'concat'
|
173
|
+
it_lexes_keyword 'concat', Token::Concat, :extensions => true
|
172
174
|
end
|
data/spec/rgviz/parser_spec.rb
CHANGED
@@ -3,12 +3,12 @@ require 'rgviz'
|
|
3
3
|
include Rgviz
|
4
4
|
|
5
5
|
describe Parser do
|
6
|
-
def parse(string)
|
7
|
-
Parser.
|
6
|
+
def parse(string, options = {})
|
7
|
+
Parser.parse(string, options)
|
8
8
|
end
|
9
9
|
|
10
|
-
def parse_select_single_column(string)
|
11
|
-
query = parse "select #{string}"
|
10
|
+
def parse_select_single_column(string, options = {})
|
11
|
+
query = parse "select #{string}", options
|
12
12
|
select = query.select
|
13
13
|
select.columns.length.should == 1
|
14
14
|
|
@@ -200,10 +200,10 @@ describe Parser do
|
|
200
200
|
['quarter', ScalarFunctionColumn::Quarter],
|
201
201
|
['dayofweek', ScalarFunctionColumn::DayOfWeek],
|
202
202
|
['todate', ScalarFunctionColumn::ToDate],
|
203
|
-
['concat', ScalarFunctionColumn::Concat],
|
204
|
-
].each do |str, function|
|
203
|
+
['concat', ScalarFunctionColumn::Concat, true],
|
204
|
+
].each do |str, function, extensions|
|
205
205
|
it "parses #{str} function" do
|
206
|
-
col = parse_select_single_column "#{str}(col)"
|
206
|
+
col = parse_select_single_column "#{str}(col)", :extensions => extensions
|
207
207
|
col.should be_a_kind_of ScalarFunctionColumn
|
208
208
|
col.function.should == function
|
209
209
|
|
metadata
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rgviz
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 65
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: "0.
|
8
|
+
- 37
|
9
|
+
version: "0.37"
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Ary Borenszweig
|