from_clause_translate 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8dd3c42b4a4d39f887365fcd181438221a2a5d67f7582e6da06ee1349e8035e8
|
4
|
+
data.tar.gz: b54e431c490c120a93be7c4ac714d6f47c972cea35aac7ad38508f892f18d4dd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: de67e993ee641c3c6e1eee55b211be68d2391097dac411aaa2240ace9068664ac7b80009754ee3f785eb0f1bf3075e3eb8cbc1f5aeb00a75fe3319d3cdc5eaa8
|
7
|
+
data.tar.gz: 97a3d308c290712116f608470e20d0f185ebfefcbc00e182d9eb22e7158d03bfc176c346feba1c18102ef937b336554a6b23aa776815ce5b63349450bcbd8214
|
@@ -1,68 +1,57 @@
|
|
1
1
|
require 'from_clause_translate/translated_columns_builder'
|
2
2
|
|
3
3
|
module ActiveRecord::Relation::Extended
|
4
|
-
def to_sql
|
5
|
-
apply_translates unless eager_loading?
|
6
|
-
super
|
7
|
-
end
|
8
|
-
|
9
|
-
def exec_queries &block
|
10
|
-
apply_translates
|
11
|
-
super(&block)
|
12
|
-
end
|
13
|
-
|
14
|
-
def pluck *columns
|
15
|
-
if !@translated_extra_columns && @klass.const_defined?(:TRANSLATED)
|
16
|
-
@translated_extra_columns = columns
|
17
|
-
end
|
18
|
-
super(*columns)
|
19
|
-
end
|
20
|
-
|
21
4
|
def arel aliases = nil
|
22
|
-
|
23
|
-
|
24
|
-
@translated_extra_columns = nil
|
25
|
-
joins = @values.delete :joins
|
26
|
-
apply_translates super(aliases), joins
|
5
|
+
apply_translates
|
6
|
+
super aliases
|
27
7
|
end
|
28
8
|
|
29
9
|
def add_translated_columns columns
|
30
10
|
(@values[:translated] ||= []).concat columns
|
31
11
|
end
|
32
12
|
|
13
|
+
def add_translated_column column
|
14
|
+
(@values[:translated] ||= []) << column
|
15
|
+
end
|
16
|
+
|
33
17
|
UNSCOPING_VALUES =
|
34
18
|
ActiveRecord::QueryMethods::VALID_UNSCOPING_VALUES.dup.delete(:joins)
|
35
19
|
|
36
|
-
def apply_translates
|
37
|
-
joins ||= @values.delete :joins
|
38
|
-
arel ||= self.arel
|
20
|
+
def apply_translates
|
39
21
|
return if @translates_applied || !@klass.const_defined?(:TRANSLATED)
|
40
22
|
|
41
23
|
@translates_applied = true
|
24
|
+
|
25
|
+
@arel ||= build_arel nil
|
26
|
+
|
42
27
|
columns = translated_columns_get
|
43
28
|
return unless columns
|
44
29
|
|
30
|
+
if @values[:joins]
|
31
|
+
joins = @values.delete :joins
|
32
|
+
@arel = build_arel nil
|
33
|
+
end
|
34
|
+
|
45
35
|
rel = unscope(*UNSCOPING_VALUES).select(columns)
|
36
|
+
rel.instance_variable_set(:@translates_applied, true)
|
46
37
|
rel.instance_variable_get(:@values)[:joins] = joins if joins
|
47
38
|
from = rel.arel.to_sql
|
48
39
|
as = @klass.table_name
|
49
|
-
arel.from("(#{from}) #{as}")
|
40
|
+
@arel.from("(#{from}) #{as}")
|
50
41
|
end
|
51
42
|
|
52
43
|
def translated_columns_get without_projections = false
|
53
44
|
FromClauseTranslate::TranslatedColumnsBuilder.new(
|
54
|
-
self, without_projections
|
45
|
+
self, @without_projections
|
55
46
|
).perform
|
56
47
|
end
|
57
48
|
|
58
|
-
private
|
59
|
-
|
60
49
|
def perform_calculation operation, column_name
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
50
|
+
return super operation, column_name if @without_projections
|
51
|
+
rel = spawn
|
52
|
+
rel.instance_variable_set(:@without_projections, true)
|
53
|
+
rel.add_translated_column column_name
|
54
|
+
rel.perform_calculation operation, column_name
|
66
55
|
end
|
67
56
|
end
|
68
57
|
|