Module: Lore::Table_Selector
- Defined in:
- lib/lore/table_selector.rb
Overview
:nodoc:
Constant Summary collapse
Class Method Summary collapse
-
.build_joined_query(accessor, query_string = '', joined_tables = []) ⇒ Object
Extracted, recursive method for building the JOIN-part of a SELECT query.
Class Method Details
.build_joined_query(accessor, query_string = '', joined_tables = []) ⇒ Object
Extracted, recursive method for building the JOIN-part of a SELECT query.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/lore/table_selector.rb', line 16 def self.build_joined_query(accessor, query_string='', joined_tables=[]) top_table = accessor.table_name is_a_hierarchy = accessor.get_joins() own_primary_keys = accessor.get_primary_keys() own_foreign_keys = accessor.get_foreign_keys() joined_accessors = (accessor.get_is_a_klasses).dup joined_accessors.update(accessor.get_aggregate_klasses) # predefine own_p_keys = Hash.new foreign_p_keys = Hash.new on_string = String.new field_counter = 0 is_a_hierarchy.each_pair { |foreign_table, foreign_base_tables| # JOIN base.table ON ( if !(joined_tables.include?(foreign_table)) then foreign_p_keys = own_primary_keys[foreign_table] own_p_keys = own_foreign_keys[foreign_table] if !own_p_keys.nil? then joined_tables << foreign_table query_string << "\n JOIN #{foreign_table} on (" field_counter = 0 on_string = '' foreign_p_keys.uniq.each { |foreign_field| # base.table.foreign_field = on_string << "#{foreign_table}.#{foreign_field} = #{top_table}.#{own_p_keys[field_counter]}" # this.table.own_field if field_counter > 0 then query_string << ", #{on_string}" else query_string << on_string end field_counter += 1 } query_string << ')' end # sub-joins of joined table: query_string = build_joined_query(joined_accessors["#{top_table}.#{own_p_keys.first}"], query_string, joined_tables) end } return query_string end |