influxdb-arel 0.0.1 → 0.1.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.
Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -0
  3. data/Gemfile +1 -0
  4. data/README.md +218 -124
  5. data/lib/influxdb/arel.rb +25 -16
  6. data/lib/influxdb/arel/builder.rb +209 -0
  7. data/lib/influxdb/arel/clauses.rb +6 -0
  8. data/lib/influxdb/arel/clauses/base.rb +34 -0
  9. data/lib/influxdb/arel/clauses/expressions.rb +75 -0
  10. data/lib/influxdb/arel/clauses/from_clause.rb +45 -0
  11. data/lib/influxdb/arel/clauses/group_clause.rb +34 -0
  12. data/lib/influxdb/arel/clauses/select_clause.rb +37 -0
  13. data/lib/influxdb/arel/clauses/where_clause.rb +102 -0
  14. data/lib/influxdb/arel/core_extensions.rb +5 -21
  15. data/lib/influxdb/arel/delete_manager.rb +50 -0
  16. data/lib/influxdb/arel/extensions.rb +6 -0
  17. data/lib/influxdb/arel/extensions/alias_predication.rb +11 -0
  18. data/lib/influxdb/arel/extensions/boolean_predications.rb +15 -0
  19. data/lib/influxdb/arel/extensions/expressions.rb +75 -0
  20. data/lib/influxdb/arel/extensions/joining_merging.rb +21 -0
  21. data/lib/influxdb/arel/extensions/math.rb +23 -0
  22. data/lib/influxdb/arel/extensions/predications.rb +144 -0
  23. data/lib/influxdb/arel/nodes.rb +7 -14
  24. data/lib/influxdb/arel/nodes/attribute.rb +20 -0
  25. data/lib/influxdb/arel/nodes/binary.rb +4 -3
  26. data/lib/influxdb/arel/nodes/delete_statement.rb +37 -0
  27. data/lib/influxdb/arel/nodes/duration.rb +3 -3
  28. data/lib/influxdb/arel/nodes/function.rb +2 -2
  29. data/lib/influxdb/arel/nodes/grouping.rb +3 -3
  30. data/lib/influxdb/arel/nodes/infix_operation.rb +11 -4
  31. data/lib/influxdb/arel/nodes/merge.rb +13 -0
  32. data/lib/influxdb/arel/nodes/node.rb +18 -6
  33. data/lib/influxdb/arel/nodes/now.rb +1 -1
  34. data/lib/influxdb/arel/nodes/ordering.rb +15 -0
  35. data/lib/influxdb/arel/nodes/select_statement.rb +10 -8
  36. data/lib/influxdb/arel/nodes/sql_literal.rb +5 -8
  37. data/lib/influxdb/arel/nodes/table.rb +19 -0
  38. data/lib/influxdb/arel/nodes/table_alias.rb +2 -4
  39. data/lib/influxdb/arel/nodes/unary.rb +6 -1
  40. data/lib/influxdb/arel/quoter.rb +85 -0
  41. data/lib/influxdb/arel/select_manager.rb +111 -64
  42. data/lib/influxdb/arel/tree_manager.rb +15 -5
  43. data/lib/influxdb/arel/version.rb +1 -1
  44. data/lib/influxdb/arel/visitor.rb +96 -126
  45. data/lib/influxdb/arel/visitor/delete_statement.rb +32 -0
  46. data/lib/influxdb/arel/visitor/select_statement.rb +59 -0
  47. data/lib/influxdb/arel/visitor/where_statement.rb +14 -0
  48. data/spec/lib/influxdb/arel/builder_spec.rb +173 -0
  49. data/spec/lib/influxdb/arel/core_extensions_spec.rb +0 -21
  50. data/spec/lib/influxdb/arel/nodes/and_spec.rb +6 -9
  51. data/spec/lib/influxdb/arel/nodes/attribute_spec.rb +21 -0
  52. data/spec/lib/influxdb/arel/nodes/binary_spec.rb +0 -4
  53. data/spec/lib/influxdb/arel/nodes/duration_spec.rb +1 -0
  54. data/spec/lib/influxdb/arel/nodes/in_spec.rb +1 -0
  55. data/spec/lib/influxdb/arel/nodes/infix_operation_spec.rb +17 -0
  56. data/spec/lib/influxdb/arel/nodes/merge_spec.rb +25 -0
  57. data/spec/lib/influxdb/arel/nodes/now_spec.rb +1 -0
  58. data/spec/lib/influxdb/arel/nodes/ordering_spec.rb +19 -0
  59. data/spec/lib/influxdb/arel/nodes/sql_literal_spec.rb +1 -5
  60. data/spec/lib/influxdb/arel/nodes/table_alias_spec.rb +3 -10
  61. data/spec/lib/influxdb/arel/nodes/table_spec.rb +8 -0
  62. data/spec/lib/influxdb/arel/nodes/unary_spec.rb +0 -4
  63. data/spec/lib/influxdb/arel/quoter/repository_spec.rb +10 -0
  64. data/spec/lib/influxdb/arel/quoter_spec.rb +33 -0
  65. data/spec/lib/influxdb/arel/select_manager_spec.rb +356 -156
  66. data/spec/lib/influxdb/arel_spec.rb +22 -0
  67. data/spec/spec_helper.rb +15 -0
  68. data/spec/support/examples/binary_node.rb +1 -0
  69. data/spec/support/examples/function_node.rb +1 -0
  70. data/spec/support/examples/infix_operation_node.rb +15 -0
  71. data/spec/support/examples/node_boolean_predications.rb +21 -0
  72. data/spec/support/examples/node_joining_merging.rb +53 -0
  73. data/spec/support/examples/unary_node.rb +1 -0
  74. data/spec/support/fabrics.rb +3 -3
  75. metadata +49 -11
  76. data/lib/influxdb/arel/alias_predication.rb +0 -9
  77. data/lib/influxdb/arel/attributes.rb +0 -1
  78. data/lib/influxdb/arel/attributes/attribute.rb +0 -74
  79. data/lib/influxdb/arel/expressions.rb +0 -73
  80. data/lib/influxdb/arel/math.rb +0 -21
  81. data/lib/influxdb/arel/predications.rb +0 -137
  82. data/lib/influxdb/arel/table.rb +0 -219
  83. data/spec/lib/influxdb/arel/table_spec.rb +0 -193
