torque-postgresql 0.2.5 → 0.2.6
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/lib/torque/postgresql/arel.rb +0 -1
- data/lib/torque/postgresql/arel/select_manager.rb +0 -6
- data/lib/torque/postgresql/arel/visitors.rb +0 -7
- data/lib/torque/postgresql/attributes/enum.rb +8 -1
- data/lib/torque/postgresql/relation.rb +25 -2
- data/lib/torque/postgresql/relation/auxiliary_statement.rb +1 -1
- data/lib/torque/postgresql/relation/inheritance.rb +3 -3
- data/lib/torque/postgresql/relation/merger.rb +6 -0
- data/lib/torque/postgresql/version.rb +1 -1
- metadata +2 -3
- data/lib/torque/postgresql/arel/using.rb +0 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f01743d0b17376aff113086782016f688330d7fe
|
4
|
+
data.tar.gz: bf8ab5b19862bef0a158d5cf17575960f6385b7e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9aab3f50ac0d003ffe4876aef773afe975739eceb2e4552e0789d864b2c6e52669f25ef3bcf30f9c2aed48e9628d01137763fea0fa005d97d538f2974f464ad2
|
7
|
+
data.tar.gz: 60a4e728532be8c9ae45448192762ac4755a8157dc299495d5087a11d80a6f8a3315400eccd11b0f2c471a928406de642dd6af2cd75164b7169c9ae1763c7362
|
@@ -16,13 +16,6 @@ module Torque
|
|
16
16
|
super
|
17
17
|
end
|
18
18
|
|
19
|
-
# Add USING modifier to query
|
20
|
-
def visit_Torque_PostgreSQL_Arel_Using(o, collector)
|
21
|
-
collector << 'USING ( '
|
22
|
-
collector << o.expr
|
23
|
-
collector << ' )'
|
24
|
-
end
|
25
|
-
|
26
19
|
end
|
27
20
|
|
28
21
|
::Arel::Visitors::PostgreSQL.include Visitors
|
@@ -9,7 +9,9 @@ module Torque
|
|
9
9
|
LAZY_VALUE = 0.chr
|
10
10
|
|
11
11
|
class << self
|
12
|
-
|
12
|
+
include Enumerable
|
13
|
+
|
14
|
+
delegate :each, :sample, to: :members
|
13
15
|
|
14
16
|
# Find or create the class that will handle the value
|
15
17
|
def lookup(name)
|
@@ -40,6 +42,11 @@ module Torque
|
|
40
42
|
end
|
41
43
|
end
|
42
44
|
|
45
|
+
# Different from values, it returns the list of items already casted
|
46
|
+
def members
|
47
|
+
values.dup.map(&method(:new))
|
48
|
+
end
|
49
|
+
|
43
50
|
# Fetch a value from the list
|
44
51
|
# see https://github.com/rails/rails/blob/v5.0.0/activerecord/lib/active_record/fixtures.rb#L656
|
45
52
|
# see https://github.com/rails/rails/blob/v5.0.0/activerecord/lib/active_record/validations/uniqueness.rb#L101
|
@@ -14,9 +14,22 @@ module Torque
|
|
14
14
|
include Inheritance
|
15
15
|
|
16
16
|
SINGLE_VALUE_METHODS = [:itself_only]
|
17
|
-
MULTI_VALUE_METHODS = [:distinct_on, :auxiliary_statements, :cast_records
|
17
|
+
MULTI_VALUE_METHODS = [:distinct_on, :auxiliary_statements, :cast_records,
|
18
|
+
:dynamic_selection]
|
18
19
|
VALUE_METHODS = SINGLE_VALUE_METHODS + MULTI_VALUE_METHODS
|
19
20
|
|
21
|
+
# :nodoc:
|
22
|
+
def dynamic_selection_values; get_value(:dynamic_selection); end
|
23
|
+
# :nodoc:
|
24
|
+
def dynamic_selection_values=(value); set_value(:dynamic_selection, value); end
|
25
|
+
|
26
|
+
# Resolve column name when calculating models, allowing the column name to
|
27
|
+
# be more complex while keeping the query selection quality
|
28
|
+
def calculate(operation, column_name)
|
29
|
+
column_name = resolve_column(column_name).first if column_name.is_a?(Hash)
|
30
|
+
super(operation, column_name)
|
31
|
+
end
|
32
|
+
|
20
33
|
# Resolve column definition up to second value.
|
21
34
|
# For example, based on Post model:
|
22
35
|
#
|
@@ -65,6 +78,16 @@ module Torque
|
|
65
78
|
|
66
79
|
private
|
67
80
|
|
81
|
+
def dynamic_selection
|
82
|
+
@dynamic_selection ||= []
|
83
|
+
end
|
84
|
+
|
85
|
+
def build_arel
|
86
|
+
arel = super
|
87
|
+
arel.project(*dynamic_selection) if select_values.blank? && dynamic_selection.any?
|
88
|
+
arel
|
89
|
+
end
|
90
|
+
|
68
91
|
# Compatibility method with 5.0
|
69
92
|
unless ActiveRecord::Relation.method_defined?(:get_value)
|
70
93
|
def get_value(name)
|
@@ -108,7 +131,7 @@ module Torque
|
|
108
131
|
ActiveRecord::Relation::MULTI_VALUE_METHODS += Relation::MULTI_VALUE_METHODS
|
109
132
|
ActiveRecord::Relation::VALUE_METHODS += Relation::VALUE_METHODS
|
110
133
|
ActiveRecord::QueryMethods::VALID_UNSCOPING_VALUES += [:cast_records, :itself_only,
|
111
|
-
:distinct_on, :auxiliary_statements]
|
134
|
+
:distinct_on, :auxiliary_statements, :dynamic_selection]
|
112
135
|
|
113
136
|
if ActiveRecord::QueryMethods.const_defined?('DEFAULT_VALUES')
|
114
137
|
Relation::SINGLE_VALUE_METHODS.each do |value|
|
@@ -73,19 +73,19 @@ module Torque
|
|
73
73
|
end
|
74
74
|
|
75
75
|
columns.push(build_auto_caster_marker(arel, self.cast_records_value))
|
76
|
-
|
76
|
+
dynamic_selection.concat(columns) if columns.any?
|
77
77
|
end
|
78
78
|
|
79
79
|
# Build as many left outer join as necessary for each dependent table
|
80
80
|
def build_inheritances_joins(arel, types)
|
81
81
|
columns = Hash.new{ |h, k| h[k] = [] }
|
82
|
-
|
82
|
+
base_on_key = model.arel_table[primary_key]
|
83
83
|
base_attributes = model.attribute_names
|
84
84
|
|
85
85
|
# Iterate over each casted dependent calculating the columns
|
86
86
|
types.each.with_index do |model, idx|
|
87
87
|
join_table = model.arel_table.alias("\"i_#{idx}\"")
|
88
|
-
arel.outer_join(join_table).
|
88
|
+
arel.outer_join(join_table).on(base_on_key.eq(join_table[primary_key]))
|
89
89
|
(model.attribute_names - base_attributes).each do |column|
|
90
90
|
columns[column] << join_table
|
91
91
|
end
|
@@ -6,6 +6,7 @@ module Torque
|
|
6
6
|
def merge # :nodoc:
|
7
7
|
super
|
8
8
|
|
9
|
+
merge_dynamic_selection
|
9
10
|
merge_distinct_on
|
10
11
|
merge_auxiliary_statements
|
11
12
|
merge_inheritance
|
@@ -15,6 +16,11 @@ module Torque
|
|
15
16
|
|
16
17
|
private
|
17
18
|
|
19
|
+
# Merge dynamic selection columns
|
20
|
+
def merge_dynamic_selection
|
21
|
+
relation.dynamic_selection_values.concat(other.dynamic_selection_values)
|
22
|
+
end
|
23
|
+
|
18
24
|
# Merge distinct on columns
|
19
25
|
def merge_distinct_on
|
20
26
|
return if other.distinct_on_values.blank?
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: torque-postgresql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Carlos Silva
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-09-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -190,7 +190,6 @@ files:
|
|
190
190
|
- lib/torque/postgresql/arel.rb
|
191
191
|
- lib/torque/postgresql/arel/join_source.rb
|
192
192
|
- lib/torque/postgresql/arel/select_manager.rb
|
193
|
-
- lib/torque/postgresql/arel/using.rb
|
194
193
|
- lib/torque/postgresql/arel/visitors.rb
|
195
194
|
- lib/torque/postgresql/attributes.rb
|
196
195
|
- lib/torque/postgresql/attributes/builder.rb
|