influxdb-arel 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +2 -0
- data/Gemfile +1 -0
- data/README.md +218 -124
- data/lib/influxdb/arel.rb +25 -16
- data/lib/influxdb/arel/builder.rb +209 -0
- data/lib/influxdb/arel/clauses.rb +6 -0
- data/lib/influxdb/arel/clauses/base.rb +34 -0
- data/lib/influxdb/arel/clauses/expressions.rb +75 -0
- data/lib/influxdb/arel/clauses/from_clause.rb +45 -0
- data/lib/influxdb/arel/clauses/group_clause.rb +34 -0
- data/lib/influxdb/arel/clauses/select_clause.rb +37 -0
- data/lib/influxdb/arel/clauses/where_clause.rb +102 -0
- data/lib/influxdb/arel/core_extensions.rb +5 -21
- data/lib/influxdb/arel/delete_manager.rb +50 -0
- data/lib/influxdb/arel/extensions.rb +6 -0
- data/lib/influxdb/arel/extensions/alias_predication.rb +11 -0
- data/lib/influxdb/arel/extensions/boolean_predications.rb +15 -0
- data/lib/influxdb/arel/extensions/expressions.rb +75 -0
- data/lib/influxdb/arel/extensions/joining_merging.rb +21 -0
- data/lib/influxdb/arel/extensions/math.rb +23 -0
- data/lib/influxdb/arel/extensions/predications.rb +144 -0
- data/lib/influxdb/arel/nodes.rb +7 -14
- data/lib/influxdb/arel/nodes/attribute.rb +20 -0
- data/lib/influxdb/arel/nodes/binary.rb +4 -3
- data/lib/influxdb/arel/nodes/delete_statement.rb +37 -0
- data/lib/influxdb/arel/nodes/duration.rb +3 -3
- data/lib/influxdb/arel/nodes/function.rb +2 -2
- data/lib/influxdb/arel/nodes/grouping.rb +3 -3
- data/lib/influxdb/arel/nodes/infix_operation.rb +11 -4
- data/lib/influxdb/arel/nodes/merge.rb +13 -0
- data/lib/influxdb/arel/nodes/node.rb +18 -6
- data/lib/influxdb/arel/nodes/now.rb +1 -1
- data/lib/influxdb/arel/nodes/ordering.rb +15 -0
- data/lib/influxdb/arel/nodes/select_statement.rb +10 -8
- data/lib/influxdb/arel/nodes/sql_literal.rb +5 -8
- data/lib/influxdb/arel/nodes/table.rb +19 -0
- data/lib/influxdb/arel/nodes/table_alias.rb +2 -4
- data/lib/influxdb/arel/nodes/unary.rb +6 -1
- data/lib/influxdb/arel/quoter.rb +85 -0
- data/lib/influxdb/arel/select_manager.rb +111 -64
- data/lib/influxdb/arel/tree_manager.rb +15 -5
- data/lib/influxdb/arel/version.rb +1 -1
- data/lib/influxdb/arel/visitor.rb +96 -126
- data/lib/influxdb/arel/visitor/delete_statement.rb +32 -0
- data/lib/influxdb/arel/visitor/select_statement.rb +59 -0
- data/lib/influxdb/arel/visitor/where_statement.rb +14 -0
- data/spec/lib/influxdb/arel/builder_spec.rb +173 -0
- data/spec/lib/influxdb/arel/core_extensions_spec.rb +0 -21
- data/spec/lib/influxdb/arel/nodes/and_spec.rb +6 -9
- data/spec/lib/influxdb/arel/nodes/attribute_spec.rb +21 -0
- data/spec/lib/influxdb/arel/nodes/binary_spec.rb +0 -4
- data/spec/lib/influxdb/arel/nodes/duration_spec.rb +1 -0
- data/spec/lib/influxdb/arel/nodes/in_spec.rb +1 -0
- data/spec/lib/influxdb/arel/nodes/infix_operation_spec.rb +17 -0
- data/spec/lib/influxdb/arel/nodes/merge_spec.rb +25 -0
- data/spec/lib/influxdb/arel/nodes/now_spec.rb +1 -0
- data/spec/lib/influxdb/arel/nodes/ordering_spec.rb +19 -0
- data/spec/lib/influxdb/arel/nodes/sql_literal_spec.rb +1 -5
- data/spec/lib/influxdb/arel/nodes/table_alias_spec.rb +3 -10
- data/spec/lib/influxdb/arel/nodes/table_spec.rb +8 -0
- data/spec/lib/influxdb/arel/nodes/unary_spec.rb +0 -4
- data/spec/lib/influxdb/arel/quoter/repository_spec.rb +10 -0
- data/spec/lib/influxdb/arel/quoter_spec.rb +33 -0
- data/spec/lib/influxdb/arel/select_manager_spec.rb +356 -156
- data/spec/lib/influxdb/arel_spec.rb +22 -0
- data/spec/spec_helper.rb +15 -0
- data/spec/support/examples/binary_node.rb +1 -0
- data/spec/support/examples/function_node.rb +1 -0
- data/spec/support/examples/infix_operation_node.rb +15 -0
- data/spec/support/examples/node_boolean_predications.rb +21 -0
- data/spec/support/examples/node_joining_merging.rb +53 -0
- data/spec/support/examples/unary_node.rb +1 -0
- data/spec/support/fabrics.rb +3 -3
- metadata +49 -11
- data/lib/influxdb/arel/alias_predication.rb +0 -9
- data/lib/influxdb/arel/attributes.rb +0 -1
- data/lib/influxdb/arel/attributes/attribute.rb +0 -74
- data/lib/influxdb/arel/expressions.rb +0 -73
- data/lib/influxdb/arel/math.rb +0 -21
- data/lib/influxdb/arel/predications.rb +0 -137
- data/lib/influxdb/arel/table.rb +0 -219
- data/spec/lib/influxdb/arel/table_spec.rb +0 -193
@@ -0,0 +1,32 @@
|
|
1
|
+
module Influxdb
|
2
|
+
module Arel
|
3
|
+
class Visitor
|
4
|
+
class DeleteStatement
|
5
|
+
include WhereStatement
|
6
|
+
|
7
|
+
attr_reader :visitor
|
8
|
+
|
9
|
+
def initialize(visitor)
|
10
|
+
@visitor = visitor
|
11
|
+
end
|
12
|
+
|
13
|
+
def visit(object)
|
14
|
+
build_from(object)
|
15
|
+
build_wheres(object)
|
16
|
+
|
17
|
+
result.strip
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def build_from(object)
|
23
|
+
result << " FROM #{visitor.accept(object.table)}"
|
24
|
+
end
|
25
|
+
|
26
|
+
def result
|
27
|
+
@result ||= 'DELETE'
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Influxdb
|
2
|
+
module Arel
|
3
|
+
class Visitor
|
4
|
+
class SelectStatement
|
5
|
+
include WhereStatement
|
6
|
+
|
7
|
+
attr_reader :visitor
|
8
|
+
|
9
|
+
def initialize(visitor)
|
10
|
+
@visitor = visitor
|
11
|
+
end
|
12
|
+
|
13
|
+
def visit(object)
|
14
|
+
build_attributes(object)
|
15
|
+
build_from(object)
|
16
|
+
build_wheres(object)
|
17
|
+
build_groups(object)
|
18
|
+
build_rest_of_clauses(object)
|
19
|
+
|
20
|
+
result.strip
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def build_rest_of_clauses(object)
|
26
|
+
result << " #{visitor.accept(object.order)}" if object.order
|
27
|
+
result << " #{visitor.accept(object.limit)}" if object.limit
|
28
|
+
result << " #{visitor.accept(object.into)}" if object.into
|
29
|
+
end
|
30
|
+
|
31
|
+
def build_attributes(object)
|
32
|
+
unless object.attributes.empty?
|
33
|
+
result << SPACE
|
34
|
+
result << object.attributes.map{|attribute| visitor.accept(attribute) }.join(COMMA)
|
35
|
+
else
|
36
|
+
result << SPACE
|
37
|
+
result << Arel.star
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def build_from(object)
|
42
|
+
result << " FROM #{visitor.accept(object.table)}"
|
43
|
+
end
|
44
|
+
|
45
|
+
def build_groups(object)
|
46
|
+
unless object.groups.empty?
|
47
|
+
result << GROUP_BY
|
48
|
+
result << object.groups.map{|group| visitor.accept(group) }.join(COMMA)
|
49
|
+
result << " #{visitor.accept(object.fill)}" if object.fill
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def result
|
54
|
+
@result ||= 'SELECT'
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Influxdb
|
2
|
+
module Arel
|
3
|
+
class Visitor
|
4
|
+
module WhereStatement
|
5
|
+
def build_wheres(object)
|
6
|
+
unless object.wheres.empty?
|
7
|
+
result << WHERE
|
8
|
+
result << object.wheres.map{|where| visitor.accept(where) }.join(AND)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,173 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Influxdb::Arel::Builder do
|
4
|
+
describe '#from' do
|
5
|
+
subject{ builder(:events).from(:table) }
|
6
|
+
specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
|
7
|
+
specify{ expect(subject.ast.tables).to eq([node(:Table, :table)]) }
|
8
|
+
specify{ expect(subject.to_sql).to eq('SELECT * FROM table') }
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '#merge' do
|
12
|
+
subject{ builder(:events).merge(:errors) }
|
13
|
+
specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
|
14
|
+
specify{ expect(subject.ast.merge).to eq(node(:Merge, node(:Table, :events), node(:Table, :errors))) }
|
15
|
+
specify{ expect(subject.to_sql).to eq('SELECT * FROM events MERGE errors') }
|
16
|
+
|
17
|
+
context 'when table as argument' do
|
18
|
+
subject{ builder(:events).merge(node(:Table, :errors)) }
|
19
|
+
|
20
|
+
specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
|
21
|
+
specify{ expect(subject.ast.merge).to eq(node(:Merge, node(:Table, :events), node(:Table, :errors))) }
|
22
|
+
specify{ expect(subject.to_sql).to eq('SELECT * FROM events MERGE errors') }
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'without argument' do
|
26
|
+
subject{ builder(:events).merge }
|
27
|
+
specify{ expect{ subject }.to raise_error }
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'without argument with more than two tables' do
|
31
|
+
subject{ builder.from(:events, :errors, :logs).merge }
|
32
|
+
specify{ expect{ subject }.to raise_error }
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'without argument with two tables' do
|
36
|
+
subject{ builder.from(:events, :errors).merge }
|
37
|
+
specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
|
38
|
+
specify{ expect(subject.ast.merge).to eq(node(:Merge, node(:Table, :events), node(:Table, :errors))) }
|
39
|
+
specify{ expect(subject.to_sql).to eq('SELECT * FROM events MERGE errors') }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe '#join' do
|
44
|
+
subject{ builder(:events).join(:errors) }
|
45
|
+
specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
|
46
|
+
specify{ expect(subject.ast.join).to eq(node(:Join, node(:Table, :events), node(:Table, :errors))) }
|
47
|
+
specify{ expect(subject.to_sql).to eq('SELECT * FROM events INNER JOIN errors') }
|
48
|
+
|
49
|
+
context 'when table as argument' do
|
50
|
+
subject{ builder(:events).join(node(:Table, :errors)) }
|
51
|
+
|
52
|
+
specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
|
53
|
+
specify{ expect(subject.ast.join).to eq(node(:Join, node(:Table, :events), node(:Table, :errors))) }
|
54
|
+
specify{ expect(subject.to_sql).to eq('SELECT * FROM events INNER JOIN errors') }
|
55
|
+
end
|
56
|
+
|
57
|
+
context 'without argument' do
|
58
|
+
subject{ builder(:events).join }
|
59
|
+
specify{ expect{ subject }.to raise_error }
|
60
|
+
end
|
61
|
+
|
62
|
+
context 'without argument with more than two tables' do
|
63
|
+
subject{ builder.from(:events, :errors, :logs).join }
|
64
|
+
specify{ expect{ subject }.to raise_error }
|
65
|
+
end
|
66
|
+
|
67
|
+
context 'without argument with two tables' do
|
68
|
+
subject{ builder.from(:events, :errors).join }
|
69
|
+
specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
|
70
|
+
specify{ expect(subject.ast.join).to eq(node(:Join, node(:Table, :events), node(:Table, :errors))) }
|
71
|
+
specify{ expect(subject.to_sql).to eq('SELECT * FROM events INNER JOIN errors') }
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe '#order' do
|
76
|
+
context 'when sort by ascending order' do
|
77
|
+
subject{ builder(:events).order(:asc) }
|
78
|
+
specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
|
79
|
+
specify{ expect(subject.order_value).to eq(node(:Ordering, 'asc')) }
|
80
|
+
specify{ expect(subject.to_sql).to eq('SELECT * FROM events ORDER ASC') }
|
81
|
+
end
|
82
|
+
|
83
|
+
context 'when sort by ascending order' do
|
84
|
+
subject{ builder(:events).order('asc') }
|
85
|
+
specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
|
86
|
+
specify{ expect(subject.order_value).to eq(node(:Ordering, 'asc')) }
|
87
|
+
specify{ expect(subject.to_sql).to eq('SELECT * FROM events ORDER ASC') }
|
88
|
+
end
|
89
|
+
|
90
|
+
context 'when sort by descending order' do
|
91
|
+
subject{ builder(:events).order(:desc) }
|
92
|
+
specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
|
93
|
+
specify{ expect(subject.order_value).to eq(node(:Ordering, 'desc')) }
|
94
|
+
specify{ expect(subject.to_sql).to eq('SELECT * FROM events ORDER DESC') }
|
95
|
+
end
|
96
|
+
|
97
|
+
context 'when sort by descending order' do
|
98
|
+
subject{ builder(:events).order('desc') }
|
99
|
+
specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
|
100
|
+
specify{ expect(subject.order_value).to eq(node(:Ordering, 'desc')) }
|
101
|
+
specify{ expect(subject.to_sql).to eq('SELECT * FROM events ORDER DESC') }
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
describe '#asc' do
|
106
|
+
subject{ builder(:events).asc }
|
107
|
+
specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
|
108
|
+
specify{ expect(subject.order_value).to eq(node(:Ordering, 'asc')) }
|
109
|
+
specify{ expect(subject.to_sql).to eq('SELECT * FROM events ORDER ASC') }
|
110
|
+
end
|
111
|
+
|
112
|
+
describe '#desc' do
|
113
|
+
subject{ builder(:events).desc }
|
114
|
+
specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
|
115
|
+
specify{ expect(subject.order_value).to eq(node(:Ordering, 'desc')) }
|
116
|
+
specify{ expect(subject.to_sql).to eq('SELECT * FROM events ORDER DESC') }
|
117
|
+
end
|
118
|
+
|
119
|
+
describe '#limit' do
|
120
|
+
subject{ builder(:events).limit(100) }
|
121
|
+
specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
|
122
|
+
specify{ expect(subject.limit_value).to eq(node(:Limit, 100)) }
|
123
|
+
specify{ expect(subject.to_sql).to eq('SELECT * FROM events LIMIT 100') }
|
124
|
+
end
|
125
|
+
|
126
|
+
describe '#group' do
|
127
|
+
subject{ builder(:events).group{ [time('1s'), 'name', :type] } }
|
128
|
+
specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
|
129
|
+
specify{ expect(subject.group_values).to eq([
|
130
|
+
node(:Time, '1s'), node(:Attribute, 'name'), node(:Attribute, 'type')
|
131
|
+
]) }
|
132
|
+
specify{ expect(subject.to_sql).to eq('SELECT * FROM events GROUP BY time(1s), name, type') }
|
133
|
+
|
134
|
+
context 'chaining' do
|
135
|
+
subject{ builder(:events).group{ time('1s') }.group('name', :type) }
|
136
|
+
specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
|
137
|
+
specify{ expect(subject.ast.groups).to eq([
|
138
|
+
node(:Time, '1s'), node(:Attribute, 'name'), node(:Attribute, 'type')
|
139
|
+
]) }
|
140
|
+
specify{ expect(subject.to_sql).to eq('SELECT * FROM events GROUP BY time(1s), name, type') }
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
describe '#where' do
|
145
|
+
subject{ builder(:events).where("name = 'Undr'") }
|
146
|
+
specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
|
147
|
+
specify{ expect(subject.where_values).to eq([sql("name = 'Undr'")]) }
|
148
|
+
specify{ expect(subject.to_sql).to eq("SELECT * FROM events WHERE name = 'Undr'") }
|
149
|
+
|
150
|
+
context 'chaining' do
|
151
|
+
subject{ builder(:events).where("name = 'Undr'").where(sql("email = 'undr@gmail.com'")) }
|
152
|
+
specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
|
153
|
+
specify{ expect(subject.where_values).to eq([sql("name = 'Undr'"), sql("email = 'undr@gmail.com'")]) }
|
154
|
+
specify{ expect(subject.to_sql).to eq("SELECT * FROM events WHERE name = 'Undr' AND email = 'undr@gmail.com'") }
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
describe '#select' do
|
159
|
+
subject{ builder('events').select('name', :type) }
|
160
|
+
specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
|
161
|
+
specify{ expect(subject.select_values).to eq([node(:Attribute, 'name'), node(:Attribute, 'type')]) }
|
162
|
+
specify{ expect(subject.to_sql).to eq('SELECT name, type FROM events') }
|
163
|
+
|
164
|
+
context 'chaining' do
|
165
|
+
subject{ builder('events').select{ time }.select('name', :type) }
|
166
|
+
specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
|
167
|
+
specify{ expect(subject.select_values).to eq(
|
168
|
+
[node(:Attribute, 'time'), node(:Attribute, 'name'), node(:Attribute, 'type')]
|
169
|
+
) }
|
170
|
+
specify{ expect(subject.to_sql).to eq('SELECT time, name, type FROM events') }
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
@@ -26,24 +26,3 @@ describe Integer do
|
|
26
26
|
specify{ expect(1.w).to eq(node(:Duration, 1, sql('w'))) }
|
27
27
|
end
|
28
28
|
end
|
29
|
-
|
30
|
-
|
31
|
-
describe String do
|
32
|
-
describe '#as' do
|
33
|
-
specify{ expect('MEAN(value)'.as('mean')).to eq(node(:As, sql('MEAN(value)'), 'mean')) }
|
34
|
-
end
|
35
|
-
|
36
|
-
describe '#to_arel' do
|
37
|
-
specify{ expect('events'.to_arel).to eq(sql('events')) }
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
describe Symbol do
|
42
|
-
describe '#as' do
|
43
|
-
specify{ expect(:events.as('alias')).to eq(node(:TableAlias, table(:events), 'alias')) }
|
44
|
-
end
|
45
|
-
|
46
|
-
describe '#to_arel' do
|
47
|
-
specify{ expect(:events.to_arel).to eq(table(:events)) }
|
48
|
-
end
|
49
|
-
end
|
@@ -1,17 +1,14 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Influxdb::Arel::Nodes::And do
|
4
|
-
|
5
|
-
subject{ node(:And, ['first', sql('second'), 'third']).to_sql }
|
4
|
+
let(:described_node){ node(:And, ['first', sql('second'), 'third']) }
|
6
5
|
|
7
|
-
|
8
|
-
|
6
|
+
it_should_behave_like :node_to_sql, "'first' AND second AND 'third'"
|
7
|
+
it_should_behave_like :node_boolean_predications, "'first' AND second AND 'third'"
|
9
8
|
|
10
9
|
describe '#eql?' do
|
11
|
-
|
12
|
-
|
13
|
-
specify{ expect(
|
14
|
-
specify{ expect(subject.eql?(node(:And, ['first', 'second', 'third']))).to be_truthy }
|
15
|
-
specify{ expect(subject.eql?(node(:And, ['first', 'second', 'third', 'fourth']))).to be_falsy }
|
10
|
+
specify{ expect(described_node.eql?(node(:And, ['first', sql('second'), 'third']))).to be_truthy }
|
11
|
+
specify{ expect(described_node.eql?(node(:And, ['first', 'second', 'third']))).to be_truthy }
|
12
|
+
specify{ expect(described_node.eql?(node(:And, ['first', 'second', 'third', 'fourth']))).to be_falsy }
|
16
13
|
end
|
17
14
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Influxdb::Arel::Nodes::Attribute do
|
4
|
+
let(:described_node){ node(:Attribute, 'value') }
|
5
|
+
|
6
|
+
it_should_behave_like :unary_node, :Attribute, 'value'
|
7
|
+
it_should_behave_like :node_as, 'value'
|
8
|
+
it_should_behave_like :node_expressions, 'value'
|
9
|
+
it_should_behave_like :node_predications, 'value'
|
10
|
+
it_should_behave_like :node_math, 'value'
|
11
|
+
|
12
|
+
describe '#time?' do
|
13
|
+
specify{ expect(node(:Attribute, 'value').time?).to be_falsy }
|
14
|
+
specify{ expect(node(:Attribute, 'time').time?).to be_truthy }
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#sequence_number?' do
|
18
|
+
specify{ expect(node(:Attribute, 'value').sequence_number?).to be_falsy }
|
19
|
+
specify{ expect(node(:Attribute, 'sequence_number').sequence_number?).to be_truthy }
|
20
|
+
end
|
21
|
+
end
|
@@ -36,10 +36,6 @@ describe Influxdb::Arel::Nodes::Matches do
|
|
36
36
|
it_should_behave_like :binary_node, :Matches, 'left =~ right'
|
37
37
|
end
|
38
38
|
|
39
|
-
describe Influxdb::Arel::Nodes::Merge do
|
40
|
-
it_should_behave_like :binary_node, :Merge, 'left MERGE right'
|
41
|
-
end
|
42
|
-
|
43
39
|
describe Influxdb::Arel::Nodes::NotEqual do
|
44
40
|
it_should_behave_like :binary_node, :NotEqual, 'left <> right'
|
45
41
|
end
|
@@ -4,6 +4,7 @@ describe Influxdb::Arel::Nodes::Duration do
|
|
4
4
|
let(:described_node){ node(:Duration, 10, 'h') }
|
5
5
|
|
6
6
|
it_should_behave_like :node_to_sql, '10h'
|
7
|
+
it_should_behave_like :node_boolean_predications, '10h'
|
7
8
|
|
8
9
|
describe '#eql?' do
|
9
10
|
specify{ expect(described_node.eql?(node(:Duration, 10, 'h'))).to be_truthy }
|
@@ -4,6 +4,7 @@ describe Influxdb::Arel::Nodes::In do
|
|
4
4
|
let(:described_node){ node(:In, sql('left'), [1, 2, 3]) }
|
5
5
|
|
6
6
|
it_should_behave_like :node_to_sql, 'left IN (1, 2, 3)'
|
7
|
+
it_should_behave_like :node_boolean_predications, 'left IN (1, 2, 3)'
|
7
8
|
|
8
9
|
describe '#eql?' do
|
9
10
|
specify{ expect(described_node.eql?(node(:In, sql('left'), [1, 2, 3]))).to be_truthy }
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Influxdb::Arel::Nodes::Multiplication do
|
4
|
+
it_should_behave_like :infix_operation_node, :Multiplication, 'left * right'
|
5
|
+
end
|
6
|
+
|
7
|
+
describe Influxdb::Arel::Nodes::Division do
|
8
|
+
it_should_behave_like :infix_operation_node, :Division, 'left / right'
|
9
|
+
end
|
10
|
+
|
11
|
+
describe Influxdb::Arel::Nodes::Addition do
|
12
|
+
it_should_behave_like :infix_operation_node, :Addition, 'left + right'
|
13
|
+
end
|
14
|
+
|
15
|
+
describe Influxdb::Arel::Nodes::Subtraction do
|
16
|
+
it_should_behave_like :infix_operation_node, :Subtraction, 'left - right'
|
17
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Influxdb::Arel::Nodes::Merge do
|
4
|
+
describe 'initialization' do
|
5
|
+
let(:described_node){ node(:Merge, left, right) }
|
6
|
+
|
7
|
+
context 'with tables' do
|
8
|
+
let(:left){ node(:Table, 'left') }
|
9
|
+
let(:right){ node(:Table, 'right') }
|
10
|
+
|
11
|
+
specify{ expect(described_node.left).to be_instance_of(Influxdb::Arel::Nodes::Table) }
|
12
|
+
specify{ expect(described_node.right).to be_instance_of(Influxdb::Arel::Nodes::Table) }
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'with aliases' do
|
16
|
+
let(:left){ node(:Table, 'left').as(:alias1) }
|
17
|
+
let(:right){ node(:Table, 'right').as(:alias2) }
|
18
|
+
|
19
|
+
specify{ expect(described_node.left).to be_instance_of(Influxdb::Arel::Nodes::Table) }
|
20
|
+
specify{ expect(described_node.right).to be_instance_of(Influxdb::Arel::Nodes::Table) }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
it_should_behave_like :binary_node, :Merge, 'left MERGE right'
|
25
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Influxdb::Arel::Nodes::Ordering do
|
4
|
+
it_should_behave_like :unary_node, :Ordering, 'ORDER VALUE'
|
5
|
+
|
6
|
+
describe '#invert' do
|
7
|
+
subject{ node(:Ordering, direction).invert }
|
8
|
+
|
9
|
+
context 'from ascending order' do
|
10
|
+
let(:direction){ :asc }
|
11
|
+
specify{ expect(subject).to eq(node(:Ordering, :desc)) }
|
12
|
+
end
|
13
|
+
|
14
|
+
context 'from descending order' do
|
15
|
+
let(:direction){ :desc }
|
16
|
+
specify{ expect(subject).to eq(node(:Ordering, :asc)) }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|