blob: 85391b677c739150999c457174326ef9c60e244f [file] [log] [blame]
<?php
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 Apache\Ignite\Query;
use Apache\Ignite\Exception\ClientException;
use Apache\Ignite\Internal\Binary\ClientOperation;
use Apache\Ignite\Internal\Binary\MessageBuffer;
use Apache\Ignite\Internal\Binary\BinaryCommunicator;
use Apache\Ignite\Internal\Query\Cursor;
/**
* Class representing a Scan query which returns the whole cache entries (key-value pairs).
*
* This version of the class does not support a possibility to specify a Filter object for the query.
* The query returns all entries from the entire cache or from the specified partition.
*/
class ScanQuery extends Query
{
private $partitionNumber;
/**
* Public constructor.
*
* Scan query settings have the following defaults:
* <pre>
* Scan Query setting : Default value
* Local query flag : false
* Cursor page size : 1024
* Partition number : -1 (entire cache)
* Filter object : null (not supported)
* </pre>
* Every setting (except Filter object) may be changed using set methods.
*/
public function __construct()
{
parent::__construct(ClientOperation::QUERY_SCAN);
$this->partitionNumber = -1;
}
/**
* Sets a partition number over which this query should iterate.
*
* If negative, the query will iterate over all partitions in the cache.
*
* @param int $partitionNumber partition number over which this query should iterate.
*
* @return ScanQuery the same instance of the ScanQuery.
*/
public function setPartitionNumber(int $partitionNumber): ScanQuery
{
$this->partitionNumber = $partitionNumber;
return $this;
}
// This is not the public API method, is not intended for usage by an application.
public function write(BinaryCommunicator $communicator, MessageBuffer $buffer): void
{
// filter
$communicator->writeObject($buffer, null);
$buffer->writeInteger($this->pageSize);
$buffer->writeInteger($this->partitionNumber);
$buffer->writeBoolean($this->local);
}
// This is not the public API method, is not intended for usage by an application.
public function getCursor(BinaryCommunicator $communicator, MessageBuffer $payload, $keyType = null, $valueType = null): CursorInterface
{
$cursor = new Cursor($communicator, ClientOperation::QUERY_SCAN_CURSOR_GET_PAGE, $payload, $keyType, $valueType);
$cursor->readId($payload);
return $cursor;
}
}