Class: Gcloud::Datastore::Query

Inherits:
Object
  • Object
show all
Defined in:
lib/gcloud/datastore/query.rb

Overview

Query represents a query to be made to the Datastore.

query = Gcloud::Datastore::Query.new
query.kind("Task").
  where("completed", "=", true)

entities = dataset.run query

Instance Method Summary collapse

Constructor Details

#initializeQuery

Returns a new query object.

query = Gcloud::Datastore::Query.new


34
35
36
# File 'lib/gcloud/datastore/query.rb', line 34

def initialize
  @_query = Proto::Query.new
end

Instance Method Details

#ancestor(parent) ⇒ Object

Add a filter for entities that inherit from a key.

query = Gcloud::Datastore::Query.new
query.kind("Task").
  ancestor(parent.key)

completed_tasks = dataset.run query


83
84
85
86
87
# File 'lib/gcloud/datastore/query.rb', line 83

def ancestor parent
  # Use key if given an entity
  parent = parent.key if parent.respond_to? :key
  where "__key__", "~", parent
end

#group_by(*names) ⇒ Object

Group results by a list of properties.

query = Gcloud::Datastore::Query.new
query.kind("Task").
  group_by("completed")

grouped_tasks = dataset.run query


175
176
177
178
179
# File 'lib/gcloud/datastore/query.rb', line 175

def group_by *names
  @_query.group_by ||= []
  @_query.group_by += Proto.new_property_references(*names)
  self
end

#kind(*kinds) ⇒ Object

Add the kind of entities to query.

query = Gcloud::Datastore::Query.new
query.kind "Task"

all_tasks = dataset.run query


45
46
47
48
49
50
# File 'lib/gcloud/datastore/query.rb', line 45

def kind *kinds
  @_query.kind ||= Proto::KindExpression.new
  @_query.kind.name ||= []
  @_query.kind.name |= kinds
  self
end

#limit(num) ⇒ Object

Set a limit on the number of results to be returned.

query = Gcloud::Datastore::Query.new
query.kind("Task").
  limit(10)

paginated_tasks = dataset.run query


118
119
120
121
# File 'lib/gcloud/datastore/query.rb', line 118

def limit num
  @_query.limit = num
  self
end

#offset(num) ⇒ Object

Set an offset for the results to be returned.

query = Gcloud::Datastore::Query.new
query.kind("Task").
  limit(10).
  offset(20)

paginated_tasks = dataset.run query


132
133
134
135
# File 'lib/gcloud/datastore/query.rb', line 132

def offset num
  @_query.offset = num
  self
end

#order(name, direction = :asc) ⇒ Object

Sort the results by a property name. By default, an ascending sort order will be used. To sort in descending order, provide a second argument of a string or symbol that starts with ā€œdā€.

query = Gcloud::Datastore::Query.new
query.kind("Task").
  order("due", :desc)

sorted_tasks = dataset.run query


100
101
102
103
104
105
106
107
108
# File 'lib/gcloud/datastore/query.rb', line 100

def order name, direction = :asc
  @_query.order ||= []
  po = Proto::PropertyOrder.new
  po.property = Proto::PropertyReference.new
  po.property.name = name
  po.direction = Proto.to_prop_order_direction direction
  @_query.order << po
  self
end

#select(*names) ⇒ Object Also known as: projection

Retrieve only select properties from the matched entities.

query = Gcloud::Datastore::Query.new
query.kind("Task").
  select("completed", "due")

partial_tasks = dataset.run query


160
161
162
163
164
# File 'lib/gcloud/datastore/query.rb', line 160

def select *names
  @_query.projection ||= []
  @_query.projection += Proto.new_property_expressions(*names)
  self
end

#start(cursor) ⇒ Object Also known as: cursor

Set the cursor to start the results at.

query = Gcloud::Datastore::Query.new
query.kind("Task").
  limit(10).
  cursor(task_cursor)

paginated_tasks = dataset.run query


146
147
148
149
# File 'lib/gcloud/datastore/query.rb', line 146

def start cursor
  @_query.start_cursor = Proto.decode_cursor cursor
  self
end

#to_protoObject

rubocop:disable Style/TrivialAccessors



182
183
184
185
# File 'lib/gcloud/datastore/query.rb', line 182

def to_proto #:nodoc:
  # Disabled rubocop because this implementation will most likely change.
  @_query
end

#where(name, operator, value) ⇒ Object Also known as: filter

Add a property filter to the query.

query = Gcloud::Datastore::Query.new
query.kind("Task").
  where("completed", "=", true)

completed_tasks = dataset.run query


60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/gcloud/datastore/query.rb', line 60

def where name, operator, value
  # Initialize filter
  @_query.filter ||= Proto.new_filter.tap do |f|
    f.composite_filter = Proto.new_composite_filter
  end
  # Create new property filter
  filter = Proto.new_filter.tap do |f|
    f.property_filter = Proto.new_property_filter name, operator, value
  end
  # Add new property filter to the list
  @_query.filter.composite_filter.filter << filter
  self
end