249 lines
7.7 KiB
PHP
249 lines
7.7 KiB
PHP
<?php
|
|
/*
|
|
* Copyright 2014 Google Inc.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
|
* use this file except in compliance with the License. You may obtain a copy of
|
|
* the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
* License for the specific language governing permissions and limitations under
|
|
* the License.
|
|
*/
|
|
|
|
namespace Google\Service\Firestore;
|
|
|
|
class StructuredQuery extends \Google\Collection
|
|
{
|
|
protected $collection_key = 'orderBy';
|
|
protected $endAtType = Cursor::class;
|
|
protected $endAtDataType = '';
|
|
protected $findNearestType = FindNearest::class;
|
|
protected $findNearestDataType = '';
|
|
protected $fromType = CollectionSelector::class;
|
|
protected $fromDataType = 'array';
|
|
/**
|
|
* The maximum number of results to return. Applies after all other
|
|
* constraints. Requires: * The value must be greater than or equal to zero if
|
|
* specified.
|
|
*
|
|
* @var int
|
|
*/
|
|
public $limit;
|
|
/**
|
|
* The number of documents to skip before returning the first result. This
|
|
* applies after the constraints specified by the `WHERE`, `START AT`, & `END
|
|
* AT` but before the `LIMIT` clause. Requires: * The value must be greater
|
|
* than or equal to zero if specified.
|
|
*
|
|
* @var int
|
|
*/
|
|
public $offset;
|
|
protected $orderByType = Order::class;
|
|
protected $orderByDataType = 'array';
|
|
protected $selectType = Projection::class;
|
|
protected $selectDataType = '';
|
|
protected $startAtType = Cursor::class;
|
|
protected $startAtDataType = '';
|
|
protected $whereType = Filter::class;
|
|
protected $whereDataType = '';
|
|
|
|
/**
|
|
* A potential prefix of a position in the result set to end the query at.
|
|
* This is similar to `START_AT` but with it controlling the end position
|
|
* rather than the start position. Requires: * The number of values cannot be
|
|
* greater than the number of fields specified in the `ORDER BY` clause.
|
|
*
|
|
* @param Cursor $endAt
|
|
*/
|
|
public function setEndAt(Cursor $endAt)
|
|
{
|
|
$this->endAt = $endAt;
|
|
}
|
|
/**
|
|
* @return Cursor
|
|
*/
|
|
public function getEndAt()
|
|
{
|
|
return $this->endAt;
|
|
}
|
|
/**
|
|
* Optional. A potential nearest neighbors search. Applies after all other
|
|
* filters and ordering. Finds the closest vector embeddings to the given
|
|
* query vector.
|
|
*
|
|
* @param FindNearest $findNearest
|
|
*/
|
|
public function setFindNearest(FindNearest $findNearest)
|
|
{
|
|
$this->findNearest = $findNearest;
|
|
}
|
|
/**
|
|
* @return FindNearest
|
|
*/
|
|
public function getFindNearest()
|
|
{
|
|
return $this->findNearest;
|
|
}
|
|
/**
|
|
* The collections to query.
|
|
*
|
|
* @param CollectionSelector[] $from
|
|
*/
|
|
public function setFrom($from)
|
|
{
|
|
$this->from = $from;
|
|
}
|
|
/**
|
|
* @return CollectionSelector[]
|
|
*/
|
|
public function getFrom()
|
|
{
|
|
return $this->from;
|
|
}
|
|
/**
|
|
* The maximum number of results to return. Applies after all other
|
|
* constraints. Requires: * The value must be greater than or equal to zero if
|
|
* specified.
|
|
*
|
|
* @param int $limit
|
|
*/
|
|
public function setLimit($limit)
|
|
{
|
|
$this->limit = $limit;
|
|
}
|
|
/**
|
|
* @return int
|
|
*/
|
|
public function getLimit()
|
|
{
|
|
return $this->limit;
|
|
}
|
|
/**
|
|
* The number of documents to skip before returning the first result. This
|
|
* applies after the constraints specified by the `WHERE`, `START AT`, & `END
|
|
* AT` but before the `LIMIT` clause. Requires: * The value must be greater
|
|
* than or equal to zero if specified.
|
|
*
|
|
* @param int $offset
|
|
*/
|
|
public function setOffset($offset)
|
|
{
|
|
$this->offset = $offset;
|
|
}
|
|
/**
|
|
* @return int
|
|
*/
|
|
public function getOffset()
|
|
{
|
|
return $this->offset;
|
|
}
|
|
/**
|
|
* The order to apply to the query results. Callers can provide a full
|
|
* ordering, a partial ordering, or no ordering at all. While Firestore will
|
|
* always respect the provided order, the behavior for queries without a full
|
|
* ordering is different per database edition: In Standard edition, Firestore
|
|
* guarantees a stable ordering through the following rules: * The `order_by`
|
|
* is required to reference all fields used with an inequality filter. * All
|
|
* fields that are required to be in the `order_by` but are not already
|
|
* present are appended in lexicographical ordering of the field name. * If an
|
|
* order on `__name__` is not specified, it is appended by default. Fields are
|
|
* appended with the same sort direction as the last order specified, or
|
|
* 'ASCENDING' if no order was specified. For example: * `ORDER BY a` becomes
|
|
* `ORDER BY a ASC, __name__ ASC` * `ORDER BY a DESC` becomes `ORDER BY a
|
|
* DESC, __name__ DESC` * `WHERE a > 1` becomes `WHERE a > 1 ORDER BY a ASC,
|
|
* __name__ ASC` * `WHERE __name__ > ... AND a > 1` becomes `WHERE __name__ >
|
|
* ... AND a > 1 ORDER BY a ASC, __name__ ASC` In Enterprise edition,
|
|
* Firestore does not guarantee a stable ordering. Instead it will pick the
|
|
* most efficient ordering based on the indexes available at the time of query
|
|
* execution. This will result in a different ordering for queries that are
|
|
* otherwise identical. To ensure a stable ordering, always include a unique
|
|
* field in the `order_by` clause, such as `__name__`.
|
|
*
|
|
* @param Order[] $orderBy
|
|
*/
|
|
public function setOrderBy($orderBy)
|
|
{
|
|
$this->orderBy = $orderBy;
|
|
}
|
|
/**
|
|
* @return Order[]
|
|
*/
|
|
public function getOrderBy()
|
|
{
|
|
return $this->orderBy;
|
|
}
|
|
/**
|
|
* Optional sub-set of the fields to return. This acts as a DocumentMask over
|
|
* the documents returned from a query. When not set, assumes that the caller
|
|
* wants all fields returned.
|
|
*
|
|
* @param Projection $select
|
|
*/
|
|
public function setSelect(Projection $select)
|
|
{
|
|
$this->select = $select;
|
|
}
|
|
/**
|
|
* @return Projection
|
|
*/
|
|
public function getSelect()
|
|
{
|
|
return $this->select;
|
|
}
|
|
/**
|
|
* A potential prefix of a position in the result set to start the query at.
|
|
* The ordering of the result set is based on the `ORDER BY` clause of the
|
|
* original query. ``` SELECT * FROM k WHERE a = 1 AND b > 2 ORDER BY b ASC,
|
|
* __name__ ASC; ``` This query's results are ordered by `(b ASC, __name__
|
|
* ASC)`. Cursors can reference either the full ordering or a prefix of the
|
|
* location, though it cannot reference more fields than what are in the
|
|
* provided `ORDER BY`. Continuing off the example above, attaching the
|
|
* following start cursors will have varying impact: - `START BEFORE (2,
|
|
* /k/123)`: start the query right before `a = 1 AND b > 2 AND __name__ >
|
|
* /k/123`. - `START AFTER (10)`: start the query right after `a = 1 AND b >
|
|
* 10`. Unlike `OFFSET` which requires scanning over the first N results to
|
|
* skip, a start cursor allows the query to begin at a logical position. This
|
|
* position is not required to match an actual result, it will scan forward
|
|
* from this position to find the next document. Requires: * The number of
|
|
* values cannot be greater than the number of fields specified in the `ORDER
|
|
* BY` clause.
|
|
*
|
|
* @param Cursor $startAt
|
|
*/
|
|
public function setStartAt(Cursor $startAt)
|
|
{
|
|
$this->startAt = $startAt;
|
|
}
|
|
/**
|
|
* @return Cursor
|
|
*/
|
|
public function getStartAt()
|
|
{
|
|
return $this->startAt;
|
|
}
|
|
/**
|
|
* The filter to apply.
|
|
*
|
|
* @param Filter $where
|
|
*/
|
|
public function setWhere(Filter $where)
|
|
{
|
|
$this->where = $where;
|
|
}
|
|
/**
|
|
* @return Filter
|
|
*/
|
|
public function getWhere()
|
|
{
|
|
return $this->where;
|
|
}
|
|
}
|
|
|
|
// Adding a class alias for backwards compatibility with the previous class name.
|
|
class_alias(StructuredQuery::class, 'Google_Service_Firestore_StructuredQuery');
|