Changeset 152
- Timestamp:
- 11/17/08 16:14:39 (5 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
activerdf-1.6.10/lib/active_rdf/federation/federation_manager.rb
r151 r152 11 11 ConnectionPool.write_adapter.add(s,p,o) 12 12 end 13 13 14 14 # delete triple s,p,o from the currently selected write adapter (s and p are 15 15 # mandatory, o is optional, symbols are interpreted as wildcards) … … 23 23 adapter.reset_cache() 24 24 RDFS::Resource.reset_cache() 25 25 26 26 end 27 27 28 28 # executes read-only queries 29 29 # by distributing query over complete read-pool 30 30 # 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 37 35 # ask each adapter for query results 38 36 # and yield them consequtively … … 49 47 # were filtered out when doing results.union) 50 48 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 58 65 # filter the empty results 59 66 results.reject {|ary| ary.empty? } 60 67 61 68 # remove duplicate results from multiple 62 69 # adapters if asked for distinct query … … 64 71 # but they cannot check duplicates against each other) 65 72 results.uniq! if q.distinct? 66 73 67 74 # flatten results array if only one select clause 68 75 # to prevent unnecessarily nested array [[eyal],[renaud],...] 69 76 results.flatten! if q.select_clauses.size == 1 or q.ask? 70 77 71 78 # remove array (return single value or nil) if asked to 72 79 if options[:flatten] or q.count? 73 80 case results.size 74 when 081 when 0 75 82 results = nil 76 when 183 when 1 77 84 results = results.first 78 end79 end85 end 86 end 80 87 end 81 88 results
