Class: NoSE::Backend::PreparedQuery
Overview
A prepared query which can be executed against the backend
Instance Attribute Summary collapse
-
#query ⇒ Object
readonly
Returns the value of attribute query.
-
#steps ⇒ Object
readonly
Returns the value of attribute steps.
Instance Method Summary collapse
-
#execute(conditions) ⇒ Array<Hash>
Execute the query for the given set of conditions.
-
#initialize(query, steps) ⇒ PreparedQuery
constructor
A new instance of PreparedQuery.
Constructor Details
#initialize(query, steps) ⇒ PreparedQuery
Returns a new instance of PreparedQuery.
364 365 366 367 |
# File 'lib/nose/backend.rb', line 364 def initialize(query, steps) @query = query @steps = steps end |
Instance Attribute Details
#query ⇒ Object (readonly)
Returns the value of attribute query.
362 363 364 |
# File 'lib/nose/backend.rb', line 362 def query @query end |
#steps ⇒ Object (readonly)
Returns the value of attribute steps.
362 363 364 |
# File 'lib/nose/backend.rb', line 362 def steps @steps end |
Instance Method Details
#execute(conditions) ⇒ Array<Hash>
Execute the query for the given set of conditions
371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 |
# File 'lib/nose/backend.rb', line 371 def execute(conditions) results = nil @steps.each do |step| if step.is_a?(Backend::IndexLookupStatementStep) field_ids = step.index.all_fields.map(&:id) field_conds = conditions.select { |key| field_ids.include? key } else field_conds = conditions end results = step.process field_conds, results # The query can't return any results at this point, so we're done break if results.empty? end # Only return fields selected by the query if one is given # (we have no query to refer to for manually-defined plans) unless @query.nil? select_ids = @query.select.map(&:id).to_set results.map { |row| row.select! { |k, _| select_ids.include? k } } end results end |