Skip to content

Commit 8a6e86e

Browse files
committed
Merge pull request #230 from jcoyne/use_index
Query by using the index rather than a full-scan
2 parents 6723546 + 24f02c8 commit 8a6e86e

1 file changed

Lines changed: 14 additions & 4 deletions

File tree

lib/rdf/repository.rb

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -368,12 +368,22 @@ def query_pattern(pattern, &block)
368368
cs = @data.has_key?(graph_name) ? {graph_name => @data[graph_name]} : @data.dup
369369
cs.each do |c, ss|
370370
next unless graph_name.nil? || graph_name == false && !c || graph_name.eql?(c)
371-
ss = ss.has_key?(subject) ? {subject => ss[subject]} : ss.dup
371+
ss = if ss.has_key?(subject)
372+
{ subject => ss[subject] }
373+
elsif subject.nil? || subject.is_a?(RDF::Query::Variable)
374+
ss.dup
375+
else
376+
[]
377+
end
372378
ss.each do |s, ps|
373-
next unless subject.nil? || subject.eql?(s)
374-
ps = ps.has_key?(predicate) ? {predicate => ps[predicate]} : ps.dup
379+
ps = if ps.has_key?(predicate)
380+
{ predicate => ps[predicate] }
381+
elsif predicate.nil? || predicate.is_a?(RDF::Query::Variable)
382+
ps.dup
383+
else
384+
[]
385+
end
375386
ps.each do |p, os|
376-
next unless predicate.nil? || predicate.eql?(p)
377387
os = os.dup # TODO: is this really needed?
378388
os.each do |o|
379389
next unless object.nil? || object.eql?(o)

0 commit comments

Comments
 (0)