activecube 0.1.39 → 0.1.42
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/Gemfile.lock +1 -1
- data/lib/activecube/processor/composer.rb +1 -3
- data/lib/activecube/query/cube_query.rb +17 -31
- data/lib/activecube/query/ordering.rb +26 -5
- data/lib/activecube/query_methods.rb +1 -2
- data/lib/activecube/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7074b394ca4949bf0bedae97ac91b59ef8d742cb7c6ab77e5409345d77caa7bd
|
4
|
+
data.tar.gz: e7872e83b417e7e9d34acd329627e68d8d1424771e507fd345bd4edac0bc04e9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 693c8954a658b15c5f6f314b189fbff0a13777a8a84fbf1354d70610dabc903ef7be60475a4253e5bdd72e067a4a31aaaddb0821fa4949a4347be0abd5d28c02
|
7
|
+
data.tar.gz: 2a04854410822d43e2b4e29b53c062cdf59b971137978081147133956fd1108e2bd1b633782347075e7aa81cc9d237d8da92d148f5064d4697ee20d3be56944c
|
data/Gemfile.lock
CHANGED
@@ -75,9 +75,7 @@ module Activecube::Processor
|
|
75
75
|
measures_by_tables = measure_tables.group_by(&:table)
|
76
76
|
measures_by_tables.each_pair do |table, list|
|
77
77
|
@models << table.model
|
78
|
-
|
79
|
-
reduced = cube_query.reduced list.map(&:measure), reduce_options
|
80
|
-
table_query = table.query reduced
|
78
|
+
table_query = table.query cube_query
|
81
79
|
composed_query = composed_query ? table.join(cube_query, composed_query, table_query) : table_query
|
82
80
|
end
|
83
81
|
composed_query
|
@@ -61,6 +61,14 @@ module Activecube::Query
|
|
61
61
|
self
|
62
62
|
end
|
63
63
|
|
64
|
+
def desc_by_integer *args
|
65
|
+
clear_sql
|
66
|
+
args.each{|arg|
|
67
|
+
options << Ordering.new(arg, :desc, options = {with_length: true})
|
68
|
+
}
|
69
|
+
self
|
70
|
+
end
|
71
|
+
|
64
72
|
def asc *args
|
65
73
|
clear_sql
|
66
74
|
args.each{|arg|
|
@@ -69,6 +77,14 @@ module Activecube::Query
|
|
69
77
|
self
|
70
78
|
end
|
71
79
|
|
80
|
+
def asc_by_integer *args
|
81
|
+
clear_sql
|
82
|
+
args.each{|arg|
|
83
|
+
options << Ordering.new(arg, :asc, options = {with_length: true})
|
84
|
+
}
|
85
|
+
self
|
86
|
+
end
|
87
|
+
|
72
88
|
def offset *args
|
73
89
|
clear_sql
|
74
90
|
args.each{|arg|
|
@@ -124,36 +140,6 @@ module Activecube::Query
|
|
124
140
|
(measures.map(&:selectors) + slices.map(&:selectors) + selectors).flatten.map(&:required_column_names).flatten.uniq
|
125
141
|
end
|
126
142
|
|
127
|
-
def reduced other_measures, other_options
|
128
|
-
|
129
|
-
common_selectors = []
|
130
|
-
other_measures.each_with_index do |m,i|
|
131
|
-
if i==0
|
132
|
-
common_selectors += m.selectors
|
133
|
-
else
|
134
|
-
common_selectors &= m.selectors
|
135
|
-
end
|
136
|
-
end
|
137
|
-
|
138
|
-
if common_selectors.empty?
|
139
|
-
reduced_measures = other_measures
|
140
|
-
reduced_selectors = self.selectors
|
141
|
-
else
|
142
|
-
reduced_measures = other_measures.collect{|m|
|
143
|
-
Measure.new m.cube, m.key, m.definition, (m.selectors - common_selectors), m.modifications
|
144
|
-
}
|
145
|
-
reduced_selectors = self.selectors + common_selectors
|
146
|
-
end
|
147
|
-
|
148
|
-
unless reduced_measures.detect{|rm| rm.selectors.empty? }
|
149
|
-
reduced_selectors += [Selector.or(reduced_measures.map(&:selectors).flatten.uniq)]
|
150
|
-
end
|
151
|
-
|
152
|
-
return self if (reduced_measures == self.measures) && (reduced_selectors == self.selectors)
|
153
|
-
|
154
|
-
CubeQuery.new cube, slices, reduced_measures, reduced_selectors, other_options, tables
|
155
|
-
end
|
156
|
-
|
157
143
|
def join_fields
|
158
144
|
slices.map(&:group_by_columns).flatten.uniq
|
159
145
|
end
|
@@ -168,4 +154,4 @@ module Activecube::Query
|
|
168
154
|
@composed = nil
|
169
155
|
end
|
170
156
|
end
|
171
|
-
end
|
157
|
+
end
|
@@ -2,15 +2,21 @@ module Activecube
|
|
2
2
|
module Query
|
3
3
|
class Ordering
|
4
4
|
|
5
|
-
attr_reader :argument, :direction
|
6
|
-
def initialize argument, direction
|
5
|
+
attr_reader :argument, :direction, :options
|
6
|
+
def initialize argument, direction, options = {}
|
7
7
|
@argument = argument
|
8
8
|
@direction = direction
|
9
|
+
@options = options
|
9
10
|
end
|
10
11
|
|
11
12
|
def append_query _model, _cube_query, _table, query
|
12
|
-
text = argument.to_s.split(',').map{|s| quote s}.join(',')
|
13
|
-
|
13
|
+
@text = argument.to_s.split(',').map{|s| quote s}.join(',')
|
14
|
+
|
15
|
+
if options[:with_length]
|
16
|
+
return by_length_order(query)
|
17
|
+
end
|
18
|
+
|
19
|
+
simple_order(query)
|
14
20
|
end
|
15
21
|
|
16
22
|
def quote s
|
@@ -21,6 +27,21 @@ module Activecube
|
|
21
27
|
end
|
22
28
|
end
|
23
29
|
|
30
|
+
private
|
31
|
+
|
32
|
+
attr_reader :text
|
33
|
+
|
34
|
+
def simple_order(query)
|
35
|
+
query.order(::Arel.sql(text).send(direction))
|
36
|
+
end
|
37
|
+
|
38
|
+
def by_length_order(query)
|
39
|
+
query.order(
|
40
|
+
::Arel.sql("LENGTH(#{text})").send(direction),
|
41
|
+
::Arel.sql(text).send(direction)
|
42
|
+
)
|
43
|
+
end
|
44
|
+
|
24
45
|
end
|
25
46
|
end
|
26
|
-
end
|
47
|
+
end
|
@@ -5,7 +5,7 @@ module Activecube
|
|
5
5
|
|
6
6
|
attr_reader :database, :role
|
7
7
|
|
8
|
-
[:slice, :measure, :when, :desc, :asc, :limit, :offset].each do |method|
|
8
|
+
[:slice, :measure, :when, :desc, :desc_by_integer, :asc, :asc_by_integer, :limit, :offset].each do |method|
|
9
9
|
define_method(method) do |*args|
|
10
10
|
Query::CubeQuery.new(self).send method, *args
|
11
11
|
end
|
@@ -13,7 +13,6 @@ module Activecube
|
|
13
13
|
|
14
14
|
def connected_to database: nil, role: nil, &block
|
15
15
|
raise Activecube::InputArgumentError, "Must pass block to method" unless block_given?
|
16
|
-
raise "Database not defined" unless database
|
17
16
|
super_model.connected_to(database: database, role: role) do
|
18
17
|
@database = database
|
19
18
|
@role = role
|
data/lib/activecube/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activecube
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.42
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aleksey Studnev
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-04-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|