module RDF::DataObjects::Adapters::Defaults

Default SQL statements and methods for RDF::DataObjects::Repository::Adapters.

Public Instance Methods

count_sql() click to toggle source
# File lib/rdf/do/adapters/defaults.rb, line 10
def count_sql
  'select count(*) from quads'
end
delete_sql() click to toggle source
# File lib/rdf/do/adapters/defaults.rb, line 18
def delete_sql
  'DELETE FROM `quads` where (subject = ? AND predicate = ? AND object = ? AND context = ?)'
end
each_graph_sql() click to toggle source
# File lib/rdf/do/adapters/defaults.rb, line 38
def each_graph_sql
  'select distinct context from quads'
end
each_object_sql() click to toggle source
# File lib/rdf/do/adapters/defaults.rb, line 34
def each_object_sql
  'select distinct object from quads'
end
each_predicate_sql() click to toggle source
# File lib/rdf/do/adapters/defaults.rb, line 30
def each_predicate_sql
  'select distinct predicate from quads'
end
each_sql() click to toggle source
# File lib/rdf/do/adapters/defaults.rb, line 22
def each_sql
  'select * from quads'
end
each_subject_sql() click to toggle source
# File lib/rdf/do/adapters/defaults.rb, line 26
def each_subject_sql
  'select distinct subject from quads'
end
insert_sql() click to toggle source
# File lib/rdf/do/adapters/defaults.rb, line 14
def insert_sql
  'REPLACE INTO `quads` (subject, predicate, object, context) VALUES (?, ?, ?, ?)'
end
query(repository, hash = {}) click to toggle source

Perform a query on an RDF::DataObjects::Repository based on a hash of components.

This is meant to be called by RDF::DataObjects::Repository.

Supports symbols and `RDF::Query::Variable` values as a wild-card for a non-nil value.

Supports `false` for a specifically nil value representing the default context.

@example

adapter.query(repository, predicate: predicate)

@return [DataObjects::Result]

# File lib/rdf/do/adapters/defaults.rb, line 54
def query(repository, hash = {})
  return repository.result(each_sql) if hash.empty?
  conditions = []
  params = []
  [:subject, :predicate, :object, :graph_name].each do |resource|
    do_resource = resource == :graph_name ? :context : resource
    unless hash[resource].nil?
      case hash[resource]
      when Symbol, RDF::Query::Variable
        conditions << "#{do_resource} != 'nil'"
        next
      when false
        conditions << "#{do_resource} = 'nil'"
        next
      else
        conditions << "#{do_resource} = ?"
      end
      params     << repository.serialize(hash[resource])
    end
  end
  where = conditions.empty? ? "" : "WHERE "
  where << conditions.join(' AND ')
  #puts "query: #{where.inspect}, #{params.inspect}"
  repository.result('select * from quads ' + where, *params)
end