Changeset 152

Show
Ignore:
Timestamp:
11/17/08 16:14:39 (5 years ago)
Author:
samuraraujo
Message:
 
Files:
1 modified

Legend:

Unmodified
Added
Removed
  • activerdf-1.6.10/lib/active_rdf/federation/federation_manager.rb

    r151 r152  
    1111    ConnectionPool.write_adapter.add(s,p,o) 
    1212  end 
    13  
     13   
    1414  # delete triple s,p,o from the currently selected write adapter (s and p are  
    1515  # mandatory, o is optional, symbols are interpreted as wildcards) 
     
    2323    adapter.reset_cache() 
    2424    RDFS::Resource.reset_cache() 
    25  
     25     
    2626  end 
    27  
     27   
    2828  # executes read-only queries 
    2929  # by distributing query over complete read-pool 
    3030  # and aggregating the results 
    31   def FederationManager.query(q, options={:flatten => true}) 
    32     
    33                 if ConnectionPool.read_adapters.empty? 
    34                         raise ActiveRdfError, "cannot execute query without data sources"  
    35                 end 
    36      
     31  def FederationManager.query(q, options={:flatten => true})    
     32    if ConnectionPool.read_adapters.empty? 
     33      raise ActiveRdfError, "cannot execute query without data sources"  
     34    end    
    3735    # ask each adapter for query results 
    3836    # and yield them consequtively 
     
    4947      # were filtered out when doing results.union) 
    5048      results = [] 
    51       ConnectionPool.read_adapters.each do |source|          
    52                                 source_results = source.query(q) 
    53                                 source_results.each do |clauses| 
    54                                         results << clauses 
    55                         end 
    56                         end 
    57   
     49      ConnectionPool.read_adapters.each do |source|     
     50        #verifies if the repository was enabled by the Explorator's user. 
     51        begin 
     52          if (Thread.current[:disablerepositories].include? source.title)  
     53            next 
     54          end 
     55        rescue     
     56          #outside the Explorator. 
     57        end 
     58        source_results = source.query(q) 
     59        source_results.each do |clauses| 
     60          results << clauses 
     61        end 
     62         
     63      end 
     64       
    5865      # filter the empty results 
    5966      results.reject {|ary| ary.empty? } 
    60  
     67       
    6168      # remove duplicate results from multiple 
    6269      # adapters if asked for distinct query 
     
    6471      # but they cannot check duplicates against each other) 
    6572      results.uniq! if q.distinct? 
    66  
     73       
    6774      # flatten results array if only one select clause 
    6875      # to prevent unnecessarily nested array [[eyal],[renaud],...] 
    6976      results.flatten! if q.select_clauses.size == 1 or q.ask? 
    70      
     77       
    7178      # remove array (return single value or nil) if asked to 
    7279      if options[:flatten] or q.count? 
    7380        case results.size 
    74         when 0 
     81          when 0 
    7582          results = nil 
    76         when 1 
     83          when 1 
    7784          results = results.first 
    78                                 end 
    79                         end 
     85        end 
     86      end 
    8087    end     
    8188    results