@@ -121,11 +121,11 @@ def find_fragments(filters, options = {})
121
121
# This alias is going to be resolve down to the model's table name and will not actually be an alias
122
122
resource_table_alias = resource_klass . _table_name
123
123
124
- pluck_fields = [ Arel . sql ( " #{ concat_table_field ( resource_table_alias , resource_klass . _primary_key ) } AS #{ resource_table_alias } _ #{ resource_klass . _primary_key } " ) ]
124
+ pluck_fields = [ sql_field_with_alias ( resource_table_alias , resource_klass . _primary_key ) ]
125
125
126
126
cache_field = attribute_to_model_field ( :_cache_field ) if options [ :cache ]
127
127
if cache_field
128
- pluck_fields << Arel . sql ( " #{ concat_table_field ( resource_table_alias , cache_field [ :name ] ) } AS #{ resource_table_alias } _ #{ cache_field [ :name ] } " )
128
+ pluck_fields << sql_field_with_alias ( resource_table_alias , cache_field [ :name ] )
129
129
end
130
130
131
131
linkage_fields = [ ]
@@ -141,10 +141,10 @@ def find_fragments(filters, options = {})
141
141
142
142
linkage_fields << { relationship_name : name ,
143
143
resource_klass : klass ,
144
- field : " #{ concat_table_field ( linkage_table_alias , primary_key ) } AS #{ linkage_table_alias } _ #{ primary_key } " ,
145
- alias : " #{ linkage_table_alias } _ #{ primary_key } " }
144
+ field : sql_field_with_alias ( linkage_table_alias , primary_key ) ,
145
+ alias : alias_table_field ( linkage_table_alias , primary_key ) }
146
146
147
- pluck_fields << Arel . sql ( " #{ concat_table_field ( linkage_table_alias , primary_key ) } AS #{ linkage_table_alias } _ #{ primary_key } " )
147
+ pluck_fields << sql_field_with_alias ( linkage_table_alias , primary_key )
148
148
end
149
149
else
150
150
klass = linkage_relationship . resource_klass
@@ -153,10 +153,10 @@ def find_fragments(filters, options = {})
153
153
154
154
linkage_fields << { relationship_name : name ,
155
155
resource_klass : klass ,
156
- field : " #{ concat_table_field ( linkage_table_alias , primary_key ) } AS #{ linkage_table_alias } _ #{ primary_key } " ,
157
- alias : " #{ linkage_table_alias } _ #{ primary_key } " }
156
+ field : sql_field_with_alias ( linkage_table_alias , primary_key ) ,
157
+ alias : alias_table_field ( linkage_table_alias , primary_key ) }
158
158
159
- pluck_fields << Arel . sql ( " #{ concat_table_field ( linkage_table_alias , primary_key ) } AS #{ linkage_table_alias } _ #{ primary_key } " )
159
+ pluck_fields << sql_field_with_alias ( linkage_table_alias , primary_key )
160
160
end
161
161
end
162
162
@@ -165,7 +165,7 @@ def find_fragments(filters, options = {})
165
165
attributes . try ( :each ) do |attribute |
166
166
model_field = resource_klass . attribute_to_model_field ( attribute )
167
167
model_fields [ attribute ] = model_field
168
- pluck_fields << Arel . sql ( " #{ concat_table_field ( resource_table_alias , model_field [ :name ] ) } AS #{ resource_table_alias } _ #{ model_field [ :name ] } " )
168
+ pluck_fields << sql_field_with_alias ( resource_table_alias , model_field [ :name ] )
169
169
end
170
170
171
171
sort_fields = options . dig ( :_relation_helper_options , :sort_fields )
@@ -423,13 +423,13 @@ def find_related_monomorphic_fragments(source_fragments, relationship, options,
423
423
resource_table_alias = join_manager . join_details_by_relationship ( relationship ) [ :alias ]
424
424
425
425
pluck_fields = [
426
- Arel . sql ( "#{ _table_name } .#{ _primary_key } AS source_id" ) ,
427
- Arel . sql ( " #{ concat_table_field ( resource_table_alias , resource_klass . _primary_key ) } AS #{ resource_table_alias } _ #{ resource_klass . _primary_key } " )
426
+ Arel . sql ( "#{ _table_name } .#{ _primary_key } AS \" source_id\" " ) ,
427
+ sql_field_with_alias ( resource_table_alias , resource_klass . _primary_key )
428
428
]
429
429
430
430
cache_field = resource_klass . attribute_to_model_field ( :_cache_field ) if options [ :cache ]
431
431
if cache_field
432
- pluck_fields << Arel . sql ( " #{ concat_table_field ( resource_table_alias , cache_field [ :name ] ) } AS #{ resource_table_alias } _ #{ cache_field [ :name ] } " )
432
+ pluck_fields << sql_field_with_alias ( resource_table_alias , cache_field [ :name ] )
433
433
end
434
434
435
435
linkage_fields = [ ]
@@ -444,15 +444,15 @@ def find_related_monomorphic_fragments(source_fragments, relationship, options,
444
444
445
445
linkage_table_alias = join_manager . join_details_by_polymorphic_relationship ( linkage_relationship , resource_type ) [ :alias ]
446
446
primary_key = klass . _primary_key
447
- pluck_fields << Arel . sql ( " #{ concat_table_field ( linkage_table_alias , primary_key ) } AS #{ linkage_table_alias } _ #{ primary_key } " )
447
+ pluck_fields << sql_field_with_alias ( linkage_table_alias , primary_key )
448
448
end
449
449
else
450
450
klass = linkage_relationship . resource_klass
451
451
linkage_fields << { relationship_name : name , resource_klass : klass }
452
452
453
453
linkage_table_alias = join_manager . join_details_by_relationship ( linkage_relationship ) [ :alias ]
454
454
primary_key = klass . _primary_key
455
- pluck_fields << Arel . sql ( " #{ concat_table_field ( linkage_table_alias , primary_key ) } AS #{ linkage_table_alias } _ #{ primary_key } " )
455
+ pluck_fields << sql_field_with_alias ( linkage_table_alias , primary_key )
456
456
end
457
457
end
458
458
@@ -461,7 +461,7 @@ def find_related_monomorphic_fragments(source_fragments, relationship, options,
461
461
attributes . try ( :each ) do |attribute |
462
462
model_field = resource_klass . attribute_to_model_field ( attribute )
463
463
model_fields [ attribute ] = model_field
464
- pluck_fields << Arel . sql ( " #{ concat_table_field ( resource_table_alias , model_field [ :name ] ) } AS #{ resource_table_alias } _ #{ model_field [ :name ] } " )
464
+ pluck_fields << sql_field_with_alias ( resource_table_alias , model_field [ :name ] )
465
465
end
466
466
467
467
sort_fields = options . dig ( :_relation_helper_options , :sort_fields )
@@ -557,9 +557,9 @@ def find_related_polymorphic_fragments(source_fragments, relationship, options,
557
557
related_type = concat_table_field ( _table_name , relationship . polymorphic_type )
558
558
559
559
pluck_fields = [
560
- Arel . sql ( "#{ primary_key } AS #{ _table_name } _ #{ _primary_key } " ) ,
561
- Arel . sql ( "#{ related_key } AS #{ _table_name } _ #{ relationship . foreign_key } " ) ,
562
- Arel . sql ( "#{ related_type } AS #{ _table_name } _ #{ relationship . polymorphic_type } " )
560
+ Arel . sql ( "#{ primary_key } AS #{ alias_table_field ( _table_name , _primary_key ) } " ) ,
561
+ Arel . sql ( "#{ related_key } AS #{ alias_table_field ( _table_name , relationship . foreign_key ) } " ) ,
562
+ Arel . sql ( "#{ related_type } AS #{ alias_table_field ( _table_name , relationship . polymorphic_type ) } " )
563
563
]
564
564
565
565
# Get the additional fields from each relation. There's a limitation that the fields must exist in each relation
@@ -584,7 +584,7 @@ def find_related_polymorphic_fragments(source_fragments, relationship, options,
584
584
585
585
cache_offset = relation_index
586
586
if cache_field
587
- pluck_fields << Arel . sql ( " #{ concat_table_field ( table_alias , cache_field [ :name ] ) } AS cache_ #{ type } _ #{ cache_field [ :name ] } " )
587
+ pluck_fields << sql_field_with_alias ( table_alias , cache_field [ :name ] )
588
588
relation_index += 1
589
589
end
590
590
@@ -593,7 +593,7 @@ def find_related_polymorphic_fragments(source_fragments, relationship, options,
593
593
attributes . try ( :each ) do |attribute |
594
594
model_field = related_klass . attribute_to_model_field ( attribute )
595
595
model_fields [ attribute ] = model_field
596
- pluck_fields << Arel . sql ( " #{ concat_table_field ( table_alias , model_field [ :name ] ) } AS #{ table_alias } _ #{ model_field [ :name ] } " )
596
+ pluck_fields << sql_field_with_alias ( table_alias , model_field [ :name ] )
597
597
relation_index += 1
598
598
end
599
599
@@ -630,15 +630,15 @@ def find_related_polymorphic_fragments(source_fragments, relationship, options,
630
630
631
631
linkage_table_alias = join_manager . join_details_by_polymorphic_relationship ( linkage_relationship , resource_type ) [ :alias ]
632
632
primary_key = klass . _primary_key
633
- pluck_fields << Arel . sql ( " #{ concat_table_field ( linkage_table_alias , primary_key ) } AS #{ linkage_table_alias } _ #{ primary_key } " )
633
+ pluck_fields << sql_field_with_alias ( linkage_table_alias , primary_key )
634
634
end
635
635
else
636
636
klass = linkage_relationship . resource_klass
637
637
linkage_fields << { relationship : linkage_relationship , resource_klass : klass }
638
638
639
639
linkage_table_alias = join_manager . join_details_by_relationship ( linkage_relationship ) [ :alias ]
640
640
primary_key = klass . _primary_key
641
- pluck_fields << Arel . sql ( " #{ concat_table_field ( linkage_table_alias , primary_key ) } AS #{ linkage_table_alias } _ #{ primary_key } " )
641
+ pluck_fields << sql_field_with_alias ( linkage_table_alias , primary_key )
642
642
end
643
643
end
644
644
@@ -804,22 +804,50 @@ def concat_table_field(table, field, quoted = false)
804
804
if table . blank? || field . to_s . include? ( '.' )
805
805
# :nocov:
806
806
if quoted
807
- "\" #{ field . to_s } \" "
807
+ quote ( field )
808
+ else
809
+ field . to_s
810
+ end
811
+ # :nocov:
812
+ else
813
+ if quoted
814
+ "#{ quote ( table ) } .#{ quote ( field ) } "
815
+ else
816
+ # :nocov:
817
+ "#{ table . to_s } .#{ field . to_s } "
818
+ # :nocov:
819
+ end
820
+ end
821
+ end
822
+
823
+ def sql_field_with_alias ( table , field , quoted = true )
824
+ Arel . sql ( "#{ concat_table_field ( table , field , quoted ) } AS #{ alias_table_field ( table , field , quoted ) } " )
825
+ end
826
+
827
+ def alias_table_field ( table , field , quoted = false )
828
+ if table . blank? || field . to_s . include? ( '.' )
829
+ # :nocov:
830
+ if quoted
831
+ quote ( field )
808
832
else
809
833
field . to_s
810
834
end
811
835
# :nocov:
812
836
else
813
837
if quoted
814
838
# :nocov:
815
- " \" #{ table . to_s } \" . \" #{ field . to_s } \" "
839
+ quote ( " #{ table . to_s } _ #{ field . to_s } " )
816
840
# :nocov:
817
841
else
818
- "#{ table . to_s } . #{ field . to_s } "
842
+ "#{ table . to_s } _ #{ field . to_s } "
819
843
end
820
844
end
821
845
end
822
846
847
+ def quote ( field )
848
+ "\" #{ field . to_s } \" "
849
+ end
850
+
823
851
def apply_filters ( records , filters , options = { } )
824
852
if filters
825
853
filters . each do |filter , value |
0 commit comments