@@ -1,21 +0,0 @@
1
- module Influxdb
2
- module Arel
3
- module Math
4
- def *(other)
5
- Nodes::Multiplication.new(self, other)
6
- end
7
-
8
- def +(other)
9
- Nodes::Grouping.new(Nodes::Addition.new(self, other))
10
- end
11
-
12
- def -(other)
13
- Nodes::Grouping.new(Nodes::Subtraction.new(self, other))
14
- end
15
-
16
- def /(other)
17
- Nodes::Division.new(self, other)
18
- end
19
- end
20
- end
21
- end
@@ -1,137 +0,0 @@
1
- module Influxdb
2
- module Arel
3
- module Predications
4
- def not_eq(other)
5
- Nodes::NotEqual.new(self, other)
6
- end
7
-
8
- def not_eq_any(others)
9
- grouping_any(:not_eq, others)
10
- end
11
-
12
- def not_eq_all(others)
13
- grouping_all(:not_eq, others)
14
- end
15
-
16
- def eq(other)
17
- Nodes::Equality.new(self, other)
18
- end
19
-
20
- def eq_any(others)
21
- grouping_any(:eq, others)
22
- end
23
-
24
- def eq_all(others)
25
- grouping_all(:eq, others)
26
- end
27
-
28
- def in(other)
29
- case other
30
- when Range
31
- if other.begin == -Float::INFINITY && other.end == Float::INFINITY
32
- Nodes::Equality.new(1, 1)
33
- elsif other.end == Float::INFINITY
34
- Nodes::GreaterThanOrEqual.new(self, other.begin)
35
- elsif other.begin == -Float::INFINITY && other.exclude_end?
36
- Nodes::LessThan.new(self, other.end)
37
- elsif other.begin == -Float::INFINITY
38
- Nodes::LessThanOrEqual.new(self, other.end)
39
- elsif other.exclude_end?
40
- left = Nodes::GreaterThanOrEqual.new(self, other.begin)
41
- right = Nodes::LessThan.new(self, other.end)
42
- Nodes::And.new([left, right])
43
- else
44
- left = Nodes::GreaterThanOrEqual.new(self, other.begin)
45
- right = Nodes::LessThanOrEqual.new(self, other.end)
46
- Nodes::And.new([left, right])
47
- end
48
- else
49
- Nodes::In.new(self, other)
50
- end
51
- end
52
-
53
- def matches(other)
54
- Nodes::Matches.new(self, other)
55
- end
56
-
57
- def matches_any(others)
58
- grouping_any(:matches, others)
59
- end
60
-
61
- def matches_all(others)
62
- grouping_all(:matches, others)
63
- end
64
-
65
- def does_not_match(other)
66
- Nodes::DoesNotMatch.new(self, other)
67
- end
68
-
69
- def does_not_match_any(others)
70
- grouping_any(:does_not_match, others)
71
- end
72
-
73
- def does_not_match_all(others)
74
- grouping_all(:does_not_match, others)
75
- end
76
-
77
- def gteq(right)
78
- Nodes::GreaterThanOrEqual.new(self, right)
79
- end
80
-
81
- def gteq_any(others)
82
- grouping_any(:gteq, others)
83
- end
84
-
85
- def gteq_all(others)
86
- grouping_all(:gteq, others)
87
- end
88
-
89
- def gt(right)
90
- Nodes::GreaterThan.new(self, right)
91
- end
92
-
93
- def gt_any(others)
94
- grouping_any(:gt, others)
95
- end
96
-
97
- def gt_all(others)
98
- grouping_all(:gt, others)
99
- end
100
-
101
- def lt(right)
102
- Nodes::LessThan.new(self, right)
103
- end
104
-
105
- def lt_any(others)
106
- grouping_any(:lt, others)
107
- end
108
-
109
- def lt_all(others)
110
- grouping_all(:lt, others)
111
- end
112
-
113
- def lteq(right)
114
- Nodes::LessThanOrEqual.new(self, right)
115
- end
116
-
117
- def lteq_any(others)
118
- grouping_any(:lteq, others)
119
- end
120
-
121
- def lteq_all(others)
122
- grouping_all(:lteq, others)
123
- end
124
-
125
- private
126
-
127
- def grouping_any(method_id, others)
128
- nodes = others.map{|expr| send(method_id, expr) }
129
- Nodes::Grouping.new(nodes.inject{|result, node| Nodes::Or.new(result, node) })
130
- end
131
-
132
- def grouping_all(method_id, others)
133
- Nodes::Grouping.new(Nodes::And.new(others.map{|expr| send(method_id, expr) }))
134
- end
135
- end
136
- end
137
- end
@@ -1,219 +0,0 @@
1
- module Influxdb
2
- module Arel
3
- class Table
4
- class << self
5
- def comparable_classes
6
- [Influxdb::Arel::Table, Influxdb::Arel::Nodes::SqlLiteral]
7
- end
8
- end
9
-
10
- attr_accessor :name
11
-
12
- alias :table_name :name
13
-
14
- def initialize(name)
15
- @name = name.to_s
16
- end
17
-
18
- # Specify alias for table
19
- # Example:
20
- #
21
- # Influxdb::Arel::Table.new('table').as('alias_table').to_sql
22
- # => table AS alias_table
23
- #
24
- def alias(name)
25
- Nodes::TableAlias.new(self, name)
26
- end
27
-
28
- alias :as :alias
29
-
30
- def from(*tables)
31
- SelectManager.new(*tables)
32
- end
33
-
34
- # Merging of two series into one.
35
- #
36
- # If <tt>table</tt> is nil it will merge two first tables from tables list.
37
- #
38
- # table = Influxdb::Arel::Table.new('table')
39
- # table.from('table1', 'table2').merge.to_sql
40
- # => SELECT * FROM table1 MERGE table2
41
- #
42
- # If <tt>table</tt> is nil and tables list contains only one table it will change nothing.
43
- #
44
- # table.merge.to_sql
45
- # => SELECT * FROM table
46
- #
47
- # If <tt>table</tt> exists it will merge first table from tables list with given table.
48
- #
49
- # table.merge('table2').to_sql
50
- # => SELECT * FROM table MERGE table2
51
- #
52
- # table.from('table1', 'table2').merge('table3').to_sql
53
- # => SELECT * FROM table1 MERGE table3
54
- #
55
- def merge(table = nil)
56
- from(self).merge(table)
57
- end
58
-
59
- # Joining of two series.
60
- #
61
- # If <tt>table</tt> is nil it will join two first tables from tables list.
62
- #
63
- # table = Influxdb::Arel::Table.new('table')
64
- # table.from('table1', 'table2').join.to_sql
65
- # => SELECT * FROM table1 INNER JOIN table2
66
- #
67
- # If <tt>table</tt> is nil and tables list contains only one table it will change nothing.
68
- #
69
- # table.join.to_sql
70
- # => SELECT * FROM table
71
- #
72
- # If <tt>table</tt> exists it will join first table from tables list with given table.
73
- #
74
- # table.join('table2').to_sql
75
- # => SELECT * FROM table INNER JOIN table2
76
- #
77
- # table.from('table1', 'table2').join('table3').to_sql
78
- # => SELECT * FROM table1 INNER JOIN table3
79
- #
80
- # Aliases.
81
- # You can define alias for each joined table. It would be usefull for self joining table.
82
- #
83
- # table.from(table.as(:table_one)).join(table.as(:table_two)).to_sql
84
- # => SELECT * FROM table AS table_one INNER JOIN table AS table_two
85
- #
86
- def join(table = nil)
87
- from(self).join(table)
88
- end
89
-
90
- # Grouping results by specified columns or expressions, such as <tt>time(10m)</tt>
91
- #
92
- # table = Influxdb::Arel::Table.new('table')
93
- # table.group(table.time(10.m), table[:host]).to_sql
94
- # => SELECT * FROM table GROUP BY time(10m), host
95
- #
96
- # If you want to fill intervals with no data you shoult call <tt>fill</tt> method after:
97
- #
98
- # table.group(10.m.time, table[:host]).fill(0).to_sql
99
- # => SELECT * FROM table GROUP BY time(10m), host fill(0)
100
- #
101
- def group(*columns)
102
- from(self).group(*columns)
103
- end
104
-
105
- # Set the ordering of results
106
- # Possible values:
107
- #
108
- # * <tt>:asc</tt>
109
- # Default value. Results will be sorted by ascending order.
110
- #
111
- # * <tt>:desc</tt>
112
- # Default value. Results will be sorted by descending order.
113
- #
114
- # Example:
115
- #
116
- # table = Influxdb::Arel::Table.new('table')
117
- # table.order(:desc).to_sql
118
- # table.order('desc').to_sql
119
- # => SELECT * FROM table ORDER DESC
120
- #
121
- # table.order(:asc).to_sql
122
- # table.order('asc').to_sql
123
- # => SELECT * FROM table ORDER ASC
124
- #
125
- def order(expr)
126
- from(self).order(expr)
127
- end
128
-
129
- # Specify conditions for selection or deletion query
130
- # Example:
131
- #
132
- # table = Influxdb::Arel::Table.new('table')
133
- # table.where(table[:name].eq('Undr')).to_sql
134
- # => SELECT * FROM table WHERE name = 'Undr'
135
- #
136
- # table.where(table[:name].eq('Undr')).where(table[:time].lt(10.h.ago).to_sql
137
- # => SELECT * FROM table WHERE name = 'Undr' AND time < (now() - 10h)
138
- #
139
- # table.where(table[:name].eq('Undr').or(table[:name].eq('Andrei'))).to_sql
140
- # => SELECT * FROM table WHERE name = 'Undr' OR name = 'Andrei'
141
- #
142
- def where(condition)
143
- from(self).where(condition)
144
- end
145
-
146
- # Specify columns or expressions for select.
147
- # Example:
148
- #
149
- # table = Influxdb::Arel::Table.new('cpu_load')
150
- # table.to_sql
151
- # => SELECT * FROM cpu_load
152
- #
153
- # table.column((table[:system] + table[:user]).as(:sum)).to_sql
154
- # => SELECT (system + user) AS sum FROM cpu_load
155
- #
156
- # table.column(table[:idle].mean.as(:idle_mean), table[:user].mean.as(:user_mean)).to_sql
157
- # => SELECT MEAN(idle) AS idle_mean, MEAN(user) AS user_mean FROM cpu_load
158
- #
159
- def column(*things)
160
- from(self).column(*things)
161
- end
162
-
163
- # Set limit for result's points
164
- # Example:
165
- #
166
- # table = Influxdb::Arel::Table.new('cpu_load')
167
- # table.take(100).to_sql
168
- # => SELECT * FROM table LIMIT 100
169
- #
170
- def take(amount)
171
- from(self).take(amount)
172
- end
173
-
174
- # Get attribute
175
- #
176
- def [](name)
177
- Attribute.new(self, name)
178
- end
179
-
180
- def select_manager
181
- SelectManager.new
182
- end
183
-
184
- def hash
185
- @name.hash
186
- end
187
-
188
- def eql?(other)
189
- self.class.comparable_classes.include?(self.class) && self.name == other.name
190
- end
191
-
192
- alias :== :eql?
193
-
194
- def table_alias
195
- nil
196
- end
197
-
198
- def unalias
199
- self
200
- end
201
-
202
- def sql(raw_sql)
203
- Arel.sql(raw_sql)
204
- end
205
-
206
- def star
207
- Arel.star
208
- end
209
-
210
- def now
211
- Arel.now
212
- end
213
-
214
- def time(duration)
215
- Arel.time(duration)
216
- end
217
- end
218
- end
219
- end
@@ -1,193 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Influxdb::Arel::Table do
4
- describe '#sql' do
5
- specify{ expect(table('events').sql('time(1s)')).to eq(sql('time(1s)')) }
6
- end
7
-
8
- describe '#star' do
9
- specify{ expect(table('events').star).to eq(sql('*')) }
10
- end
11
-
12
- describe '#alias' do
13
- subject{ table('events').alias('events1') }
14
- specify{ expect(subject).to eq(node(:TableAlias, table('events'), 'events1')) }
15
- specify{ expect(subject.to_sql).to eq('events AS events1') }
16
- end
17
-
18
- describe '#from' do
19
- subject{ table('events').from('table') }
20
- specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
21
- specify{ expect(subject.ast.series).to eq([sql('table')]) }
22
- specify{ expect(subject.to_sql).to eq('SELECT * FROM table') }
23
- end
24
-
25
- describe '#merge' do
26
- subject{ table('events').merge('errors') }
27
- specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
28
- specify{ expect(subject.ast.merge).to eq(node(:Merge, table('events'), sql('errors'))) }
29
- specify{ expect(subject.to_sql).to eq('SELECT * FROM events MERGE errors') }
30
-
31
- context 'when table as argument' do
32
- subject{ table('events').merge(table('errors')) }
33
-
34
- specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
35
- specify{ expect(subject.ast.merge).to eq(node(:Merge, table('events'), table('errors'))) }
36
- specify{ expect(subject.to_sql).to eq('SELECT * FROM events MERGE errors') }
37
- end
38
-
39
- context 'when alias as argument' do
40
- let(:table_alias){ table('errors').as('fatal_errors') }
41
-
42
- subject{ table('events').merge(table_alias) }
43
-
44
- specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
45
- specify{ expect(subject.ast.merge).to eq(node(:Merge, table('events'), table('errors'))) }
46
- specify{ expect(subject.to_sql).to eq('SELECT * FROM events MERGE errors') }
47
- end
48
-
49
- context 'without argument' do
50
- subject{ table('events').merge }
51
- specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
52
- specify{ expect(subject.ast.merge).to be_nil }
53
- specify{ expect(subject.to_sql).to eq('SELECT * FROM events') }
54
- end
55
-
56
- context 'without argument with many series' do
57
- subject{ table('events').from('user_events', 'errors').merge }
58
- specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
59
- specify{ expect(subject.ast.merge).to eq(node(:Merge, sql('user_events'), sql('errors'))) }
60
- specify{ expect(subject.to_sql).to eq('SELECT * FROM user_events MERGE errors') }
61
- end
62
- end
63
-
64
- describe '#join' do
65
- subject{ table('events').join('errors') }
66
- specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
67
- specify{ expect(subject.ast.join).to eq(node(:Join, table('events'), sql('errors'))) }
68
- specify{ expect(subject.to_sql).to eq('SELECT * FROM events INNER JOIN errors') }
69
-
70
- context 'when table as argument' do
71
- subject{ table('events').join(table('errors')) }
72
-
73
- specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
74
- specify{ expect(subject.ast.join).to eq(node(:Join, table('events'), table('errors'))) }
75
- specify{ expect(subject.to_sql).to eq('SELECT * FROM events INNER JOIN errors') }
76
- end
77
-
78
- context 'when alias as argument' do
79
- let(:table_alias){ table('errors').as('fatal_errors') }
80
-
81
- subject{ table('events').join(table_alias) }
82
-
83
- specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
84
- specify{ expect(subject.ast.join).to eq(node(:Join, table('events'), table_alias)) }
85
- specify{ expect(subject.to_sql).to eq('SELECT * FROM events INNER JOIN errors AS fatal_errors') }
86
- end
87
-
88
- context 'without argument' do
89
- subject{ table('events').join }
90
- specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
91
- specify{ expect(subject.ast.join).to be_nil }
92
- specify{ expect(subject.to_sql).to eq('SELECT * FROM events') }
93
- end
94
-
95
- context 'without argument with many series' do
96
- subject{ table('events').from('user_events', 'errors').join }
97
- specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
98
- specify{ expect(subject.ast.join).to eq(node(:Join, sql('user_events'), sql('errors'))) }
99
- specify{ expect(subject.to_sql).to eq('SELECT * FROM user_events INNER JOIN errors') }
100
- end
101
- end
102
-
103
- describe '#order' do
104
- context 'when sort by ascending order' do
105
- subject{ table('events').order(:asc) }
106
- specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
107
- specify{ expect(subject.ordering).to eq(node(:Ordering, 'asc')) }
108
- specify{ expect(subject.to_sql).to eq('SELECT * FROM events ORDER ASC') }
109
- end
110
-
111
- context 'when sort by ascending order' do
112
- subject{ table('events').order('asc') }
113
- specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
114
- specify{ expect(subject.ordering).to eq(node(:Ordering, 'asc')) }
115
- specify{ expect(subject.to_sql).to eq('SELECT * FROM events ORDER ASC') }
116
- end
117
-
118
- context 'when sort by descending order' do
119
- subject{ table('events').order(:desc) }
120
- specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
121
- specify{ expect(subject.ordering).to eq(node(:Ordering, 'desc')) }
122
- specify{ expect(subject.to_sql).to eq('SELECT * FROM events ORDER DESC') }
123
- end
124
-
125
- context 'when sort by descending order' do
126
- subject{ table('events').order('desc') }
127
- specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
128
- specify{ expect(subject.ordering).to eq(node(:Ordering, 'desc')) }
129
- specify{ expect(subject.to_sql).to eq('SELECT * FROM events ORDER DESC') }
130
- end
131
- end
132
-
133
- describe '#take' do
134
- subject{ table('events').take(100) }
135
- specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
136
- specify{ expect(subject.taken).to eq(node(:Limit, 100)) }
137
- specify{ expect(subject.to_sql).to eq('SELECT * FROM events LIMIT 100') }
138
- end
139
-
140
- describe '#group' do
141
- subject{ table('events').group('time(1s)', 'name', :type) }
142
- specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
143
- specify{ expect(subject.ast.groups).to eq([
144
- node(:Group, sql('time(1s)')), node(:Group, sql('name')), node(:Group, sql('type'))
145
- ]) }
146
- specify{ expect(subject.to_sql).to eq('SELECT * FROM events GROUP BY time(1s), name, type') }
147
-
148
- context 'chaining' do
149
- subject{ table('events').group('time(1s)').group('name', :type) }
150
- specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
151
- specify{ expect(subject.ast.groups).to eq([
152
- node(:Group, sql('time(1s)')), node(:Group, sql('name')), node(:Group, sql('type'))
153
- ]) }
154
- specify{ expect(subject.to_sql).to eq('SELECT * FROM events GROUP BY time(1s), name, type') }
155
- end
156
- end
157
-
158
- describe '#where' do
159
- subject{ table('events').where(sql("name = 'Undr'")) }
160
- specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
161
- specify{ expect(subject.wheres).to eq([sql("name = 'Undr'")]) }
162
- specify{ expect(subject.to_sql).to eq("SELECT * FROM events WHERE name = 'Undr'") }
163
-
164
- context 'chaining' do
165
- subject{ table('events').where(sql("name = 'Undr'")).where(sql("email = 'undr@gmail.com'")) }
166
- specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
167
- specify{ expect(subject.wheres).to eq([sql("name = 'Undr'"), sql("email = 'undr@gmail.com'")]) }
168
- specify{ expect(subject.to_sql).to eq("SELECT * FROM events WHERE name = 'Undr' AND email = 'undr@gmail.com'") }
169
- end
170
- end
171
-
172
- describe '#column' do
173
- subject{ table('events').column(table('events')[:time], 'name', :type) }
174
- specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
175
- specify{ expect(subject.ast.columns).to eq([table('events')[:time], sql('name'), sql('type')]) }
176
- specify{ expect(subject.to_sql).to eq('SELECT time, name, type FROM events') }
177
-
178
- context 'chaining' do
179
- subject{ table('events').column(table('events')[:time]).column('name', :type) }
180
- specify{ expect(subject).to be_instance_of(Influxdb::Arel::SelectManager) }
181
- specify{ expect(subject.ast.columns).to eq([table('events')[:time], sql('name'), sql('type')]) }
182
- specify{ expect(subject.to_sql).to eq('SELECT time, name, type FROM events') }
183
- end
184
- end
185
-
186
- describe '#table_alias' do
187
- specify{ expect(table('events').table_alias).to be_nil }
188
- end
189
-
190
- describe '#unalias' do
191
- specify{ expect(table('events').unalias).to eq(table('events')) }
192
- end
193
- end